{"version":3,"sources":["ui-bootstrap-tpls.js","angularjs-nvd3-directives.js"],"names":["angular","module","directive","$animate","$q","$parse","$injector","$animateCss","has","get","link","scope","element","attrs","expandingExpr","expanding","expandedExpr","expanded","collapsingExpr","collapsing","collapsedExpr","collapsed","horizontal","css","cssTo","init","width","height","$eval","uibCollapse","addClass","attr","getScrollFromElement","scrollWidth","scrollHeight","expand","hasClass","resolve","then","removeClass","easing","overflow","to","start","expandDone","noop","collapse","collapseDone","$watch","shouldCollapse","restrict","elem","$observe","disabled","$set","constant","closeOthers","controller","$scope","$attrs","accordionConfig","this","groups","openGroup","isDefined","forEach","group","isOpen","addGroup","groupScope","that","push","$on","event","removeGroup","index","indexOf","splice","controllerAs","transclude","templateUrl","require","heading","panelClass","isDisabled","setHeading","accordionCtrl","openClass","value","toggleClass","toggleOpen","$event","which","id","$id","Math","floor","random","headingId","panelId","template","replace","accordionGroupCtrl","uibAccordionTransclude","querySelector","getHeaderSelectors","html","append","$element","$interpolate","$timeout","closeable","close","dismissOnTimeout","$parent","parseInt","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","uncheckableExpr","uibUncheckable","find","display","$render","equals","$modelValue","uibBtnRadio","on","isActive","uncheckable","$apply","$setViewValue","undefined","getTrueValue","getCheckboxValue","btnCheckboxTrue","getFalseValue","btnCheckboxFalse","attribute","defaultValue","$interval","self","slides","SLIDE_DIRECTION","currentIndex","active","currentInterval","isPlaying","destroyed","addSlide","slide","sort","a","b","length","isNumber","$currentTransition","setActive","select","findSlideIndex","play","getCurrentIndex","i","next","newIndex","noWrap","pause","prev","removeSlide","nextSlide","direction","nextIndex","goNext","indexOfSlide","isPrevDisabled","isNextDisabled","noPause","resetTimer","restartTimer","noTransition","enabled","$watchCollection","resetTransition","getSlideByIndex","l","extend","data","currentIdx","phase","off","cancel","interval","isNaN","timerFn","actual","carouselCtrl","animation","className","callback","beforeAddClass","done","stopped","directionClass","removeClassFn","bind","beforeRemoveClass","service","$log","$locale","dateFilter","orderByFilter","filterFilter","SPECIAL_CHARACTERS_REGEXP","localeId","formatCodeToRegex","parsers","formatters","key","regex","apply","year","formatter","date","_date","Date","setFullYear","abs","getFullYear","month","getMonth","test","DATETIME_FORMATS","MONTH","join","SHORTMONTH","getDate","DAY","SHORTDAY","hours","minutes","milliseconds","seconds","AMPMS","matches","match","sign","toInt","ERANAMES","ERAS","version","major","minor","STANDALONEMONTH","getFormatCodeToRegex","getParser","f","overrideParser","parser","isFunction","createParser","format","map","split","quoteIndex","inLiteral","n","matcher","RegExp","createFormatter","literalIdx","charAt","constructLiteralFormatter","constructFormatterFromIdx","endIdx","substr","currentPosStr","j","filter","isDate","reduce","str","parse","input","baseDate","isString","results","tzOffset","fields","dt","getTime","getHours","getMinutes","getSeconds","getMilliseconds","warn","mapper","call","datesetter","prototype","setUTCFullYear","timesetter","setUTCHours","setHours","isValid","toTimezone","fromTimezone","timezoneToOffset","addDateMinutes","convertTimezoneToLocal","timezone","fallback","requestedTimezoneOffset","setMinutes","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","ON_REGEXP","IS_REGEXP","dataPerTracked","compile","tElement","tAttrs","linkedScopes","instances","expToData","lastActivated","onExpMatches","uibIsClass","onExp","expsStr","exps","linkFn","exp","k","addForExp","removeScope","clazz","compareWithExp","watchFn","compareWithVal","newActivated","some","instance","thisVal","watcher","e","removedScope","targetScope","newWatchScope","datepickerMode","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","maxDate","maxMode","minDate","minMode","monthColumns","ngModelOptions","shortcutPropagation","showWeeks","yearColumns","yearRows","datepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","dateParser","watchListeners","datepickerOptions","modes","startingDay","FIRSTDAYOFWEEK","getOption","refreshView","uniqueId","ngDisabled","dateObject","compare","activeDate","activeDateId","uid","ngModelCtrl_","extractOptions","initDate","$isEmpty","$invalid","render","$viewValue","error","selectedDt","_refreshView","activeDt","$setValidity","createDateObject","model","today","time","label","selected","past","current","future","customClass","dateDisabled","mode","arr","size","arrays","setMode","$emit","$broadcast","move","step","years","months","toggleMode","keys","13","32","33","34","35","36","37","38","39","40","focusElement","focus","keydown","evt","shiftKey","altKey","preventDefault","stopPropagation","ctrlKey","handleKeyDown","shift","$options","createChild","DAYS_IN_MONTH","getDaysInMonth","ctrl","getDates","startDate","dates","Array","setDate","firstDayOfMonth","difference","getDay","numDisplayedFromPreviousMonth","firstDate","days","secondary","labels","abbr","full","title","rows","weekNumbers","thursdayIndex","numWeeks","curWeek","getISO8601WeekNumber","date1","date2","_date1","_date2","checkDate","setMonth","round","min","yearHeaderColspan","columns","range","getStartingYear","yearpickerInit","datepickerCtrl","daypickerCtrl","monthpickerCtrl","factory","$document","$window","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","hidden","PLACEMENT_REGEX","auto","primary","vertical","BODY_REGEX","getRawNode","nodeName","parseStyle","parseFloat","isFinite","offsetParent","documentElement","isStaticPositioned","el","getComputedStyle","position","scrollbarWidth","isBody","isUndefined","bodyElem","innerWidth","clientWidth","scrollElem","offsetWidth","remove","scrollbarPadding","elemStyle","paddingRight","paddingBottom","scrollParent","tagName","widthOverflow","right","originalRight","heightOverflow","clientHeight","bottom","originalBottom","isScrollable","includeHidden","overflowRegex","overflowY","overflowX","includeSelf","documentEl","excludeStatic","parentElement","spStyle","includeMagins","elemOffset","offset","top","marginTop","left","marginLeft","parent","parentOffset","clientTop","scrollTop","clientLeft","scrollLeft","offsetHeight","elemBCR","getBoundingClientRect","pageYOffset","pageXOffset","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","paddingTop","paddingLeft","parsePlacement","placement","autoPlace","positionElements","hostElem","targetElem","appendToBody","targetWidth","prop","targetHeight","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","marginRight","marginBottom","xOverflow","yOverflow","adjustTop","placementClasses","containerPosition","initialHeight","currentHeight","positionArrow","innerElem","isTooltip","arrowElem","arrowCss","borderProp","borderWidth","borderRadiusProp","borderRadius","altInputFormats","clearText","closeOnDateSelection","closeText","currentText","nowText","datepickerPopup","datepickerPopupTemplateUrl","datepickerTemplateUrl","html5Types","datetime-local","onOpenFocus","showButtonBar","disabledNowButton","disabledClearButton","$compile","$rootScope","$position","datepickerPopupConfig","$datepickerPopupLiteralWarning","cache","isHtml5DateInput","dateFormat","popupEl","datepickerEl","scrollParentEl","ngModel","$popup","_ngModel_","datepickerAppendToBody","type","uibDatepickerPopup","oldValue","newDateFormat","Error","ng-model","ng-change","template-url","children","$$parserName","$validators","validator","$parsers","unshift","parseDate","$formatters","$viewChangeListeners","parseDateString","inputKeydownBind","after","$$phase","documentClickBind","positionPopup","getText","now","dateSelection","val","popupPlacement","cameltoDash","string","$1","toLowerCase","viewValue","modelValue","ngRequired","popup","dpContainsTarget","contains","target","popupContainsTarget","dpElement","isObject","debounceTime","timeoutPromise","args","slice","arguments","createNew","entries","Object","hasKey","put","values","idx","appendToOpenClass","$$multiMap","openScope","openedContainers","isOnlyOpen","dropdownScope","appendTo","openedDropdowns","openDropdown","toClose","dropdown","open","closeDropdown","openedScopes","keybindFilter","dropdownToClose","getAutoClose","toggleElement","getToggleElement","dropdownElement","getDropdownElement","focusToggleElement","dropdownElementTargeted","toggleElementTargeted","isKeynavEnabled","focusDropdownEntry","dropdownConfig","uibDropdownService","$templateRequest","$new","templateScope","getIsOpen","setIsOpen","toggleInvoker","onToggle","keynavEnabled","selectedOption","body","assign","keyboardNav","toggle","autoClose","getElement","keyCode","elems","dropdownMenu","eq","removeDropdownMenu","wasOpen","dropdownAppendTo","appendToEl","dropdownAppendToBody","appendToBodyValue","pos","rightalign","window","appendOffset","openContainer","dropdownOpenClass","hasOpenClass","dropdownMenuTemplateUrl","tplContent","trim","newEl","replaceWith","$destroy","dropdownCtrl","dropdownNested","tplUrl","toggleDropdown","aria-haspopup","aria-expanded","stack","add","removeTop","pop","provider","resolver","setResolver","$get","invocables","locals","promises","isArray","invoke","all","resolves","resolveObj","resolveIter","$modalStack","backdropClass","modalInClass","NOW_CLOSING_EVENT","setIsAsync","modalOptions","windowTopClass","modal","getTop","backdrop","currentTarget","dismiss","$isRendered","modalRenderDeferObj","defer","$$postDigest","promise","animationPromise","when","modalRendered","activeElement","inputWithAutofocus","modalAnimation","uibModalAnimationClass","clone","empty","enter","$$stackedMap","$uibPosition","OPENED_MODAL_CLASS","backdropDomEl","backdropScope","openedWindows","openedClasses","topModalIndex","previousTopOpenedModal","ARIA_HIDDEN_ATTRIBUTE_NAME","tabbableSelector","SNAKE_CASE_REGEXP","snake_case","name","separator","letter","isVisible","getClientRects","backdropIndex","topBackdropIndex","opened","newBackdropIndex","removeModalWindow","modalInstance","elementToReceiveFocus","modalWindow","appendToElement","modalDomEl","removeAfterAnimate","modalScope","modalBodyClass","openedClass","areAnyOpen","toggleTopWindowClass","closedDeferred","checkRemoveBackdrop","toggleSwitch","backdropScopeRef","domEl","asyncDeferred","asyncPromise","asyncDone","afterAnimating","leave","keydownListener","isDefaultPrevented","keyboard","list","loadFocusElementList","focusChanged","isFocusInFirstItem","isModalFocused","focusLastFocusableElement","isFocusInLastItem","focusFirstFocusableElement","modalOpener","deferred","renderDeferred","currBackdropIndex","class","ng-style","uib-modal-animation-class","modal-in-class","content","component","document","createElement","modal-instance","angularDomEl","windowTemplateUrl","window-top-class","role","aria-labelledby","ariaLabelledBy","aria-describedby","ariaDescribedBy","animate","tabindex","windowClass","$$topModalIndex","applyAriaHidden","getSiblings","sibling","elemIsAlreadyHidden","getAttribute","ariaHiddenCount","setAttribute","child","broadcastClosing","resultOrReason","closing","defaultPrevented","unhideBackgroundElements","querySelectorAll","hiddenEl","newHiddenCount","removeAttribute","result","$$uibDestructionScheduled","reason","reject","dismissAll","topModal","srcElement","modalDomE1","elements","$modalProvider","options","$controller","$uibResolve","$modal","getTemplatePromise","promiseChain","getPromiseChain","modalResultDeferred","modalOpenedDeferred","modalClosedDeferred","modalRenderDeferred","closed","rendered","templateAndResolvePromise","resolveWithTemplate","samePromise","resolveSuccess","tplAndVars","providedScope","$close","$dismiss","ctrlInstance","ctrlInstantiate","ctrlLocals","constructLocals","bindToController","$resolve","$onInit","obj","instanceOnScope","injectable","$uibModalInstance","resolveError","create","setNumPages","numPages","_watchers","config","itemsPerPage","totalPages","calculateTotalPages","updatePage","newTotal","oldTotal","ceil","totalItems","max","page","selectPage","clickAllowed","blur","noPrevious","noNext","uibPaging","uibPagerConfig","align","previousText","nextText","paginationCtrl","uibPaginationConfig","maxSize","rotate","forceEllipses","boundaryLinkNumbers","pageLabel","$page","identity","boundaryLinks","directionLinks","makePage","number","text","getPages","currentPage","pages","startPage","endPage","isMaxSized","previousPageSet","secondPageLink","firstPageLink","nextPageSet","secondToLastPageLink","lastPageLink","originalRender","firstText","lastText","defaultOptions","placementClassPrefix","popupDelay","popupCloseDelay","useContentExp","triggerMap","mouseenter","click","outsideClick","none","globalOptions","setTriggers","triggers","regexp","openedTooltips","keypressListener","last","$tooltip","ttType","prefix","defaultTriggerShow","getTriggers","trigger","show","hide","directiveName","startSym","startSymbol","endSym","endSymbol","tElem","tooltipLinker","tooltipCtrl","tooltip","tooltipLinkedScope","transitionTimeout","showTimeout","hideTimeout","positionTimeout","adjustmentTimeout","hasEnableExp","ttScope","repositionScheduled","isOpenParse","contentParse","observers","lastPlacement","positionTooltip","ttPosition","elementPos","adjustment","origScope","toggleTooltipBind","showTooltipBind","hideTooltipBind","cancelHide","prepareTooltip","cancelShow","createTooltip","$evalAsync","assignIsOpen","removeTooltip","prepObservers","unregisterObservers","popupClass","delay","closeDelay","contentExp","observer","bodyHideTooltipBind","hideOnEscapeKey","unregisterTriggers","prepTriggers","showTriggers","hideTriggers","appendToBodyVal","appendKey","onDestroyTooltip","$sce","tooltipTemplateTranscludeScope","changeCounter","currentScope","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","uibTooltipTemplateTransclude","src","thisChangeId","response","newScope","tooltipAnimationClass","$uibTooltip","originScope","uibTitle","progressConfig","bars","getMaxOrDefault","addBar","bar","transition","recalculatePercentage","totalPercentage","total","percent","toFixed","removeBar","maxParam","progressCtrl","stateOn","stateOff","enableReset","titles","ratingConfig","tmpTitles","ratingStates","buildTemplateObjects","states","getTitle","rate","readonly","newViewValue","onHover","reset","onLeave","onKeydown","ratingCtrl","oldIndex","tabs","previousIndex","findTabIndex","previousSelected","tab","onDeselect","$selectedIndex","onSelect","addTab","t1","t2","newActiveIndex","removeTab","newActiveTabIndex","justified","classes","elm","tabsetCtrl","disable","t","$transcludeFn","updateHeadingElement","uibTabContentTransclude","contents","node","isTabHeading","headingElement","hasAttribute","hourStep","minuteStep","secondStep","showMeridian","showSeconds","meridians","readonlyInput","mousewheel","arrowkeys","showSpinners","timepickerConfig","hoursModelCtrl","minutesModelCtrl","secondsModelCtrl","watchers","padHours","removeAttr","inputs","hoursInputEl","minutesInputEl","secondsInputEl","setupMousewheelEvents","setupArrowkeyEvents","setupInputEvents","noIncrementHours","incrementedSelected","addMinutes","noDecrementHours","decrementedSelected","noIncrementMinutes","noDecrementMinutes","noIncrementSeconds","addSeconds","noDecrementSeconds","noToggleMeridian","$error","getHoursFromTemplate","getMinutesFromTemplate","refresh","updateTemplate","valid","meridian","getSecondsFromTemplate","pad","noPad","toString","isScrollingUp","originalEvent","delta","wheelDelta","deltaY","detail","incrementHours","decrementHours","incrementMinutes","decrementMinutes","incrementSeconds","decrementSeconds","updateHours","updateMinutes","updateSeconds","invalidate","invalidHours","invalidMinutes","invalidSeconds","$setDirty","$setTouched","modelIsEmpty","makeValid","setSeconds","keyboardChange","addSecondsToSelected","newDate","toggleMeridian","uibTimepickerConfig","timepickerCtrl","TYPEAHEAD_REGEXP","itemName","source","viewMapper","modelMapper","originalScope","$$debounce","typeaheadParser","HOT_KEYS","eventDebounceTime","modelCtrl","minLength","typeaheadMinLength","newVal","waitTime","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","isSelectEvent","typeaheadShouldSelect","vals","onSelectCallback","typeaheadOnSelect","isSelectOnBlur","typeaheadSelectOnBlur","isNoResultsSetter","typeaheadNoResults","inputFormatter","typeaheadInputFormatter","typeaheadAppendToBody","typeaheadAppendTo","focusFirst","typeaheadFocusFirst","selectOnExact","typeaheadSelectOnExact","isOpenSetter","typeaheadIsOpen","showHint","typeaheadShowHint","parsedModel","invokeModelSetter","$setModelValue","newValue","$$$p","parserResult","uibTypeahead","hasFocus","offDestroy","popupId","aria-autocomplete","aria-owns","inputsContainer","hintInputElem","border-color","box-shadow","opacity","background","color","vertical-align","background-color","popUpEl","move-in-progress","query","assign-is-open","debounce","typeaheadTemplateUrl","typeaheadPopupTemplateUrl","resetHint","resetMatches","activeIdx","getMatchId","inputIsExactMatch","inputValue","toUpperCase","getMatchesAsync","onCurrentRequest","recalculatePosition","debounceUpdate","firstLabel","fireRecalculating","debouncedRecalculate","moveInProgress","$digest","scheduleSearchWithTimeout","cancelPreviousTimeout","item","$item","$model","$label","typeaheadFocusOnSelect","shouldSelect","parentNode","offsetTop","editable","dismissClickHandler","_modelCtrl","candidateViewValue","emptyViewValue","popupTemplateUrl","isDropdownOpen","matchIdx","selectActive","selectMatch","tplEl","isSanitizePresent","escapeRegexp","queryToEscape","containsHtml","matchItem","trustAsHtml","run","$templateCache","$$csp","noInlineStyle","$$uibCarouselCss","prepend","$$uibDatepickerCss","$$uibPositionCss","$$uibDatepickerpopupCss","$$uibTooltipCss","$$uibTimepickerCss","$$uibTypeaheadCss","margin","x","y","styles","shapes","padding","widthTracker","heightTracker","columnTracker","paddingStr","svgNamespace","svg","g","createElementNS","appendChild","hasOwnProperty","shpe","shape","textSize","g1","createTextNode","updatestate","radiobuttonmode","chart","d3","datum","duration","nv","addGraph","generate","models","legend","rightAlign","updateState","radioButtonMode","utils","defaultColor","d","windowResize","update","initializeLegendMargin","legendmargin","configureLegend","showlegend","legendwidth","legendheight","legendkey","legendcolor","legendalign","legendrightalign","legendupdatestate","legendradiobuttonmode","processEvents","dispatch","tooltipShow","tooltipHide","beforeUpdate","stateChange","changeState","lines","stacked","interactiveLayer","elementMouseout","elementMousemove","discretebar","multibar","pie","scatter","bullet","controls","legendClick","configureXaxis","xaxisorient","xAxis","orient","xaxisticks","scale","ticks","xaxistickvalues","tickValues","xaxisticksubdivide","tickSubdivide","xaxisticksize","tickSize","xaxistickpadding","tickPadding","xaxistickformat","tickFormat","xaxislabel","axisLabel","xaxisscale","xaxisdomain","xDomain","xaxisrange","xRange","xaxisrangeband","rangeBand","xaxisrangebands","rangeBands","xaxisshowmaxmin","showMaxMin","xaxishighlightzero","highlightZero","xaxisrotatelabels","rotateLabels","xaxisstaggerlabels","staggerLabels","xaxislabeldistance","axisLabelDistance","configureX2axis","x2axisorient","x2Axis","x2axisticks","x2axistickvalues","x2axisticksubdivide","x2axisticksize","x2axistickpadding","x2axistickformat","x2axislabel","x2axisscale","x2axisdomain","domain","x2axisrange","x2axisrangeband","x2axisrangebands","x2axisshowmaxmin","x2axishighlightzero","x2axisrotatelables","x2axisstaggerlabels","x2axislabeldistance","configureYaxis","yaxisorient","yAxis","yaxisticks","yaxistickvalues","yaxisticksubdivide","yaxisticksize","yaxistickpadding","yaxistickformat","yaxislabel","yaxisscale","yaxisdomain","yDomain","yaxisrange","yRange","yaxisrangeband","yaxisrangebands","yaxisshowmaxmin","yaxishighlightzero","yaxisrotatelabels","yaxisrotateylabel","rotateYLabel","yaxisstaggerlabels","yaxislabeldistance","configureY1axis","y1axisticks","y1Axis","y1axistickvalues","y1axisticksubdivide","y1axisticksize","y1axistickpadding","y1axistickformat","y1axislabel","y1axisscale","yScale","y1axisdomain","y1axisrange","y1axisrangeband","y1axisrangebands","y1axisshowmaxmin","y1axishighlightzero","y1axisrotatelabels","y1axisrotateylabel","y1axisstaggerlabels","staggerlabels","y1axislabeldistance","configureY2axis","y2axisticks","y2Axis","y2axistickvalues","y2axisticksubdivide","y2axisticksize","y2axistickpadding","y2axistickformat","y2axislabel","y2axisscale","y2axisdomain","y2axisrange","y2axisrangeband","y2axisrangebands","y2axisshowmaxmin","y2axishighlightzero","y2axisrotatelabels","y2axisrotateylabel","y2axisstaggerlabels","y2axislabeldistance","initializeMargin","checkElementID","dataAttributeChartID","transitionduration","tooltips","showxaxis","showyaxis","rightalignyaxis","defaultstate","nodata","tooltipcontent","forcex","forcey","isArea","interactive","clipedge","clipvoronoi","interpolate","useinteractiveguideline","xaxisrotateylabel","objectequality","d3Call","lineChart","forceX","forceY","showLegend","showXAxis","showYAxis","rightAlignYAxis","noData","clipEdge","clipVoronoi","isarea","area","useInteractiveGuideline","tooltipContent","usevoronoi","average","rescaley","cumulativeLineChart","useVoronoi","category10","showcontrols","forcesize","style","order","xScale","sizeDomain","xaxisaxislabeldistance","stackedAreaChart","forceSize","showControls","xscale","yscale","xdomain","ydomain","sizedomain","reducexticks","rotatelabels","multiBarChart","reduceXTicks","showvalues","valueformat","discreteBarChart","showValues","valueFormat","highlightPoint","clearHighlights","historicalBarChart","multiBarHorizontalChart","showlabels","donutLabelsOutside","pieLabelsOutside","labelType","donut","donutRatio","labelthreshold","description","pieChart","showLabels","labelThreshold","labeltype","pielabelsoutside","donutlabelsoutside","donutratio","showDistX","showDistY","fisheye","xPadding","yPadding","tooltipXContent","tooltipYContent","transitionDuration","onlyCircles","xrange","yrange","sizerange","zscale","scatterChart","tooltipxcontent","tooltipycontent","showdistx","showdisty","xpadding","ypadding","sizeRange","zScale","scatterPlusLineChart","forceY2","y1axisorient","y1axisaxislabeldistance","y2axisorient","y2axisaxislabeldistance","linePlusBarChart","height2","margin2","defined","x2axisrotateylabel","lineWithFocusChart","ranges","markers","measures","tickformat","bulletChart","showvalue","alignvalue","rightalignvalue","xtickformat","ytickformat","sparklinePlus","xTickFormat","yTickFormat","getColor","showValue","alignValue","rightAlignValue","selectedChart","sLineSelection","bandlineData","bandLines","bandlineProperties","twentyFithPercentile","median","seventyFithPercentile","selectAll","sortedValues","quantile"],"mappings":"AAOAA,QAAAC,OAAA,eAAA,CAAA,oBAAA,wBAAA,wBAAA,yBAAA,qBAAA,uBAAA,wBAAA,0BAAA,uBAAA,0BAAA,wBAAA,+BAAA,wBAAA,wBAAA,wBAAA,0BAAA,qBAAA,sBAAA,qBAAA,0BAAA,uBAAA,uBAAA,2BAAA,sBAAA,oBAAA,0BAAA,2BACAD,QAAAC,OAAA,oBAAA,CAAA,8CAAA,wCAAA,gCAAA,sCAAA,mCAAA,0CAAA,mCAAA,qCAAA,oCAAA,0CAAA,iCAAA,gCAAA,0CAAA,+CAAA,0CAAA,mDAAA,yCAAA,6CAAA,oCAAA,oCAAA,yCAAA,4CAAA,kCAAA,6BAAA,gCAAA,0CAAA,8CAAA,gDACAD,QAAAC,OAAA,wBAAA,IAEAC,UAAA,cAAA,CAAA,WAAA,KAAA,SAAA,YAAA,SAAAC,SAAAC,GAAAC,OAAAC,WACA,IAAAC,YAAAD,UAAAE,IAAA,eAAAF,UAAAG,IAAA,eAAA,KACA,MAAA,CACAC,KAAA,SAAAC,MAAAC,QAAAC,OACA,IAAAC,cAAAT,OAAAQ,MAAAE,WACAC,aAAAX,OAAAQ,MAAAI,UACAC,eAAAb,OAAAQ,MAAAM,YACAC,cAAAf,OAAAQ,MAAAQ,WACAC,WAAA,MACAC,IAAA,GACAC,MAAA,GAEAC,OAEA,SAAAA,OACAH,cAAA,eAAAT,OACA,GAAAS,WAAA,CACAC,IAAA,CACAG,MAAA,IAEAF,MAAA,CAAAE,MAAA,SACA,CACAH,IAAA,CACAI,OAAA,IAEAH,MAAA,CAAAG,OAAA,KAEA,IAAAhB,MAAAiB,MAAAf,MAAAgB,aAAA,CACAjB,QAAAkB,SAAA,MACAA,SAAA,YACAC,KAAA,gBAAA,MACAA,KAAA,cAAA,OACAR,IAAAA,MAIA,SAAAS,qBAAApB,SACA,GAAAU,WAAA,CACA,MAAA,CAAAI,MAAAd,QAAAqB,YAAA,MAEA,MAAA,CAAAN,OAAAf,QAAAsB,aAAA,MAGA,SAAAC,SACA,GAAAvB,QAAAwB,SAAA,aAAAxB,QAAAwB,SAAA,MAAA,CACA,OAGAhC,GAAAiC,QAAAvB,cAAAH,QACA2B,KAAA,WACA1B,QAAA2B,YAAA,YACAT,SAAA,cACAC,KAAA,gBAAA,MACAA,KAAA,cAAA,OAEA,GAAAxB,YAAA,CACAA,YAAAK,QAAA,CACAkB,SAAA,KACAU,OAAA,OACAjB,IAAA,CACAkB,SAAA,UAEAC,GAAAV,qBAAApB,QAAA,MACA+B,QAAA,WAAAC,gBACA,CACAzC,SAAA2B,SAAAlB,QAAA,KAAA,CACAW,IAAA,CACAkB,SAAA,UAEAC,GAAAV,qBAAApB,QAAA,MACA0B,KAAAM,cAEA5C,QAAA6C,MAGA,SAAAD,aACAhC,QAAA2B,YAAA,cACAT,SAAA,YACAP,IAAAA,KACAP,aAAAL,OAGA,SAAAmC,WACA,IAAAlC,QAAAwB,SAAA,cAAAxB,QAAAwB,SAAA,MAAA,CACA,OAAAW,eAGA3C,GAAAiC,QAAAnB,eAAAP,QACA2B,KAAA,WACA1B,QAIAW,IAAAS,qBAAApB,QAAA,KAGA2B,YAAA,YACAT,SAAA,cACAC,KAAA,gBAAA,OACAA,KAAA,cAAA,MAEA,GAAAxB,YAAA,CACAA,YAAAK,QAAA,CACA2B,YAAA,KACAG,GAAAlB,QACAmB,QAAA,WAAAI,kBACA,CACA5C,SAAAoC,YAAA3B,QAAA,KAAA,CACA8B,GAAAlB,QACAc,KAAAS,gBAEA/C,QAAA6C,MAGA,SAAAE,eACAnC,QAAAW,IAAAC,OACAZ,QAAA2B,YAAA,cACAT,SAAA,YACAV,cAAAT,OAGAA,MAAAqC,OAAAnC,MAAAgB,YAAA,SAAAoB,gBACA,GAAAA,eAAA,CACAH,eACA,CACAX,iBAOAnC,QAAAC,OAAA,wBAAA,IAEAC,UAAA,oBAAA,WACA,MAAA,CACAgD,SAAA,IACAxC,KAAA,SAAAC,MAAAwC,KAAAtC,OACAA,MAAAuC,SAAA,WAAA,SAAAC,UACAxC,MAAAyC,KAAA,WAAAD,UAAA,EAAA,YAMArD,QAAAC,OAAA,yBAAA,CAAA,wBAAA,0BAEAsD,SAAA,qBAAA,CACAC,YAAA,OAGAC,WAAA,yBAAA,CAAA,SAAA,SAAA,qBAAA,SAAAC,OAAAC,OAAAC,iBAEAC,KAAAC,OAAA,GAGAD,KAAAL,YAAA,SAAAO,WACA,IAAAP,YAAAxD,QAAAgE,UAAAL,OAAAH,aACAE,OAAA9B,MAAA+B,OAAAH,aAAAI,gBAAAJ,YACA,GAAAA,YAAA,CACAxD,QAAAiE,QAAAJ,KAAAC,OAAA,SAAAI,OACA,GAAAA,QAAAH,UAAA,CACAG,MAAAC,OAAA,WAOAN,KAAAO,SAAA,SAAAC,YACA,IAAAC,KAAAT,KACAA,KAAAC,OAAAS,KAAAF,YAEAA,WAAAG,IAAA,WAAA,SAAAC,OACAH,KAAAI,YAAAL,eAKAR,KAAAa,YAAA,SAAAR,OACA,IAAAS,MAAAd,KAAAC,OAAAc,QAAAV,OACA,GAAAS,SAAA,EAAA,CACAd,KAAAC,OAAAe,OAAAF,MAAA,QAOAzE,UAAA,eAAA,WACA,MAAA,CACAuD,WAAA,yBACAqB,aAAA,YACAC,WAAA,KACAC,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,4CAMA9E,UAAA,oBAAA,WACA,MAAA,CACA+E,QAAA,gBACAF,WAAA,KACA7B,SAAA,IACA8B,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,+CAEArE,MAAA,CACAuE,QAAA,IACAC,WAAA,KACAhB,OAAA,KACAiB,WAAA,MAEA3B,WAAA,WACAI,KAAAwB,WAAA,SAAAzE,SACAiD,KAAAqB,QAAAtE,UAGAF,KAAA,SAAAC,MAAAC,QAAAC,MAAAyE,eACA1E,QAAAkB,SAAA,SACAwD,cAAAlB,SAAAzD,OAEAA,MAAA4E,UAAA1E,MAAA0E,WAAA,aACA5E,MAAAwE,WAAAtE,MAAAsE,YAAA,gBACAxE,MAAAqC,OAAA,SAAA,SAAAwC,OACA5E,QAAA6E,YAAA9E,MAAA4E,YAAAC,OACA,GAAAA,MAAA,CACAF,cAAA9B,YAAA7C,UAIAA,MAAA+E,WAAA,SAAAC,QACA,IAAAhF,MAAAyE,WAAA,CACA,IAAAO,QAAAA,OAAAC,QAAA,GAAA,CACAjF,MAAAwD,QAAAxD,MAAAwD,UAKA,IAAA0B,GAAA,kBAAAlF,MAAAmF,IAAA,IAAAC,KAAAC,MAAAD,KAAAE,SAAA,KACAtF,MAAAuF,UAAAL,GAAA,OACAlF,MAAAwF,QAAAN,GAAA,aAMA3F,UAAA,sBAAA,WACA,MAAA,CACA6E,WAAA,KACAqB,SAAA,GACAC,QAAA,KACApB,QAAA,qBACAvE,KAAA,SAAAC,MAAAC,QAAAC,MAAAyF,mBAAAvB,YAIAuB,mBAAAjB,WAAAN,WAAApE,MAAAX,QAAA6C,WAOA3C,UAAA,yBAAA,WACA,MAAA,CACA+E,QAAA,qBACAvE,KAAA,SAAAC,MAAAC,QAAAC,MAAA4C,YACA9C,MAAAqC,OAAA,WAAA,OAAAS,WAAA5C,MAAA0F,yBAAA,SAAArB,SACA,GAAAA,QAAA,CACA,IAAA/B,KAAAnD,QAAAY,QAAAA,QAAA,GAAA4F,cAAAC,uBACAtD,KAAAuD,KAAA,IACAvD,KAAAwD,OAAAzB,cAMA,SAAAuB,qBACA,MAAA,wBACA,6BACA,0BACA,0BACA,0BACA,+BACA,8BAIAzG,QAAAC,OAAA,qBAAA,IAEAwD,WAAA,qBAAA,CAAA,SAAA,WAAA,SAAA,eAAA,WAAA,SAAAC,OAAAkD,SAAAjD,OAAAkD,aAAAC,UACApD,OAAAqD,YAAApD,OAAAqD,MACAJ,SAAA9E,SAAA,SACA6B,OAAAL,KAAA,OAAA,SACA,GAAAI,OAAAqD,UAAA,CACAH,SAAA9E,SAAA,qBAGA,IAAAmF,iBAAAjH,QAAAgE,UAAAL,OAAAsD,kBACAJ,aAAAlD,OAAAsD,iBAAAJ,CAAAnD,OAAAwD,SAAA,KAEA,GAAAD,iBAAA,CACAH,SAAA,WACApD,OAAAsD,SACAG,SAAAF,iBAAA,SAIA/G,UAAA,WAAA,WACA,MAAA,CACAuD,WAAA,qBACAqB,aAAA,QACA5B,SAAA,IACA8B,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,iCAEAD,WAAA,KACApE,MAAA,CACAqG,MAAA,QAKAhH,QAAAC,OAAA,uBAAA,IAEAsD,SAAA,kBAAA,CACA6D,YAAA,SACAC,YAAA,UAGA5D,WAAA,uBAAA,CAAA,kBAAA,SAAA6D,cACAzD,KAAAuD,YAAAE,aAAAF,aAAA,SACAvD,KAAAwD,YAAAC,aAAAD,aAAA,WAGAnH,UAAA,cAAA,CAAA,SAAA,SAAAG,QACA,MAAA,CACA4E,QAAA,CAAA,cAAA,WACAxB,WAAA,uBACAqB,aAAA,UACApE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAAC,YAAAD,MAAA,GAAAE,YAAAF,MAAA,GACA,IAAAG,gBAAArH,OAAAQ,MAAA8G,gBAEA/G,QAAAgH,KAAA,SAAArG,IAAA,CAAAsG,QAAA,SAGAJ,YAAAK,QAAA,WACAlH,QAAA6E,YAAA+B,YAAAJ,YAAApH,QAAA+H,OAAAN,YAAAO,YAAArH,MAAAiB,MAAAf,MAAAoH,gBAIArH,QAAAsH,GAAAV,YAAAH,YAAA,WACA,GAAAxG,MAAAwC,SAAA,CACA,OAGA,IAAA8E,SAAAvH,QAAAwB,SAAAoF,YAAAJ,aAEA,IAAAe,UAAAnI,QAAAgE,UAAAnD,MAAAuH,aAAA,CACAzH,MAAA0H,OAAA,WACAZ,YAAAa,cAAAH,SAAA,KAAAxH,MAAAiB,MAAAf,MAAAoH,cACAR,YAAAK,eAKA,GAAAjH,MAAA8G,eAAA,CACAhH,MAAAqC,OAAA0E,gBAAA,SAAAU,aACAvH,MAAAyC,KAAA,cAAA8E,YAAA,GAAAG,mBAOArI,UAAA,iBAAA,WACA,MAAA,CACA+E,QAAA,CAAA,iBAAA,WACAxB,WAAA,uBACAqB,aAAA,SACApE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAAC,YAAAD,MAAA,GAAAE,YAAAF,MAAA,GAEA3G,QAAAgH,KAAA,SAAArG,IAAA,CAAAsG,QAAA,SAEA,SAAAW,eACA,OAAAC,iBAAA5H,MAAA6H,gBAAA,MAGA,SAAAC,gBACA,OAAAF,iBAAA5H,MAAA+H,iBAAA,OAGA,SAAAH,iBAAAI,UAAAC,cACA,OAAA9I,QAAAgE,UAAA6E,WAAAlI,MAAAiB,MAAAiH,WAAAC,aAIArB,YAAAK,QAAA,WACAlH,QAAA6E,YAAA+B,YAAAJ,YAAApH,QAAA+H,OAAAN,YAAAO,YAAAQ,kBAIA5H,QAAAsH,GAAAV,YAAAH,YAAA,WACA,GAAAxG,MAAAwC,SAAA,CACA,OAGA1C,MAAA0H,OAAA,WACAZ,YAAAa,cAAA1H,QAAAwB,SAAAoF,YAAAJ,aAAAuB,gBAAAH,gBACAf,YAAAK,kBAOA9H,QAAAC,OAAA,wBAAA,IAEAwD,WAAA,wBAAA,CAAA,SAAA,WAAA,YAAA,WAAA,WAAA,SAAAC,OAAAkD,SAAAmC,UAAAjC,SAAA3G,UACA,IAAA6I,KAAAnF,KACAoF,OAAAD,KAAAC,OAAAvF,OAAAuF,OAAA,GACAC,gBAAA,qBACAC,aAAAzF,OAAA0F,OACAC,gBAAAC,UAEA,IAAAC,UAAA,MACA3C,SAAA9E,SAAA,YAEAkH,KAAAQ,SAAA,SAAAC,MAAA7I,SACAqI,OAAA1E,KAAA,CACAkF,MAAAA,MACA7I,QAAAA,UAEAqI,OAAAS,KAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAF,MAAA9E,OAAAiF,EAAAH,MAAA9E,QAGA,GAAA8E,MAAA9E,QAAAjB,OAAA0F,QAAAH,OAAAY,SAAA,IAAA7J,QAAA8J,SAAApG,OAAA0F,QAAA,CACA,GAAA1F,OAAAqG,mBAAA,CACArG,OAAAqG,mBAAA,KAGAZ,aAAAM,MAAA9E,MACAjB,OAAA0F,OAAAK,MAAA9E,MACAqF,UAAAb,cACAH,KAAAiB,OAAAhB,OAAAiB,eAAAT,SACA,GAAAR,OAAAY,SAAA,EAAA,CACAnG,OAAAyG,UAKAnB,KAAAoB,gBAAA,WACA,IAAA,IAAAC,EAAA,EAAAA,EAAApB,OAAAY,OAAAQ,IAAA,CACA,GAAApB,OAAAoB,GAAAZ,MAAA9E,QAAAwE,aAAA,CACA,OAAAkB,KAKArB,KAAAsB,KAAA5G,OAAA4G,KAAA,WACA,IAAAC,UAAAvB,KAAAoB,kBAAA,GAAAnB,OAAAY,OAEA,GAAAU,WAAA,GAAA7G,OAAA8G,SAAA,CACA9G,OAAA+G,QACA,OAGA,OAAAzB,KAAAiB,OAAAhB,OAAAsB,UAAA,SAGAvB,KAAA0B,KAAAhH,OAAAgH,KAAA,WACA,IAAAH,SAAAvB,KAAAoB,kBAAA,EAAA,EAAAnB,OAAAY,OAAA,EAAAb,KAAAoB,kBAAA,EAEA,GAAA1G,OAAA8G,UAAAD,WAAAtB,OAAAY,OAAA,EAAA,CACAnG,OAAA+G,QACA,OAGA,OAAAzB,KAAAiB,OAAAhB,OAAAsB,UAAA,SAGAvB,KAAA2B,YAAA,SAAAlB,OACA,IAAA9E,MAAAuF,eAAAT,OAGAR,OAAApE,OAAAF,MAAA,GACA,GAAAsE,OAAAY,OAAA,GAAAV,eAAAxE,MAAA,CACA,GAAAA,OAAAsE,OAAAY,OAAA,CACAV,aAAAF,OAAAY,OAAA,EACAnG,OAAA0F,OAAAD,aACAa,UAAAb,cACAH,KAAAiB,OAAAhB,OAAAA,OAAAY,OAAA,QACA,CACAV,aAAAxE,MACAjB,OAAA0F,OAAAD,aACAa,UAAAb,cACAH,KAAAiB,OAAAhB,OAAAtE,cAEA,GAAAwE,aAAAxE,MAAA,CACAwE,eACAzF,OAAA0F,OAAAD,aAIA,GAAAF,OAAAY,SAAA,EAAA,CACAV,aAAA,KACAzF,OAAA0F,OAAA,OAKAJ,KAAAiB,OAAAvG,OAAAuG,OAAA,SAAAW,UAAAC,WACA,IAAAC,UAAAZ,eAAAU,UAAAnB,OAEA,GAAAoB,YAAAtC,UAAA,CACAsC,UAAAC,UAAA9B,KAAAoB,kBAAA,OAAA,OAGA,GAAAQ,UAAAnB,MAAA9E,QAAAwE,eACAzF,OAAAqG,mBAAA,CACAgB,OAAAH,UAAAnB,MAAAqB,UAAAD,aAKAnH,OAAAsH,aAAA,SAAAvB,OACA,OAAAA,MAAAA,MAAA9E,OAGAjB,OAAAyE,SAAA,SAAAsB,OACA,OAAA/F,OAAA0F,SAAAK,MAAAA,MAAA9E,OAGAjB,OAAAuH,eAAA,WACA,OAAAvH,OAAA0F,SAAA,GAAA1F,OAAA8G,UAGA9G,OAAAwH,eAAA,WACA,OAAAxH,OAAA0F,SAAAH,OAAAY,OAAA,GAAAnG,OAAA8G,UAGA9G,OAAA+G,MAAA,WACA,IAAA/G,OAAAyH,QAAA,CACA7B,UAAA,MACA8B,eAIA1H,OAAAyG,KAAA,WACA,IAAAb,UAAA,CACAA,UAAA,KACA+B,iBAIAzE,SAAAsB,GAAA,aAAAxE,OAAA+G,OACA7D,SAAAsB,GAAA,aAAAxE,OAAAyG,MAEAzG,OAAAc,IAAA,WAAA,WACA+E,UAAA,KACA6B,eAGA1H,OAAAV,OAAA,eAAA,SAAAsI,cACAnL,SAAAoL,QAAA3E,UAAA0E,gBAGA5H,OAAAV,OAAA,WAAAqI,cAEA3H,OAAA8H,iBAAA,SAAAC,iBAEA/H,OAAAV,OAAA,SAAA,SAAA2B,OACA,GAAA3E,QAAA8J,SAAAnF,QAAAwE,eAAAxE,MAAA,CACA,IAAA,IAAA0F,EAAA,EAAAA,EAAApB,OAAAY,OAAAQ,IAAA,CACA,GAAApB,OAAAoB,GAAAZ,MAAA9E,QAAAA,MAAA,CACAA,MAAA0F,EACA,OAIA,IAAAZ,MAAAR,OAAAtE,OACA,GAAA8E,MAAA,CACAO,UAAArF,OACAqE,KAAAiB,OAAAhB,OAAAtE,QACAwE,aAAAxE,UAKA,SAAA+G,gBAAA/G,OACA,IAAA,IAAA0F,EAAA,EAAAsB,EAAA1C,OAAAY,OAAAQ,EAAAsB,IAAAtB,EAAA,CACA,GAAApB,OAAAoB,GAAA1F,QAAAA,MAAA,CACA,OAAAsE,OAAAoB,KAKA,SAAAL,UAAArF,OACA,IAAA,IAAA0F,EAAA,EAAAA,EAAApB,OAAAY,OAAAQ,IAAA,CACApB,OAAAoB,GAAAZ,MAAAL,OAAAiB,IAAA1F,OAIA,SAAAoG,OAAAtB,MAAA9E,MAAAkG,WACA,GAAAtB,UAAA,CACA,OAGAvJ,QAAA4L,OAAAnC,MAAA,CAAAoB,UAAAA,YACA7K,QAAA4L,OAAA3C,OAAAE,cAAAM,OAAA,GAAA,CAAAoB,UAAAA,YACA,GAAA1K,SAAAoL,QAAA3E,YAAAlD,OAAAqG,oBACAd,OAAAtE,OAAA/D,SAAAoI,KAAAC,OAAAY,OAAA,EAAA,CACAZ,OAAAtE,OAAA/D,QAAAiL,KAAA3C,gBAAAO,MAAAoB,WACA,IAAAiB,WAAA9C,KAAAoB,kBAEA,GAAApK,QAAA8J,SAAAgC,aAAA7C,OAAA6C,YAAAlL,QAAA,CACAqI,OAAA6C,YAAAlL,QAAAiL,KAAA3C,gBAAAO,MAAAoB,WAGAnH,OAAAqG,mBAAA,KACA5J,SAAA+H,GAAA,WAAAe,OAAAtE,OAAA/D,QAAA,SAAAA,QAAAmL,OACA,GAAAA,QAAA,QAAA,CACArI,OAAAqG,mBAAA,KACA5J,SAAA6L,IAAA,WAAApL,YAKA8C,OAAA0F,OAAAK,MAAA9E,MACAwE,aAAAM,MAAA9E,MACAqF,UAAArF,OAGA0G,eAGA,SAAAnB,eAAAT,OACA,IAAA,IAAAY,EAAA,EAAAA,EAAApB,OAAAY,OAAAQ,IAAA,CACA,GAAApB,OAAAoB,GAAAZ,QAAAA,MAAA,CACA,OAAAY,IAKA,SAAAe,aACA,GAAA/B,gBAAA,CACAN,UAAAkD,OAAA5C,iBACAA,gBAAA,MAIA,SAAAoC,gBAAAxC,QACA,IAAAA,OAAAY,OAAA,CACAnG,OAAAqG,mBAAA,MAIA,SAAAsB,eACAD,aACA,IAAAc,UAAAxI,OAAAwI,SACA,IAAAC,MAAAD,WAAAA,SAAA,EAAA,CACA7C,gBAAAN,UAAAqD,QAAAF,WAIA,SAAAE,UACA,IAAAF,UAAAxI,OAAAwI,SACA,GAAA5C,YAAA6C,MAAAD,WAAAA,SAAA,GAAAjD,OAAAY,OAAA,CACAnG,OAAA4G,WACA,CACA5G,OAAA+G,aAKAvK,UAAA,cAAA,WACA,MAAA,CACA6E,WAAA,KACAtB,WAAA,wBACAqB,aAAA,WACA5B,SAAA,IACA8B,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,uCAEArE,MAAA,CACAyI,OAAA,IACA8C,SAAA,IACAZ,aAAA,IACAH,QAAA,IACAX,OAAA,QAKAtK,UAAA,WAAA,CAAA,WAAA,SAAAC,UACA,MAAA,CACA8E,QAAA,eACA/B,SAAA,IACA6B,WAAA,KACAC,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,oCAEArE,MAAA,CACA0L,OAAA,KACA1H,MAAA,MAEAjE,KAAA,SAAAC,MAAAC,QAAAC,MAAAyL,cACA1L,QAAAkB,SAAA,QACAwK,aAAA9C,SAAA7I,MAAAC,SAEAD,MAAA6D,IAAA,WAAA,WACA8H,aAAA3B,YAAAhK,SAGAA,MAAAqC,OAAA,SAAA,SAAAoG,QACAjJ,SAAAiJ,OAAA,WAAA,eAAAxI,QAAA,iBAMA2L,UAAA,QAAA,CAAA,cACA,SAAAhM,aACA,IAAA2I,gBAAA,qBAEA,SAAA3G,YAAA3B,QAAA4L,UAAAC,UACA7L,QAAA2B,YAAAiK,WACA,GAAAC,SAAA,CACAA,YAIA,MAAA,CACAC,eAAA,SAAA9L,QAAA4L,UAAAG,MACA,GAAAH,YAAA,SAAA,CACA,IAAAI,QAAA,MACA,IAAA/B,UAAAjK,QAAAiL,KAAA3C,iBACA,IAAA2D,eAAAhC,YAAA,OAAA,OAAA,QACA,IAAAiC,cAAAvK,YAAAwK,KAAAlJ,KAAAjD,QACAiM,eAAA,IAAAhC,UAAA8B,MACA/L,QAAAkB,SAAA+I,WAEAtK,YAAAK,QAAA,CAAAkB,SAAA+K,iBACAlK,QACAgK,KAAAG,eAEA,OAAA,WACAF,QAAA,MAGAD,QAEAK,kBAAA,SAAApM,QAAA4L,UAAAG,MACA,GAAAH,YAAA,SAAA,CACA,IAAAI,QAAA,MACA,IAAA/B,UAAAjK,QAAAiL,KAAA3C,iBACA,IAAA2D,eAAAhC,YAAA,OAAA,OAAA,QACA,IAAAiC,cAAAvK,YAAAwK,KAAAlJ,KAAAjD,QAAAiM,eAAAF,MAEApM,YAAAK,QAAA,CAAAkB,SAAA+K,iBACAlK,QACAgK,KAAAG,eAEA,OAAA,WACAF,QAAA,MAGAD,YAKA3M,QAAAC,OAAA,0BAAA,IAEAgN,QAAA,gBAAA,CAAA,OAAA,UAAA,aAAA,gBAAA,eAAA,SAAAC,KAAAC,QAAAC,WAAAC,cAAAC,cAEA,IAAAC,0BAAA,kCAEA,IAAAC,SACA,IAAAC,kBAEA5J,KAAApC,KAAA,WACA+L,SAAAL,QAAAtH,GAEAhC,KAAA6J,QAAA,GACA7J,KAAA8J,WAAA,GAEAF,kBAAA,CACA,CACAG,IAAA,OACAC,MAAA,SACAC,MAAA,SAAAtI,OAAA3B,KAAAkK,MAAAvI,OACAwI,UAAA,SAAAC,MACA,IAAAC,MAAA,IAAAC,KACAD,MAAAE,YAAArI,KAAAsI,IAAAJ,KAAAK,gBACA,OAAAlB,WAAAc,MAAA,UAGA,CACAN,IAAA,KACAC,MAAA,SACAC,MAAA,SAAAtI,OAAAA,OAAAA,MAAA3B,KAAAkK,KAAAvI,MAAA,GAAAA,MAAA,IAAAA,MAAA,MACAwI,UAAA,SAAAC,MACA,IAAAC,MAAA,IAAAC,KACAD,MAAAE,YAAArI,KAAAsI,IAAAJ,KAAAK,gBACA,OAAAlB,WAAAc,MAAA,QAGA,CACAN,IAAA,IACAC,MAAA,WACAC,MAAA,SAAAtI,OAAA3B,KAAAkK,MAAAvI,OACAwI,UAAA,SAAAC,MACA,IAAAC,MAAA,IAAAC,KACAD,MAAAE,YAAArI,KAAAsI,IAAAJ,KAAAK,gBACA,OAAAlB,WAAAc,MAAA,OAGA,CACAN,IAAA,KACAC,MAAA,iBACAC,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAA/I,MAAA,GACAwI,UAAA,SAAAC,MACA,IAAAzI,MAAAyI,KAAAO,WACA,GAAA,UAAAC,KAAAjJ,OAAA,CACA,OAAA4H,WAAAa,KAAA,MAGA,OAAAb,WAAAa,KAAA,OAGA,CACAL,IAAA,OACAC,MAAAV,QAAAuB,iBAAAC,MAAAC,KAAA,KACAd,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAApB,QAAAuB,iBAAAC,MAAA/J,QAAAY,QACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,UAEA,CACAL,IAAA,MACAC,MAAAV,QAAAuB,iBAAAG,WAAAD,KAAA,KACAd,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAApB,QAAAuB,iBAAAG,WAAAjK,QAAAY,QACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,SAEA,CACAL,IAAA,KACAC,MAAA,gBACAC,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAA/I,MAAA,GACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,eACAC,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAA/I,MAAA,GACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,KACAC,MAAA,2BACAC,MAAA,SAAAtI,OAAA3B,KAAAoK,MAAAzI,OACAwI,UAAA,SAAAC,MACA,IAAAzI,MAAAyI,KAAAa,UACA,GAAA,UAAAL,KAAAjJ,OAAA,CACA,OAAA4H,WAAAa,KAAA,MAGA,OAAAb,WAAAa,KAAA,OAGA,CACAL,IAAA,KACAC,MAAA,0BACAC,MAAA,SAAAtI,OAAA3B,KAAAoK,MAAAzI,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,2BACAC,MAAA,SAAAtI,OAAA3B,KAAAoK,MAAAzI,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,OACAC,MAAAV,QAAAuB,iBAAAK,IAAAH,KAAA,KACAZ,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,UAEA,CACAL,IAAA,MACAC,MAAAV,QAAAuB,iBAAAM,SAAAJ,KAAA,KACAZ,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,SAEA,CACAL,IAAA,KACAC,MAAA,sBACAC,MAAA,SAAAtI,OAAA3B,KAAAoL,OAAAzJ,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,KACAC,MAAA,gBACAC,MAAA,SAAAtI,OAAA3B,KAAAoL,OAAAzJ,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,iBACAC,MAAA,SAAAtI,OAAA3B,KAAAoL,OAAAzJ,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,IACAC,MAAA,eACAC,MAAA,SAAAtI,OAAA3B,KAAAoL,OAAAzJ,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,KACAC,MAAA,aACAC,MAAA,SAAAtI,OAAA3B,KAAAqL,SAAA1J,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,mBACAC,MAAA,SAAAtI,OAAA3B,KAAAqL,SAAA1J,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,MACAC,MAAA,kBACAC,MAAA,SAAAtI,OAAA3B,KAAAsL,cAAA3J,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,SAEA,CACAL,IAAA,KACAC,MAAA,aACAC,MAAA,SAAAtI,OAAA3B,KAAAuL,SAAA5J,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,mBACAC,MAAA,SAAAtI,OAAA3B,KAAAuL,SAAA5J,OACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,IACAC,MAAAV,QAAAuB,iBAAAW,MAAAT,KAAA,KACAd,MAAA,SAAAtI,OACA,GAAA3B,KAAAoL,QAAA,GAAA,CACApL,KAAAoL,MAAA,EAGA,GAAAzJ,QAAA,KAAA,CACA3B,KAAAoL,OAAA,KAGAjB,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,IACAC,MAAA,aACAC,MAAA,SAAAtI,OACA,IAAA8J,QAAA9J,MAAA+J,MAAA,wBACAC,KAAAF,QAAA,GACAL,MAAAK,QAAA,GACAJ,QAAAI,QAAA,GACAzL,KAAAoL,OAAAQ,MAAAD,KAAAP,OACApL,KAAAqL,SAAAO,MAAAD,KAAAN,UAEAlB,UAAA,SAAAC,MACA,OAAAb,WAAAa,KAAA,OAGA,CACAL,IAAA,KACAC,MAAA,oBACAG,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAA,0BACAG,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,OAEA,CACAL,IAAA,OACAC,MAAAV,QAAAuB,iBAAAgB,SAAAd,KAAA,KAAAvI,QAAA,MAAA,OACA2H,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,UAEA,CACAL,IAAA,MACAC,MAAAV,QAAAuB,iBAAAiB,KAAAf,KAAA,KACAZ,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,SAEA,CACAL,IAAA,KACAC,MAAAV,QAAAuB,iBAAAiB,KAAAf,KAAA,KACAZ,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAEA,CACAL,IAAA,IACAC,MAAAV,QAAAuB,iBAAAiB,KAAAf,KAAA,KACAZ,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,QAIA,GAAAjO,QAAA4P,QAAAC,OAAA,GAAA7P,QAAA4P,QAAAE,MAAA,EAAA,CACArC,kBAAAlJ,KAAA,CACAqJ,IAAA,OACAC,MAAAV,QAAAuB,iBAAAqB,gBAAAnB,KAAA,KACAd,MAAA,SAAAtI,OAAA3B,KAAA0K,MAAApB,QAAAuB,iBAAAqB,gBAAAnL,QAAAY,QACAwI,UAAA,SAAAC,MAAA,OAAAb,WAAAa,KAAA,aAKApK,KAAApC,OAEA,SAAAuO,qBAAApC,KACA,OAAAN,aAAAG,kBAAA,CAAAG,IAAAA,KAAA,MAAA,GAGA/J,KAAAoM,UAAA,SAAArC,KACA,IAAAsC,EAAAF,qBAAApC,KACA,OAAAsC,GAAAA,EAAApC,OAAA,MAGAjK,KAAAsM,eAAA,SAAAvC,IAAAwC,QACA,IAAAF,EAAAF,qBAAApC,KACA,GAAAsC,GAAAlQ,QAAAqQ,WAAAD,QAAA,CACAvM,KAAA6J,QAAA,GACAwC,EAAApC,MAAAsC,SAEArD,KAAAlJ,MAEA,SAAAyM,aAAAC,QACA,IAAAC,IAAA,GAAA3C,MAAA0C,OAAAE,MAAA,IAGA,IAAAC,WAAAH,OAAA3L,QAAA,KACA,GAAA8L,YAAA,EAAA,CACA,IAAAC,UAAA,MACAJ,OAAAA,OAAAE,MAAA,IACA,IAAA,IAAApG,EAAAqG,WAAArG,EAAAkG,OAAA1G,OAAAQ,IAAA,CACA,GAAAsG,UAAA,CACA,GAAAJ,OAAAlG,KAAA,IAAA,CACA,GAAAA,EAAA,EAAAkG,OAAA1G,QAAA0G,OAAAlG,EAAA,KAAA,IAAA,CACAkG,OAAAlG,EAAA,GAAA,IACAwD,MAAAxD,EAAA,GAAA,OACA,CACAwD,MAAAxD,GAAA,GACAsG,UAAA,OAGAJ,OAAAlG,GAAA,QACA,CACA,GAAAkG,OAAAlG,KAAA,IAAA,CACAkG,OAAAlG,GAAA,IACAwD,MAAAxD,GAAA,GACAsG,UAAA,OAKAJ,OAAAA,OAAA3B,KAAA,IAGA5O,QAAAiE,QAAAwJ,kBAAA,SAAA5B,MACA,IAAAlH,MAAA4L,OAAA3L,QAAAiH,KAAA+B,KAEA,GAAAjJ,OAAA,EAAA,CACA4L,OAAAA,OAAAE,MAAA,IAEA5C,MAAAlJ,OAAA,IAAAkH,KAAAgC,MAAA,IACA0C,OAAA5L,OAAA,IACA,IAAA,IAAA0F,EAAA1F,MAAA,EAAAiM,EAAAjM,MAAAkH,KAAA+B,IAAA/D,OAAAQ,EAAAuG,EAAAvG,IAAA,CACAwD,MAAAxD,GAAA,GACAkG,OAAAlG,GAAA,IAEAkG,OAAAA,OAAA3B,KAAA,IAEA4B,IAAAjM,KAAA,CACAI,MAAAA,MACAiJ,IAAA/B,KAAA+B,IACAE,MAAAjC,KAAAiC,MACA+C,QAAAhF,KAAAgC,WAKA,MAAA,CACAA,MAAA,IAAAiD,OAAA,IAAAjD,MAAAe,KAAA,IAAA,KACA4B,IAAAnD,cAAAmD,IAAA,UAIA,SAAAO,gBAAAR,QACA,IAAA5C,WAAA,GACA,IAAAtD,EAAA,EACA,IAAA2D,UAAAgD,WACA,MAAA3G,EAAAkG,OAAA1G,OAAA,CACA,GAAA7J,QAAA8J,SAAAkH,YAAA,CACA,GAAAT,OAAAU,OAAA5G,KAAA,IAAA,CACA,GAAAA,EAAA,GAAAkG,OAAA1G,QAAA0G,OAAAU,OAAA5G,EAAA,KAAA,IAAA,CACAsD,WAAApJ,KAAA2M,0BAAAX,OAAAS,WAAA3G,IACA2G,WAAA,WAEA,GAAA3G,IAAAkG,OAAA1G,OAAA,CACA,MAAAmH,WAAAT,OAAA1G,OAAA,CACAmE,UAAAmD,0BAAAZ,OAAAS,YACArD,WAAApJ,KAAAyJ,WACAgD,WAAAhD,UAAAoD,QAIA/G,IACA,SAGA,GAAAkG,OAAAU,OAAA5G,KAAA,IAAA,CACA2G,WAAA3G,EACAA,IACA,SAGA2D,UAAAmD,0BAAAZ,OAAAlG,GAEAsD,WAAApJ,KAAAyJ,UAAAoC,QACA/F,EAAA2D,UAAAoD,OAGA,OAAAzD,WAGA,SAAAuD,0BAAAX,OAAAS,WAAAI,QACA,OAAA,WACA,OAAAb,OAAAc,OAAAL,WAAA,EAAAI,OAAAJ,WAAA,IAIA,SAAAG,0BAAAZ,OAAAlG,GACA,IAAAiH,cAAAf,OAAAc,OAAAhH,GACA,IAAA,IAAAkH,EAAA,EAAAA,EAAA9D,kBAAA5D,OAAA0H,IAAA,CACA,GAAA,IAAAT,OAAA,IAAArD,kBAAA8D,GAAA3D,KAAAa,KAAA6C,eAAA,CACA,IAAAzF,KAAA4B,kBAAA8D,GACA,MAAA,CACAH,OAAA/G,EAAAwB,KAAA+B,IAAA/D,OACAuG,OAAAvE,KAAAmC,YAKA,MAAA,CACAoD,OAAA/G,EAAA,EACA+F,OAAA,WACA,OAAAkB,cAAAL,OAAA,KAKApN,KAAA2N,OAAA,SAAAvD,KAAAsC,QACA,IAAAvQ,QAAAyR,OAAAxD,OAAA9B,MAAA8B,QAAAsC,OAAA,CACA,MAAA,GAGAA,OAAApD,QAAAuB,iBAAA6B,SAAAA,OAEA,GAAApD,QAAAtH,KAAA2H,SAAA,CACA3J,KAAApC,OAGA,IAAAoC,KAAA8J,WAAA4C,QAAA,CACA1M,KAAA8J,WAAA4C,QAAAQ,gBAAAR,QAGA,IAAA5C,WAAA9J,KAAA8J,WAAA4C,QAEA,OAAA5C,WAAA+D,OAAA,SAAAC,IAAA3D,WACA,OAAA2D,IAAA3D,UAAAC,OACA,KAGApK,KAAA+N,MAAA,SAAAC,MAAAtB,OAAAuB,UACA,IAAA9R,QAAA+R,SAAAF,SAAAtB,OAAA,CACA,OAAAsB,MAGAtB,OAAApD,QAAAuB,iBAAA6B,SAAAA,OACAA,OAAAA,OAAAlK,QAAAkH,0BAAA,QAEA,GAAAJ,QAAAtH,KAAA2H,SAAA,CACA3J,KAAApC,OAGA,IAAAoC,KAAA6J,QAAA6C,QAAA,CACA1M,KAAA6J,QAAA6C,QAAAD,aAAAC,OAAA,SAGA,IAAAH,OAAAvM,KAAA6J,QAAA6C,QACA1C,MAAAuC,OAAAvC,MACA2C,IAAAJ,OAAAI,IACAwB,QAAAH,MAAAtC,MAAA1B,OACAoE,SAAA,MACA,GAAAD,SAAAA,QAAAnI,OAAA,CACA,IAAAqI,OAAAC,GACA,GAAAnS,QAAAyR,OAAAK,YAAA3F,MAAA2F,SAAAM,WAAA,CACAF,OAAA,CACAnE,KAAA+D,SAAAxD,cACAC,MAAAuD,SAAAtD,WACAP,KAAA6D,SAAAhD,UACAG,MAAA6C,SAAAO,WACAnD,QAAA4C,SAAAQ,aACAlD,QAAA0C,SAAAS,aACApD,aAAA2C,SAAAU,uBAEA,CACA,GAAAV,SAAA,CACA5E,KAAAuF,KAAA,cAAA,gCAEAP,OAAA,CAAAnE,KAAA,KAAAQ,MAAA,EAAAN,KAAA,EAAAgB,MAAA,EAAAC,QAAA,EAAAE,QAAA,EAAAD,aAAA,GAGA,IAAA,IAAA9E,EAAA,EAAAuG,EAAAoB,QAAAnI,OAAAQ,EAAAuG,EAAAvG,IAAA,CACA,IAAAqI,OAAAlC,IAAAnG,EAAA,GACA,GAAAqI,OAAA7B,UAAA,IAAA,CACAoB,SAAA,KAGA,GAAAS,OAAA5E,MAAA,CACA4E,OAAA5E,MAAA6E,KAAAT,OAAAF,QAAA3H,KAIA,IAAAuI,WAAAX,SAAA9D,KAAA0E,UAAAC,eACA3E,KAAA0E,UAAAzE,YACA,IAAA2E,WAAAd,SAAA9D,KAAA0E,UAAAG,YACA7E,KAAA0E,UAAAI,SAEA,GAAAC,QAAAhB,OAAAnE,KAAAmE,OAAA3D,MAAA2D,OAAAjE,MAAA,CACA,GAAAjO,QAAAyR,OAAAK,YAAA3F,MAAA2F,SAAAM,aAAAH,SAAA,CACAE,GAAA,IAAAhE,KAAA2D,UACAc,WAAAD,KAAAR,GAAAD,OAAAnE,KAAAmE,OAAA3D,MAAA2D,OAAAjE,MACA8E,WAAAJ,KAAAR,GAAAD,OAAAjD,MAAAiD,OAAAhD,QACAgD,OAAA9C,QAAA8C,OAAA/C,kBACA,CACAgD,GAAA,IAAAhE,KAAA,GACAyE,WAAAD,KAAAR,GAAAD,OAAAnE,KAAAmE,OAAA3D,MAAA2D,OAAAjE,MACA8E,WAAAJ,KAAAR,GAAAD,OAAAjD,OAAA,EAAAiD,OAAAhD,SAAA,EACAgD,OAAA9C,SAAA,EAAA8C,OAAA/C,cAAA,IAIA,OAAAgD,KAMA,SAAAe,QAAAnF,KAAAQ,MAAAN,MACA,GAAAA,KAAA,EAAA,CACA,OAAA,MAGA,GAAAM,QAAA,GAAAN,KAAA,GAAA,CACA,OAAAA,OAAA,KAAAF,KAAA,IAAA,GAAAA,KAAA,MAAA,GAAAA,KAAA,MAAA,GAGA,GAAAQ,QAAA,GAAAA,QAAA,GAAAA,QAAA,GAAAA,QAAA,GAAA,CACA,OAAAN,KAAA,GAGA,OAAA,KAGA,SAAAwB,MAAAkC,KACA,OAAAxK,SAAAwK,IAAA,IAGA9N,KAAAsP,WAAAA,WACAtP,KAAAuP,aAAAA,aACAvP,KAAAwP,iBAAAA,iBACAxP,KAAAyP,eAAAA,eACAzP,KAAA0P,uBAAAA,uBAEA,SAAAJ,WAAAlF,KAAAuF,UACA,OAAAvF,MAAAuF,SAAAD,uBAAAtF,KAAAuF,UAAAvF,KAGA,SAAAmF,aAAAnF,KAAAuF,UACA,OAAAvF,MAAAuF,SAAAD,uBAAAtF,KAAAuF,SAAA,MAAAvF,KAIA,SAAAoF,iBAAAG,SAAAC,UACAD,SAAAA,SAAAnN,QAAA,KAAA,IACA,IAAAqN,wBAAAvF,KAAAyD,MAAA,yBAAA4B,UAAA,IACA,OAAArH,MAAAuH,yBAAAD,SAAAC,wBAGA,SAAAJ,eAAArF,KAAAiB,SACAjB,KAAA,IAAAE,KAAAF,KAAAmE,WACAnE,KAAA0F,WAAA1F,KAAAqE,aAAApD,SACA,OAAAjB,KAGA,SAAAsF,uBAAAtF,KAAAuF,SAAAI,SACAA,QAAAA,SAAA,EAAA,EACA,IAAAC,mBAAA5F,KAAA6F,oBACA,IAAAC,eAAAV,iBAAAG,SAAAK,oBACA,OAAAP,eAAArF,KAAA2F,SAAAG,eAAAF,yBAMA7T,QAAAC,OAAA,uBAAA,IACAC,UAAA,aAAA,CACA,WACA,SAAAC,UAEA,IAAA6T,UAAA,uCAEA,IAAAC,UAAA,wCAEA,IAAAC,eAAA,GAEA,MAAA,CACAhR,SAAA,IACAiR,QAAA,SAAAC,SAAAC,QACA,IAAAC,aAAA,GACA,IAAAC,UAAA,GACA,IAAAC,UAAA,GACA,IAAAC,cAAA,KACA,IAAAC,aAAAL,OAAAM,WAAApF,MAAAyE,WACA,IAAAY,MAAAF,aAAA,GACA,IAAAG,QAAAH,aAAA,GACA,IAAAI,KAAAD,QAAApE,MAAA,KAEA,OAAAsE,OAEA,SAAAA,OAAApU,MAAAC,QAAAC,OACAyT,aAAA/P,KAAA5D,OACA4T,UAAAhQ,KAAA,CACA5D,MAAAA,MACAC,QAAAA,UAGAkU,KAAA7Q,QAAA,SAAA+Q,IAAAC,GACAC,UAAAF,IAAArU,SAGAA,MAAA6D,IAAA,WAAA2Q,aAGA,SAAAD,UAAAF,IAAArU,OACA,IAAA2O,QAAA0F,IAAAzF,MAAA0E,WACA,IAAAmB,MAAAzU,MAAAiB,MAAA0N,QAAA,IACA,IAAA+F,eAAA/F,QAAA,GACA,IAAAzD,KAAA2I,UAAAQ,KACA,IAAAnJ,KAAA,CACA,IAAAyJ,QAAA,SAAAC,gBACA,IAAAC,aAAA,KACAjB,UAAAkB,KAAA,SAAAC,UACA,IAAAC,QAAAD,SAAA/U,MAAAiB,MAAAgT,OACA,GAAAe,UAAAJ,eAAA,CACAC,aAAAE,SACA,OAAA,QAGA,GAAA7J,KAAA4I,gBAAAe,aAAA,CACA,GAAA3J,KAAA4I,cAAA,CACAtU,SAAAoC,YAAAsJ,KAAA4I,cAAA7T,QAAAwU,OAEA,GAAAI,aAAA,CACArV,SAAA2B,SAAA0T,aAAA5U,QAAAwU,OAEAvJ,KAAA4I,cAAAe,eAGAhB,UAAAQ,KAAAnJ,KAAA,CACA4I,cAAA,KACA9T,MAAAA,MACA2U,QAAAA,QACAD,eAAAA,eACAO,QAAAjV,MAAAqC,OAAAqS,eAAAC,UAGAzJ,KAAAyJ,QAAA3U,MAAAiB,MAAAyT,iBAGA,SAAAF,YAAAU,GACA,IAAAC,aAAAD,EAAAE,YACA,IAAApR,MAAA2P,aAAA1P,QAAAkR,cACAxB,aAAAzP,OAAAF,MAAA,GACA4P,UAAA1P,OAAAF,MAAA,GACA,GAAA2P,aAAAzK,OAAA,CACA,IAAAmM,cAAA1B,aAAA,GACAtU,QAAAiE,QAAAuQ,UAAA,SAAA3I,MACA,GAAAA,KAAAlL,QAAAmV,aAAA,CACAjK,KAAA+J,QAAAI,cAAAhT,OAAA6I,KAAAwJ,eAAAxJ,KAAAyJ,SACAzJ,KAAAlL,MAAAqV,qBAGA,CACAxB,UAAA,UAMAxU,QAAAC,OAAA,0BAAA,CAAA,0BAAA,yBAEAuF,MAAA,2BAAA,OAEAA,MAAA,4BAAA,MAEAjC,SAAA,sBAAA,CACA0S,eAAA,MACAC,UAAA,KACAC,YAAA,OACAC,WAAA,OACAC,gBAAA,MACAC,eAAA,YACAC,iBAAA,OACAC,QAAA,KACAC,QAAA,OACAC,QAAA,KACAC,QAAA,MACAC,aAAA,EACAC,eAAA,GACAC,oBAAA,MACAC,UAAA,KACAC,YAAA,EACAC,SAAA,IAGAxT,WAAA,0BAAA,CAAA,SAAA,WAAA,SAAA,SAAA,eAAA,UAAA,OAAA,aAAA,sBAAA,4BAAA,2BAAA,gBACA,SAAAC,OAAAkD,SAAAjD,OAAAtD,OAAAwG,aAAAsG,QAAAD,KAAAE,WAAA8J,iBAAAC,0BAAAC,yBAAAC,YACA,IAAArO,KAAAnF,KACA4D,YAAA,CAAAa,cAAAtI,QAAA6C,MACAgU,eAAA,GACAS,eAAA,GAEA1Q,SAAA9E,SAAA,kBACA6B,OAAAL,KAAA,OAAA,eAEA,IAAAI,OAAA6T,kBAAA,CACA7T,OAAA6T,kBAAA,GAIA1T,KAAA2T,MAAA,CAAA,MAAA,QAAA,QAEA,CACA,cACA,eACA,iBACA,YACA,kBACA,iBACA,cACA,mBACA,aACA,UACA,UACA,UACA,UACA,eACA,YACA,sBACA,cACA,cACA,YACAvT,QAAA,SAAA2J,KACA,OAAAA,KACA,IAAA,cACA,IAAA,eACAlK,OAAAkK,KAAAlK,OAAA6T,kBAAA3J,MAAA5N,QAAA6C,KACA,MACA,IAAA,iBACAa,OAAAuS,eAAAjW,QAAAgE,UAAAN,OAAA6T,kBAAAtB,gBACAvS,OAAA6T,kBAAAtB,eAAAiB,iBAAAjB,eACA,MACA,IAAA,YACA,IAAA,kBACA,IAAA,iBACA,IAAA,cACA,IAAA,mBACA,IAAA,aACAjN,KAAA4E,KAAA5N,QAAAgE,UAAAN,OAAA6T,kBAAA3J,MACA/G,aAAAnD,OAAA6T,kBAAA3J,KAAA/G,CAAAnD,OAAAwD,SACAgQ,iBAAAtJ,KACA,MACA,IAAA,eACA,IAAA,YACA,IAAA,sBACA,IAAA,cACA,IAAA,WACA5E,KAAA4E,KAAA5N,QAAAgE,UAAAN,OAAA6T,kBAAA3J,MACAlK,OAAA6T,kBAAA3J,KAAAsJ,iBAAAtJ,KACA,MACA,IAAA,cACA,GAAA5N,QAAAgE,UAAAN,OAAA6T,kBAAAE,aAAA,CACAzO,KAAAyO,YAAA/T,OAAA6T,kBAAAE,iBACA,GAAAzX,QAAA8J,SAAAoN,iBAAAO,aAAA,CACAzO,KAAAyO,YAAAP,iBAAAO,gBACA,CACAzO,KAAAyO,aAAAtK,QAAAuB,iBAAAgJ,eAAA,GAAA,EAGA,MACA,IAAA,UACA,IAAA,UACAhU,OAAAV,OAAA,qBAAA4K,IAAA,SAAApI,OACA,GAAAA,MAAA,CACA,GAAAxF,QAAAyR,OAAAjM,OAAA,CACAwD,KAAA4E,KAAAyJ,WAAAjE,aAAA,IAAAjF,KAAA3I,OAAAqR,eAAAc,UAAA,iBACA,CACA,GAAAR,0BAAA,CACAjK,KAAAuF,KAAA,gFAGAzJ,KAAA4E,KAAA,IAAAO,KAAAf,WAAA5H,MAAA,gBAEA,CACAwD,KAAA4E,KAAAsJ,iBAAAtJ,KACAyJ,WAAAjE,aAAA,IAAAjF,KAAA+I,iBAAAtJ,MAAAiJ,eAAAc,UAAA,aACA,KAGA3O,KAAA4O,gBAGA,MACA,IAAA,UACA,IAAA,UACA,GAAAlU,OAAA6T,kBAAA3J,KAAA,CACAlK,OAAAV,OAAA,WAAA,OAAAU,OAAA6T,kBAAA3J,MAAA,SAAApI,OACAwD,KAAA4E,KAAAlK,OAAAkK,KAAA5N,QAAAgE,UAAAwB,OAAAA,MAAA9B,OAAA6T,kBAAA3J,KACA,GAAAA,MAAA,WAAA5E,KAAAwO,MAAA5S,QAAAlB,OAAA6T,kBAAAtB,gBAAAjN,KAAAwO,MAAA5S,QAAAoE,KAAA4E,OACAA,MAAA,WAAA5E,KAAAwO,MAAA5S,QAAAlB,OAAA6T,kBAAAtB,gBAAAjN,KAAAwO,MAAA5S,QAAAoE,KAAA4E,MAAA,CACAlK,OAAAuS,eAAAjN,KAAA4E,KACAlK,OAAA6T,kBAAAtB,eAAAjN,KAAA4E,YAGA,CACA5E,KAAA4E,KAAAlK,OAAAkK,KAAAsJ,iBAAAtJ,MAAA,KAGA,SAIAlK,OAAAmU,SAAA,cAAAnU,OAAAoC,IAAA,IAAAC,KAAAC,MAAAD,KAAAE,SAAA,KAEAvC,OAAAL,SAAArD,QAAAgE,UAAAL,OAAAN,WAAA,MACA,GAAArD,QAAAgE,UAAAL,OAAAmU,YAAA,CACAR,eAAA/S,KAAAb,OAAAwD,QAAAlE,OAAAW,OAAAmU,WAAA,SAAAzU,UACAK,OAAAL,SAAAA,SACA2F,KAAA4O,iBAIAlU,OAAAyE,SAAA,SAAA4P,YACA,GAAA/O,KAAAgP,QAAAD,WAAA9J,KAAAjF,KAAAiP,cAAA,EAAA,CACAvU,OAAAwU,aAAAH,WAAAI,IACA,OAAA,KAEA,OAAA,OAGAtU,KAAApC,KAAA,SAAA2W,cACA3Q,YAAA2Q,aACAvB,eAAAwB,eAAA5Q,aAEA,GAAA/D,OAAA6T,kBAAAe,SAAA,CACAtP,KAAAiP,WAAAZ,WAAAjE,aAAA1P,OAAA6T,kBAAAe,SAAAzB,eAAAc,UAAA,cAAA,IAAAxJ,KACAzK,OAAAV,OAAA,6BAAA,SAAAsV,UACA,GAAAA,WAAA7Q,YAAA8Q,SAAA9Q,YAAAO,cAAAP,YAAA+Q,UAAA,CACAxP,KAAAiP,WAAAZ,WAAAjE,aAAAkF,SAAAzB,eAAAc,UAAA,aACA3O,KAAA4O,qBAGA,CACA5O,KAAAiP,WAAA,IAAA9J,KAGA,IAAAF,KAAAxG,YAAAO,YAAA,IAAAmG,KAAA1G,YAAAO,aAAA,IAAAmG,KACAtK,KAAAoU,YAAA9L,MAAA8B,MACAoJ,WAAAjE,aAAAnF,KAAA4I,eAAAc,UAAA,aACAN,WAAAjE,aAAA,IAAAjF,KAAA0I,eAAAc,UAAA,aAEAlQ,YAAAK,QAAA,WACAkB,KAAAyP,WAIA5U,KAAA4U,OAAA,WACA,GAAAhR,YAAAiR,WAAA,CACA,IAAAzK,KAAA,IAAAE,KAAA1G,YAAAiR,YACAxF,SAAA/G,MAAA8B,MAEA,GAAAiF,QAAA,CACArP,KAAAoU,WAAAZ,WAAAjE,aAAAnF,KAAA4I,eAAAc,UAAA,kBACA,IAAAP,yBAAA,CACAlK,KAAAyL,MAAA,iEAGA9U,KAAA+T,eAGA/T,KAAA+T,YAAA,WACA,GAAA/T,KAAAjD,QAAA,CACA8C,OAAAkV,WAAA,KACA/U,KAAAgV,eACA,GAAAnV,OAAAoV,SAAA,CACApV,OAAAwU,aAAAxU,OAAAoV,SAAAX,IAGA,IAAAlK,KAAAxG,YAAAiR,WAAA,IAAAvK,KAAA1G,YAAAiR,YAAA,KACAzK,KAAAoJ,WAAAjE,aAAAnF,KAAA4I,eAAAc,UAAA,aACAlQ,YAAAsR,aAAA,gBAAA9K,MACApK,KAAAjD,UAAAiD,KAAAuB,WAAA6I,SAIApK,KAAAmV,iBAAA,SAAA/K,KAAAsC,QACA,IAAA0I,MAAAxR,YAAAiR,WAAA,IAAAvK,KAAA1G,YAAAiR,YAAA,KACAO,MAAA5B,WAAAjE,aAAA6F,MAAApC,eAAAc,UAAA,aACA,IAAAuB,MAAA,IAAA/K,KACA+K,MAAA7B,WAAAjE,aAAA8F,MAAArC,eAAAc,UAAA,aACA,IAAAwB,KAAAtV,KAAAmU,QAAA/J,KAAAiL,OACA,IAAA/G,GAAA,CACAlE,KAAAA,KACAmL,MAAA/B,WAAA7F,OAAAvD,KAAAsC,QACA8I,SAAAJ,OAAApV,KAAAmU,QAAA/J,KAAAgL,SAAA,EACA5V,SAAAQ,KAAAuB,WAAA6I,MACAqL,KAAAH,KAAA,EACAI,QAAAJ,OAAA,EACAK,OAAAL,KAAA,EACAM,YAAA5V,KAAA4V,YAAAxL,OAAA,MAGA,GAAAgL,OAAApV,KAAAmU,QAAA/J,KAAAgL,SAAA,EAAA,CACAvV,OAAAkV,WAAAzG,GAGA,GAAAnJ,KAAAiP,YAAApU,KAAAmU,QAAA7F,GAAAlE,KAAAjF,KAAAiP,cAAA,EAAA,CACAvU,OAAAoV,SAAA3G,GAGA,OAAAA,IAGAtO,KAAAuB,WAAA,SAAA6I,MACA,OAAAvK,OAAAL,UACAQ,KAAA6S,SAAA7S,KAAAmU,QAAA/J,KAAApK,KAAA6S,SAAA,GACA7S,KAAA2S,SAAA3S,KAAAmU,QAAA/J,KAAApK,KAAA2S,SAAA,GACA9S,OAAAgW,cAAAhW,OAAAgW,aAAA,CAAAzL,KAAAA,KAAA0L,KAAAjW,OAAAuS,kBAGApS,KAAA4V,YAAA,SAAAxL,MACA,OAAAvK,OAAA+V,YAAA,CAAAxL,KAAAA,KAAA0L,KAAAjW,OAAAuS,kBAIApS,KAAA4M,MAAA,SAAAmJ,IAAAC,MACA,IAAAC,OAAA,GACA,MAAAF,IAAA/P,OAAA,EAAA,CACAiQ,OAAAvV,KAAAqV,IAAA/U,OAAA,EAAAgV,OAEA,OAAAC,QAGApW,OAAAuG,OAAA,SAAAgE,MACA,GAAAvK,OAAAuS,iBAAAjN,KAAA2N,QAAA,CACA,IAAAxE,GAAA1K,YAAAiR,WAAArB,WAAAjE,aAAA,IAAAjF,KAAA1G,YAAAiR,YAAA7B,eAAAc,UAAA,aAAA,IAAAxJ,KAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GACAgE,GAAA/D,YAAAH,KAAAK,cAAAL,KAAAO,WAAAP,KAAAa,WACAqD,GAAAkF,WAAAlE,WAAAhB,GAAA0E,eAAAc,UAAA,aACAlQ,YAAAa,cAAA6J,IACA1K,YAAAK,cACA,CACAkB,KAAAiP,WAAAhK,KACA8L,QAAA/Q,KAAAwO,MAAAxO,KAAAwO,MAAA5S,QAAAlB,OAAAuS,gBAAA,IAEAvS,OAAAsW,MAAA,uBAGAtW,OAAAuW,WAAA,yBAGAvW,OAAAwW,KAAA,SAAArP,WACA,IAAAkD,KAAA/E,KAAAiP,WAAA3J,cAAAzD,WAAA7B,KAAAmR,KAAAC,OAAA,GACA7L,MAAAvF,KAAAiP,WAAAzJ,WAAA3D,WAAA7B,KAAAmR,KAAAE,QAAA,GACArR,KAAAiP,WAAA7J,YAAAL,KAAAQ,MAAA,GACAvF,KAAA4O,eAGAlU,OAAA4W,WAAA,SAAAzP,WACAA,UAAAA,WAAA,EAEA,GAAAnH,OAAAuS,iBAAAjN,KAAAyN,SAAA5L,YAAA,GACAnH,OAAAuS,iBAAAjN,KAAA2N,SAAA9L,aAAA,EAAA,CACA,OAGAkP,QAAA/Q,KAAAwO,MAAAxO,KAAAwO,MAAA5S,QAAAlB,OAAAuS,gBAAApL,YAEAnH,OAAAsW,MAAA,wBAIAtW,OAAA6W,KAAA,CAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,MAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,KAAAC,GAAA,QAAAC,GAAA,QAEA,IAAAC,aAAA,WACAlS,KAAApI,QAAA,GAAAua,SAIAzX,OAAAc,IAAA,uBAAA0W,cAEAxX,OAAA0X,QAAA,SAAAC,KACA,IAAAzN,IAAAlK,OAAA6W,KAAAc,IAAAzV,OAEA,IAAAgI,KAAAyN,IAAAC,UAAAD,IAAAE,QAAA7X,OAAAL,SAAA,CACA,OAGAgY,IAAAG,iBACA,IAAAxS,KAAA8N,oBAAA,CACAuE,IAAAI,kBAGA,GAAA7N,MAAA,SAAAA,MAAA,QAAA,CACA,GAAA5E,KAAA5D,WAAA4D,KAAAiP,YAAA,CACA,OAEAvU,OAAAuG,OAAAjB,KAAAiP,iBACA,GAAAoD,IAAAK,UAAA9N,MAAA,MAAAA,MAAA,QAAA,CACAlK,OAAA4W,WAAA1M,MAAA,KAAA,GAAA,OACA,CACA5E,KAAA2S,cAAA/N,IAAAyN,KACArS,KAAA4O,gBAIAhR,SAAAsB,GAAA,UAAA,SAAAmT,KACA3X,OAAA2E,OAAA,WACA3E,OAAA0X,QAAAC,SAIA3X,OAAAc,IAAA,WAAA,WAEA,MAAA8S,eAAAzN,OAAA,CACAyN,eAAAsE,OAAAtE,MAIA,SAAAyC,QAAAJ,MACAjW,OAAAuS,eAAA0D,KACAjW,OAAA6T,kBAAAtB,eAAA0D,KAGA,SAAAtB,eAAA5Q,aACA,IAAAoP,eAEA,GAAA7W,QAAA4P,QAAAE,MAAA,EAAA,CAEA+G,eAAApP,YAAAoU,UACAnY,OAAA6T,kBAAAV,gBACAK,iBAAAL,gBACA,GAGAA,eAAAc,UAAA,SAAA/J,KACA,OAAAiJ,eAAAjJ,UAEA,CAEA,IAAA4F,SAAA/L,YAAAoU,SAAAlE,UAAA,cACAjU,OAAA6T,kBAAAV,eAAAnT,OAAA6T,kBAAAV,eAAArD,SAAA,QACA0D,iBAAAL,eAAAK,iBAAAL,eAAArD,SAAA,MAGAqD,eAAApP,YAAAoU,SACAC,YAAA5E,iBAAAL,gBACAiF,YAAApY,OAAA6T,kBAAAV,gBACAiF,YAAArU,YAAAoU,UACAC,YAAA,CAAAtI,SAAAA,WAGA,OAAAqD,mBAIApT,WAAA,yBAAA,CAAA,SAAA,WAAA,aAAA,SAAA9C,MAAAiG,SAAAwG,YACA,IAAA2O,cAAA,CAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAEAlY,KAAAsW,KAAA,CAAAE,OAAA,GACAxW,KAAAjD,QAAAgG,SACA,SAAAoV,eAAAjO,KAAAQ,OACA,OAAAA,QAAA,GAAAR,KAAA,IAAA,IACAA,KAAA,MAAA,GAAAA,KAAA,MAAA,GAAA,GAAAgO,cAAAxN,OAGA1K,KAAApC,KAAA,SAAAwa,MACAjc,QAAA4L,OAAAqQ,KAAApY,MACAlD,MAAAoW,UAAAkF,KAAAlF,UACAkF,KAAArE,eAGA/T,KAAAqY,SAAA,SAAAC,UAAAvL,GACA,IAAAwL,MAAA,IAAAC,MAAAzL,GAAA2I,QAAA,IAAApL,KAAAgO,WAAA9R,EAAA,EAAA4D,KACA,MAAA5D,EAAAuG,EAAA,CACA3C,KAAA,IAAAE,KAAAoL,SACA6C,MAAA/R,KAAA4D,KACAsL,QAAA+C,QAAA/C,QAAAzK,UAAA,GAEA,OAAAsN,OAGAvY,KAAAgV,aAAA,WACA,IAAA9K,KAAAlK,KAAAoU,WAAA3J,cACAC,MAAA1K,KAAAoU,WAAAzJ,WACA+N,gBAAA,IAAApO,KAAAtK,KAAAoU,YAEAsE,gBAAAnO,YAAAL,KAAAQ,MAAA,GAEA,IAAAiO,WAAA3Y,KAAA4T,YAAA8E,gBAAAE,SACAC,8BAAAF,WAAA,EACA,EAAAA,YAAAA,WACAG,UAAA,IAAAxO,KAAAoO,iBAEA,GAAAG,8BAAA,EAAA,CACAC,UAAAL,SAAAI,8BAAA,GAIA,IAAAE,KAAA/Y,KAAAqY,SAAAS,UAAA,IACA,IAAA,IAAAtS,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACAuS,KAAAvS,GAAArK,QAAA4L,OAAA/H,KAAAmV,iBAAA4D,KAAAvS,GAAAxG,KAAAqS,WAAA,CACA2G,UAAAD,KAAAvS,GAAAmE,aAAAD,MACA4J,IAAAxX,MAAAkX,SAAA,IAAAxN,IAIA1J,MAAAmc,OAAA,IAAAT,MAAA,GACA,IAAA,IAAA9K,EAAA,EAAAA,EAAA,EAAAA,IAAA,CACA5Q,MAAAmc,OAAAvL,GAAA,CACAwL,KAAA3P,WAAAwP,KAAArL,GAAAtD,KAAApK,KAAAwS,iBACA2G,KAAA5P,WAAAwP,KAAArL,GAAAtD,KAAA,SAIAtN,MAAAsc,MAAA7P,WAAAvJ,KAAAoU,WAAApU,KAAAyS,gBACA3V,MAAAuc,KAAArZ,KAAA4M,MAAAmM,KAAA,GAEA,GAAAjc,MAAAoW,UAAA,CACApW,MAAAwc,YAAA,GACA,IAAAC,eAAA,EAAA,EAAAvZ,KAAA4T,aAAA,EACA4F,SAAA1c,MAAAuc,KAAArT,OACA,IAAA,IAAAyT,QAAA,EAAAA,QAAAD,SAAAC,UAAA,CACA3c,MAAAwc,YAAA5Y,KACAgZ,qBAAA5c,MAAAuc,KAAAI,SAAAF,eAAAnP,UAKApK,KAAAmU,QAAA,SAAAwF,MAAAC,OACA,IAAAC,OAAA,IAAAvP,KAAAqP,MAAAlP,cAAAkP,MAAAhP,WAAAgP,MAAA1O,WACA,IAAA6O,OAAA,IAAAxP,KAAAsP,MAAAnP,cAAAmP,MAAAjP,WAAAiP,MAAA3O,WACA4O,OAAAtP,YAAAoP,MAAAlP,eACAqP,OAAAvP,YAAAqP,MAAAnP,eACA,OAAAoP,OAAAC,QAGA,SAAAJ,qBAAAtP,MACA,IAAA2P,UAAA,IAAAzP,KAAAF,MACA2P,UAAAtB,QAAAsB,UAAA9O,UAAA,GAAA8O,UAAAnB,UAAA,IACA,IAAAtD,KAAAyE,UAAAxL,UACAwL,UAAAC,SAAA,GACAD,UAAAtB,QAAA,GACA,OAAAvW,KAAAC,MAAAD,KAAA+X,OAAA3E,KAAAyE,WAAA,OAAA,GAAA,EAGA/Z,KAAA8X,cAAA,SAAA/N,IAAAyN,KACA,IAAApN,KAAApK,KAAAoU,WAAAnJ,UAEA,GAAAlB,MAAA,OAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,KAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,QAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,OAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,UAAAA,MAAA,WAAA,CACA,IAAAW,MAAA1K,KAAAoU,WAAAzJ,YAAAZ,MAAA,UAAA,EAAA,GACA/J,KAAAoU,WAAA4F,SAAAtP,MAAA,GACAN,KAAAlI,KAAAgY,IAAA/B,eAAAnY,KAAAoU,WAAA3J,cAAAzK,KAAAoU,WAAAzJ,YAAAP,WACA,GAAAL,MAAA,OAAA,CACAK,KAAA,OACA,GAAAL,MAAA,MAAA,CACAK,KAAA+N,eAAAnY,KAAAoU,WAAA3J,cAAAzK,KAAAoU,WAAAzJ,YAEA3K,KAAAoU,WAAAqE,QAAArO,UAIAxK,WAAA,2BAAA,CAAA,SAAA,WAAA,aAAA,SAAA9C,MAAAiG,SAAAwG,YACAvJ,KAAAsW,KAAA,CAAAC,MAAA,GACAvW,KAAAjD,QAAAgG,SAEA/C,KAAApC,KAAA,SAAAwa,MACAjc,QAAA4L,OAAAqQ,KAAApY,MACAoY,KAAArE,eAGA/T,KAAAgV,aAAA,WACA,IAAAwB,OAAA,IAAAgC,MAAA,IACAtO,KAAAlK,KAAAoU,WAAA3J,cACAL,KAEA,IAAA,IAAA5D,EAAA,EAAAA,EAAA,GAAAA,IAAA,CACA4D,KAAA,IAAAE,KAAAtK,KAAAoU,YACAhK,KAAAG,YAAAL,KAAA1D,EAAA,GACAgQ,OAAAhQ,GAAArK,QAAA4L,OAAA/H,KAAAmV,iBAAA/K,KAAApK,KAAAsS,aAAA,CACAgC,IAAAxX,MAAAkX,SAAA,IAAAxN,IAIA1J,MAAAsc,MAAA7P,WAAAvJ,KAAAoU,WAAApU,KAAA0S,kBACA5V,MAAAuc,KAAArZ,KAAA4M,MAAA4J,OAAAxW,KAAA+S,cACAjW,MAAAqd,kBAAAna,KAAA+S,aAAA,EAAA/S,KAAA+S,aAAA,EAAA,GAGA/S,KAAAmU,QAAA,SAAAwF,MAAAC,OACA,IAAAC,OAAA,IAAAvP,KAAAqP,MAAAlP,cAAAkP,MAAAhP,YACA,IAAAmP,OAAA,IAAAxP,KAAAsP,MAAAnP,cAAAmP,MAAAjP,YACAkP,OAAAtP,YAAAoP,MAAAlP,eACAqP,OAAAvP,YAAAqP,MAAAnP,eACA,OAAAoP,OAAAC,QAGA9Z,KAAA8X,cAAA,SAAA/N,IAAAyN,KACA,IAAApN,KAAApK,KAAAoU,WAAAzJ,WAEA,GAAAZ,MAAA,OAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,KAAA,CACAK,KAAAA,KAAApK,KAAA+S,kBACA,GAAAhJ,MAAA,QAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,OAAA,CACAK,KAAAA,KAAApK,KAAA+S,kBACA,GAAAhJ,MAAA,UAAAA,MAAA,WAAA,CACA,IAAAG,KAAAlK,KAAAoU,WAAA3J,eAAAV,MAAA,UAAA,EAAA,GACA/J,KAAAoU,WAAA7J,YAAAL,WACA,GAAAH,MAAA,OAAA,CACAK,KAAA,OACA,GAAAL,MAAA,MAAA,CACAK,KAAA,GAEApK,KAAAoU,WAAA4F,SAAA5P,UAIAxK,WAAA,0BAAA,CAAA,SAAA,WAAA,aAAA,SAAA9C,MAAAiG,SAAAwG,YACA,IAAA6Q,QAAAC,MACAra,KAAAjD,QAAAgG,SAEA,SAAAuX,gBAAApQ,MACA,OAAA5G,UAAA4G,KAAA,GAAAmQ,MAAA,IAAAA,MAAA,EAGAra,KAAAua,eAAA,WACAH,QAAApa,KAAAmT,YACAkH,MAAAra,KAAAoT,SAAAgH,QACApa,KAAAsW,KAAA,CAAAC,MAAA8D,QAGAra,KAAAgV,aAAA,WACA,IAAAuB,MAAA,IAAAiC,MAAA6B,OAAAjQ,KAEA,IAAA,IAAA5D,EAAA,EAAA1H,MAAAwb,gBAAAta,KAAAoU,WAAA3J,eAAAjE,EAAA6T,MAAA7T,IAAA,CACA4D,KAAA,IAAAE,KAAAtK,KAAAoU,YACAhK,KAAAG,YAAAzL,MAAA0H,EAAA,EAAA,GACA+P,MAAA/P,GAAArK,QAAA4L,OAAA/H,KAAAmV,iBAAA/K,KAAApK,KAAAuS,YAAA,CACA+B,IAAAxX,MAAAkX,SAAA,IAAAxN,IAIA1J,MAAAsc,MAAA,CAAA7C,MAAA,GAAAhB,MAAAgB,MAAA8D,MAAA,GAAA9E,OAAAxK,KAAA,OACAjO,MAAAuc,KAAArZ,KAAA4M,MAAA2J,MAAA6D,SACAtd,MAAAsd,QAAAA,SAGApa,KAAAmU,QAAA,SAAAwF,MAAAC,OACA,OAAAD,MAAAlP,cAAAmP,MAAAnP,eAGAzK,KAAA8X,cAAA,SAAA/N,IAAAyN,KACA,IAAApN,KAAApK,KAAAoU,WAAA3J,cAEA,GAAAV,MAAA,OAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,KAAA,CACAK,KAAAA,KAAAgQ,aACA,GAAArQ,MAAA,QAAA,CACAK,KAAAA,KAAA,OACA,GAAAL,MAAA,OAAA,CACAK,KAAAA,KAAAgQ,aACA,GAAArQ,MAAA,UAAAA,MAAA,WAAA,CACAK,OAAAL,MAAA,UAAA,EAAA,GAAAsQ,WACA,GAAAtQ,MAAA,OAAA,CACAK,KAAAkQ,gBAAAta,KAAAoU,WAAA3J,oBACA,GAAAV,MAAA,MAAA,CACAK,KAAAkQ,gBAAAta,KAAAoU,WAAA3J,eAAA4P,MAAA,EAEAra,KAAAoU,WAAA7J,YAAAH,UAIA/N,UAAA,gBAAA,WACA,MAAA,CACA8E,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,2CAEArE,MAAA,CACA4W,kBAAA,MAEAtS,QAAA,CAAA,gBAAA,YACA/B,SAAA,IACAO,WAAA,0BACAqB,aAAA,aACApE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA8W,eAAA9W,MAAA,GAAAE,YAAAF,MAAA,GAEA8W,eAAA5c,KAAAgG,iBAKAvH,UAAA,eAAA,WACA,MAAA,CACA8E,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,oCAEAC,QAAA,CAAA,iBAAA,gBACA/B,SAAA,IACAO,WAAA,yBACA/C,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA8W,eAAA9W,MAAA,GACA+W,cAAA/W,MAAA,GAEA+W,cAAA7c,KAAA4c,oBAKAne,UAAA,iBAAA,WACA,MAAA,CACA8E,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,sCAEAC,QAAA,CAAA,iBAAA,kBACA/B,SAAA,IACAO,WAAA,2BACA/C,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA8W,eAAA9W,MAAA,GACAgX,gBAAAhX,MAAA,GAEAgX,gBAAA9c,KAAA4c,oBAKAne,UAAA,gBAAA,WACA,MAAA,CACA8E,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,qCAEAC,QAAA,CAAA,iBAAA,iBACA/B,SAAA,IACAO,WAAA,0BACA/C,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA0U,KAAA1U,MAAA,GACAvH,QAAA4L,OAAAqQ,KAAA1U,MAAA,IACA0U,KAAAmC,iBAEAnC,KAAArE,kBAKA5X,QAAAC,OAAA,wBAAA,IAQAue,QAAA,eAAA,CAAA,YAAA,UAAA,SAAAC,UAAAC,SAKA,IAAAC,gBAKA,IAAAC,qBACA,IAAAC,eAAA,CACAC,OAAA,gBACAC,OAAA,wBAEA,IAAAC,gBAAA,CACAC,KAAA,eACAC,QAAA,4BACArC,UAAA,mCACAsC,SAAA,kBAEA,IAAAC,WAAA,cAEA,MAAA,CASAC,WAAA,SAAAlc,MACA,OAAAA,KAAAmc,SAAAnc,KAAAA,KAAA,IAAAA,MAWAoc,WAAA,SAAA/Z,OACAA,MAAAga,WAAAha,OACA,OAAAia,SAAAja,OAAAA,MAAA,GAUAka,aAAA,SAAAvc,MACAA,KAAAU,KAAAwb,WAAAlc,MAEA,IAAAuc,aAAAvc,KAAAuc,cAAAjB,UAAA,GAAAkB,gBAEA,SAAAC,mBAAAC,IACA,OAAAnB,QAAAoB,iBAAAD,IAAAE,UAAA,YAAA,SAGA,MAAAL,cAAAA,eAAAjB,UAAA,GAAAkB,iBAAAC,mBAAAF,cAAA,CACAA,aAAAA,aAAAA,aAGA,OAAAA,cAAAjB,UAAA,GAAAkB,iBAWAK,eAAA,SAAAC,QACA,GAAAA,OAAA,CACA,GAAAjgB,QAAAkgB,YAAAtB,sBAAA,CACA,IAAAuB,SAAA1B,UAAA7W,KAAA,QACAuY,SAAAre,SAAA,uCACA8c,qBAAAF,QAAA0B,WAAAD,SAAA,GAAAE,YACAzB,qBAAAa,SAAAb,sBAAAA,qBAAA,EACAuB,SAAA5d,YAAA,uCAEA,OAAAqc,qBAGA,GAAA5e,QAAAkgB,YAAAvB,iBAAA,CACA,IAAA2B,WAAAtgB,QAAAY,QAAA,sDACA6d,UAAA7W,KAAA,QAAAjB,OAAA2Z,YACA3B,gBAAA2B,WAAA,GAAAC,YAAAD,WAAA,GAAAD,YACA1B,gBAAAc,SAAAd,iBAAAA,gBAAA,EACA2B,WAAAE,SAGA,OAAA7B,iBAiBA8B,iBAAA,SAAAtd,MACAA,KAAAU,KAAAwb,WAAAlc,MAEA,IAAAud,UAAAhC,QAAAoB,iBAAA3c,MACA,IAAAwd,aAAA9c,KAAA0b,WAAAmB,UAAAC,cACA,IAAAC,cAAA/c,KAAA0b,WAAAmB,UAAAE,eACA,IAAAC,aAAAhd,KAAAgd,aAAA1d,KAAA,MAAA,MACA,IAAA6c,eAAAnc,KAAAmc,eAAAZ,WAAA3Q,KAAAoS,aAAAC,UAEA,MAAA,CACAd,eAAAA,eACAe,cAAAF,aAAA5e,YAAA4e,aAAAR,YACAW,MAAAL,aAAAX,eACAiB,cAAAN,aACAO,eAAAL,aAAA3e,aAAA2e,aAAAM,aACAC,OAAAR,cAAAZ,eACAqB,eAAAT,gBAaAU,aAAA,SAAAne,KAAAoe,eACApe,KAAAU,KAAAwb,WAAAlc,MAEA,IAAAqe,cAAAD,cAAA1C,eAAAE,OAAAF,eAAAC,OACA,IAAA4B,UAAAhC,QAAAoB,iBAAA3c,MACA,OAAAqe,cAAA/S,KAAAiS,UAAAje,SAAAie,UAAAe,UAAAf,UAAAgB,YAgBAb,aAAA,SAAA1d,KAAAoe,cAAAI,aACAxe,KAAAU,KAAAwb,WAAAlc,MAEA,IAAAqe,cAAAD,cAAA1C,eAAAE,OAAAF,eAAAC,OACA,IAAA8C,WAAAnD,UAAA,GAAAkB,gBACA,IAAAe,UAAAhC,QAAAoB,iBAAA3c,MACA,GAAAwe,aAAAH,cAAA/S,KAAAiS,UAAAje,SAAAie,UAAAe,UAAAf,UAAAgB,WAAA,CACA,OAAAve,KAEA,IAAA0e,cAAAnB,UAAAX,WAAA,WACA,IAAAc,aAAA1d,KAAA2e,eAAAF,WAEA,GAAAf,eAAAe,YAAAlB,UAAAX,WAAA,QAAA,CACA,OAAA6B,WAGA,MAAAf,aAAAiB,eAAAjB,eAAAe,WAAA,CACA,IAAAG,QAAArD,QAAAoB,iBAAAe,cACA,GAAAgB,eAAAE,QAAAhC,WAAA,SAAA,CACA8B,cAAA,MAGA,IAAAA,eAAAL,cAAA/S,KAAAsT,QAAAtf,SAAAsf,QAAAN,UAAAM,QAAAL,WAAA,CACA,MAEAb,aAAAA,aAAAiB,cAGA,OAAAjB,cAoBAd,SAAA,SAAA5c,KAAA6e,eACA7e,KAAAU,KAAAwb,WAAAlc,MAEA,IAAA8e,WAAApe,KAAAqe,OAAA/e,MACA,GAAA6e,cAAA,CACA,IAAAtB,UAAAhC,QAAAoB,iBAAA3c,MACA8e,WAAAE,KAAAte,KAAA0b,WAAAmB,UAAA0B,WACAH,WAAAI,MAAAxe,KAAA0b,WAAAmB,UAAA4B,YAEA,IAAAC,OAAA1e,KAAA6b,aAAAvc,MACA,IAAAqf,aAAA,CAAAL,IAAA,EAAAE,KAAA,GAEA,GAAAE,SAAA9D,UAAA,GAAAkB,gBAAA,CACA6C,aAAA3e,KAAAqe,OAAAK,QACAC,aAAAL,KAAAI,OAAAE,UAAAF,OAAAG,UACAF,aAAAH,MAAAE,OAAAI,WAAAJ,OAAAK,WAGA,MAAA,CACAlhB,MAAAqE,KAAA+X,MAAA9d,QAAA8J,SAAAmY,WAAAvgB,OAAAugB,WAAAvgB,MAAAyB,KAAAod,aACA5e,OAAAoE,KAAA+X,MAAA9d,QAAA8J,SAAAmY,WAAAtgB,QAAAsgB,WAAAtgB,OAAAwB,KAAA0f,cACAV,IAAApc,KAAA+X,MAAAmE,WAAAE,IAAAK,aAAAL,KACAE,KAAAtc,KAAA+X,MAAAmE,WAAAI,KAAAG,aAAAH,QAoBAH,OAAA,SAAA/e,MACAA,KAAAU,KAAAwb,WAAAlc,MAEA,IAAA2f,QAAA3f,KAAA4f,wBACA,MAAA,CACArhB,MAAAqE,KAAA+X,MAAA9d,QAAA8J,SAAAgZ,QAAAphB,OAAAohB,QAAAphB,MAAAyB,KAAAod,aACA5e,OAAAoE,KAAA+X,MAAA9d,QAAA8J,SAAAgZ,QAAAnhB,QAAAmhB,QAAAnhB,OAAAwB,KAAA0f,cACAV,IAAApc,KAAA+X,MAAAgF,QAAAX,KAAAzD,QAAAsE,aAAAvE,UAAA,GAAAkB,gBAAA+C,YACAL,KAAAtc,KAAA+X,MAAAgF,QAAAT,MAAA3D,QAAAuE,aAAAxE,UAAA,GAAAkB,gBAAAiD,eA2BAM,eAAA,SAAA/f,KAAAggB,YAAAC,gBACAjgB,KAAAU,KAAAwb,WAAAlc,MACAigB,eAAAA,iBAAA,MAAA,KAAA,MAEA,IAAAN,QAAA3f,KAAA4f,wBACA,IAAAM,UAAA,CAAAlB,IAAA,EAAAE,KAAA,EAAAjB,OAAA,EAAAJ,MAAA,GAEA,IAAAtB,aAAAyD,YAAA1E,UAAA,GAAAkB,gBAAA9b,KAAAgd,aAAA1d,MACA,IAAAmgB,gBAAA5D,aAAAqD,wBAEAM,UAAAlB,IAAAmB,gBAAAnB,IAAAzC,aAAA+C,UACAY,UAAAhB,KAAAiB,gBAAAjB,KAAA3C,aAAAiD,WACA,GAAAjD,eAAAjB,UAAA,GAAAkB,gBAAA,CACA0D,UAAAlB,KAAAzD,QAAAsE,YACAK,UAAAhB,MAAA3D,QAAAuE,YAEAI,UAAAjC,OAAAiC,UAAAlB,IAAAzC,aAAAyB,aACAkC,UAAArC,MAAAqC,UAAAhB,KAAA3C,aAAAW,YAEA,GAAA+C,eAAA,CACA,IAAAG,kBAAA7E,QAAAoB,iBAAAJ,cACA2D,UAAAlB,KAAAte,KAAA0b,WAAAgE,kBAAAC,YACAH,UAAAjC,QAAAvd,KAAA0b,WAAAgE,kBAAA3C,eACAyC,UAAAhB,MAAAxe,KAAA0b,WAAAgE,kBAAAE,aACAJ,UAAArC,OAAAnd,KAAA0b,WAAAgE,kBAAA5C,cAGA,MAAA,CACAwB,IAAApc,KAAA+X,MAAAgF,QAAAX,IAAAkB,UAAAlB,KACAf,OAAArb,KAAA+X,MAAAuF,UAAAjC,OAAA0B,QAAA1B,QACAiB,KAAAtc,KAAA+X,MAAAgF,QAAAT,KAAAgB,UAAAhB,MACArB,MAAAjb,KAAA+X,MAAAuF,UAAArC,MAAA8B,QAAA9B,SAqCA0C,eAAA,SAAAC,WACA,IAAAC,UAAA5E,gBAAAC,KAAAxQ,KAAAkV,WACA,GAAAC,UAAA,CACAD,UAAAA,UAAAtd,QAAA2Y,gBAAAC,KAAA,IAGA0E,UAAAA,UAAAlT,MAAA,KAEAkT,UAAA,GAAAA,UAAA,IAAA,MACA,IAAA3E,gBAAAE,QAAAzQ,KAAAkV,UAAA,IAAA,CACAA,UAAA,GAAA,MAGAA,UAAA,GAAAA,UAAA,IAAA,SACA,IAAA3E,gBAAAnC,UAAApO,KAAAkV,UAAA,IAAA,CACAA,UAAA,GAAA,SAGA,GAAAC,UAAA,CACAD,UAAA,GAAA,SACA,CACAA,UAAA,GAAA,MAGA,OAAAA,WAyCAE,iBAAA,SAAAC,SAAAC,WAAAJ,UAAAK,cACAF,SAAAjgB,KAAAwb,WAAAyE,UACAC,WAAAlgB,KAAAwb,WAAA0E,YAGA,IAAAE,YAAAjkB,QAAAgE,UAAA+f,WAAAxD,aAAAwD,WAAAxD,YAAAwD,WAAAG,KAAA,eACA,IAAAC,aAAAnkB,QAAAgE,UAAA+f,WAAAlB,cAAAkB,WAAAlB,aAAAkB,WAAAG,KAAA,gBAEAP,UAAA9f,KAAA6f,eAAAC,WAEA,IAAAS,YAAAJ,aAAAngB,KAAAqe,OAAA4B,UAAAjgB,KAAAkc,SAAA+D,UACA,IAAAO,cAAA,CAAAlC,IAAA,EAAAE,KAAA,EAAAsB,UAAA,IAEA,GAAAA,UAAA,GAAA,CACA,IAAAT,eAAArf,KAAAqf,eAAAY,SAAAE,cAEA,IAAAM,gBAAA5F,QAAAoB,iBAAAiE,YACA,IAAAQ,aAAA,CACA7iB,MAAAuiB,YAAAle,KAAA+X,MAAA/X,KAAAsI,IAAAxK,KAAA0b,WAAA+E,gBAAAhC,YAAAze,KAAA0b,WAAA+E,gBAAAE,eACA7iB,OAAAwiB,aAAApe,KAAA+X,MAAA/X,KAAAsI,IAAAxK,KAAA0b,WAAA+E,gBAAAlC,WAAAve,KAAA0b,WAAA+E,gBAAAG,iBAGAd,UAAA,GAAAA,UAAA,KAAA,OAAAY,aAAA5iB,OAAAuhB,eAAAf,KAAAoC,aAAA5iB,QAAAuhB,eAAA9B,OAAA,SACAuC,UAAA,KAAA,UAAAY,aAAA5iB,OAAAuhB,eAAA9B,QAAAmD,aAAA5iB,QAAAuhB,eAAAf,IAAA,MACAwB,UAAA,KAAA,QAAAY,aAAA7iB,MAAAwhB,eAAAb,MAAAkC,aAAA7iB,OAAAwhB,eAAAlC,MAAA,QACA2C,UAAA,KAAA,SAAAY,aAAA7iB,MAAAwhB,eAAAlC,OAAAuD,aAAA7iB,OAAAwhB,eAAAb,KAAA,OACAsB,UAAA,GAEAA,UAAA,GAAAA,UAAA,KAAA,OAAAY,aAAA5iB,OAAAyiB,YAAAziB,OAAAuhB,eAAA9B,QAAAmD,aAAA5iB,OAAAyiB,YAAAziB,QAAAuhB,eAAAf,IAAA,SACAwB,UAAA,KAAA,UAAAY,aAAA5iB,OAAAyiB,YAAAziB,OAAAuhB,eAAAf,KAAAoC,aAAA5iB,OAAAyiB,YAAAziB,QAAAuhB,eAAA9B,OAAA,MACAuC,UAAA,KAAA,QAAAY,aAAA7iB,MAAA0iB,YAAA1iB,MAAAwhB,eAAAlC,OAAAuD,aAAA7iB,MAAA0iB,YAAA1iB,OAAAwhB,eAAAb,KAAA,QACAsB,UAAA,KAAA,SAAAY,aAAA7iB,MAAA0iB,YAAA1iB,MAAAwhB,eAAAb,MAAAkC,aAAA7iB,MAAA0iB,YAAA1iB,OAAAwhB,eAAAlC,MAAA,OACA2C,UAAA,GAEA,GAAAA,UAAA,KAAA,SAAA,CACA,GAAA3E,gBAAAG,SAAA1Q,KAAAkV,UAAA,IAAA,CACA,IAAAe,UAAAN,YAAA1iB,MAAA,EAAAuiB,YAAA,EACA,GAAAf,eAAAb,KAAAqC,UAAA,GAAAH,aAAA7iB,MAAA0iB,YAAA1iB,OAAAwhB,eAAAlC,MAAA,CACA2C,UAAA,GAAA,YACA,GAAAT,eAAAlC,MAAA0D,UAAA,GAAAH,aAAA7iB,MAAA0iB,YAAA1iB,OAAAwhB,eAAAb,KAAA,CACAsB,UAAA,GAAA,aAEA,CACA,IAAAgB,UAAAP,YAAAziB,OAAA,EAAA4iB,aAAA5iB,OAAA,EACA,GAAAuhB,eAAAf,IAAAwC,UAAA,GAAAJ,aAAA5iB,OAAAyiB,YAAAziB,QAAAuhB,eAAA9B,OAAA,CACAuC,UAAA,GAAA,WACA,GAAAT,eAAA9B,OAAAuD,UAAA,GAAAJ,aAAA5iB,OAAAyiB,YAAAziB,QAAAuhB,eAAAf,IAAA,CACAwB,UAAA,GAAA,YAMA,OAAAA,UAAA,IACA,IAAA,MACAU,cAAAlC,IAAAiC,YAAAjC,IAAAgC,aACA,MACA,IAAA,SACAE,cAAAlC,IAAAiC,YAAAjC,IAAAiC,YAAAziB,OACA,MACA,IAAA,OACA0iB,cAAAhC,KAAA+B,YAAA/B,KAAA4B,YACA,MACA,IAAA,QACAI,cAAAhC,KAAA+B,YAAA/B,KAAA+B,YAAA1iB,MACA,MAGA,OAAAiiB,UAAA,IACA,IAAA,MACAU,cAAAlC,IAAAiC,YAAAjC,IACA,MACA,IAAA,SACAkC,cAAAlC,IAAAiC,YAAAjC,IAAAiC,YAAAziB,OAAAwiB,aACA,MACA,IAAA,OACAE,cAAAhC,KAAA+B,YAAA/B,KACA,MACA,IAAA,QACAgC,cAAAhC,KAAA+B,YAAA/B,KAAA+B,YAAA1iB,MAAAuiB,YACA,MACA,IAAA,SACA,GAAAjF,gBAAAG,SAAA1Q,KAAAkV,UAAA,IAAA,CACAU,cAAAhC,KAAA+B,YAAA/B,KAAA+B,YAAA1iB,MAAA,EAAAuiB,YAAA,MACA,CACAI,cAAAlC,IAAAiC,YAAAjC,IAAAiC,YAAAziB,OAAA,EAAAwiB,aAAA,EAEA,MAGAE,cAAAlC,IAAApc,KAAA+X,MAAAuG,cAAAlC,KACAkC,cAAAhC,KAAAtc,KAAA+X,MAAAuG,cAAAhC,MACAgC,cAAAV,UAAAA,UAAA,KAAA,SAAAA,UAAA,GAAAA,UAAA,GAAA,IAAAA,UAAA,GAEA,OAAAU,eAeAO,UAAA,SAAAC,iBAAAC,kBAAAC,cAAAC,eACA,GAAAH,iBAAAjgB,QAAA,UAAA,GAAAmgB,gBAAAC,cAAA,CACA,MAAA,CACA7C,IAAA2C,kBAAA3C,IAAA6C,cAAA,QAaAC,cAAA,SAAA9hB,KAAAwgB,WACAxgB,KAAAU,KAAAwb,WAAAlc,MAEA,IAAA+hB,UAAA/hB,KAAAqD,cAAA,kCACA,IAAA0e,UAAA,CACA,OAGA,IAAAC,UAAAnlB,QAAAY,QAAAskB,WAAA9iB,SAAA,iBAEA,IAAAgjB,UAAAD,UAAAhiB,KAAAqD,cAAA,kBAAArD,KAAAqD,cAAA,UACA,IAAA4e,UAAA,CACA,OAGA,IAAAC,SAAA,CACAlD,IAAA,GACAf,OAAA,GACAiB,KAAA,GACArB,MAAA,IAGA2C,UAAA9f,KAAA6f,eAAAC,WACA,GAAAA,UAAA,KAAA,SAAA,CAEA3jB,QAAAY,QAAAwkB,WAAA7jB,IAAA8jB,UACA,OAGA,IAAAC,WAAA,UAAA3B,UAAA,GAAA,SACA,IAAA4B,YAAA7G,QAAAoB,iBAAAsF,WAAAE,YAEA,IAAAE,iBAAA,UACA,GAAAxG,gBAAAG,SAAA1Q,KAAAkV,UAAA,IAAA,CACA6B,kBAAA7B,UAAA,GAAA,IAAAA,UAAA,OACA,CACA6B,kBAAA7B,UAAA,GAAA,IAAAA,UAAA,GAEA6B,kBAAA,UACA,IAAAC,aAAA/G,QAAAoB,iBAAAqF,UAAAD,UAAA/hB,MAAAqiB,kBAEA,OAAA7B,UAAA,IACA,IAAA,MACA0B,SAAAjE,OAAA+D,UAAA,IAAA,IAAAI,YACA,MACA,IAAA,SACAF,SAAAlD,IAAAgD,UAAA,IAAA,IAAAI,YACA,MACA,IAAA,OACAF,SAAArE,MAAAmE,UAAA,IAAA,IAAAI,YACA,MACA,IAAA,QACAF,SAAAhD,KAAA8C,UAAA,IAAA,IAAAI,YACA,MAGAF,SAAA1B,UAAA,IAAA8B,aAEAzlB,QAAAY,QAAAwkB,WAAA7jB,IAAA8jB,eAKArlB,QAAAC,OAAA,+BAAA,CAAA,0BAAA,0BAEAuF,MAAA,iCAAA,MAEAjC,SAAA,2BAAA,CACAmiB,gBAAA,GACA1B,aAAA,MACA2B,UAAA,QACAC,qBAAA,KACAC,UAAA,OACAC,YAAA,QACAC,QAAA,MACAC,gBAAA,aACAC,2BAAA,0CACAC,sBAAA,0CACAC,WAAA,CACAlY,KAAA,aACAmY,iBAAA,0BACA7X,MAAA,WAEA8X,YAAA,KACAC,cAAA,KACA3C,UAAA,mBACA4C,kBAAA,MACAC,oBAAA,QAGA/iB,WAAA,+BAAA,CAAA,SAAA,WAAA,SAAA,WAAA,OAAA,SAAA,UAAA,YAAA,aAAA,eAAA,aAAA,gBAAA,2BAAA,WAAA,sBAAA,iCACA,SAAAC,OAAAkD,SAAAjD,OAAA8iB,SAAAvZ,KAAA7M,OAAAqe,QAAAD,UAAAiI,WAAAC,UAAAvZ,WAAAiK,WAAAuP,sBAAA9f,SAAAoQ,iBAAA2P,gCACA,IAAAC,MAAA,GACAC,iBAAA,MACA,IAAAC,WAAApB,qBAAA5B,aAAAqC,YACAJ,2BAAAC,sBAAAe,QAAAC,aAAAC,eACAC,QAAAvQ,eAAAwQ,OAAA3B,gBAAApO,eAAA,GAAAiP,kBACAC,oBAEA3iB,KAAApC,KAAA,SAAA6lB,WACAF,QAAAE,UACAzQ,eAAAwB,eAAA+O,SACAxB,qBAAA5lB,QAAAgE,UAAAL,OAAAiiB,sBACAliB,OAAAwD,QAAAtF,MAAA+B,OAAAiiB,sBACAgB,sBAAAhB,qBACA5B,aAAAhkB,QAAAgE,UAAAL,OAAA4jB,wBACA7jB,OAAAwD,QAAAtF,MAAA+B,OAAA4jB,wBACAX,sBAAA5C,aACAqC,YAAArmB,QAAAgE,UAAAL,OAAA0iB,aACA3iB,OAAAwD,QAAAtF,MAAA+B,OAAA0iB,aAAAO,sBAAAP,YACAJ,2BAAAjmB,QAAAgE,UAAAL,OAAAsiB,4BACAtiB,OAAAsiB,2BACAW,sBAAAX,2BACAC,sBAAAlmB,QAAAgE,UAAAL,OAAAuiB,uBACAviB,OAAAuiB,sBAAAU,sBAAAV,sBACAR,gBAAA1lB,QAAAgE,UAAAL,OAAA+hB,iBACAhiB,OAAAwD,QAAAtF,MAAA+B,OAAA+hB,iBACAkB,sBAAAlB,gBAEAhiB,OAAA4iB,cAAAtmB,QAAAgE,UAAAL,OAAA2iB,eACA5iB,OAAAwD,QAAAtF,MAAA+B,OAAA2iB,eACAM,sBAAAN,cAEAC,kBAAAvmB,QAAAgE,UAAAL,OAAA4iB,mBACA7iB,OAAAwD,QAAAtF,MAAA+B,OAAA4iB,mBAAAK,sBAAAL,kBAEA,GAAA5iB,OAAA4iB,kBAAA,CACAjP,eAAA/S,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAA4iB,mBAAA,SAAAljB,UACAkjB,kBAAAljB,YAIAmjB,oBAAAxmB,QAAAgE,UAAAL,OAAA6iB,qBACA9iB,OAAAwD,QAAAtF,MAAA+B,OAAA6iB,qBAAAI,sBAAAJ,oBAEA,GAAAI,sBAAAT,WAAAxiB,OAAA6jB,MAAA,CACAR,WAAAJ,sBAAAT,WAAAxiB,OAAA6jB,MACAT,iBAAA,SACA,CACAC,WAAArjB,OAAA8jB,oBAAAb,sBAAAZ,gBACAriB,OAAAP,SAAA,qBAAA,SAAAoC,MAAAkiB,UACA,IAAAC,cAAAniB,OAAAohB,sBAAAZ,gBAGA,GAAA2B,gBAAAX,WAAA,CACAA,WAAAW,cACAP,QAAApf,YAAA,KAEA,IAAAgf,WAAA,CACA,MAAA,IAAAY,MAAA,6DAMA,IAAAZ,WAAA,CACA,MAAA,IAAAY,MAAA,yDAGA,GAAAb,kBAAApjB,OAAA8jB,mBAAA,CACA,MAAA,IAAAG,MAAA,yDAIAX,QAAAjnB,QAAAY,QAAA,mEAEAqmB,QAAAllB,KAAA,CACA8lB,WAAA,OACAC,YAAA,sBACAC,eAAA9B,6BAIAiB,aAAAlnB,QAAAY,QAAAqmB,QAAAe,WAAA,IACAd,aAAAnlB,KAAA,eAAAmkB,uBAEA,IAAAxiB,OAAA6T,kBAAA,CACA7T,OAAA6T,kBAAA,GAGA,GAAAwP,iBAAA,CACA,GAAApjB,OAAA6jB,OAAA,QAAA,CACA9jB,OAAA6T,kBAAAtB,eAAA,QACAvS,OAAA6T,kBAAAZ,QAAA,SAIAuQ,aAAAnlB,KAAA,qBAAA,qBAEA,IAAAglB,iBAAA,CAEAK,QAAAa,aAAA,OACAb,QAAAc,YAAAja,KAAAka,UACAf,QAAAgB,SAAAC,QAAAC,WACAlB,QAAAmB,YAAAhkB,KAAA,SAAAiB,OACA,GAAA4hB,QAAA7O,SAAA/S,OAAA,CACA9B,OAAAuK,KAAAzI,MACA,OAAAA,MAGA,GAAAxF,QAAA8J,SAAAtE,OAAA,CACAA,MAAA,IAAA2I,KAAA3I,OAGA9B,OAAAuK,KAAAoJ,WAAAjE,aAAA5N,MAAAqR,eAAAc,UAAA,aAEA,OAAAN,WAAA7F,OAAA9N,OAAAuK,KAAA+Y,kBAEA,CACAI,QAAAmB,YAAAhkB,KAAA,SAAAiB,OACA9B,OAAAuK,KAAAoJ,WAAAjE,aAAA5N,MAAAqR,eAAAc,UAAA,aACA,OAAAnS,QAKA4hB,QAAAoB,qBAAAjkB,KAAA,WACAb,OAAAuK,KAAAwa,gBAAArB,QAAA1O,cAGA9R,SAAAsB,GAAA,UAAAwgB,kBAEArB,OAAAZ,SAAAQ,QAAAR,CAAA/iB,QAEAujB,QAAAzG,SAEA,GAAAwD,aAAA,CACAvF,UAAA7W,KAAA,QAAAjB,OAAA0gB,YACA,CACAzgB,SAAA+hB,MAAAtB,QAGA3jB,OAAAc,IAAA,WAAA,WACA,GAAAd,OAAAS,SAAA,KAAA,CACA,IAAAuiB,WAAAkC,QAAA,CACAllB,OAAA2E,OAAA,WACA3E,OAAAS,OAAA,SAKAkjB,OAAA7G,SACA5Z,SAAAoF,IAAA,UAAA0c,kBACAjK,UAAAzS,IAAA,QAAA6c,mBACA,GAAA1B,eAAA,CACAA,eAAAnb,IAAA,SAAA8c,eAEA9oB,QAAAY,QAAA8d,SAAA1S,IAAA,SAAA8c,eAGA,MAAAxR,eAAAzN,OAAA,CACAyN,eAAAsE,OAAAtE,OAKA5T,OAAAqlB,QAAA,SAAAnb,KACA,OAAAlK,OAAAkK,IAAA,SAAAgZ,sBAAAhZ,IAAA,SAGAlK,OAAA0B,WAAA,SAAA6I,MACA,IAAA+a,IAAA,IAAA7a,KACA,GAAAF,OAAA,QAAA,CACAA,KAAAoJ,WAAAjE,aAAA4V,KAEA,GAAA/a,OAAA,MAAA,CACA,GAAAsY,kBAAA,CACA,OAAA,KAEAtY,KAAAoJ,WAAAjE,aAAA4V,KAGA,GAAA/a,OAAA,QAAA,CACA,OAAAuY,oBAGA,IAAApK,MAAA,GACApc,QAAAiE,QAAA,CAAA,UAAA,WAAA,SAAA2J,KACA,IAAAlK,OAAA6T,kBAAA3J,KAAA,CACAwO,MAAAxO,KAAA,UACA,GAAA5N,QAAAyR,OAAA/N,OAAA6T,kBAAA3J,MAAA,CACAwO,MAAAxO,KAAA,IAAAO,KAAAzK,OAAA6T,kBAAA3J,UACA,CACA,GAAAiZ,+BAAA,CACA3Z,KAAAuF,KAAA,gFAGA2J,MAAAxO,KAAA,IAAAO,KAAAf,WAAA1J,OAAA6T,kBAAA3J,KAAA,cAIA,OAAAlK,OAAA6T,mBACA6E,MAAA1F,SAAAhT,OAAAsU,QAAA/J,KAAAmO,MAAA1F,SAAA,GACA0F,MAAA5F,SAAA9S,OAAAsU,QAAA/J,KAAAmO,MAAA5F,SAAA,GAGA9S,OAAAsU,QAAA,SAAAwF,MAAAC,OACA,OAAA,IAAAtP,KAAAqP,MAAAlP,cAAAkP,MAAAhP,WAAAgP,MAAA1O,WAAA,IAAAX,KAAAsP,MAAAnP,cAAAmP,MAAAjP,WAAAiP,MAAA3O,YAIApL,OAAAulB,cAAA,SAAA9W,IACAzO,OAAAuK,KAAAkE,GACA,IAAAlE,KAAAvK,OAAAuK,KAAAoJ,WAAA7F,OAAA9N,OAAAuK,KAAA+Y,YAAA,KACApgB,SAAAsiB,IAAAjb,MACAmZ,QAAA9e,cAAA5E,OAAAuK,MAEA,GAAA2X,qBAAA,CACAliB,OAAAS,OAAA,MACAyC,SAAA,GAAAuU,UAIAzX,OAAA0X,QAAA,SAAAC,KACA,GAAAA,IAAAzV,QAAA,GAAA,CACAyV,IAAAI,kBACA/X,OAAAS,OAAA,MACAyC,SAAA,GAAAuU,UAIAzX,OAAAuG,OAAA,SAAAgE,KAAAoN,KACAA,IAAAI,kBAEA,GAAAxN,OAAA,QAAA,CACA,IAAAiL,MAAA,IAAA/K,KACAF,KAAAoJ,WAAAjE,aAAA8F,MAAArC,eAAAc,UAAA,aACA1J,KAAAgF,SAAA,EAAA,EAAA,EAAA,GAGA,GAAAhF,OAAA,MAAA,CACA,IAAA+a,IAAA,IAAA7a,KACAF,KAAAoJ,WAAAjE,aAAA4V,IAAAnS,eAAAc,UAAA,aAGAjU,OAAAulB,cAAAhb,OAGAvK,OAAAsD,MAAA,SAAAqU,KACAA,IAAAI,kBAEA/X,OAAAS,OAAA,MACAyC,SAAA,GAAAuU,SAGAzX,OAAAL,SAAArD,QAAAgE,UAAAL,OAAAN,WAAA,MACA,GAAAM,OAAAmU,WAAA,CACAR,eAAA/S,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAmU,YAAA,SAAAzU,UACAK,OAAAL,SAAAA,YAIAK,OAAAV,OAAA,SAAA,SAAAwC,OACA,GAAAA,MAAA,CACA,IAAA9B,OAAAL,SAAA,CACAyD,SAAA,WACAgiB,gBAEA,GAAAzC,YAAA,CACA3iB,OAAAuW,WAAA,wBAGAwE,UAAAvW,GAAA,QAAA2gB,mBAEA,IAAAlF,UAAAhgB,OAAAwlB,eAAAxlB,OAAAwlB,eAAAvC,sBAAAjD,UACA,GAAAK,cAAA2C,UAAAjD,eAAAC,WAAA,GAAA,CACAwD,eAAAA,gBAAAnnB,QAAAY,QAAA+lB,UAAA9F,aAAAja,WACA,GAAAugB,eAAA,CACAA,eAAAjf,GAAA,SAAA4gB,oBAEA,CACA3B,eAAA,KAGAnnB,QAAAY,QAAA8d,SAAAxW,GAAA,SAAA4gB,gBACA,EAAA,WACA,CACAplB,OAAAS,OAAA,WAEA,CACAsa,UAAAzS,IAAA,QAAA6c,mBACA,GAAA1B,eAAA,CACAA,eAAAnb,IAAA,SAAA8c,eAEA9oB,QAAAY,QAAA8d,SAAA1S,IAAA,SAAA8c,kBAIA,SAAAM,YAAAC,QACA,OAAAA,OAAAhjB,QAAA,WAAA,SAAAijB,IAAA,MAAA,IAAAA,GAAAC,gBAGA,SAAAd,gBAAAe,WACA,IAAAvb,KAAAoJ,WAAAzF,MAAA4X,UAAAxC,WAAAtjB,OAAAuK,MACA,GAAA9B,MAAA8B,MAAA,CACA,IAAA,IAAA5D,EAAA,EAAAA,EAAAqb,gBAAA7b,OAAAQ,IAAA,CACA4D,KAAAoJ,WAAAzF,MAAA4X,UAAA9D,gBAAArb,GAAA3G,OAAAuK,MACA,IAAA9B,MAAA8B,MAAA,CACA,OAAAA,OAIA,OAAAA,KAGA,SAAAqa,UAAAkB,WACA,GAAAxpB,QAAA8J,SAAA0f,WAAA,CAEAA,UAAA,IAAArb,KAAAqb,WAGA,IAAAA,UAAA,CACA,OAAA,KAGA,GAAAxpB,QAAAyR,OAAA+X,aAAArd,MAAAqd,WAAA,CACA,OAAAA,UAGA,GAAAxpB,QAAA+R,SAAAyX,WAAA,CACA,IAAAvb,KAAAwa,gBAAAe,WACA,IAAArd,MAAA8B,MAAA,CACA,OAAAoJ,WAAAlE,WAAAlF,KAAA4I,eAAAc,UAAA,cAIA,OAAAd,eAAAc,UAAA,gBAAA6R,UAAAjhB,UAGA,SAAA4f,UAAAsB,WAAAD,WACA,IAAAhkB,MAAAikB,YAAAD,UAEA,IAAA7lB,OAAA+lB,aAAAlkB,MAAA,CACA,OAAA,KAGA,GAAAxF,QAAA8J,SAAAtE,OAAA,CACAA,MAAA,IAAA2I,KAAA3I,OAGA,IAAAA,MAAA,CACA,OAAA,KAGA,GAAAxF,QAAAyR,OAAAjM,SAAA2G,MAAA3G,OAAA,CACA,OAAA,KAGA,GAAAxF,QAAA+R,SAAAvM,OAAA,CACA,OAAA2G,MAAAsc,gBAAAjjB,QAGA,OAAA,MAGA,SAAAqjB,kBAAApkB,OACA,IAAAf,OAAAS,QAAAT,OAAAL,SAAA,CACA,OAGA,IAAAsmB,MAAAtC,OAAA,GACA,IAAAuC,iBAAAhjB,SAAA,GAAAijB,SAAAplB,MAAAqlB,QAGA,IAAAC,oBAAAJ,MAAAE,WAAAthB,WAAAohB,MAAAE,SAAAplB,MAAAqlB,QACA,GAAApmB,OAAAS,UAAAylB,kBAAAG,qBAAA,CACArmB,OAAA2E,OAAA,WACA3E,OAAAS,OAAA,SAKA,SAAAukB,iBAAArN,KACA,GAAAA,IAAAzV,QAAA,IAAAlC,OAAAS,OAAA,CACAkX,IAAAG,iBACAH,IAAAI,kBACA/X,OAAA2E,OAAA,WACA3E,OAAAS,OAAA,QAEAyC,SAAA,GAAAuU,aACA,GAAAE,IAAAzV,QAAA,KAAAlC,OAAAS,OAAA,CACAkX,IAAAG,iBACAH,IAAAI,kBACA/X,OAAA2E,OAAA,WACA3E,OAAAS,OAAA,QAKA,SAAA2kB,gBACA,GAAAplB,OAAAS,OAAA,CACA,IAAA6lB,UAAAhqB,QAAAY,QAAAymB,OAAA,GAAA7gB,cAAA,0BACA,IAAAmd,UAAAhgB,OAAAwlB,eAAAxlB,OAAAwlB,eAAAvC,sBAAAjD,UACA,IAAA5D,SAAA4G,UAAA9C,iBAAAjd,SAAAojB,UAAArG,UAAAK,cACAgG,UAAAzoB,IAAA,CAAA4gB,IAAApC,SAAAoC,IAAA,KAAAE,KAAAtC,SAAAsC,KAAA,OACA,GAAA2H,UAAA5nB,SAAA,wBAAA,CACA4nB,UAAAznB,YAAA,0BAKA,SAAA8V,eAAA5Q,aACA,IAAAoP,eAEA,GAAA7W,QAAA4P,QAAAE,MAAA,EAAA,CAEA+G,eAAA7W,QAAAiqB,SAAAxiB,YAAAoU,UACApU,YAAAoU,SACA,CACArI,SAAA,MAIAqD,eAAAc,UAAA,SAAA/J,KACA,OAAAiJ,eAAAjJ,UAEA,CACAiJ,eAAApP,YAAAoU,SAGA,OAAAhF,eAGAnT,OAAAc,IAAA,sBAAA,WACAsC,SAAAgiB,cAAA,EAAA,YAIA5oB,UAAA,qBAAA,WACA,MAAA,CACA+E,QAAA,CAAA,UAAA,sBACAxB,WAAA,+BACA9C,MAAA,CACA4W,kBAAA,KACApT,OAAA,KACA2hB,YAAA,IACAH,UAAA,IACAE,UAAA,IACAE,QAAA,KAEArlB,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA6f,QAAA7f,MAAA,GACA0U,KAAA1U,MAAA,GAEA0U,KAAAxa,KAAA2lB,aAKAlnB,UAAA,yBAAA,WACA,MAAA,CACAgD,SAAA,IACA6B,WAAA,KACAC,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,8CAKAhF,QAAAC,OAAA,wBAAA,IAIAue,QAAA,aAAA,CAAA,WAAA,SAAA1X,UACA,OAAA,SAAA2F,SAAAyd,cACA,IAAAC,eAEA,OAAA,WACA,IAAAnhB,KAAAnF,KACA,IAAAumB,KAAA/N,MAAAxJ,UAAAwX,MAAA1X,KAAA2X,WACA,GAAAH,eAAA,CACArjB,SAAAmF,OAAAke,gBAGAA,eAAArjB,SAAA,WACA2F,SAAAqB,MAAA9E,KAAAohB,OACAF,mBAKAlqB,QAAAC,OAAA,wBAAA,IAIAue,QAAA,aAAA,WACA,MAAA,CACA+L,UAAA,WACA,IAAA/Z,IAAA,GAEA,MAAA,CACAga,QAAA,WACA,OAAAC,OAAAlQ,KAAA/J,KAAAA,IAAA,SAAA5C,KACA,MAAA,CACAA,IAAAA,IACApI,MAAAgL,IAAA5C,SAIAnN,IAAA,SAAAmN,KACA,OAAA4C,IAAA5C,MAEA8c,OAAA,SAAA9c,KACA,QAAA4C,IAAA5C,MAEA2M,KAAA,WACA,OAAAkQ,OAAAlQ,KAAA/J,MAEAma,IAAA,SAAA/c,IAAApI,OACA,IAAAgL,IAAA5C,KAAA,CACA4C,IAAA5C,KAAA,GAGA4C,IAAA5C,KAAArJ,KAAAiB,QAEAgb,OAAA,SAAA5S,IAAApI,OACA,IAAAolB,OAAApa,IAAA5C,KAEA,IAAAgd,OAAA,CACA,OAGA,IAAAC,IAAAD,OAAAhmB,QAAAY,OAEA,GAAAqlB,OAAA,EAAA,CACAD,OAAA/lB,OAAAgmB,IAAA,GAGA,IAAAD,OAAA/gB,OAAA,QACA2G,IAAA5C,YAQA5N,QAAAC,OAAA,wBAAA,CAAA,wBAAA,0BAEAsD,SAAA,oBAAA,CACAunB,kBAAA,oBACAvlB,UAAA,SAGA0H,QAAA,qBAAA,CAAA,YAAA,aAAA,aAAA,SAAAwR,UAAAiI,WAAAqE,YACA,IAAAC,UAAA,KACA,IAAAC,iBAAAF,WAAAR,YAEA1mB,KAAAqnB,WAAA,SAAAC,cAAAC,UACA,IAAAC,gBAAAJ,iBAAAxqB,IAAA2qB,UACA,GAAAC,gBAAA,CACA,IAAAC,aAAAD,gBAAA3Z,OAAA,SAAA6Z,QAAAC,UACA,GAAAA,SAAA7qB,QAAAwqB,cAAA,CACA,OAAAK,SAGA,OAAAD,SACA,IACA,GAAAD,aAAA,CACA,OAAAD,gBAAAxhB,SAAA,GAIA,OAAA,OAGAhG,KAAA4nB,KAAA,SAAAN,cAAAvqB,QAAAwqB,UACA,IAAAJ,UAAA,CACAvM,UAAAvW,GAAA,QAAAwjB,eAGA,GAAAV,WAAAA,YAAAG,cAAA,CACAH,UAAA7mB,OAAA,MAGA6mB,UAAAG,cAEA,IAAAC,SAAA,CACA,OAGA,IAAAC,gBAAAJ,iBAAAxqB,IAAA2qB,UACA,GAAAC,gBAAA,CACA,IAAAM,aAAAN,gBAAA7a,IAAA,SAAAgb,UACA,OAAAA,SAAA7qB,QAEA,GAAAgrB,aAAA/mB,QAAAumB,kBAAA,EAAA,CACAF,iBAAAN,IAAAS,SAAA,CACAzqB,MAAAwqB,qBAGA,CACAF,iBAAAN,IAAAS,SAAA,CACAzqB,MAAAwqB,kBAKAtnB,KAAAmD,MAAA,SAAAmkB,cAAAvqB,QAAAwqB,UACA,GAAAJ,YAAAG,cAAA,CACA1M,UAAAzS,IAAA,QAAA0f,eACAjN,UAAAzS,IAAA,UAAAnI,KAAA+nB,eACAZ,UAAA,KAGA,IAAAI,SAAA,CACA,OAGA,IAAAC,gBAAAJ,iBAAAxqB,IAAA2qB,UACA,GAAAC,gBAAA,CACA,IAAAQ,gBAAAR,gBAAA3Z,OAAA,SAAA6Z,QAAAC,UACA,GAAAA,SAAA7qB,QAAAwqB,cAAA,CACA,OAAAK,SAGA,OAAAD,SACA,IACA,GAAAM,gBAAA,CACAZ,iBAAAzK,OAAA4K,SAAAS,oBAKA,IAAAH,cAAA,SAAArQ,KAGA,IAAA2P,YAAAA,UAAA7mB,OAAA,CAAA,OAEA,GAAAkX,KAAA2P,UAAAc,iBAAA,WAAA,CAAA,OAEA,GAAAzQ,KAAAA,IAAAzV,QAAA,EAAA,CAAA,OAEA,IAAAmmB,cAAAf,UAAAgB,mBACA,GAAA3Q,KAAA0Q,eAAAA,cAAA,GAAAlC,SAAAxO,IAAAyO,QAAA,CACA,OAGA,IAAAmC,gBAAAjB,UAAAkB,qBACA,GAAA7Q,KAAA2P,UAAAc,iBAAA,gBACAG,iBAAAA,gBAAA,GAAApC,SAAAxO,IAAAyO,QAAA,CACA,OAGAkB,UAAAmB,qBACAnB,UAAA7mB,OAAA,MAEA,IAAAuiB,WAAAkC,QAAA,CACAoC,UAAA3iB,WAIAxE,KAAA+nB,cAAA,SAAAvQ,KACA,IAAA2P,UAAA,CAEA,OAGA,IAAAiB,gBAAAjB,UAAAkB,qBACA,IAAAH,cAAAf,UAAAgB,mBACA,IAAAI,wBAAAH,iBAAAA,gBAAA,GAAApC,SAAAxO,IAAAyO,QACA,IAAAuC,sBAAAN,eAAAA,cAAA,GAAAlC,SAAAxO,IAAAyO,QACA,GAAAzO,IAAAzV,QAAA,GAAA,CACAyV,IAAAI,kBACAuP,UAAAmB,qBACAT,qBACA,GAAAV,UAAAsB,mBAAA,CAAA,GAAA,IAAA1nB,QAAAyW,IAAAzV,UAAA,GAAAolB,UAAA7mB,SAAAioB,yBAAAC,uBAAA,CACAhR,IAAAG,iBACAH,IAAAI,kBACAuP,UAAAuB,mBAAAlR,IAAAzV,YAKAnC,WAAA,wBAAA,CAAA,SAAA,WAAA,SAAA,SAAA,oBAAA,qBAAA,WAAA,eAAA,YAAA,WAAA,mBAAA,SAAAC,OAAAkD,SAAAjD,OAAAtD,OAAAmsB,eAAAC,mBAAAtsB,SAAAwmB,UAAAlI,UAAAgI,SAAAiG,kBACA,IAAA1jB,KAAAnF,KACAlD,MAAA+C,OAAAipB,OACAC,cACA9B,kBAAA0B,eAAA1B,kBACAvlB,UAAAinB,eAAAjnB,UACAsnB,UACAC,UAAA9sB,QAAA6C,KACAkqB,cAAAppB,OAAAqpB,SAAA3sB,OAAAsD,OAAAqpB,UAAAhtB,QAAA6C,KACAoqB,cAAA,MACAC,eAAA,KACAC,KAAA1O,UAAA7W,KAAA,QAEAhB,SAAA9E,SAAA,YAEA+B,KAAApC,KAAA,WACA,GAAAkC,OAAAQ,OAAA,CACA0oB,UAAAxsB,OAAAsD,OAAAQ,QACA2oB,UAAAD,UAAAO,OAEA1pB,OAAAV,OAAA6pB,UAAA,SAAArnB,OACA7E,MAAAwD,SAAAqB,QAIAynB,cAAAjtB,QAAAgE,UAAAL,OAAA0pB,cAGAxpB,KAAAypB,OAAA,SAAA7B,MACA9qB,MAAAwD,OAAAmmB,UAAAzgB,SAAA4hB,MAAA9qB,MAAAwD,OACA,GAAAnE,QAAAqQ,WAAAyc,WAAA,CACAA,UAAAnsB,MAAAA,MAAAwD,QAGA,OAAAxD,MAAAwD,QAIAN,KAAAM,OAAA,WACA,OAAAxD,MAAAwD,QAGAxD,MAAAqrB,iBAAA,WACA,OAAAhjB,KAAA+iB,eAGAprB,MAAAmrB,aAAA,WACA,OAAAnoB,OAAA4pB,WAAA,UAGA5sB,MAAA6sB,WAAA,WACA,OAAA5mB,UAGAjG,MAAA2rB,gBAAA,WACA,OAAAW,eAGAtsB,MAAA4rB,mBAAA,SAAAkB,SACA,IAAAC,MAAA1kB,KAAA2kB,aACA3tB,QAAAY,QAAAoI,KAAA2kB,cAAA/lB,KAAA,KACAhB,SAAAgB,KAAA,MAAAgmB,GAAA,GAAAhmB,KAAA,KAEA,OAAA6lB,SACA,KAAA,GAAA,CACA,IAAAztB,QAAA8J,SAAAd,KAAAkkB,gBAAA,CACAlkB,KAAAkkB,eAAA,MACA,CACAlkB,KAAAkkB,eAAAlkB,KAAAkkB,iBAAAQ,MAAA7jB,OAAA,EACAb,KAAAkkB,eACAlkB,KAAAkkB,eAAA,EAEA,MAEA,KAAA,GAAA,CACA,IAAAltB,QAAA8J,SAAAd,KAAAkkB,gBAAA,CACAlkB,KAAAkkB,eAAAQ,MAAA7jB,OAAA,MACA,CACAb,KAAAkkB,eAAAlkB,KAAAkkB,iBAAA,EACA,EAAAlkB,KAAAkkB,eAAA,EAEA,OAGAQ,MAAA1kB,KAAAkkB,gBAAA/R,SAGAxa,MAAAurB,mBAAA,WACA,OAAAljB,KAAA2kB,cAGAhtB,MAAAwrB,mBAAA,WACA,GAAAnjB,KAAA+iB,cAAA,CACA/iB,KAAA+iB,cAAA,GAAA5Q,UAIA,SAAA0S,qBACAjnB,SAAAD,OAAAqC,KAAA2kB,cAGAhtB,MAAAqC,OAAA,SAAA,SAAAmB,OAAA2pB,SACA,IAAA1C,SAAA,KACApH,aAAA,MAEA,GAAAhkB,QAAAgE,UAAAL,OAAAoqB,kBAAA,CACA,IAAAC,WAAA3tB,OAAAsD,OAAAoqB,iBAAA1tB,CAAAM,OACA,GAAAqtB,WAAA,CACA5C,SAAAprB,QAAAY,QAAAotB,aAIA,GAAAhuB,QAAAgE,UAAAL,OAAAsqB,sBAAA,CACA,IAAAC,kBAAA7tB,OAAAsD,OAAAsqB,qBAAA5tB,CAAAM,OACA,GAAAutB,oBAAA,MAAA,CACAlK,aAAA,MAIA,GAAAA,eAAAoH,SAAA,CACAA,SAAA+B,KAGA,GAAA/B,UAAApiB,KAAA2kB,aAAA,CACA,GAAAxpB,OAAA,CACAinB,SAAAzkB,OAAAqC,KAAA2kB,cACA/mB,SAAAsB,GAAA,WAAA2lB,wBACA,CACAjnB,SAAAoF,IAAA,WAAA6hB,oBACAA,sBAIA,GAAAzC,UAAApiB,KAAA2kB,aAAA,CACA,IAAAQ,IAAAxH,UAAA9C,iBAAAjd,SAAAoC,KAAA2kB,aAAA,cAAA,MACApsB,IACA6sB,WACA3N,iBACAT,eAAA,EAEAze,IAAA,CACA4gB,IAAAgM,IAAAhM,IAAA,KACAta,QAAA1D,OAAA,QAAA,QAGAiqB,WAAAplB,KAAA2kB,aAAAvrB,SAAA,uBACA,IAAAgsB,WAAA,CACA7sB,IAAA8gB,KAAA8L,IAAA9L,KAAA,KACA9gB,IAAAyf,MAAA,WACA,CACAzf,IAAA8gB,KAAA,OACA5B,iBAAAkG,UAAAlG,iBAAA2K,UAEA,GAAA3K,iBAAAS,gBAAAT,iBAAAT,eAAA,CACAA,eAAAS,iBAAAT,eAGAze,IAAAyf,MAAAqN,OAAAjO,WAAAJ,gBACAmO,IAAA9L,KAAAzb,SAAAsd,KAAA,gBAAA,KAKA,IAAAF,aAAA,CACA,IAAAsK,aAAA3H,UAAAzE,OAAAkJ,UAEA7pB,IAAA4gB,IAAAgM,IAAAhM,IAAAmM,aAAAnM,IAAA,KAEA,IAAAiM,WAAA,CACA7sB,IAAA8gB,KAAA8L,IAAA9L,KAAAiM,aAAAjM,KAAA,SACA,CACA9gB,IAAAyf,MAAAqN,OAAAjO,YACA+N,IAAA9L,KAAAiM,aAAAjM,KAAAzb,SAAAsd,KAAA,gBAAA,MAIAlb,KAAA2kB,aAAApsB,IAAAA,KAGA,IAAAgtB,cAAAnD,SAAAA,SAAAxkB,SACA,IAAA4nB,kBAAApD,SAAAN,kBAAAvlB,UACA,IAAAkpB,aAAAF,cAAAnsB,SAAAosB,mBACA,IAAAtD,WAAAuB,mBAAAvB,WAAAxnB,OAAA0nB,UAEA,GAAAqD,gBAAAtqB,OAAA,CACA,IAAAsB,YACA,GAAA2lB,SAAA,CACA3lB,aAAAylB,WAAA,WAAA,kBACA,CACAzlB,YAAAtB,OAAA,WAAA,cAEAhE,SAAAsF,aAAA8oB,cAAAC,mBAAAlsB,KAAA,WACA,GAAAtC,QAAAgE,UAAAG,SAAAA,SAAA2pB,QAAA,CACAf,cAAArpB,OAAA,CAAA+nB,OAAAtnB,YAKA,GAAAA,OAAA,CACA,GAAA6E,KAAA0lB,wBAAA,CACAhC,iBAAA1jB,KAAA0lB,yBAAApsB,KAAA,SAAAqsB,YACA/B,cAAAjsB,MAAAgsB,OACAlG,SAAAkI,WAAAC,OAAAnI,CAAAmG,cAAA,SAAAX,iBACA,IAAA4C,MAAA5C,gBACAjjB,KAAA2kB,aAAAmB,YAAAD,OACA7lB,KAAA2kB,aAAAkB,MACApQ,UAAAvW,GAAA,UAAAukB,mBAAAb,uBAGA,CACAnN,UAAAvW,GAAA,UAAAukB,mBAAAb,eAGAjrB,MAAAwrB,qBACAM,mBAAAhB,KAAA9qB,MAAAiG,SAAAwkB,cACA,CACAqB,mBAAAzlB,MAAArG,MAAAiG,SAAAwkB,UACA,GAAApiB,KAAA0lB,wBAAA,CACA,GAAA9B,cAAA,CACAA,cAAAmC,WAEA,IAAAF,MAAA7uB,QAAAY,QAAA,mCACAoI,KAAA2kB,aAAAmB,YAAAD,OACA7lB,KAAA2kB,aAAAkB,MAGA7lB,KAAAkkB,eAAA,KAGA,GAAAltB,QAAAqQ,WAAAyc,WAAA,CACAA,UAAAppB,OAAAS,cAKAjE,UAAA,cAAA,WACA,MAAA,CACAuD,WAAA,wBACA/C,KAAA,SAAAC,MAAAC,QAAAC,MAAAmuB,cACAA,aAAAvtB,WAKAvB,UAAA,kBAAA,WACA,MAAA,CACAgD,SAAA,IACA+B,QAAA,gBACAvE,KAAA,SAAAC,MAAAC,QAAAC,MAAAmuB,cACA,IAAAA,cAAAhvB,QAAAgE,UAAAnD,MAAAouB,gBAAA,CACA,OAGAruB,QAAAkB,SAAA,iBAEA,IAAAotB,OAAAruB,MAAAmE,YACA,GAAAkqB,OAAA,CACAF,aAAAN,wBAAAQ,OAGA,IAAAF,aAAArB,aAAA,CACAqB,aAAArB,aAAA/sB,aAMAV,UAAA,oBAAA,WACA,MAAA,CACA+E,QAAA,gBACAvE,KAAA,SAAAC,MAAAC,QAAAC,MAAAmuB,cACA,IAAAA,aAAA,CACA,OAGApuB,QAAAkB,SAAA,mBAEAktB,aAAAjD,cAAAnrB,QAEA,IAAAuuB,eAAA,SAAA1qB,OACAA,MAAA+W,iBAEA,IAAA5a,QAAAwB,SAAA,cAAAvB,MAAAwC,SAAA,CACA1C,MAAA0H,OAAA,WACA2mB,aAAA1B,aAKA1sB,QAAAsH,GAAA,QAAAinB,gBAGAvuB,QAAAmB,KAAA,CAAAqtB,gBAAA,KAAAC,gBAAA,QACA1uB,MAAAqC,OAAAgsB,aAAA7qB,OAAA,SAAAA,QACAvD,QAAAmB,KAAA,kBAAAoC,UAGAxD,MAAA6D,IAAA,WAAA,WACA5D,QAAAoL,IAAA,QAAAmjB,sBAMAnvB,QAAAC,OAAA,0BAAA,IAKAue,QAAA,eAAA,WACA,MAAA,CACA+L,UAAA,WACA,IAAA+E,MAAA,GAEA,MAAA,CACAC,IAAA,SAAA3hB,IAAApI,OACA8pB,MAAA/qB,KAAA,CACAqJ,IAAAA,IACApI,MAAAA,SAGA/E,IAAA,SAAAmN,KACA,IAAA,IAAAvD,EAAA,EAAAA,EAAAilB,MAAAzlB,OAAAQ,IAAA,CACA,GAAAuD,MAAA0hB,MAAAjlB,GAAAuD,IAAA,CACA,OAAA0hB,MAAAjlB,MAIAkQ,KAAA,WACA,IAAAA,KAAA,GACA,IAAA,IAAAlQ,EAAA,EAAAA,EAAAilB,MAAAzlB,OAAAQ,IAAA,CACAkQ,KAAAhW,KAAA+qB,MAAAjlB,GAAAuD,KAEA,OAAA2M,MAEA4H,IAAA,WACA,OAAAmN,MAAAA,MAAAzlB,OAAA,IAEA2W,OAAA,SAAA5S,KACA,IAAAid,KAAA,EACA,IAAA,IAAAxgB,EAAA,EAAAA,EAAAilB,MAAAzlB,OAAAQ,IAAA,CACA,GAAAuD,MAAA0hB,MAAAjlB,GAAAuD,IAAA,CACAid,IAAAxgB,EACA,OAGA,OAAAilB,MAAAzqB,OAAAgmB,IAAA,GAAA,IAEA2E,UAAA,WACA,OAAAF,MAAAG,OAEA5lB,OAAA,WACA,OAAAylB,MAAAzlB,aAMA7J,QAAAC,OAAA,qBAAA,CAAA,wBAAA,0BAAA,0BAKAyvB,SAAA,cAAA,WACA,IAAArtB,QAAAwB,KACAA,KAAA8rB,SAAA,KAEA9rB,KAAA+rB,YAAA,SAAAD,UACA9rB,KAAA8rB,SAAAA,UAGA9rB,KAAAgsB,KAAA,CAAA,YAAA,KAAA,SAAAvvB,UAAAF,IACA,IAAAuvB,SAAAttB,QAAAstB,SAAArvB,UAAAG,IAAA4B,QAAAstB,UAAA,KACA,MAAA,CACAttB,QAAA,SAAAytB,WAAAC,OAAAxN,OAAAvZ,MACA,GAAA2mB,SAAA,CACA,OAAAA,SAAAttB,QAAAytB,WAAAC,OAAAxN,OAAAvZ,MAGA,IAAAgnB,SAAA,GAEAhwB,QAAAiE,QAAA6rB,WAAA,SAAAtqB,OACA,GAAAxF,QAAAqQ,WAAA7K,QAAAxF,QAAAiwB,QAAAzqB,OAAA,CACAwqB,SAAAzrB,KAAAnE,GAAAiC,QAAA/B,UAAA4vB,OAAA1qB,cACA,GAAAxF,QAAA+R,SAAAvM,OAAA,CACAwqB,SAAAzrB,KAAAnE,GAAAiC,QAAA/B,UAAAG,IAAA+E,aACA,CACAwqB,SAAAzrB,KAAAnE,GAAAiC,QAAAmD,WAIA,OAAApF,GAAA+vB,IAAAH,UAAA1tB,KAAA,SAAA8tB,UACA,IAAAC,WAAA,GACA,IAAAC,YAAA,EACAtwB,QAAAiE,QAAA6rB,WAAA,SAAAtqB,MAAAoI,KACAyiB,WAAAziB,KAAAwiB,SAAAE,iBAGA,OAAAD,mBAUAnwB,UAAA,mBAAA,CAAA,WAAA,YAAA,iBACA,SAAAC,SAAAG,UAAAiwB,aACA,MAAA,CACArtB,SAAA,IACAiR,QAAA,SAAAC,SAAAC,QACAD,SAAAtS,SAAAuS,OAAAmc,eACA,OAAAzb,SAIA,SAAAA,OAAApU,MAAAC,QAAAC,OACA,GAAAA,MAAA4vB,aAAA,CACAtwB,SAAA2B,SAAAlB,QAAAC,MAAA4vB,cAEA9vB,MAAA6D,IAAA+rB,YAAAG,kBAAA,SAAA7a,EAAA8a,YACA,IAAAhkB,KAAAgkB,aACA,GAAAhwB,MAAAiwB,aAAArkB,UAAA,CACApM,SAAAoC,YAAA3B,QAAAC,MAAA4vB,cAAAnuB,KAAAqK,UACA,CACAA,eAOAzM,UAAA,iBAAA,CAAA,iBAAA,KAAA,cAAA,YACA,SAAAqwB,YAAAnwB,GAAAG,YAAAke,WACA,MAAA,CACA9d,MAAA,CACAgE,MAAA,KAEAzB,SAAA,IACA6B,WAAA,KACAC,YAAA,SAAAoP,SAAAC,QACA,OAAAA,OAAArP,aAAA,kCAEAtE,KAAA,SAAAC,MAAAC,QAAAC,OACAD,QAAAkB,SAAAjB,MAAAgwB,gBAAA,IACAlwB,MAAAkZ,KAAAhZ,MAAAgZ,KAEAlZ,MAAAqG,MAAA,SAAAqU,KACA,IAAAyV,MAAAP,YAAAQ,SACA,GAAAD,OAAAA,MAAAtrB,MAAAwrB,UACAF,MAAAtrB,MAAAwrB,WAAA,UACA3V,IAAAyO,SAAAzO,IAAA4V,cAAA,CACA5V,IAAAG,iBACAH,IAAAI,kBACA8U,YAAAW,QAAAJ,MAAAljB,IAAA,oBAKAhN,QAAAsH,GAAA,QAAAvH,MAAAqG,OAKArG,MAAAwwB,YAAA,KAGA,IAAAC,oBAAAhxB,GAAAixB,QAEA1wB,MAAA2wB,aAAA,WACAF,oBAAA/uB,YAGA+uB,oBAAAG,QAAAjvB,KAAA,WACA,IAAAkvB,iBAAA,KAEA,GAAA3wB,MAAA4vB,aAAA,CACAe,iBAAAjxB,YAAAK,QAAA,CACAkB,SAAAjB,MAAA4vB,eACA9tB,QAEAhC,MAAA6D,IAAA+rB,YAAAG,kBAAA,SAAA7a,EAAA8a,YACA,IAAAhkB,KAAAgkB,aACApwB,YAAAK,QAAA,CACA2B,YAAA1B,MAAA4vB,eACA9tB,QAAAL,KAAAqK,QAKAvM,GAAAqxB,KAAAD,kBAAAlvB,KAAA,WAEA,IAAAwuB,MAAAP,YAAAQ,SACA,GAAAD,MAAA,CACAP,YAAAmB,cAAAZ,MAAAljB,KAOA,KAAA6Q,UAAA,GAAAkT,eAAA/wB,QAAA,GAAAipB,SAAApL,UAAA,GAAAkT,gBAAA,CACA,IAAAC,mBAAAhxB,QAAA,GAAA4F,cAAA,eASA,GAAAorB,mBAAA,CACAA,mBAAAzW,YACA,CACAva,QAAA,GAAAua,mBASAjb,UAAA,yBAAA,WACA,MAAA,CACAiU,QAAA,SAAAC,SAAAC,QACA,GAAAA,OAAAwd,eAAA,CACAzd,SAAAtS,SAAAuS,OAAAyd,6BAMA5xB,UAAA,qBAAA,CAAA,WAAA,SAAAC,UACA,MAAA,CACAO,KAAA,SAAAC,MAAAC,QAAAC,MAAA4C,WAAAsB,YACAA,WAAApE,MAAAuG,QAAA,SAAA6qB,OACAnxB,QAAAoxB,QACA7xB,SAAA8xB,MAAAF,MAAAnxB,gBAMA4d,QAAA,iBAAA,CAAA,WAAA,cAAA,YACA,WAAA,aAAA,KAAA,aAAA,eAAA,eACA,SAAAre,SAAAI,YAAAke,UAAAgI,SAAAC,WAAAtmB,GAAA2qB,WAAAmH,aAAAC,cACA,IAAAC,mBAAA,aAEA,IAAAC,cAAAC,cACA,IAAAC,cAAAL,aAAA3H,YACA,IAAAiI,cAAAzH,WAAAR,YACA,IAAAgG,YAAA,CACAG,kBAAA,2BAEA,IAAA+B,cAAA,EACA,IAAAC,uBAAA,KACA,IAAAC,2BAAA,yCAGA,IAAAC,iBAAA,oEACA,2IACA,mFACA,IAAAnS,iBACA,IAAAoS,kBAAA,SAGA,SAAAC,WAAAC,MACA,IAAAC,UAAA,IACA,OAAAD,KAAA1sB,QAAAwsB,kBAAA,SAAAI,OAAA9E,KACA,OAAAA,IAAA6E,UAAA,IAAAC,OAAA1J,gBAIA,SAAA2J,UAAAtyB,SACA,SAAAA,QAAA2f,aACA3f,QAAAiiB,cACAjiB,QAAAuyB,iBAAAtpB,QAGA,SAAAupB,gBACA,IAAAC,kBAAA,EACA,IAAAC,OAAAf,cAAAhY,OACA,IAAA,IAAAlQ,EAAA,EAAAA,EAAAipB,OAAAzpB,OAAAQ,IAAA,CACA,GAAAkoB,cAAA9xB,IAAA6yB,OAAAjpB,IAAA7E,MAAAwrB,SAAA,CACAqC,iBAAAhpB,GAMA,GAAAgpB,kBAAA,GAAAA,iBAAAZ,cAAA,CACAY,iBAAAZ,cAEA,OAAAY,iBAGA3M,WAAA1jB,OAAAowB,cAAA,SAAAG,kBACA,GAAAjB,cAAA,CACAA,cAAA3tB,MAAA4uB,oBAIA,SAAAC,kBAAAC,cAAAC,uBACA,IAAAC,YAAApB,cAAA9xB,IAAAgzB,eAAAjuB,MACA,IAAAouB,gBAAAD,YAAAvI,SAGAmH,cAAA/R,OAAAiT,eACAf,uBAAAH,cAAApQ,MACA,GAAAuQ,uBAAA,CACAD,cAAAtrB,SAAAurB,uBAAAltB,MAAAquB,WAAA9xB,KAAA,SAAA,IAGA+xB,mBAAAH,YAAAE,WAAAF,YAAAI,WAAA,WACA,IAAAC,eAAAL,YAAAM,aAAA7B,mBACAI,cAAAhS,OAAAwT,eAAAP,eACA,IAAAS,WAAA1B,cAAA9H,OAAAsJ,gBACAJ,gBAAAnuB,YAAAuuB,eAAAE,YACA,IAAAA,YAAAzT,kBAAAA,iBAAAS,gBAAAT,iBAAAT,eAAA,CACA,GAAAS,iBAAAQ,cAAA,CACA2S,gBAAAryB,IAAA,CAAAof,aAAAF,iBAAAQ,cAAA,WACA,CACA2S,gBAAAryB,IAAA,CAAAof,aAAA,KAEAF,iBAAA,KAEA0T,qBAAA,OACAR,YAAAS,gBACAC,sBAGA,GAAAX,uBAAAA,sBAAAvY,MAAA,CACAuY,sBAAAvY,aACA,GAAAyY,gBAAAzY,MAAA,CACAyY,gBAAAzY,SAKA,SAAAgZ,qBAAAG,cACA,IAAAX,YAEA,GAAApB,cAAA1oB,SAAA,EAAA,CACA8pB,YAAApB,cAAApQ,MAAA3c,MACAmuB,YAAAE,WAAApuB,YAAAkuB,YAAA9C,gBAAA,GAAAyD,eAIA,SAAAD,sBAEA,GAAAhC,eAAAe,mBAAA,EAAA,CACA,IAAAmB,iBAAAjC,cACAwB,mBAAAzB,cAAAC,cAAA,WACAiC,iBAAA,OAEAlC,cAAA9pB,UACA+pB,cAAA/pB,WAIA,SAAAurB,mBAAAU,MAAA7zB,MAAAgM,KAAAynB,gBACA,IAAAK,cACA,IAAAC,aAAA,KACA,IAAA/D,WAAA,WACA,IAAA8D,cAAA,CACAA,cAAAr0B,GAAAixB,QACAqD,aAAAD,cAAAlD,QAGA,OAAA,SAAAoD,YACAF,cAAApyB,YAGA1B,MAAAsZ,WAAAsW,YAAAG,kBAAAC,YAKA,OAAAvwB,GAAAqxB,KAAAiD,cAAApyB,KAAAsyB,gBAEA,SAAAA,iBACA,GAAAA,eAAAjoB,KAAA,CACA,OAEAioB,eAAAjoB,KAAA,KAEAxM,SAAA00B,MAAAL,OAAAlyB,KAAA,WACA,GAAAqK,KAAA,CACAA,OAGA6nB,MAAAhU,SACA,GAAA4T,eAAA,CACAA,eAAA/xB,aAIA1B,MAAAouB,YAIAtQ,UAAAvW,GAAA,UAAA4sB,iBAEApO,WAAAliB,IAAA,WAAA,WACAia,UAAAzS,IAAA,UAAA8oB,mBAGA,SAAAA,gBAAAzZ,KACA,GAAAA,IAAA0Z,qBAAA,CACA,OAAA1Z,IAGA,IAAAyV,MAAAyB,cAAApQ,MACA,GAAA2O,MAAA,CACA,OAAAzV,IAAAzV,OACA,KAAA,GAAA,CACA,GAAAkrB,MAAAtrB,MAAAwvB,SAAA,CACA3Z,IAAAG,iBACAkL,WAAAre,OAAA,WACAkoB,YAAAW,QAAAJ,MAAAljB,IAAA,sBAGA,MAEA,KAAA,EAAA,CACA,IAAAqnB,KAAA1E,YAAA2E,qBAAApE,OACA,IAAAqE,aAAA,MACA,GAAA9Z,IAAAC,SAAA,CACA,GAAAiV,YAAA6E,mBAAA/Z,IAAA4Z,OAAA1E,YAAA8E,eAAAha,IAAAyV,OAAA,CACAqE,aAAA5E,YAAA+E,0BAAAL,WAEA,CACA,GAAA1E,YAAAgF,kBAAAla,IAAA4Z,MAAA,CACAE,aAAA5E,YAAAiF,2BAAAP,OAIA,GAAAE,aAAA,CACA9Z,IAAAG,iBACAH,IAAAI,kBAGA,SAMA8U,YAAA9E,KAAA,SAAAgI,cAAA3C,OACA,IAAA2E,YAAAhX,UAAA,GAAAkT,cACAqC,eAAAlD,MAAAmD,aAAA7B,mBAEA+B,qBAAA,OAIAzB,uBAAAH,cAAApQ,MAEAoQ,cAAAhD,IAAAkE,cAAA,CACAiC,SAAA5E,MAAA4E,SACAC,eAAA7E,MAAA6E,eACAvB,eAAAtD,MAAAsD,eACAL,WAAAjD,MAAAnwB,MACAqwB,SAAAF,MAAAE,SACAgE,SAAAlE,MAAAkE,SACAf,YAAAnD,MAAAmD,YACApD,eAAAC,MAAAD,eACAtkB,UAAAukB,MAAAvkB,UACA6e,SAAA0F,MAAA1F,WAGAoH,cAAA7H,IAAAqJ,eAAAP,eAEA,IAAAG,gBAAA9C,MAAA1F,SACAwK,kBAAAxC,gBAEA,GAAAwC,mBAAA,IAAAvD,cAAA,CACAC,cAAA5L,WAAAiG,KAAA,MACA2F,cAAA1B,aAAAE,MACAwB,cAAA3tB,MAAAixB,kBACAvD,cAAAryB,QAAAY,QAAA,mDACAyxB,cAAAtwB,KAAA,CACA8zB,MAAA,iBACAC,WAAA,mDACAC,4BAAA,OACAC,iBAAA,OAEA,GAAAlF,MAAAN,cAAA,CACA6B,cAAAvwB,SAAAgvB,MAAAN,eAGA,GAAAM,MAAAvkB,UAAA,CACA8lB,cAAAtwB,KAAA,kBAAA,QAEA0kB,SAAA4L,cAAA5L,CAAA6L,eACAnyB,SAAA8xB,MAAAI,cAAAuB,iBACA,GAAAzB,aAAA7Q,aAAAsS,iBAAA,CACAnT,iBAAA0R,aAAA1R,iBAAAmT,iBACA,GAAAnT,iBAAAS,gBAAAT,iBAAAT,eAAA,CACA4T,gBAAAryB,IAAA,CAAAof,aAAAF,iBAAAO,MAAA,SAKA,IAAAiV,QACA,GAAAnF,MAAAoF,UAAA,CACAD,QAAAE,SAAAC,cAAAtD,WAAAhC,MAAAoF,UAAAnD,OACAkD,QAAAj2B,QAAAY,QAAAq1B,SACAA,QAAAl0B,KAAA,CACAM,QAAA,WACAg0B,iBAAA,oBACArvB,MAAA,iBACAkqB,QAAA,yBAEA,CACA+E,QAAAnF,MAAAmF,QAIAxD,cAAAC,uBAAAvrB,SAAAurB,uBAAAltB,MAAAquB,WAAA9xB,KAAA,SAAA,IAAA,EAAA,EACA,IAAAu0B,aAAAt2B,QAAAY,QAAA,+CACA01B,aAAAv0B,KAAA,CACA8zB,MAAA,QACA9N,eAAA+I,MAAAyF,kBACAC,mBAAA1F,MAAAD,eACA4F,KAAA,SACAC,kBAAA5F,MAAA6F,eACAC,mBAAA9F,MAAA+F,gBACAhd,KAAAiX,MAAAjX,KACAlV,MAAA8tB,cACAqE,QAAA,UACAhB,WAAA,2DACAiB,UAAA,EACAhB,4BAAA,OACAC,iBAAA,OACArvB,OAAAsvB,SACA,GAAAnF,MAAAkG,YAAA,CACAV,aAAAx0B,SAAAgvB,MAAAkG,aAGA,GAAAlG,MAAAvkB,UAAA,CACA+pB,aAAAv0B,KAAA,kBAAA,QAGA6xB,gBAAA9xB,SAAAkyB,gBACA,GAAAlD,MAAAnwB,MAAA,CAGAmwB,MAAAnwB,MAAAs2B,gBAAAxE,cAEAtyB,SAAA8xB,MAAAxL,SAAA6P,aAAA7P,CAAAqK,MAAAnwB,OAAAizB,iBAEArB,cAAApQ,MAAA3c,MAAAquB,WAAAyC,aACA/D,cAAApQ,MAAA3c,MAAAiwB,YAAAA,YAEAyB,gBAAAZ,cAEA,SAAAY,gBAAArX,IACA,IAAAA,IAAAA,GAAA,GAAAiB,UAAA,OAAA,CACA,OAGAqW,YAAAtX,IAAA5b,QAAA,SAAAmzB,SACA,IAAAC,oBAAAD,QAAAE,aAAA,iBAAA,OACAC,gBAAApwB,SAAAiwB,QAAAE,aAAA3E,4BAAA,IAEA,IAAA4E,gBAAA,CACAA,gBAAAF,oBAAA,EAAA,EAGAD,QAAAI,aAAA7E,2BAAA4E,gBAAA,GACAH,QAAAI,aAAA,cAAA,UAGA,OAAAN,gBAAArX,GAAA0C,UAEA,SAAA4U,YAAAtX,IACA,IAAAmI,SAAAnI,GAAA0C,SAAA1C,GAAA0C,SAAAyF,WAAA,GAEA,OAAA3L,MAAAxJ,UAAArB,OAAAmB,KAAAqV,SAAA,SAAAyP,OACA,OAAAA,QAAA5X,GAAA,QAMA,SAAA6X,iBAAA/D,YAAAgE,eAAAC,SACA,OAAAjE,YAAAnuB,MAAAuuB,WAAA9Z,WAAA,gBAAA0d,eAAAC,SAAAC,iBAGA,SAAAC,2BACAzb,MAAAxJ,UAAA5O,QAAA0O,KACAwjB,SAAA4B,iBAAA,IAAApF,2BAAA,KACA,SAAAqF,UACA,IAAAT,gBAAApwB,SAAA6wB,SAAAV,aAAA3E,4BAAA,IACAsF,eAAAV,gBAAA,EACAS,SAAAR,aAAA7E,2BAAAsF,gBAEA,IAAAA,eAAA,CACAD,SAAAE,gBAAAvF,4BACAqF,SAAAE,gBAAA,kBAMA3H,YAAAvpB,MAAA,SAAAysB,cAAA0E,QACA,IAAAxE,YAAApB,cAAA9xB,IAAAgzB,eACAqE,2BACA,GAAAnE,aAAA+D,iBAAA/D,YAAAwE,OAAA,MAAA,CACAxE,YAAAnuB,MAAAuuB,WAAAqE,0BAAA,KACAzE,YAAAnuB,MAAAkwB,SAAArzB,QAAA81B,QACA3E,kBAAAC,cAAAE,YAAAnuB,MAAAiwB,aACA,OAAA,KAGA,OAAA9B,aAGApD,YAAAW,QAAA,SAAAuC,cAAA4E,QACA,IAAA1E,YAAApB,cAAA9xB,IAAAgzB,eACAqE,2BACA,GAAAnE,aAAA+D,iBAAA/D,YAAA0E,OAAA,OAAA,CACA1E,YAAAnuB,MAAAuuB,WAAAqE,0BAAA,KACAzE,YAAAnuB,MAAAkwB,SAAA4C,OAAAD,QACA7E,kBAAAC,cAAAE,YAAAnuB,MAAAiwB,aACA,OAAA,KAEA,OAAA9B,aAGApD,YAAAgI,WAAA,SAAAF,QACA,IAAAG,SAAA30B,KAAAktB,SACA,MAAAyH,UAAA30B,KAAAqtB,QAAAsH,SAAA5qB,IAAAyqB,QAAA,CACAG,SAAA30B,KAAAktB,WAIAR,YAAAQ,OAAA,WACA,OAAAwB,cAAApQ,OAGAoO,YAAAmB,cAAA,SAAA+B,eACA,IAAAE,YAAApB,cAAA9xB,IAAAgzB,eACA,GAAAE,YAAA,CACAA,YAAAnuB,MAAAmwB,eAAAtzB,YAIAkuB,YAAAiF,2BAAA,SAAAP,MACA,GAAAA,KAAAprB,OAAA,EAAA,CACAorB,KAAA,GAAA9Z,QACA,OAAA,KAEA,OAAA,OAGAoV,YAAA+E,0BAAA,SAAAL,MACA,GAAAA,KAAAprB,OAAA,EAAA,CACAorB,KAAAA,KAAAprB,OAAA,GAAAsR,QACA,OAAA,KAEA,OAAA,OAGAoV,YAAA8E,eAAA,SAAAha,IAAAsY,aACA,GAAAtY,KAAAsY,YAAA,CACA,IAAAE,WAAAF,YAAAnuB,MAAAquB,WACA,GAAAA,YAAAA,WAAAhqB,OAAA,CACA,OAAAwR,IAAAyO,QAAAzO,IAAAod,cAAA5E,WAAA,IAGA,OAAA,OAGAtD,YAAA6E,mBAAA,SAAA/Z,IAAA4Z,MACA,GAAAA,KAAAprB,OAAA,EAAA,CACA,OAAAwR,IAAAyO,QAAAzO,IAAAod,cAAAxD,KAAA,GAEA,OAAA,OAGA1E,YAAAgF,kBAAA,SAAAla,IAAA4Z,MACA,GAAAA,KAAAprB,OAAA,EAAA,CACA,OAAAwR,IAAAyO,QAAAzO,IAAAod,cAAAxD,KAAAA,KAAAprB,OAAA,GAEA,OAAA,OAGA0mB,YAAA2E,qBAAA,SAAAvB,aACA,GAAAA,YAAA,CACA,IAAA+E,WAAA/E,YAAAnuB,MAAAquB,WACA,GAAA6E,YAAAA,WAAA7uB,OAAA,CACA,IAAA8uB,SAAAD,WAAA,GAAAX,iBAAAnF,kBACA,OAAA+F,SACAtc,MAAAxJ,UAAArB,OAAAmB,KAAAgmB,SAAA,SAAA/3B,SACA,OAAAsyB,UAAAtyB,WACA+3B,YAKA,OAAApI,eAGAb,SAAA,YAAA,WACA,IAAAkJ,eAAA,CACAC,QAAA,CACAtsB,UAAA,KACAykB,SAAA,KACAgE,SAAA,MAEAnF,KAAA,CAAA,aAAA,KAAA,YAAA,mBAAA,cAAA,cAAA,iBACA,SAAAnJ,WAAAtmB,GAAAqe,UAAAiO,iBAAAoM,YAAAC,YAAAxI,aACA,IAAAyI,OAAA,GAEA,SAAAC,mBAAAJ,SACA,OAAAA,QAAAzyB,SAAAhG,GAAAqxB,KAAAoH,QAAAzyB,UACAsmB,iBAAA1sB,QAAAqQ,WAAAwoB,QAAA7zB,aACA6zB,QAAA7zB,cAAA6zB,QAAA7zB,aAGA,IAAAk0B,aAAA,KACAF,OAAAG,gBAAA,WACA,OAAAD,cAGAF,OAAAvN,KAAA,SAAAmF,cACA,IAAAwI,oBAAAh5B,GAAAixB,QACA,IAAAgI,oBAAAj5B,GAAAixB,QACA,IAAAiI,oBAAAl5B,GAAAixB,QACA,IAAAkI,oBAAAn5B,GAAAixB,QAGA,IAAAoC,cAAA,CACA0E,OAAAiB,oBAAA7H,QACA+B,OAAA+F,oBAAA9H,QACAiI,OAAAF,oBAAA/H,QACAkI,SAAAF,oBAAAhI,QACAvqB,MAAA,SAAAmxB,QACA,OAAA5H,YAAAvpB,MAAAysB,cAAA0E,SAEAjH,QAAA,SAAAmH,QACA,OAAA9H,YAAAW,QAAAuC,cAAA4E,UAKAzH,aAAA5wB,QAAA4L,OAAA,GAAAgtB,eAAAC,QAAAjI,cACAA,aAAAvuB,QAAAuuB,aAAAvuB,SAAA,GACAuuB,aAAAxF,SAAAwF,aAAAxF,UAAA3M,UAAA7W,KAAA,QAAAgmB,GAAA,GAEA,IAAAgD,aAAAxF,SAAAvhB,OAAA,CACA,MAAA,IAAA+d,MAAA,4EAIA,IAAAgJ,aAAAsF,YAAAtF,aAAAxqB,WAAAwqB,aAAA5rB,YAAA,CACA,MAAA,IAAA4iB,MAAA,oEAGA,IAAA8R,0BACA,GAAA9I,aAAAsF,UAAA,CACAwD,0BAAAt5B,GAAAqxB,KAAAsH,YAAA12B,QAAAuuB,aAAAvuB,QAAA,GAAA,KAAA,WACA,CACAq3B,0BACAt5B,GAAA+vB,IAAA,CAAA8I,mBAAArI,cAAAmI,YAAA12B,QAAAuuB,aAAAvuB,QAAA,GAAA,KAAA,QAGA,SAAAs3B,sBACA,OAAAD,0BAOA,IAAAE,YACAA,YAAAV,aAAA94B,GAAA+vB,IAAA,CAAA+I,eACA52B,KAAAq3B,oBAAAA,qBACAr3B,KAAA,SAAAu3B,eAAAC,YACA,IAAAC,cAAAnJ,aAAAjwB,OAAA+lB,WAEA,IAAAqN,WAAAgG,cAAApN,OACAoH,WAAAiG,OAAAvG,cAAAzsB,MACA+sB,WAAAkG,SAAAxG,cAAAvC,QAEA6C,WAAAvvB,IAAA,WAAA,WACA,IAAAuvB,WAAAqE,0BAAA,CACArE,WAAAkG,SAAA,iCAIA,IAAAnJ,MAAA,CACAnwB,MAAAozB,WACA2B,SAAA0D,oBACAzD,eAAA4D,oBACAnF,eAAAkF,oBACA/sB,UAAAqkB,aAAArkB,UACAykB,SAAAJ,aAAAI,SACAgE,SAAApE,aAAAoE,SACAxE,cAAAI,aAAAJ,cACAK,eAAAD,aAAAC,eACAmG,YAAApG,aAAAoG,YACAT,kBAAA3F,aAAA2F,kBACAI,eAAA/F,aAAA+F,eACAE,gBAAAjG,aAAAiG,gBACAhd,KAAA+W,aAAA/W,KACAoa,YAAArD,aAAAqD,YACA7I,SAAAwF,aAAAxF,UAGA,IAAA8K,UAAA,GACA,IAAAgE,aAAAC,gBAAAC,WAAA,GAEA,GAAAxJ,aAAAsF,UAAA,CACAmE,gBAAAnE,UAAA,MAAA,KAAA,OACAA,UAAAnD,KAAAnC,aAAAsF,UACApF,MAAAoF,UAAAA,eACA,GAAAtF,aAAAntB,WAAA,CACA42B,gBAAAD,WAAA,KAAA,MAAA,MAIAD,gBAAArB,YAAAlI,aAAAntB,WAAA22B,WAAA,KAAAxJ,aAAA9rB,cACA,GAAA8rB,aAAA9rB,cAAA8rB,aAAA0J,iBAAA,CACAJ,aAAAC,gBAAAzkB,SACAwkB,aAAAF,OAAAjG,WAAAiG,OACAE,aAAAD,SAAAlG,WAAAkG,SACAj6B,QAAA4L,OAAAsuB,aAAA,CACAK,SAAAH,WAAA12B,OAAA62B,UACAR,eAGAG,aAAAC,kBAEA,GAAAn6B,QAAAqQ,WAAA6pB,aAAAM,SAAA,CACAN,aAAAM,WAIA,IAAA5J,aAAAsF,UAAA,CACApF,MAAAmF,QAAA6D,WAAA,GAGAvJ,YAAA9E,KAAAgI,cAAA3C,OACAuI,oBAAAh3B,QAAA,MAEA,SAAAg4B,gBAAAI,IAAAr0B,SAAAs0B,gBAAAC,YACAF,IAAA/2B,OAAAqwB,WACA0G,IAAA/2B,OAAA62B,SAAA,GACA,GAAAG,gBAAA,CACAD,IAAA/2B,OAAAk3B,kBAAAnH,kBACA,CACAgH,IAAAG,kBAAAnH,cAGA,IAAArD,SAAAhqB,SAAA0zB,WAAA,GAAAA,WACA95B,QAAAiE,QAAAmsB,SAAA,SAAA5qB,MAAAoI,KACA,GAAA+sB,WAAA,CACAF,IAAA7sB,KAAApI,MAGAi1B,IAAA/2B,OAAA62B,SAAA3sB,KAAApI,UAGA,SAAAq1B,aAAAxC,QACAgB,oBAAAf,OAAAD,QACAe,oBAAAd,OAAAD,UACA,WAAA,WACA,GAAAa,eAAAU,YAAA,CACAV,aAAA,QAIA,OAAAzF,eAGA,OAAAuF,UAKA,OAAAJ,iBAGA54B,QAAAC,OAAA,sBAAA,IAKAue,QAAA,YAAA,CAAA,SAAA,SAAAne,QACA,MAAA,CACAy6B,OAAA,SAAA7e,KAAAvY,OAAAC,QACAsY,KAAA8e,YAAAp3B,OAAAq3B,SAAA36B,OAAAsD,OAAAq3B,UAAA5N,OAAAptB,QAAA6C,KACAoZ,KAAAxU,YAAA,CAAAa,cAAAtI,QAAA6C,MACAoZ,KAAAgf,UAAA,GAEAhf,KAAAxa,KAAA,SAAAgG,YAAAyzB,QACAjf,KAAAxU,YAAAA,YACAwU,KAAAif,OAAAA,OAEAzzB,YAAAK,QAAA,WACAmU,KAAAxD,UAGA,GAAA9U,OAAAw3B,aAAA,CACAlf,KAAAgf,UAAA12B,KAAAb,OAAAwD,QAAAlE,OAAAW,OAAAw3B,aAAA,SAAA31B,OACAyW,KAAAkf,aAAAh0B,SAAA3B,MAAA,IACA9B,OAAA03B,WAAAnf,KAAAof,sBACApf,KAAAqf,oBAEA,CACArf,KAAAkf,aAAAD,OAAAC,aAGAz3B,OAAAV,OAAA,aAAA,SAAAu4B,SAAAC,UACA,GAAAx7B,QAAAgE,UAAAu3B,WAAAA,WAAAC,SAAA,CACA93B,OAAA03B,WAAAnf,KAAAof,sBACApf,KAAAqf,iBAKArf,KAAAof,oBAAA,WACA,IAAAD,WAAAnf,KAAAkf,aAAA,EAAA,EAAAp1B,KAAA01B,KAAA/3B,OAAAg4B,WAAAzf,KAAAkf,cACA,OAAAp1B,KAAA41B,IAAAP,YAAA,EAAA,IAGAnf,KAAAxD,OAAA,WACA/U,OAAAk4B,KAAAz0B,SAAA8U,KAAAxU,YAAAiR,WAAA,KAAA,GAGAhV,OAAAm4B,WAAA,SAAAD,KAAAvgB,KACA,GAAAA,IAAA,CACAA,IAAAG,iBAGA,IAAAsgB,cAAAp4B,OAAAoU,aAAAuD,IACA,GAAAygB,cAAAp4B,OAAAk4B,OAAAA,MAAAA,KAAA,GAAAA,MAAAl4B,OAAA03B,WAAA,CACA,GAAA/f,KAAAA,IAAAyO,OAAA,CACAzO,IAAAyO,OAAAiS,OAEA9f,KAAAxU,YAAAa,cAAAszB,MACA3f,KAAAxU,YAAAK,YAIApE,OAAAqlB,QAAA,SAAAnb,KACA,OAAAlK,OAAAkK,IAAA,SAAAqO,KAAAif,OAAAttB,IAAA,SAGAlK,OAAAs4B,WAAA,WACA,OAAAt4B,OAAAk4B,OAAA,GAGAl4B,OAAAu4B,OAAA,WACA,OAAAv4B,OAAAk4B,OAAAl4B,OAAA03B,YAGAnf,KAAAqf,WAAA,WACArf,KAAA8e,YAAAr3B,OAAAwD,QAAAxD,OAAA03B,YAEA,GAAA13B,OAAAk4B,KAAAl4B,OAAA03B,WAAA,CACA13B,OAAAm4B,WAAAn4B,OAAA03B,gBACA,CACAnf,KAAAxU,YAAAK,YAIApE,OAAAc,IAAA,WAAA,WACA,MAAAyX,KAAAgf,UAAApxB,OAAA,CACAoS,KAAAgf,UAAArf,OAAAK,WAOAjc,QAAAC,OAAA,qBAAA,CAAA,sBAAA,0BAEAwD,WAAA,qBAAA,CAAA,SAAA,SAAA,YAAA,iBAAA,SAAAC,OAAAC,OAAAu4B,UAAAC,gBACAz4B,OAAA04B,MAAAp8B,QAAAgE,UAAAL,OAAAy4B,OAAA14B,OAAAwD,QAAAtF,MAAA+B,OAAAy4B,OAAAD,eAAAC,MAEAF,UAAApB,OAAAj3B,KAAAH,OAAAC,WAGAJ,SAAA,iBAAA,CACA43B,aAAA,GACAkB,aAAA,aACAC,SAAA,SACAF,MAAA,OAGAl8B,UAAA,WAAA,CAAA,iBAAA,SAAAi8B,gBACA,MAAA,CACAx7B,MAAA,CACA+6B,WAAA,IACAW,aAAA,IACAC,SAAA,IACAxkB,WAAA,KAEA7S,QAAA,CAAA,WAAA,YACA/B,SAAA,IACAO,WAAA,qBACAqB,aAAA,QACAE,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,iCAEAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA3G,QAAAkB,SAAA,SACA,IAAAy6B,eAAAh1B,MAAA,GAAAE,YAAAF,MAAA,GAEA,IAAAE,YAAA,CACA,OAGA80B,eAAA96B,KAAAgG,YAAA00B,qBAKAn8B,QAAAC,OAAA,0BAAA,CAAA,sBAAA,0BACAwD,WAAA,0BAAA,CAAA,SAAA,SAAA,SAAA,YAAA,sBAAA,SAAAC,OAAAC,OAAAtD,OAAA67B,UAAAM,qBACA,IAAAvgB,KAAApY,KAEA,IAAA44B,QAAAz8B,QAAAgE,UAAAL,OAAA84B,SAAA/4B,OAAAwD,QAAAtF,MAAA+B,OAAA84B,SAAAD,oBAAAC,QACAC,OAAA18B,QAAAgE,UAAAL,OAAA+4B,QAAAh5B,OAAAwD,QAAAtF,MAAA+B,OAAA+4B,QAAAF,oBAAAE,OACAC,cAAA38B,QAAAgE,UAAAL,OAAAg5B,eAAAj5B,OAAAwD,QAAAtF,MAAA+B,OAAAg5B,eAAAH,oBAAAG,cACAC,oBAAA58B,QAAAgE,UAAAL,OAAAi5B,qBAAAl5B,OAAAwD,QAAAtF,MAAA+B,OAAAi5B,qBAAAJ,oBAAAI,oBACAC,UAAA78B,QAAAgE,UAAAL,OAAAk5B,WAAA,SAAAhS,KAAA,OAAAnnB,OAAAwD,QAAAtF,MAAA+B,OAAAk5B,UAAA,CAAAC,MAAAjS,OAAA7qB,QAAA+8B,SACAr5B,OAAAs5B,cAAAh9B,QAAAgE,UAAAL,OAAAq5B,eAAAt5B,OAAAwD,QAAAtF,MAAA+B,OAAAq5B,eAAAR,oBAAAQ,cACAt5B,OAAAu5B,eAAAj9B,QAAAgE,UAAAL,OAAAs5B,gBAAAv5B,OAAAwD,QAAAtF,MAAA+B,OAAAs5B,gBAAAT,oBAAAS,eACAt5B,OAAAL,KAAA,OAAA,QAEA44B,UAAApB,OAAAj3B,KAAAH,OAAAC,QAEA,GAAAA,OAAA84B,QAAA,CACAxgB,KAAAgf,UAAA12B,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAA84B,SAAA,SAAAj3B,OACAi3B,QAAAt1B,SAAA3B,MAAA,IACAyW,KAAAxD,YAKA,SAAAykB,SAAAC,OAAAC,KAAAj1B,UACA,MAAA,CACAg1B,OAAAA,OACAC,KAAAA,KACAh0B,OAAAjB,UAIA,SAAAk1B,SAAAC,YAAAlC,YACA,IAAAmC,MAAA,GAGA,IAAAC,UAAA,EAAAC,QAAArC,WACA,IAAAsC,WAAA19B,QAAAgE,UAAAy4B,UAAAA,QAAArB,WAGA,GAAAsC,WAAA,CACA,GAAAhB,OAAA,CAEAc,UAAAz3B,KAAA41B,IAAA2B,YAAAv3B,KAAAC,MAAAy2B,QAAA,GAAA,GACAgB,QAAAD,UAAAf,QAAA,EAGA,GAAAgB,QAAArC,WAAA,CACAqC,QAAArC,WACAoC,UAAAC,QAAAhB,QAAA,OAEA,CAEAe,WAAAz3B,KAAA01B,KAAA6B,YAAAb,SAAA,GAAAA,QAAA,EAGAgB,QAAA13B,KAAAgY,IAAAyf,UAAAf,QAAA,EAAArB,aAKA,IAAA,IAAA+B,OAAAK,UAAAL,QAAAM,QAAAN,SAAA,CACA,IAAAvB,KAAAsB,SAAAC,OAAAN,UAAAM,QAAAA,SAAAG,aACAC,MAAAh5B,KAAAq3B,MAIA,GAAA8B,YAAAjB,QAAA,KAAAC,QAAAC,eAAAC,qBAAA,CACA,GAAAY,UAAA,EAAA,CACA,IAAAZ,qBAAAY,UAAA,EAAA,CACA,IAAAG,gBAAAT,SAAAM,UAAA,EAAA,MAAA,OACAD,MAAAlV,QAAAsV,iBAEA,GAAAf,oBAAA,CACA,GAAAY,YAAA,EAAA,CACA,IAAAI,eAAAV,SAAA,EAAA,IAAA,OACAK,MAAAlV,QAAAuV,gBAGA,IAAAC,cAAAX,SAAA,EAAA,IAAA,OACAK,MAAAlV,QAAAwV,gBAIA,GAAAJ,QAAArC,WAAA,CACA,IAAAwB,qBAAAa,QAAArC,WAAA,EAAA,CACA,IAAA0C,YAAAZ,SAAAO,QAAA,EAAA,MAAA,OACAF,MAAAh5B,KAAAu5B,aAEA,GAAAlB,oBAAA,CACA,GAAAa,UAAArC,WAAA,EAAA,CACA,IAAA2C,qBAAAb,SAAA9B,WAAA,EAAAA,WAAA,EAAA,OACAmC,MAAAh5B,KAAAw5B,sBAGA,IAAAC,aAAAd,SAAA9B,WAAAA,WAAA,OACAmC,MAAAh5B,KAAAy5B,gBAIA,OAAAT,MAGA,IAAAU,eAAAp6B,KAAA4U,OACA5U,KAAA4U,OAAA,WACAwlB,iBACA,GAAAv6B,OAAAk4B,KAAA,GAAAl4B,OAAAk4B,MAAAl4B,OAAA03B,WAAA,CACA13B,OAAA65B,MAAAF,SAAA35B,OAAAk4B,KAAAl4B,OAAA03B,iBAKA73B,SAAA,sBAAA,CACA43B,aAAA,GACA6B,cAAA,MACAJ,oBAAA,MACAK,eAAA,KACAiB,UAAA,QACA7B,aAAA,WACAC,SAAA,OACA6B,SAAA,OACAzB,OAAA,KACAC,cAAA,QAGAz8B,UAAA,gBAAA,CAAA,SAAA,sBAAA,SAAAG,OAAAm8B,qBACA,MAAA,CACA77B,MAAA,CACA+6B,WAAA,IACAwC,UAAA,IACA7B,aAAA,IACAC,SAAA,IACA6B,SAAA,IACArmB,WAAA,KAEA7S,QAAA,CAAA,gBAAA,YACA/B,SAAA,IACAO,WAAA,0BACAqB,aAAA,aACAE,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,2CAEAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA3G,QAAAkB,SAAA,cACA,IAAAy6B,eAAAh1B,MAAA,GAAAE,YAAAF,MAAA,GAEA,IAAAE,YAAA,CACA,OAGA80B,eAAA96B,KAAAgG,YAAA+0B,0BAUAx8B,QAAAC,OAAA,uBAAA,CAAA,wBAAA,4BAMAyvB,SAAA,cAAA,WAEA,IAAA0O,eAAA,CACAza,UAAA,MACA0a,qBAAA,GACA9xB,UAAA,KACA+xB,WAAA,EACAC,gBAAA,EACAC,cAAA,OAIA,IAAAC,WAAA,CACAC,WAAA,aACAC,MAAA,QACAC,aAAA,eACAzjB,MAAA,OACA0jB,KAAA,IAIA,IAAAC,cAAA,GAWAj7B,KAAAg1B,QAAA,SAAArzB,OACAxF,QAAA4L,OAAAkzB,cAAAt5B,QAQA3B,KAAAk7B,YAAA,SAAAA,YAAAC,UACAh/B,QAAA4L,OAAA6yB,WAAAO,WAMA,SAAAlM,WAAAC,MACA,IAAAkM,OAAA,SACA,IAAAjM,UAAA,IACA,OAAAD,KAAA1sB,QAAA44B,OAAA,SAAAhM,OAAA9E,KACA,OAAAA,IAAA6E,UAAA,IAAAC,OAAA1J,gBAQA1lB,KAAAgsB,KAAA,CAAA,UAAA,WAAA,WAAA,YAAA,eAAA,eAAA,aAAA,SAAA,eAAA,SAAAnR,QAAA+H,SAAA3f,SAAA2X,UAAAkI,UAAA9f,aAAA6f,WAAArmB,OAAA6xB,cACA,IAAAgN,eAAAhN,aAAA3H,YACA9L,UAAAvW,GAAA,QAAAi3B,kBAEAzY,WAAAliB,IAAA,WAAA,WACAia,UAAAzS,IAAA,QAAAmzB,oBAGA,SAAAA,iBAAAtpB,GACA,GAAAA,EAAAjQ,QAAA,GAAA,CACA,IAAAw5B,KAAAF,eAAA/c,MACA,GAAAid,KAAA,CACAA,KAAA55B,MAAAwB,QACAo4B,KAAA,OAKA,OAAA,SAAAC,SAAAC,OAAAC,OAAAC,mBAAA3G,SACAA,QAAA74B,QAAA4L,OAAA,GAAAwyB,eAAAU,cAAAjG,SAgBA,SAAA4G,YAAAC,SACA,IAAAC,MAAAD,SAAA7G,QAAA6G,SAAAF,oBAAA/uB,MAAA,KACA,IAAAmvB,KAAAD,KAAAnvB,IAAA,SAAAkvB,SACA,OAAAjB,WAAAiB,UAAAA,UAEA,MAAA,CACAC,KAAAA,KACAC,KAAAA,MAIA,IAAAC,cAAA/M,WAAAwM,QAEA,IAAAQ,SAAAj5B,aAAAk5B,cACA,IAAAC,OAAAn5B,aAAAo5B,YACA,IAAA75B,SACA,QAAAy5B,cAAA,UACA,cAAAC,SAAA,QAAAE,OAAA,MACAnH,QAAA2F,cACA,8BACA,YAAAsB,SAAA,UAAAE,OAAA,MACA,4BACA,+BAAAT,OAAA,KACA,iCACA,uBACA,6BACA,IACA,SAEA,MAAA,CACAprB,QAAA,SAAA+rB,MAAA7rB,QACA,IAAA8rB,cAAA1Z,SAAArgB,UAEA,OAAA,SAAA1F,KAAAC,MAAAC,QAAAC,MAAAu/B,aACA,IAAAC,QACA,IAAAC,mBACA,IAAAC,kBACA,IAAAC,YACA,IAAAC,YACA,IAAAC,gBACA,IAAAC,kBACA,IAAA3c,aAAAhkB,QAAAgE,UAAA60B,QAAA7U,cAAA6U,QAAA7U,aAAA,MACA,IAAAgb,SAAAS,YAAAl3B,WACA,IAAAq4B,aAAA5gC,QAAAgE,UAAAnD,MAAA0+B,OAAA,WACA,IAAAsB,QAAAlgC,MAAAgsB,KAAA,MACA,IAAAmU,oBAAA,MACA,IAAAC,YAAA/gC,QAAAgE,UAAAnD,MAAA0+B,OAAA,WAAAl/B,OAAAQ,MAAA0+B,OAAA,WAAA,MACA,IAAAyB,aAAAnI,QAAA2F,cAAAn+B,OAAAQ,MAAAy+B,SAAA,MACA,IAAA2B,UAAA,GACA,IAAAC,cAEA,IAAAC,gBAAA,WAEA,IAAAd,UAAAA,QAAA35B,OAAA,CAAA,OAEA,IAAAg6B,gBAAA,CACAA,gBAAA55B,SAAA,WACA,IAAAs6B,WAAAza,UAAA9C,iBAAAjjB,QAAAy/B,QAAAQ,QAAAld,UAAAK,cACA,IAAAe,cAAA/kB,QAAAgE,UAAAq8B,QAAAxd,cAAAwd,QAAAxd,aAAAwd,QAAAnc,KAAA,gBACA,IAAAmd,WAAArd,aAAA2C,UAAAzE,OAAAthB,SAAA+lB,UAAA5G,SAAAnf,SACAy/B,QAAA9+B,IAAA,CAAA4gB,IAAAif,WAAAjf,IAAA,KAAAE,KAAA+e,WAAA/e,KAAA,OACA,IAAAwC,iBAAAuc,WAAAzd,UAAAlT,MAAA,KAEA,IAAA4vB,QAAAj+B,SAAAyiB,iBAAA,IAAA,CACAwb,QAAA99B,YAAA2+B,cAAAzwB,MAAA,KAAA,IACA4vB,QAAAv+B,SAAA+iB,iBAAA,IAGA,IAAAwb,QAAAj+B,SAAAy2B,QAAAwF,qBAAA+C,WAAAzd,WAAA,CACA0c,QAAA99B,YAAAs2B,QAAAwF,qBAAA6C,eACAb,QAAAv+B,SAAA+2B,QAAAwF,qBAAA+C,WAAAzd,WAGAgd,kBAAA75B,SAAA,WACA,IAAAke,cAAAhlB,QAAAgE,UAAAq8B,QAAAxd,cAAAwd,QAAAxd,aAAAwd,QAAAnc,KAAA,gBACA,IAAAod,WAAA3a,UAAA/B,UAAAC,iBAAAwc,WAAAtc,cAAAC,eACA,GAAAsc,WAAA,CACAjB,QAAA9+B,IAAA+/B,YAEAX,kBAAA,MACA,EAAA,OAKA,GAAAN,QAAAj+B,SAAA,wBAAA,CACAukB,UAAA1B,cAAAob,QAAAe,WAAAzd,WACA0c,QAAA99B,YAAA,6BACA,GAAA2+B,gBAAAE,WAAAzd,UAAA,CACAgD,UAAA1B,cAAAob,QAAAe,WAAAzd,WAEAud,cAAAE,WAAAzd,UAEA+c,gBAAA,MACA,EAAA,SAKAG,QAAAU,UAAA5gC,MAIAkgC,QAAA18B,OAAA,MAEA,SAAAq9B,oBACA,IAAAX,QAAA18B,OAAA,CACAs9B,sBACA,CACAC,mBAKA,SAAAD,kBACA,GAAAb,eAAAjgC,MAAAiB,MAAAf,MAAA0+B,OAAA,WAAA,CACA,OAGAoC,aACAC,iBAEA,GAAAf,QAAAvC,WAAA,CAGA,IAAAkC,YAAA,CACAA,YAAA15B,SAAA64B,KAAAkB,QAAAvC,WAAA,YAEA,CACAqB,QAIA,SAAA+B,kBACAG,aAEA,GAAAhB,QAAAtC,gBAAA,CACA,IAAAkC,YAAA,CACAA,YAAA35B,SAAA84B,KAAAiB,QAAAtC,gBAAA,YAEA,CACAqB,QAKA,SAAAD,OACAkC,aACAF,aAGA,IAAAd,QAAA5K,QAAA,CACA,OAAAj2B,QAAA6C,KAGAi/B,gBAGAjB,QAAAkB,WAAA,WACAlB,QAAA18B,OAAA,KACA69B,aAAA,MACAb,oBAIA,SAAAU,aACA,GAAArB,YAAA,CACA15B,SAAAmF,OAAAu0B,aACAA,YAAA,KAGA,GAAAE,gBAAA,CACA55B,SAAAmF,OAAAy0B,iBACAA,gBAAA,MAKA,SAAAd,OACA,IAAAiB,QAAA,CACA,OAIAA,QAAAkB,WAAA,WACA,GAAAlB,QAAA,CACAA,QAAA18B,OAAA,MACA69B,aAAA,OAKA,GAAAnB,QAAAt0B,UAAA,CACA,IAAAg0B,kBAAA,CACAA,kBAAAz5B,SAAAm7B,cAAA,IAAA,YAEA,CACAA,oBAMA,SAAAN,aACA,GAAAlB,YAAA,CACA35B,SAAAmF,OAAAw0B,aACAA,YAAA,KAGA,GAAAF,kBAAA,CACAz5B,SAAAmF,OAAAs0B,mBACAA,kBAAA,MAIA,SAAAuB,gBAEA,GAAAzB,QAAA,CACA,OAGAC,mBAAAO,QAAAlU,OACA0T,QAAAF,cAAAG,mBAAA,SAAAD,SACA,GAAArc,aAAA,CACAvF,UAAA7W,KAAA,QAAAjB,OAAA05B,aACA,CACAz/B,QAAA+nB,MAAA0X,YAIAnB,eAAA3P,IAAAsR,QAAA,CACA75B,MAAA44B,OAGAsC,gBAGA,SAAAD,gBACAJ,aACAF,aACAQ,sBAEA,GAAA9B,QAAA,CACAA,QAAA7f,SAEA6f,QAAA,KACA,GAAAM,kBAAA,CACA75B,SAAAmF,OAAA00B,oBAIAzB,eAAA1e,OAAAqgB,SAEA,GAAAP,mBAAA,CACAA,mBAAAvR,WACAuR,mBAAA,MASA,SAAAsB,iBACAf,QAAA5jB,MAAApc,MAAA0+B,OAAA,SACA,GAAAyB,aAAA,CACAH,QAAA5K,QAAA+K,aAAArgC,WACA,CACAkgC,QAAA5K,QAAAp1B,MAAAy+B,QAGAuB,QAAAuB,WAAAvhC,MAAA0+B,OAAA,SACAsB,QAAAld,UAAA3jB,QAAAgE,UAAAnD,MAAA0+B,OAAA,cAAA1+B,MAAA0+B,OAAA,aAAA1G,QAAAlV,UACA,IAAAA,UAAAgD,UAAAjD,eAAAmd,QAAAld,WACAud,cAAAvd,UAAA,GAAAA,UAAA,GAAA,IAAAA,UAAA,GAAAA,UAAA,GAEA,IAAA0e,MAAAl7B,SAAAtG,MAAA0+B,OAAA,cAAA,IACA,IAAA+C,WAAAn7B,SAAAtG,MAAA0+B,OAAA,mBAAA,IACAsB,QAAAvC,YAAAnyB,MAAAk2B,OAAAA,MAAAxJ,QAAAyF,WACAuC,QAAAtC,iBAAApyB,MAAAm2B,YAAAA,WAAAzJ,QAAA0F,gBAGA,SAAAyD,aAAA79B,QACA,GAAA48B,aAAA/gC,QAAAqQ,WAAA0wB,YAAA3T,QAAA,CACA2T,YAAA3T,OAAAzsB,MAAAwD,SAIA08B,QAAA0B,WAAA,WACA,OAAA1B,QAAA5K,SAMAp1B,MAAAuC,SAAA,WAAA,SAAA8lB,KACA,GAAAA,IAAA,CACA2Y,aAGA,GAAA3Y,KAAA2X,QAAA18B,OAAA,CACAy7B,UAIA,GAAAmB,YAAA,CACApgC,MAAAqC,OAAA+9B,YAAA,SAAA7X,KACA,GAAA2X,UAAA3X,MAAA2X,QAAA18B,OAAA,CACAq9B,uBAKA,SAAAU,gBACAjB,UAAAp3B,OAAA,EAEA,GAAAm3B,aAAA,CACAC,UAAA18B,KACA5D,MAAAqC,OAAAg+B,aAAA,SAAA9X,KACA2X,QAAA5K,QAAA/M,IACA,IAAAA,KAAA2X,QAAA18B,OAAA,CACAy7B,WAKAqB,UAAA18B,KACA+7B,mBAAAt9B,OAAA,WACA,IAAA89B,oBAAA,CACAA,oBAAA,KACAR,mBAAAhP,aAAA,WACAwP,oBAAA,MACA,GAAAD,SAAAA,QAAA18B,OAAA,CACAg9B,6BAMA,CACAF,UAAA18B,KACA1D,MAAAuC,SAAAk8B,OAAA,SAAApW,KACA2X,QAAA5K,QAAA/M,IACA,IAAAA,KAAA2X,QAAA18B,OAAA,CACAy7B,WACA,CACAuB,sBAMAF,UAAA18B,KACA1D,MAAAuC,SAAAm8B,OAAA,QAAA,SAAArW,KACA2X,QAAA5jB,MAAAiM,IACA,GAAA2X,QAAA18B,OAAA,CACAg9B,sBAKAF,UAAA18B,KACA1D,MAAAuC,SAAAm8B,OAAA,YAAA,SAAArW,KACA2X,QAAAld,UAAAuF,IAAAA,IAAA2P,QAAAlV,UACA,GAAAkd,QAAA18B,OAAA,CACAg9B,sBAMA,SAAAgB,sBACA,GAAAlB,UAAAp3B,OAAA,CACA7J,QAAAiE,QAAAg9B,UAAA,SAAAuB,UACAA,aAEAvB,UAAAp3B,OAAA,GAKA,SAAA44B,oBAAA5sB,GACA,IAAAgrB,UAAAA,QAAA18B,SAAAk8B,QAAA,CACA,OAGA,IAAAz/B,QAAA,GAAAipB,SAAAhU,EAAAiU,UAAAuW,QAAA,GAAAxW,SAAAhU,EAAAiU,QAAA,CACA4X,mBAKA,SAAAgB,gBAAA7sB,GACA,GAAAA,EAAAjQ,QAAA,GAAA,CACA87B,mBAIA,IAAAiB,mBAAA,WACA3D,SAAAW,KAAA17B,QAAA,SAAAy7B,SACA,GAAAA,UAAA,eAAA,CACA9+B,QAAAoL,IAAA,QAAAw1B,uBACA,CACA5gC,QAAAoL,IAAA0zB,QAAA+B,iBACA7gC,QAAAoL,IAAA0zB,QAAA8B,mBAEA5gC,QAAAoL,IAAA,WAAA02B,mBAEA1D,SAAAY,KAAA37B,QAAA,SAAAy7B,SACA,GAAAA,UAAA,eAAA,CACAjhB,UAAAzS,IAAA,QAAAy2B,yBACA,CACA7hC,QAAAoL,IAAA0zB,QAAAgC,qBAKA,SAAAkB,eACA,IAAAC,aAAA,GAAAC,aAAA,GACA,IAAA5Z,IAAAvoB,MAAAiB,MAAAf,MAAA0+B,OAAA,YACAoD,qBAEA,GAAA3iC,QAAAiqB,SAAAf,KAAA,CACAuB,OAAAlQ,KAAA2O,KAAAjlB,QAAA,SAAA2J,KACAi1B,aAAAt+B,KAAAqJ,KACAk1B,aAAAv+B,KAAA2kB,IAAAtb,QAEAoxB,SAAA,CACAW,KAAAkD,aACAjD,KAAAkD,kBAEA,CACA9D,SAAAS,YAAAvW,KAGA,GAAA8V,SAAAW,OAAA,OAAA,CACAX,SAAAW,KAAA17B,QAAA,SAAAy7B,QAAA7U,KACA,GAAA6U,UAAA,eAAA,CACA9+B,QAAAsH,GAAA,QAAAs5B,mBACA/iB,UAAAvW,GAAA,QAAAu6B,0BACA,GAAA/C,UAAAV,SAAAY,KAAA/U,KAAA,CACAjqB,QAAAsH,GAAAw3B,QAAA8B,wBACA,GAAA9B,QAAA,CACA9+B,QAAAsH,GAAAw3B,QAAA+B,iBACA7gC,QAAAsH,GAAA82B,SAAAY,KAAA/U,KAAA6W,iBAEA9gC,QAAAsH,GAAA,WAAAw6B,oBAKAE,eAEA,IAAAr2B,UAAA5L,MAAAiB,MAAAf,MAAA0+B,OAAA,cACAsB,QAAAt0B,UAAAvM,QAAAgE,UAAAuI,aAAAA,UAAAssB,QAAAtsB,UAEA,IAAAw2B,gBACA,IAAAC,UAAAzD,OAAA,eACA,GAAAyD,aAAAniC,OAAAA,MAAAmiC,aAAAz6B,UAAA,CACAw6B,gBAAA,SACA,CACAA,gBAAApiC,MAAAiB,MAAAf,MAAAmiC,YAGAhf,aAAAhkB,QAAAgE,UAAA++B,iBAAAA,gBAAA/e,aAGArjB,MAAA6D,IAAA,WAAA,SAAAy+B,mBACAN,qBACAV,gBACApB,QAAA,eAUA3gC,UAAA,+BAAA,CACA,WAAA,OAAA,WAAA,mBACA,SAAAC,SAAA+iC,KAAAzc,SAAAiG,kBACA,MAAA,CACAhsB,KAAA,SAAAC,MAAAwC,KAAAtC,OACA,IAAA0gC,UAAA5gC,MAAAiB,MAAAf,MAAAsiC,gCAEA,IAAAC,cAAA,EACAC,aACAC,gBACAC,eAEA,IAAAC,0BAAA,WACA,GAAAF,gBAAA,CACAA,gBAAA9iB,SACA8iB,gBAAA,KAGA,GAAAD,aAAA,CACAA,aAAAtU,WACAsU,aAAA,KAGA,GAAAE,eAAA,CACApjC,SAAA00B,MAAA0O,gBAAAjhC,KAAA,WACAghC,gBAAA,OAEAA,gBAAAC,eACAA,eAAA,OAIA5iC,MAAAqC,OAAAkgC,KAAAO,mBAAA5iC,MAAA6iC,8BAAA,SAAAC,KACA,IAAAC,eAAAR,cAEA,GAAAO,IAAA,CAGAjX,iBAAAiX,IAAA,MAAArhC,KAAA,SAAAuhC,UACA,GAAAD,eAAAR,cAAA,CAAA,OACA,IAAAU,SAAAvC,UAAA5U,OACA,IAAAvmB,SAAAy9B,SAEA,IAAA9R,MAAAtL,SAAArgB,SAAAqgB,CAAAqd,SAAA,SAAA/R,OACAyR,4BACArjC,SAAA8xB,MAAAF,MAAA5uB,QAGAkgC,aAAAS,SACAP,eAAAxR,MAEAsR,aAAArpB,MAAA,wBAAA2pB,MACA,WACA,GAAAC,eAAAR,cAAA,CACAI,4BACA7iC,MAAAqZ,MAAA,uBAAA2pB,QAGAhjC,MAAAqZ,MAAA,2BAAA2pB,SACA,CACAH,+BAIA7iC,MAAA6D,IAAA,WAAAg/B,gCAUAtjC,UAAA,oBAAA,CAAA,eAAA,SAAAiyB,cACA,MAAA,CACAjvB,SAAA,IACAxC,KAAA,SAAAC,MAAAC,QAAAC,OAIA,GAAAF,MAAAgjB,UAAA,CAGA,IAAA5D,SAAAoS,aAAAzO,eAAA/iB,MAAAgjB,WACA/iB,QAAAkB,SAAAie,SAAA,IAGA,GAAApf,MAAAyhC,WAAA,CACAxhC,QAAAkB,SAAAnB,MAAAyhC,YAGA,GAAAzhC,MAAA4L,UAAA,CACA3L,QAAAkB,SAAAjB,MAAAkjC,6BAMA7jC,UAAA,kBAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAAs1B,QAAA,KACAjxB,YAAA,6CAIA9E,UAAA,aAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,aAAA,UAAA,iBAGA9jC,UAAA,0BAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAA4hC,WAAA,IAAA0B,YAAA,KACAj/B,YAAA,sDAIA9E,UAAA,qBAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,qBAAA,UAAA,aAAA,CACAxF,cAAA,UAIAt+B,UAAA,sBAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAA4hC,WAAA,KACAv9B,YAAA,kDAIA9E,UAAA,iBAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,iBAAA,UAAA,aAAA,CACAxF,cAAA,UASAx+B,QAAAC,OAAA,uBAAA,CAAA,yBAEAC,UAAA,0BAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAAujC,SAAA,IAAA3B,WAAA,IAAA0B,YAAA,KACAj/B,YAAA,gDAIA9E,UAAA,qBAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,qBAAA,UAAA,QAAA,CACAxF,cAAA,UAIAt+B,UAAA,sBAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAA4hC,WAAA,IAAA2B,SAAA,KACAl/B,YAAA,4CAIA9E,UAAA,iBAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,iBAAA,UAAA,QAAA,CACAxF,cAAA,UAIAt+B,UAAA,kBAAA,WACA,MAAA,CACAgD,SAAA,IACAvC,MAAA,CAAAujC,SAAA,IAAAjO,QAAA,KACAjxB,YAAA,uCAIA9E,UAAA,aAAA,CAAA,cAAA,SAAA8jC,aACA,OAAAA,YAAA,aAAA,UAAA,YAGAhkC,QAAAC,OAAA,2BAAA,IAEAsD,SAAA,oBAAA,CACAuzB,QAAA,KACA6E,IAAA,MAGAl4B,WAAA,wBAAA,CAAA,SAAA,SAAA,oBAAA,SAAAC,OAAAC,OAAAwgC,gBACA,IAAAn7B,KAAAnF,KACAizB,QAAA92B,QAAAgE,UAAAL,OAAAmzB,SAAApzB,OAAAwD,QAAAtF,MAAA+B,OAAAmzB,SAAAqN,eAAArN,QAEAjzB,KAAAugC,KAAA,GACA1gC,OAAAi4B,IAAA0I,kBAEAxgC,KAAAygC,OAAA,SAAAC,IAAA3jC,QAAAC,OACA,IAAAi2B,QAAA,CACAl2B,QAAAW,IAAA,CAAAijC,WAAA,SAGA3gC,KAAAugC,KAAA7/B,KAAAggC,KAEAA,IAAA5I,IAAA0I,kBACAE,IAAAtnB,MAAApc,OAAAb,QAAAgE,UAAAnD,MAAAoc,OAAApc,MAAAoc,MAAA,cAEAsnB,IAAAvhC,OAAA,QAAA,SAAAwC,OACA++B,IAAAE,0BAGAF,IAAAE,sBAAA,WACA,IAAAC,gBAAA17B,KAAAo7B,KAAA1yB,OAAA,SAAAizB,MAAAJ,KACAA,IAAAK,UAAA,IAAAL,IAAA/+B,MAAA++B,IAAA5I,KAAAkJ,QAAA,GACA,OAAAF,MAAAJ,IAAAK,SACA,GAEA,GAAAF,gBAAA,IAAA,CACAH,IAAAK,SAAAF,gBAAA,MAIAH,IAAA//B,IAAA,WAAA,WACA5D,QAAA,KACAoI,KAAA87B,UAAAP,QAIA1gC,KAAAihC,UAAA,SAAAP,KACA1gC,KAAAugC,KAAAv/B,OAAAhB,KAAAugC,KAAAx/B,QAAA2/B,KAAA,GACA1gC,KAAAugC,KAAAngC,QAAA,SAAAsgC,KACAA,IAAAE,2BAKA/gC,OAAAV,OAAA,WAAA,SAAA+hC,UACA/7B,KAAAo7B,KAAAngC,QAAA,SAAAsgC,KACAA,IAAA5I,IAAA0I,kBACAE,IAAAE,4BAIA,SAAAJ,kBACA,OAAArkC,QAAAgE,UAAAN,OAAAqhC,UAAArhC,OAAAqhC,SAAAZ,eAAAxI,QAIAz7B,UAAA,cAAA,WACA,MAAA,CACAmG,QAAA,KACAtB,WAAA,KACAtB,WAAA,wBACAwB,QAAA,cACAtE,MAAA,CACAokC,SAAA,SAEA//B,YAAA,4CAIA9E,UAAA,SAAA,WACA,MAAA,CACAmG,QAAA,KACAtB,WAAA,KACAE,QAAA,eACAtE,MAAA,CACA6E,MAAA,IACAgiB,KAAA,KAEAxiB,YAAA,oCACAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAAmkC,cACAA,aAAAV,OAAA3jC,MAAAC,QAAAC,WAKAX,UAAA,iBAAA,WACA,MAAA,CACAmG,QAAA,KACAtB,WAAA,KACAtB,WAAA,wBACA9C,MAAA,CACA6E,MAAA,IACAu/B,SAAA,QACAvd,KAAA,KAEAxiB,YAAA,4CACAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAAmkC,cACAA,aAAAV,OAAA3jC,MAAAX,QAAAY,QAAAA,QAAAonB,WAAA,IAAA,CAAA/K,MAAApc,MAAAoc,YAKAjd,QAAAC,OAAA,sBAAA,IAEAsD,SAAA,kBAAA,CACAo4B,IAAA,EACAsJ,QAAA,KACAC,SAAA,KACAC,YAAA,KACAC,OAAA,CAAA,MAAA,MAAA,QAAA,OAAA,UAGA3hC,WAAA,sBAAA,CAAA,SAAA,SAAA,kBAAA,SAAAC,OAAAC,OAAA0hC,cACA,IAAA59B,YAAA,CAAAa,cAAAtI,QAAA6C,MACAmG,KAAAnF,KAEAA,KAAApC,KAAA,SAAA2W,cACA3Q,YAAA2Q,aACA3Q,YAAAK,QAAAjE,KAAA4U,OAEAhR,YAAA8gB,YAAAhkB,KAAA,SAAAiB,OACA,GAAAxF,QAAA8J,SAAAtE,QAAAA,OAAA,IAAAA,MAAA,CACAA,MAAAO,KAAA+X,MAAAtY,OAGA,OAAAA,QAGA3B,KAAAohC,QAAAjlC,QAAAgE,UAAAL,OAAAshC,SAAAvhC,OAAAwD,QAAAtF,MAAA+B,OAAAshC,SAAAI,aAAAJ,QACAphC,KAAAqhC,SAAAllC,QAAAgE,UAAAL,OAAAuhC,UAAAxhC,OAAAwD,QAAAtF,MAAA+B,OAAAuhC,UAAAG,aAAAH,SACArhC,KAAAshC,YAAAnlC,QAAAgE,UAAAL,OAAAwhC,aACAzhC,OAAAwD,QAAAtF,MAAA+B,OAAAwhC,aAAAE,aAAAF,YACA,IAAAG,UAAAtlC,QAAAgE,UAAAL,OAAAyhC,QAAA1hC,OAAAwD,QAAAtF,MAAA+B,OAAAyhC,QAAAC,aAAAD,OACAvhC,KAAAuhC,OAAAplC,QAAAiwB,QAAAqV,YAAAA,UAAAz7B,OAAA,EACAy7B,UAAAD,aAAAD,OAEA,IAAAG,aAAAvlC,QAAAgE,UAAAL,OAAA4hC,cACA7hC,OAAAwD,QAAAtF,MAAA+B,OAAA4hC,cACA,IAAAlpB,MAAArc,QAAAgE,UAAAL,OAAAg4B,KAAAj4B,OAAAwD,QAAAtF,MAAA+B,OAAAg4B,KAAA0J,aAAA1J,KACAj4B,OAAAwa,MAAAra,KAAA2hC,qBAAAD,eAGA1hC,KAAA2hC,qBAAA,SAAAC,QACA,IAAA,IAAAp7B,EAAA,EAAAuG,EAAA60B,OAAA57B,OAAAQ,EAAAuG,EAAAvG,IAAA,CACAo7B,OAAAp7B,GAAArK,QAAA4L,OAAA,CAAAjH,MAAA0F,GAAA,CAAA46B,QAAAphC,KAAAohC,QAAAC,SAAArhC,KAAAqhC,SAAAjoB,MAAApZ,KAAA6hC,SAAAr7B,IAAAo7B,OAAAp7B,IAEA,OAAAo7B,QAGA5hC,KAAA6hC,SAAA,SAAA/gC,OACA,GAAAA,OAAAd,KAAAuhC,OAAAv7B,OAAA,CACA,OAAAlF,MAAA,EAGA,OAAAd,KAAAuhC,OAAAzgC,QAGAjB,OAAAiiC,KAAA,SAAAngC,OACA,IAAA9B,OAAAkiC,UAAApgC,OAAA,GAAAA,OAAA9B,OAAAwa,MAAArU,OAAA,CACA,IAAAg8B,aAAA78B,KAAAm8B,aAAA19B,YAAAiR,aAAAlT,MAAA,EAAAA,MACAiC,YAAAa,cAAAu9B,cACAp+B,YAAAK,YAIApE,OAAAuuB,MAAA,SAAAzsB,OACA,IAAA9B,OAAAkiC,SAAA,CACAliC,OAAA8B,MAAAA,MAEA9B,OAAAoiC,QAAA,CAAAtgC,MAAAA,SAGA9B,OAAAqiC,MAAA,WACAriC,OAAA8B,MAAAiC,YAAAiR,WACAhV,OAAAsiC,WAGAtiC,OAAAuiC,UAAA,SAAA5qB,KACA,GAAA,gBAAA5M,KAAA4M,IAAAzV,OAAA,CACAyV,IAAAG,iBACAH,IAAAI,kBACA/X,OAAAiiC,KAAAjiC,OAAA8B,OAAA6V,IAAAzV,QAAA,IAAAyV,IAAAzV,QAAA,GAAA,GAAA,MAIA/B,KAAA4U,OAAA,WACA/U,OAAA8B,MAAAiC,YAAAiR,WACAhV,OAAAuZ,MAAAjU,KAAA08B,SAAAhiC,OAAA8B,MAAA,OAIAtF,UAAA,YAAA,WACA,MAAA,CACA+E,QAAA,CAAA,YAAA,WACA/B,SAAA,IACAvC,MAAA,CACAilC,SAAA,aACAE,QAAA,IACAE,QAAA,KAEAviC,WAAA,sBACAuB,YAAA,kCACAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAA2+B,WAAA3+B,MAAA,GAAAE,YAAAF,MAAA,GACA2+B,WAAAzkC,KAAAgG,iBAKAzH,QAAAC,OAAA,oBAAA,IAEAwD,WAAA,sBAAA,CAAA,SAAA,SAAAC,QACA,IAAAuY,KAAApY,KACAsiC,SACAlqB,KAAAmqB,KAAA,GAEAnqB,KAAAhS,OAAA,SAAAtF,MAAA0W,KACA,IAAA9R,UAAA,CACA,IAAA88B,cAAAC,aAAAH,UACA,IAAAI,iBAAAtqB,KAAAmqB,KAAAC,eACA,GAAAE,iBAAA,CACAA,iBAAAC,IAAAC,WAAA,CACA9gC,OAAA0V,IACAqrB,eAAA/hC,QAEA,GAAA0W,KAAAA,IAAA0Z,qBAAA,CACA,OAEAwR,iBAAAC,IAAAp9B,OAAA,MAGA,IAAAiQ,SAAA4C,KAAAmqB,KAAAzhC,OACA,GAAA0U,SAAA,CACAA,SAAAmtB,IAAAG,SAAA,CACAhhC,OAAA0V,MAEAhC,SAAAmtB,IAAAp9B,OAAA,KACA6S,KAAA7S,OAAAiQ,SAAA1U,MACAwhC,SAAA9sB,SAAA1U,WACA,IAAA0U,UAAArZ,QAAAgE,UAAAmiC,UAAA,CACAlqB,KAAA7S,OAAA,KACA+8B,SAAA,QAKAlqB,KAAA2qB,OAAA,SAAAA,OAAAJ,KACAvqB,KAAAmqB,KAAA7hC,KAAA,CACAiiC,IAAAA,IACA7hC,MAAA6hC,IAAA7hC,QAEAsX,KAAAmqB,KAAA18B,KAAA,SAAAm9B,GAAAC,IACA,GAAAD,GAAAliC,MAAAmiC,GAAAniC,MAAA,CACA,OAAA,EAGA,GAAAkiC,GAAAliC,MAAAmiC,GAAAniC,MAAA,CACA,OAAA,EAGA,OAAA,IAGA,GAAA6hC,IAAA7hC,QAAAsX,KAAA7S,SAAApJ,QAAAgE,UAAAiY,KAAA7S,SAAA6S,KAAAmqB,KAAAv8B,SAAA,EAAA,CACA,IAAAk9B,eAAAT,aAAAE,IAAA7hC,OACAsX,KAAAhS,OAAA88B,kBAIA9qB,KAAA+qB,UAAA,SAAAA,UAAAR,KACA,IAAA7hC,MACA,IAAA,IAAA0F,EAAA,EAAAA,EAAA4R,KAAAmqB,KAAAv8B,OAAAQ,IAAA,CACA,GAAA4R,KAAAmqB,KAAA/7B,GAAAm8B,MAAAA,IAAA,CACA7hC,MAAA0F,EACA,OAIA,GAAA4R,KAAAmqB,KAAAzhC,OAAAA,QAAAsX,KAAA7S,OAAA,CACA,IAAA69B,kBAAAtiC,QAAAsX,KAAAmqB,KAAAv8B,OAAA,EACAlF,MAAA,EAAAA,MAAA,EAAAsX,KAAAmqB,KAAAv8B,OACAoS,KAAAhS,OAAAg9B,mBAGAhrB,KAAAmqB,KAAAvhC,OAAAF,MAAA,IAGAjB,OAAAV,OAAA,gBAAA,SAAAkmB,KACA,GAAAlpB,QAAAgE,UAAAklB,MAAAA,MAAAid,SAAA,CACAlqB,KAAAhS,OAAAq8B,aAAApd,SAIA,IAAA3f,UACA7F,OAAAc,IAAA,WAAA,WACA+E,UAAA,OAGA,SAAA+8B,aAAA3hC,OACA,IAAA,IAAA0F,EAAA,EAAAA,EAAA4R,KAAAmqB,KAAAv8B,OAAAQ,IAAA,CACA,GAAA4R,KAAAmqB,KAAA/7B,GAAA1F,QAAAA,MAAA,CACA,OAAA0F,QAMAnK,UAAA,YAAA,WACA,MAAA,CACA6E,WAAA,KACAsB,QAAA,KACA1F,MAAA,GACA25B,iBAAA,CACAlxB,OAAA,KACAoe,KAAA,KAEA/jB,WAAA,sBACAqB,aAAA,SACAE,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,iCAEAtE,KAAA,SAAAC,MAAAC,QAAAC,OACAF,MAAAwe,SAAAnf,QAAAgE,UAAAnD,MAAAse,UACAxe,MAAAuG,QAAAtF,MAAAf,MAAAse,UAAA,MACAxe,MAAAumC,UAAAlnC,QAAAgE,UAAAnD,MAAAqmC,WACAvmC,MAAAuG,QAAAtF,MAAAf,MAAAqmC,WAAA,UAKAhnC,UAAA,SAAA,CAAA,SAAA,SAAAG,QACA,MAAA,CACA4E,QAAA,aACAoB,QAAA,KACArB,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA,8BAEAD,WAAA,KACApE,MAAA,CACAuE,QAAA,IACAP,MAAA,KACAwiC,QAAA,KACAR,SAAA,UAEAF,WAAA,aAEAhjC,WAAA,aAGAqB,aAAA,MACApE,KAAA,SAAAC,MAAAymC,IAAAvmC,MAAAwmC,WAAAtiC,YACApE,MAAA0C,SAAA,MACA,GAAAxC,MAAAymC,QAAA,CACA3mC,MAAAuG,QAAAlE,OAAA3C,OAAAQ,MAAAymC,SAAA,SAAA9hC,OACA7E,MAAA0C,WAAAmC,QAIA,GAAAxF,QAAAkgB,YAAArf,MAAA8D,OAAA,CACA,GAAA0iC,WAAAjB,MAAAiB,WAAAjB,KAAAv8B,OAAA,CACAlJ,MAAAgE,MAAAoB,KAAA41B,IAAA7tB,MAAA,KAAAu5B,WAAAjB,KAAA51B,IAAA,SAAA+2B,GAAA,OAAAA,EAAA5iC,SAAA,MACA,CACAhE,MAAAgE,MAAA,GAIA,GAAA3E,QAAAkgB,YAAArf,MAAAsmC,SAAA,CACAxmC,MAAAwmC,QAAA,GAGAxmC,MAAAsJ,OAAA,SAAAoR,KACA,IAAA1a,MAAA0C,SAAA,CACA,IAAAsB,MACA,IAAA,IAAA0F,EAAA,EAAAA,EAAAg9B,WAAAjB,KAAAv8B,OAAAQ,IAAA,CACA,GAAAg9B,WAAAjB,KAAA/7B,GAAAm8B,MAAA7lC,MAAA,CACAgE,MAAA0F,EACA,OAIAg9B,WAAAp9B,OAAAtF,MAAA0W,OAIAgsB,WAAAT,OAAAjmC,OACAA,MAAA6D,IAAA,WAAA,WACA6iC,WAAAL,UAAArmC,SAKAA,MAAA6mC,cAAAziC,gBAKA7E,UAAA,0BAAA,WACA,MAAA,CACAgD,SAAA,IACA+B,QAAA,UACAvE,KAAA,SAAAC,MAAAymC,KACAzmC,MAAAqC,OAAA,iBAAA,SAAAykC,qBAAAviC,SACA,GAAAA,QAAA,CACAkiC,IAAA1gC,KAAA,IACA0gC,IAAAzgC,OAAAzB,gBAOAhF,UAAA,0BAAA,WACA,MAAA,CACAgD,SAAA,IACA+B,QAAA,aACAvE,KAAA,SAAAC,MAAAymC,IAAAvmC,OACA,IAAA2lC,IAAA7lC,MAAAiB,MAAAf,MAAA6mC,yBAAAlB,IAIAA,IAAAgB,cAAAhB,IAAAt/B,QAAA,SAAAygC,UACA3nC,QAAAiE,QAAA0jC,SAAA,SAAAC,MACA,GAAAC,aAAAD,MAAA,CAEApB,IAAAsB,eAAAF,SACA,CACAR,IAAAzgC,OAAAihC,aAOA,SAAAC,aAAAD,MACA,OAAAA,KAAA9mB,UACA8mB,KAAAG,aAAA,oBACAH,KAAAG,aAAA,yBACAH,KAAAG,aAAA,sBACAH,KAAA9mB,QAAAyI,gBAAA,mBACAqe,KAAA9mB,QAAAyI,gBAAA,wBACAqe,KAAA9mB,QAAAyI,gBAAA,qBACAqe,KAAA9mB,QAAAyI,gBAAA,sBAKAvpB,QAAAC,OAAA,0BAAA,IAEAsD,SAAA,sBAAA,CACAykC,SAAA,EACAC,WAAA,EACAC,WAAA,EACAC,aAAA,KACAC,YAAA,MACAC,UAAA,KACAC,cAAA,MACAC,WAAA,KACAC,UAAA,KACAC,aAAA,KACAzjC,YAAA,4CAGAvB,WAAA,0BAAA,CAAA,SAAA,WAAA,SAAA,SAAA,OAAA,UAAA,sBAAA,SAAAC,OAAAkD,SAAAjD,OAAAtD,OAAA6M,KAAAC,QAAAu7B,kBACA,IAAAC,eAAAC,iBAAAC,iBACA,IAAAxvB,SAAA,IAAAlL,KACA26B,SAAA,GACArhC,YAAA,CAAAa,cAAAtI,QAAA6C,MACAwlC,UAAAroC,QAAAgE,UAAAL,OAAA0kC,WAAA3kC,OAAAwD,QAAAtF,MAAA+B,OAAA0kC,WAAAK,iBAAAL,WAAAl7B,QAAAuB,iBAAAW,MACA05B,SAAA/oC,QAAAgE,UAAAL,OAAAolC,UAAArlC,OAAAwD,QAAAtF,MAAA+B,OAAAolC,UAAA,KAEArlC,OAAAqzB,SAAA/2B,QAAAgE,UAAAL,OAAAozB,UAAApzB,OAAAozB,SAAA,EACAnwB,SAAAoiC,WAAA,YAEAnlC,KAAApC,KAAA,SAAA2W,aAAA6wB,QACAxhC,YAAA2Q,aACA3Q,YAAAK,QAAAjE,KAAA4U,OAEAhR,YAAA8gB,YAAAF,QAAA,SAAAoB,YACA,OAAAA,WAAA,IAAAtb,KAAAsb,YAAA,OAGA,IAAAyf,aAAAD,OAAArb,GAAA,GACAub,eAAAF,OAAArb,GAAA,GACAwb,eAAAH,OAAArb,GAAA,GAEA+a,eAAAO,aAAAzlC,WAAA,WACAmlC,iBAAAO,eAAA1lC,WAAA,WACAolC,iBAAAO,eAAA3lC,WAAA,WAEA,IAAA8kC,WAAAvoC,QAAAgE,UAAAL,OAAA4kC,YAAA7kC,OAAAwD,QAAAtF,MAAA+B,OAAA4kC,YAAAG,iBAAAH,WAEA,GAAAA,WAAA,CACA1kC,KAAAwlC,sBAAAH,aAAAC,eAAAC,gBAGA,IAAAZ,UAAAxoC,QAAAgE,UAAAL,OAAA6kC,WAAA9kC,OAAAwD,QAAAtF,MAAA+B,OAAA6kC,WAAAE,iBAAAF,UACA,GAAAA,UAAA,CACA3kC,KAAAylC,oBAAAJ,aAAAC,eAAAC,gBAGA1lC,OAAA4kC,cAAAtoC,QAAAgE,UAAAL,OAAA2kC,eAAA5kC,OAAAwD,QAAAtF,MAAA+B,OAAA2kC,eAAAI,iBAAAJ,cACAzkC,KAAA0lC,iBAAAL,aAAAC,eAAAC,iBAGA,IAAApB,SAAAU,iBAAAV,SACA,GAAArkC,OAAAqkC,SAAA,CACAc,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAqkC,UAAA,SAAAxiC,OACAwiC,UAAAxiC,SAIA,IAAAyiC,WAAAS,iBAAAT,WACA,GAAAtkC,OAAAskC,WAAA,CACAa,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAskC,YAAA,SAAAziC,OACAyiC,YAAAziC,SAIA,IAAAuY,IACA+qB,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAoa,KAAA,SAAAvY,OACA,IAAA2M,GAAA,IAAAhE,KAAA3I,OACAuY,IAAA5R,MAAAgG,IAAA5J,UAAA4J,MAGA,IAAAwpB,IACAmN,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAg4B,KAAA,SAAAn2B,OACA,IAAA2M,GAAA,IAAAhE,KAAA3I,OACAm2B,IAAAxvB,MAAAgG,IAAA5J,UAAA4J,MAGA,IAAA9O,SAAA,MACA,GAAAM,OAAAmU,WAAA,CACAgxB,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAmU,YAAA,SAAAtS,OACAnC,SAAAmC,SAIA9B,OAAA8lC,iBAAA,WACA,IAAAC,oBAAAC,WAAArwB,SAAA2uB,SAAA,IACA,OAAA3kC,UAAAomC,oBAAA9N,KACA8N,oBAAApwB,UAAAowB,oBAAA1rB,KAGAra,OAAAimC,iBAAA,WACA,IAAAC,oBAAAF,WAAArwB,UAAA2uB,SAAA,IACA,OAAA3kC,UAAAumC,oBAAA7rB,KACA6rB,oBAAAvwB,UAAAuwB,oBAAAjO,KAGAj4B,OAAAmmC,mBAAA,WACA,IAAAJ,oBAAAC,WAAArwB,SAAA4uB,YACA,OAAA5kC,UAAAomC,oBAAA9N,KACA8N,oBAAApwB,UAAAowB,oBAAA1rB,KAGAra,OAAAomC,mBAAA,WACA,IAAAF,oBAAAF,WAAArwB,UAAA4uB,YACA,OAAA5kC,UAAAumC,oBAAA7rB,KACA6rB,oBAAAvwB,UAAAuwB,oBAAAjO,KAGAj4B,OAAAqmC,mBAAA,WACA,IAAAN,oBAAAO,WAAA3wB,SAAA6uB,YACA,OAAA7kC,UAAAomC,oBAAA9N,KACA8N,oBAAApwB,UAAAowB,oBAAA1rB,KAGAra,OAAAumC,mBAAA,WACA,IAAAL,oBAAAI,WAAA3wB,UAAA6uB,YACA,OAAA7kC,UAAAumC,oBAAA7rB,KACA6rB,oBAAAvwB,UAAAuwB,oBAAAjO,KAGAj4B,OAAAwmC,iBAAA,WACA,GAAA7wB,SAAAhH,WAAA,GAAA,CACA,OAAAhP,UAAAqmC,WAAArwB,SAAA,GAAA,IAAAsiB,IAGA,OAAAt4B,UAAAqmC,WAAArwB,UAAA,GAAA,IAAA0E,KAGA,IAAAmqB,WAAAQ,iBAAAR,WACA,GAAAvkC,OAAAukC,WAAA,CACAY,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAukC,YAAA,SAAA1iC,OACA0iC,YAAA1iC,SAIA9B,OAAA0kC,YAAAM,iBAAAN,YACA,GAAAzkC,OAAAykC,YAAA,CACAU,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAykC,aAAA,SAAA5iC,OACA9B,OAAA0kC,cAAA5iC,SAKA9B,OAAAykC,aAAAO,iBAAAP,aACA,GAAAxkC,OAAAwkC,aAAA,CACAW,SAAAvkC,KAAAb,OAAAwD,QAAAlE,OAAA3C,OAAAsD,OAAAwkC,cAAA,SAAA3iC,OACA9B,OAAAykC,eAAA3iC,MAEA,GAAAiC,YAAA0iC,OAAAhxB,KAAA,CAEA,IAAAlK,MAAAm7B,uBAAAl7B,QAAAm7B,yBACA,GAAArqC,QAAAgE,UAAAiL,QAAAjP,QAAAgE,UAAAkL,SAAA,CACAmK,SAAApG,SAAAhE,OACAq7B,eAEA,CACAC,qBAMA,SAAAH,uBACA,IAAAn7B,OAAAvL,OAAAuL,MACA,IAAAu7B,MAAA9mC,OAAAykC,aAAAl5B,MAAA,GAAAA,MAAA,GACAA,OAAA,GAAAA,MAAA,GACA,IAAAu7B,OAAA9mC,OAAAuL,QAAA,GAAA,CACA,OAAA1G,UAGA,GAAA7E,OAAAykC,aAAA,CACA,GAAAl5B,QAAA,GAAA,CACAA,MAAA,EAEA,GAAAvL,OAAA+mC,WAAApC,UAAA,GAAA,CACAp5B,MAAAA,MAAA,IAGA,OAAAA,MAGA,SAAAo7B,yBACA,IAAAn7B,SAAAxL,OAAAwL,QACA,IAAAs7B,MAAAt7B,SAAA,GAAAA,QAAA,GACA,IAAAs7B,OAAA9mC,OAAAwL,UAAA,GAAA,CACA,OAAA3G,UAEA,OAAA2G,QAGA,SAAAw7B,yBACA,IAAAt7B,SAAA1L,OAAA0L,QACA,OAAAA,SAAA,GAAAA,QAAA,GAAAA,QAAA7G,UAGA,SAAAoiC,IAAAnlC,MAAAolC,OACA,GAAAplC,QAAA,KAAA,CACA,MAAA,GAGA,OAAAxF,QAAAgE,UAAAwB,QAAAA,MAAAqlC,WAAAhhC,OAAA,IAAA+gC,MACA,IAAAplC,MAAAA,MAAAqlC,WAIAhnC,KAAAwlC,sBAAA,SAAAH,aAAAC,eAAAC,gBACA,IAAA0B,cAAA,SAAAj1B,GACA,GAAAA,EAAAk1B,cAAA,CACAl1B,EAAAA,EAAAk1B,cAGA,IAAAC,MAAAn1B,EAAAo1B,WAAAp1B,EAAAo1B,YAAAp1B,EAAAq1B,OACA,OAAAr1B,EAAAs1B,QAAAH,MAAA,GAGA9B,aAAAhhC,GAAA,mBAAA,SAAA2N,GACA,IAAAxS,SAAA,CACAK,OAAA2E,OAAAyiC,cAAAj1B,GAAAnS,OAAA0nC,iBAAA1nC,OAAA2nC,kBAEAx1B,EAAA2F,mBAGA2tB,eAAAjhC,GAAA,mBAAA,SAAA2N,GACA,IAAAxS,SAAA,CACAK,OAAA2E,OAAAyiC,cAAAj1B,GAAAnS,OAAA4nC,mBAAA5nC,OAAA6nC,oBAEA11B,EAAA2F,mBAGA4tB,eAAAlhC,GAAA,mBAAA,SAAA2N,GACA,IAAAxS,SAAA,CACAK,OAAA2E,OAAAyiC,cAAAj1B,GAAAnS,OAAA8nC,mBAAA9nC,OAAA+nC,oBAEA51B,EAAA2F,oBAKA3X,KAAAylC,oBAAA,SAAAJ,aAAAC,eAAAC,gBACAF,aAAAhhC,GAAA,UAAA,SAAA2N,GACA,IAAAxS,SAAA,CACA,GAAAwS,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA0nC,iBACA1nC,OAAA2E,cACA,GAAAwN,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA2nC,iBACA3nC,OAAA2E,aAKA8gC,eAAAjhC,GAAA,UAAA,SAAA2N,GACA,IAAAxS,SAAA,CACA,GAAAwS,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA4nC,mBACA5nC,OAAA2E,cACA,GAAAwN,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA6nC,mBACA7nC,OAAA2E,aAKA+gC,eAAAlhC,GAAA,UAAA,SAAA2N,GACA,IAAAxS,SAAA,CACA,GAAAwS,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA8nC,mBACA9nC,OAAA2E,cACA,GAAAwN,EAAAjQ,QAAA,GAAA,CACAiQ,EAAA2F,iBACA9X,OAAA+nC,mBACA/nC,OAAA2E,cAMAxE,KAAA0lC,iBAAA,SAAAL,aAAAC,eAAAC,gBACA,GAAA1lC,OAAA4kC,cAAA,CACA5kC,OAAAgoC,YAAA1rC,QAAA6C,KACAa,OAAAioC,cAAA3rC,QAAA6C,KACAa,OAAAkoC,cAAA5rC,QAAA6C,KACA,OAGA,IAAAgpC,WAAA,SAAAC,aAAAC,eAAAC,gBACAvkC,YAAAa,cAAA,MACAb,YAAAsR,aAAA,OAAA,OACA,GAAA/Y,QAAAgE,UAAA8nC,cAAA,CACApoC,OAAAooC,aAAAA,aACA,GAAAnD,eAAA,CACAA,eAAA5vB,aAAA,QAAA,QAIA,GAAA/Y,QAAAgE,UAAA+nC,gBAAA,CACAroC,OAAAqoC,eAAAA,eACA,GAAAnD,iBAAA,CACAA,iBAAA7vB,aAAA,UAAA,QAIA,GAAA/Y,QAAAgE,UAAAgoC,gBAAA,CACAtoC,OAAAsoC,eAAAA,eACA,GAAAnD,iBAAA,CACAA,iBAAA9vB,aAAA,UAAA,UAKArV,OAAAgoC,YAAA,WACA,IAAAz8B,MAAAm7B,uBACAl7B,QAAAm7B,yBAEA5iC,YAAAwkC,YAEA,GAAAjsC,QAAAgE,UAAAiL,QAAAjP,QAAAgE,UAAAkL,SAAA,CACAmK,SAAApG,SAAAhE,OACAoK,SAAA1F,WAAAzE,SACA,GAAAmK,SAAA0E,KAAA1E,SAAAsiB,IAAA,CACAkQ,WAAA,UACA,CACAvB,QAAA,UAEA,CACAuB,WAAA,QAIA3C,aAAAhhC,GAAA,OAAA,SAAA2N,GACApO,YAAAykC,cACA,GAAAC,eAAA,CACAC,iBACA,GAAA1oC,OAAAuL,QAAA,MAAAvL,OAAAuL,QAAA,GAAA,CACA48B,WAAA,WACA,IAAAnoC,OAAAooC,cAAApoC,OAAAuL,MAAA,GAAA,CACAvL,OAAA2E,OAAA,WACA3E,OAAAuL,MAAA07B,IAAAjnC,OAAAuL,OAAA85B,eAKArlC,OAAAioC,cAAA,WACA,IAAAz8B,QAAAm7B,yBACAp7B,MAAAm7B,uBAEA3iC,YAAAwkC,YAEA,GAAAjsC,QAAAgE,UAAAkL,UAAAlP,QAAAgE,UAAAiL,OAAA,CACAoK,SAAApG,SAAAhE,OACAoK,SAAA1F,WAAAzE,SACA,GAAAmK,SAAA0E,KAAA1E,SAAAsiB,IAAA,CACAkQ,WAAAtjC,UAAA,UACA,CACA+hC,QAAA,UAEA,CACAuB,WAAAtjC,UAAA,QAIA4gC,eAAAjhC,GAAA,OAAA,SAAA2N,GACApO,YAAAykC,cACA,GAAAC,eAAA,CACAC,iBACA,GAAA1oC,OAAAwL,UAAA,KAAA,CACA28B,WAAAtjC,UAAA,WACA,IAAA7E,OAAAqoC,gBAAAroC,OAAAwL,QAAA,GAAA,CACAxL,OAAA2E,OAAA,WACA3E,OAAAwL,QAAAy7B,IAAAjnC,OAAAwL,cAKAxL,OAAAkoC,cAAA,WACA,IAAAx8B,QAAAs7B,yBAEAjjC,YAAAwkC,YAEA,GAAAjsC,QAAAgE,UAAAoL,SAAA,CACAiK,SAAAgzB,WAAAj9B,SACAk7B,QAAA,SACA,CACAuB,WAAAtjC,UAAAA,UAAA,QAIA6gC,eAAAlhC,GAAA,OAAA,SAAA2N,GACA,GAAAs2B,eAAA,CACAC,iBACA,IAAA1oC,OAAAsoC,gBAAAtoC,OAAA0L,QAAA,GAAA,CACA1L,OAAA2E,OAAA,WACA3E,OAAA0L,QAAAu7B,IAAAjnC,OAAA0L,eAOAvL,KAAA4U,OAAA,WACA,IAAAxK,KAAAxG,YAAAiR,WAEA,GAAAvM,MAAA8B,MAAA,CACAxG,YAAAsR,aAAA,OAAA,OACA7L,KAAAyL,MAAA,qKACA,CACA,GAAA1K,KAAA,CACAoL,SAAApL,KAGA,GAAAoL,SAAA0E,KAAA1E,SAAAsiB,IAAA,CACAl0B,YAAAsR,aAAA,OAAA,OACArV,OAAAooC,aAAA,KACApoC,OAAAqoC,eAAA,SACA,CACAK,YAEA7B,mBAKA,SAAAD,QAAAgC,gBACAF,YACA3kC,YAAAa,cAAA,IAAA6F,KAAAkL,WACAkxB,eAAA+B,gBAGA,SAAAF,YACA,GAAAzD,eAAA,CACAA,eAAA5vB,aAAA,QAAA,MAGA,GAAA6vB,iBAAA,CACAA,iBAAA7vB,aAAA,UAAA,MAGA,GAAA8vB,iBAAA,CACAA,iBAAA9vB,aAAA,UAAA,MAGAtR,YAAAsR,aAAA,OAAA,MACArV,OAAAooC,aAAA,MACApoC,OAAAqoC,eAAA,MACAroC,OAAAsoC,eAAA,MAGA,SAAAzB,eAAA+B,gBACA,IAAA7kC,YAAAO,YAAA,CACAtE,OAAAuL,MAAA,KACAvL,OAAAwL,QAAA,KACAxL,OAAA0L,QAAA,KACA1L,OAAA+mC,SAAApC,UAAA,OACA,CACA,IAAAp5B,MAAAoK,SAAAhH,WACAnD,QAAAmK,SAAA/G,aACAlD,QAAAiK,SAAA9G,aAEA,GAAA7O,OAAAykC,aAAA,CACAl5B,MAAAA,QAAA,GAAAA,QAAA,GAAA,GAAAA,MAAA,GAGAvL,OAAAuL,MAAAq9B,iBAAA,IAAAr9B,MAAA07B,IAAA17B,OAAA85B,UACA,GAAAuD,iBAAA,IAAA,CACA5oC,OAAAwL,QAAAy7B,IAAAz7B,SAEAxL,OAAA+mC,SAAApxB,SAAAhH,WAAA,GAAAg2B,UAAA,GAAAA,UAAA,GAEA,GAAAiE,iBAAA,IAAA,CACA5oC,OAAA0L,QAAAu7B,IAAAv7B,SAEA1L,OAAA+mC,SAAApxB,SAAAhH,WAAA,GAAAg2B,UAAA,GAAAA,UAAA,IAIA,SAAAkE,qBAAAn9B,SACAiK,SAAA2wB,WAAA3wB,SAAAjK,SACAk7B,UAGA,SAAAZ,WAAArwB,SAAAnK,SACA,OAAA86B,WAAA3wB,SAAAnK,QAAA,IAGA,SAAA86B,WAAA/7B,KAAAmB,SACA,IAAA+C,GAAA,IAAAhE,KAAAF,KAAAmE,UAAAhD,QAAA,KACA,IAAAo9B,QAAA,IAAAr+B,KAAAF,MACAu+B,QAAAv5B,SAAAd,GAAAE,WAAAF,GAAAG,aAAAH,GAAAI,cACA,OAAAi6B,QAGA,SAAAL,eACA,OAAAzoC,OAAAuL,QAAA,MAAAvL,OAAAuL,QAAA,MACAvL,OAAAwL,UAAA,MAAAxL,OAAAwL,UAAA,OACAxL,OAAA0kC,aAAA1kC,OAAA0kC,cAAA1kC,OAAA0L,UAAA,MAAA1L,OAAA0L,UAAA,KAGA1L,OAAA+kC,aAAAzoC,QAAAgE,UAAAL,OAAA8kC,cACA/kC,OAAAwD,QAAAtF,MAAA+B,OAAA8kC,cAAAC,iBAAAD,aAEA/kC,OAAA0nC,eAAA,WACA,IAAA1nC,OAAA8lC,mBAAA,CACA+C,qBAAAvE,SAAA,GAAA,MAIAtkC,OAAA2nC,eAAA,WACA,IAAA3nC,OAAAimC,mBAAA,CACA4C,sBAAAvE,SAAA,GAAA,MAIAtkC,OAAA4nC,iBAAA,WACA,IAAA5nC,OAAAmmC,qBAAA,CACA0C,qBAAAtE,WAAA,MAIAvkC,OAAA6nC,iBAAA,WACA,IAAA7nC,OAAAomC,qBAAA,CACAyC,sBAAAtE,WAAA,MAIAvkC,OAAA8nC,iBAAA,WACA,IAAA9nC,OAAAqmC,qBAAA,CACAwC,qBAAArE,cAIAxkC,OAAA+nC,iBAAA,WACA,IAAA/nC,OAAAumC,qBAAA,CACAsC,sBAAArE,cAIAxkC,OAAA+oC,eAAA,WACA,IAAAv9B,QAAAm7B,yBACAp7B,MAAAm7B,uBAEA,IAAA1mC,OAAAwmC,mBAAA,CACA,GAAAlqC,QAAAgE,UAAAkL,UAAAlP,QAAAgE,UAAAiL,OAAA,CACAs9B,qBAAA,GAAA,IAAAlzB,SAAAhH,WAAA,GAAA,IAAA,SACA,CACA3O,OAAA+mC,SAAA/mC,OAAA+mC,WAAApC,UAAA,GAAAA,UAAA,GAAAA,UAAA,MAKA3kC,OAAAq4B,KAAA,WACAt0B,YAAAykC,eAGAxoC,OAAAc,IAAA,WAAA,WACA,MAAAskC,SAAAj/B,OAAA,CACAi/B,SAAAltB,OAAAktB,SAKA5oC,UAAA,gBAAA,CAAA,sBAAA,SAAAwsC,qBACA,MAAA,CACAznC,QAAA,CAAA,gBAAA,aACA/B,SAAA,IACAO,WAAA,0BACAqB,aAAA,aACAnE,MAAA,GACAqE,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmE,aAAA0nC,oBAAA1nC,aAEAtE,KAAA,SAAAC,MAAAC,QAAAC,MAAA0G,OACA,IAAAolC,eAAAplC,MAAA,GAAAE,YAAAF,MAAA,GAEA,GAAAE,YAAA,CACAklC,eAAAlrC,KAAAgG,YAAA7G,QAAAgH,KAAA,gBAMA5H,QAAAC,OAAA,yBAAA,CAAA,wBAAA,0BAMAue,QAAA,qBAAA,CAAA,SAAA,SAAAne,QAEA,IAAAusC,iBAAA,yFACA,MAAA,CACAh7B,MAAA,SAAAC,OACA,IAAAtC,MAAAsC,MAAAtC,MAAAq9B,kBACA,IAAAr9B,MAAA,CACA,MAAA,IAAAqY,MACA,sGACA,aAAA/V,MAAA,MAGA,MAAA,CACAg7B,SAAAt9B,MAAA,GACAu9B,OAAAzsC,OAAAkP,MAAA,IACAw9B,WAAA1sC,OAAAkP,MAAA,IAAAA,MAAA,IACAy9B,YAAA3sC,OAAAkP,MAAA,UAMA9L,WAAA,yBAAA,CAAA,SAAA,WAAA,SAAA,WAAA,SAAA,KAAA,WAAA,YAAA,UAAA,aAAA,aAAA,eAAA,qBACA,SAAAwpC,cAAArsC,QAAAC,MAAA4lB,SAAApmB,OAAAD,GAAA0G,SAAA2X,UAAAC,QAAAgI,WAAAwmB,WAAAvmB,UAAAwmB,iBACA,IAAAC,SAAA,CAAA,EAAA,GAAA,GAAA,GAAA,IACA,IAAAC,kBAAA,IACA,IAAAC,UAAAz2B,eAIA,IAAA02B,UAAAN,cAAArrC,MAAAf,MAAA2sC,oBACA,IAAAD,WAAAA,YAAA,EAAA,CACAA,UAAA,EAGAN,cAAAjqC,OAAAnC,MAAA2sC,mBAAA,SAAAC,QACAF,WAAAE,QAAAA,SAAA,EAAA,EAAAA,SAIA,IAAAC,SAAAT,cAAArrC,MAAAf,MAAA8sC,kBAAA,EAGA,IAAAC,WAAAX,cAAArrC,MAAAf,MAAAgtC,qBAAA,MACAZ,cAAAjqC,OAAAnC,MAAAgtC,kBAAA,SAAAJ,QACAG,WAAAH,SAAA,QAIA,IAAAK,gBAAAztC,OAAAQ,MAAAktC,kBAAA3gB,QAAAptB,QAAA6C,KAGA,IAAAmrC,cAAAntC,MAAAotC,sBAAA5tC,OAAAQ,MAAAotC,uBAAA,SAAAttC,MAAAutC,MACA,IAAA7yB,IAAA6yB,KAAAvoC,OACA,OAAA0V,IAAAzV,QAAA,IAAAyV,IAAAzV,QAAA,GAIA,IAAAuoC,iBAAA9tC,OAAAQ,MAAAutC,mBAGA,IAAAC,eAAAruC,QAAAgE,UAAAnD,MAAAytC,uBAAArB,cAAArrC,MAAAf,MAAAytC,uBAAA,MAGA,IAAAC,kBAAAluC,OAAAQ,MAAA2tC,oBAAAphB,QAAAptB,QAAA6C,KAEA,IAAA4rC,eAAA5tC,MAAA6tC,wBAAAruC,OAAAQ,MAAA6tC,yBAAAnmC,UAEA,IAAAyb,aAAAnjB,MAAA8tC,sBAAA1B,cAAArrC,MAAAf,MAAA8tC,uBAAA,MAEA,IAAAvjB,SAAAvqB,MAAA+tC,kBACA3B,cAAArrC,MAAAf,MAAA+tC,mBAAA,KAEA,IAAAC,WAAA5B,cAAArrC,MAAAf,MAAAiuC,uBAAA,MAGA,IAAAC,cAAAluC,MAAAmuC,uBAAA/B,cAAArrC,MAAAf,MAAAmuC,wBAAA,MAGA,IAAAC,aAAA5uC,OAAAQ,MAAAquC,iBAAA9hB,QAAAptB,QAAA6C,KAEA,IAAAssC,SAAAlC,cAAArrC,MAAAf,MAAAuuC,oBAAA,MAKA,IAAAC,YAAAhvC,OAAAQ,MAAAumB,SACA,IAAAkoB,kBAAAjvC,OAAAQ,MAAAumB,QAAA,UACA,IAAAmoB,eAAA,SAAA5uC,MAAA6uC,UACA,GAAAxvC,QAAAqQ,WAAAg/B,YAAApC,iBACAp2B,eAAAc,UAAA,gBAAA,CACA,OAAA23B,kBAAA3uC,MAAA,CAAA8uC,KAAAD,WAGA,OAAAH,YAAAjiB,OAAAzsB,MAAA6uC,WAIA,IAAAE,aAAAvC,gBAAAv7B,MAAA/Q,MAAA8uC,cAEA,IAAAC,SAKA,IAAAv2B,SAIA,IAAA1Y,MAAAssC,cAAAtgB,OACA,IAAAkjB,WAAA5C,cAAAzoC,IAAA,WAAA,WACA7D,MAAAouB,aAEApuB,MAAA6D,IAAA,WAAAqrC,YAGA,IAAAC,QAAA,aAAAnvC,MAAAmF,IAAA,IAAAC,KAAAC,MAAAD,KAAAE,SAAA,KACArF,QAAAmB,KAAA,CACAguC,oBAAA,OACA1gB,gBAAA,MACA2gB,YAAAF,UAGA,IAAAG,gBAAAC,cAEA,GAAAf,SAAA,CACAc,gBAAAjwC,QAAAY,QAAA,eACAqvC,gBAAA1uC,IAAA,WAAA,YACAX,QAAA+nB,MAAAsnB,iBACAC,cAAAtvC,QAAAmxB,QACAme,cAAAnuC,KAAA,cAAA,IACAmuC,cAAAnuC,KAAA,WAAA,MACAmuC,cAAAhnB,IAAA,IACAgnB,cAAA3uC,IAAA,CACAwe,SAAA,WACAoC,IAAA,MACAE,KAAA,MACA8tB,eAAA,cACAC,aAAA,OACAC,QAAA,EACAC,WAAA,4EACAC,MAAA,SAEA3vC,QAAAW,IAAA,CACAwe,SAAA,WACAywB,iBAAA,MACAC,mBAAA,gBAGA,GAAAP,cAAAnuC,KAAA,MAAA,CACAmuC,cAAAlH,WAAA,MAEAiH,gBAAAtpC,OAAAupC,eACAA,cAAAvnB,MAAA/nB,SAIA,IAAA8vC,QAAA1wC,QAAAY,QAAA,mCACA8vC,QAAA3uC,KAAA,CACA8D,GAAAiqC,QACAxgC,QAAA,UACAlG,OAAA,YACAa,OAAA,yBACA0mC,mBAAA,iBACAC,MAAA,QACA7wB,SAAA,WACA8wB,iBAAA,uBACAC,SAAA,mBAGA,GAAA9wC,QAAAgE,UAAAnD,MAAAkwC,sBAAA,CACAL,QAAA3uC,KAAA,eAAAlB,MAAAkwC,sBAGA,GAAA/wC,QAAAgE,UAAAnD,MAAAmwC,2BAAA,CACAN,QAAA3uC,KAAA,qBAAAlB,MAAAmwC,2BAGA,IAAAC,UAAA,WACA,GAAA9B,SAAA,CACAe,cAAAhnB,IAAA,MAIA,IAAAgoB,aAAA,WACAvwC,MAAA2O,QAAA,GACA3O,MAAAwwC,WAAA,EACAvwC,QAAAmB,KAAA,gBAAA,OACAkvC,aAGA,IAAAG,WAAA,SAAAzsC,OACA,OAAAmrC,QAAA,WAAAnrC,OAKAhE,MAAAqC,OAAA,YAAA,SAAA2B,OACA,GAAAA,MAAA,EAAA,CACA/D,QAAAooC,WAAA,6BACA,CACApoC,QAAAmB,KAAA,wBAAAqvC,WAAAzsC,WAIA,IAAA0sC,kBAAA,SAAAC,WAAA3sC,OACA,GAAAhE,MAAA2O,QAAAzF,OAAAlF,OAAA2sC,WAAA,CACA,OAAAA,WAAAC,gBAAA5wC,MAAA2O,QAAA3K,OAAAyU,MAAAm4B,cAGA,OAAA,OAGA,IAAAC,gBAAA,SAAAF,WAAAj2B,KACA,IAAA0U,OAAA,CAAArX,WAAA44B,YACAxD,gBAAAb,cAAA,MACAsB,kBAAAtB,cAAA,OACA7sC,GAAAqxB,KAAAie,aAAA5C,OAAAG,cAAAld,SAAAztB,KAAA,SAAAgN,SAGA,IAAAmiC,iBAAAH,aAAAhE,UAAA50B,WACA,GAAA+4B,kBAAA7B,SAAA,CACA,GAAAtgC,SAAAA,QAAAzF,OAAA,EAAA,CACAlJ,MAAAwwC,UAAAtC,WAAA,GAAA,EACAN,kBAAAtB,cAAA,OACAtsC,MAAA2O,QAAAzF,OAAA,EAGA,IAAA,IAAAQ,EAAA,EAAAA,EAAAiF,QAAAzF,OAAAQ,IAAA,CACA0lB,OAAA2f,aAAA7C,UAAAv9B,QAAAjF,GACA1J,MAAA2O,QAAA/K,KAAA,CACAsB,GAAAurC,WAAA/mC,GACA+O,MAAAs2B,aAAA3C,WAAApsC,MAAAovB,QACA9W,MAAA3J,QAAAjF,KAIA1J,MAAAiwC,MAAAU,WAIAI,sBAEA9wC,QAAAmB,KAAA,gBAAA,MAGA,GAAAgtC,eAAApuC,MAAA2O,QAAAzF,SAAA,GAAAwnC,kBAAAC,WAAA,GAAA,CACA,GAAAtxC,QAAA8J,SAAAnJ,MAAAgxC,iBAAA3xC,QAAAiqB,SAAAtpB,MAAAgxC,gBAAA,CACAzE,WAAA,WACAvsC,MAAAsJ,OAAA,EAAAoR,MACArb,QAAA8J,SAAAnJ,MAAAgxC,gBAAAhxC,MAAAgxC,eAAAhxC,MAAAgxC,eAAA,gBACA,CACAhxC,MAAAsJ,OAAA,EAAAoR,MAIA,GAAA8zB,SAAA,CACA,IAAAyC,WAAAjxC,MAAA2O,QAAA,GAAA8J,MACA,GAAApZ,QAAA+R,SAAAu/B,aACAA,WAAAznC,OAAA,GACA+nC,WAAAvnB,MAAA,EAAAinB,WAAAznC,QAAA0nC,gBAAAD,WAAAC,cAAA,CACArB,cAAAhnB,IAAAooB,WAAAM,WAAAvnB,MAAAinB,WAAAznC,aACA,CACAqmC,cAAAhnB,IAAA,UAGA,CACAgoB,eACA3C,kBAAAtB,cAAA,OAGA,GAAAwE,iBAAA,CACA3D,gBAAAb,cAAA,SAEA,WACAiE,eACApD,gBAAAb,cAAA,OACAsB,kBAAAtB,cAAA,SAKA,GAAAjpB,aAAA,CACAhkB,QAAAY,QAAA8d,SAAAxW,GAAA,SAAA2pC,mBACApzB,UAAA7W,KAAA,QAAAM,GAAA,SAAA2pC,mBAKA,IAAAC,qBAAA5E,WAAA,WAEA,GAAAvsC,MAAA2O,QAAAzF,OAAA,CACA6nC,sBAGA/wC,MAAAoxC,eAAA,OACA1E,mBAGA1sC,MAAAoxC,eAAA,MAEA,SAAAF,oBACA,IAAAlxC,MAAAoxC,eAAA,CACApxC,MAAAoxC,eAAA,KACApxC,MAAAqxC,UAGAF,uBAKA,SAAAJ,sBACA/wC,MAAAof,SAAAiE,aAAA2C,UAAAzE,OAAAthB,SAAA+lB,UAAA5G,SAAAnf,SACAD,MAAAof,SAAAoC,KAAAvhB,QAAAsjB,KAAA,gBAIAvjB,MAAAiwC,MAAAroC,UAGA,IAAA4hB,eAEA,IAAA8nB,0BAAA,SAAAX,YACAnnB,eAAArjB,SAAA,WACA0qC,gBAAAF,aACA5D,WAGA,IAAAwE,sBAAA,WACA,GAAA/nB,eAAA,CACArjB,SAAAmF,OAAAke,kBAIA+mB,eAEAvwC,MAAAqhC,aAAA,SAAA79B,QACA8qC,aAAAhC,cAAA9oC,SAGAxD,MAAAsJ,OAAA,SAAAknC,UAAA91B,KAEA,IAAA0U,OAAA,GACA,IAAA9W,MAAAk5B,KAEA94B,SAAA,KACA0W,OAAA2f,aAAA7C,UAAAsF,KAAAxxC,MAAA2O,QAAA6hC,WAAAl4B,MACAA,MAAAy2B,aAAA1C,YAAAC,cAAAld,QACAwf,eAAAtC,cAAAh0B,OACAq0B,UAAAv0B,aAAA,WAAA,MACAu0B,UAAAv0B,aAAA,QAAA,MAEAo1B,iBAAAlB,cAAA,CACAmF,MAAAD,KACAE,OAAAp5B,MACAq5B,OAAA5C,aAAA3C,WAAAE,cAAAld,QACApqB,OAAA0V,MAGA61B,eAIA,GAAAvwC,MAAAiB,MAAAf,MAAA0xC,0BAAA,MAAA,CACAzrC,SAAA,WAAAlG,QAAA,GAAAua,SAAA,EAAA,SAKAva,QAAAsH,GAAA,UAAA,SAAAmT,KAEA,GAAA1a,MAAA2O,QAAAzF,SAAA,GAAAujC,SAAAxoC,QAAAyW,IAAAzV,UAAA,EAAA,CACA,OAGA,IAAA4sC,aAAAxE,cAAAf,cAAA,CAAAtnC,OAAA0V,MAQA,GAAA1a,MAAAwwC,aAAA,GAAAqB,cAAAn3B,IAAAzV,QAAA,KAAAyV,IAAAC,SAAA,CACA41B,eACAvwC,MAAAqxC,UACA,OAGA32B,IAAAG,iBACA,IAAAsO,OACA,OAAAzO,IAAAzV,OACA,KAAA,GACAyV,IAAAI,kBAEAy1B,eACAjE,cAAA+E,UACA,MACA,KAAA,GACArxC,MAAAwwC,WAAAxwC,MAAAwwC,UAAA,EAAAxwC,MAAAwwC,UAAAxwC,MAAA2O,QAAAzF,QAAA,EACAlJ,MAAAqxC,UACAloB,OAAA4mB,QAAA,GAAA3Y,iBAAA,wBAAAp3B,MAAAwwC,WACArnB,OAAA2oB,WAAA/vB,UAAAoH,OAAA4oB,UACA,MACA,KAAA,GACA/xC,MAAAwwC,WAAAxwC,MAAAwwC,UAAA,GAAAxwC,MAAA2O,QAAAzF,OACAlJ,MAAAqxC,UACAloB,OAAA4mB,QAAA,GAAA3Y,iBAAA,wBAAAp3B,MAAAwwC,WACArnB,OAAA2oB,WAAA/vB,UAAAoH,OAAA4oB,UACA,MACA,QACA,GAAAF,aAAA,CACA7xC,MAAA0H,OAAA,WACA,GAAArI,QAAA8J,SAAAnJ,MAAAgxC,iBAAA3xC,QAAAiqB,SAAAtpB,MAAAgxC,gBAAA,CACAzE,WAAA,WACAvsC,MAAAsJ,OAAAtJ,MAAAwwC,UAAA91B,MACArb,QAAA8J,SAAAnJ,MAAAgxC,gBAAAhxC,MAAAgxC,eAAAhxC,MAAAgxC,eAAA,gBACA,CACAhxC,MAAAsJ,OAAAtJ,MAAAwwC,UAAA91B,YAOAza,QAAAsH,GAAA,QAAA,SAAAmT,KACAu0B,SAAA,KACA,GAAArC,YAAA,IAAAD,UAAA50B,WAAA,CACA5R,SAAA,WACA0qC,gBAAAlE,UAAA50B,WAAA2C,MACA,MAIAza,QAAAsH,GAAA,OAAA,SAAAmT,KACA,GAAAgzB,gBAAA1tC,MAAA2O,QAAAzF,QAAAlJ,MAAAwwC,aAAA,IAAA93B,SAAA,CACAA,SAAA,KACA1Y,MAAA0H,OAAA,WACA,GAAArI,QAAAiqB,SAAAtpB,MAAAgxC,iBAAA3xC,QAAA8J,SAAAnJ,MAAAgxC,eAAA5V,MAAA,CACAmR,WAAA,WACAvsC,MAAAsJ,OAAAtJ,MAAAwwC,UAAA91B,MACA1a,MAAAgxC,eAAA5V,UACA,CACAp7B,MAAAsJ,OAAAtJ,MAAAwwC,UAAA91B,QAIA,IAAAuyB,YAAAN,UAAAnD,OAAAwI,SAAA,CACArF,UAAAhlC,gBACA3H,MAAA0H,OAAA,WAEAilC,UAAAv0B,aAAA,WAAA,MACAu0B,UAAAv0B,aAAA,QAAA,QAEAnY,QAAAsoB,IAAA,IAEA0mB,SAAA,MACAv2B,SAAA,QAIA,IAAAu5B,oBAAA,SAAAv3B,KAGA,GAAAza,QAAA,KAAAya,IAAAyO,QAAAzO,IAAAzV,QAAA,GAAAjF,MAAA2O,QAAAzF,SAAA,EAAA,CACAqnC,eACA,IAAAxqB,WAAAkC,QAAA,CACAqkB,cAAA+E,aAKAvzB,UAAAvW,GAAA,QAAA0qC,qBAEA3F,cAAAzoC,IAAA,WAAA,WACAia,UAAAzS,IAAA,QAAA4mC,qBACA,GAAA5uB,cAAAoH,SAAA,CACA/D,OAAA7G,SAGA,GAAAwD,aAAA,CACAhkB,QAAAY,QAAA8d,SAAA1S,IAAA,SAAA6lC,mBACApzB,UAAA7W,KAAA,QAAAoE,IAAA,SAAA6lC,mBAGAnB,QAAAlwB,SAEA,GAAA2uB,SAAA,CACAc,gBAAAzvB,YAIA,IAAA6G,OAAAZ,SAAAiqB,QAAAjqB,CAAA9lB,OAEA,GAAAqjB,aAAA,CACAvF,UAAA7W,KAAA,QAAAjB,OAAA0gB,aACA,GAAA+D,SAAA,CACAprB,QAAAY,QAAAwqB,UAAAwC,GAAA,GAAAjnB,OAAA0gB,YACA,CACAzmB,QAAA+nB,MAAAtB,QAGAxjB,KAAApC,KAAA,SAAAoxC,YACAvF,UAAAuF,WACAh8B,eAAAwB,eAAAi1B,WAEA3sC,MAAAgxC,eAAAtxC,OAAAwW,eAAAc,UAAA,YAAAtX,CAAA4sC,eAIAK,UAAAllB,SAAAC,QAAA,SAAAipB,YACA1B,SAAA,KAEA,GAAArC,YAAA,GAAA+D,YAAAA,WAAAznC,QAAA0jC,UAAA,CACA,GAAAG,SAAA,EAAA,CACAwE,wBACAD,0BAAAX,gBACA,CACAE,gBAAAF,iBAEA,CACAxD,gBAAAb,cAAA,OACAiF,wBACAhB,eAGA,GAAAtD,WAAA,CACA,OAAA0D,WAGA,IAAAA,WAAA,CAEAhE,UAAAv0B,aAAA,WAAA,MACA,OAAA,KAGAu0B,UAAAv0B,aAAA,WAAA,OACA,OAAAxQ,YAGA+kC,UAAA/kB,YAAAhkB,KAAA,SAAAklB,YACA,IAAAqpB,mBAAAC,eACA,IAAAhjB,OAAA,GAKA,IAAA6d,WAAA,CACAN,UAAAv0B,aAAA,WAAA,MAGA,GAAA01B,eAAA,CACA1e,OAAAsiB,OAAA5oB,WACA,OAAAglB,eAAAxB,cAAAld,QAKAA,OAAA2f,aAAA7C,UAAApjB,WACAqpB,mBAAApD,aAAA3C,WAAAE,cAAAld,QACAA,OAAA2f,aAAA7C,UAAAtkC,UACAwqC,eAAArD,aAAA3C,WAAAE,cAAAld,QAEA,OAAA+iB,qBAAAC,eAAAD,mBAAArpB,cAIA,SAAApR,eAAA5Q,aACA,IAAAoP,eAEA,GAAA7W,QAAA4P,QAAAE,MAAA,EAAA,CAEA+G,eAAApP,YAAAoU,UAAA,GAGAhF,eAAAc,UAAA,SAAA/J,KACA,OAAAiJ,eAAAjJ,UAEA,CACAiJ,eAAApP,YAAAoU,SAGA,OAAAhF,mBAIA3W,UAAA,eAAA,WACA,MAAA,CACAuD,WAAA,yBACAwB,QAAA,CAAA,UAAA,gBACAvE,KAAA,SAAAusC,cAAArsC,QAAAC,MAAA0G,OACAA,MAAA,GAAA9F,KAAA8F,MAAA,QAKArH,UAAA,oBAAA,CAAA,aAAA,SAAAgtC,YACA,MAAA,CACAvsC,MAAA,CACA2O,QAAA,IACAshC,MAAA,IACAxnC,OAAA,IACA2W,SAAA,IACAgyB,eAAA,IACA9nC,OAAA,IACA+3B,aAAA,IACA8O,SAAA,KAEAzqC,QAAA,KACArB,YAAA,SAAApE,QAAAC,OACA,OAAAA,MAAAmyC,kBAAA,+CAEAtyC,KAAA,SAAAC,MAAAC,QAAAC,OACAF,MAAAqE,YAAAnE,MAAAmE,YAEArE,MAAAwD,OAAA,WACA,IAAA8uC,eAAAtyC,MAAA2O,QAAAzF,OAAA,EACAlJ,MAAAqhC,aAAA,CAAA79B,OAAA8uC,iBACA,OAAAA,gBAGAtyC,MAAAwH,SAAA,SAAA+qC,UACA,OAAAvyC,MAAAyI,SAAA8pC,UAGAvyC,MAAAwyC,aAAA,SAAAD,UACAvyC,MAAAyI,OAAA8pC,UAGAvyC,MAAAyyC,YAAA,SAAAjC,UAAA91B,KACA,IAAAy1B,SAAAnwC,MAAAmwC,WACA,GAAA9wC,QAAA8J,SAAAgnC,WAAA9wC,QAAAiqB,SAAA6mB,UAAA,CACA5D,WAAA,WACAvsC,MAAAsJ,OAAA,CAAAknC,UAAAA,UAAA91B,IAAAA,OACArb,QAAA8J,SAAAgnC,UAAAA,SAAAA,SAAA,gBACA,CACAnwC,MAAAsJ,OAAA,CAAAknC,UAAAA,UAAA91B,IAAAA,aAOAnb,UAAA,oBAAA,CAAA,mBAAA,WAAA,SAAA,SAAAwsB,iBAAAjG,SAAApmB,QACA,MAAA,CACAM,MAAA,CACAgE,MAAA,IACA4K,MAAA,IACAqhC,MAAA,KAEAlwC,KAAA,SAAAC,MAAAC,QAAAC,OACA,IAAAquB,OAAA7uB,OAAAQ,MAAAmE,YAAA3E,CAAAM,MAAAuG,UAAA,8CACAwlB,iBAAAwC,QAAA5sB,KAAA,SAAAqsB,YACA,IAAA0kB,MAAArzC,QAAAY,QAAA+tB,WAAAC,QACAhuB,QAAAkuB,YAAAukB,OACA5sB,SAAA4sB,MAAA5sB,CAAA9lB,cAMA6Q,OAAA,wBAAA,CAAA,OAAA,YAAA,OAAA,SAAA0xB,KAAA5iC,UAAA4M,MACA,IAAAomC,kBACAA,kBAAAhzC,UAAAE,IAAA,aAEA,SAAA+yC,aAAAC,eAGA,OAAAA,cAAAntC,QAAA,yBAAA,QAGA,SAAAotC,aAAAC,WACA,MAAA,QAAAjlC,KAAAilC,WAGA,OAAA,SAAAA,UAAA9C,OACA,IAAA0C,mBAAAG,aAAAC,WAAA,CACAxmC,KAAAuF,KAAA,iDAEAihC,UAAA9C,OAAA,GAAA8C,WAAArtC,QAAA,IAAAyK,OAAAyiC,aAAA3C,OAAA,MAAA,uBAAA8C,UACA,IAAAJ,kBAAA,CACAI,UAAAxQ,KAAAyQ,YAAAD,WAEA,OAAAA,cAIA1zC,QAAAC,OAAA,8CAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,8CACA,4HACA,+BACA,sVACA,YACA,WACA,gKACA,mDACA,WACA,OAGA3qB,QAAAC,OAAA,wCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,wCACA,mEAGA3qB,QAAAC,OAAA,gCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,gCACA,gGACA,8CACA,yCACA,cACA,8BACA,OAGA3qB,QAAAC,OAAA,sCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,sCACA,qDACA,iJACA,gFACA,4CACA,SACA,kJACA,iFACA,wCACA,SACA,iEACA,8IACA,0IACA,YACA,UACA,OAGA3qB,QAAAC,OAAA,mCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,mCACA,kDACA,OAGA3qB,QAAAC,OAAA,0CAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,0CACA,qCACA,wFACA,8FACA,2FACA,WACA,OAGA3qB,QAAAC,OAAA,mCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,mCACA,wGACA,cACA,aACA,2LACA,qTACA,6LACA,cACA,aACA,0DACA,mJACA,cACA,eACA,cACA,kFACA,+FACA,gFACA,8BACA,yCACA,iEACA,6BACA,2CACA,sCACA,uBACA,yCACA,0CACA,wIACA,gBACA,cACA,eACA,aACA,OAGA3qB,QAAAC,OAAA,qCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,qCACA,wGACA,cACA,aACA,+OACA,yTACA,iPACA,cACA,eACA,cACA,mFACA,kFACA,8BACA,yCACA,0DACA,6BACA,2CACA,sCACA,uBACA,yCACA,0CACA,0GACA,gBACA,cACA,eACA,aACA,OAGA3qB,QAAAC,OAAA,qCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,qCACA,UACA,2KACA,gCACA,0DACA,6CACA,6MACA,8KACA,oJACA,kBACA,yJACA,cACA,YACA,WACA,OAGA3qB,QAAAC,OAAA,oCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,oCACA,wGACA,cACA,aACA,+OACA,mTACA,6OACA,cACA,eACA,cACA,kFACA,iFACA,8BACA,yCACA,0DACA,6BACA,2CACA,sCACA,uBACA,yCACA,0CACA,0GACA,gBACA,cACA,eACA,aACA,OAGA3qB,QAAAC,OAAA,0CAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,0CACA,6LACA,8BACA,wDACA,2CACA,6MACA,8KACA,wLACA,gBACA,uJACA,YACA,UACA,OAGA3qB,QAAAC,OAAA,mCAAA,IAAA2zC,IAAA,CAAA,iBAAA,SAAAC,gBACAA,eAAAlpB,IAAA,mCACA,gCACA,0CACA,6BACA,uEACA,YACA,OAGA3qB,QA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","file":"site.boot-source.min.js","sourcesContent":["///*\n// * angular-ui-bootstrap\n// * http://angular-ui.github.io/bootstrap/\n\n// * Version: 2.5.6 - 2017-10-14\n// * License: MIT\n// */\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.collapse\", \"ui.bootstrap.tabindex\", \"ui.bootstrap.accordion\", \"ui.bootstrap.alert\", \"ui.bootstrap.buttons\", \"ui.bootstrap.carousel\", \"ui.bootstrap.dateparser\", \"ui.bootstrap.isClass\", \"ui.bootstrap.datepicker\", \"ui.bootstrap.position\", \"ui.bootstrap.datepickerPopup\", \"ui.bootstrap.debounce\", \"ui.bootstrap.multiMap\", \"ui.bootstrap.dropdown\", \"ui.bootstrap.stackedMap\", \"ui.bootstrap.modal\", \"ui.bootstrap.paging\", \"ui.bootstrap.pager\", \"ui.bootstrap.pagination\", \"ui.bootstrap.tooltip\", \"ui.bootstrap.popover\", \"ui.bootstrap.progressbar\", \"ui.bootstrap.rating\", \"ui.bootstrap.tabs\", \"ui.bootstrap.timepicker\", \"ui.bootstrap.typeahead\"]);\nangular.module(\"ui.bootstrap.tpls\", [\"uib/template/accordion/accordion-group.html\",\"uib/template/accordion/accordion.html\",\"uib/template/alert/alert.html\",\"uib/template/carousel/carousel.html\",\"uib/template/carousel/slide.html\",\"uib/template/datepicker/datepicker.html\",\"uib/template/datepicker/day.html\",\"uib/template/datepicker/month.html\",\"uib/template/datepicker/year.html\",\"uib/template/datepickerPopup/popup.html\",\"uib/template/modal/window.html\",\"uib/template/pager/pager.html\",\"uib/template/pagination/pagination.html\",\"uib/template/tooltip/tooltip-html-popup.html\",\"uib/template/tooltip/tooltip-popup.html\",\"uib/template/tooltip/tooltip-template-popup.html\",\"uib/template/popover/popover-html.html\",\"uib/template/popover/popover-template.html\",\"uib/template/popover/popover.html\",\"uib/template/progressbar/bar.html\",\"uib/template/progressbar/progress.html\",\"uib/template/progressbar/progressbar.html\",\"uib/template/rating/rating.html\",\"uib/template/tabs/tab.html\",\"uib/template/tabs/tabset.html\",\"uib/template/timepicker/timepicker.html\",\"uib/template/typeahead/typeahead-match.html\",\"uib/template/typeahead/typeahead-popup.html\"]);\nangular.module('ui.bootstrap.collapse', [])\n\n .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\n return {\n link: function(scope, element, attrs) {\n var expandingExpr = $parse(attrs.expanding),\n expandedExpr = $parse(attrs.expanded),\n collapsingExpr = $parse(attrs.collapsing),\n collapsedExpr = $parse(attrs.collapsed),\n horizontal = false,\n css = {},\n cssTo = {};\n\n init();\n\n function init() {\n horizontal = !!('horizontal' in attrs);\n if (horizontal) {\n css = {\n width: ''\n };\n cssTo = {width: '0'};\n } else {\n css = {\n height: ''\n };\n cssTo = {height: '0'};\n }\n if (!scope.$eval(attrs.uibCollapse)) {\n element.addClass('in')\n .addClass('collapse')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false)\n .css(css);\n }\n }\n\n function getScrollFromElement(element) {\n if (horizontal) {\n return {width: element.scrollWidth + 'px'};\n }\n return {height: element.scrollHeight + 'px'};\n }\n\n function expand() {\n if (element.hasClass('collapse') && element.hasClass('in')) {\n return;\n }\n\n $q.resolve(expandingExpr(scope))\n .then(function() {\n element.removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false);\n\n if ($animateCss) {\n $animateCss(element, {\n addClass: 'in',\n easing: 'ease',\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).start()['finally'](expandDone);\n } else {\n $animate.addClass(element, 'in', {\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).then(expandDone);\n }\n }, angular.noop);\n }\n\n function expandDone() {\n element.removeClass('collapsing')\n .addClass('collapse')\n .css(css);\n expandedExpr(scope);\n }\n\n function collapse() {\n if (!element.hasClass('collapse') && !element.hasClass('in')) {\n return collapseDone();\n }\n\n $q.resolve(collapsingExpr(scope))\n .then(function() {\n element\n // IMPORTANT: The width must be set before adding \"collapsing\" class.\n // Otherwise, the browser attempts to animate from width 0 (in\n // collapsing class) to the given width here.\n .css(getScrollFromElement(element[0]))\n // initially all panel collapse have the collapse class, this removal\n // prevents the animation from jumping to collapsed state\n .removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', false)\n .attr('aria-hidden', true);\n\n if ($animateCss) {\n $animateCss(element, {\n removeClass: 'in',\n to: cssTo\n }).start()['finally'](collapseDone);\n } else {\n $animate.removeClass(element, 'in', {\n to: cssTo\n }).then(collapseDone);\n }\n }, angular.noop);\n }\n\n function collapseDone() {\n element.css(cssTo); // Required so that collapse works when animation is disabled\n element.removeClass('collapsing')\n .addClass('collapse');\n collapsedExpr(scope);\n }\n\n scope.$watch(attrs.uibCollapse, function(shouldCollapse) {\n if (shouldCollapse) {\n collapse();\n } else {\n expand();\n }\n });\n }\n };\n }]);\n\nangular.module('ui.bootstrap.tabindex', [])\n\n.directive('uibTabindexToggle', function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n attrs.$observe('disabled', function(disabled) {\n attrs.$set('tabindex', disabled ? -1 : null);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])\n\n.constant('uibAccordionConfig', {\n closeOthers: true\n})\n\n.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {\n // This array keeps track of the accordion groups\n this.groups = [];\n\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\n this.closeOthers = function(openGroup) {\n var closeOthers = angular.isDefined($attrs.closeOthers) ?\n $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\n if (closeOthers) {\n angular.forEach(this.groups, function(group) {\n if (group !== openGroup) {\n group.isOpen = false;\n }\n });\n }\n };\n\n // This is called from the accordion-group directive to add itself to the accordion\n this.addGroup = function(groupScope) {\n var that = this;\n this.groups.push(groupScope);\n\n groupScope.$on('$destroy', function(event) {\n that.removeGroup(groupScope);\n });\n };\n\n // This is called from the accordion-group directive when to remove itself\n this.removeGroup = function(group) {\n var index = this.groups.indexOf(group);\n if (index !== -1) {\n this.groups.splice(index, 1);\n }\n };\n}])\n\n// The accordion directive simply sets up the directive controller\n// and adds an accordion CSS class to itself element.\n.directive('uibAccordion', function() {\n return {\n controller: 'UibAccordionController',\n controllerAs: 'accordion',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion.html';\n }\n };\n})\n\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\n.directive('uibAccordionGroup', function() {\n return {\n require: '^uibAccordion', // We need this directive to be inside an accordion\n transclude: true, // It transcludes the contents of the directive into the template\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';\n },\n scope: {\n heading: '@', // Interpolate the heading attribute onto this scope\n panelClass: '@?', // Ditto with panelClass\n isOpen: '=?',\n isDisabled: '=?'\n },\n controller: function() {\n this.setHeading = function(element) {\n this.heading = element;\n };\n },\n link: function(scope, element, attrs, accordionCtrl) {\n element.addClass('panel');\n accordionCtrl.addGroup(scope);\n\n scope.openClass = attrs.openClass || 'panel-open';\n scope.panelClass = attrs.panelClass || 'panel-default';\n scope.$watch('isOpen', function(value) {\n element.toggleClass(scope.openClass, !!value);\n if (value) {\n accordionCtrl.closeOthers(scope);\n }\n });\n\n scope.toggleOpen = function($event) {\n if (!scope.isDisabled) {\n if (!$event || $event.which === 32) {\n scope.isOpen = !scope.isOpen;\n }\n }\n };\n\n var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n scope.headingId = id + '-tab';\n scope.panelId = id + '-panel';\n }\n };\n})\n\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\n.directive('uibAccordionHeading', function() {\n return {\n transclude: true, // Grab the contents to be used as the heading\n template: '', // In effect remove this element!\n replace: true,\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, accordionGroupCtrl, transclude) {\n // Pass the heading to the accordion-group controller\n // so that it can be transcluded into the right place in the template\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\n accordionGroupCtrl.setHeading(transclude(scope, angular.noop));\n }\n };\n})\n\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\n// You must provide the property on the accordion-group controller that will hold the transcluded element\n.directive('uibAccordionTransclude', function() {\n return {\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, controller) {\n scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {\n if (heading) {\n var elem = angular.element(element[0].querySelector(getHeaderSelectors()));\n elem.html('');\n elem.append(heading);\n }\n });\n }\n };\n\n function getHeaderSelectors() {\n return 'uib-accordion-header,' +\n 'data-uib-accordion-header,' +\n 'x-uib-accordion-header,' +\n 'uib\\\\:accordion-header,' +\n '[uib-accordion-header],' +\n '[data-uib-accordion-header],' +\n '[x-uib-accordion-header]';\n }\n});\n\nangular.module('ui.bootstrap.alert', [])\n\n.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {\n $scope.closeable = !!$attrs.close;\n $element.addClass('alert');\n $attrs.$set('role', 'alert');\n if ($scope.closeable) {\n $element.addClass('alert-dismissible');\n }\n\n var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?\n $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;\n\n if (dismissOnTimeout) {\n $timeout(function() {\n $scope.close();\n }, parseInt(dismissOnTimeout, 10));\n }\n}])\n\n.directive('uibAlert', function() {\n return {\n controller: 'UibAlertController',\n controllerAs: 'alert',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/alert/alert.html';\n },\n transclude: true,\n scope: {\n close: '&'\n }\n };\n});\n\nangular.module('ui.bootstrap.buttons', [])\n\n.constant('uibButtonConfig', {\n activeClass: 'active',\n toggleEvent: 'click'\n})\n\n.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {\n this.activeClass = buttonConfig.activeClass || 'active';\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\n}])\n\n.directive('uibBtnRadio', ['$parse', function($parse) {\n return {\n require: ['uibBtnRadio', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'buttons',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n var uncheckableExpr = $parse(attrs.uibUncheckable);\n\n element.find('input').css({display: 'none'});\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n var isActive = element.hasClass(buttonsCtrl.activeClass);\n\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));\n ngModelCtrl.$render();\n });\n }\n });\n\n if (attrs.uibUncheckable) {\n scope.$watch(uncheckableExpr, function(uncheckable) {\n attrs.$set('uncheckable', uncheckable ? '' : undefined);\n });\n }\n }\n };\n}])\n\n.directive('uibBtnCheckbox', function() {\n return {\n require: ['uibBtnCheckbox', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'button',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n element.find('input').css({display: 'none'});\n\n function getTrueValue() {\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\n }\n\n function getFalseValue() {\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\n }\n\n function getCheckboxValue(attribute, defaultValue) {\n return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;\n }\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\n ngModelCtrl.$render();\n });\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.carousel', [])\n\n.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {\n var self = this,\n slides = self.slides = $scope.slides = [],\n SLIDE_DIRECTION = 'uib-slideDirection',\n currentIndex = $scope.active,\n currentInterval, isPlaying;\n\n var destroyed = false;\n $element.addClass('carousel');\n\n self.addSlide = function(slide, element) {\n slides.push({\n slide: slide,\n element: element\n });\n slides.sort(function(a, b) {\n return +a.slide.index - +b.slide.index;\n });\n //if this is the first slide or the slide is set to active, select it\n if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {\n if ($scope.$currentTransition) {\n $scope.$currentTransition = null;\n }\n\n currentIndex = slide.index;\n $scope.active = slide.index;\n setActive(currentIndex);\n self.select(slides[findSlideIndex(slide)]);\n if (slides.length === 1) {\n $scope.play();\n }\n }\n };\n\n self.getCurrentIndex = function() {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === currentIndex) {\n return i;\n }\n }\n };\n\n self.next = $scope.next = function() {\n var newIndex = (self.getCurrentIndex() + 1) % slides.length;\n\n if (newIndex === 0 && $scope.noWrap()) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'next');\n };\n\n self.prev = $scope.prev = function() {\n var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;\n\n if ($scope.noWrap() && newIndex === slides.length - 1) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'prev');\n };\n\n self.removeSlide = function(slide) {\n var index = findSlideIndex(slide);\n\n //get the index of the slide inside the carousel\n slides.splice(index, 1);\n if (slides.length > 0 && currentIndex === index) {\n if (index >= slides.length) {\n currentIndex = slides.length - 1;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[slides.length - 1]);\n } else {\n currentIndex = index;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[index]);\n }\n } else if (currentIndex > index) {\n currentIndex--;\n $scope.active = currentIndex;\n }\n\n //clean the active value when no more slide\n if (slides.length === 0) {\n currentIndex = null;\n $scope.active = null;\n }\n };\n\n /* direction: \"prev\" or \"next\" */\n self.select = $scope.select = function(nextSlide, direction) {\n var nextIndex = findSlideIndex(nextSlide.slide);\n //Decide direction if it's not given\n if (direction === undefined) {\n direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';\n }\n //Prevent this user-triggered transition from occurring if there is already one in progress\n if (nextSlide.slide.index !== currentIndex &&\n !$scope.$currentTransition) {\n goNext(nextSlide.slide, nextIndex, direction);\n }\n };\n\n /* Allow outside people to call indexOf on slides array */\n $scope.indexOfSlide = function(slide) {\n return +slide.slide.index;\n };\n\n $scope.isActive = function(slide) {\n return $scope.active === slide.slide.index;\n };\n\n $scope.isPrevDisabled = function() {\n return $scope.active === 0 && $scope.noWrap();\n };\n\n $scope.isNextDisabled = function() {\n return $scope.active === slides.length - 1 && $scope.noWrap();\n };\n\n $scope.pause = function() {\n if (!$scope.noPause) {\n isPlaying = false;\n resetTimer();\n }\n };\n\n $scope.play = function() {\n if (!isPlaying) {\n isPlaying = true;\n restartTimer();\n }\n };\n\n $element.on('mouseenter', $scope.pause);\n $element.on('mouseleave', $scope.play);\n\n $scope.$on('$destroy', function() {\n destroyed = true;\n resetTimer();\n });\n\n $scope.$watch('noTransition', function(noTransition) {\n $animate.enabled($element, !noTransition);\n });\n\n $scope.$watch('interval', restartTimer);\n\n $scope.$watchCollection('slides', resetTransition);\n\n $scope.$watch('active', function(index) {\n if (angular.isNumber(index) && currentIndex !== index) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === index) {\n index = i;\n break;\n }\n }\n\n var slide = slides[index];\n if (slide) {\n setActive(index);\n self.select(slides[index]);\n currentIndex = index;\n }\n }\n });\n\n function getSlideByIndex(index) {\n for (var i = 0, l = slides.length; i < l; ++i) {\n if (slides[i].index === index) {\n return slides[i];\n }\n }\n }\n\n function setActive(index) {\n for (var i = 0; i < slides.length; i++) {\n slides[i].slide.active = i === index;\n }\n }\n\n function goNext(slide, index, direction) {\n if (destroyed) {\n return;\n }\n\n angular.extend(slide, {direction: direction});\n angular.extend(slides[currentIndex].slide || {}, {direction: direction});\n if ($animate.enabled($element) && !$scope.$currentTransition &&\n slides[index].element && self.slides.length > 1) {\n slides[index].element.data(SLIDE_DIRECTION, slide.direction);\n var currentIdx = self.getCurrentIndex();\n\n if (angular.isNumber(currentIdx) && slides[currentIdx].element) {\n slides[currentIdx].element.data(SLIDE_DIRECTION, slide.direction);\n }\n\n $scope.$currentTransition = true;\n $animate.on('addClass', slides[index].element, function(element, phase) {\n if (phase === 'close') {\n $scope.$currentTransition = null;\n $animate.off('addClass', element);\n }\n });\n }\n\n $scope.active = slide.index;\n currentIndex = slide.index;\n setActive(index);\n\n //every time you change slides, reset the timer\n restartTimer();\n }\n\n function findSlideIndex(slide) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide === slide) {\n return i;\n }\n }\n }\n\n function resetTimer() {\n if (currentInterval) {\n $interval.cancel(currentInterval);\n currentInterval = null;\n }\n }\n\n function resetTransition(slides) {\n if (!slides.length) {\n $scope.$currentTransition = null;\n }\n }\n\n function restartTimer() {\n resetTimer();\n var interval = +$scope.interval;\n if (!isNaN(interval) && interval > 0) {\n currentInterval = $interval(timerFn, interval);\n }\n }\n\n function timerFn() {\n var interval = +$scope.interval;\n if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {\n $scope.next();\n } else {\n $scope.pause();\n }\n }\n}])\n\n.directive('uibCarousel', function() {\n return {\n transclude: true,\n controller: 'UibCarouselController',\n controllerAs: 'carousel',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/carousel.html';\n },\n scope: {\n active: '=',\n interval: '=',\n noTransition: '=',\n noPause: '=',\n noWrap: '&'\n }\n };\n})\n\n.directive('uibSlide', ['$animate', function($animate) {\n return {\n require: '^uibCarousel',\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/slide.html';\n },\n scope: {\n actual: '=?',\n index: '=?'\n },\n link: function (scope, element, attrs, carouselCtrl) {\n element.addClass('item');\n carouselCtrl.addSlide(scope, element);\n //when the scope is destroyed then remove the slide from the current slides array\n scope.$on('$destroy', function() {\n carouselCtrl.removeSlide(scope);\n });\n\n scope.$watch('active', function(active) {\n $animate[active ? 'addClass' : 'removeClass'](element, 'active');\n });\n }\n };\n}])\n\n.animation('.item', ['$animateCss',\nfunction($animateCss) {\n var SLIDE_DIRECTION = 'uib-slideDirection';\n\n function removeClass(element, className, callback) {\n element.removeClass(className);\n if (callback) {\n callback();\n }\n }\n\n return {\n beforeAddClass: function(element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element,\n directionClass + ' ' + direction, done);\n element.addClass(direction);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n },\n beforeRemoveClass: function (element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element, directionClass, done);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n }\n };\n}]);\n\nangular.module('ui.bootstrap.dateparser', [])\n\n.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', 'filterFilter', function($log, $locale, dateFilter, orderByFilter, filterFilter) {\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n var localeId;\n var formatCodeToRegex;\n\n this.init = function() {\n localeId = $locale.id;\n\n this.parsers = {};\n this.formatters = {};\n\n formatCodeToRegex = [\n {\n key: 'yyyy',\n regex: '\\\\d{4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yyyy');\n }\n },\n {\n key: 'yy',\n regex: '\\\\d{2}',\n apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yy');\n }\n },\n {\n key: 'y',\n regex: '\\\\d{1,4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'y');\n }\n },\n {\n key: 'M!',\n regex: '0?[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) {\n var value = date.getMonth();\n if (/^[0-9]$/.test(value)) {\n return dateFilter(date, 'MM');\n }\n\n return dateFilter(date, 'M');\n }\n },\n {\n key: 'MMMM',\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMMM'); }\n },\n {\n key: 'MMM',\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMM'); }\n },\n {\n key: 'MM',\n regex: '0[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'MM'); }\n },\n {\n key: 'M',\n regex: '[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'M'); }\n },\n {\n key: 'd!',\n regex: '[0-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) {\n var value = date.getDate();\n if (/^[1-9]$/.test(value)) {\n return dateFilter(date, 'dd');\n }\n\n return dateFilter(date, 'd');\n }\n },\n {\n key: 'dd',\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'dd'); }\n },\n {\n key: 'd',\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'd'); }\n },\n {\n key: 'EEEE',\n regex: $locale.DATETIME_FORMATS.DAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEEE'); }\n },\n {\n key: 'EEE',\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEE'); }\n },\n {\n key: 'HH',\n regex: '(?:0|1)[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'HH'); }\n },\n {\n key: 'hh',\n regex: '0[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'hh'); }\n },\n {\n key: 'H',\n regex: '1?[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'H'); }\n },\n {\n key: 'h',\n regex: '[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'h'); }\n },\n {\n key: 'mm',\n regex: '[0-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'mm'); }\n },\n {\n key: 'm',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'm'); }\n },\n {\n key: 'sss',\n regex: '[0-9][0-9][0-9]',\n apply: function(value) { this.milliseconds = +value; },\n formatter: function(date) { return dateFilter(date, 'sss'); }\n },\n {\n key: 'ss',\n regex: '[0-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 'ss'); }\n },\n {\n key: 's',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 's'); }\n },\n {\n key: 'a',\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\n apply: function(value) {\n if (this.hours === 12) {\n this.hours = 0;\n }\n\n if (value === 'PM') {\n this.hours += 12;\n }\n },\n formatter: function(date) { return dateFilter(date, 'a'); }\n },\n {\n key: 'Z',\n regex: '[+-]\\\\d{4}',\n apply: function(value) {\n var matches = value.match(/([+-])(\\d{2})(\\d{2})/),\n sign = matches[1],\n hours = matches[2],\n minutes = matches[3];\n this.hours += toInt(sign + hours);\n this.minutes += toInt(sign + minutes);\n },\n formatter: function(date) {\n return dateFilter(date, 'Z');\n }\n },\n {\n key: 'ww',\n regex: '[0-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'ww'); }\n },\n {\n key: 'w',\n regex: '[0-9]|[1-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'w'); }\n },\n {\n key: 'GGGG',\n regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\\s/g, '\\\\s'),\n formatter: function(date) { return dateFilter(date, 'GGGG'); }\n },\n {\n key: 'GGG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GGG'); }\n },\n {\n key: 'GG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GG'); }\n },\n {\n key: 'G',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'G'); }\n }\n ];\n\n if (angular.version.major >= 1 && angular.version.minor > 4) {\n formatCodeToRegex.push({\n key: 'LLLL',\n regex: $locale.DATETIME_FORMATS.STANDALONEMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.STANDALONEMONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'LLLL'); }\n });\n }\n };\n\n this.init();\n\n function getFormatCodeToRegex(key) {\n return filterFilter(formatCodeToRegex, {key: key}, true)[0];\n }\n\n this.getParser = function (key) {\n var f = getFormatCodeToRegex(key);\n return f && f.apply || null;\n };\n\n this.overrideParser = function (key, parser) {\n var f = getFormatCodeToRegex(key);\n if (f && angular.isFunction(parser)) {\n this.parsers = {};\n f.apply = parser;\n }\n }.bind(this);\n\n function createParser(format) {\n var map = [], regex = format.split('');\n\n // check for literal values\n var quoteIndex = format.indexOf('\\'');\n if (quoteIndex > -1) {\n var inLiteral = false;\n format = format.split('');\n for (var i = quoteIndex; i < format.length; i++) {\n if (inLiteral) {\n if (format[i] === '\\'') {\n if (i + 1 < format.length && format[i+1] === '\\'') { // escaped single quote\n format[i+1] = '$';\n regex[i+1] = '';\n } else { // end of literal\n regex[i] = '';\n inLiteral = false;\n }\n }\n format[i] = '$';\n } else {\n if (format[i] === '\\'') { // start of literal\n format[i] = '$';\n regex[i] = '';\n inLiteral = true;\n }\n }\n }\n\n format = format.join('');\n }\n\n angular.forEach(formatCodeToRegex, function(data) {\n var index = format.indexOf(data.key);\n\n if (index > -1) {\n format = format.split('');\n\n regex[index] = '(' + data.regex + ')';\n format[index] = '$'; // Custom symbol to define consumed part of format\n for (var i = index + 1, n = index + data.key.length; i < n; i++) {\n regex[i] = '';\n format[i] = '$';\n }\n format = format.join('');\n\n map.push({\n index: index,\n key: data.key,\n apply: data.apply,\n matcher: data.regex\n });\n }\n });\n\n return {\n regex: new RegExp('^' + regex.join('') + '$'),\n map: orderByFilter(map, 'index')\n };\n }\n\n function createFormatter(format) {\n var formatters = [];\n var i = 0;\n var formatter, literalIdx;\n while (i < format.length) {\n if (angular.isNumber(literalIdx)) {\n if (format.charAt(i) === '\\'') {\n if (i + 1 >= format.length || format.charAt(i + 1) !== '\\'') {\n formatters.push(constructLiteralFormatter(format, literalIdx, i));\n literalIdx = null;\n }\n } else if (i === format.length) {\n while (literalIdx < format.length) {\n formatter = constructFormatterFromIdx(format, literalIdx);\n formatters.push(formatter);\n literalIdx = formatter.endIdx;\n }\n }\n\n i++;\n continue;\n }\n\n if (format.charAt(i) === '\\'') {\n literalIdx = i;\n i++;\n continue;\n }\n\n formatter = constructFormatterFromIdx(format, i);\n\n formatters.push(formatter.parser);\n i = formatter.endIdx;\n }\n\n return formatters;\n }\n\n function constructLiteralFormatter(format, literalIdx, endIdx) {\n return function() {\n return format.substr(literalIdx + 1, endIdx - literalIdx - 1);\n };\n }\n\n function constructFormatterFromIdx(format, i) {\n var currentPosStr = format.substr(i);\n for (var j = 0; j < formatCodeToRegex.length; j++) {\n if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {\n var data = formatCodeToRegex[j];\n return {\n endIdx: i + data.key.length,\n parser: data.formatter\n };\n }\n }\n\n return {\n endIdx: i + 1,\n parser: function() {\n return currentPosStr.charAt(0);\n }\n };\n }\n\n this.filter = function(date, format) {\n if (!angular.isDate(date) || isNaN(date) || !format) {\n return '';\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.formatters[format]) {\n this.formatters[format] = createFormatter(format);\n }\n\n var formatters = this.formatters[format];\n\n return formatters.reduce(function(str, formatter) {\n return str + formatter(date);\n }, '');\n };\n\n this.parse = function(input, format, baseDate) {\n if (!angular.isString(input) || !format) {\n return input;\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.parsers[format]) {\n this.parsers[format] = createParser(format, 'apply');\n }\n\n var parser = this.parsers[format],\n regex = parser.regex,\n map = parser.map,\n results = input.match(regex),\n tzOffset = false;\n if (results && results.length) {\n var fields, dt;\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\n fields = {\n year: baseDate.getFullYear(),\n month: baseDate.getMonth(),\n date: baseDate.getDate(),\n hours: baseDate.getHours(),\n minutes: baseDate.getMinutes(),\n seconds: baseDate.getSeconds(),\n milliseconds: baseDate.getMilliseconds()\n };\n } else {\n if (baseDate) {\n $log.warn('dateparser:', 'baseDate is not a valid date');\n }\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\n }\n\n for (var i = 1, n = results.length; i < n; i++) {\n var mapper = map[i - 1];\n if (mapper.matcher === 'Z') {\n tzOffset = true;\n }\n\n if (mapper.apply) {\n mapper.apply.call(fields, results[i]);\n }\n }\n\n var datesetter = tzOffset ? Date.prototype.setUTCFullYear :\n Date.prototype.setFullYear;\n var timesetter = tzOffset ? Date.prototype.setUTCHours :\n Date.prototype.setHours;\n\n if (isValid(fields.year, fields.month, fields.date)) {\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {\n dt = new Date(baseDate);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours, fields.minutes,\n fields.seconds, fields.milliseconds);\n } else {\n dt = new Date(0);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours || 0, fields.minutes || 0,\n fields.seconds || 0, fields.milliseconds || 0);\n }\n }\n\n return dt;\n }\n };\n\n // Check if date is valid for specific month (and year for February).\n // Month: 0 = Jan, 1 = Feb, etc\n function isValid(year, month, date) {\n if (date < 1) {\n return false;\n }\n\n if (month === 1 && date > 28) {\n return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\n }\n\n if (month === 3 || month === 5 || month === 8 || month === 10) {\n return date < 31;\n }\n\n return true;\n }\n\n function toInt(str) {\n return parseInt(str, 10);\n }\n\n this.toTimezone = toTimezone;\n this.fromTimezone = fromTimezone;\n this.timezoneToOffset = timezoneToOffset;\n this.addDateMinutes = addDateMinutes;\n this.convertTimezoneToLocal = convertTimezoneToLocal;\n\n function toTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone) : date;\n }\n\n function fromTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;\n }\n\n //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207\n function timezoneToOffset(timezone, fallback) {\n timezone = timezone.replace(/:/g, '');\n var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n }\n\n function addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n }\n\n function convertTimezoneToLocal(date, timezone, reverse) {\n reverse = reverse ? -1 : 1;\n var dateTimezoneOffset = date.getTimezoneOffset();\n var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\n }\n}]);\n\n// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to\n// at most one element.\nangular.module('ui.bootstrap.isClass', [])\n.directive('uibIsClass', [\n '$animate',\nfunction ($animate) {\n // 11111111 22222222\n var ON_REGEXP = /^\\s*([\\s\\S]+?)\\s+on\\s+([\\s\\S]+?)\\s*$/;\n // 11111111 22222222\n var IS_REGEXP = /^\\s*([\\s\\S]+?)\\s+for\\s+([\\s\\S]+?)\\s*$/;\n\n var dataPerTracked = {};\n\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n var linkedScopes = [];\n var instances = [];\n var expToData = {};\n var lastActivated = null;\n var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);\n var onExp = onExpMatches[2];\n var expsStr = onExpMatches[1];\n var exps = expsStr.split(',');\n\n return linkFn;\n\n function linkFn(scope, element, attrs) {\n linkedScopes.push(scope);\n instances.push({\n scope: scope,\n element: element\n });\n\n exps.forEach(function(exp, k) {\n addForExp(exp, scope);\n });\n\n scope.$on('$destroy', removeScope);\n }\n\n function addForExp(exp, scope) {\n var matches = exp.match(IS_REGEXP);\n var clazz = scope.$eval(matches[1]);\n var compareWithExp = matches[2];\n var data = expToData[exp];\n if (!data) {\n var watchFn = function(compareWithVal) {\n var newActivated = null;\n instances.some(function(instance) {\n var thisVal = instance.scope.$eval(onExp);\n if (thisVal === compareWithVal) {\n newActivated = instance;\n return true;\n }\n });\n if (data.lastActivated !== newActivated) {\n if (data.lastActivated) {\n $animate.removeClass(data.lastActivated.element, clazz);\n }\n if (newActivated) {\n $animate.addClass(newActivated.element, clazz);\n }\n data.lastActivated = newActivated;\n }\n };\n expToData[exp] = data = {\n lastActivated: null,\n scope: scope,\n watchFn: watchFn,\n compareWithExp: compareWithExp,\n watcher: scope.$watch(compareWithExp, watchFn)\n };\n }\n data.watchFn(scope.$eval(compareWithExp));\n }\n\n function removeScope(e) {\n var removedScope = e.targetScope;\n var index = linkedScopes.indexOf(removedScope);\n linkedScopes.splice(index, 1);\n instances.splice(index, 1);\n if (linkedScopes.length) {\n var newWatchScope = linkedScopes[0];\n angular.forEach(expToData, function(data) {\n if (data.scope === removedScope) {\n data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);\n data.scope = newWatchScope;\n }\n });\n } else {\n expToData = {};\n }\n }\n }\n };\n}]);\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])\n\n.value('$datepickerSuppressError', false)\n\n.value('$datepickerLiteralWarning', true)\n\n.constant('uibDatepickerConfig', {\n datepickerMode: 'day',\n formatDay: 'dd',\n formatMonth: 'MMMM',\n formatYear: 'yyyy',\n formatDayHeader: 'EEE',\n formatDayTitle: 'MMMM yyyy',\n formatMonthTitle: 'yyyy',\n maxDate: null,\n maxMode: 'year',\n minDate: null,\n minMode: 'day',\n monthColumns: 3,\n ngModelOptions: {},\n shortcutPropagation: false,\n showWeeks: true,\n yearColumns: 5,\n yearRows: 4\n})\n\n.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',\n function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;\n ngModelOptions = {},\n watchListeners = [];\n\n $element.addClass('uib-datepicker');\n $attrs.$set('role', 'application');\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n // Modes chain\n this.modes = ['day', 'month', 'year'];\n\n [\n 'customClass',\n 'dateDisabled',\n 'datepickerMode',\n 'formatDay',\n 'formatDayHeader',\n 'formatDayTitle',\n 'formatMonth',\n 'formatMonthTitle',\n 'formatYear',\n 'maxDate',\n 'maxMode',\n 'minDate',\n 'minMode',\n 'monthColumns',\n 'showWeeks',\n 'shortcutPropagation',\n 'startingDay',\n 'yearColumns',\n 'yearRows'\n ].forEach(function(key) {\n switch (key) {\n case 'customClass':\n case 'dateDisabled':\n $scope[key] = $scope.datepickerOptions[key] || angular.noop;\n break;\n case 'datepickerMode':\n $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?\n $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;\n break;\n case 'formatDay':\n case 'formatDayHeader':\n case 'formatDayTitle':\n case 'formatMonth':\n case 'formatMonthTitle':\n case 'formatYear':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $interpolate($scope.datepickerOptions[key])($scope.$parent) :\n datepickerConfig[key];\n break;\n case 'monthColumns':\n case 'showWeeks':\n case 'shortcutPropagation':\n case 'yearColumns':\n case 'yearRows':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $scope.datepickerOptions[key] : datepickerConfig[key];\n break;\n case 'startingDay':\n if (angular.isDefined($scope.datepickerOptions.startingDay)) {\n self.startingDay = $scope.datepickerOptions.startingDay;\n } else if (angular.isNumber(datepickerConfig.startingDay)) {\n self.startingDay = datepickerConfig.startingDay;\n } else {\n self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;\n }\n\n break;\n case 'maxDate':\n case 'minDate':\n $scope.$watch('datepickerOptions.' + key, function(value) {\n if (value) {\n if (angular.isDate(value)) {\n self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.getOption('timezone'));\n } else {\n if ($datepickerLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n self[key] = new Date(dateFilter(value, 'medium'));\n }\n } else {\n self[key] = datepickerConfig[key] ?\n dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.getOption('timezone')) :\n null;\n }\n\n self.refreshView();\n });\n\n break;\n case 'maxMode':\n case 'minMode':\n if ($scope.datepickerOptions[key]) {\n $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {\n self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];\n if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||\n key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {\n $scope.datepickerMode = self[key];\n $scope.datepickerOptions.datepickerMode = self[key];\n }\n });\n } else {\n self[key] = $scope[key] = datepickerConfig[key] || null;\n }\n\n break;\n }\n });\n\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if (angular.isDefined($attrs.ngDisabled)) {\n watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {\n $scope.disabled = disabled;\n self.refreshView();\n }));\n }\n\n $scope.isActive = function(dateObject) {\n if (self.compare(dateObject.date, self.activeDate) === 0) {\n $scope.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n };\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelOptions = extractOptions(ngModelCtrl);\n\n if ($scope.datepickerOptions.initDate) {\n self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.getOption('timezone')) || new Date();\n $scope.$watch('datepickerOptions.initDate', function(initDate) {\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\n self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.getOption('timezone'));\n self.refreshView();\n }\n });\n } else {\n self.activeDate = new Date();\n }\n\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();\n this.activeDate = !isNaN(date) ?\n dateParser.fromTimezone(date, ngModelOptions.getOption('timezone')) :\n dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n };\n\n this.render = function() {\n if (ngModelCtrl.$viewValue) {\n var date = new Date(ngModelCtrl.$viewValue),\n isValid = !isNaN(date);\n\n if (isValid) {\n this.activeDate = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\n } else if (!$datepickerSuppressError) {\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object');\n }\n }\n this.refreshView();\n };\n\n this.refreshView = function() {\n if (this.element) {\n $scope.selectedDt = null;\n this._refreshView();\n if ($scope.activeDt) {\n $scope.activeDateId = $scope.activeDt.uid;\n }\n\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n date = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\n ngModelCtrl.$setValidity('dateDisabled', !date ||\n this.element && !this.isDisabled(date));\n }\n };\n\n this.createDateObject = function(date, format) {\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n model = dateParser.fromTimezone(model, ngModelOptions.getOption('timezone'));\n var today = new Date();\n today = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\n var time = this.compare(date, today);\n var dt = {\n date: date,\n label: dateParser.filter(date, format),\n selected: model && this.compare(date, model) === 0,\n disabled: this.isDisabled(date),\n past: time < 0,\n current: time === 0,\n future: time > 0,\n customClass: this.customClass(date) || null\n };\n\n if (model && this.compare(date, model) === 0) {\n $scope.selectedDt = dt;\n }\n\n if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {\n $scope.activeDt = dt;\n }\n\n return dt;\n };\n\n this.isDisabled = function(date) {\n return $scope.disabled ||\n this.minDate && this.compare(date, this.minDate) < 0 ||\n this.maxDate && this.compare(date, this.maxDate) > 0 ||\n $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});\n };\n\n this.customClass = function(date) {\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\n };\n\n // Split array into smaller arrays\n this.split = function(arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n };\n\n $scope.select = function(date) {\n if ($scope.datepickerMode === self.minMode) {\n var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.getOption('timezone')) : new Date(0, 0, 0, 0, 0, 0, 0);\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n dt = dateParser.toTimezone(dt, ngModelOptions.getOption('timezone'));\n ngModelCtrl.$setViewValue(dt);\n ngModelCtrl.$render();\n } else {\n self.activeDate = date;\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);\n\n $scope.$emit('uib:datepicker.mode');\n }\n\n $scope.$broadcast('uib:datepicker.focus');\n };\n\n $scope.move = function(direction) {\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\n self.activeDate.setFullYear(year, month, 1);\n self.refreshView();\n };\n\n $scope.toggleMode = function(direction) {\n direction = direction || 1;\n\n if ($scope.datepickerMode === self.maxMode && direction === 1 ||\n $scope.datepickerMode === self.minMode && direction === -1) {\n return;\n }\n\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);\n\n $scope.$emit('uib:datepicker.mode');\n };\n\n // Key event mapper\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\n\n var focusElement = function() {\n self.element[0].focus();\n };\n\n // Listen for focus requests from popup directive\n $scope.$on('uib:datepicker.focus', focusElement);\n\n $scope.keydown = function(evt) {\n var key = $scope.keys[evt.which];\n\n if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {\n return;\n }\n\n evt.preventDefault();\n if (!self.shortcutPropagation) {\n evt.stopPropagation();\n }\n\n if (key === 'enter' || key === 'space') {\n if (self.isDisabled(self.activeDate)) {\n return; // do nothing\n }\n $scope.select(self.activeDate);\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\n $scope.toggleMode(key === 'up' ? 1 : -1);\n } else {\n self.handleKeyDown(key, evt);\n self.refreshView();\n }\n };\n\n $element.on('keydown', function(evt) {\n $scope.$apply(function() {\n $scope.keydown(evt);\n });\n });\n\n $scope.$on('$destroy', function() {\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n\n function setMode(mode) {\n $scope.datepickerMode = mode;\n $scope.datepickerOptions.datepickerMode = mode;\n }\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = ngModelCtrl.$options ||\n $scope.datepickerOptions.ngModelOptions ||\n datepickerConfig.ngModelOptions ||\n {};\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n // ng-model-options defaults timezone to null; don't let its precedence squash a non-null value\n var timezone = ngModelCtrl.$options.getOption('timezone') ||\n ($scope.datepickerOptions.ngModelOptions ? $scope.datepickerOptions.ngModelOptions.timezone : null) ||\n (datepickerConfig.ngModelOptions ? datepickerConfig.ngModelOptions.timezone : null);\n\n // values passed to createChild override existing values\n ngModelOptions = ngModelCtrl.$options // start with a ModelOptions instance\n .createChild(datepickerConfig.ngModelOptions) // lowest precedence\n .createChild($scope.datepickerOptions.ngModelOptions)\n .createChild(ngModelCtrl.$options) // highest precedence\n .createChild({timezone: timezone}); // to keep from squashing a non-null value\n }\n\n return ngModelOptions;\n }\n}])\n\n.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n this.step = { months: 1 };\n this.element = $element;\n function getDaysInMonth(year, month) {\n return month === 1 && year % 4 === 0 &&\n (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];\n }\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n scope.showWeeks = ctrl.showWeeks;\n ctrl.refreshView();\n };\n\n this.getDates = function(startDate, n) {\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\n while (i < n) {\n date = new Date(current);\n dates[i++] = date;\n current.setDate(current.getDate() + 1);\n }\n return dates;\n };\n\n this._refreshView = function() {\n var year = this.activeDate.getFullYear(),\n month = this.activeDate.getMonth(),\n firstDayOfMonth = new Date(this.activeDate);\n\n firstDayOfMonth.setFullYear(year, month, 1);\n\n var difference = this.startingDay - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth = difference > 0 ?\n 7 - difference : - difference,\n firstDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n var days = this.getDates(firstDate, 42);\n for (var i = 0; i < 42; i ++) {\n days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {\n secondary: days[i].getMonth() !== month,\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.labels = new Array(7);\n for (var j = 0; j < 7; j++) {\n scope.labels[j] = {\n abbr: dateFilter(days[j].date, this.formatDayHeader),\n full: dateFilter(days[j].date, 'EEEE')\n };\n }\n\n scope.title = dateFilter(this.activeDate, this.formatDayTitle);\n scope.rows = this.split(days, 7);\n\n if (scope.showWeeks) {\n scope.weekNumbers = [];\n var thursdayIndex = (4 + 7 - this.startingDay) % 7,\n numWeeks = scope.rows.length;\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\n scope.weekNumbers.push(\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\n }\n }\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n function getISO8601WeekNumber(date) {\n var checkDate = new Date(date);\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\n var time = checkDate.getTime();\n checkDate.setMonth(0); // Compare with Jan 1\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n }\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getDate();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - 7;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setMonth(month, 1);\n date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());\n }\n this.activeDate.setDate(date);\n };\n}])\n\n.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n this.step = { years: 1 };\n this.element = $element;\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n ctrl.refreshView();\n };\n\n this._refreshView = function() {\n var months = new Array(12),\n year = this.activeDate.getFullYear(),\n date;\n\n for (var i = 0; i < 12; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(year, i, 1);\n months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = dateFilter(this.activeDate, this.formatMonthTitle);\n scope.rows = this.split(months, this.monthColumns);\n scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getMonth();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - this.monthColumns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + this.monthColumns;\n } else if (key === 'pageup' || key === 'pagedown') {\n var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n this.activeDate.setMonth(date);\n };\n}])\n\n.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var columns, range;\n this.element = $element;\n\n function getStartingYear(year) {\n return parseInt((year - 1) / range, 10) * range + 1;\n }\n\n this.yearpickerInit = function() {\n columns = this.yearColumns;\n range = this.yearRows * columns;\n this.step = { years: range };\n };\n\n this._refreshView = function() {\n var years = new Array(range), date;\n\n for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(start + i, 0, 1);\n years[i] = angular.extend(this.createDateObject(date, this.formatYear), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\n scope.rows = this.split(years, columns);\n scope.columns = columns;\n };\n\n this.compare = function(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getFullYear();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - columns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + columns;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? - 1 : 1) * range;\n } else if (key === 'home') {\n date = getStartingYear(this.activeDate.getFullYear());\n } else if (key === 'end') {\n date = getStartingYear(this.activeDate.getFullYear()) + range - 1;\n }\n this.activeDate.setFullYear(date);\n };\n}])\n\n.directive('uibDatepicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';\n },\n scope: {\n datepickerOptions: '=?'\n },\n require: ['uibDatepicker', '^ngModel'],\n restrict: 'A',\n controller: 'UibDatepickerController',\n controllerAs: 'datepicker',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n datepickerCtrl.init(ngModelCtrl);\n }\n };\n})\n\n.directive('uibDaypicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/day.html';\n },\n require: ['^uibDatepicker', 'uibDaypicker'],\n restrict: 'A',\n controller: 'UibDaypickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n daypickerCtrl = ctrls[1];\n\n daypickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibMonthpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/month.html';\n },\n require: ['^uibDatepicker', 'uibMonthpicker'],\n restrict: 'A',\n controller: 'UibMonthpickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n monthpickerCtrl = ctrls[1];\n\n monthpickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibYearpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/year.html';\n },\n require: ['^uibDatepicker', 'uibYearpicker'],\n restrict: 'A',\n controller: 'UibYearpickerController',\n link: function(scope, element, attrs, ctrls) {\n var ctrl = ctrls[0];\n angular.extend(ctrl, ctrls[1]);\n ctrl.yearpickerInit();\n\n ctrl.refreshView();\n }\n };\n});\n\nangular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods for working with the DOM.\n * It is meant to be used where we need to absolute-position elements in\n * relation to another element (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\n /**\n * Used by scrollbarWidth() function to cache scrollbar's width.\n * Do not access this variable directly, use scrollbarWidth() instead.\n */\n var SCROLLBAR_WIDTH;\n /**\n * scrollbar on body and html element in IE and Edge overlay\n * content and should be considered 0 width.\n */\n var BODY_SCROLLBAR_WIDTH;\n var OVERFLOW_REGEX = {\n normal: /(auto|scroll)/,\n hidden: /(auto|scroll|hidden)/\n };\n var PLACEMENT_REGEX = {\n auto: /\\s?auto?\\s?/i,\n primary: /^(top|bottom|left|right)$/,\n secondary: /^(top|bottom|left|right|center)$/,\n vertical: /^(top|bottom)$/\n };\n var BODY_REGEX = /(HTML|BODY)/;\n\n return {\n\n /**\n * Provides a raw DOM element from a jQuery/jQLite element.\n *\n * @param {element} elem - The element to convert.\n *\n * @returns {element} A HTML element.\n */\n getRawNode: function(elem) {\n return elem.nodeName ? elem : elem[0] || elem;\n },\n\n /**\n * Provides a parsed number for a style property. Strips\n * units and casts invalid numbers to 0.\n *\n * @param {string} value - The style value to parse.\n *\n * @returns {number} A valid number.\n */\n parseStyle: function(value) {\n value = parseFloat(value);\n return isFinite(value) ? value : 0;\n },\n\n /**\n * Provides the closest positioned ancestor.\n *\n * @param {element} element - The element to get the offest parent for.\n *\n * @returns {element} The closest positioned ancestor.\n */\n offsetParent: function(elem) {\n elem = this.getRawNode(elem);\n\n var offsetParent = elem.offsetParent || $document[0].documentElement;\n\n function isStaticPositioned(el) {\n return ($window.getComputedStyle(el).position || 'static') === 'static';\n }\n\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || $document[0].documentElement;\n },\n\n /**\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\n * In IE and Edge, scollbar on body and html element overlay and should\n * return a width of 0.\n *\n * @returns {number} The width of the browser scollbar.\n */\n scrollbarWidth: function(isBody) {\n if (isBody) {\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\n var bodyElem = $document.find('body');\n bodyElem.addClass('uib-position-body-scrollbar-measure');\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\n }\n return BODY_SCROLLBAR_WIDTH;\n }\n\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\n var scrollElem = angular.element('
');\n $document.find('body').append(scrollElem);\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\n scrollElem.remove();\n }\n\n return SCROLLBAR_WIDTH;\n },\n\n /**\n * Provides the padding required on an element to replace the scrollbar.\n *\n * @returns {object} An object with the following properties:\n * \n */\n scrollbarPadding: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemStyle = $window.getComputedStyle(elem);\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\n var scrollParent = this.scrollParent(elem, false, true);\n var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));\n\n return {\n scrollbarWidth: scrollbarWidth,\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\n right: paddingRight + scrollbarWidth,\n originalRight: paddingRight,\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\n bottom: paddingBottom + scrollbarWidth,\n originalBottom: paddingBottom\n };\n },\n\n /**\n * Checks to see if the element is scrollable.\n *\n * @param {element} elem - The element to check.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n *\n * @returns {boolean} Whether the element is scrollable.\n */\n isScrollable: function(elem, includeHidden) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var elemStyle = $window.getComputedStyle(elem);\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\n },\n\n /**\n * Provides the closest scrollable ancestor.\n * A port of the jQuery UI scrollParent method:\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\n *\n * @param {element} elem - The element to find the scroll parent of.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\n * included in the scrollable llokup.\n *\n * @returns {element} A HTML element.\n */\n scrollParent: function(elem, includeHidden, includeSelf) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var documentEl = $document[0].documentElement;\n var elemStyle = $window.getComputedStyle(elem);\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\n return elem;\n }\n var excludeStatic = elemStyle.position === 'absolute';\n var scrollParent = elem.parentElement || documentEl;\n\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\n return documentEl;\n }\n\n while (scrollParent.parentElement && scrollParent !== documentEl) {\n var spStyle = $window.getComputedStyle(scrollParent);\n if (excludeStatic && spStyle.position !== 'static') {\n excludeStatic = false;\n }\n\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\n break;\n }\n scrollParent = scrollParent.parentElement;\n }\n\n return scrollParent;\n },\n\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/ - distance to closest positioned\n * ancestor. Does not account for margins by default like jQuery position.\n *\n * @param {element} elem - The element to caclulate the position on.\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\n * for, default is false.\n *\n * @returns {object} An object with the following properties:\n * \n */\n position: function(elem, includeMagins) {\n elem = this.getRawNode(elem);\n\n var elemOffset = this.offset(elem);\n if (includeMagins) {\n var elemStyle = $window.getComputedStyle(elem);\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\n }\n var parent = this.offsetParent(elem);\n var parentOffset = {top: 0, left: 0};\n\n if (parent !== $document[0].documentElement) {\n parentOffset = this.offset(parent);\n parentOffset.top += parent.clientTop - parent.scrollTop;\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\n }\n\n return {\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\n top: Math.round(elemOffset.top - parentOffset.top),\n left: Math.round(elemOffset.left - parentOffset.left)\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/ - distance to viewport. Does\n * not account for borders, margins, or padding on the body\n * element.\n *\n * @param {element} elem - The element to calculate the offset on.\n *\n * @returns {object} An object with the following properties:\n * \n */\n offset: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemBCR = elem.getBoundingClientRect();\n return {\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\n };\n },\n\n /**\n * Provides offset distance to the closest scrollable ancestor\n * or viewport. Accounts for border and scrollbar width.\n *\n * Right and bottom dimensions represent the distance to the\n * respective edge of the viewport element. If the element\n * edge extends beyond the viewport, a negative value will be\n * reported.\n *\n * @param {element} elem - The element to get the viewport offset for.\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\n * of the first scrollable element, default is false.\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\n * be accounted for, default is true.\n *\n * @returns {object} An object with the following properties:\n * \n */\n viewportOffset: function(elem, useDocument, includePadding) {\n elem = this.getRawNode(elem);\n includePadding = includePadding !== false ? true : false;\n\n var elemBCR = elem.getBoundingClientRect();\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\n\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\n var offsetParentBCR = offsetParent.getBoundingClientRect();\n\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\n if (offsetParent === $document[0].documentElement) {\n offsetBCR.top += $window.pageYOffset;\n offsetBCR.left += $window.pageXOffset;\n }\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\n\n if (includePadding) {\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\n }\n\n return {\n top: Math.round(elemBCR.top - offsetBCR.top),\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\n left: Math.round(elemBCR.left - offsetBCR.left),\n right: Math.round(offsetBCR.right - elemBCR.right)\n };\n },\n\n /**\n * Provides an array of placement values parsed from a placement string.\n * Along with the 'auto' indicator, supported placement strings are:\n * \n * A placement string with an 'auto' indicator is expected to be\n * space separated from the placement, i.e: 'auto bottom-left' If\n * the primary and secondary placement values do not match 'top,\n * bottom, left, right' then 'top' will be the primary placement and\n * 'center' will be the secondary placement. If 'auto' is passed, true\n * will be returned as the 3rd value of the array.\n *\n * @param {string} placement - The placement string to parse.\n *\n * @returns {array} An array with the following values\n * \n */\n parsePlacement: function(placement) {\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\n if (autoPlace) {\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\n }\n\n placement = placement.split('-');\n\n placement[0] = placement[0] || 'top';\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\n placement[0] = 'top';\n }\n\n placement[1] = placement[1] || 'center';\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\n placement[1] = 'center';\n }\n\n if (autoPlace) {\n placement[2] = true;\n } else {\n placement[2] = false;\n }\n\n return placement;\n },\n\n /**\n * Provides coordinates for an element to be positioned relative to\n * another element. Passing 'auto' as part of the placement parameter\n * will enable smart placement - where the element fits. i.e:\n * 'auto left-top' will check to see if there is enough space to the left\n * of the hostElem to fit the targetElem, if not place right (same for secondary\n * top placement). Available space is calculated using the viewportOffset\n * function.\n *\n * @param {element} hostElem - The element to position against.\n * @param {element} targetElem - The element to position.\n * @param {string=} [placement=top] - The placement for the targetElem,\n * default is 'top'. 'center' is assumed as secondary placement for\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\n * \n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\n * be calculated from the body element, default is false.\n *\n * @returns {object} An object with the following properties:\n * \n */\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\n hostElem = this.getRawNode(hostElem);\n targetElem = this.getRawNode(targetElem);\n\n // need to read from prop to support tests.\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\n\n placement = this.parsePlacement(placement);\n\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\n var targetElemPos = {top: 0, left: 0, placement: ''};\n\n if (placement[2]) {\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\n\n var targetElemStyle = $window.getComputedStyle(targetElem);\n var adjustedSize = {\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\n };\n\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\n placement[0];\n\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\n placement[1];\n\n if (placement[1] === 'center') {\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\n placement[1] = 'left';\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\n placement[1] = 'right';\n }\n } else {\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\n placement[1] = 'top';\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\n placement[1] = 'bottom';\n }\n }\n }\n }\n\n switch (placement[0]) {\n case 'top':\n targetElemPos.top = hostElemPos.top - targetHeight;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left - targetWidth;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\n break;\n }\n\n switch (placement[1]) {\n case 'top':\n targetElemPos.top = hostElemPos.top;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\n break;\n case 'center':\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\n } else {\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\n }\n break;\n }\n\n targetElemPos.top = Math.round(targetElemPos.top);\n targetElemPos.left = Math.round(targetElemPos.left);\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\n\n return targetElemPos;\n },\n\n /**\n * Provides a way to adjust the top positioning after first\n * render to correctly align element to top after content\n * rendering causes resized element height\n *\n * @param {array} placementClasses - The array of strings of classes\n * element should have.\n * @param {object} containerPosition - The object with container\n * position information\n * @param {number} initialHeight - The initial height for the elem.\n * @param {number} currentHeight - The current height for the elem.\n */\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\n return {\n top: containerPosition.top - currentHeight + 'px'\n };\n }\n },\n\n /**\n * Provides a way for positioning tooltip & dropdown\n * arrows when using placement options beyond the standard\n * left, right, top, or bottom.\n *\n * @param {element} elem - The tooltip/dropdown element.\n * @param {string} placement - The placement for the elem.\n */\n positionArrow: function(elem, placement) {\n elem = this.getRawNode(elem);\n\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\n if (!innerElem) {\n return;\n }\n\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\n\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\n if (!arrowElem) {\n return;\n }\n\n var arrowCss = {\n top: '',\n bottom: '',\n left: '',\n right: ''\n };\n\n placement = this.parsePlacement(placement);\n if (placement[1] === 'center') {\n // no adjustment necessary - just reset styles\n angular.element(arrowElem).css(arrowCss);\n return;\n }\n\n var borderProp = 'border-' + placement[0] + '-width';\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\n\n var borderRadiusProp = 'border-';\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n borderRadiusProp += placement[0] + '-' + placement[1];\n } else {\n borderRadiusProp += placement[1] + '-' + placement[0];\n }\n borderRadiusProp += '-radius';\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\n\n switch (placement[0]) {\n case 'top':\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'bottom':\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'left':\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'right':\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\n break;\n }\n\n arrowCss[placement[1]] = borderRadius;\n\n angular.element(arrowElem).css(arrowCss);\n }\n };\n }]);\n\nangular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])\n\n.value('$datepickerPopupLiteralWarning', true)\n\n.constant('uibDatepickerPopupConfig', {\n altInputFormats: [],\n appendToBody: false,\n clearText: 'Clear',\n closeOnDateSelection: true,\n closeText: 'Done',\n currentText: 'Today',\n nowText: 'Now',\n datepickerPopup: 'yyyy-MM-dd',\n datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',\n datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',\n html5Types: {\n date: 'yyyy-MM-dd',\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\n 'month': 'yyyy-MM'\n },\n onOpenFocus: true,\n showButtonBar: true,\n placement: 'auto bottom-left',\n disabledNowButton: false,\n disabledClearButton: false,\n})\n\n.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',\nfunction($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {\n var cache = {},\n isHtml5DateInput = false;\n var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,\n datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,\n ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [], disabledNowButton, \n disabledClearButton;\n\n this.init = function(_ngModel_) {\n ngModel = _ngModel_;\n ngModelOptions = extractOptions(ngModel);\n closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?\n $scope.$parent.$eval($attrs.closeOnDateSelection) :\n datepickerPopupConfig.closeOnDateSelection;\n appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?\n $scope.$parent.$eval($attrs.datepickerAppendToBody) :\n datepickerPopupConfig.appendToBody;\n onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?\n $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;\n datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?\n $attrs.datepickerPopupTemplateUrl :\n datepickerPopupConfig.datepickerPopupTemplateUrl;\n datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?\n $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;\n altInputFormats = angular.isDefined($attrs.altInputFormats) ?\n $scope.$parent.$eval($attrs.altInputFormats) :\n datepickerPopupConfig.altInputFormats;\n\n $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?\n $scope.$parent.$eval($attrs.showButtonBar) :\n datepickerPopupConfig.showButtonBar;\n\n disabledNowButton=angular.isDefined($attrs.disabledNowButton) ?\n $scope.$parent.$eval($attrs.disabledNowButton):datepickerPopupConfig.disabledNowButton;\n \n if ($attrs.disabledNowButton) {\n watchListeners.push($scope.$parent.$watch($parse($attrs.disabledNowButton), function(disabled) {\n disabledNowButton = disabled;\n }));\n }\n\n disabledClearButton=angular.isDefined($attrs.disabledClearButton) ?\n $scope.$parent.$eval($attrs.disabledClearButton):datepickerPopupConfig.disabledClearButton;\n \n if (datepickerPopupConfig.html5Types[$attrs.type]) {\n dateFormat = datepickerPopupConfig.html5Types[$attrs.type];\n isHtml5DateInput = true;\n } else {\n dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;\n $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\n // Invalidate the $modelValue to ensure that formatters re-run\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\n if (newDateFormat !== dateFormat) {\n dateFormat = newDateFormat;\n ngModel.$modelValue = null;\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n }\n });\n }\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n\n if (isHtml5DateInput && $attrs.uibDatepickerPopup) {\n throw new Error('HTML5 date input types do not support custom formats.');\n }\n\n // popup element used to display calendar\n popupEl = angular.element('
');\n\n popupEl.attr({\n 'ng-model': 'date',\n 'ng-change': 'dateSelection(date)',\n 'template-url': datepickerPopupTemplateUrl\n });\n\n // datepicker element\n datepickerEl = angular.element(popupEl.children()[0]);\n datepickerEl.attr('template-url', datepickerTemplateUrl);\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n if (isHtml5DateInput) {\n if ($attrs.type === 'month') {\n $scope.datepickerOptions.datepickerMode = 'month';\n $scope.datepickerOptions.minMode = 'month';\n }\n }\n\n datepickerEl.attr('datepicker-options', 'datepickerOptions');\n\n if (!isHtml5DateInput) {\n // Internal API to maintain the correct ng-invalid-[key] class\n ngModel.$$parserName = 'date';\n ngModel.$validators.date = validator;\n ngModel.$parsers.unshift(parseDate);\n ngModel.$formatters.push(function(value) {\n if (ngModel.$isEmpty(value)) {\n $scope.date = value;\n return value;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\n\n return dateParser.filter($scope.date, dateFormat);\n });\n } else {\n ngModel.$formatters.push(function(value) {\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\n return value;\n });\n }\n\n // Detect changes in the view from the text box\n ngModel.$viewChangeListeners.push(function() {\n $scope.date = parseDateString(ngModel.$viewValue);\n });\n\n $element.on('keydown', inputKeydownBind);\n\n $popup = $compile(popupEl)($scope);\n // Prevent jQuery cache memory leak (template is now redundant after linking)\n popupEl.remove();\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else {\n $element.after($popup);\n }\n\n $scope.$on('$destroy', function() {\n if ($scope.isOpen === true) {\n if (!$rootScope.$$phase) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n $popup.remove();\n $element.off('keydown', inputKeydownBind);\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\n };\n\n $scope.isDisabled = function (date) {\n var now = new Date();\n if (date === 'today') {\n date = dateParser.fromTimezone(now);\n }\n if (date === 'now') {\n if (disabledNowButton){\n return true;\n }\n date = dateParser.fromTimezone(now);\n }\n\n if (date === 'clear'){\n return disabledClearButton;\n }\n \n var dates = {};\n angular.forEach(['minDate', 'maxDate'], function(key) {\n if (!$scope.datepickerOptions[key]) {\n dates[key] = null;\n } else if (angular.isDate($scope.datepickerOptions[key])) {\n dates[key] = new Date($scope.datepickerOptions[key]);\n } else {\n if ($datepickerPopupLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));\n }\n });\n\n return $scope.datepickerOptions &&\n dates.minDate && $scope.compare(date, dates.minDate) < 0 ||\n dates.maxDate && $scope.compare(date, dates.maxDate) > 0;\n };\n\n $scope.compare = function(date1, date2) {\n return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n };\n\n // Inner change\n $scope.dateSelection = function(dt) {\n $scope.date = dt;\n var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\n $element.val(date);\n ngModel.$setViewValue($scope.date);\n\n if (closeOnDateSelection) {\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.keydown = function(evt) {\n if (evt.which === 27) {\n evt.stopPropagation();\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.select = function(date, evt) {\n evt.stopPropagation();\n\n if (date === 'today') {\n var today = new Date();\n date = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\n date.setHours(0, 0, 0, 0); \n }\n\n if (date === 'now') {\n var now = new Date();\n date = dateParser.fromTimezone(now, ngModelOptions.getOption('timezone')); \n }\n\n $scope.dateSelection(date);\n };\n\n $scope.close = function(evt) {\n evt.stopPropagation();\n\n $scope.isOpen = false;\n $element[0].focus();\n };\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if ($attrs.ngDisabled) {\n watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {\n $scope.disabled = disabled;\n }));\n }\n\n $scope.$watch('isOpen', function(value) {\n if (value) {\n if (!$scope.disabled) {\n $timeout(function() {\n positionPopup();\n\n if (onOpenFocus) {\n $scope.$broadcast('uib:datepicker.focus');\n }\n\n $document.on('click', documentClickBind);\n\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n if (appendToBody || $position.parsePlacement(placement)[2]) {\n scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));\n if (scrollParentEl) {\n scrollParentEl.on('scroll', positionPopup);\n }\n } else {\n scrollParentEl = null;\n }\n\n angular.element($window).on('resize', positionPopup);\n }, 0, false);\n } else {\n $scope.isOpen = false;\n }\n } else {\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n }\n });\n\n function cameltoDash(string) {\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\n }\n\n function parseDateString(viewValue) {\n var date = dateParser.parse(viewValue, dateFormat, $scope.date);\n if (isNaN(date)) {\n for (var i = 0; i < altInputFormats.length; i++) {\n date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);\n if (!isNaN(date)) {\n return date;\n }\n }\n }\n return date;\n }\n\n function parseDate(viewValue) {\n if (angular.isNumber(viewValue)) {\n // presumably timestamp to date object\n viewValue = new Date(viewValue);\n }\n\n if (!viewValue) {\n return null;\n }\n\n if (angular.isDate(viewValue) && !isNaN(viewValue)) {\n return viewValue;\n }\n\n if (angular.isString(viewValue)) {\n var date = parseDateString(viewValue);\n if (!isNaN(date)) {\n return dateParser.toTimezone(date, ngModelOptions.getOption('timezone'));\n }\n }\n\n return ngModelOptions.getOption('allowInvalid') ? viewValue : undefined;\n }\n\n function validator(modelValue, viewValue) {\n var value = modelValue || viewValue;\n\n if (!$attrs.ngRequired && !value) {\n return true;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n if (!value) {\n return true;\n }\n\n if (angular.isDate(value) && !isNaN(value)) {\n return true;\n }\n\n if (angular.isString(value)) {\n return !isNaN(parseDateString(value));\n }\n\n return false;\n }\n\n function documentClickBind(event) {\n if (!$scope.isOpen && $scope.disabled) {\n return;\n }\n\n var popup = $popup[0];\n var dpContainsTarget = $element[0].contains(event.target);\n // The popup node may not be an element node\n // In some browsers (IE) only element nodes have the 'contains' function\n var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);\n if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n function inputKeydownBind(evt) {\n if (evt.which === 27 && $scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n $element[0].focus();\n } else if (evt.which === 40 && !$scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = true;\n });\n }\n }\n\n function positionPopup() {\n if ($scope.isOpen) {\n var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n var position = $position.positionElements($element, dpElement, placement, appendToBody);\n dpElement.css({top: position.top + 'px', left: position.left + 'px'});\n if (dpElement.hasClass('uib-position-measure')) {\n dpElement.removeClass('uib-position-measure');\n }\n }\n }\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = angular.isObject(ngModelCtrl.$options) ?\n ngModelCtrl.$options :\n {\n timezone: null\n };\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n ngModelOptions = ngModelCtrl.$options;\n }\n\n return ngModelOptions;\n }\n\n $scope.$on('uib:datepicker.mode', function() {\n $timeout(positionPopup, 0, false);\n });\n}])\n\n.directive('uibDatepickerPopup', function() {\n return {\n require: ['ngModel', 'uibDatepickerPopup'],\n controller: 'UibDatepickerPopupController',\n scope: {\n datepickerOptions: '=?',\n isOpen: '=?',\n currentText: '@',\n clearText: '@',\n closeText: '@',\n nowText: '@'\n },\n link: function(scope, element, attrs, ctrls) {\n var ngModel = ctrls[0],\n ctrl = ctrls[1];\n\n ctrl.init(ngModel);\n }\n };\n})\n\n.directive('uibDatepickerPopupWrap', function() {\n return {\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';\n }\n };\n});\n\nangular.module('ui.bootstrap.debounce', [])\n/**\n * A helper, internal service that debounces a function\n */\n .factory('$$debounce', ['$timeout', function($timeout) {\n return function(callback, debounceTime) {\n var timeoutPromise;\n\n return function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n\n timeoutPromise = $timeout(function() {\n callback.apply(self, args);\n }, debounceTime);\n };\n };\n }]);\n\nangular.module('ui.bootstrap.multiMap', [])\n/**\n * A helper, internal data structure that stores all references attached to key\n */\n .factory('$$multiMap', function() {\n return {\n createNew: function() {\n var map = {};\n\n return {\n entries: function() {\n return Object.keys(map).map(function(key) {\n return {\n key: key,\n value: map[key]\n };\n });\n },\n get: function(key) {\n return map[key];\n },\n hasKey: function(key) {\n return !!map[key];\n },\n keys: function() {\n return Object.keys(map);\n },\n put: function(key, value) {\n if (!map[key]) {\n map[key] = [];\n }\n\n map[key].push(value);\n },\n remove: function(key, value) {\n var values = map[key];\n\n if (!values) {\n return;\n }\n\n var idx = values.indexOf(value);\n\n if (idx !== -1) {\n values.splice(idx, 1);\n }\n\n if (!values.length) {\n delete map[key];\n }\n }\n };\n }\n };\n });\n\nangular.module('ui.bootstrap.dropdown', ['ui.bootstrap.multiMap', 'ui.bootstrap.position'])\n\n.constant('uibDropdownConfig', {\n appendToOpenClass: 'uib-dropdown-open',\n openClass: 'open'\n})\n\n.service('uibDropdownService', ['$document', '$rootScope', '$$multiMap', function($document, $rootScope, $$multiMap) {\n var openScope = null;\n var openedContainers = $$multiMap.createNew();\n\n this.isOnlyOpen = function(dropdownScope, appendTo) {\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var openDropdown = openedDropdowns.reduce(function(toClose, dropdown) {\n if (dropdown.scope === dropdownScope) {\n return dropdown;\n }\n\n return toClose;\n }, {});\n if (openDropdown) {\n return openedDropdowns.length === 1;\n }\n }\n\n return false;\n };\n\n this.open = function(dropdownScope, element, appendTo) {\n if (!openScope) {\n $document.on('click', closeDropdown);\n }\n\n if (openScope && openScope !== dropdownScope) {\n openScope.isOpen = false;\n }\n\n openScope = dropdownScope;\n\n if (!appendTo) {\n return;\n }\n\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var openedScopes = openedDropdowns.map(function(dropdown) {\n return dropdown.scope;\n });\n if (openedScopes.indexOf(dropdownScope) === -1) {\n openedContainers.put(appendTo, {\n scope: dropdownScope\n });\n }\n } else {\n openedContainers.put(appendTo, {\n scope: dropdownScope\n });\n }\n };\n\n this.close = function(dropdownScope, element, appendTo) {\n if (openScope === dropdownScope) {\n $document.off('click', closeDropdown);\n $document.off('keydown', this.keybindFilter);\n openScope = null;\n }\n\n if (!appendTo) {\n return;\n }\n\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var dropdownToClose = openedDropdowns.reduce(function(toClose, dropdown) {\n if (dropdown.scope === dropdownScope) {\n return dropdown;\n }\n\n return toClose;\n }, {});\n if (dropdownToClose) {\n openedContainers.remove(appendTo, dropdownToClose);\n }\n }\n };\n\n var closeDropdown = function(evt) {\n // This method may still be called during the same mouse event that\n // unbound this event handler. So check openScope before proceeding.\n if (!openScope || !openScope.isOpen) { return; }\n\n if (evt && openScope.getAutoClose() === 'disabled') { return; }\n\n if (evt && evt.which === 3) { return; }\n\n var toggleElement = openScope.getToggleElement();\n if (evt && toggleElement && toggleElement[0].contains(evt.target)) {\n return;\n }\n\n var dropdownElement = openScope.getDropdownElement();\n if (evt && openScope.getAutoClose() === 'outsideClick' &&\n dropdownElement && dropdownElement[0].contains(evt.target)) {\n return;\n }\n\n openScope.focusToggleElement();\n openScope.isOpen = false;\n\n if (!$rootScope.$$phase) {\n openScope.$apply();\n }\n };\n\n this.keybindFilter = function(evt) {\n if (!openScope) {\n // see this.close as ESC could have been pressed which kills the scope so we can not proceed\n return;\n }\n\n var dropdownElement = openScope.getDropdownElement();\n var toggleElement = openScope.getToggleElement();\n var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);\n var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);\n if (evt.which === 27) {\n evt.stopPropagation();\n openScope.focusToggleElement();\n closeDropdown();\n } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {\n evt.preventDefault();\n evt.stopPropagation();\n openScope.focusDropdownEntry(evt.which);\n }\n };\n}])\n\n.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {\n var self = this,\n scope = $scope.$new(), // create a child scope so we are not polluting original one\n templateScope,\n appendToOpenClass = dropdownConfig.appendToOpenClass,\n openClass = dropdownConfig.openClass,\n getIsOpen,\n setIsOpen = angular.noop,\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,\n keynavEnabled = false,\n selectedOption = null,\n body = $document.find('body');\n\n $element.addClass('dropdown');\n\n this.init = function() {\n if ($attrs.isOpen) {\n getIsOpen = $parse($attrs.isOpen);\n setIsOpen = getIsOpen.assign;\n\n $scope.$watch(getIsOpen, function(value) {\n scope.isOpen = !!value;\n });\n }\n\n keynavEnabled = angular.isDefined($attrs.keyboardNav);\n };\n\n this.toggle = function(open) {\n scope.isOpen = arguments.length ? !!open : !scope.isOpen;\n if (angular.isFunction(setIsOpen)) {\n setIsOpen(scope, scope.isOpen);\n }\n\n return scope.isOpen;\n };\n\n // Allow other directives to watch status\n this.isOpen = function() {\n return scope.isOpen;\n };\n\n scope.getToggleElement = function() {\n return self.toggleElement;\n };\n\n scope.getAutoClose = function() {\n return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'\n };\n\n scope.getElement = function() {\n return $element;\n };\n\n scope.isKeynavEnabled = function() {\n return keynavEnabled;\n };\n\n scope.focusDropdownEntry = function(keyCode) {\n var elems = self.dropdownMenu ? //If append to body is used.\n angular.element(self.dropdownMenu).find('a') :\n $element.find('ul').eq(0).find('a');\n\n switch (keyCode) {\n case 40: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = 0;\n } else {\n self.selectedOption = self.selectedOption === elems.length - 1 ?\n self.selectedOption :\n self.selectedOption + 1;\n }\n break;\n }\n case 38: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = elems.length - 1;\n } else {\n self.selectedOption = self.selectedOption === 0 ?\n 0 : self.selectedOption - 1;\n }\n break;\n }\n }\n elems[self.selectedOption].focus();\n };\n\n scope.getDropdownElement = function() {\n return self.dropdownMenu;\n };\n\n scope.focusToggleElement = function() {\n if (self.toggleElement) {\n self.toggleElement[0].focus();\n }\n };\n\n function removeDropdownMenu() {\n $element.append(self.dropdownMenu);\n }\n\n scope.$watch('isOpen', function(isOpen, wasOpen) {\n var appendTo = null,\n appendToBody = false;\n\n if (angular.isDefined($attrs.dropdownAppendTo)) {\n var appendToEl = $parse($attrs.dropdownAppendTo)(scope);\n if (appendToEl) {\n appendTo = angular.element(appendToEl);\n }\n }\n\n if (angular.isDefined($attrs.dropdownAppendToBody)) {\n var appendToBodyValue = $parse($attrs.dropdownAppendToBody)(scope);\n if (appendToBodyValue !== false) {\n appendToBody = true;\n }\n }\n\n if (appendToBody && !appendTo) {\n appendTo = body;\n }\n\n if (appendTo && self.dropdownMenu) {\n if (isOpen) {\n appendTo.append(self.dropdownMenu);\n $element.on('$destroy', removeDropdownMenu);\n } else {\n $element.off('$destroy', removeDropdownMenu);\n removeDropdownMenu();\n }\n }\n\n if (appendTo && self.dropdownMenu) {\n var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),\n css,\n rightalign,\n scrollbarPadding,\n scrollbarWidth = 0;\n\n css = {\n top: pos.top + 'px',\n display: isOpen ? 'block' : 'none'\n };\n\n rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');\n if (!rightalign) {\n css.left = pos.left + 'px';\n css.right = 'auto';\n } else {\n css.left = 'auto';\n scrollbarPadding = $position.scrollbarPadding(appendTo);\n\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n scrollbarWidth = scrollbarPadding.scrollbarWidth;\n }\n\n css.right = window.innerWidth - scrollbarWidth -\n (pos.left + $element.prop('offsetWidth')) + 'px';\n }\n\n // Need to adjust our positioning to be relative to the appendTo container\n // if it's not the body element\n if (!appendToBody) {\n var appendOffset = $position.offset(appendTo);\n\n css.top = pos.top - appendOffset.top + 'px';\n\n if (!rightalign) {\n css.left = pos.left - appendOffset.left + 'px';\n } else {\n css.right = window.innerWidth -\n (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';\n }\n }\n\n self.dropdownMenu.css(css);\n }\n\n var openContainer = appendTo ? appendTo : $element;\n var dropdownOpenClass = appendTo ? appendToOpenClass : openClass;\n var hasOpenClass = openContainer.hasClass(dropdownOpenClass);\n var isOnlyOpen = uibDropdownService.isOnlyOpen($scope, appendTo);\n\n if (hasOpenClass === !isOpen) {\n var toggleClass;\n if (appendTo) {\n toggleClass = !isOnlyOpen ? 'addClass' : 'removeClass';\n } else {\n toggleClass = isOpen ? 'addClass' : 'removeClass';\n }\n $animate[toggleClass](openContainer, dropdownOpenClass).then(function() {\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\n toggleInvoker($scope, { open: !!isOpen });\n }\n });\n }\n\n if (isOpen) {\n if (self.dropdownMenuTemplateUrl) {\n $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {\n templateScope = scope.$new();\n $compile(tplContent.trim())(templateScope, function(dropdownElement) {\n var newEl = dropdownElement;\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n $document.on('keydown', uibDropdownService.keybindFilter);\n });\n });\n } else {\n $document.on('keydown', uibDropdownService.keybindFilter);\n }\n\n scope.focusToggleElement();\n uibDropdownService.open(scope, $element, appendTo);\n } else {\n uibDropdownService.close(scope, $element, appendTo);\n if (self.dropdownMenuTemplateUrl) {\n if (templateScope) {\n templateScope.$destroy();\n }\n var newEl = angular.element('');\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n }\n\n self.selectedOption = null;\n }\n\n if (angular.isFunction(setIsOpen)) {\n setIsOpen($scope, isOpen);\n }\n });\n}])\n\n.directive('uibDropdown', function() {\n return {\n controller: 'UibDropdownController',\n link: function(scope, element, attrs, dropdownCtrl) {\n dropdownCtrl.init();\n }\n };\n})\n\n.directive('uibDropdownMenu', function() {\n return {\n restrict: 'A',\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {\n return;\n }\n\n element.addClass('dropdown-menu');\n\n var tplUrl = attrs.templateUrl;\n if (tplUrl) {\n dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;\n }\n\n if (!dropdownCtrl.dropdownMenu) {\n dropdownCtrl.dropdownMenu = element;\n }\n }\n };\n})\n\n.directive('uibDropdownToggle', function() {\n return {\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl) {\n return;\n }\n\n element.addClass('dropdown-toggle');\n\n dropdownCtrl.toggleElement = element;\n\n var toggleDropdown = function(event) {\n event.preventDefault();\n\n if (!element.hasClass('disabled') && !attrs.disabled) {\n scope.$apply(function() {\n dropdownCtrl.toggle();\n });\n }\n };\n\n element.on('click', toggleDropdown);\n\n // WAI-ARIA\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\n scope.$watch(dropdownCtrl.isOpen, function(isOpen) {\n element.attr('aria-expanded', !!isOpen);\n });\n\n scope.$on('$destroy', function() {\n element.off('click', toggleDropdown);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.stackedMap', [])\n/**\n * A helper, internal data structure that acts as a map but also allows getting / removing\n * elements in the LIFO order\n */\n .factory('$$stackedMap', function() {\n return {\n createNew: function() {\n var stack = [];\n\n return {\n add: function(key, value) {\n stack.push({\n key: key,\n value: value\n });\n },\n get: function(key) {\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n return stack[i];\n }\n }\n },\n keys: function() {\n var keys = [];\n for (var i = 0; i < stack.length; i++) {\n keys.push(stack[i].key);\n }\n return keys;\n },\n top: function() {\n return stack[stack.length - 1];\n },\n remove: function(key) {\n var idx = -1;\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n idx = i;\n break;\n }\n }\n return stack.splice(idx, 1)[0];\n },\n removeTop: function() {\n return stack.pop();\n },\n length: function() {\n return stack.length;\n }\n };\n }\n };\n });\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.multiMap', 'ui.bootstrap.stackedMap', 'ui.bootstrap.position'])\n/**\n * Pluggable resolve mechanism for the modal resolve resolution\n * Supports UI Router's $resolve service\n */\n .provider('$uibResolve', function() {\n var resolve = this;\n this.resolver = null;\n\n this.setResolver = function(resolver) {\n this.resolver = resolver;\n };\n\n this.$get = ['$injector', '$q', function($injector, $q) {\n var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;\n return {\n resolve: function(invocables, locals, parent, self) {\n if (resolver) {\n return resolver.resolve(invocables, locals, parent, self);\n }\n\n var promises = [];\n\n angular.forEach(invocables, function(value) {\n if (angular.isFunction(value) || angular.isArray(value)) {\n promises.push($q.resolve($injector.invoke(value)));\n } else if (angular.isString(value)) {\n promises.push($q.resolve($injector.get(value)));\n } else {\n promises.push($q.resolve(value));\n }\n });\n\n return $q.all(promises).then(function(resolves) {\n var resolveObj = {};\n var resolveIter = 0;\n angular.forEach(invocables, function(value, key) {\n resolveObj[key] = resolves[resolveIter++];\n });\n\n return resolveObj;\n });\n }\n };\n }];\n })\n\n/**\n * A helper directive for the $modal service. It creates a backdrop element.\n */\n .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',\n function($animate, $injector, $modalStack) {\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n tElement.addClass(tAttrs.backdropClass);\n return linkFn;\n }\n };\n\n function linkFn(scope, element, attrs) {\n if (attrs.modalInClass) {\n $animate.addClass(element, attrs.modalInClass);\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n if (scope.modalOptions.animation) {\n $animate.removeClass(element, attrs.modalInClass).then(done);\n } else {\n done();\n }\n });\n }\n }\n }])\n\n .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',\n function($modalStack, $q, $animateCss, $document) {\n return {\n scope: {\n index: '@'\n },\n restrict: 'A',\n transclude: true,\n templateUrl: function(tElement, tAttrs) {\n return tAttrs.templateUrl || 'uib/template/modal/window.html';\n },\n link: function(scope, element, attrs) {\n element.addClass(attrs.windowTopClass || '');\n scope.size = attrs.size;\n\n scope.close = function(evt) {\n var modal = $modalStack.getTop();\n if (modal && modal.value.backdrop &&\n modal.value.backdrop !== 'static' &&\n evt.target === evt.currentTarget) {\n evt.preventDefault();\n evt.stopPropagation();\n $modalStack.dismiss(modal.key, 'backdrop click');\n }\n };\n\n // moved from template to fix issue #2280\n element.on('click', scope.close);\n\n // This property is only added to the scope for the purpose of detecting when this directive is rendered.\n // We can detect that by using this property in the template associated with this directive and then use\n // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.\n scope.$isRendered = true;\n\n // Deferred object that will be resolved when this modal is rendered.\n var modalRenderDeferObj = $q.defer();\n // Resolve render promise post-digest\n scope.$$postDigest(function() {\n modalRenderDeferObj.resolve();\n });\n\n modalRenderDeferObj.promise.then(function() {\n var animationPromise = null;\n\n if (attrs.modalInClass) {\n animationPromise = $animateCss(element, {\n addClass: attrs.modalInClass\n }).start();\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n $animateCss(element, {\n removeClass: attrs.modalInClass\n }).start().then(done);\n });\n }\n\n\n $q.when(animationPromise).then(function() {\n // Notify {@link $modalStack} that modal is rendered.\n var modal = $modalStack.getTop();\n if (modal) {\n $modalStack.modalRendered(modal.key);\n }\n\n /**\n * If something within the freshly-opened modal already has focus (perhaps via a\n * directive that causes focus) then there's no need to try to focus anything.\n */\n if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {\n var inputWithAutofocus = element[0].querySelector('[autofocus]');\n /**\n * Auto-focusing of a freshly-opened modal element causes any child elements\n * with the autofocus attribute to lose focus. This is an issue on touch\n * based devices which will show and then hide the onscreen keyboard.\n * Attempts to refocus the autofocus element via JavaScript will not reopen\n * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus\n * the modal element if the modal does not contain an autofocus element.\n */\n if (inputWithAutofocus) {\n inputWithAutofocus.focus();\n } else {\n element[0].focus();\n }\n }\n });\n });\n }\n };\n }])\n\n .directive('uibModalAnimationClass', function() {\n return {\n compile: function(tElement, tAttrs) {\n if (tAttrs.modalAnimation) {\n tElement.addClass(tAttrs.uibModalAnimationClass);\n }\n }\n };\n })\n\n .directive('uibModalTransclude', ['$animate', function($animate) {\n return {\n link: function(scope, element, attrs, controller, transclude) {\n transclude(scope.$parent, function(clone) {\n element.empty();\n $animate.enter(clone, element);\n });\n }\n };\n }])\n\n .factory('$uibModalStack', ['$animate', '$animateCss', '$document',\n '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',\n function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {\n var OPENED_MODAL_CLASS = 'modal-open';\n\n var backdropDomEl, backdropScope;\n var openedWindows = $$stackedMap.createNew();\n var openedClasses = $$multiMap.createNew();\n var $modalStack = {\n NOW_CLOSING_EVENT: 'modal.stack.now-closing'\n };\n var topModalIndex = 0;\n var previousTopOpenedModal = null;\n var ARIA_HIDDEN_ATTRIBUTE_NAME = 'data-bootstrap-modal-aria-hidden-count';\n\n //Modal focus behavior\n var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'button:not([disabled]):not([tabindex=\\'-1\\']),select:not([disabled]):not([tabindex=\\'-1\\']), textarea:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'iframe, object, embed, *[tabindex]:not([tabindex=\\'-1\\']), *[contenteditable=true]';\n var scrollbarPadding;\n var SNAKE_CASE_REGEXP = /[A-Z]/g;\n\n // TODO: extract into common dependency with tooltip\n function snake_case(name) {\n var separator = '-';\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n function isVisible(element) {\n return !!(element.offsetWidth ||\n element.offsetHeight ||\n element.getClientRects().length);\n }\n\n function backdropIndex() {\n var topBackdropIndex = -1;\n var opened = openedWindows.keys();\n for (var i = 0; i < opened.length; i++) {\n if (openedWindows.get(opened[i]).value.backdrop) {\n topBackdropIndex = i;\n }\n }\n\n // If any backdrop exist, ensure that it's index is always\n // right below the top modal\n if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {\n topBackdropIndex = topModalIndex;\n }\n return topBackdropIndex;\n }\n\n $rootScope.$watch(backdropIndex, function(newBackdropIndex) {\n if (backdropScope) {\n backdropScope.index = newBackdropIndex;\n }\n });\n\n function removeModalWindow(modalInstance, elementToReceiveFocus) {\n var modalWindow = openedWindows.get(modalInstance).value;\n var appendToElement = modalWindow.appendTo;\n\n //clean up the stack\n openedWindows.remove(modalInstance);\n previousTopOpenedModal = openedWindows.top();\n if (previousTopOpenedModal) {\n topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);\n }\n\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {\n var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;\n openedClasses.remove(modalBodyClass, modalInstance);\n var areAnyOpen = openedClasses.hasKey(modalBodyClass);\n appendToElement.toggleClass(modalBodyClass, areAnyOpen);\n if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n if (scrollbarPadding.originalRight) {\n appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});\n } else {\n appendToElement.css({paddingRight: ''});\n }\n scrollbarPadding = null;\n }\n toggleTopWindowClass(true);\n }, modalWindow.closedDeferred);\n checkRemoveBackdrop();\n\n //move focus to specified element if available, or else to body\n if (elementToReceiveFocus && elementToReceiveFocus.focus) {\n elementToReceiveFocus.focus();\n } else if (appendToElement.focus) {\n appendToElement.focus();\n }\n }\n\n // Add or remove \"windowTopClass\" from the top window in the stack\n function toggleTopWindowClass(toggleSwitch) {\n var modalWindow;\n\n if (openedWindows.length() > 0) {\n modalWindow = openedWindows.top().value;\n modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);\n }\n }\n\n function checkRemoveBackdrop() {\n //remove backdrop if no longer needed\n if (backdropDomEl && backdropIndex() === -1) {\n var backdropScopeRef = backdropScope;\n removeAfterAnimate(backdropDomEl, backdropScope, function() {\n backdropScopeRef = null;\n });\n backdropDomEl = undefined;\n backdropScope = undefined;\n }\n }\n\n function removeAfterAnimate(domEl, scope, done, closedDeferred) {\n var asyncDeferred;\n var asyncPromise = null;\n var setIsAsync = function() {\n if (!asyncDeferred) {\n asyncDeferred = $q.defer();\n asyncPromise = asyncDeferred.promise;\n }\n\n return function asyncDone() {\n asyncDeferred.resolve();\n };\n };\n scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);\n\n // Note that it's intentional that asyncPromise might be null.\n // That's when setIsAsync has not been called during the\n // NOW_CLOSING_EVENT broadcast.\n return $q.when(asyncPromise).then(afterAnimating);\n\n function afterAnimating() {\n if (afterAnimating.done) {\n return;\n }\n afterAnimating.done = true;\n\n $animate.leave(domEl).then(function() {\n if (done) {\n done();\n }\n\n domEl.remove();\n if (closedDeferred) {\n closedDeferred.resolve();\n }\n });\n\n scope.$destroy();\n }\n }\n\n $document.on('keydown', keydownListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keydown', keydownListener);\n });\n\n function keydownListener(evt) {\n if (evt.isDefaultPrevented()) {\n return evt;\n }\n\n var modal = openedWindows.top();\n if (modal) {\n switch (evt.which) {\n case 27: {\n if (modal.value.keyboard) {\n evt.preventDefault();\n $rootScope.$apply(function() {\n $modalStack.dismiss(modal.key, 'escape key press');\n });\n }\n break;\n }\n case 9: {\n var list = $modalStack.loadFocusElementList(modal);\n var focusChanged = false;\n if (evt.shiftKey) {\n if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {\n focusChanged = $modalStack.focusLastFocusableElement(list);\n }\n } else {\n if ($modalStack.isFocusInLastItem(evt, list)) {\n focusChanged = $modalStack.focusFirstFocusableElement(list);\n }\n }\n\n if (focusChanged) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n break;\n }\n }\n }\n }\n\n $modalStack.open = function(modalInstance, modal) {\n var modalOpener = $document[0].activeElement,\n modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;\n\n toggleTopWindowClass(false);\n\n // Store the current top first, to determine what index we ought to use\n // for the current top modal\n previousTopOpenedModal = openedWindows.top();\n\n openedWindows.add(modalInstance, {\n deferred: modal.deferred,\n renderDeferred: modal.renderDeferred,\n closedDeferred: modal.closedDeferred,\n modalScope: modal.scope,\n backdrop: modal.backdrop,\n keyboard: modal.keyboard,\n openedClass: modal.openedClass,\n windowTopClass: modal.windowTopClass,\n animation: modal.animation,\n appendTo: modal.appendTo\n });\n\n openedClasses.put(modalBodyClass, modalInstance);\n\n var appendToElement = modal.appendTo,\n currBackdropIndex = backdropIndex();\n\n if (currBackdropIndex >= 0 && !backdropDomEl) {\n backdropScope = $rootScope.$new(true);\n backdropScope.modalOptions = modal;\n backdropScope.index = currBackdropIndex;\n backdropDomEl = angular.element('
');\n backdropDomEl.attr({\n 'class': 'modal-backdrop',\n 'ng-style': '{\\'z-index\\': 1040 + (index && 1 || 0) + index*10}',\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n });\n if (modal.backdropClass) {\n backdropDomEl.addClass(modal.backdropClass);\n }\n\n if (modal.animation) {\n backdropDomEl.attr('modal-animation', 'true');\n }\n $compile(backdropDomEl)(backdropScope);\n $animate.enter(backdropDomEl, appendToElement);\n if ($uibPosition.isScrollable(appendToElement)) {\n scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});\n }\n }\n }\n\n var content;\n if (modal.component) {\n content = document.createElement(snake_case(modal.component.name));\n content = angular.element(content);\n content.attr({\n resolve: '$resolve',\n 'modal-instance': '$uibModalInstance',\n close: '$close($value)',\n dismiss: '$dismiss($value)'\n });\n } else {\n content = modal.content;\n }\n\n // Set the top modal index based on the index of the previous top modal\n topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;\n var angularDomEl = angular.element('
');\n angularDomEl.attr({\n 'class': 'modal',\n 'template-url': modal.windowTemplateUrl,\n 'window-top-class': modal.windowTopClass,\n 'role': 'dialog',\n 'aria-labelledby': modal.ariaLabelledBy,\n 'aria-describedby': modal.ariaDescribedBy,\n 'size': modal.size,\n 'index': topModalIndex,\n 'animate': 'animate',\n 'ng-style': '{\\'z-index\\': 1050 + $$topModalIndex*10, display: \\'block\\'}',\n 'tabindex': -1,\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n }).append(content);\n if (modal.windowClass) {\n angularDomEl.addClass(modal.windowClass);\n }\n\n if (modal.animation) {\n angularDomEl.attr('modal-animation', 'true');\n }\n\n appendToElement.addClass(modalBodyClass);\n if (modal.scope) {\n // we need to explicitly add the modal index to the modal scope\n // because it is needed by ngStyle to compute the zIndex property.\n modal.scope.$$topModalIndex = topModalIndex;\n }\n $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);\n\n openedWindows.top().value.modalDomEl = angularDomEl;\n openedWindows.top().value.modalOpener = modalOpener;\n\n applyAriaHidden(angularDomEl);\n\n function applyAriaHidden(el) {\n if (!el || el[0].tagName === 'BODY') {\n return;\n }\n\n getSiblings(el).forEach(function(sibling) {\n var elemIsAlreadyHidden = sibling.getAttribute('aria-hidden') === 'true',\n ariaHiddenCount = parseInt(sibling.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10);\n\n if (!ariaHiddenCount) {\n ariaHiddenCount = elemIsAlreadyHidden ? 1 : 0;\n }\n\n sibling.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, ariaHiddenCount + 1);\n sibling.setAttribute('aria-hidden', 'true');\n });\n\n return applyAriaHidden(el.parent());\n\n function getSiblings(el) {\n var children = el.parent() ? el.parent().children() : [];\n\n return Array.prototype.filter.call(children, function(child) {\n return child !== el[0];\n });\n }\n }\n };\n\n function broadcastClosing(modalWindow, resultOrReason, closing) {\n return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;\n }\n\n function unhideBackgroundElements() {\n Array.prototype.forEach.call(\n document.querySelectorAll('[' + ARIA_HIDDEN_ATTRIBUTE_NAME + ']'),\n function(hiddenEl) {\n var ariaHiddenCount = parseInt(hiddenEl.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10),\n newHiddenCount = ariaHiddenCount - 1;\n hiddenEl.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, newHiddenCount);\n\n if (!newHiddenCount) {\n hiddenEl.removeAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME);\n hiddenEl.removeAttribute('aria-hidden');\n }\n }\n );\n }\n\n $modalStack.close = function(modalInstance, result) {\n var modalWindow = openedWindows.get(modalInstance);\n unhideBackgroundElements();\n if (modalWindow && broadcastClosing(modalWindow, result, true)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.resolve(result);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n\n return !modalWindow;\n };\n\n $modalStack.dismiss = function(modalInstance, reason) {\n var modalWindow = openedWindows.get(modalInstance);\n unhideBackgroundElements();\n if (modalWindow && broadcastClosing(modalWindow, reason, false)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.reject(reason);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n return !modalWindow;\n };\n\n $modalStack.dismissAll = function(reason) {\n var topModal = this.getTop();\n while (topModal && this.dismiss(topModal.key, reason)) {\n topModal = this.getTop();\n }\n };\n\n $modalStack.getTop = function() {\n return openedWindows.top();\n };\n\n $modalStack.modalRendered = function(modalInstance) {\n var modalWindow = openedWindows.get(modalInstance);\n if (modalWindow) {\n modalWindow.value.renderDeferred.resolve();\n }\n };\n\n $modalStack.focusFirstFocusableElement = function(list) {\n if (list.length > 0) {\n list[0].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.focusLastFocusableElement = function(list) {\n if (list.length > 0) {\n list[list.length - 1].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.isModalFocused = function(evt, modalWindow) {\n if (evt && modalWindow) {\n var modalDomEl = modalWindow.value.modalDomEl;\n if (modalDomEl && modalDomEl.length) {\n return (evt.target || evt.srcElement) === modalDomEl[0];\n }\n }\n return false;\n };\n\n $modalStack.isFocusInFirstItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[0];\n }\n return false;\n };\n\n $modalStack.isFocusInLastItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[list.length - 1];\n }\n return false;\n };\n\n $modalStack.loadFocusElementList = function(modalWindow) {\n if (modalWindow) {\n var modalDomE1 = modalWindow.value.modalDomEl;\n if (modalDomE1 && modalDomE1.length) {\n var elements = modalDomE1[0].querySelectorAll(tabbableSelector);\n return elements ?\n Array.prototype.filter.call(elements, function(element) {\n return isVisible(element);\n }) : elements;\n }\n }\n };\n\n return $modalStack;\n }])\n\n .provider('$uibModal', function() {\n var $modalProvider = {\n options: {\n animation: true,\n backdrop: true, //can also be false or 'static'\n keyboard: true\n },\n $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',\n function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {\n var $modal = {};\n\n function getTemplatePromise(options) {\n return options.template ? $q.when(options.template) :\n $templateRequest(angular.isFunction(options.templateUrl) ?\n options.templateUrl() : options.templateUrl);\n }\n\n var promiseChain = null;\n $modal.getPromiseChain = function() {\n return promiseChain;\n };\n\n $modal.open = function(modalOptions) {\n var modalResultDeferred = $q.defer();\n var modalOpenedDeferred = $q.defer();\n var modalClosedDeferred = $q.defer();\n var modalRenderDeferred = $q.defer();\n\n //prepare an instance of a modal to be injected into controllers and returned to a caller\n var modalInstance = {\n result: modalResultDeferred.promise,\n opened: modalOpenedDeferred.promise,\n closed: modalClosedDeferred.promise,\n rendered: modalRenderDeferred.promise,\n close: function (result) {\n return $modalStack.close(modalInstance, result);\n },\n dismiss: function (reason) {\n return $modalStack.dismiss(modalInstance, reason);\n }\n };\n\n //merge and clean up options\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\n modalOptions.resolve = modalOptions.resolve || {};\n modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);\n\n if (!modalOptions.appendTo.length) {\n throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');\n }\n\n //verify options\n if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {\n throw new Error('One of component or template or templateUrl options is required.');\n }\n\n var templateAndResolvePromise;\n if (modalOptions.component) {\n templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));\n } else {\n templateAndResolvePromise =\n $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);\n }\n\n function resolveWithTemplate() {\n return templateAndResolvePromise;\n }\n\n // Wait for the resolution of the existing promise chain.\n // Then switch to our own combined promise dependency (regardless of how the previous modal fared).\n // Then add to $modalStack and resolve opened.\n // Finally clean up the chain variable if no subsequent modal has overwritten it.\n var samePromise;\n samePromise = promiseChain = $q.all([promiseChain])\n .then(resolveWithTemplate, resolveWithTemplate)\n .then(function resolveSuccess(tplAndVars) {\n var providedScope = modalOptions.scope || $rootScope;\n\n var modalScope = providedScope.$new();\n modalScope.$close = modalInstance.close;\n modalScope.$dismiss = modalInstance.dismiss;\n\n modalScope.$on('$destroy', function() {\n if (!modalScope.$$uibDestructionScheduled) {\n modalScope.$dismiss('$uibUnscheduledDestruction');\n }\n });\n\n var modal = {\n scope: modalScope,\n deferred: modalResultDeferred,\n renderDeferred: modalRenderDeferred,\n closedDeferred: modalClosedDeferred,\n animation: modalOptions.animation,\n backdrop: modalOptions.backdrop,\n keyboard: modalOptions.keyboard,\n backdropClass: modalOptions.backdropClass,\n windowTopClass: modalOptions.windowTopClass,\n windowClass: modalOptions.windowClass,\n windowTemplateUrl: modalOptions.windowTemplateUrl,\n ariaLabelledBy: modalOptions.ariaLabelledBy,\n ariaDescribedBy: modalOptions.ariaDescribedBy,\n size: modalOptions.size,\n openedClass: modalOptions.openedClass,\n appendTo: modalOptions.appendTo\n };\n\n var component = {};\n var ctrlInstance, ctrlInstantiate, ctrlLocals = {};\n\n if (modalOptions.component) {\n constructLocals(component, false, true, false);\n component.name = modalOptions.component;\n modal.component = component;\n } else if (modalOptions.controller) {\n constructLocals(ctrlLocals, true, false, true);\n\n // the third param will make the controller instantiate later,private api\n // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126\n ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);\n if (modalOptions.controllerAs && modalOptions.bindToController) {\n ctrlInstance = ctrlInstantiate.instance;\n ctrlInstance.$close = modalScope.$close;\n ctrlInstance.$dismiss = modalScope.$dismiss;\n angular.extend(ctrlInstance, {\n $resolve: ctrlLocals.$scope.$resolve\n }, providedScope);\n }\n\n ctrlInstance = ctrlInstantiate();\n\n if (angular.isFunction(ctrlInstance.$onInit)) {\n ctrlInstance.$onInit();\n }\n }\n\n if (!modalOptions.component) {\n modal.content = tplAndVars[0];\n }\n\n $modalStack.open(modalInstance, modal);\n modalOpenedDeferred.resolve(true);\n\n function constructLocals(obj, template, instanceOnScope, injectable) {\n obj.$scope = modalScope;\n obj.$scope.$resolve = {};\n if (instanceOnScope) {\n obj.$scope.$uibModalInstance = modalInstance;\n } else {\n obj.$uibModalInstance = modalInstance;\n }\n\n var resolves = template ? tplAndVars[1] : tplAndVars;\n angular.forEach(resolves, function(value, key) {\n if (injectable) {\n obj[key] = value;\n }\n\n obj.$scope.$resolve[key] = value;\n });\n }\n }, function resolveError(reason) {\n modalOpenedDeferred.reject(reason);\n modalResultDeferred.reject(reason);\n })['finally'](function() {\n if (promiseChain === samePromise) {\n promiseChain = null;\n }\n });\n\n return modalInstance;\n };\n\n return $modal;\n }\n ]\n };\n\n return $modalProvider;\n });\n\nangular.module('ui.bootstrap.paging', [])\n/**\n * Helper internal service for generating common controller code between the\n * pager and pagination components\n */\n.factory('uibPaging', ['$parse', function($parse) {\n return {\n create: function(ctrl, $scope, $attrs) {\n ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\n ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl\n ctrl._watchers = [];\n\n ctrl.init = function(ngModelCtrl, config) {\n ctrl.ngModelCtrl = ngModelCtrl;\n ctrl.config = config;\n\n ngModelCtrl.$render = function() {\n ctrl.render();\n };\n\n if ($attrs.itemsPerPage) {\n ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {\n ctrl.itemsPerPage = parseInt(value, 10);\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }));\n } else {\n ctrl.itemsPerPage = config.itemsPerPage;\n }\n\n $scope.$watch('totalItems', function(newTotal, oldTotal) {\n if (angular.isDefined(newTotal) || newTotal !== oldTotal) {\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }\n });\n };\n\n ctrl.calculateTotalPages = function() {\n var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);\n return Math.max(totalPages || 0, 1);\n };\n\n ctrl.render = function() {\n $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;\n };\n\n $scope.selectPage = function(page, evt) {\n if (evt) {\n evt.preventDefault();\n }\n\n var clickAllowed = !$scope.ngDisabled || !evt;\n if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {\n if (evt && evt.target) {\n evt.target.blur();\n }\n ctrl.ngModelCtrl.$setViewValue(page);\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || ctrl.config[key + 'Text'];\n };\n\n $scope.noPrevious = function() {\n return $scope.page === 1;\n };\n\n $scope.noNext = function() {\n return $scope.page === $scope.totalPages;\n };\n\n ctrl.updatePage = function() {\n ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable\n\n if ($scope.page > $scope.totalPages) {\n $scope.selectPage($scope.totalPages);\n } else {\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.$on('$destroy', function() {\n while (ctrl._watchers.length) {\n ctrl._watchers.shift()();\n }\n });\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pager', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n\n.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {\n $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;\n\n uibPaging.create(this, $scope, $attrs);\n}])\n\n.constant('uibPagerConfig', {\n itemsPerPage: 10,\n previousText: '« Previous',\n nextText: 'Next »',\n align: true\n})\n\n.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {\n return {\n scope: {\n totalItems: '=',\n previousText: '@',\n nextText: '@',\n ngDisabled: '='\n },\n require: ['uibPager', '?ngModel'],\n restrict: 'A',\n controller: 'UibPagerController',\n controllerAs: 'pager',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pager/pager.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pager');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPagerConfig);\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {\n var ctrl = this;\n // Setup configuration parameters\n var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,\n rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,\n forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,\n boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,\n pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;\n $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;\n $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;\n $attrs.$set('role', 'menu');\n\n uibPaging.create(this, $scope, $attrs);\n\n if ($attrs.maxSize) {\n ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {\n maxSize = parseInt(value, 10);\n ctrl.render();\n }));\n }\n\n // Create page object used in template\n function makePage(number, text, isActive) {\n return {\n number: number,\n text: text,\n active: isActive\n };\n }\n\n function getPages(currentPage, totalPages) {\n var pages = [];\n\n // Default page limits\n var startPage = 1, endPage = totalPages;\n var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;\n\n // recompute if maxSize\n if (isMaxSized) {\n if (rotate) {\n // Current page is displayed in the middle of the visible ones\n startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);\n endPage = startPage + maxSize - 1;\n\n // Adjust if limit is exceeded\n if (endPage > totalPages) {\n endPage = totalPages;\n startPage = endPage - maxSize + 1;\n }\n } else {\n // Visible pages are paginated with maxSize\n startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;\n\n // Adjust last page if limit is exceeded\n endPage = Math.min(startPage + maxSize - 1, totalPages);\n }\n }\n\n // Add page number links\n for (var number = startPage; number <= endPage; number++) {\n var page = makePage(number, pageLabel(number), number === currentPage);\n pages.push(page);\n }\n\n // Add links to move between page sets\n if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {\n if (startPage > 1) {\n if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning\n var previousPageSet = makePage(startPage - 1, '...', false);\n pages.unshift(previousPageSet);\n }\n if (boundaryLinkNumbers) {\n if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential\n var secondPageLink = makePage(2, '2', false);\n pages.unshift(secondPageLink);\n }\n //add the first page\n var firstPageLink = makePage(1, '1', false);\n pages.unshift(firstPageLink);\n }\n }\n\n if (endPage < totalPages) {\n if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end\n var nextPageSet = makePage(endPage + 1, '...', false);\n pages.push(nextPageSet);\n }\n if (boundaryLinkNumbers) {\n if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential\n var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);\n pages.push(secondToLastPageLink);\n }\n //add the last page\n var lastPageLink = makePage(totalPages, totalPages, false);\n pages.push(lastPageLink);\n }\n }\n }\n return pages;\n }\n\n var originalRender = this.render;\n this.render = function() {\n originalRender();\n if ($scope.page > 0 && $scope.page <= $scope.totalPages) {\n $scope.pages = getPages($scope.page, $scope.totalPages);\n }\n };\n}])\n\n.constant('uibPaginationConfig', {\n itemsPerPage: 10,\n boundaryLinks: false,\n boundaryLinkNumbers: false,\n directionLinks: true,\n firstText: 'First',\n previousText: 'Previous',\n nextText: 'Next',\n lastText: 'Last',\n rotate: true,\n forceEllipses: false\n})\n\n.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {\n return {\n scope: {\n totalItems: '=',\n firstText: '@',\n previousText: '@',\n nextText: '@',\n lastText: '@',\n ngDisabled:'='\n },\n require: ['uibPagination', '?ngModel'],\n restrict: 'A',\n controller: 'UibPaginationController',\n controllerAs: 'pagination',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pagination/pagination.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pagination');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPaginationConfig);\n }\n };\n}]);\n\n/**\n * The following features are still outstanding: animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html tooltips, and selector delegation.\n */\nangular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])\n\n/**\n * The $tooltip service creates tooltip- and popover-like directives as well as\n * houses global options for them.\n */\n.provider('$uibTooltip', function() {\n // The default options tooltip and popover.\n var defaultOptions = {\n placement: 'top',\n placementClassPrefix: '',\n animation: true,\n popupDelay: 0,\n popupCloseDelay: 0,\n useContentExp: false\n };\n\n // Default hide triggers for each show trigger\n var triggerMap = {\n 'mouseenter': 'mouseleave',\n 'click': 'click',\n 'outsideClick': 'outsideClick',\n 'focus': 'blur',\n 'none': ''\n };\n\n // The options specified to the provider globally.\n var globalOptions = {};\n\n /**\n * `options({})` allows global configuration of all tooltips in the\n * application.\n *\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\n * // place tooltips left instead of top by default\n * $tooltipProvider.options( { placement: 'left' } );\n * });\n */\n\tthis.options = function(value) {\n\t\tangular.extend(globalOptions, value);\n\t};\n\n /**\n * This allows you to extend the set of trigger mappings available. E.g.:\n *\n * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );\n */\n this.setTriggers = function setTriggers(triggers) {\n angular.extend(triggerMap, triggers);\n };\n\n /**\n * This is a helper function for translating camel-case to snake_case.\n */\n function snake_case(name) {\n var regexp = /[A-Z]/g;\n var separator = '-';\n return name.replace(regexp, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n /**\n * Returns the actual instance of the $tooltip service.\n * TODO support multiple triggers\n */\n this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\n var openedTooltips = $$stackedMap.createNew();\n $document.on('keyup', keypressListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keyup', keypressListener);\n });\n\n function keypressListener(e) {\n if (e.which === 27) {\n var last = openedTooltips.top();\n if (last) {\n last.value.close();\n last = null;\n }\n }\n }\n\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\n options = angular.extend({}, defaultOptions, globalOptions, options);\n\n /**\n * Returns an object of show and hide triggers.\n *\n * If a trigger is supplied,\n * it is used to show the tooltip; otherwise, it will use the `trigger`\n * option passed to the `$tooltipProvider.options` method; else it will\n * default to the trigger supplied to this directive factory.\n *\n * The hide trigger is based on the show trigger. If the `trigger` option\n * was passed to the `$tooltipProvider.options` method, it will use the\n * mapped trigger from `triggerMap` or the passed trigger if the map is\n * undefined; otherwise, it uses the `triggerMap` value of the show\n * trigger; else it will just use the show trigger.\n */\n function getTriggers(trigger) {\n var show = (trigger || options.trigger || defaultTriggerShow).split(' ');\n var hide = show.map(function(trigger) {\n return triggerMap[trigger] || trigger;\n });\n return {\n show: show,\n hide: hide\n };\n }\n\n var directiveName = snake_case(ttType);\n\n var startSym = $interpolate.startSymbol();\n var endSym = $interpolate.endSymbol();\n var template =\n '
' +\n '
';\n\n return {\n compile: function(tElem, tAttrs) {\n var tooltipLinker = $compile(template);\n\n return function link(scope, element, attrs, tooltipCtrl) {\n var tooltip;\n var tooltipLinkedScope;\n var transitionTimeout;\n var showTimeout;\n var hideTimeout;\n var positionTimeout;\n var adjustmentTimeout;\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\n var triggers = getTriggers(undefined);\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\n var ttScope = scope.$new(true);\n var repositionScheduled = false;\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\n var observers = [];\n var lastPlacement;\n\n var positionTooltip = function() {\n // check if tooltip exists and is not empty\n if (!tooltip || !tooltip.html()) { return; }\n\n if (!positionTimeout) {\n positionTimeout = $timeout(function() {\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\n var placementClasses = ttPosition.placement.split('-');\n\n if (!tooltip.hasClass(placementClasses[0])) {\n tooltip.removeClass(lastPlacement.split('-')[0]);\n tooltip.addClass(placementClasses[0]);\n }\n\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\n }\n\n adjustmentTimeout = $timeout(function() {\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\n if (adjustment) {\n tooltip.css(adjustment);\n }\n adjustmentTimeout = null;\n }, 0, false);\n\n // first time through tt element will have the\n // uib-position-measure class or if the placement\n // has changed we need to position the arrow.\n if (tooltip.hasClass('uib-position-measure')) {\n $position.positionArrow(tooltip, ttPosition.placement);\n tooltip.removeClass('uib-position-measure');\n } else if (lastPlacement !== ttPosition.placement) {\n $position.positionArrow(tooltip, ttPosition.placement);\n }\n lastPlacement = ttPosition.placement;\n\n positionTimeout = null;\n }, 0, false);\n }\n };\n\n // Set up the correct scope to allow transclusion later\n ttScope.origScope = scope;\n\n // By default, the tooltip is not open.\n // TODO add ability to start tooltip opened\n ttScope.isOpen = false;\n\n function toggleTooltipBind() {\n if (!ttScope.isOpen) {\n showTooltipBind();\n } else {\n hideTooltipBind();\n }\n }\n\n // Show the tooltip with delay if specified, otherwise show it immediately\n function showTooltipBind() {\n if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {\n return;\n }\n\n cancelHide();\n prepareTooltip();\n\n if (ttScope.popupDelay) {\n // Do nothing if the tooltip was already scheduled to pop-up.\n // This happens if show is triggered multiple times before any hide is triggered.\n if (!showTimeout) {\n showTimeout = $timeout(show, ttScope.popupDelay, false);\n }\n } else {\n show();\n }\n }\n\n function hideTooltipBind() {\n cancelShow();\n\n if (ttScope.popupCloseDelay) {\n if (!hideTimeout) {\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\n }\n } else {\n hide();\n }\n }\n\n // Show the tooltip popup element.\n function show() {\n cancelShow();\n cancelHide();\n\n // Don't show empty tooltips.\n if (!ttScope.content) {\n return angular.noop;\n }\n\n createTooltip();\n\n // And show the tooltip.\n ttScope.$evalAsync(function() {\n ttScope.isOpen = true;\n assignIsOpen(true);\n positionTooltip();\n });\n }\n\n function cancelShow() {\n if (showTimeout) {\n $timeout.cancel(showTimeout);\n showTimeout = null;\n }\n\n if (positionTimeout) {\n $timeout.cancel(positionTimeout);\n positionTimeout = null;\n }\n }\n\n // Hide the tooltip popup element.\n function hide() {\n if (!ttScope) {\n return;\n }\n\n // First things first: we don't show it anymore.\n ttScope.$evalAsync(function() {\n if (ttScope) {\n ttScope.isOpen = false;\n assignIsOpen(false);\n // And now we remove it from the DOM. However, if we have animation, we\n // need to wait for it to expire beforehand.\n // FIXME: this is a placeholder for a port of the transitions library.\n // The fade transition in TWBS is 150ms.\n if (ttScope.animation) {\n if (!transitionTimeout) {\n transitionTimeout = $timeout(removeTooltip, 150, false);\n }\n } else {\n removeTooltip();\n }\n }\n });\n }\n\n function cancelHide() {\n if (hideTimeout) {\n $timeout.cancel(hideTimeout);\n hideTimeout = null;\n }\n\n if (transitionTimeout) {\n $timeout.cancel(transitionTimeout);\n transitionTimeout = null;\n }\n }\n\n function createTooltip() {\n // There can only be one tooltip element per directive shown at once.\n if (tooltip) {\n return;\n }\n\n tooltipLinkedScope = ttScope.$new();\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\n if (appendToBody) {\n $document.find('body').append(tooltip);\n } else {\n element.after(tooltip);\n }\n });\n\n openedTooltips.add(ttScope, {\n close: hide\n });\n\n prepObservers();\n }\n\n function removeTooltip() {\n cancelShow();\n cancelHide();\n unregisterObservers();\n\n if (tooltip) {\n tooltip.remove();\n \n tooltip = null;\n if (adjustmentTimeout) {\n $timeout.cancel(adjustmentTimeout);\n }\n }\n\n openedTooltips.remove(ttScope);\n \n if (tooltipLinkedScope) {\n tooltipLinkedScope.$destroy();\n tooltipLinkedScope = null;\n }\n }\n\n /**\n * Set the initial scope values. Once\n * the tooltip is created, the observers\n * will be added to keep things in sync.\n */\n function prepareTooltip() {\n ttScope.title = attrs[prefix + 'Title'];\n if (contentParse) {\n ttScope.content = contentParse(scope);\n } else {\n ttScope.content = attrs[ttType];\n }\n\n ttScope.popupClass = attrs[prefix + 'Class'];\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\n var placement = $position.parsePlacement(ttScope.placement);\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\n\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\n }\n\n function assignIsOpen(isOpen) {\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\n isOpenParse.assign(scope, isOpen);\n }\n }\n\n ttScope.contentExp = function() {\n return ttScope.content;\n };\n\n /**\n * Observe the relevant attributes.\n */\n attrs.$observe('disabled', function(val) {\n if (val) {\n cancelShow();\n }\n\n if (val && ttScope.isOpen) {\n hide();\n }\n });\n\n if (isOpenParse) {\n scope.$watch(isOpenParse, function(val) {\n if (ttScope && !val === ttScope.isOpen) {\n toggleTooltipBind();\n }\n });\n }\n\n function prepObservers() {\n observers.length = 0;\n\n if (contentParse) {\n observers.push(\n scope.$watch(contentParse, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n }\n })\n );\n\n observers.push(\n tooltipLinkedScope.$watch(function() {\n if (!repositionScheduled) {\n repositionScheduled = true;\n tooltipLinkedScope.$$postDigest(function() {\n repositionScheduled = false;\n if (ttScope && ttScope.isOpen) {\n positionTooltip();\n }\n });\n }\n })\n );\n } else {\n observers.push(\n attrs.$observe(ttType, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n } else {\n positionTooltip();\n }\n })\n );\n }\n\n observers.push(\n attrs.$observe(prefix + 'Title', function(val) {\n ttScope.title = val;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n\n observers.push(\n attrs.$observe(prefix + 'Placement', function(val) {\n ttScope.placement = val ? val : options.placement;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n }\n\n function unregisterObservers() {\n if (observers.length) {\n angular.forEach(observers, function(observer) {\n observer();\n });\n observers.length = 0;\n }\n }\n\n // hide tooltips/popovers for outsideClick trigger\n function bodyHideTooltipBind(e) {\n if (!ttScope || !ttScope.isOpen || !tooltip) {\n return;\n }\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\n hideTooltipBind();\n }\n }\n\n // KeyboardEvent handler to hide the tooltip on Escape key press\n function hideOnEscapeKey(e) {\n if (e.which === 27) {\n hideTooltipBind();\n }\n }\n\n var unregisterTriggers = function() {\n triggers.show.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n element.off('click', toggleTooltipBind);\n } else {\n element.off(trigger, showTooltipBind);\n element.off(trigger, toggleTooltipBind);\n }\n element.off('keypress', hideOnEscapeKey);\n });\n triggers.hide.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n $document.off('click', bodyHideTooltipBind);\n } else {\n element.off(trigger, hideTooltipBind);\n }\n });\n };\n\n function prepTriggers() {\n var showTriggers = [], hideTriggers = [];\n var val = scope.$eval(attrs[prefix + 'Trigger']);\n unregisterTriggers();\n\n if (angular.isObject(val)) {\n Object.keys(val).forEach(function(key) {\n showTriggers.push(key);\n hideTriggers.push(val[key]);\n });\n triggers = {\n show: showTriggers,\n hide: hideTriggers\n };\n } else {\n triggers = getTriggers(val);\n }\n\n if (triggers.show !== 'none') {\n triggers.show.forEach(function(trigger, idx) {\n if (trigger === 'outsideClick') {\n element.on('click', toggleTooltipBind);\n $document.on('click', bodyHideTooltipBind);\n } else if (trigger === triggers.hide[idx]) {\n element.on(trigger, toggleTooltipBind);\n } else if (trigger) {\n element.on(trigger, showTooltipBind);\n element.on(triggers.hide[idx], hideTooltipBind);\n }\n element.on('keypress', hideOnEscapeKey);\n });\n }\n }\n\n prepTriggers();\n\n var animation = scope.$eval(attrs[prefix + 'Animation']);\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\n\n var appendToBodyVal;\n var appendKey = prefix + 'AppendToBody';\n if (appendKey in attrs && attrs[appendKey] === undefined) {\n appendToBodyVal = true;\n } else {\n appendToBodyVal = scope.$eval(attrs[appendKey]);\n }\n\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\n\n // Make sure tooltip is destroyed and removed.\n scope.$on('$destroy', function onDestroyTooltip() {\n unregisterTriggers();\n removeTooltip();\n ttScope = null;\n });\n };\n }\n };\n };\n }];\n})\n\n// This is mostly ngInclude code but with a custom scope\n.directive('uibTooltipTemplateTransclude', [\n '$animate', '$sce', '$compile', '$templateRequest',\nfunction ($animate, $sce, $compile, $templateRequest) {\n return {\n link: function(scope, elem, attrs) {\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\n\n var changeCounter = 0,\n currentScope,\n previousElement,\n currentElement;\n\n var cleanupLastIncludeContent = function() {\n if (previousElement) {\n previousElement.remove();\n previousElement = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n\n if (currentElement) {\n $animate.leave(currentElement).then(function() {\n previousElement = null;\n });\n previousElement = currentElement;\n currentElement = null;\n }\n };\n\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\n var thisChangeId = ++changeCounter;\n\n if (src) {\n //set the 2nd param to true to ignore the template request error so that the inner\n //contents and scope can be cleaned up.\n $templateRequest(src, true).then(function(response) {\n if (thisChangeId !== changeCounter) { return; }\n var newScope = origScope.$new();\n var template = response;\n\n var clone = $compile(template)(newScope, function(clone) {\n cleanupLastIncludeContent();\n $animate.enter(clone, elem);\n });\n\n currentScope = newScope;\n currentElement = clone;\n\n currentScope.$emit('$includeContentLoaded', src);\n }, function() {\n if (thisChangeId === changeCounter) {\n cleanupLastIncludeContent();\n scope.$emit('$includeContentError', src);\n }\n });\n scope.$emit('$includeContentRequested', src);\n } else {\n cleanupLastIncludeContent();\n }\n });\n\n scope.$on('$destroy', cleanupLastIncludeContent);\n }\n };\n}])\n\n/**\n * Note that it's intentional that these classes are *not* applied through $animate.\n * They must not be animated as they're expected to be present on the tooltip on\n * initialization.\n */\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n // need to set the primary position so the\n // arrow has space during position measure.\n // tooltip.positionTooltip()\n if (scope.placement) {\n // // There are no top-left etc... classes\n // // in TWBS, so we need the primary position.\n var position = $uibPosition.parsePlacement(scope.placement);\n element.addClass(position[0]);\n }\n\n if (scope.popupClass) {\n element.addClass(scope.popupClass);\n }\n\n if (scope.animation) {\n element.addClass(attrs.tooltipAnimationClass);\n }\n }\n };\n}])\n\n.directive('uibTooltipPopup', function() {\n return {\n restrict: 'A',\n scope: { content: '@' },\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\n };\n})\n\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\n}])\n\n.directive('uibTooltipTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\n };\n})\n\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}])\n\n.directive('uibTooltipHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\n };\n})\n\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}]);\n\n/**\n * The following features are still outstanding: popup delay, animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, and selector delegatation.\n */\nangular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])\n\n.directive('uibPopoverTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/popover/popover-template.html'\n };\n})\n\n.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', uibTitle: '@' },\n templateUrl: 'uib/template/popover/popover-html.html'\n };\n})\n\n.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverHtml', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverPopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', content: '@' },\n templateUrl: 'uib/template/popover/popover.html'\n };\n})\n\n.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopover', 'popover', 'click');\n}]);\n\nangular.module('ui.bootstrap.progressbar', [])\n\n.constant('uibProgressConfig', {\n animate: true,\n max: 100\n})\n\n.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {\n var self = this,\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\n\n this.bars = [];\n $scope.max = getMaxOrDefault();\n\n this.addBar = function(bar, element, attrs) {\n if (!animate) {\n element.css({'transition': 'none'});\n }\n\n this.bars.push(bar);\n\n bar.max = getMaxOrDefault();\n bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';\n\n bar.$watch('value', function(value) {\n bar.recalculatePercentage();\n });\n\n bar.recalculatePercentage = function() {\n var totalPercentage = self.bars.reduce(function(total, bar) {\n bar.percent = +(100 * bar.value / bar.max).toFixed(2);\n return total + bar.percent;\n }, 0);\n\n if (totalPercentage > 100) {\n bar.percent -= totalPercentage - 100;\n }\n };\n\n bar.$on('$destroy', function() {\n element = null;\n self.removeBar(bar);\n });\n };\n\n this.removeBar = function(bar) {\n this.bars.splice(this.bars.indexOf(bar), 1);\n this.bars.forEach(function (bar) {\n bar.recalculatePercentage();\n });\n };\n\n //$attrs.$observe('maxParam', function(maxParam) {\n $scope.$watch('maxParam', function(maxParam) {\n self.bars.forEach(function(bar) {\n bar.max = getMaxOrDefault();\n bar.recalculatePercentage();\n });\n });\n\n function getMaxOrDefault () {\n return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;\n }\n}])\n\n.directive('uibProgress', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n require: 'uibProgress',\n scope: {\n maxParam: '=?max'\n },\n templateUrl: 'uib/template/progressbar/progress.html'\n };\n})\n\n.directive('uibBar', function() {\n return {\n replace: true,\n transclude: true,\n require: '^uibProgress',\n scope: {\n value: '=',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/bar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, element, attrs);\n }\n };\n})\n\n.directive('uibProgressbar', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n scope: {\n value: '=',\n maxParam: '=?max',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/progressbar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});\n }\n };\n});\n\nangular.module('ui.bootstrap.rating', [])\n\n.constant('uibRatingConfig', {\n max: 5,\n stateOn: null,\n stateOff: null,\n enableReset: true,\n titles: ['one', 'two', 'three', 'four', 'five']\n})\n\n.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {\n var ngModelCtrl = { $setViewValue: angular.noop },\n self = this;\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.push(function(value) {\n if (angular.isNumber(value) && value << 0 !== value) {\n value = Math.round(value);\n }\n\n return value;\n });\n\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\n this.enableReset = angular.isDefined($attrs.enableReset) ?\n $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;\n var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;\n this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?\n tmpTitles : ratingConfig.titles;\n\n var ratingStates = angular.isDefined($attrs.ratingStates) ?\n $scope.$parent.$eval($attrs.ratingStates) :\n new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);\n $scope.range = this.buildTemplateObjects(ratingStates);\n };\n\n this.buildTemplateObjects = function(states) {\n for (var i = 0, n = states.length; i < n; i++) {\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);\n }\n return states;\n };\n\n this.getTitle = function(index) {\n if (index >= this.titles.length) {\n return index + 1;\n }\n\n return this.titles[index];\n };\n\n $scope.rate = function(value) {\n if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {\n var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;\n ngModelCtrl.$setViewValue(newViewValue);\n ngModelCtrl.$render();\n }\n };\n\n $scope.enter = function(value) {\n if (!$scope.readonly) {\n $scope.value = value;\n }\n $scope.onHover({value: value});\n };\n\n $scope.reset = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.onLeave();\n };\n\n $scope.onKeydown = function(evt) {\n if (/(37|38|39|40)/.test(evt.which)) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));\n }\n };\n\n this.render = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.title = self.getTitle($scope.value - 1);\n };\n}])\n\n.directive('uibRating', function() {\n return {\n require: ['uibRating', 'ngModel'],\n restrict: 'A',\n scope: {\n readonly: '=?readOnly',\n onHover: '&',\n onLeave: '&'\n },\n controller: 'UibRatingController',\n templateUrl: 'uib/template/rating/rating.html',\n link: function(scope, element, attrs, ctrls) {\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n ratingCtrl.init(ngModelCtrl);\n }\n };\n});\n\nangular.module('ui.bootstrap.tabs', [])\n\n.controller('UibTabsetController', ['$scope', function ($scope) {\n var ctrl = this,\n oldIndex;\n ctrl.tabs = [];\n\n ctrl.select = function(index, evt) {\n if (!destroyed) {\n var previousIndex = findTabIndex(oldIndex);\n var previousSelected = ctrl.tabs[previousIndex];\n if (previousSelected) {\n previousSelected.tab.onDeselect({\n $event: evt,\n $selectedIndex: index\n });\n if (evt && evt.isDefaultPrevented()) {\n return;\n }\n previousSelected.tab.active = false;\n }\n\n var selected = ctrl.tabs[index];\n if (selected) {\n selected.tab.onSelect({\n $event: evt\n });\n selected.tab.active = true;\n ctrl.active = selected.index;\n oldIndex = selected.index;\n } else if (!selected && angular.isDefined(oldIndex)) {\n ctrl.active = null;\n oldIndex = null;\n }\n }\n };\n\n ctrl.addTab = function addTab(tab) {\n ctrl.tabs.push({\n tab: tab,\n index: tab.index\n });\n ctrl.tabs.sort(function(t1, t2) {\n if (t1.index > t2.index) {\n return 1;\n }\n\n if (t1.index < t2.index) {\n return -1;\n }\n\n return 0;\n });\n\n if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {\n var newActiveIndex = findTabIndex(tab.index);\n ctrl.select(newActiveIndex);\n }\n };\n\n ctrl.removeTab = function removeTab(tab) {\n var index;\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].tab === tab) {\n index = i;\n break;\n }\n }\n\n if (ctrl.tabs[index].index === ctrl.active) {\n var newActiveTabIndex = index === ctrl.tabs.length - 1 ?\n index - 1 : index + 1 % ctrl.tabs.length;\n ctrl.select(newActiveTabIndex);\n }\n\n ctrl.tabs.splice(index, 1);\n };\n\n $scope.$watch('tabset.active', function(val) {\n if (angular.isDefined(val) && val !== oldIndex) {\n ctrl.select(findTabIndex(val));\n }\n });\n\n var destroyed;\n $scope.$on('$destroy', function() {\n destroyed = true;\n });\n\n function findTabIndex(index) {\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].index === index) {\n return i;\n }\n }\n }\n}])\n\n.directive('uibTabset', function() {\n return {\n transclude: true,\n replace: true,\n scope: {},\n bindToController: {\n active: '=?',\n type: '@'\n },\n controller: 'UibTabsetController',\n controllerAs: 'tabset',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tabset.html';\n },\n link: function(scope, element, attrs) {\n scope.vertical = angular.isDefined(attrs.vertical) ?\n scope.$parent.$eval(attrs.vertical) : false;\n scope.justified = angular.isDefined(attrs.justified) ?\n scope.$parent.$eval(attrs.justified) : false;\n }\n };\n})\n\n.directive('uibTab', ['$parse', function($parse) {\n return {\n require: '^uibTabset',\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tab.html';\n },\n transclude: true,\n scope: {\n heading: '@',\n index: '=?',\n classes: '@?',\n onSelect: '&select', //This callback is called in contentHeadingTransclude\n //once it inserts the tab's content into the dom\n onDeselect: '&deselect'\n },\n controller: function() {\n //Empty controller so other directives can require being 'under' a tab\n },\n controllerAs: 'tab',\n link: function(scope, elm, attrs, tabsetCtrl, transclude) {\n scope.disabled = false;\n if (attrs.disable) {\n scope.$parent.$watch($parse(attrs.disable), function(value) {\n scope.disabled = !! value;\n });\n }\n\n if (angular.isUndefined(attrs.index)) {\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;\n } else {\n scope.index = 0;\n }\n }\n\n if (angular.isUndefined(attrs.classes)) {\n scope.classes = '';\n }\n\n scope.select = function(evt) {\n if (!scope.disabled) {\n var index;\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\n if (tabsetCtrl.tabs[i].tab === scope) {\n index = i;\n break;\n }\n }\n\n tabsetCtrl.select(index, evt);\n }\n };\n\n tabsetCtrl.addTab(scope);\n scope.$on('$destroy', function() {\n tabsetCtrl.removeTab(scope);\n });\n\n //We need to transclude later, once the content container is ready.\n //when this link happens, we're inside a tab heading.\n scope.$transcludeFn = transclude;\n }\n };\n}])\n\n.directive('uibTabHeadingTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTab',\n link: function(scope, elm) {\n scope.$watch('headingElement', function updateHeadingElement(heading) {\n if (heading) {\n elm.html('');\n elm.append(heading);\n }\n });\n }\n };\n})\n\n.directive('uibTabContentTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTabset',\n link: function(scope, elm, attrs) {\n var tab = scope.$eval(attrs.uibTabContentTransclude).tab;\n\n //Now our tab is ready to be transcluded: both the tab heading area\n //and the tab content area are loaded. Transclude 'em both.\n tab.$transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n if (isTabHeading(node)) {\n //Let tabHeadingTransclude know.\n tab.headingElement = node;\n } else {\n elm.append(node);\n }\n });\n });\n }\n };\n\n function isTabHeading(node) {\n return node.tagName && (\n node.hasAttribute('uib-tab-heading') ||\n node.hasAttribute('data-uib-tab-heading') ||\n node.hasAttribute('x-uib-tab-heading') ||\n node.tagName.toLowerCase() === 'uib-tab-heading' ||\n node.tagName.toLowerCase() === 'data-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'x-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'uib:tab-heading'\n );\n }\n});\n\nangular.module('ui.bootstrap.timepicker', [])\n\n.constant('uibTimepickerConfig', {\n hourStep: 1,\n minuteStep: 1,\n secondStep: 1,\n showMeridian: true,\n showSeconds: false,\n meridians: null,\n readonlyInput: false,\n mousewheel: true,\n arrowkeys: true,\n showSpinners: true,\n templateUrl: 'uib/template/timepicker/timepicker.html'\n})\n\n.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {\n var hoursModelCtrl, minutesModelCtrl, secondsModelCtrl;\n var selected = new Date(),\n watchers = [],\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\n meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,\n padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;\n\n $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;\n $element.removeAttr('tabindex');\n\n this.init = function(ngModelCtrl_, inputs) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.unshift(function(modelValue) {\n return modelValue ? new Date(modelValue) : null;\n });\n\n var hoursInputEl = inputs.eq(0),\n minutesInputEl = inputs.eq(1),\n secondsInputEl = inputs.eq(2);\n\n hoursModelCtrl = hoursInputEl.controller('ngModel');\n minutesModelCtrl = minutesInputEl.controller('ngModel');\n secondsModelCtrl = secondsInputEl.controller('ngModel');\n\n var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;\n\n if (mousewheel) {\n this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;\n if (arrowkeys) {\n this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;\n this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n };\n\n var hourStep = timepickerConfig.hourStep;\n if ($attrs.hourStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {\n hourStep = +value;\n }));\n }\n\n var minuteStep = timepickerConfig.minuteStep;\n if ($attrs.minuteStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {\n minuteStep = +value;\n }));\n }\n\n var min;\n watchers.push($scope.$parent.$watch($parse($attrs.min), function(value) {\n var dt = new Date(value);\n min = isNaN(dt) ? undefined : dt;\n }));\n\n var max;\n watchers.push($scope.$parent.$watch($parse($attrs.max), function(value) {\n var dt = new Date(value);\n max = isNaN(dt) ? undefined : dt;\n }));\n\n var disabled = false;\n if ($attrs.ngDisabled) {\n watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {\n disabled = value;\n }));\n }\n\n $scope.noIncrementHours = function() {\n var incrementedSelected = addMinutes(selected, hourStep * 60);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementHours = function() {\n var decrementedSelected = addMinutes(selected, -hourStep * 60);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementMinutes = function() {\n var incrementedSelected = addMinutes(selected, minuteStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementMinutes = function() {\n var decrementedSelected = addMinutes(selected, -minuteStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementSeconds = function() {\n var incrementedSelected = addSeconds(selected, secondStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementSeconds = function() {\n var decrementedSelected = addSeconds(selected, -secondStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noToggleMeridian = function() {\n if (selected.getHours() < 12) {\n return disabled || addMinutes(selected, 12 * 60) > max;\n }\n\n return disabled || addMinutes(selected, -12 * 60) < min;\n };\n\n var secondStep = timepickerConfig.secondStep;\n if ($attrs.secondStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {\n secondStep = +value;\n }));\n }\n\n $scope.showSeconds = timepickerConfig.showSeconds;\n if ($attrs.showSeconds) {\n watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {\n $scope.showSeconds = !!value;\n }));\n }\n\n // 12H / 24H mode\n $scope.showMeridian = timepickerConfig.showMeridian;\n if ($attrs.showMeridian) {\n watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {\n $scope.showMeridian = !!value;\n\n if (ngModelCtrl.$error.time) {\n // Evaluate from template\n var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n refresh();\n }\n } else {\n updateTemplate();\n }\n }));\n }\n\n // Get $scope.hours in 24H mode if valid\n function getHoursFromTemplate() {\n var hours = +$scope.hours;\n var valid = $scope.showMeridian ? hours > 0 && hours < 13 :\n hours >= 0 && hours < 24;\n if (!valid || $scope.hours === '') {\n return undefined;\n }\n\n if ($scope.showMeridian) {\n if (hours === 12) {\n hours = 0;\n }\n if ($scope.meridian === meridians[1]) {\n hours = hours + 12;\n }\n }\n return hours;\n }\n\n function getMinutesFromTemplate() {\n var minutes = +$scope.minutes;\n var valid = minutes >= 0 && minutes < 60;\n if (!valid || $scope.minutes === '') {\n return undefined;\n }\n return minutes;\n }\n\n function getSecondsFromTemplate() {\n var seconds = +$scope.seconds;\n return seconds >= 0 && seconds < 60 ? seconds : undefined;\n }\n\n function pad(value, noPad) {\n if (value === null) {\n return '';\n }\n\n return angular.isDefined(value) && value.toString().length < 2 && !noPad ?\n '0' + value : value.toString();\n }\n\n // Respond on mousewheel spin\n this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n var isScrollingUp = function(e) {\n if (e.originalEvent) {\n e = e.originalEvent;\n }\n //pick correct delta variable depending on event\n var delta = e.wheelDelta ? e.wheelDelta : -e.deltaY;\n return e.detail || delta > 0;\n };\n\n hoursInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());\n }\n e.preventDefault();\n });\n\n minutesInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());\n }\n e.preventDefault();\n });\n\n secondsInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementSeconds() : $scope.decrementSeconds());\n }\n e.preventDefault();\n });\n };\n\n // Respond on up/down arrowkeys\n this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n hoursInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementHours();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementHours();\n $scope.$apply();\n }\n }\n });\n\n minutesInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementMinutes();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementMinutes();\n $scope.$apply();\n }\n }\n });\n\n secondsInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementSeconds();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementSeconds();\n $scope.$apply();\n }\n }\n });\n };\n\n this.setupInputEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n if ($scope.readonlyInput) {\n $scope.updateHours = angular.noop;\n $scope.updateMinutes = angular.noop;\n $scope.updateSeconds = angular.noop;\n return;\n }\n\n var invalidate = function(invalidHours, invalidMinutes, invalidSeconds) {\n ngModelCtrl.$setViewValue(null);\n ngModelCtrl.$setValidity('time', false);\n if (angular.isDefined(invalidHours)) {\n $scope.invalidHours = invalidHours;\n if (hoursModelCtrl) {\n hoursModelCtrl.$setValidity('hours', false);\n }\n }\n\n if (angular.isDefined(invalidMinutes)) {\n $scope.invalidMinutes = invalidMinutes;\n if (minutesModelCtrl) {\n minutesModelCtrl.$setValidity('minutes', false);\n }\n }\n\n if (angular.isDefined(invalidSeconds)) {\n $scope.invalidSeconds = invalidSeconds;\n if (secondsModelCtrl) {\n secondsModelCtrl.$setValidity('seconds', false);\n }\n }\n };\n\n $scope.updateHours = function() {\n var hours = getHoursFromTemplate(),\n minutes = getMinutesFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(true);\n } else {\n refresh('h');\n }\n } else {\n invalidate(true);\n }\n };\n\n hoursInputEl.on('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.hours === null || $scope.hours === '') {\n invalidate(true);\n } else if (!$scope.invalidHours && $scope.hours < 10) {\n $scope.$apply(function() {\n $scope.hours = pad($scope.hours, !padHours);\n });\n }\n });\n\n $scope.updateMinutes = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(undefined, true);\n } else {\n refresh('m');\n }\n } else {\n invalidate(undefined, true);\n }\n };\n\n minutesInputEl.on('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.minutes === null) {\n invalidate(undefined, true);\n } else if (!$scope.invalidMinutes && $scope.minutes < 10) {\n $scope.$apply(function() {\n $scope.minutes = pad($scope.minutes);\n });\n }\n });\n\n $scope.updateSeconds = function() {\n var seconds = getSecondsFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(seconds)) {\n selected.setSeconds(seconds);\n refresh('s');\n } else {\n invalidate(undefined, undefined, true);\n }\n };\n\n secondsInputEl.on('blur', function(e) {\n if (modelIsEmpty()) {\n makeValid();\n } else if (!$scope.invalidSeconds && $scope.seconds < 10) {\n $scope.$apply( function() {\n $scope.seconds = pad($scope.seconds);\n });\n }\n });\n\n };\n\n this.render = function() {\n var date = ngModelCtrl.$viewValue;\n\n if (isNaN(date)) {\n ngModelCtrl.$setValidity('time', false);\n $log.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n } else {\n if (date) {\n selected = date;\n }\n\n if (selected < min || selected > max) {\n ngModelCtrl.$setValidity('time', false);\n $scope.invalidHours = true;\n $scope.invalidMinutes = true;\n } else {\n makeValid();\n }\n updateTemplate();\n }\n };\n\n // Call internally when we know that model is valid.\n function refresh(keyboardChange) {\n makeValid();\n ngModelCtrl.$setViewValue(new Date(selected));\n updateTemplate(keyboardChange);\n }\n\n function makeValid() {\n if (hoursModelCtrl) {\n hoursModelCtrl.$setValidity('hours', true);\n }\n\n if (minutesModelCtrl) {\n minutesModelCtrl.$setValidity('minutes', true);\n }\n\n if (secondsModelCtrl) {\n secondsModelCtrl.$setValidity('seconds', true);\n }\n\n ngModelCtrl.$setValidity('time', true);\n $scope.invalidHours = false;\n $scope.invalidMinutes = false;\n $scope.invalidSeconds = false;\n }\n\n function updateTemplate(keyboardChange) {\n if (!ngModelCtrl.$modelValue) {\n $scope.hours = null;\n $scope.minutes = null;\n $scope.seconds = null;\n $scope.meridian = meridians[0];\n } else {\n var hours = selected.getHours(),\n minutes = selected.getMinutes(),\n seconds = selected.getSeconds();\n\n if ($scope.showMeridian) {\n hours = hours === 0 || hours === 12 ? 12 : hours % 12; // Convert 24 to 12 hour system\n }\n\n $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);\n if (keyboardChange !== 'm') {\n $scope.minutes = pad(minutes);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n\n if (keyboardChange !== 's') {\n $scope.seconds = pad(seconds);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n }\n }\n\n function addSecondsToSelected(seconds) {\n selected = addSeconds(selected, seconds);\n refresh();\n }\n\n function addMinutes(selected, minutes) {\n return addSeconds(selected, minutes*60);\n }\n\n function addSeconds(date, seconds) {\n var dt = new Date(date.getTime() + seconds * 1000);\n var newDate = new Date(date);\n newDate.setHours(dt.getHours(), dt.getMinutes(), dt.getSeconds());\n return newDate;\n }\n\n function modelIsEmpty() {\n return ($scope.hours === null || $scope.hours === '') &&\n ($scope.minutes === null || $scope.minutes === '') &&\n (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));\n }\n\n $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?\n $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;\n\n $scope.incrementHours = function() {\n if (!$scope.noIncrementHours()) {\n addSecondsToSelected(hourStep * 60 * 60);\n }\n };\n\n $scope.decrementHours = function() {\n if (!$scope.noDecrementHours()) {\n addSecondsToSelected(-hourStep * 60 * 60);\n }\n };\n\n $scope.incrementMinutes = function() {\n if (!$scope.noIncrementMinutes()) {\n addSecondsToSelected(minuteStep * 60);\n }\n };\n\n $scope.decrementMinutes = function() {\n if (!$scope.noDecrementMinutes()) {\n addSecondsToSelected(-minuteStep * 60);\n }\n };\n\n $scope.incrementSeconds = function() {\n if (!$scope.noIncrementSeconds()) {\n addSecondsToSelected(secondStep);\n }\n };\n\n $scope.decrementSeconds = function() {\n if (!$scope.noDecrementSeconds()) {\n addSecondsToSelected(-secondStep);\n }\n };\n\n $scope.toggleMeridian = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n if (!$scope.noToggleMeridian()) {\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n addSecondsToSelected(12 * 60 * (selected.getHours() < 12 ? 60 : -60));\n } else {\n $scope.meridian = $scope.meridian === meridians[0] ? meridians[1] : meridians[0];\n }\n }\n };\n\n $scope.blur = function() {\n ngModelCtrl.$setTouched();\n };\n\n $scope.$on('$destroy', function() {\n while (watchers.length) {\n watchers.shift()();\n }\n });\n}])\n\n.directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {\n return {\n require: ['uibTimepicker', '?^ngModel'],\n restrict: 'A',\n controller: 'UibTimepickerController',\n controllerAs: 'timepicker',\n scope: {},\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || uibTimepickerConfig.templateUrl;\n },\n link: function(scope, element, attrs, ctrls) {\n var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (ngModelCtrl) {\n timepickerCtrl.init(ngModelCtrl, element.find('input'));\n }\n }\n };\n}]);\n\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\n\n/**\n * A helper service that can parse typeahead's syntax (string provided by users)\n * Extracted to a separate service for ease of unit testing\n */\n .factory('uibTypeaheadParser', ['$parse', function($parse) {\n // 000001111111100000000000002222222200000000000000003333333333333330000000000044444444000\n var TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\n return {\n parse: function(input) {\n var match = input.match(TYPEAHEAD_REGEXP);\n if (!match) {\n throw new Error(\n 'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\n ' but got \"' + input + '\".');\n }\n\n return {\n itemName: match[3],\n source: $parse(match[4]),\n viewMapper: $parse(match[2] || match[1]),\n modelMapper: $parse(match[1])\n };\n }\n };\n }])\n\n .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\n function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\n var HOT_KEYS = [9, 13, 27, 38, 40];\n var eventDebounceTime = 200;\n var modelCtrl, ngModelOptions;\n //SUPPORTED ATTRIBUTES (OPTIONS)\n\n //minimal no of characters that needs to be entered before typeahead kicks-in\n var minLength = originalScope.$eval(attrs.typeaheadMinLength);\n if (!minLength && minLength !== 0) {\n minLength = 1;\n }\n\n originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\n minLength = !newVal && newVal !== 0 ? 1 : newVal;\n });\n\n //minimal wait time after last character typed before typeahead kicks-in\n var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\n\n //should it restrict model values to the ones selected from the popup only?\n var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\n originalScope.$watch(attrs.typeaheadEditable, function (newVal) {\n isEditable = newVal !== false;\n });\n\n //binding to a variable that indicates if matches are being retrieved asynchronously\n var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\n\n //a function to determine if an event should cause selection\n var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {\n var evt = vals.$event;\n return evt.which === 13 || evt.which === 9;\n };\n\n //a callback executed when a match is selected\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\n\n //should it select highlighted popup value when losing focus?\n var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\n\n //binding to a variable that indicates if there were no results after the query is completed\n var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\n\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\n\n var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\n\n var appendTo = attrs.typeaheadAppendTo ?\n originalScope.$eval(attrs.typeaheadAppendTo) : null;\n\n var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\n\n //If input matches an item of the list exactly, select it automatically\n var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\n\n //binding to a variable that indicates if dropdown is open\n var isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\n\n var showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\n\n //INTERNAL VARIABLES\n\n //model setter executed upon match selection\n var parsedModel = $parse(attrs.ngModel);\n var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\n var $setModelValue = function(scope, newValue) {\n if (angular.isFunction(parsedModel(originalScope)) &&\n ngModelOptions.getOption('getterSetter')) {\n return invokeModelSetter(scope, {$$$p: newValue});\n }\n\n return parsedModel.assign(scope, newValue);\n };\n\n //expressions used by typeahead\n var parserResult = typeaheadParser.parse(attrs.uibTypeahead);\n\n var hasFocus;\n\n //Used to avoid bug in iOS webview where iOS keyboard does not fire\n //mousedown & mouseup events\n //Issue #3699\n var selected;\n\n //create a child scope for the typeahead directive so we are not polluting original scope\n //with typeahead-specific data (matches, query etc.)\n var scope = originalScope.$new();\n var offDestroy = originalScope.$on('$destroy', function() {\n scope.$destroy();\n });\n scope.$on('$destroy', offDestroy);\n\n // WAI-ARIA\n var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n element.attr({\n 'aria-autocomplete': 'list',\n 'aria-expanded': false,\n 'aria-owns': popupId\n });\n\n var inputsContainer, hintInputElem;\n //add read-only input to show hint\n if (showHint) {\n inputsContainer = angular.element('
');\n inputsContainer.css('position', 'relative');\n element.after(inputsContainer);\n hintInputElem = element.clone();\n hintInputElem.attr('placeholder', '');\n hintInputElem.attr('tabindex', '-1');\n hintInputElem.val('');\n hintInputElem.css({\n 'position': 'absolute',\n 'top': '0px',\n 'left': '0px',\n 'border-color': 'transparent',\n 'box-shadow': 'none',\n 'opacity': 1,\n 'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\n 'color': '#999'\n });\n element.css({\n 'position': 'relative',\n 'vertical-align': 'top',\n 'background-color': 'transparent'\n });\n\n if (hintInputElem.attr('id')) {\n hintInputElem.removeAttr('id'); // remove duplicate id if present.\n }\n inputsContainer.append(hintInputElem);\n hintInputElem.after(element);\n }\n\n //pop-up element used to display matches\n var popUpEl = angular.element('
');\n popUpEl.attr({\n id: popupId,\n matches: 'matches',\n active: 'activeIdx',\n select: 'select(activeIdx, evt)',\n 'move-in-progress': 'moveInProgress',\n query: 'query',\n position: 'position',\n 'assign-is-open': 'assignIsOpen(isOpen)',\n debounce: 'debounceUpdate'\n });\n //custom item template\n if (angular.isDefined(attrs.typeaheadTemplateUrl)) {\n popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\n }\n\n if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\n popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\n }\n\n var resetHint = function() {\n if (showHint) {\n hintInputElem.val('');\n }\n };\n\n var resetMatches = function() {\n scope.matches = [];\n scope.activeIdx = -1;\n element.attr('aria-expanded', false);\n resetHint();\n };\n\n var getMatchId = function(index) {\n return popupId + '-option-' + index;\n };\n\n // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\n // This attribute is added or removed automatically when the `activeIdx` changes.\n scope.$watch('activeIdx', function(index) {\n if (index < 0) {\n element.removeAttr('aria-activedescendant');\n } else {\n element.attr('aria-activedescendant', getMatchId(index));\n }\n });\n\n var inputIsExactMatch = function(inputValue, index) {\n if (scope.matches.length > index && inputValue) {\n return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\n }\n\n return false;\n };\n\n var getMatchesAsync = function(inputValue, evt) {\n var locals = {$viewValue: inputValue};\n isLoadingSetter(originalScope, true);\n isNoResultsSetter(originalScope, false);\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\n //it might happen that several async queries were in progress if a user were typing fast\n //but we are interested only in responses that correspond to the current view value\n var onCurrentRequest = inputValue === modelCtrl.$viewValue;\n if (onCurrentRequest && hasFocus) {\n if (matches && matches.length > 0) {\n scope.activeIdx = focusFirst ? 0 : -1;\n isNoResultsSetter(originalScope, false);\n scope.matches.length = 0;\n\n //transform labels\n for (var i = 0; i < matches.length; i++) {\n locals[parserResult.itemName] = matches[i];\n scope.matches.push({\n id: getMatchId(i),\n label: parserResult.viewMapper(scope, locals),\n model: matches[i]\n });\n }\n\n scope.query = inputValue;\n //position pop-up with matches - we need to re-calculate its position each time we are opening a window\n //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\n //due to other elements being rendered\n recalculatePosition();\n\n element.attr('aria-expanded', true);\n\n //Select the single remaining option if user input matches\n if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(0, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(0, evt);\n }\n }\n\n if (showHint) {\n var firstLabel = scope.matches[0].label;\n if (angular.isString(inputValue) &&\n inputValue.length > 0 &&\n firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\n hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\n } else {\n hintInputElem.val('');\n }\n }\n } else {\n resetMatches();\n isNoResultsSetter(originalScope, true);\n }\n }\n if (onCurrentRequest) {\n isLoadingSetter(originalScope, false);\n }\n }, function() {\n resetMatches();\n isLoadingSetter(originalScope, false);\n isNoResultsSetter(originalScope, true);\n });\n };\n\n // bind events only if appendToBody params exist - performance feature\n if (appendToBody) {\n angular.element($window).on('resize', fireRecalculating);\n $document.find('body').on('scroll', fireRecalculating);\n }\n\n // Declare the debounced function outside recalculating for\n // proper debouncing\n var debouncedRecalculate = $$debounce(function() {\n // if popup is visible\n if (scope.matches.length) {\n recalculatePosition();\n }\n\n scope.moveInProgress = false;\n }, eventDebounceTime);\n\n // Default progress type\n scope.moveInProgress = false;\n\n function fireRecalculating() {\n if (!scope.moveInProgress) {\n scope.moveInProgress = true;\n scope.$digest();\n }\n\n debouncedRecalculate();\n }\n\n // recalculate actual position and set new values to scope\n // after digest loop is popup in right position\n function recalculatePosition() {\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\n scope.position.top += element.prop('offsetHeight');\n }\n\n //we need to propagate user's query so we can higlight matches\n scope.query = undefined;\n\n //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\n var timeoutPromise;\n\n var scheduleSearchWithTimeout = function(inputValue) {\n timeoutPromise = $timeout(function() {\n getMatchesAsync(inputValue);\n }, waitTime);\n };\n\n var cancelPreviousTimeout = function() {\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n };\n\n resetMatches();\n\n scope.assignIsOpen = function (isOpen) {\n isOpenSetter(originalScope, isOpen);\n };\n\n scope.select = function(activeIdx, evt) {\n //called from within the $digest() cycle\n var locals = {};\n var model, item;\n\n selected = true;\n locals[parserResult.itemName] = item = scope.matches[activeIdx].model;\n model = parserResult.modelMapper(originalScope, locals);\n $setModelValue(originalScope, model);\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n\n onSelectCallback(originalScope, {\n $item: item,\n $model: model,\n $label: parserResult.viewMapper(originalScope, locals),\n $event: evt\n });\n\n resetMatches();\n\n //return focus to the input element if a match was selected via a mouse click event\n // use timeout to avoid $rootScope:inprog error\n if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\n $timeout(function() { element[0].focus(); }, 0, false);\n }\n };\n\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\n element.on('keydown', function(evt) {\n //typeahead is open and an \"interesting\" key was pressed\n if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\n return;\n }\n\n var shouldSelect = isSelectEvent(originalScope, {$event: evt});\n\n /**\n * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\n * or\n * shift + tab is pressed to bring focus to the previous element\n * then clear the results\n */\n if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\n resetMatches();\n scope.$digest();\n return;\n }\n\n evt.preventDefault();\n var target;\n switch (evt.which) {\n case 27: // escape\n evt.stopPropagation();\n\n resetMatches();\n originalScope.$digest();\n break;\n case 38: // up arrow\n scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n case 40: // down arrow\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n default:\n if (shouldSelect) {\n scope.$apply(function() {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n }\n });\n\n element.on('focus', function (evt) {\n hasFocus = true;\n if (minLength === 0 && !modelCtrl.$viewValue) {\n $timeout(function() {\n getMatchesAsync(modelCtrl.$viewValue, evt);\n }, 0);\n }\n });\n\n element.on('blur', function(evt) {\n if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\n selected = true;\n scope.$apply(function() {\n if (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, scope.debounceUpdate.blur);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n if (!isEditable && modelCtrl.$error.editable) {\n modelCtrl.$setViewValue();\n scope.$apply(function() {\n // Reset validity as we are clearing\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n });\n element.val('');\n }\n hasFocus = false;\n selected = false;\n });\n\n // Keep reference to click handler to unbind it.\n var dismissClickHandler = function(evt) {\n // Issue #3973\n // Firefox treats right click as a click on document\n if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\n resetMatches();\n if (!$rootScope.$$phase) {\n originalScope.$digest();\n }\n }\n };\n\n $document.on('click', dismissClickHandler);\n\n originalScope.$on('$destroy', function() {\n $document.off('click', dismissClickHandler);\n if (appendToBody || appendTo) {\n $popup.remove();\n }\n\n if (appendToBody) {\n angular.element($window).off('resize', fireRecalculating);\n $document.find('body').off('scroll', fireRecalculating);\n }\n // Prevent jQuery cache memory leak\n popUpEl.remove();\n\n if (showHint) {\n inputsContainer.remove();\n }\n });\n\n var $popup = $compile(popUpEl)(scope);\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else if (appendTo) {\n angular.element(appendTo).eq(0).append($popup);\n } else {\n element.after($popup);\n }\n\n this.init = function(_modelCtrl) {\n modelCtrl = _modelCtrl;\n ngModelOptions = extractOptions(modelCtrl);\n\n scope.debounceUpdate = $parse(ngModelOptions.getOption('debounce'))(originalScope);\n\n //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\n //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\n modelCtrl.$parsers.unshift(function(inputValue) {\n hasFocus = true;\n\n if (minLength === 0 || inputValue && inputValue.length >= minLength) {\n if (waitTime > 0) {\n cancelPreviousTimeout();\n scheduleSearchWithTimeout(inputValue);\n } else {\n getMatchesAsync(inputValue);\n }\n } else {\n isLoadingSetter(originalScope, false);\n cancelPreviousTimeout();\n resetMatches();\n }\n\n if (isEditable) {\n return inputValue;\n }\n\n if (!inputValue) {\n // Reset in case user had typed something previously.\n modelCtrl.$setValidity('editable', true);\n return null;\n }\n\n modelCtrl.$setValidity('editable', false);\n return undefined;\n });\n\n modelCtrl.$formatters.push(function(modelValue) {\n var candidateViewValue, emptyViewValue;\n var locals = {};\n\n // The validity may be set to false via $parsers (see above) if\n // the model is restricted to selected values. If the model\n // is set manually it is considered to be valid.\n if (!isEditable) {\n modelCtrl.$setValidity('editable', true);\n }\n\n if (inputFormatter) {\n locals.$model = modelValue;\n return inputFormatter(originalScope, locals);\n }\n\n //it might happen that we don't have enough info to properly render input value\n //we need to check for this situation and simply return model value if we can't apply custom formatting\n locals[parserResult.itemName] = modelValue;\n candidateViewValue = parserResult.viewMapper(originalScope, locals);\n locals[parserResult.itemName] = undefined;\n emptyViewValue = parserResult.viewMapper(originalScope, locals);\n\n return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;\n });\n };\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = ngModelCtrl.$options || {};\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n ngModelOptions = ngModelCtrl.$options;\n }\n\n return ngModelOptions;\n }\n }])\n\n .directive('uibTypeahead', function() {\n return {\n controller: 'UibTypeaheadController',\n require: ['ngModel', 'uibTypeahead'],\n link: function(originalScope, element, attrs, ctrls) {\n ctrls[1].init(ctrls[0]);\n }\n };\n })\n\n .directive('uibTypeaheadPopup', ['$$debounce', function($$debounce) {\n return {\n scope: {\n matches: '=',\n query: '=',\n active: '=',\n position: '&',\n moveInProgress: '=',\n select: '&',\n assignIsOpen: '&',\n debounce: '&'\n },\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\n },\n link: function(scope, element, attrs) {\n scope.templateUrl = attrs.templateUrl;\n\n scope.isOpen = function() {\n var isDropdownOpen = scope.matches.length > 0;\n scope.assignIsOpen({ isOpen: isDropdownOpen });\n return isDropdownOpen;\n };\n\n scope.isActive = function(matchIdx) {\n return scope.active === matchIdx;\n };\n\n scope.selectActive = function(matchIdx) {\n scope.active = matchIdx;\n };\n\n scope.selectMatch = function(activeIdx, evt) {\n var debounce = scope.debounce();\n if (angular.isNumber(debounce) || angular.isObject(debounce)) {\n $$debounce(function() {\n scope.select({activeIdx: activeIdx, evt: evt});\n }, angular.isNumber(debounce) ? debounce : debounce['default']);\n } else {\n scope.select({activeIdx: activeIdx, evt: evt});\n }\n };\n }\n };\n }])\n\n .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {\n return {\n scope: {\n index: '=',\n match: '=',\n query: '='\n },\n link: function(scope, element, attrs) {\n var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';\n $templateRequest(tplUrl).then(function(tplContent) {\n var tplEl = angular.element(tplContent.trim());\n element.replaceWith(tplEl);\n $compile(tplEl)(scope);\n });\n }\n };\n }])\n\n .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {\n var isSanitizePresent;\n isSanitizePresent = $injector.has('$sanitize');\n\n function escapeRegexp(queryToEscape) {\n // Regex: capture the whole query string and replace it with the string that will be used to match\n // the results, for example if the capture is \"a\" the result will be \\a\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n }\n\n function containsHtml(matchItem) {\n return /<.*>/g.test(matchItem);\n }\n\n return function(matchItem, query) {\n if (!isSanitizePresent && containsHtml(matchItem)) {\n $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\n }\n matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\n if (!isSanitizePresent) {\n matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\n }\n return matchItem;\n };\n }]);\n\nangular.module(\"uib/template/accordion/accordion-group.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion-group.html\",\n \"
\\n\" +\n \"

\\n\" +\n \" {{heading}}\\n\" +\n \"

\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/accordion/accordion.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion.html\",\n \"
\");\n}]);\n\nangular.module(\"uib/template/alert/alert.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/alert/alert.html\",\n \"\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/carousel.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/carousel/carousel.html\",\n \"
\\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" previous\\n\" +\n \"\\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" next\\n\" +\n \"\\n\" +\n \"
    1\\\">\\n\" +\n \"
  1. \\n\" +\n \" slide {{ $index + 1 }} of {{ slides.length }}, currently active\\n\" +\n \"
  2. \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/slide.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/carousel/slide.html\",\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/datepicker.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/datepicker/datepicker.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/day.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/datepicker/day.html\",\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 \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
{{::label.abbr}}
{{ weekNumbers[$index] }}\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/month.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/datepicker/month.html\",\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 \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/popup.html\",\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/year.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/datepicker/year.html\",\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 \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepickerPopup/popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/datepickerPopup/popup.html\",\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/modal/backdrop.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/modal/backdrop.html\",\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/modal/window.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/modal/window.html\",\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pager/pager.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/pager/pager.html\",\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pagination/pagination.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/pagination/pagination.html\",\n \"
  • {{::getText('first')}}
  • \\n\" +\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{page.text}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"
  • {{::getText('last')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-html.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-html.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-template.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-template.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/popover/popover.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/bar.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/progressbar/bar.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/progress.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progress.html\",\n \"
    \");\n}]);\n\nangular.module(\"uib/template/progressbar/progressbar.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progressbar.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/rating/rating.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/rating/rating.html\",\n \"\\n\" +\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\n \" \\n\" +\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tab.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tabs/tab.html\",\n \"
  • \\n\" +\n \" {{heading}}\\n\" +\n \"
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tabset.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tabs/tabset.html\",\n \"
    \\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/timepicker/timepicker.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/timepicker/timepicker.html\",\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 \" \\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\" +\n \" :\\n\" +\n \" \\n\" +\n \"
      
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-match.html\",\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-popup.html\",\n \"\\n\" +\n \"\");\n}]);\nangular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibCarouselCss && angular.element(document).find('head').prepend(''); angular.$$uibCarouselCss = true; });\nangular.module('ui.bootstrap.datepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerCss = true; });\nangular.module('ui.bootstrap.position').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend(''); angular.$$uibPositionCss = true; });\nangular.module('ui.bootstrap.datepickerPopup').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerpopupCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerpopupCss = true; });\nangular.module('ui.bootstrap.tooltip').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTooltipCss && angular.element(document).find('head').prepend(''); angular.$$uibTooltipCss = true; });\nangular.module('ui.bootstrap.timepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTimepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibTimepickerCss = true; });\nangular.module('ui.bootstrap.typeahead').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend(''); angular.$$uibTypeaheadCss = true; });\n","/* angularjs-nvd3-directives - v0.0.7 - 2014-04-07\n * http://cmaurer.github.io/angularjs-nvd3-directives\n * Copyright (c) 2014 Christian Maurer; Licensed Apache License, v2.0 \n *\n *!!!! Where forked by (c) billwerk GmbH currenct soucse code based on version 0.0.7\n *\n */\n\n\n( function () {\n 'use strict';\n\n\n angular.module( 'legendDirectives', [] ).directive( 'simpleSvgLegend', function () {\n return {\n restrict: 'EA',\n scope: {\n id: '@',\n width: '@',\n height: '@',\n margin: '@',\n x: '@',\n y: '@',\n labels: '@',\n styles: '@',\n classes: '@',\n shapes: '@',\n padding: '@',\n columns: '@'\n },\n compile: function () {\n return function link( scope, element, attrs ) {\n var id, width, height, margin, widthTracker = 0,\n heightTracker = 0,\n columns = 1,\n columnTracker = 0,\n padding = 10,\n paddingStr, svgNamespace = 'http://www.w3.org/2000/svg',\n svg, g, labels, styles, classes, shapes, x = 0,\n y = 0;\n margin = scope.$eval( attrs.margin ) || {\n left: 5,\n top: 5,\n bottom: 5,\n right: 5\n };\n width = attrs.width === 'undefined' ? element[ 0 ].parentElement.offsetWidth - ( margin.left + margin.right ) : +attrs.width - ( margin.left + margin.right );\n height = attrs.height === 'undefined' ? element[ 0 ].parentElement.offsetHeight - ( margin.top + margin.bottom ) : +attrs.height - ( margin.top + margin.bottom );\n if ( !attrs.id ) {\n //if an id is not supplied, create a random id.\n id = 'legend-' + Math.random();\n } else {\n id = attrs.id;\n }\n if ( attrs.columns ) {\n columns = +attrs.columns;\n }\n if ( attrs.padding ) {\n padding = +attrs.padding;\n }\n paddingStr = padding + '';\n svg = document.createElementNS( svgNamespace, 'svg' );\n if ( attrs.width ) {\n svg.setAttribute( 'width', width + '' );\n }\n if ( attrs.height ) {\n svg.setAttribute( 'height', height + '' );\n }\n svg.setAttribute( 'id', id );\n if ( attrs.x ) {\n x = +attrs.x;\n }\n if ( attrs.y ) {\n y = +attrs.y;\n }\n element.append( svg );\n g = document.createElementNS( svgNamespace, 'g' );\n g.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );\n svg.appendChild( g );\n if ( attrs.labels ) {\n labels = scope.$eval( attrs.labels );\n }\n if ( attrs.styles ) {\n styles = scope.$eval( attrs.styles );\n }\n if ( attrs.classes ) {\n classes = scope.$eval( attrs.classes );\n }\n if ( attrs.shapes ) {\n shapes = scope.$eval( attrs.shapes );\n }\n for ( var i in labels ) {\n if ( labels.hasOwnProperty( i ) ) {\n var shpe = shapes[ i ],\n shape, text, textSize, g1;\n if ( columnTracker % columns === 0 ) {\n widthTracker = 0;\n heightTracker = heightTracker + ( padding + padding * 1.5 );\n }\n g1 = document.createElementNS( svgNamespace, 'g' );\n g1.setAttribute( 'transform', 'translate(' + widthTracker + ', ' + heightTracker + ')' );\n if ( shpe === 'rect' ) {\n shape = document.createElementNS( svgNamespace, 'rect' );\n //x, y, rx, ry\n shape.setAttribute( 'y', 0 - padding / 2 + '' );\n shape.setAttribute( 'width', paddingStr );\n shape.setAttribute( 'height', paddingStr );\n } else if ( shpe === 'ellipse' ) {\n shape = document.createElementNS( svgNamespace, 'ellipse' );\n shape.setAttribute( 'rx', paddingStr );\n shape.setAttribute( 'ry', padding + padding / 2 + '' );\n } else {\n shape = document.createElementNS( svgNamespace, 'circle' );\n shape.setAttribute( 'r', padding / 2 + '' );\n }\n if ( styles && styles[ i ] ) {\n shape.setAttribute( 'style', styles[ i ] );\n }\n if ( classes && classes[ i ] ) {\n shape.setAttribute( 'class', classes[ i ] );\n }\n g1.appendChild( shape );\n widthTracker = widthTracker + shape.clientWidth + ( padding + padding / 2 );\n text = document.createElementNS( svgNamespace, 'text' );\n text.setAttribute( 'transform', 'translate(10, 5)' );\n text.appendChild( document.createTextNode( labels[ i ] ) );\n g1.appendChild( text );\n g.appendChild( g1 );\n textSize = text.clientWidth;\n widthTracker = widthTracker + textSize + ( padding + padding * 0.75 );\n columnTracker++;\n }\n }\n };\n }\n };\n } ).directive( 'nvd3Legend', [\n function () {\n var margin, width, height, id;\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n id: '@',\n margin: '&',\n width: '@',\n height: '@',\n key: '&',\n color: '&',\n align: '@',\n rightalign: '@',\n updatestate: '@',\n radiobuttonmode: '@',\n x: '&',\n y: '&'\n },\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n if ( scope.chart ) {\n return d3.select( '#' + attrs.id + ' svg' ).attr( 'height', height ).attr( 'width', width ).datum( data ).transition().duration( 250 ).call( scope.chart );\n }\n margin = scope.$eval( attrs.margin ) || {\n top: 5,\n right: 0,\n bottom: 5,\n left: 0\n };\n width = attrs.width === undefined ? element[ 0 ].parentElement.offsetWidth - ( margin.left + margin.right ) : +attrs.width - ( margin.left + margin.right );\n height = attrs.height === undefined ? element[ 0 ].parentElement.offsetHeight - ( margin.top + margin.bottom ) : +attrs.height - ( margin.top + margin.bottom );\n if ( width === undefined || width < 0 ) {\n width = 400;\n }\n if ( height === undefined || height < 0 ) {\n height = 20;\n }\n if ( !attrs.id ) {\n //if an id is not supplied, create a random id.\n id = 'legend-' + Math.random();\n } else {\n id = attrs.id;\n }\n nv.addGraph( {\n generate: function () {\n var chart = nv.models.legend().width( width ).height( height ).margin( margin ).align( attrs.align === undefined ? true : attrs.align === 'true' ).rightAlign( attrs.rightalign === undefined ? true : attrs.rightalign === 'true' ).updateState( attrs.updatestate === undefined ? true : attrs.updatestate === 'true' ).radioButtonMode( attrs.radiobuttonmode === undefined ? false : attrs.radiobuttonmode === 'true' ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).key( attrs.key === undefined ? function ( d ) {\n return d.key;\n } : scope.key() );\n if ( !d3.select( '#' + attrs.id + ' svg' )[ 0 ][ 0 ] ) {\n d3.select( '#' + attrs.id ).append( 'svg' );\n }\n d3.select( '#' + attrs.id + ' svg' ).attr( 'height', height ).attr( 'width', width ).datum( data ).transition().duration( 250 ).call( chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n }\n } );\n }\n } );\n }\n };\n }\n ] );\n\n function initializeLegendMargin( scope, attrs ) {\n var margin = ( scope.$eval( attrs.legendmargin ) || {\n left: 0,\n top: 5,\n bottom: 5,\n right: 0\n } );\n if ( typeof ( margin ) !== 'object' ) {\n // we were passed a vanilla int, convert to full margin object\n margin = {\n left: margin,\n top: margin,\n bottom: margin,\n right: margin\n };\n }\n scope.legendmargin = margin;\n }\n\n function configureLegend( chart, scope, attrs ) {\n if ( chart.legend && attrs.showlegend && ( attrs.showlegend === 'true' ) ) {\n initializeLegendMargin( scope, attrs );\n chart.legend.margin( scope.legendmargin );\n chart.legend.width( attrs.legendwidth === undefined ? 400 : ( +attrs.legendwidth ) );\n chart.legend.height( attrs.legendheight === undefined ? 20 : ( +attrs.legendheight ) );\n chart.legend.key( attrs.legendkey === undefined ? function ( d ) {\n return d.key;\n } : scope.legendkey() );\n chart.legend.color( attrs.legendcolor === undefined ? nv.utils.defaultColor() : scope.legendcolor() );\n chart.legend.align( attrs.legendalign === undefined ? true : ( attrs.legendalign === 'true' ) );\n chart.legend.rightAlign( attrs.legendrightalign === undefined ? true : ( attrs.legendrightalign === 'true' ) );\n chart.legend.updateState( attrs.legendupdatestate === undefined ? true : ( attrs.legendupdatestate === 'true' ) );\n chart.legend.radioButtonMode( attrs.legendradiobuttonmode === undefined ? false : ( attrs.legendradiobuttonmode === 'true' ) );\n }\n }\n\n function processEvents( chart, scope ) {\n if ( chart.dispatch ) {\n if ( chart.dispatch.tooltipShow ) {\n chart.dispatch.on( 'tooltipShow.directive', function ( event ) {\n scope.$emit( 'tooltipShow.directive', event );\n } );\n }\n\n if ( chart.dispatch.tooltipHide ) {\n chart.dispatch.on( 'tooltipHide.directive', function ( event ) {\n scope.$emit( 'tooltipHide.directive', event );\n } );\n }\n\n if ( chart.dispatch.beforeUpdate ) {\n chart.dispatch.on( 'beforeUpdate.directive', function ( event ) {\n scope.$emit( 'beforeUpdate.directive', event );\n } );\n }\n\n if ( chart.dispatch.stateChange ) {\n chart.dispatch.on( 'stateChange.directive', function ( event ) {\n scope.$emit( 'stateChange.directive', event );\n } );\n }\n\n if ( chart.dispatch.changeState ) {\n chart.dispatch.on( 'changeState.directive', function ( event ) {\n scope.$emit( 'changeState.directive', event );\n } );\n }\n }\n\n if ( chart.lines ) {\n chart.lines.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.lines.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseout.tooltip.directive', event );\n } );\n\n chart.lines.dispatch.on( 'elementClick.directive', function ( event ) {\n scope.$emit( 'elementClick.directive', event );\n } );\n }\n\n if ( chart.stacked && chart.stacked.dispatch ) {\n chart.stacked.dispatch.on( 'areaClick.toggle.directive', function ( event ) {\n scope.$emit( 'areaClick.toggle.directive', event );\n } );\n\n chart.stacked.dispatch.on( 'tooltipShow.directive', function ( event ) {\n scope.$emit( 'tooltipShow.directive', event );\n } );\n\n chart.stacked.dispatch.on( 'tooltipHide.directive', function ( event ) {\n scope.$emit( 'tooltipHide.directive', event );\n } );\n\n }\n\n if ( chart.interactiveLayer ) {\n if ( chart.interactiveLayer.elementMouseout ) {\n chart.interactiveLayer.dispatch.on( 'elementMouseout.directive', function ( event ) {\n scope.$emit( 'elementMouseout.directive', event );\n } );\n }\n\n if ( chart.interactiveLayer.elementMousemove ) {\n chart.interactiveLayer.dispatch.on( 'elementMousemove.directive', function ( event ) {\n scope.$emit( 'elementMousemove.directive', event );\n } );\n }\n }\n\n if ( chart.discretebar ) {\n chart.discretebar.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.discretebar.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.discretebar.dispatch.on( 'elementClick.directive', function ( event ) {\n scope.$emit( 'elementClick.directive', event );\n } );\n }\n\n if ( chart.multibar ) {\n chart.multibar.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.multibar.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.multibar.dispatch.on( 'elementClick.directive', function ( event ) {\n scope.$emit( 'elementClick.directive', event );\n } );\n\n }\n\n if ( chart.pie ) {\n chart.pie.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.pie.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.pie.dispatch.on( 'elementClick.directive', function ( event ) {\n scope.$emit( 'elementClick.directive', event );\n } );\n }\n\n if ( chart.scatter ) {\n chart.scatter.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.scatter.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n }\n\n if ( chart.bullet ) {\n chart.bullet.dispatch.on( 'elementMouseover.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n\n chart.bullet.dispatch.on( 'elementMouseout.tooltip.directive', function ( event ) {\n scope.$emit( 'elementMouseover.tooltip.directive', event );\n } );\n }\n\n if ( chart.legend ) {\n //'legendClick', 'legendDblclick', 'legendMouseover'\n //stateChange\n chart.legend.dispatch.on( 'stateChange.legend.directive', function ( event ) {\n scope.$emit( 'stateChange.legend.directive', event );\n } );\n chart.legend.dispatch.on( 'legendClick.directive', function ( d, i ) {\n scope.$emit( 'legendClick.directive', d, i );\n } );\n chart.legend.dispatch.on( 'legendDblclick.directive', function ( d, i ) {\n scope.$emit( 'legendDblclick.directive', d, i );\n } );\n chart.legend.dispatch.on( 'legendMouseover.directive', function ( d, i ) {\n scope.$emit( 'legendMouseover.directive', d, i );\n } );\n }\n\n if ( chart.controls ) {\n if ( chart.controls.legendClick ) {\n chart.controls.dispatch.on( 'legendClick.directive', function ( d, i ) {\n scope.$emit( 'legendClick.directive', d, i );\n } );\n }\n }\n\n }\n\n function configureXaxis( chart, scope, attrs ) {\n if ( attrs.xaxisorient ) {\n chart.xAxis.orient( attrs.xaxisorient );\n }\n if ( attrs.xaxisticks ) {\n chart.xAxis.scale().ticks( attrs.xaxisticks );\n }\n if ( attrs.xaxistickvalues ) {\n if ( Array.isArray( scope.$eval( attrs.xaxistickvalues ) ) ) {\n chart.xAxis.tickValues( scope.$eval( attrs.xaxistickvalues ) );\n } else if ( typeof scope.xaxistickvalues() === 'function' ) {\n chart.xAxis.tickValues( scope.xaxistickvalues() );\n }\n }\n if ( attrs.xaxisticksubdivide ) {\n chart.xAxis.tickSubdivide( scope.xaxisticksubdivide() );\n }\n if ( attrs.xaxisticksize ) {\n chart.xAxis.tickSize( scope.xaxisticksize() );\n }\n if ( attrs.xaxistickpadding ) {\n chart.xAxis.tickPadding( scope.xaxistickpadding() );\n }\n if ( attrs.xaxistickformat ) {\n chart.xAxis.tickFormat( scope.xaxistickformat() );\n }\n if ( attrs.xaxislabel ) {\n chart.xAxis.axisLabel( attrs.xaxislabel );\n }\n if ( attrs.xaxisscale ) {\n chart.xAxis.scale( scope.xaxisscale() );\n }\n if ( attrs.xaxisdomain ) {\n if ( Array.isArray( scope.$eval( attrs.xaxisdomain ) ) ) {\n chart.xDomain( scope.$eval( attrs.xaxisdomain ) );\n } else if ( typeof scope.xaxisdomain() === 'function' ) {\n chart.xDomain( scope.xaxisdomain() );\n }\n }\n if ( attrs.xaxisrange ) {\n if ( Array.isArray( scope.$eval( attrs.xaxisrange ) ) ) {\n chart.xRange( scope.$eval( attrs.xaxisrange ) );\n } else if ( typeof scope.xaxisrange() === 'function' ) {\n chart.xRange( scope.xaxisrange() );\n }\n }\n if ( attrs.xaxisrangeband ) {\n chart.xAxis.rangeBand( scope.xaxisrangeband() );\n }\n if ( attrs.xaxisrangebands ) {\n chart.xAxis.rangeBands( scope.xaxisrangebands() );\n }\n if ( attrs.xaxisshowmaxmin ) {\n chart.xAxis.showMaxMin( ( attrs.xaxisshowmaxmin === 'true' ) );\n }\n if ( attrs.xaxishighlightzero ) {\n chart.xAxis.highlightZero( ( attrs.xaxishighlightzero === 'true' ) );\n }\n if ( attrs.xaxisrotatelabels ) {\n chart.xAxis.rotateLabels( ( +attrs.xaxisrotatelabels ) );\n }\n // if(attrs.xaxisrotateylabel){\n // chart.xAxis.rotateYLabel((attrs.xaxisrotateylabel === \"true\"));\n // }\n if ( attrs.xaxisstaggerlabels ) {\n chart.xAxis.staggerLabels( ( attrs.xaxisstaggerlabels === 'true' ) );\n }\n if ( attrs.xaxislabeldistance ) {\n chart.xAxis.axisLabelDistance( ( +attrs.xaxislabeldistance ) );\n }\n }\n\n function configureX2axis( chart, scope, attrs ) {\n if ( attrs.x2axisorient ) {\n chart.x2Axis.orient( attrs.x2axisorient );\n }\n if ( attrs.x2axisticks ) {\n chart.x2Axis.scale().ticks( attrs.x2axisticks );\n }\n if ( attrs.x2axistickvalues ) {\n if ( Array.isArray( scope.$eval( attrs.x2axistickvalues ) ) ) {\n chart.x2Axis.tickValues( scope.$eval( attrs.x2axistickvalues ) );\n } else if ( typeof scope.xaxistickvalues() === 'function' ) {\n chart.x2Axis.tickValues( scope.x2axistickvalues() );\n }\n }\n if ( attrs.x2axisticksubdivide ) {\n chart.x2Axis.tickSubdivide( scope.x2axisticksubdivide() );\n }\n if ( attrs.x2axisticksize ) {\n chart.x2Axis.tickSize( scope.x2axisticksize() );\n }\n if ( attrs.x2axistickpadding ) {\n chart.x2Axis.tickPadding( scope.x2axistickpadding() );\n }\n if ( attrs.x2axistickformat ) {\n chart.x2Axis.tickFormat( scope.x2axistickformat() );\n }\n if ( attrs.x2axislabel ) {\n chart.x2Axis.axisLabel( attrs.x2axislabel );\n }\n if ( attrs.x2axisscale ) {\n chart.x2Axis.scale( scope.x2axisscale() );\n }\n if ( attrs.x2axisdomain ) {\n if ( Array.isArray( scope.$eval( attrs.x2axisdomain ) ) ) {\n chart.x2Axis.domain( scope.$eval( attrs.x2axisdomain ) );\n } else if ( typeof scope.x2axisdomain() === 'function' ) {\n chart.x2Axis.domain( scope.x2axisdomain() );\n }\n }\n if ( attrs.x2axisrange ) {\n if ( Array.isArray( scope.$eval( attrs.x2axisrange ) ) ) {\n chart.x2Axis.range( scope.$eval( attrs.x2axisrange ) );\n } else if ( typeof scope.x2axisrange() === 'function' ) {\n chart.x2Axis.range( scope.x2axisrange() );\n }\n }\n if ( attrs.x2axisrangeband ) {\n chart.x2Axis.rangeBand( scope.x2axisrangeband() );\n }\n if ( attrs.x2axisrangebands ) {\n chart.x2Axis.rangeBands( scope.x2axisrangebands() );\n }\n if ( attrs.x2axisshowmaxmin ) {\n chart.x2Axis.showMaxMin( ( attrs.x2axisshowmaxmin === 'true' ) );\n }\n if ( attrs.x2axishighlightzero ) {\n chart.x2Axis.highlightZero( ( attrs.x2axishighlightzero === 'true' ) );\n }\n if ( attrs.x2axisrotatelables ) {\n chart.x2Axis.rotateLabels( ( +attrs.x2axisrotatelables ) );\n }\n // if(attrs.xaxisrotateylabel){\n // chart.xAxis.rotateYLabel((attrs.xaxisrotateylabel === \"true\"));\n // }\n if ( attrs.x2axisstaggerlabels ) {\n chart.x2Axis.staggerLabels( ( attrs.x2axisstaggerlabels === 'true' ) );\n }\n if ( attrs.x2axislabeldistance ) {\n chart.x2Axis.axisLabelDistance( ( +attrs.x2axislabeldistance ) );\n }\n }\n\n function configureYaxis( chart, scope, attrs ) {\n if ( attrs.yaxisorient ) {\n chart.yAxis.orient( attrs.yaxisorient );\n }\n if ( attrs.yaxisticks ) {\n chart.yAxis.scale().ticks( attrs.yaxisticks );\n }\n if ( attrs.yaxistickvalues ) {\n if ( Array.isArray( scope.$eval( attrs.yaxistickvalues ) ) ) {\n chart.yAxis.tickValues( scope.$eval( attrs.yaxistickvalues ) );\n } else if ( typeof scope.yaxistickvalues() === 'function' ) {\n chart.yAxis.tickValues( scope.yaxistickvalues() );\n }\n }\n if ( attrs.yaxisticksubdivide ) {\n chart.yAxis.tickSubdivide( scope.yaxisticksubdivide() );\n }\n if ( attrs.yaxisticksize ) {\n chart.yAxis.tickSize( scope.yaxisticksize() );\n }\n if ( attrs.yaxistickpadding ) {\n chart.yAxis.tickPadding( scope.yaxistickpadding() );\n }\n if ( attrs.yaxistickformat ) {\n chart.yAxis.tickFormat( scope.yaxistickformat() );\n }\n if ( attrs.yaxislabel ) {\n chart.yAxis.axisLabel( attrs.yaxislabel );\n }\n if ( attrs.yaxisscale ) {\n chart.yAxis.scale( scope.yaxisscale() );\n }\n if ( attrs.yaxisdomain ) {\n if ( Array.isArray( scope.$eval( attrs.yaxisdomain ) ) ) {\n chart.yDomain( scope.$eval( attrs.yaxisdomain ) );\n } else if ( typeof scope.yaxisdomain() === 'function' ) {\n chart.yDomain( scope.yaxisdomain() );\n }\n }\n if ( attrs.yaxisrange ) {\n if ( Array.isArray( scope.$eval( attrs.yaxisrange ) ) ) {\n chart.yRange( scope.$eval( attrs.yaxisrange ) );\n } else if ( typeof scope.yaxisrange() === 'function' ) {\n chart.yRange( scope.yaxisrange() );\n }\n }\n if ( attrs.yaxisrangeband ) {\n chart.yAxis.rangeBand( scope.yaxisrangeband() );\n }\n if ( attrs.yaxisrangebands ) {\n chart.yAxis.rangeBands( scope.yaxisrangebands() );\n }\n if ( attrs.yaxisshowmaxmin ) {\n chart.yAxis.showMaxMin( ( attrs.yaxisshowmaxmin === 'true' ) );\n }\n if ( attrs.yaxishighlightzero ) {\n chart.yAxis.highlightZero( ( attrs.yaxishighlightzero === 'true' ) );\n }\n if ( attrs.yaxisrotatelabels ) {\n chart.yAxis.rotateLabels( ( +attrs.yaxisrotatelabels ) );\n }\n if ( attrs.yaxisrotateylabel ) {\n chart.yAxis.rotateYLabel( ( attrs.yaxisrotateylabel === 'true' ) );\n }\n if ( attrs.yaxisstaggerlabels ) {\n chart.yAxis.staggerLabels( ( attrs.yaxisstaggerlabels === 'true' ) );\n }\n if ( attrs.yaxislabeldistance ) {\n chart.yAxis.axisLabelDistance( ( +attrs.yaxislabeldistance ) );\n }\n }\n\n function configureY1axis( chart, scope, attrs ) {\n if ( attrs.y1axisticks ) {\n chart.y1Axis.scale().ticks( attrs.y1axisticks );\n }\n if ( attrs.y1axistickvalues ) {\n if ( Array.isArray( scope.$eval( attrs.y1axistickvalues ) ) ) {\n chart.y1Axis.tickValues( scope.$eval( attrs.y1axistickvalues ) );\n } else if ( typeof scope.y1axistickvalues() === 'function' ) {\n chart.y1Axis.tickValues( scope.y1axistickvalues() );\n }\n }\n if ( attrs.y1axisticksubdivide ) {\n chart.y1Axis.tickSubdivide( scope.y1axisticksubdivide() );\n }\n if ( attrs.y1axisticksize ) {\n chart.y1Axis.tickSize( scope.y1axisticksize() );\n }\n if ( attrs.y1axistickpadding ) {\n chart.y1Axis.tickPadding( scope.y1axistickpadding() );\n }\n if ( attrs.y1axistickformat ) {\n chart.y1Axis.tickFormat( scope.y1axistickformat() );\n }\n if ( attrs.y1axislabel ) {\n chart.y1Axis.axisLabel( attrs.y1axislabel );\n }\n if ( attrs.y1axisscale ) {\n chart.y1Axis.yScale( scope.y1axisscale() );\n }\n if ( attrs.y1axisdomain ) {\n if ( Array.isArray( scope.$eval( attrs.y1axisdomain ) ) ) {\n chart.y1Axis.domain( scope.$eval( attrs.y1axisdomain ) );\n } else if ( typeof scope.y1axisdomain() === 'function' ) {\n chart.y1Axis.domain( scope.y1axisdomain() );\n }\n }\n if ( attrs.y1axisrange ) {\n if ( Array.isArray( scope.$eval( attrs.y1axisrange ) ) ) {\n chart.y1Axis.range( scope.$eval( attrs.y1axisrange ) );\n } else if ( typeof scope.y1axisrange() === 'function' ) {\n chart.y1Axis.range( scope.y1axisrange() );\n }\n }\n if ( attrs.y1axisrangeband ) {\n chart.y1Axis.rangeBand( scope.y1axisrangeband() );\n }\n if ( attrs.y1axisrangebands ) {\n chart.y1Axis.rangeBands( scope.y1axisrangebands() );\n }\n if ( attrs.y1axisshowmaxmin ) {\n chart.y1Axis.showMaxMin( ( attrs.y1axisshowmaxmin === 'true' ) );\n }\n if ( attrs.y1axishighlightzero ) {\n chart.y1Axis.highlightZero( ( attrs.y1axishighlightzero === 'true' ) );\n }\n if ( attrs.y1axisrotatelabels ) {\n chart.y1Axis.rotateLabels( ( +scope.y1axisrotatelabels ) );\n }\n if ( attrs.y1axisrotateylabel ) {\n chart.y1Axis.rotateYLabel( ( attrs.y1axisrotateylabel === 'true' ) );\n }\n if ( attrs.y1axisstaggerlabels ) {\n chart.y1Axis.staggerlabels( ( attrs.y1axisstaggerlabels === 'true' ) );\n }\n if ( attrs.y1axislabeldistance ) {\n chart.y1Axis.axisLabelDistance( ( +attrs.y1axislabeldistance ) );\n }\n }\n\n function configureY2axis( chart, scope, attrs ) {\n if ( attrs.y2axisticks ) {\n chart.y2Axis.scale().ticks( attrs.y2axisticks );\n }\n if ( attrs.y2axistickvalues ) {\n chart.y2Axis.tickValues( scope.$eval( attrs.y2axistickvalues ) );\n }\n if ( attrs.y2axisticksubdivide ) {\n chart.y2Axis.tickSubdivide( scope.y2axisticksubdivide() );\n }\n if ( attrs.y2axisticksize ) {\n chart.y2Axis.tickSize( scope.y2axisticksize() );\n }\n if ( attrs.y2axistickpadding ) {\n chart.y2Axis.tickPadding( scope.y2axistickpadding() );\n }\n if ( attrs.y2axistickformat ) {\n chart.y2Axis.tickFormat( scope.y2axistickformat() );\n }\n if ( attrs.y2axislabel ) {\n chart.y2Axis.axisLabel( attrs.y2axislabel );\n }\n if ( attrs.y2axisscale ) {\n chart.y2Axis.yScale( scope.y2axisscale() );\n }\n if ( attrs.y2axisdomain ) {\n if ( Array.isArray( scope.$eval( attrs.y2axisdomain ) ) ) {\n chart.y2Axis.domain( scope.$eval( attrs.y2axisdomain ) );\n } else if ( typeof scope.y2axisdomain() === 'function' ) {\n chart.y2Axis.domain( scope.y2axisdomain() );\n }\n }\n if ( attrs.y2axisrange ) {\n if ( Array.isArray( scope.$eval( attrs.y2axisrange ) ) ) {\n chart.y2Axis.range( scope.$eval( attrs.y2axisrange ) );\n } else if ( typeof scope.y2axisrange() === 'function' ) {\n chart.y2Axis.range( scope.y2axisrange() );\n }\n }\n if ( attrs.y2axisrangeband ) {\n chart.y2Axis.rangeBand( scope.y2axisrangeband() );\n }\n if ( attrs.y2axisrangebands ) {\n chart.y2Axis.rangeBands( scope.y2axisrangebands() );\n }\n if ( attrs.y2axisshowmaxmin ) {\n chart.y2Axis.showMaxMin( ( attrs.y2axisshowmaxmin === 'true' ) );\n }\n if ( attrs.y2axishighlightzero ) {\n chart.y2Axis.highlightZero( ( attrs.y2axishighlightzero === 'true' ) );\n }\n if ( attrs.y2axisrotatelabels ) {\n chart.y2Axis.rotateLabels( ( +scope.y2axisrotatelabels ) );\n }\n if ( attrs.y2axisrotateylabel ) {\n chart.y2Axis.rotateYLabel( ( attrs.y2axisrotateylabel === 'true' ) );\n }\n if ( attrs.y2axisstaggerlabels ) {\n chart.y2Axis.staggerlabels( ( attrs.y2axisstaggerlabels === 'true' ) );\n }\n if ( attrs.y2axislabeldistance ) {\n chart.y2Axis.axisLabelDistance( ( +attrs.y2axislabeldistance ) );\n }\n }\n\n function initializeMargin( scope, attrs ) {\n var margin = scope.$eval( attrs.margin ) || {\n left: 50,\n top: 50,\n bottom: 50,\n right: 50\n };\n if ( typeof margin !== 'object' ) {\n // we were passed a vanilla int, convert to full margin object\n margin = {\n left: margin,\n top: margin,\n bottom: margin,\n right: margin\n };\n }\n scope.margin = margin;\n }\n\n function checkElementID( scope, attrs, element, chart, data ) {\n configureXaxis( chart, scope, attrs );\n configureX2axis( chart, scope, attrs );\n configureYaxis( chart, scope, attrs );\n configureY1axis( chart, scope, attrs );\n configureY2axis( chart, scope, attrs );\n configureLegend( chart, scope, attrs );\n processEvents( chart, scope );\n var dataAttributeChartID;\n //randomly generated if id attribute doesn't exist\n if ( !attrs.id ) {\n dataAttributeChartID = 'chartid' + Math.floor( Math.random() * 1000000001 );\n angular.element( element ).attr( 'data-chartid', dataAttributeChartID );\n //if an id is not supplied, create a random id.\n if ( d3.select( '[data-chartid=' + dataAttributeChartID + '] svg' ).empty() ) {\n d3.select( '[data-chartid=' + dataAttributeChartID + ']' ).append( 'svg' ).attr( 'height', scope.height ).attr( 'width', scope.width ).datum( data ).transition().duration( attrs.transitionduration === undefined ? 250 : +attrs.transitionduration ).call( chart );\n } else {\n d3.select( '[data-chartid=' + dataAttributeChartID + '] svg' ).attr( 'height', scope.height ).attr( 'width', scope.width ).datum( data ).transition().duration( attrs.transitionduration === undefined ? 250 : +attrs.transitionduration ).call( chart );\n }\n } else {\n if ( angular.isArray( data ) && data.length === 0 ) {\n d3.select( '#' + attrs.id + ' svg' ).remove();\n }\n if ( d3.select( '#' + attrs.id + ' svg' ).empty() ) {\n d3.select( '#' + attrs.id ).append( 'svg' );\n }\n d3.select( '#' + attrs.id + ' svg' ).attr( 'height', scope.height ).attr( 'width', scope.width ).datum( data ).transition().duration( attrs.transitionduration === undefined ? 250 : +attrs.transitionduration ).call( chart );\n }\n }\n angular.module( 'nvd3ChartDirectives', [] ).directive( 'nvd3LineChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showxaxis: '@',\n showyaxis: '@',\n rightalignyaxis: '@',\n defaultstate: '@',\n nodata: '@',\n margin: '&',\n tooltipcontent: '&',\n color: '&',\n x: '&',\n y: '&',\n forcex: '@',\n forcey: '@',\n isArea: '@',\n interactive: '@',\n clipedge: '@',\n clipvoronoi: '@',\n interpolate: '@',\n callback: '&',\n useinteractiveguideline: '@',\n xaxisorient: '&',\n xaxisticks: '@',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.lineChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceX( attrs.forcex === undefined ? [] : scope.$eval( attrs.forcex ) ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).rightAlignYAxis( attrs.rightalignyaxis === undefined ? false : attrs.rightalignyaxis === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).clipEdge( attrs.clipedge === undefined ? false : attrs.clipedge === 'true' ).clipVoronoi( attrs.clipvoronoi === undefined ? false : attrs.clipvoronoi === 'true' ).interpolate( attrs.interpolate === undefined ? 'linear' : attrs.interpolate ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).isArea( attrs.isarea === undefined ? function ( d ) {\n return d.area;\n } : function () {\n return attrs.isarea === 'true';\n } );\n if ( chart.useInteractiveGuideline ) {\n chart.useInteractiveGuideline( attrs.useinteractiveguideline === undefined ? false : attrs.useinteractiveguideline === 'true' );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3CumulativeLineChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showxaxis: '@',\n showyaxis: '@',\n rightalignyaxis: '@',\n defaultstate: '@',\n nodata: '@',\n margin: '&',\n tooltipcontent: '&',\n color: '&',\n x: '&',\n y: '&',\n forcex: '@',\n forcey: '@',\n isArea: '@',\n interactive: '@',\n clipedge: '@',\n clipvoronoi: '@',\n usevoronoi: '@',\n average: '&',\n rescaley: '@',\n callback: '&',\n useinteractiveguideline: '@',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.cumulativeLineChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceX( attrs.forcex === undefined ? [] : scope.$eval( attrs.forcex ) ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).rightAlignYAxis( attrs.rightalignyaxis === undefined ? false : attrs.rightalignyaxis === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).clipEdge( attrs.clipedge === undefined ? false : attrs.clipedge === 'true' ).clipVoronoi( attrs.clipvoronoi === undefined ? false : attrs.clipvoronoi === 'true' ).useVoronoi( attrs.usevoronoi === undefined ? false : attrs.usevoronoi === 'true' ).average( attrs.average === undefined ? function ( d ) {\n return d.average;\n } : scope.average() ).color( attrs.color === undefined ? d3.scale.category10().range() : scope.color() ).isArea( attrs.isarea === undefined ? function ( d ) {\n return d.area;\n } : attrs.isarea === 'true' );\n //.rescaleY(attrs.rescaley === undefined ? false : (attrs.rescaley === 'true'));\n if ( chart.useInteractiveGuideline ) {\n chart.useInteractiveGuideline( attrs.useinteractiveguideline === undefined ? false : attrs.useinteractiveguideline === 'true' );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3StackedAreaChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showcontrols: '@',\n nodata: '@',\n margin: '&',\n tooltipcontent: '&',\n color: '&',\n x: '&',\n y: '&',\n forcex: '@',\n forcey: '@',\n forcesize: '@',\n interactive: '@',\n usevoronoi: '@',\n clipedge: '@',\n interpolate: '@',\n style: '@',\n order: '@',\n offset: '@',\n size: '&',\n xScale: '&',\n yScale: '&',\n xDomain: '&',\n yDomain: '&',\n xRange: '&',\n yRange: '&',\n sizeDomain: '&',\n callback: '&',\n showxaxis: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n showyaxis: '&',\n useinteractiveguideline: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.stackedAreaChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceX( attrs.forcex === undefined ? [] : scope.$eval( attrs.forcex ) ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).size( attrs.size === undefined ? function ( d ) {\n return d.size === undefined ? 1 : d.size;\n } : scope.size() ).forceSize( attrs.forcesize === undefined ? [] : scope.$eval( attrs.forcesize ) ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).showControls( attrs.showcontrols === undefined ? false : attrs.showcontrols === 'true' ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).clipEdge( attrs.clipedge === undefined ? false : attrs.clipedge === 'true' ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() );\n if ( chart.useInteractiveGuideline ) {\n chart.useInteractiveGuideline( attrs.useinteractiveguideline === undefined ? false : attrs.useinteractiveguideline === 'true' );\n }\n if ( attrs.usevoronoi ) {\n chart.useVoronoi( attrs.usevoronoi === 'true' );\n }\n if ( attrs.style ) {\n chart.style( attrs.style );\n }\n if ( attrs.order ) {\n chart.order( attrs.order );\n }\n if ( attrs.offset ) {\n chart.offset( attrs.offset );\n }\n if ( attrs.interpolate ) {\n chart.interpolate( attrs.interpolate );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n if ( attrs.xscale ) {\n chart.xScale( scope.xscale() );\n }\n if ( attrs.yscale ) {\n chart.yScale( scope.yscale() );\n }\n if ( attrs.xdomain ) {\n if ( Array.isArray( scope.$eval( attrs.xdomain ) ) ) {\n chart.xDomain( scope.$eval( attrs.xdomain ) );\n } else if ( typeof scope.xdomain() === 'function' ) {\n chart.xDomain( scope.xdomain() );\n }\n }\n if ( attrs.ydomain ) {\n if ( Array.isArray( scope.$eval( attrs.ydomain ) ) ) {\n chart.yDomain( scope.$eval( attrs.ydomain ) );\n } else if ( typeof scope.ydomain() === 'function' ) {\n chart.yDomain( scope.ydomain() );\n }\n }\n if ( attrs.sizedomain ) {\n chart.sizeDomain( scope.sizedomain() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3MultiBarChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n tooltipcontent: '&',\n color: '&',\n showcontrols: '@',\n nodata: '@',\n reducexticks: '@',\n staggerlabels: '@',\n rotatelabels: '@',\n margin: '&',\n x: '&',\n y: '&',\n forcey: '@',\n delay: '@',\n stacked: '@',\n callback: '&',\n showxaxis: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n showyaxis: '&',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function (data, chart) {\n //changed by ivan to force apply attribute from attrs\n chart.forceY($attrs.forcey === undefined ? [0] : $scope.$eval($attrs.forcey));\n checkElementID($scope, $attrs, $element, chart, data);\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.multiBarChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).showControls( attrs.showcontrols === undefined ? false : attrs.showcontrols === 'true' ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).reduceXTicks( attrs.reducexticks === undefined ? false : attrs.reducexticks === 'true' ).staggerLabels( attrs.staggerlabels === undefined ? false : attrs.staggerlabels === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).rotateLabels( attrs.rotatelabels === undefined ? 0 : attrs.rotatelabels ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).delay( attrs.delay === undefined ? 1200 : attrs.delay ).stacked( attrs.stacked === undefined ? false : attrs.stacked === 'true' );\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3DiscreteBarChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n tooltips: '@',\n showxaxis: '@',\n showyaxis: '@',\n tooltipcontent: '&',\n staggerlabels: '@',\n color: '&',\n margin: '&',\n nodata: '@',\n x: '&',\n y: '&',\n forcey: '@',\n showvalues: '@',\n valueformat: '&',\n callback: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.discreteBarChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).showValues( attrs.showvalues === undefined ? false : attrs.showvalues === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).staggerLabels( attrs.staggerlabels === undefined ? false : attrs.staggerlabels === 'true' ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() );\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n if ( attrs.valueformat ) {\n chart.valueFormat( scope.valueformat() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3HistoricalBarChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n tooltips: '@',\n tooltipcontent: '&',\n color: '&',\n margin: '&',\n nodata: '@',\n x: '&',\n y: '&',\n forcey: '@',\n isarea: '@',\n interactive: '@',\n clipedge: '@',\n clipvoronoi: '@',\n interpolate: '@',\n highlightPoint: '@',\n clearHighlights: '@',\n callback: '&',\n useinteractiveguideline: '@',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.historicalBarChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() );\n if ( chart.useInteractiveGuideline ) {\n chart.useInteractiveGuideline( attrs.useinteractiveguideline === undefined ? false : attrs.useinteractiveguideline === 'true' );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n if ( attrs.valueformat ) {\n chart.valueFormat( scope.valueformat() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3MultiBarHorizontalChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n tooltipcontent: '&',\n color: '&',\n showcontrols: '@',\n margin: '&',\n nodata: '@',\n x: '&',\n y: '&',\n forcey: '@',\n stacked: '@',\n showvalues: '@',\n valueformat: '&',\n callback: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.multiBarHorizontalChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).showXAxis( attrs.showxaxis === undefined ? false : attrs.showxaxis === 'true' ).showYAxis( attrs.showyaxis === undefined ? false : attrs.showyaxis === 'true' ).forceY( attrs.forcey === undefined ? [ 0 ] : scope.$eval( attrs.forcey ) ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).showControls( attrs.showcontrols === undefined ? false : attrs.showcontrols === 'true' ).showValues( attrs.showvalues === undefined ? false : attrs.showvalues === 'true' ).stacked( attrs.stacked === undefined ? false : attrs.stacked === 'true' );\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n if ( attrs.valueformat ) {\n chart.valueFormat( scope.valueformat() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3PieChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlabels: '@',\n showlegend: '@',\n donutLabelsOutside: '@',\n pieLabelsOutside: '@',\n labelType: '@',\n nodata: '@',\n margin: '&',\n x: '&',\n y: '&',\n color: '&',\n donut: '@',\n donutRatio: '@',\n labelthreshold: '@',\n description: '&',\n tooltips: '@',\n tooltipcontent: '&',\n valueFormat: '&',\n callback: '&',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.pieChart().x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).width( scope.width ).height( scope.height ).margin( scope.margin ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).showLabels( attrs.showlabels === undefined ? false : attrs.showlabels === 'true' ).labelThreshold( attrs.labelthreshold === undefined ? 0.02 : attrs.labelthreshold ).labelType( attrs.labeltype === undefined ? 'key' : attrs.labeltype ).pieLabelsOutside( attrs.pielabelsoutside === undefined ? true : attrs.pielabelsoutside === 'true' ).valueFormat( attrs.valueformat === undefined ? d3.format( ',.2f' ) : attrs.valueformat ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).description( attrs.description === undefined ? function ( d ) {\n return d.description;\n } : scope.description() ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).donutLabelsOutside( attrs.donutlabelsoutside === undefined ? false : attrs.donutlabelsoutside === 'true' ).donut( attrs.donut === undefined ? false : attrs.donut === 'true' ).donutRatio( attrs.donutratio === undefined ? 0.5 : attrs.donutratio );\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3ScatterChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showcontrols: '@',\n showDistX: '@',\n showDistY: '@',\n rightAlignYAxis: '@',\n fisheye: '@',\n xPadding: '@',\n yPadding: '@',\n tooltipContent: '&',\n tooltipXContent: '&',\n tooltipYContent: '&',\n color: '&',\n margin: '&',\n nodata: '@',\n transitionDuration: '@',\n shape: '&',\n onlyCircles: '@',\n interactive: '@',\n x: '&',\n y: '&',\n size: '&',\n forceX: '@',\n forceY: '@',\n forceSize: '@',\n xrange: '&',\n xdomain: '&',\n xscale: '&',\n yrange: '&',\n ydomain: '&',\n yscale: '&',\n sizerange: '&',\n sizedomain: '&',\n zscale: '&',\n callback: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.scatterChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d.x;\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d.y;\n } : scope.y() ).size( attrs.size === undefined ? function ( d ) {\n return d.size === undefined ? 1 : d.size;\n } : scope.size() ).forceX( attrs.forcex === undefined ? [] : scope.$eval( attrs.forcex ) ).forceY( attrs.forcey === undefined ? [] : scope.$eval( attrs.forcey ) ).forceSize( attrs.forcesize === undefined ? [] : scope.$eval( attrs.forcesize ) ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).tooltipContent( attrs.tooltipContent === undefined ? null : scope.tooltipContent() ).tooltipXContent( attrs.tooltipxcontent === undefined ? function ( key, x ) {\n return '' + x + '';\n } : scope.tooltipXContent() ).tooltipYContent( attrs.tooltipycontent === undefined ? function ( key, x, y ) {\n return '' + y + '';\n } : scope.tooltipYContent() ).showControls( attrs.showcontrols === undefined ? false : attrs.showcontrols === 'true' ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).showDistX( attrs.showdistx === undefined ? false : attrs.showdistx === 'true' ).showDistY( attrs.showdisty === undefined ? false : attrs.showdisty === 'true' ).xPadding( attrs.xpadding === undefined ? 0 : +attrs.xpadding ).yPadding( attrs.ypadding === undefined ? 0 : +attrs.ypadding ).fisheye( attrs.fisheye === undefined ? 0 : +attrs.fisheye ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).transitionDuration( attrs.transitionduration === undefined ? 250 : +attrs.transitionduration );\n if ( attrs.shape ) {\n chart.scatter.onlyCircles( false );\n chart.scatter.shape( attrs.shape === undefined ? function ( d ) {\n return d.shape || 'circle';\n } : scope.shape() );\n }\n //'pointActive', 'clipVoronoi', 'clipRadius', 'useVoronoi'\n if ( attrs.xdomain ) {\n if ( Array.isArray( scope.$eval( attrs.xdomain ) ) ) {\n chart.xDomain( scope.$eval( attrs.xdomain ) );\n } else if ( typeof scope.xdomain() === 'function' ) {\n chart.xDomain( scope.xdomain() );\n }\n }\n if ( attrs.ydomain ) {\n if ( Array.isArray( scope.$eval( attrs.ydomain ) ) ) {\n chart.yDomain( scope.$eval( attrs.ydomain ) );\n } else if ( typeof scope.ydomain() === 'function' ) {\n chart.yDomain( scope.ydomain() );\n }\n }\n if ( attrs.xscale ) {\n chart.xDomain( scope.xdomain() );\n chart.xRange( scope.xrange() );\n chart.xScale( scope.xscale() );\n }\n if ( attrs.yscale ) {\n chart.yDomain( scope.ydomain() );\n chart.yRange( scope.yrange() );\n chart.yScale( scope.yscale() );\n }\n if ( attrs.zscale ) {\n chart.sizeDomain( scope.sizedomain() );\n chart.sizeRange( scope.sizerange() );\n chart.zScale( scope.zscale() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3ScatterPlusLineChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n callback: '&'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.scatterPlusLineChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d.x;\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d.y;\n } : scope.y() ).size( attrs.size === undefined ? function ( d ) {\n return d.size === undefined ? 1 : d.size;\n } : scope.size() ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).tooltipContent( attrs.tooltipContent === undefined ? null : scope.tooltipContent() ).tooltipXContent( attrs.tooltipxcontent === undefined ? function ( key, x ) {\n return '' + x + '';\n } : scope.tooltipXContent() ).tooltipYContent( attrs.tooltipycontent === undefined ? function ( key, x, y ) {\n return '' + y + '';\n } : scope.tooltipYContent() ).showControls( attrs.showcontrols === undefined ? false : attrs.showcontrols === 'true' ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).showDistX( attrs.showdistx === undefined ? false : attrs.showdistx === 'true' ).showDistY( attrs.showdisty === undefined ? false : attrs.showdisty === 'true' ).xPadding( attrs.xpadding === undefined ? 0 : +attrs.xpadding ).yPadding( attrs.ypadding === undefined ? 0 : +attrs.ypadding ).fisheye( attrs.fisheye === undefined ? 0 : +attrs.fisheye ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).transitionDuration( attrs.transitionduration === undefined ? 250 : +attrs.transitionduration );\n if ( attrs.shape ) {\n chart.scatter.onlyCircles( false );\n chart.scatter.shape( attrs.shape === undefined ? function ( d ) {\n return d.shape || 'circle';\n } : scope.shape() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n } );\n }\n };\n }\n ] ).directive( 'nvd3LinePlusBarChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showxaxis: '@',\n showyaxis: '@',\n forceX: '@',\n forceY: '@',\n forceY2: '@',\n rightalignyaxis: '@',\n defaultstate: '@',\n nodata: '@',\n margin: '&',\n tooltipcontent: '&',\n color: '&',\n x: '&',\n y: '&',\n clipvoronoi: '@',\n interpolate: '@',\n callback: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n y1axisorient: '&',\n y1axisticks: '&',\n y1axistickvalues: '&y1axistickvalues',\n y1axisticksubdivide: '&',\n y1axisticksize: '&',\n y1axistickpadding: '&',\n y1axistickformat: '&',\n y1axislabel: '@',\n y1axisscale: '&',\n y1axisdomain: '&',\n y1axisrange: '&',\n y1axisrangeband: '&',\n y1axisrangebands: '&',\n y1axisshowmaxmin: '@',\n y1axishighlightzero: '@',\n y1axisrotatelabels: '@',\n y1axisrotateylabel: '@',\n y1axisstaggerlabels: '@',\n y1axisaxislabeldistance: '@',\n y2axisorient: '&',\n y2axisticks: '&',\n y2axistickvalues: '&y2axistickvalues',\n y2axisticksubdivide: '&',\n y2axisticksize: '&',\n y2axistickpadding: '&',\n y2axistickformat: '&',\n y2axislabel: '@',\n y2axisscale: '&',\n y2axisdomain: '&',\n y2axisrange: '&',\n y2axisrangeband: '&',\n y2axisrangebands: '&',\n y2axisshowmaxmin: '@',\n y2axishighlightzero: '@',\n y2axisrotatelabels: '@',\n y2axisrotateylabel: '@',\n y2axisstaggerlabels: '@',\n y2axisaxislabeldistance: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.linePlusBarChart().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).interpolate( attrs.interpolate === undefined ? 'linear' : attrs.interpolate ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() );\n if ( attrs.forcex ) {\n chart.lines.forceX( scope.$eval( attrs.forcex ) );\n chart.bars.forceX( scope.$eval( attrs.forcex ) );\n }\n if ( attrs.forcey ) {\n chart.lines.forceY( scope.$eval( attrs.forcey ) );\n chart.bars.forceY( scope.$eval( attrs.forcey ) );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3LineWithFocusChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n height2: '@',\n id: '@',\n showlegend: '@',\n tooltips: '@',\n showxaxis: '@',\n showyaxis: '@',\n rightalignyaxis: '@',\n defaultstate: '@',\n nodata: '@',\n margin: '&',\n margin2: '&',\n tooltipcontent: '&',\n color: '&',\n x: '&',\n y: '&',\n forceX: '@',\n forceY: '@',\n clipedge: '@',\n clipvoronoi: '@',\n interpolate: '@',\n isArea: '@',\n size: '&',\n defined: '&',\n interactive: '@',\n callback: '&',\n xaxisorient: '&',\n xaxisticks: '&',\n xaxistickvalues: '&xaxistickvalues',\n xaxisticksubdivide: '&',\n xaxisticksize: '&',\n xaxistickpadding: '&',\n xaxistickformat: '&',\n xaxislabel: '@',\n xaxisscale: '&',\n xaxisdomain: '&',\n xaxisrange: '&',\n xaxisrangeband: '&',\n xaxisrangebands: '&',\n xaxisshowmaxmin: '@',\n xaxishighlightzero: '@',\n xaxisrotatelabels: '@',\n xaxisrotateylabel: '@',\n xaxisstaggerlabels: '@',\n xaxisaxislabeldistance: '@',\n x2axisorient: '&',\n x2axisticks: '&',\n x2axistickvalues: '&xaxistickvalues',\n x2axisticksubdivide: '&',\n x2axisticksize: '&',\n x2axistickpadding: '&',\n x2axistickformat: '&',\n x2axislabel: '@',\n x2axisscale: '&',\n x2axisdomain: '&',\n x2axisrange: '&',\n x2axisrangeband: '&',\n x2axisrangebands: '&',\n x2axisshowmaxmin: '@',\n x2axishighlightzero: '@',\n x2axisrotatelables: '@',\n x2axisrotateylabel: '@',\n x2axisstaggerlabels: '@',\n yaxisorient: '&',\n yaxisticks: '&',\n yaxistickvalues: '&yaxistickvalues',\n yaxisticksubdivide: '&',\n yaxisticksize: '&',\n yaxistickpadding: '&',\n yaxistickformat: '&',\n yaxislabel: '@',\n yaxisscale: '&',\n yaxisdomain: '&',\n yaxisrange: '&',\n yaxisrangeband: '&',\n yaxisrangebands: '&',\n yaxisshowmaxmin: '@',\n yaxishighlightzero: '@',\n yaxisrotatelabels: '@',\n yaxisrotateylabel: '@',\n yaxisstaggerlabels: '@',\n yaxislabeldistance: '@',\n y2axisorient: '&',\n y2axisticks: '&',\n y2axistickvalues: '&',\n y2axisticksubdivide: '&',\n y2axisticksize: '&',\n y2axistickpadding: '&',\n y2axistickformat: '&',\n y2axislabel: '@',\n y2axisscale: '&',\n y2axisdomain: '&',\n y2axisrange: '&',\n y2axisrangeband: '&',\n y2axisrangebands: '&',\n y2axisshowmaxmin: '@',\n y2axishighlightzero: '@',\n y2axisrotatelabels: '@',\n y2axisrotateylabel: '@',\n y2axisstaggerlabels: '@',\n legendmargin: '&',\n legendwidth: '@',\n legendheight: '@',\n legendkey: '@',\n legendcolor: '&',\n legendalign: '@',\n legendrightalign: '@',\n legendupdatestate: '@',\n legendradiobuttonmode: '@',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n //setup height 2\n //height 2 is 100\n //margin\n //nvd3 default is {top: 30, right: 30, bottom: 30, left: 60}\n //setup margin 2\n //nvd3 default is {top: 0, right: 30, bottom: 20, left: 60}\n if ( attrs.margin2 ) {\n var margin2 = scope.$eval( attrs.margin2 );\n if ( typeof margin2 !== 'object' ) {\n // we were passed a vanilla int, convert to full margin object\n margin2 = {\n left: margin2,\n top: margin2,\n bottom: margin2,\n right: margin2\n };\n }\n scope.margin2 = margin2;\n } else {\n scope.margin2 = {\n top: 0,\n right: 30,\n bottom: 20,\n left: 60\n };\n }\n //'xDomain', 'yDomain', 'xRange', 'yRange', ''clipEdge', 'clipVoronoi'\n var chart = nv.models.lineWithFocusChart().width( scope.width ).height( scope.height ).height2( attrs.height2 === undefined ? 100 : +attrs.height2 ).margin( scope.margin ).margin2( scope.margin2 ).x( attrs.x === undefined ? function ( d ) {\n return d[ 0 ];\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d[ 1 ];\n } : scope.y() ).forceX( attrs.forcex === undefined ? [] : scope.$eval( attrs.forcex ) ).forceY( attrs.forcey === undefined ? [] : scope.$eval( attrs.forcey ) ).showLegend( attrs.showlegend === undefined ? false : attrs.showlegend === 'true' ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata ).color( attrs.color === undefined ? nv.utils.defaultColor() : scope.color() ).isArea( attrs.isarea === undefined ? function ( d ) {\n return d.area;\n } : function () {\n return attrs.isarea === 'true';\n } ).size( attrs.size === undefined ? function ( d ) {\n return d.size === undefined ? 1 : d.size;\n } : scope.size() ).interactive( attrs.interactive === undefined ? false : attrs.interactive === 'true' ).interpolate( attrs.interpolate === undefined ? 'linear' : attrs.interpolate );\n if ( attrs.defined ) {\n chart.defined( scope.defined() );\n }\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3BulletChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n margin: '&',\n tooltips: '@',\n tooltipcontent: '&',\n orient: '@',\n ranges: '&',\n markers: '&',\n measures: '&',\n tickformat: '&',\n nodata: '@',\n callback: '&',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.bulletChart().width( scope.width ).height( scope.height ).margin( scope.margin ).orient( attrs.orient === undefined ? 'left' : attrs.orient ).tickFormat( attrs.tickformat === undefined ? null : scope.tickformat() ).tooltips( attrs.tooltips === undefined ? false : attrs.tooltips === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata );\n if ( attrs.tooltipcontent ) {\n chart.tooltipContent( scope.tooltipcontent() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3SparklineChart', [\n function () {\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n margin: '&',\n x: '&',\n y: '&',\n color: '&',\n xscale: '&',\n yscale: '&',\n showvalue: '@',\n alignvalue: '@',\n rightalignvalue: '@',\n nodata: '@',\n callback: '&',\n xtickformat: '&',\n ytickformat: '&',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n $scope.d3Call = function ( data, chart ) {\n checkElementID( $scope, $attrs, $element, chart, data );\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n initializeMargin( scope, attrs );\n var chart = nv.models.sparklinePlus().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d.x;\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d.y;\n } : scope.y() ).xTickFormat( attrs.xtickformat === undefined ? d3.format( ',r' ) : scope.xtickformat() ).yTickFormat( attrs.ytickformat === undefined ? d3.format( ',.2f' ) : scope.ytickformat() ).color( attrs.color === undefined ? nv.utils.getColor( [ '#000' ] ) : scope.color() ).showValue( attrs.showvalue === undefined ? true : attrs.showvalue === 'true' ).alignValue( attrs.alignvalue === undefined ? true : attrs.alignvalue === 'true' ).rightAlignValue( attrs.rightalignvalue === undefined ? false : attrs.rightalignvalue === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata );\n if ( attrs.xScale ) {\n chart.xScale( scope.xScale() );\n }\n if ( attrs.yScale ) {\n chart.yScale( scope.yScale() );\n }\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ).directive( 'nvd3SparklineWithBandlinesChart', [\n function () {\n /**\n * http://www.perceptualedge.com/articles/visual_business_intelligence/introducing_bandlines.pdf\n * You need five primary facts about a set of time-series values to construct a bandline:\n * 1) the lowest value,\n * 2) the 25th percentile (i.e., the point at and below which the lowest 25% of the values reside),\n * 3) the median (a.k.a., the 50th percentile, the point at and below which 50% of the values reside),\n * 4) the 75th percentile (i.e., the point at and below which 75% of the values reside), and\n * 5) the highest value.\n */\n return {\n restrict: 'EA',\n scope: {\n data: '=',\n width: '@',\n height: '@',\n id: '@',\n margin: '&',\n x: '&',\n y: '&',\n color: '&',\n xscale: '&',\n yscale: '&',\n showvalue: '@',\n alignvalue: '@',\n rightalignvalue: '@',\n nodata: '@',\n callback: '&',\n xtickformat: '&',\n ytickformat: '&',\n objectequality: '@',\n transitionduration: '@'\n },\n controller: [\n '$scope',\n '$element',\n '$attrs',\n function ( $scope, $element, $attrs ) {\n //expect scope to contain bandlineProperties\n $scope.d3Call = function ( data, chart ) {\n var dataAttributeChartID;\n //randomly generated if id attribute doesn't exist\n var selectedChart;\n var sLineSelection;\n var bandlineData;\n var bandLines;\n if ( !$attrs.id ) {\n dataAttributeChartID = 'chartid' + Math.floor( Math.random() * 1000000001 );\n angular.element( $element ).attr( 'data-chartid', dataAttributeChartID );\n selectedChart = d3.select( '[data-iem-chartid=' + dataAttributeChartID + '] svg' ).attr( 'height', $scope.height ).attr( 'width', $scope.width ).datum( data );\n //chart.yScale()($scope.bandlineProperties.median)\n //var sLineSelection = d3.select('svg#' + $attrs.id + ' g.nvd3.nv-wrap.nv-sparkline');\n sLineSelection = d3.select( '[data-iem-chartid=' + dataAttributeChartID + '] svg' + ' g.nvd3.nv-wrap.nv-sparkline' );\n bandlineData = [\n $scope.bandlineProperties.min,\n $scope.bandlineProperties.twentyFithPercentile,\n $scope.bandlineProperties.median,\n $scope.bandlineProperties.seventyFithPercentile,\n $scope.bandlineProperties.max\n ];\n bandLines = sLineSelection.selectAll( '.nv-bandline' ).data( [ bandlineData ] );\n bandLines.enter().append( 'g' ).attr( 'class', 'nv-bandline' );\n selectedChart.transition().duration( $attrs.transitionduration === undefined ? 250 : +$attrs.transitionduration ).call( chart );\n } else {\n if ( !d3.select( '#' + $attrs.id + ' svg' ) ) {\n d3.select( '#' + $attrs.id ).append( 'svg' );\n }\n selectedChart = d3.select( '#' + $attrs.id + ' svg' ).attr( 'height', $scope.height ).attr( 'width', $scope.width ).datum( data );\n //chart.yScale()($scope.bandlineProperties.median)\n sLineSelection = d3.select( 'svg#' + $attrs.id + ' g.nvd3.nv-wrap.nv-sparkline' );\n bandlineData = [\n $scope.bandlineProperties.min,\n $scope.bandlineProperties.twentyFithPercentile,\n $scope.bandlineProperties.median,\n $scope.bandlineProperties.seventyFithPercentile,\n $scope.bandlineProperties.max\n ];\n bandLines = sLineSelection.selectAll( '.nv-bandline' ).data( [ bandlineData ] );\n bandLines.enter().append( 'g' ).attr( 'class', 'nv-bandline' );\n selectedChart.transition().duration( $attrs.transitionduration === undefined ? 250 : +$attrs.transitionduration ).call( chart );\n }\n };\n }\n ],\n link: function ( scope, element, attrs ) {\n scope.$watch( 'data', function ( data ) {\n if ( data ) {\n //if the chart exists on the scope, do not call addGraph again, update data and call the chart.\n if ( scope.chart ) {\n return scope.d3Call( data, scope.chart );\n }\n nv.addGraph( {\n generate: function () {\n scope.bandlineProperties = {};\n var sortedValues;\n initializeMargin( scope, attrs );\n var chart = nv.models.sparklinePlus().width( scope.width ).height( scope.height ).margin( scope.margin ).x( attrs.x === undefined ? function ( d ) {\n return d.x;\n } : scope.x() ).y( attrs.y === undefined ? function ( d ) {\n return d.y;\n } : scope.y() ).xTickFormat( attrs.xtickformat === undefined ? d3.format( ',r' ) : scope.xtickformat() ).yTickFormat( attrs.ytickformat === undefined ? d3.format( ',.2f' ) : scope.ytickformat() ).color( attrs.color === undefined ? nv.utils.getColor( [ '#000' ] ) : scope.color() ).showValue( attrs.showvalue === undefined ? true : attrs.showvalue === 'true' ).alignValue( attrs.alignvalue === undefined ? true : attrs.alignvalue === 'true' ).rightAlignValue( attrs.rightalignvalue === undefined ? false : attrs.rightalignvalue === 'true' ).noData( attrs.nodata === undefined ? 'No Data Available.' : scope.nodata );\n //calc bandline data\n scope.bandlineProperties.min = d3.min( data, function ( d ) {\n return d[ 1 ];\n } );\n scope.bandlineProperties.max = d3.max( data, function ( d ) {\n return d[ 1 ];\n } );\n sortedValues = data.map( function ( d ) {\n return d[ 1 ];\n } ).sort( function ( a, b ) {\n if ( a[ 0 ] < b[ 0 ] ) {\n return -1;\n } else if ( a[ 0 ] === b[ 0 ] ) {\n return 0;\n } else {\n return 1;\n }\n } );\n scope.bandlineProperties.twentyFithPercentile = d3.quantile( sortedValues, 0.25 );\n scope.bandlineProperties.median = d3.median( sortedValues );\n scope.bandlineProperties.seventyFithPercentile = d3.quantile( sortedValues, 0.75 );\n if ( attrs.xScale ) {\n chart.xScale( scope.xScale() );\n }\n if ( attrs.yScale ) {\n chart.yScale( scope.yScale() );\n }\n configureXaxis( chart, scope, attrs );\n configureYaxis( chart, scope, attrs );\n processEvents( chart, scope );\n scope.d3Call( data, chart );\n nv.utils.windowResize( chart.update );\n scope.chart = chart;\n return chart;\n },\n callback: attrs.callback === undefined ? null : scope.callback()\n } );\n }\n }, attrs.objectequality === undefined ? false : attrs.objectequality === 'true' );\n }\n };\n }\n ] ); //still need to implement\n //sparkbars??\n //nv.models.multiBarTimeSeriesChart\n //nv.models.multiChart\n //nv.models.scatterPlusLineChart\n //nv.models.linePlusBarWithFocusChart\n //dual y-axis chart\n //crossfilter using $services?\n\n}() );\n"]}