{"version":3,"sources":["webpack:///./src/js/component/layout/widget/jarvisWidget.js","webpack:///./src/js/component/layout/widget/jarvisWidgetHeader.js","webpack:///./src/js/component/layout/widget/jarvisWidgetBody.js","webpack:///./src/js/component/layout/widget/widgetGrid.js","webpack:///./node_modules/chart.js/src/helpers/index.js","webpack:///./node_modules/chart.js/src/core/core.defaults.js","webpack:///./src/js/component/layout/widget/jarvisWidgetInfo.js","webpack:///./src/js/component/layout/widget/widgetDefaults.js","webpack:///./node_modules/chart.js/src/core/core.element.js","webpack:///./node_modules/chart.js/src/chart.js","webpack:///./src/js/component/layout/widget/widgetLocalStorage.js","webpack:///./node_modules/chart.js/src/elements/index.js","webpack:///./node_modules/chart.js/src/core/core.ticks.js","webpack:///./node_modules/chart.js/src/helpers/helpers.core.js","webpack:///./node_modules/chartjs-color/index.js","webpack:///./node_modules/chart.js/src/core/core.interaction.js","webpack:///./node_modules/chart.js/src/platforms/platform.js","webpack:///./node_modules/chart.js/src/core/core.js","webpack:///./node_modules/chart.js/src/helpers/helpers.easing.js","webpack:///./node_modules/chart.js/src/helpers/helpers.canvas.js","webpack:///./node_modules/chart.js/src/helpers/helpers.options.js","webpack:///./node_modules/chart.js/src/core/core.helpers.js","webpack:///./node_modules/color-convert/index.js","webpack:///./node_modules/color-convert/conversions.js","webpack:///./node_modules/chartjs-color-string/color-string.js","webpack:///./node_modules/color-name/index.js","webpack:///./node_modules/chart.js/src/elements/element.arc.js","webpack:///./node_modules/chart.js/src/elements/element.line.js","webpack:///./node_modules/chart.js/src/elements/element.point.js","webpack:///./node_modules/chart.js/src/elements/element.rectangle.js","webpack:///./node_modules/chart.js/src/platforms/platform.basic.js","webpack:///./node_modules/chart.js/src/platforms/platform.dom.js","webpack:///./node_modules/chart.js/src/core/core.plugin.js","webpack:///./node_modules/chart.js/src/core/core.animation.js","webpack:///./node_modules/chart.js/src/core/core.controller.js","webpack:///./node_modules/chart.js/src/core/core.datasetController.js","webpack:///./node_modules/chart.js/src/core/core.layoutService.js","webpack:///./node_modules/chart.js/src/core/core.scaleService.js","webpack:///./node_modules/chart.js/src/core/core.scale.js","webpack:///./node_modules/chart.js/src/core/core.tooltip.js","webpack:///./node_modules/chart.js/src/scales/scale.linearbase.js","webpack:///./node_modules/chart.js/src/scales/scale.category.js","webpack:///./node_modules/chart.js/src/scales/scale.linear.js","webpack:///./node_modules/chart.js/src/scales/scale.logarithmic.js","webpack:///./node_modules/chart.js/src/scales/scale.radialLinear.js","webpack:///./node_modules/chart.js/src/scales/scale.time.js","webpack:///./node_modules/chart.js/src/controllers/controller.bar.js","webpack:///./node_modules/chart.js/src/controllers/controller.bubble.js","webpack:///./node_modules/chart.js/src/controllers/controller.doughnut.js","webpack:///./node_modules/chart.js/src/controllers/controller.line.js","webpack:///./node_modules/chart.js/src/controllers/controller.polarArea.js","webpack:///./node_modules/chart.js/src/controllers/controller.radar.js","webpack:///./node_modules/chart.js/src/controllers/controller.scatter.js","webpack:///./node_modules/chart.js/src/charts/Chart.Bar.js","webpack:///./node_modules/chart.js/src/charts/Chart.Bubble.js","webpack:///./node_modules/chart.js/src/charts/Chart.Doughnut.js","webpack:///./node_modules/chart.js/src/charts/Chart.Line.js","webpack:///./node_modules/chart.js/src/charts/Chart.PolarArea.js","webpack:///./node_modules/chart.js/src/charts/Chart.Radar.js","webpack:///./node_modules/chart.js/src/charts/Chart.Scatter.js","webpack:///./node_modules/chart.js/src/plugins/plugin.filler.js","webpack:///./node_modules/chart.js/src/plugins/plugin.legend.js","webpack:///./node_modules/chart.js/src/plugins/plugin.title.js"],"names":["__webpack_require__","_lodash","require","JarvisWidget","_react2","default","createClass","displayName","getPropTypes","autoHeight","_propTypes2","bool","getDefaultProps","colorbutton","editbutton","togglebutton","deletebutton","fullscreenbutton","custombutton","collapsed","sortable","hidden","color","load","refresh","id","uniqueId","contextTypes","updateGrid","func","componentWillMount","this","widgetId","props","componentDidMount","context","componentWillUnmount","$","jarvisWidgets","render","colorClass","customClass","classes","_classnames2","jarviswidget-sortable","autoheight","widgetProps","forEach","option","bind","createElement","_extends","className","ref","children","module","exports","JarvisWidgetInfo","JarvisWidgetHeader","propTypes","title","oneOfType","string","element","dataForId","widgetInfoTitle","widgetInfoContent","_props","Header","_getHeaderIconClass","data-for","data-tip","_getWidgetInfoPopover","iconClass","fa","classnames","content","JarvisWidgetBody","hasPadding","widget-body","no-padding","jarvisWidgetsDefaults","WidgetGridActions","destroyGrid","gridElement","gridOptions","$grid","gridCounter","WidgetGrid","gridId","assign","widgets","PropTypes","childContextTypes","registerWidget","unregisterWidget","statics","getChildContext","self","ReactDOM","findDOMNode","refs","_registerWidget","_unregisterWidget","onDelete","onWidgetDelete","componentWillReceiveProps","nextProps","forceUpdate","componentDidUpdate","prevProps","prevState","widgetElement","callback","push","filter","item","$widgetElement","get","widget","find","ACTION_DELETE","easing","canvas","options","helpers","_set","scope","values","merge","_react","AppPopover","_ThemeService","mixins","POPOVER_REF","showAppPopover","hideAppPopover","onMouseEnter","_showPopover","onMouseLeave","_hidePopover","onTouchStart","event","point","getPopoverPoint","xCoord","themeService","layoutDirection","ThemeService","LAYOUT_DIRECTION","RIGHT_TO_LEFT","clientX","popoverWidth","showAppPopoverObject","x","y","clientY","width","height","position","autoHide","grid","localStorage","deleteSettingsKey","settingsKeyLabel","deletePositionKey","positionKeyLabel","buttonsHidden","toggleButton","toggleClass","toggleSpeed","onToggle","deleteButton","deleteMsg","deleteClass","deleteSpeed","editButton","editPlaceholder","editClass","editSpeed","onEdit","colorButton","fullscreenButton","fullscreenClass","fullscreenDiff","onFullscreen","customButton","buttonOrder","opacity","dragHandle","placeholderClass","indicator","indicatorTime","ajax","timestampPlaceholder","timestampFormat","refreshButton","refreshButtonClass","labelError","labelUpdated","labelRefresh","labelDelete","afterLoad","rtl","onChange","onSave","ajaxnav","Element","configuration","extend","initialize","apply","arguments","prototype","pivot","me","_view","clone","_model","_start","transition","ease","model","start","view","i","ilen","key","actual","origin","target","type","c0","c1","keys","Object","length","hasOwnProperty","valid","mix","rgbString","isFinite","interpolate","tooltipPosition","hasValue","isNumber","inherits","Chart","defaults","elements","Interaction","platform","plugins","register","window","canvasHelpers","_UserStoreService","originalGetItem","Storage","getItem","originalSetItem","setItem","originalRemoveItem","removeItem","isWidgetItem","String","indexOf","UserStoreService","getInstance","getSync","call","value","patch","Arc","Line","Point","Rectangle","generators","linear","generationOptions","dataRange","spacing","ticks","stepSize","niceRange","niceNum","max","min","maxTicks","niceMin","Math","floor","niceMax","ceil","almostWhole","numSpaces","almostEquals","round","undefined","j","logarithmic","exp","significand","valueOrDefault","tickVal","pow","log10","endExp","endSignificand","minNotZero","lastTick","formatters","isArray","tickValue","index","delta","abs","logDelta","tickString","numDecimal","toFixed","remain","toExponential","noop","uid","isNullOrUndef","Array","toString","isObject","defaultValue","valueAtIndexOrDefault","fn","args","thisArg","each","loopable","reverse","len","arrayEquals","a0","a1","v0","v1","source","map","klen","k","_merger","tval","sval","_mergerIf","mergeIf","sources","merger","setFn","extensions","ChartElement","constructor","Surrogate","__super__","callCallback","array","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","convert","Color","obj","rgb","hsl","hsv","hwb","cmyk","alpha","vals","getRgba","setValues","getHsla","getHwb","r","red","l","lightness","v","w","whiteness","c","cyan","isValid","setSpace","rgbArray","hslArray","hsvArray","hwbArray","concat","cmykArray","rgbaArray","hslaArray","val","setChannel","green","blue","hue","saturation","saturationv","blackness","magenta","yellow","black","hexString","rgbaString","percentString","hslString","hslaString","hwbString","keyword","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","level","contrastRatio","dark","light","negate","lighten","ratio","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mixinColor","weight","p","a","w1","w2","toJSON","result","prop","slice","console","error","spaces","maxes","getValues","space","charAt","capped","chans","sname","svalues","getRelativePosition","e","chart","native","parseVisibleItems","handler","meta","jlen","data","datasets","isDatasetVisible","getDatasetMeta","skip","getIntersectItems","inRange","getNearestItems","intersect","distanceMetric","minDistance","Number","POSITIVE_INFINITY","nearestItems","center","getCenterPoint","distance","getDistanceMetricForAxis","axis","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","indexMode","items","dataset","datasetIndex","_index","modes","single","label","_datasetIndex","x-axis","nearest","sort","b","ret","getArea","intersectsItem","inXRange","inYRange","basic","dom","implementation","_enabled","acquireContext","releaseContext","addEventListener","removeEventListener","responsive","responsiveAnimationDuration","maintainAspectRatio","events","hover","onHover","mode","animationDuration","onClick","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","showLines","layout","padding","top","right","bottom","left","config","construct","effects","t","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","s","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","easingEffects","clear","ctx","clearRect","roundedRect","radius","rx","ry","moveTo","lineTo","quadraticCurveTo","rect","drawPoint","style","edgeLength","xOffset","yOffset","size","isNaN","beginPath","arc","closePath","fill","SQRT2","fillRect","strokeRect","offset","leftX","topY","sideSize","stroke","drawImage","clipArea","area","save","clip","unclipArea","restore","previous","flip","steppedLine","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","drawRoundedRectangle","toLineHeight","matches","match","toPadding","resolve","inputs","parseMaxStyle","styleValue","node","parentProperty","valueInPixels","parseInt","parentNode","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","document","defaultView","constrainedNode","getComputedStyle","constrainedContainer","hasCNode","hasCContainer","infinity","configMerge","scaleMerge","scaleService","getScaleDefaults","scale","slen","where","collection","filterCallback","filtered","findIndex","findNextWhere","arrayToSearch","startIndex","currentItem","findPreviousWhere","n","parseFloat","epsilon","rounded","reduce","NEGATIVE_INFINITY","sign","log","LN10","toRadians","toDegrees","radians","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distanceBetweenPoints","aliasPixel","pixelWidth","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fb","EPSILON","splineCurveMonotone","points","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","nextItem","loop","previousItem","range","exponent","fraction","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","evt","mouseX","mouseY","originalEvent","currentTarget","srcElement","boundingRect","getBoundingClientRect","touches","paddingLeft","getStyle","paddingTop","paddingRight","paddingBottom","currentDevicePixelRatio","getConstraintWidth","getConstraintHeight","getMaximumWidth","container","clientWidth","cw","getMaximumHeight","clientHeight","h","ch","el","property","currentStyle","getPropertyValue","retinaScale","forceRatio","pixelRatio","devicePixelRatio","fontString","pixelSize","fontStyle","fontFamily","longestText","font","arrayOfThings","cache","gc","garbageCollect","longest","thing","measureText","nestedThing","gcLen","splice","textWidth","numberOfLabelLines","numberOfLines","CanvasGradient","global","getHoverColor","colorValue","CanvasPattern","conversions","Converter","arg","pair","exec","from","to","convs","routeSpace","fspace","rgb2hsl","g","rgb2hsv","rgb2hwb","rgb2cmyk","rgb2keyword","reverseKeywords","JSON","stringify","rgb2xyz","rgb2lab","xyz","z","hsl2rgb","t1","t2","t3","hsv2rgb","hi","f","q","hwb2rgb","wh","bl","cmyk2rgb","m","xyz2rgb","xyz2lab","lab2xyz","lab","y2","lab2lch","lab2rgb","lch2lab","lch","hr","keyword2rgb","cssKeywords","rgb2lch","hsl2hsv","hsl2hwb","hsl2cmyk","hsl2keyword","hsv2hsl","sl","hsv2hwb","hsv2cmyk","hsv2keyword","hwb2hsl","hwb2hsv","hwb2cmyk","hwb2keyword","cmyk2hsl","cmyk2hsv","cmyk2hwb","cmyk2keyword","keyword2hsl","keyword2hsv","keyword2hwb","keyword2cmyk","keyword2lab","keyword2xyz","xyz2lch","lch2xyz","lch2rgb","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellowgreen","colorNames","rgba","percentaString","hsla","num","hexDouble","str","toUpperCase","getRgb","getHsl","getAlpha","reverseNames","name","backgroundColor","borderColor","borderWidth","inLabelRange","vm","hoverRadius","chartX","chartY","pointRelativePosition","startAngle","endAngle","betweenAngles","withinRadius","innerRadius","outerRadius","halfAngle","halfRadius","centreAngle","rangeFromCentre","draw","_chart","sA","eA","strokeStyle","lineWidth","fillStyle","lineJoin","globalDefaults","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","currentVM","spanGaps","_children","globalOptionLineElements","lastDrawnIndex","_loop","lineCap","setLineDash","lineDashOffset","xRange","hitRadius","pointStyle","hoverBorderWidth","chartArea","isVertical","bar","getBarBounds","x1","x2","y1","halfWidth","base","halfHeight","rectangle","borderSkipped","signX","signY","horizontal","barSize","halfStroke","borderLeft","borderRight","borderTop","borderBottom","corners","startCorner","cornerAt","corner","bounds","getContext","EXPANDO_KEY","CSS_PREFIX","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","eventListenerOptions","supports","defineProperty","passive","listener","createEvent","nativeEvent","addResizeListener","ticking","expando","resizer","cls","cssText","innerHTML","expand","childNodes","shrink","_reset","scrollLeft","scrollTop","onScroll","createResizer","proxy","renderProxy","animationName","reflow","offsetParent","classList","add","watchForRender","insertBefore","firstChild","removeResizeListener","remove","unwatchForRender","removeChild","css","keyframes","_style","setAttribute","getElementsByTagName","appendChild","createTextNode","getElementById","renderHeight","getAttribute","renderWidth","initial","display","displayWidth","aspectRatio","displayHeight","initCanvas","removeAttribute","proxies","pos","fromNativeEvent","addEvent","removeEvent","_plugins","_cacheId","plugin","unregister","idx","count","getAll","notify","hook","descriptor","params","method","descriptors","opts","pluginService","PluginBase","animation","duration","onProgress","onComplete","Animation","currentStep","numSteps","onAnimationProgress","onAnimationComplete","animationService","frameDuration","animations","dropFrames","request","addAnimation","lazy","animating","cancelAnimation","startDigest","startTime","Date","now","framesToDrop","advance","endTime","set","positionIsHorizontal","types","instances","controllers","labels","initConfig","_bufferedRender","controller","update","bindEvents","resize","ensureScalesHaveIDs","buildScales","initToolTip","stop","silent","newWidth","newHeight","newSize","onResize","scalesOptions","scales","scaleOptions","xAxes","xAxisOptions","yAxes","yAxisOptions","dtype","dposition","isDefault","scaleType","scaleClass","getScaleConstructor","mergeTicksOptions","addScalesToLayout","buildOrUpdateControllers","newControllers","destroyDatasetMeta","updateIndex","ControllerClass","Error","resetElements","reset","tooltip","newOptions","_options","tooltips","_data","buildOrUpdateElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","layoutService","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","easingValue","boxes","box","drawDatasets","_drawTooltip","drawDataset","getElementAtEvent","getElementsAtEvent","getElementsAtXAxis","getElementsAtEventForMode","getDatasetAtEvent","_meta","xAxisID","yAxisID","getVisibleDatasetCount","generateLegend","legendCallback","destroy","unbindEvents","toBase64Image","toDataURL","Tooltip","_chartInstance","listeners","_listeners","eventHandler","updateHoverStyle","enabled","changed","handleEvent","bufferedRequest","hoverOptions","active","Controller","arrayEvents","unlistenArrayEvents","stub","_chartjs","DatasetController","datasetElementType","dataElementType","linkScales","addElements","getMeta","getDataset","getScaleForId","scaleID","createMetaDataset","createMetaData","metaData","addElementAndReset","updateElement","configurable","enumerable","res","object","resyncElements","removeHoverStyle","elementOpts","custom","setHoverStyle","hoverBackgroundColor","hoverBorderColor","numMeta","numData","insertElements","onDataPush","onDataPop","pop","onDataShift","shift","onDataSplice","onDataUnshift","filterByPosition","sortByWeight","_tmpIndex_","addBox","fullWidth","removeBox","layoutItem","configure","layoutOptions","leftPadding","rightPadding","topPadding","bottomPadding","leftBoxes","rightBoxes","topBoxes","bottomBoxes","chartAreaBoxes","chartWidth","chartHeight","chartAreaHeight","verticalBoxWidth","horizontalBoxHeight","maxChartAreaWidth","maxChartAreaHeight","minBoxSizes","minSize","isHorizontal","maxHorizontalLeftPadding","maxHorizontalRightPadding","maxVerticalTopPadding","maxVerticalBottomPadding","horizontalBox","getPadding","boxPadding","verticalBox","totalLeftBoxesWidth","totalRightBoxesWidth","totalTopBoxesHeight","totalBottomBoxesHeight","fitBox","minBoxSize","scaleMargin","leftPaddingAddition","topPaddingAddition","newMaxChartAreaHeight","newMaxChartAreaWidth","placeBox","minBox","constructors","registerScaleType","scaleConstructor","scaleDefaults","updateScaleDefaults","additions","Ticks","labelsFromTicks","getLineValue","offsetGridLines","lineValue","getPixelForTick","gridLines","drawBorder","drawOnChartArea","drawTicks","tickMarkLength","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","lineHeight","beginAtZero","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","minor","major","computeTextSize","tick","parseFontOptions","fontSize","family","parseLineHeight","Scale","getTicks","_ticks","beforeUpdate","maxWidth","maxHeight","margins","longestTextCache","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","beforeTickToLabelConversion","convertTicksToLabels","afterTickToLabelConversion","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","afterUpdate","tickOpts","userCallback","tickFont","labelRotation","cosRotation","originalLabelWidth","labelWidth","tickWidth","angleRadians","scaleLabelOpts","gridLineOpts","isFullWidth","deltaHeight","largestTextWidth","tallestLabelHeightInLines","lineSpace","tickPadding","longestLabelWidth","labelHeight","firstLabelWidth","lastLabelWidth","handleMargins","getRightValue","rawValue","NaN","getLabelForIndex","getPixelForValue","getValueForPixel","pixel","finalVal","innerHeight","getPixelForDecimal","decimal","valueOffset","getBasePixel","getBaseValue","_autoSkip","skipRatio","optionTicks","tickCount","labelRotationRadians","longestRotatedLabel","maxTicksLimit","optionMajorTicks","isRotated","tickFontColor","fontColor","majorTickFontColor","majorTickFont","tl","scaleLabelFontColor","scaleLabelFont","scaleLabelPadding","itemsToDraw","xTickStart","xTickEnd","yTickStart","yTickEnd","lineColor","tx1","ty1","tx2","ty2","labelX","labelY","zeroLineIndex","textAlign","textBaseline","labelYOffset","xLineValue","labelXOffset","isLeft","yLineValue","glWidth","glColor","glBorderDash","glBorderDashOffset","rotation","itemToDraw","translate","fillText","scaleLabelX","scaleLabelY","halfLineHeight","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","cornerRadius","multiKeyBackground","displayColors","callbacks","beforeTitle","tooltipItems","labelCount","xLabel","afterTitle","beforeBody","beforeLabel","tooltipItem","yLabel","labelColor","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","mergeOpacity","colorString","pushOrConcat","toPush","getBaseModel","tooltipOpts","xAlign","yAlign","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","legendColorBackground","_lastActive","getTitle","lines","getBeforeBody","getBody","bodyItems","bodyItem","before","after","getAfterBody","getFooter","xScale","yScale","existingModel","_active","alignment","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","positioners","_eventPosition","_xScale","_yScale","_scale","itemSort","body","dataPoints","combinedBodyLength","titleLineCount","footerLineCount","widthPadding","maxLineWidth","getTooltipSize","paddingAndSize","radiusAndPadding","getBackgroundPoint","lf","rf","olf","orf","yf","midX","midY","determineAlignment","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","tmp","drawTitle","pt","drawBody","xLinePadding","fillLineOfText","drawColorBoxes","textColor","drawFooter","drawBackground","hasTooltipContent","average","eventPosition","nearestElement","d","tp","LinearScaleBase","handleTickRangeOptions","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","end","ticksAsNumbers","DatasetScale","getLabels","xLabels","yLabels","minIndex","maxIndex","valueCategory","offsetAmt","valueWidth","widthOffset","valueHeight","heightOffset","horz","valueDimension","defaultConfig","LinearScale","IDMatches","hasStacks","stacked","stack","valuesPerStack","join","positiveValues","negativeValues","relativePoints","valuesForType","minVal","maxVal","tickFontSize","rightValue","innerDimension","LogarithmicScale","tickValues","newVal","animate","angleLines","circular","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","pointLabels","getValueCount","getPointLabelFontOptions","pointLabelOptions","determineLimits","getTextAlignForAngle","text","adjustPointPositionForLabelHeight","textSize","numberOrZero","param","LinearRadialScale","xCenter","yCenter","drawingArea","largestPossibleRadius","pointPosition","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","getIndexAngle","hLimits","vLimits","setReductions","fitWithPointLabels","setCenterPoint","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","getDistanceFromCenterForValue","scalingFactor","distanceFromCenter","thisAngle","getPointPositionForValue","getBasePosition","tickFontStyle","tickFontFamily","tickLabelFont","yCenterOffset","drawRadiusLine","angleLineOpts","pointLabelOpts","outerDistance","outerPosition","pointLabelPosition","pointLabelFontColor","drawPointLabels","moment","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","arrayUnique","hash","out","table","skey","tkey","mid","i0","i1","lo","lookup","prev","span","momentify","parser","format","parse","input","time","startOf","valueOf","determineMajorUnit","unit","generate","capacity","timeOpts","minUnit","interval","factor","determineUnitForAutoTicks","unitStepSize","weekday","isoWeekday","majorTicksEnabled","first","last","milliseconds","determineStepSize","TimeScale","warn","timestamp","timestamps","endOf","_horizontal","_table","_timestamps","getLabelCapacity","_unit","diff","as","determineUnitForFormatting","_majorUnit","distribution","curr","buildLookupTable","_offsets","upper","lower","computeOffsets","majorUnit","ticksFromTimestamps","tooltipFormat","tickFormatFunction","formatOverride","formats","displayFormats","minorFormat","majorFormat","majorTime","majorTickOpts","formatter","getPixelForOffset","getLabelWidth","ticksOpts","tickLabelWidth","sinRotation","exampleTime","exampleLabel","innerWidth","displayFormat","categoryPercentage","barPercentage","rects","_ruler","getRuler","rectangleOptions","datasetLabel","updateElementGeometry","vscale","getValueScale","ruler","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","head","getValueScaleId","getIndexScaleId","getIndexScale","getStackCount","stacks","getStackIndex","stackCount","pixels","imeta","ivalue","leftSampleSize","rightSampleSize","leftCategorySize","fullBarSize","stackIndex","barThickness","maxBarThickness","Infinity","rectangleElementOptions","horizontalBar","dataPoint","bubble","_resolveElementOptions","dsIndex","dataIndex","animateRotate","animateScale","legend","generateLabels","ds","arcOpts","legendItem","cutoutPercentage","circumference","dataLabel","doughnut","pie","getRingIndex","ringIndex","availableWidth","availableHeight","contains0","contains90","contains180","contains270","cutout","getMaxBorderWidth","radiusLength","offsetX","offsetY","total","calculateTotal","animationOpts","centerX","centerY","calculateCircumference","arcs","hoverWidth","lineEnabled","showLine","lineElementOptions","lineTension","stepped","cubicInterpolationMode","updateBezierControlPoints","getPointBackgroundColor","pointBackgroundColor","getPointBorderColor","pointBorderColor","getPointBorderWidth","pointBorderWidth","pointOptions","pointRadius","pointHitRadius","calculatePointY","dsMeta","sumPos","sumNeg","stackedRightValue","controlPoints","capControlPoint","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","polarArea","countVisibleElements","visibleCount","datasetStartAngle","resetRadius","radar","pointElementOptions","scatter","Bar","Bubble","Doughnut","PolarArea","Radar","Scatter","filler","propagate","mappers","boundary","decodeFill","computeBoundary","scaleBottom","scaleTop","scaleZero","resolveTarget","visited","visible","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","afterDatasetsUpdate","$filler","mapper","beforeDatasetDraw","p0","p1","d0","d1","doFill","ci","boxWidth","lineDash","getBoxWidth","labelOpts","usePointStyle","createNewLegendAndAttach","legendOpts","Legend","legendHitBoxes","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","globalDefault","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","lineDefault","legendWidth","cursor","isLineWidthZero","offSet","drawLegendBox","halfFontSize","xLeft","yMiddle","lh","hitBox","beforeInit","afterEvent","createNewTitleBlockAndAttach","titleOpts","Title","titleBlock","lineCount","titleX","titleY","titleFont"],"mappings":"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AAA,cACAC,QAAA,YACAhf,KAAA,YACAif,SAAA,UACAC,SAAA,YACAC,cAAA,aACAC,SAAA,cACAC,UAAA,UACAC,SAAA,cACAC,UAAA,cACAC,YAAA,YACAC,eAAA,YACAC,WAAA,YACAC,WAAA,aACAC,QAAA,UACAC,WAAA,cACAC,aAAA,cACAC,cAAA,YACAC,cAAA,WACAC,cAAA,WACAC,cAAA,YACAC,WAAA,YACAC,SAAA,aACAC,YAAA,YACAC,QAAA,cACAC,QAAA,cACAC,WAAA,aACAC,UAAA,YACAC,YAAA,cACAC,YAAA,YACAC,QAAA,YACAC,UAAA,cACAC,WAAA,cACAC,KAAA,YACAC,UAAA,aACAC,KAAA,cACApgB,MAAA,UACAqgB,YAAA,aACAC,KAAA,cACAC,SAAA,cACAC,QAAA,cACAC,UAAA,YACAC,OAAA,WACAC,MAAA,cACAC,MAAA,cACAC,SAAA,cACAC,cAAA,cACAC,UAAA,YACAC,aAAA,cACAC,UAAA,cACAC,WAAA,cACAC,UAAA,cACAC,qBAAA,cACAC,UAAA,cACAC,WAAA,cACAC,UAAA,cACAC,UAAA,cACAC,YAAA,cACAC,cAAA,aACAC,aAAA,cACAC,eAAA,cACAC,eAAA,cACAC,eAAA,cACAC,YAAA,cACAC,KAAA,UACAC,UAAA,YACAC,MAAA,cACA5hB,QAAA,YACA6hB,OAAA,UACAC,iBAAA,cACAC,WAAA,UACAC,aAAA,aACAC,aAAA,cACAC,eAAA,aACAC,gBAAA,cACAC,kBAAA,YACAC,gBAAA,aACAC,gBAAA,aACAC,aAAA,YACAC,UAAA,cACAC,UAAA,cACAC,SAAA,cACAC,YAAA,cACAC,KAAA,UACAC,QAAA,cACAC,MAAA,YACAC,UAAA,aACAC,OAAA,YACAC,UAAA,WACAC,OAAA,cACAC,cAAA,cACAC,UAAA,cACAC,cAAA,cACAC,cAAA,cACAC,WAAA,cACAC,UAAA,cACAC,KAAA,aACAC,KAAA,cACAC,KAAA,cACAC,WAAA,cACAC,OAAA,YACAC,cAAA,aACAxlB,IAAA,UACAylB,UAAA,cACAC,UAAA,aACAC,YAAA,YACAC,OAAA,cACAC,WAAA,aACAC,SAAA,YACAC,SAAA,cACAC,OAAA,YACAC,OAAA,cACAC,QAAA,cACAC,UAAA,aACAC,UAAA,cACAC,UAAA,cACAC,KAAA,cACAC,YAAA,YACAC,UAAA,aACAC,IAAA,cACAC,KAAA,YACAC,QAAA,cACAC,OAAA,YACAC,UAAA,aACAC,OAAA,cACAC,MAAA,cACAC,MAAA,cACAC,WAAA,cACAtlB,OAAA,YACAulB,YAAA,cAGAvM,EAAA,GACA,QAAApkB,KAAAmmB,EACA/B,EAAAC,KAAAC,UAAA6B,EAAAnmB,6BCvrBA,IAAA4wB,EAAiB/+B,EAAQ,MAqBzB,SAAAuX,EAAAzT,GACA,GAAAA,EAAA,CAGA,IAMAkT,EAAA,QACA4E,EAAA,EACA4L,EAAA1jB,EAAA0jB,MARA,wBASA,GAAAA,EAAA,CACAA,IAAA,GACA,QAAAvZ,EAAA,EAAqBA,EAAA+I,EAAApI,OAAgBX,IACrC+I,EAAA/I,GAAAga,SAAAT,EAAAvZ,GAAAuZ,EAAAvZ,GAAA,SAGA,GAAAuZ,EAAA1jB,EAAA0jB,MAdA,wBAcA,CACAA,IAAA,GACA,IAAAvZ,EAAA,EAAqBA,EAAA+I,EAAApI,OAAgBX,IACrC+I,EAAA/I,GAAAga,SAAAT,EAAAtL,MAAA,EAAAjO,EAAA,EAAAA,EAAA,YAGA,GAAAuZ,EAAA1jB,EAAA0jB,MAnBA,4FAmBA,CACA,IAAAvZ,EAAA,EAAqBA,EAAA+I,EAAApI,OAAgBX,IACrC+I,EAAA/I,GAAAga,SAAAT,EAAAvZ,EAAA,IAEA2N,EAAAqO,WAAAzC,EAAA,SAEA,GAAAA,EAAA1jB,EAAA0jB,MAxBA,8GAwBA,CACA,IAAAvZ,EAAA,EAAqBA,EAAA+I,EAAApI,OAAgBX,IACrC+I,EAAA/I,GAAAiE,KAAAO,MAAA,KAAAwX,WAAAzC,EAAAvZ,EAAA,KAEA2N,EAAAqO,WAAAzC,EAAA,SAEA,GAAAA,EAAA1jB,EAAA0jB,MA7BA,SA6BA,CACA,kBAAAA,EAAA,GACA,gBAGA,KADAxQ,EAAA+nB,EAAAvX,EAAA,KAEA,OAIA,IAAAvZ,EAAA,EAAkBA,EAAA+I,EAAApI,OAAgBX,IAClC+I,EAAA/I,GAAAmb,EAAApS,EAAA/I,GAAA,OASA,OAHA2N,EAJAA,GAAA,GAAAA,EAIAwN,EAAAxN,EAAA,KAHA,EAKA5E,EAAA,GAAA4E,EACA5E,GAGA,SAAAS,EAAA3T,GACA,GAAAA,EAAA,CAGA,IACA0jB,EAAA1jB,EAAA0jB,MADA,4GAEA,GAAAA,EAAA,CACA,IAAAnQ,EAAA4S,WAAAzC,EAAA,IAKA,OAJA4B,EAAAnB,SAAAT,EAAA,WACA4B,EAAAa,WAAAzC,EAAA,WACA4B,EAAAa,WAAAzC,EAAA,WACA4B,EAAA5D,MAAAnO,GAAA,EAAAA,EAAA,QAKA,SAAAK,EAAA5T,GACA,GAAAA,EAAA,CAGA,IACA0jB,EAAA1jB,EAAA0jB,MADA,0GAEA,GAAAA,EAAA,CACA,IAAAnQ,EAAA4S,WAAAzC,EAAA,IAKA,OAJA4B,EAAAnB,SAAAT,EAAA,WACA4B,EAAAa,WAAAzC,EAAA,WACA4B,EAAAa,WAAAzC,EAAA,WACA4B,EAAA5D,MAAAnO,GAAA,EAAAA,EAAA,QAyCA,SAAAqC,EAAAslB,EAAA3nB,GAIA,YAHA3E,IAAA2E,IACAA,OAAA3E,IAAAssB,EAAA,GAAAA,EAAA,MAEA,QAAAA,EAAA,QAAAA,EAAA,QAAAA,EAAA,GACA,KAAA3nB,EAAA,IAcA,SAAA4nB,EAAAD,EAAA3nB,GAIA,cAHAnF,KAAAO,MAAAusB,EAAA,YAGA,MAFA9sB,KAAAO,MAAAusB,EAAA,YAEA,MADA9sB,KAAAO,MAAAusB,EAAA,YACA,OAAA3nB,GAAA2nB,EAAA,WAUA,SAAAnlB,EAAAqlB,EAAA7nB,GAIA,YAHA3E,IAAA2E,IACAA,OAAA3E,IAAAwsB,EAAA,GAAAA,EAAA,MAEA,QAAAA,EAAA,QAAAA,EAAA,SAAAA,EAAA,SACA7nB,EAAA,IAkBA,SAAA+R,EAAA+V,EAAAptB,EAAAD,GACA,OAAAI,KAAAH,IAAAG,KAAAJ,IAAAC,EAAAotB,GAAArtB,GAGA,SAAAstB,EAAAD,GACA,IAAAE,EAAAF,EAAA5qB,SAAA,IAAA+qB,cACA,OAAAD,EAAAzwB,OAAA,MAAAywB,IAjNA97B,EAAAC,QAAA,CACA+T,UACAE,UACA8nB,OA4GA,SAAAz7B,GACA,IAAAk7B,EAAAznB,EAAAzT,GACA,OAAAk7B,KAAA9iB,MAAA,MA7GAsjB,OAgHA,SAAA17B,GACA,IAAAo7B,EAAAznB,EAAA3T,GACA,OAAAo7B,KAAAhjB,MAAA,MAjHAxE,SACA+nB,SAmHA,SAAA37B,GACA,IAAAwT,EAAAC,EAAAzT,GACA,GAAAwT,EACA,OAAAA,EAAA,GAEA,GAAAA,EAAAG,EAAA3T,GACA,OAAAwT,EAAA,GAEA,GAAAA,EAAAI,EAAA5T,GACA,OAAAwT,EAAA,IA1HAmC,UA+HA,SAAAzC,GACA,UAAAooB,EAAApoB,EAAA,IAAAooB,EAAApoB,EAAA,IACAooB,EAAApoB,EAAA,KAhIAhI,UAmIA,SAAAgwB,EAAA3nB,GACA,GAAAA,EAAA,GAAA2nB,EAAA,IAAAA,EAAA,KACA,OAAAtlB,EAAAslB,EAAA3nB,GAEA,aAAA2nB,EAAA,QAAAA,EAAA,QAAAA,EAAA,QAtIAtlB,aACAC,cAgJA,SAAAqlB,EAAA3nB,GACA,GAAAA,EAAA,GAAA2nB,EAAA,IAAAA,EAAA,KACA,OAAAC,EAAAD,EAAA3nB,GAEA,IAAAM,EAAAzF,KAAAO,MAAAusB,EAAA,YACA9M,EAAAhgB,KAAAO,MAAAusB,EAAA,YACApf,EAAA1N,KAAAO,MAAAusB,EAAA,YAEA,aAAArnB,EAAA,MAAAua,EAAA,MAAAtS,EAAA,MAvJAqf,iBACArlB,UAgKA,SAAAslB,EAAA7nB,GACA,GAAAA,EAAA,GAAA6nB,EAAA,IAAAA,EAAA,KACA,OAAArlB,EAAAqlB,EAAA7nB,GAEA,aAAA6nB,EAAA,QAAAA,EAAA,SAAAA,EAAA,SAnKArlB,aACAC,UA+KA,SAAA3C,EAAAE,QACA3E,IAAA2E,IACAA,OAAA3E,IAAAyE,EAAA,GAAAA,EAAA,MAEA,aAAAA,EAAA,QAAAA,EAAA,SAAAA,EAAA,aACAzE,IAAA2E,GAAA,IAAAA,EAAA,KAAAA,EAAA,SAnLA0C,QAsLA,SAAA/C,GACA,OAAA0oB,EAAA1oB,EAAAkF,MAAA,QAeA,IAAAwjB,EAAA,GACA,QAAAC,KAAAZ,EACAW,EAAAX,EAAAY,yCCzNAp8B,EAAAC,QAAA,CACA0yB,UAAA,cACAC,aAAA,cACAC,KAAA,YACAC,WAAA,cACAC,MAAA,cACAC,MAAA,cACAC,OAAA,cACAhd,MAAA,QACAid,eAAA,cACAxd,KAAA,UACAyd,WAAA,aACAC,MAAA,YACAC,UAAA,cACAC,UAAA,aACAC,WAAA,YACAC,UAAA,aACAC,MAAA,aACAC,eAAA,cACAC,SAAA,cACAC,QAAA,YACAhf,KAAA,YACAif,SAAA,UACAC,SAAA,YACAC,cAAA,aACAC,SAAA,cACAC,UAAA,UACAC,SAAA,cACAC,UAAA,cACAC,YAAA,YACAC,eAAA,YACAC,WAAA,YACAC,WAAA,aACAC,QAAA,UACAC,WAAA,cACAC,aAAA,cACAC,cAAA,YACAC,cAAA,WACAC,cAAA,WACAC,cAAA,YACAC,WAAA,YACAC,SAAA,aACAC,YAAA,YACAC,QAAA,cACAC,QAAA,cACAC,WAAA,aACAC,UAAA,YACAC,YAAA,cACAC,YAAA,YACAC,QAAA,YACAC,UAAA,cACAC,WAAA,cACAC,KAAA,YACAC,UAAA,aACAC,KAAA,cACApgB,MAAA,UACAqgB,YAAA,aACAC,KAAA,cACAC,SAAA,cACAC,QAAA,cACAC,UAAA,YACAC,OAAA,WACAC,MAAA,cACAC,MAAA,cACAC,SAAA,cACAC,cAAA,cACAC,UAAA,YACAC,aAAA,cACAC,UAAA,cACAC,WAAA,cACAC,UAAA,cACAC,qBAAA,cACAC,UAAA,cACAC,WAAA,cACAC,UAAA,cACAC,UAAA,cACAC,YAAA,cACAC,cAAA,aACAC,aAAA,cACAC,eAAA,cACAC,eAAA,cACAC,eAAA,cACAC,YAAA,cACAC,KAAA,UACAC,UAAA,YACAC,MAAA,cACA5hB,QAAA,YACA6hB,OAAA,UACAC,iBAAA,cACAC,WAAA,UACAC,aAAA,aACAC,aAAA,cACAC,eAAA,aACAC,gBAAA,cACAC,kBAAA,YACAC,gBAAA,aACAC,gBAAA,aACAC,aAAA,YACAC,UAAA,cACAC,UAAA,cACAC,SAAA,cACAC,YAAA,cACAC,KAAA,UACAC,QAAA,cACAC,MAAA,YACAC,UAAA,aACAC,OAAA,YACAC,UAAA,WACAC,OAAA,cACAC,cAAA,cACAC,UAAA,cACAC,cAAA,cACAC,cAAA,cACAC,WAAA,cACAC,UAAA,cACAC,KAAA,aACAC,KAAA,cACAC,KAAA,cACAC,WAAA,cACAC,OAAA,YACAC,cAAA,aACAxlB,IAAA,UACAylB,UAAA,cACAC,UAAA,aACAC,YAAA,YACAC,OAAA,cACAC,WAAA,aACAC,SAAA,YACAC,SAAA,cACAC,OAAA,YACAC,OAAA,cACAC,QAAA,cACAC,UAAA,aACAC,UAAA,cACAC,UAAA,cACAC,KAAA,cACAC,YAAA,YACAC,UAAA,aACAC,IAAA,cACAC,KAAA,YACAC,QAAA,cACAC,OAAA,YACAC,UAAA,aACAC,OAAA,cACAC,MAAA,cACAC,MAAA,cACAC,WAAA,cACAtlB,OAAA,YACAulB,YAAA,iDCpJA,IAAAtvB,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACA2H,SAAA,CACAiW,IAAA,CACAka,gBAAApwB,EAAA2hB,OAAAhQ,aACA0e,YAAA,OACAC,YAAA,MAKAv8B,EAAAC,QAAAuJ,EAAAE,OAAA,CACA8yB,aAAA,SAAAhS,GACA,IAAAiS,EAAAj+B,KAAAyL,MAEA,QAAAwyB,GACA9tB,KAAAe,IAAA8a,EAAAiS,EAAAt2B,EAAA,GAAAwI,KAAAe,IAAA+sB,EAAArb,OAAAqb,EAAAC,YAAA,IAKAriB,QAAA,SAAAsiB,EAAAC,GACA,IAAAH,EAAAj+B,KAAAyL,MAEA,GAAAwyB,EAAA,CAQA,IAPA,IAAAI,EAAAv4B,EAAA+iB,kBAAAoV,EAAA,CAA8Dt2B,EAAAw2B,EAAAv2B,EAAAw2B,IAC9DjV,EAAAkV,EAAAlV,MACA5M,EAAA8hB,EAAA9hB,SAGA+hB,EAAAL,EAAAK,WACAC,EAAAN,EAAAM,SACAA,EAAAD,GACAC,GAAA,EAAApuB,KAAA+Q,GAEA,KAAAiI,EAAAoV,GACApV,GAAA,EAAAhZ,KAAA+Q,GAEA,KAAAiI,EAAAmV,GACAnV,GAAA,EAAAhZ,KAAA+Q,GAIA,IAAAsd,EAAArV,GAAAmV,GAAAnV,GAAAoV,EACAE,EAAAliB,GAAA0hB,EAAAS,aAAAniB,GAAA0hB,EAAAU,YAEA,OAAAH,GAAAC,EAEA,UAGAniB,eAAA,WACA,IAAA2hB,EAAAj+B,KAAAyL,MACAmzB,GAAAX,EAAAK,WAAAL,EAAAM,UAAA,EACAM,GAAAZ,EAAAS,YAAAT,EAAAU,aAAA,EACA,OACAh3B,EAAAs2B,EAAAt2B,EAAAwI,KAAA8Q,IAAA2d,GAAAC,EACAj3B,EAAAq2B,EAAAr2B,EAAAuI,KAAAiR,IAAAwd,GAAAC,IAIA9gB,QAAA,WACA,IAAAkgB,EAAAj+B,KAAAyL,MACA,OAAA0E,KAAA+Q,KAAA+c,EAAAM,SAAAN,EAAAK,aAAA,EAAAnuB,KAAA+Q,MAAA/Q,KAAAe,IAAA+sB,EAAAU,YAAA,GAAAxuB,KAAAe,IAAA+sB,EAAAS,YAAA,KAGAtxB,gBAAA,WACA,IAAA6wB,EAAAj+B,KAAAyL,MACAqzB,EAAAb,EAAAK,YAAAL,EAAAM,SAAAN,EAAAK,YAAA,EACAS,GAAAd,EAAAU,YAAAV,EAAAS,aAAA,EAAAT,EAAAS,YAEA,OACA/2B,EAAAs2B,EAAAt2B,EAAAwI,KAAA8Q,IAAA6d,GAAAC,EACAn3B,EAAAq2B,EAAAr2B,EAAAuI,KAAAiR,IAAA0d,GAAAC,IAIAC,KAAA,WACA,IAAAvc,EAAAziB,KAAAi/B,OAAAxc,IACAwb,EAAAj+B,KAAAyL,MACAyzB,EAAAjB,EAAAK,WACAa,EAAAlB,EAAAM,SAEA9b,EAAAiB,YAEAjB,EAAAkB,IAAAsa,EAAAt2B,EAAAs2B,EAAAr2B,EAAAq2B,EAAAU,YAAAO,EAAAC,GACA1c,EAAAkB,IAAAsa,EAAAt2B,EAAAs2B,EAAAr2B,EAAAq2B,EAAAS,YAAAS,EAAAD,GAAA,GAEAzc,EAAAmB,YACAnB,EAAA2c,YAAAnB,EAAAH,YACArb,EAAA4c,UAAApB,EAAAF,YAEAtb,EAAA6c,UAAArB,EAAAJ,gBAEApb,EAAAoB,OACApB,EAAA8c,SAAA,QAEAtB,EAAAF,aACAtb,EAAA4B,+CCrGA,IAAA5W,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBuhC,EAAA/xB,EAAA2hB,OAEA3hB,EAAA1H,KAAA,UACA2H,SAAA,CACA+xB,KAAA,CACAza,QAAA,GACA6Y,gBAAA2B,EAAApgB,aACA2e,YAAA,EACAD,YAAA0B,EAAApgB,aACAsgB,eAAA,OACAC,WAAA,GACAC,iBAAA,EACAC,gBAAA,QACAC,iBAAA,EACAjc,MAAA,MAKAriB,EAAAC,QAAAuJ,EAAAE,OAAA,CACA8zB,KAAA,WACA,IAOArtB,EAAAiY,EAAA/E,EAAAkb,EANA9B,EADAj+B,KACAyL,MACAgX,EAFAziB,KAEAi/B,OAAAxc,IACAud,EAAA/B,EAAA+B,SACA3V,EAJArqB,KAIAigC,UAAA9lB,QACA+lB,EAAAV,EAAA9xB,SAAA+xB,KACAU,GAAA,EA2BA,IAjCAngC,KAUAogC,OAAA/V,EAAAxd,QACAwd,EAAAllB,KAAAklB,EAAA,IAGA5H,EAAAgC,OAGAhC,EAAA4d,QAAApC,EAAAyB,gBAAAQ,EAAAR,eAGAjd,EAAA6d,aACA7d,EAAA6d,YAAArC,EAAA0B,YAAAO,EAAAP,YAGAld,EAAA8d,eAAAtC,EAAA2B,kBAAAM,EAAAN,iBACAnd,EAAA8c,SAAAtB,EAAA4B,iBAAAK,EAAAL,gBACApd,EAAA4c,UAAApB,EAAAF,aAAAmC,EAAAnC,YACAtb,EAAA2c,YAAAnB,EAAAH,aAAA0B,EAAApgB,aAGAqD,EAAAiB,YACAyc,GAAA,EAEAxuB,EAAA,EAAiBA,EAAA0Y,EAAAxd,SAAuB8E,EACxCiY,EAAAS,EAAA1Y,GACAkT,EAAA/e,EAAAslB,aAAAf,EAAA1Y,GACAouB,EAAAnW,EAAAne,MAGA,IAAAkG,EACAouB,EAAApkB,OACA8G,EAAAM,OAAAgd,EAAAp4B,EAAAo4B,EAAAn4B,GACAu4B,EAAAxuB,IAGAkT,GAAA,IAAAsb,EAAAtb,EAAAwF,EAAA8V,GAEAJ,EAAApkB,OACAwkB,IAAAxuB,EAAA,IAAAquB,IAAA,IAAAG,EAEA1d,EAAAM,OAAAgd,EAAAp4B,EAAAo4B,EAAAn4B,GAGA9B,EAAAF,OAAAod,OAAAP,EAAAoC,EAAApZ,MAAAme,EAAAne,OAEA00B,EAAAxuB,IAKA8Q,EAAA4B,SACA5B,EAAAmC,gDCtFA,IAAAnX,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBmhB,EAAA3R,EAAA2hB,OAAAhQ,aAkBA,SAAAohB,EAAAxU,GACA,IAAAiS,EAAAj+B,KAAAyL,MACA,QAAAwyB,GAAA9tB,KAAAe,IAAA8a,EAAAiS,EAAAt2B,EAAA,GAAAwI,KAAAe,IAAA+sB,EAAArb,OAAAqb,EAAAwC,UAAA,GAlBAhzB,EAAA1H,KAAA,UACA2H,SAAA,CACA1G,MAAA,CACA4b,OAAA,EACA8d,WAAA,SACA7C,gBAAAze,EACA0e,YAAA1e,EACA2e,YAAA,EAEA0C,UAAA,EACAvC,YAAA,EACAyC,iBAAA,MAeAn/B,EAAAC,QAAAuJ,EAAAE,OAAA,CACA2Q,QAAA,SAAAmQ,EAAAC,GACA,IAAAgS,EAAAj+B,KAAAyL,MACA,QAAAwyB,GAAA9tB,KAAAe,IAAA8a,EAAAiS,EAAAt2B,EAAA,GAAAwI,KAAAe,IAAA+a,EAAAgS,EAAAr2B,EAAA,GAAAuI,KAAAe,IAAA+sB,EAAAwC,UAAAxC,EAAArb,OAAA,IAGAob,aAAAwC,EACAviB,SAAAuiB,EACAtiB,SAbA,SAAA+N,GACA,IAAAgS,EAAAj+B,KAAAyL,MACA,QAAAwyB,GAAA9tB,KAAAe,IAAA+a,EAAAgS,EAAAr2B,EAAA,GAAAuI,KAAAe,IAAA+sB,EAAArb,OAAAqb,EAAAwC,UAAA,IAaAnkB,eAAA,WACA,IAAA2hB,EAAAj+B,KAAAyL,MACA,OACA9D,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,IAIAmW,QAAA,WACA,OAAA5N,KAAA+Q,GAAA/Q,KAAAe,IAAAlR,KAAAyL,MAAAmX,OAAA,IAGAxV,gBAAA,WACA,IAAA6wB,EAAAj+B,KAAAyL,MACA,OACA9D,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,EACA+X,QAAAse,EAAArb,OAAAqb,EAAAF,cAIAiB,KAAA,SAAA4B,GACA,IAAA3C,EAAAj+B,KAAAyL,MACAM,EAAA/L,KAAA2L,OACA8W,EAAAziB,KAAAi/B,OAAAxc,IACAie,EAAAzC,EAAAyC,WACA9d,EAAAqb,EAAArb,OACAjb,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,EACArI,EAAAuG,EAAAvG,MAEAwZ,EAAA,EAEAklB,EAAAtiB,OAIA8G,EAAA2c,YAAAnB,EAAAH,aAAA1e,EACAqD,EAAA4c,UAAAv5B,EAAAkL,eAAAitB,EAAAF,YAAAtwB,EAAA2hB,OAAA1hB,SAAA1G,MAAA+2B,aACAtb,EAAA6c,UAAArB,EAAAJ,iBAAAze,OAIAzO,IAAAiwB,IAAA70B,EAAApE,EAAAi5B,EAAA7gB,MAbA,KAaA6gB,EAAA/gB,MAAA9T,EAAApE,GAAAoE,EAAAnE,EAAAg5B,EAAAhhB,KAbA,KAaAghB,EAAA9gB,OAAA/T,EAAAnE,KAEAmE,EAAApE,EAAAi5B,EAAA7gB,KACAhH,GAAApR,EAAAoE,EAAApE,IAAAi5B,EAAA7gB,KAAAhU,EAAApE,GAhBA,KAiBIi5B,EAAA/gB,MAAA9T,EAAApE,EACJoR,GAAAhN,EAAApE,MAAAoE,EAAApE,EAAAi5B,EAAA/gB,OACI9T,EAAAnE,EAAAg5B,EAAAhhB,IACJ7G,GAAAnR,EAAAmE,EAAAnE,IAAAg5B,EAAAhhB,IAAA7T,EAAAnE,GApBA,KAqBIg5B,EAAA9gB,OAAA/T,EAAAnE,IACJmR,GAAAhN,EAAAnE,MAAAmE,EAAAnE,EAAAg5B,EAAA9gB,SAEA/G,EAAA5I,KAAAO,MAAA,IAAAqI,GAAA,IACA0J,EAAA2c,YAAA7/B,EAAAkjB,EAAA2c,aAAA9pB,MAAAyD,GAAA9L,YACAwV,EAAA6c,UAAA//B,EAAAkjB,EAAA6c,WAAAhqB,MAAAyD,GAAA9L,aAGAnH,EAAAF,OAAAud,UAAAV,EAAAie,EAAA9d,EAAAjb,EAAAC,0CCrGA,IAAA6F,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MAatB,SAAA4iC,EAAAC,GACA,YAAAnwB,IAAAmwB,EAAAr1B,MAAA3D,MASA,SAAAi5B,EAAAD,GACA,IACAE,EAAAC,EAAAC,EAAAlP,EADAiM,EAAA6C,EAAAr1B,MAGA,GAAAo1B,EAAAC,GAAA,CAEA,IAAAK,EAAAlD,EAAAn2B,MAAA,EACAk5B,EAAA/C,EAAAt2B,EAAAw5B,EACAF,EAAAhD,EAAAt2B,EAAAw5B,EACAD,EAAA/wB,KAAAH,IAAAiuB,EAAAr2B,EAAAq2B,EAAAmD,MACApP,EAAA7hB,KAAAJ,IAAAkuB,EAAAr2B,EAAAq2B,EAAAmD,UACE,CAEF,IAAAC,EAAApD,EAAAl2B,OAAA,EACAi5B,EAAA7wB,KAAAH,IAAAiuB,EAAAt2B,EAAAs2B,EAAAmD,MACAH,EAAA9wB,KAAAJ,IAAAkuB,EAAAt2B,EAAAs2B,EAAAmD,MACAF,EAAAjD,EAAAr2B,EAAAy5B,EACArP,EAAAiM,EAAAr2B,EAAAy5B,EAGA,OACAthB,KAAAihB,EACAphB,IAAAshB,EACArhB,MAAAohB,EACAnhB,OAAAkS,GA7CAvkB,EAAA1H,KAAA,UACA2H,SAAA,CACA4zB,UAAA,CACAzD,gBAAApwB,EAAA2hB,OAAAhQ,aACA0e,YAAArwB,EAAA2hB,OAAAhQ,aACAmiB,cAAA,SACAxD,YAAA,MA2CAv8B,EAAAC,QAAAuJ,EAAAE,OAAA,CACA8zB,KAAA,WACA,IAEAjf,EAAAF,EAAAD,EAAAE,EAAA0hB,EAAAC,EAAAF,EAFA9e,EAAAziB,KAAAi/B,OAAAxc,IACAwb,EAAAj+B,KAAAyL,MAEAsyB,EAAAE,EAAAF,YAwBA,GAtBAE,EAAAyD,YAWA3hB,EAAAke,EAAAmD,KACAvhB,EAAAoe,EAAAt2B,EACAiY,EAAAqe,EAAAr2B,EAAAq2B,EAAAl2B,OAAA,EACA+X,EAAAme,EAAAr2B,EAAAq2B,EAAAl2B,OAAA,EACAy5B,EAAA3hB,EAAAE,EAAA,KACA0hB,EAAA,EACAF,EAAAtD,EAAAsD,eAAA,SAfAxhB,EAAAke,EAAAt2B,EAAAs2B,EAAAn2B,MAAA,EACA+X,EAAAoe,EAAAt2B,EAAAs2B,EAAAn2B,MAAA,EACA8X,EAAAqe,EAAAr2B,EAEA45B,EAAA,EACAC,GAFA3hB,EAAAme,EAAAmD,MAEAxhB,EAAA,KACA2hB,EAAAtD,EAAAsD,eAAA,UAcAxD,EAAA,CAEA,IAAA4D,EAAAxxB,KAAAH,IAAAG,KAAA0B,IAAAkO,EAAAF,GAAA1P,KAAA0B,IAAA+N,EAAAE,IAEA8hB,GADA7D,IAAA4D,IAAA5D,GACA,EAEA8D,EAAA9hB,GAAA,SAAAwhB,EAAAK,EAAAJ,EAAA,GACAM,EAAAjiB,GAAA,UAAA0hB,GAAAK,EAAAJ,EAAA,GACAO,EAAAniB,GAAA,QAAA2hB,EAAAK,EAAAH,EAAA,GACAO,EAAAliB,GAAA,WAAAyhB,GAAAK,EAAAH,EAAA,GAEAI,IAAAC,IACAliB,EAAAmiB,EACAjiB,EAAAkiB,GAGAD,IAAAC,IACAjiB,EAAA8hB,EACAhiB,EAAAiiB,GAIArf,EAAAiB,YACAjB,EAAA6c,UAAArB,EAAAJ,gBACApb,EAAA2c,YAAAnB,EAAAH,YACArb,EAAA4c,UAAAtB,EAKA,IAAAkE,EAAA,CACA,CAAAliB,EAAAD,GACA,CAAAC,EAAAH,GACA,CAAAC,EAAAD,GACA,CAAAC,EAAAC,IAKAoiB,EADA,gCACAvzB,QAAA4yB,EAAA,GAKA,SAAAY,EAAAxwB,GACA,OAAAswB,GAAAC,EAAAvwB,GAAA,IALA,IAAAuwB,IACAA,EAAA,GAQA,IAAAE,EAAAD,EAAA,GACA1f,EAAAM,OAAAqf,EAAA,GAAAA,EAAA,IAEA,QAAAl2B,EAAA,EAAiBA,EAAA,EAAOA,IACxBk2B,EAAAD,EAAAj2B,GACAuW,EAAAO,OAAAof,EAAA,GAAAA,EAAA,IAGA3f,EAAAoB,OACAka,GACAtb,EAAA4B,UAIAtc,OAAA,WACA,IAAAk2B,EAAAj+B,KAAAyL,MACA,OAAAwyB,EAAAmD,KAAAnD,EAAAr2B,GAGAiU,QAAA,SAAAmQ,EAAAC,GACA,IAAApQ,GAAA,EAEA,GAAA7b,KAAAyL,MAAA,CACA,IAAA42B,EAAAtB,EAAA/gC,MACA6b,EAAAmQ,GAAAqW,EAAAtiB,MAAAiM,GAAAqW,EAAAxiB,OAAAoM,GAAAoW,EAAAziB,KAAAqM,GAAAoW,EAAAviB,OAGA,OAAAjE,GAGAmiB,aAAA,SAAAhS,EAAAC,GAEA,IADAjsB,KACAyL,MACA,SAGA,IACA42B,EAAAtB,EANA/gC,MAcA,OANA6gC,EARA7gC,MASAgsB,GAAAqW,EAAAtiB,MAAAiM,GAAAqW,EAAAxiB,MAEAoM,GAAAoW,EAAAziB,KAAAqM,GAAAoW,EAAAviB,QAMA7B,SAAA,SAAA+N,GACA,IAAAqW,EAAAtB,EAAA/gC,MACA,OAAAgsB,GAAAqW,EAAAtiB,MAAAiM,GAAAqW,EAAAxiB,OAGA3B,SAAA,SAAA+N,GACA,IAAAoW,EAAAtB,EAAA/gC,MACA,OAAAisB,GAAAoW,EAAAziB,KAAAqM,GAAAoW,EAAAviB,QAGAxD,eAAA,WACA,IACA3U,EAAAC,EADAq2B,EAAAj+B,KAAAyL,MAUA,OARAo1B,EAAA7gC,OACA2H,EAAAs2B,EAAAt2B,EACAC,GAAAq2B,EAAAr2B,EAAAq2B,EAAAmD,MAAA,IAEAz5B,GAAAs2B,EAAAt2B,EAAAs2B,EAAAmD,MAAA,EACAx5B,EAAAq2B,EAAAr2B,GAGA,CAAUD,IAAAC,MAGVmW,QAAA,WACA,IAAAkgB,EAAAj+B,KAAAyL,MACA,OAAAwyB,EAAAn2B,MAAAqI,KAAA0B,IAAAosB,EAAAr2B,EAAAq2B,EAAAmD,OAGAh0B,gBAAA,WACA,IAAA6wB,EAAAj+B,KAAAyL,MACA,OACA9D,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,0BChNApG,EAAAC,QAAA,CACA8c,eAAA,SAAAlZ,GAMA,OALAA,KAAAO,SAEAP,IAAAO,QAGAP,KAAAi9B,WAAA,iDCNA,IAAAx8B,EAAc7H,EAAQ,MAEtBskC,EAAA,WACAC,EAAA,WACAC,EAAAD,EAAA,iBACAE,EAAAF,EAAA,mBACAG,EAAA,0CAOAC,EAAA,CACAC,WAAA,YACAC,UAAA,YACAC,SAAA,UACAC,aAAA,aACAC,YAAA,YACAC,YAAA,YACAC,UAAA,UACAC,aAAA,WACAC,WAAA,YAYA,SAAAC,EAAAthC,EAAAyrB,GACA,IAAAze,EAAAlJ,EAAA2mB,SAAAzqB,EAAAyrB,GACAjI,EAAAxW,KAAAyW,MAAA,qBACA,OAAAD,EAAAtJ,OAAAsJ,EAAA,SAAA7U,EA+DA,IAiBA4yB,IAjBA,WACA,IAAAC,GAAA,EACA,IACA,IAAA39B,EAAA+G,OAAA62B,eAAA,GAAwC,WACxCl+B,IAAA,WACAi+B,GAAA,KAGAz1B,OAAA0Q,iBAAA,SAAA5Y,GACE,MAAAmV,IAGF,OAAAwoB,EAZA,IAiBA,CAA2DE,SAAA,GAE3D,SAAAjlB,EAAAsH,EAAAvZ,EAAAm3B,GACA5d,EAAAtH,iBAAAjS,EAAAm3B,EAAAJ,GAGA,SAAA7kB,EAAAqH,EAAAvZ,EAAAm3B,GACA5d,EAAArH,oBAAAlS,EAAAm3B,EAAAJ,GAGA,SAAAK,EAAAp3B,EAAAyO,EAAAtT,EAAAC,EAAAi8B,GACA,OACAr3B,OACAyO,QACAC,OAAA2oB,GAAA,KACAl8B,OAAAgJ,IAAAhJ,IAAA,KACAC,OAAA+I,IAAA/I,IAAA,MA4HA,SAAAk8B,EAAA/d,EAAA4d,EAAA1oB,GACA,IAnHArI,EAAAE,EACAixB,EACAlxB,EAiHAmxB,EAAAje,EAAAwc,KAAAxc,EAAAwc,GAAA,IAGA0B,EAAAD,EAAAC,QAnGA,SAAA7oB,GACA,IAAA6oB,EAAAxd,SAAAtlB,cAAA,OACA+iC,EAAA1B,EAAA,eAEApf,EACA,oHAUA6gB,EAAA7gB,MAAA+gB,QAAA/gB,EACA6gB,EAAA5iC,UAAA6iC,EACAD,EAAAG,UACA,eAAAF,EAAA,mBAAA9gB,EAAA,0GASA8gB,EAAA,mBAAA9gB,EAAA,qFAUA,IAAAihB,EAAAJ,EAAAK,WAAA,GACAC,EAAAN,EAAAK,WAAA,GAEAL,EAAAO,OAAA,WACAH,EAAAI,WAtCA,IAuCAJ,EAAAK,UAvCA,IAwCAH,EAAAE,WAxCA,IAyCAF,EAAAG,UAzCA,KA2CA,IAAAC,EAAA,WACAV,EAAAO,SACAppB,KAMA,OAHAqD,EAAA4lB,EAAA,SAAAM,EAAAzjC,KAAAmjC,EAAA,WACA5lB,EAAA8lB,EAAA,SAAAI,EAAAzjC,KAAAqjC,EAAA,WAEAN,EA6CAW,EAtHAhyB,EAsHA,WACA,GAAAoxB,EAAAC,QACA,OAAAN,EAAAC,EAAA,SAAA3oB,KAvHA8oB,GAAA,EACAlxB,EAAA,GAEA,WACAA,EAAAN,MAAAjH,UAAA6O,MAAApL,KAAA1D,WACAyH,KAAA9S,KAEA+jC,IACAA,GAAA,EACAj+B,EAAA0lB,iBAAAzc,KAAAhB,OAAA,WACAg2B,GAAA,EACAnxB,EAAAxH,MAAA0H,EAAAD,UAiEA,SAAAkT,EAAA3K,GACA,IAAA4oB,EAAAje,EAAAwc,KAAAxc,EAAAwc,GAAA,IACAsC,EAAAb,EAAAc,YAAA,SAAA9pB,GACAA,EAAA+pB,gBAAArC,GACAtnB,KAIAtV,EAAAiN,KAAA4vB,EAAA,SAAAn2B,GACAiS,EAAAsH,EAAAvZ,EAAAq4B,KAQAb,EAAAgB,SAAAjf,EAAAkf,aAEAlf,EAAAmf,UAAAC,IAAA1C,GA8BA2C,CAAArf,EAAA,WACA,GAAAie,EAAAC,QAAA,CACA,IAAAhX,EAAAlH,EAAAI,WACA8G,OAAAgX,EAAA9d,YACA8G,EAAAoY,aAAApB,EAAAhX,EAAAqY,YAIArB,EAAAO,YAKA,SAAAe,EAAAxf,GACA,IAAAie,EAAAje,EAAAwc,IAAA,GACA0B,EAAAD,EAAAC,eAEAD,EAAAC,QA5CA,SAAAle,GACA,IAAAie,EAAAje,EAAAwc,IAAA,GACAsC,EAAAb,EAAAc,YAEAD,IACA/+B,EAAAiN,KAAA4vB,EAAA,SAAAn2B,GACAkS,EAAAqH,EAAAvZ,EAAAq4B,YAGAb,EAAAc,aAGA/e,EAAAmf,UAAAM,OAAA/C,GAiCAgD,CAAA1f,GAEAke,KAAA9d,YACA8d,EAAA9d,WAAAuf,YAAAzB,GAiBAziC,EAAAC,QAAA,CAMA6c,SAAA,oBAAAvQ,QAAA,oBAAA0Y,SAEAtb,WAAA,WACA,IAtBAyC,EAAA+3B,EAEAviB,EAoBAwiB,EAAA,kCAtBAD,EA2BA,sBAAAjD,EAAA,IAAoDkD,EAAA,eACpDlD,EAAA,IAA4CkD,EAAA,KAC5CnD,EAAA,sBACAC,EAAA,qBACAA,EAAA,YA7BAtf,GAFAxV,EAwBA5N,MAtBA6lC,QAAApf,SAAAtlB,cAAA,SACAyM,EAAAi4B,SACAj4B,EAAAi4B,OAAAziB,EACAuiB,EAAA,mBAAAA,EACAviB,EAAA0iB,aAAA,mBACArf,SAAAsf,qBAAA,WAAAC,YAAA5iB,IAGAA,EAAA4iB,YAAAvf,SAAAwf,eAAAN,KA0BApnB,eAAA,SAAAlZ,EAAA2a,GACA,iBAAA3a,EACAA,EAAAohB,SAAAyf,eAAA7gC,GACGA,EAAAwH,SAEHxH,IAAA,IAGAA,KAAAO,SAEAP,IAAAO,QAMA,IAAAxF,EAAAiF,KAAAi9B,YAAAj9B,EAAAi9B,WAAA,MASA,OAAAliC,KAAAwF,SAAAP,GAtTA,SAAAO,EAAAoa,GACA,IAAAoD,EAAAxd,EAAAwd,MAIA+iB,EAAAvgC,EAAAwgC,aAAA,UACAC,EAAAzgC,EAAAwgC,aAAA,SAoBA,GAjBAxgC,EAAA28B,GAAA,CACA+D,QAAA,CACAv+B,OAAAo+B,EACAr+B,MAAAu+B,EACAjjB,MAAA,CACAmjB,QAAAnjB,EAAAmjB,QACAx+B,OAAAqb,EAAArb,OACAD,MAAAsb,EAAAtb,SAQAsb,EAAAmjB,QAAAnjB,EAAAmjB,SAAA,QAEA,OAAAF,GAAA,KAAAA,EAAA,CACA,IAAAG,EAAAlD,EAAA19B,EAAA,cACA+K,IAAA61B,IACA5gC,EAAAkC,MAAA0+B,GAIA,UAAAL,GAAA,KAAAA,EACA,QAAAvgC,EAAAwd,MAAArb,OAIAnC,EAAAmC,OAAAnC,EAAAkC,OAAAkY,EAAAna,QAAA4gC,aAAA,OACG,CACH,IAAAC,EAAApD,EAAA19B,EAAA,eACA+K,IAAA61B,IACA5gC,EAAAmC,OAAA2+B,IA6QAC,CAAAthC,EAAA2a,GACA5f,GAGA,MAGAoe,eAAA,SAAApe,GACA,IAAAwF,EAAAxF,EAAAwF,OACA,GAAAA,EAAA28B,GAAA,CAIA,IAAA+D,EAAA1gC,EAAA28B,GAAA+D,QACA,mBAAAtlC,QAAA,SAAAkZ,GACA,IAAAlL,EAAAs3B,EAAApsB,GACApU,EAAAwM,cAAAtD,GACApJ,EAAAghC,gBAAA1sB,GAEAtU,EAAAkgC,aAAA5rB,EAAAlL,KAIAlJ,EAAAiN,KAAAuzB,EAAAljB,OAAA,GAAkC,SAAApU,EAAA5C,GAClCxG,EAAAwd,MAAAhX,GAAA4C,IAOApJ,EAAAkC,MAAAlC,EAAAkC,aAEAlC,EAAA28B,KAGA9jB,iBAAA,SAAAxD,EAAAzO,EAAAm3B,GACA,IAAA/9B,EAAAqV,EAAArV,OACA,cAAA4G,EAAA,CAMA,IAAAw3B,EAAAL,EAAApB,KAAAoB,EAAApB,GAAA,IAMA9jB,EAAA7Y,EAAA4G,GALAw3B,EAAA6C,UAAA7C,EAAA6C,QAAA,KACA5rB,EAAAvb,GAAA,IAAA8M,GAAA,SAAAzF,GACA48B,EA1QA,SAAA58B,EAAAkU,GACA,IAAAzO,EAAAo2B,EAAA77B,EAAAyF,OAAAzF,EAAAyF,KACAs6B,EAAAhhC,EAAAiV,oBAAAhU,EAAAkU,GACA,OAAA2oB,EAAAp3B,EAAAyO,EAAA6rB,EAAAn/B,EAAAm/B,EAAAl/B,EAAAb,GAuQAggC,CAAAhgC,EAAAkU,WAPA6oB,EAAAl+B,EAAA+9B,EAAA1oB,IAaAyD,oBAAA,SAAAzD,EAAAzO,EAAAm3B,GACA,IAAA/9B,EAAAqV,EAAArV,OACA,cAAA4G,EAAA,CAMA,IAEAq4B,IAFAlB,EAAApB,IAAA,IACAsE,SAAA,IACA5rB,EAAAvb,GAAA,IAAA8M,GACAq4B,GAIAnmB,EAAA9Y,EAAA4G,EAAAq4B,QAXAU,EAAA3/B,KA0BAE,EAAAkhC,SAAAvoB,EAWA3Y,EAAAmhC,YAAAvoB,qCCtcA,IAAAjR,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACA8H,QAAA,KAGArM,EAAAC,QAAA,SAAA+L,GAOAA,EAAAK,QAAA,CAKAq5B,SAAA,GAQAC,SAAA,EAMAr5B,SAAA,SAAAD,GACA,IAAA+L,EAAA5Z,KAAAknC,SACA,GAAAvwB,OAAA9I,GAAA7M,QAAA,SAAAomC,IACA,IAAAxtB,EAAAjL,QAAAy4B,IACAxtB,EAAAzU,KAAAiiC,KAIApnC,KAAAmnC,YAOAE,WAAA,SAAAx5B,GACA,IAAA+L,EAAA5Z,KAAAknC,SACA,GAAAvwB,OAAA9I,GAAA7M,QAAA,SAAAomC,GACA,IAAAE,EAAA1tB,EAAAjL,QAAAy4B,IACA,IAAAE,GACA1tB,EAAAmV,OAAAuY,EAAA,KAIAtnC,KAAAmnC,YAOA3kB,MAAA,WACAxiB,KAAAknC,SAAA,GACAlnC,KAAAmnC,YAQAI,MAAA,WACA,OAAAvnC,KAAAknC,SAAAr6B,QAQA26B,OAAA,WACA,OAAAxnC,KAAAknC,UAYAO,OAAA,SAAAxsB,EAAAysB,EAAA70B,GACA,IAEA3G,EAAAy7B,EAAAP,EAAAQ,EAAAC,EAFAC,EAAA9nC,KAAA8nC,YAAA7sB,GACA9O,EAAA27B,EAAAj7B,OAGA,IAAAX,EAAA,EAAcA,EAAAC,IAAUD,EAIxB,sBADA27B,GADAT,GADAO,EAAAG,EAAA57B,IACAk7B,QACAM,OAEAE,EAAA,CAAA3sB,GAAAtE,OAAA9D,GAAA,KACA1N,KAAAwiC,EAAA9hC,UACA,IAAAgiC,EAAAz8B,MAAAg8B,EAAAQ,IACA,SAKA,UAQAE,YAAA,SAAA7sB,GACA,IAAAsT,EAAAtT,EAAAisB,WAAAjsB,EAAAisB,SAAA,IACA,GAAA3Y,EAAA7uB,KAAAM,KAAAmnC,SACA,OAAA5Y,EAAAuZ,YAGA,IAAAj6B,EAAA,GACAi6B,EAAA,GACA9nB,EAAA/E,KAAA+E,QAAA,GACAna,EAAAma,EAAAna,SAAAma,EAAAna,QAAAgI,SAAA,GA2BA,OAzBA7N,KAAAknC,SAAAvwB,OAAAqJ,EAAAnS,SAAA,IAAA7M,QAAA,SAAAomC,GAEA,QADAv5B,EAAAc,QAAAy4B,GACA,CAIA,IAAA1nC,EAAA0nC,EAAA1nC,GACAqoC,EAAAliC,EAAAnG,IACA,IAAAqoC,KAIA,IAAAA,IACAA,EAAAjiC,EAAA4F,MAAA+B,EAAA2hB,OAAAvhB,QAAAnO,KAGAmO,EAAA1I,KAAAiiC,GACAU,EAAA3iC,KAAA,CACAiiC,SACAvhC,QAAAkiC,GAAA,SAIAxZ,EAAAuZ,cACAvZ,EAAA7uB,GAAAM,KAAAmnC,SACAW,IA8NAt6B,EAAAw6B,cAAAx6B,EAAAK,QAUAL,EAAAy6B,WAAAj9B,EAAAE,OAAA,wCCtYA,IAAAuC,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACAmiC,UAAA,CACAC,SAAA,IACAxiC,OAAA,eACAyiC,WAAAtiC,EAAAsM,KACAi2B,WAAAviC,EAAAsM,QAIA5Q,EAAAC,QAAA,SAAA+L,GAEAA,EAAA86B,UAAAt9B,EAAAE,OAAA,CACA+P,MAAA,KACAstB,YAAA,EACAC,SAAA,GACA7iC,OAAA,GACAnF,OAAA,KAEAioC,oBAAA,KACAC,oBAAA,OAGAl7B,EAAAm7B,iBAAA,CACAC,cAAA,GACAC,WAAA,GACAC,WAAA,EACAC,QAAA,KAQAC,aAAA,SAAA/tB,EAAAitB,EAAAC,EAAAc,GACA,IACA/8B,EAAAC,EADA08B,EAAA7oC,KAAA6oC,WASA,IANAX,EAAAjtB,QAEAguB,IACAhuB,EAAAiuB,WAAA,GAGAh9B,EAAA,EAAAC,EAAA08B,EAAAh8B,OAAwCX,EAAAC,IAAUD,EAClD,GAAA28B,EAAA38B,GAAA+O,UAEA,YADA4tB,EAAA38B,GAAAg8B,GAKAW,EAAA1jC,KAAA+iC,GAGA,IAAAW,EAAAh8B,QACA7M,KAAAyrB,yBAIA0d,gBAAA,SAAAluB,GACA,IAAAtJ,EAAA7L,EAAA6hB,UAAA3nB,KAAA6oC,WAAA,SAAAX,GACA,OAAAA,EAAAjtB,aAGA,IAAAtJ,IACA3R,KAAA6oC,WAAA9Z,OAAApd,EAAA,GACAsJ,EAAAiuB,WAAA,IAIAzd,sBAAA,WACA,IAAAjgB,EAAAxL,KACA,OAAAwL,EAAAu9B,UAIAv9B,EAAAu9B,QAAAjjC,EAAA0lB,iBAAAzc,KAAAhB,OAAA,WACAvC,EAAAu9B,QAAA,KACAv9B,EAAA49B,kBAQAA,YAAA,WACA,IAAA59B,EAAAxL,KACAqpC,EAAAC,KAAAC,MACAC,EAAA,EAEAh+B,EAAAs9B,WAAA,IACAU,EAAAr5B,KAAAC,MAAA5E,EAAAs9B,YACAt9B,EAAAs9B,WAAAt9B,EAAAs9B,WAAA,GAGAt9B,EAAAi+B,QAAA,EAAAD,GAEA,IAAAE,EAAAJ,KAAAC,MAEA/9B,EAAAs9B,aAAAY,EAAAL,GAAA79B,EAAAo9B,cAGAp9B,EAAAq9B,WAAAh8B,OAAA,GACArB,EAAAigB,yBAOAge,QAAA,SAAAlC,GAKA,IAJA,IACAW,EAAAjtB,EADA4tB,EAAA7oC,KAAA6oC,WAEA38B,EAAA,EAEAA,EAAA28B,EAAAh8B,QAEAoO,GADAitB,EAAAW,EAAA38B,IACA+O,MAEAitB,EAAAK,aAAAL,EAAAK,aAAA,GAAAhB,EACAW,EAAAK,YAAAp4B,KAAAH,IAAAk4B,EAAAK,YAAAL,EAAAM,UAEA1iC,EAAAZ,SAAAgjC,EAAA1nC,OAAA,CAAAya,EAAAitB,GAAAjtB,GACAnV,EAAAZ,SAAAgjC,EAAAO,oBAAA,CAAAP,GAAAjtB,GAEAitB,EAAAK,aAAAL,EAAAM,UACA1iC,EAAAZ,SAAAgjC,EAAAQ,oBAAA,CAAAR,GAAAjtB,GACAA,EAAAiuB,WAAA,EACAL,EAAA9Z,OAAA7iB,EAAA,MAEAA,IAYAU,OAAA62B,eAAAj2B,EAAA86B,UAAAh9B,UAAA,mBACA/F,IAAA,WACA,OAAAvF,QAUA4M,OAAA62B,eAAAj2B,EAAA86B,UAAAh9B,UAAA,iBACA/F,IAAA,WACA,OAAAvF,KAAAib,OAEA0uB,IAAA,SAAA36B,GACAhP,KAAAib,MAAAjM,yCCrKA,IAAAvB,EAAexP,EAAQ,MACvB6H,EAAc7H,EAAQ,MACtB0P,EAAkB1P,EAAQ,MAC1B2P,EAAe3P,EAAQ,MAEvBuD,EAAAC,QAAA,SAAA+L,GACA,IAAAK,EAAAL,EAAAK,QAoDA,SAAA+7B,EAAA5hC,GACA,cAAAA,GAAA,WAAAA,EAlDAwF,EAAAq8B,MAAA,GAIAr8B,EAAAs8B,UAAA,GAGAt8B,EAAAu8B,YAAA,GA8CAjkC,EAAAoF,OAAAsC,EAAAlC,UAAA,CAIA2U,UAAA,SAAA5a,EAAA2a,GACA,IAAAxU,EAAAxL,KAEAggB,EAhDA,SAAAA,GAKA,IAAAzE,GAJAyE,KAAA,IAIAzE,KAAAyE,EAAAzE,MAAA,GASA,OARAA,EAAAC,SAAAD,EAAAC,UAAA,GACAD,EAAAyuB,OAAAzuB,EAAAyuB,QAAA,GAEAhqB,EAAAna,QAAAC,EAAAmhB,YACAxZ,EAAA2hB,OACA3hB,EAAAuS,EAAAxT,MACAwT,EAAAna,SAAA,IAEAma,EAkCAiqB,CAAAjqB,GAEA,IAAA5f,EAAAwN,EAAA2Q,eAAAlZ,EAAA2a,GACApa,EAAAxF,KAAAwF,OACAmC,EAAAnC,KAAAmC,OACAD,EAAAlC,KAAAkC,MAEA0D,EAAA9L,GAAAoG,EAAAuM,MACA7G,EAAAiX,IAAAriB,EACAoL,EAAA5F,SACA4F,EAAAwU,SACAxU,EAAA1D,QACA0D,EAAAzD,SACAyD,EAAAi7B,YAAA1+B,EAAAD,EAAAC,EAAA,KACAyD,EAAA3F,QAAAma,EAAAna,QACA2F,EAAA0+B,iBAAA,EAUA1+B,EAAAyP,MAAAzP,EACAA,EAAA2+B,WAAA3+B,EAGAgC,EAAAs8B,UAAAt+B,EAAA9L,IAAA8L,EAGAoB,OAAA62B,eAAAj4B,EAAA,QACAjG,IAAA,WACA,OAAAiG,EAAAwU,OAAAzE,MAEAouB,IAAA,SAAA36B,GACAxD,EAAAwU,OAAAzE,KAAAvM,KAIA5O,GAAAwF,GASA4F,EAAAL,aACAK,EAAA4+B,UALAhwB,QAAAC,MAAA,sEAWAlP,WAAA,WACA,IAAAK,EAAAxL,KAsBA,OAnBA6N,EAAA45B,OAAAj8B,EAAA,cAEA1F,EAAA8nB,YAAApiB,IAAA3F,QAAAkoB,kBAEAviB,EAAA6+B,aAEA7+B,EAAA3F,QAAA8Y,YAEAnT,EAAA8+B,QAAA,GAIA9+B,EAAA++B,sBACA/+B,EAAAg/B,cACAh/B,EAAAi/B,cAGA58B,EAAA45B,OAAAj8B,EAAA,aAEAA,GAGAgX,MAAA,WAEA,OADA1c,EAAAF,OAAA4c,MAAAxiB,MACAA,MAGA0qC,KAAA,WAGA,OADAl9B,EAAAm7B,iBAAAQ,gBAAAnpC,MACAA,MAGAsqC,OAAA,SAAAK,GACA,IAAAn/B,EAAAxL,KACA6F,EAAA2F,EAAA3F,QACAD,EAAA4F,EAAA5F,OACA6gC,EAAA5gC,EAAAgZ,qBAAArT,EAAAi7B,aAAA,KAMAmE,EAAAz6B,KAAAJ,IAAA,EAAAI,KAAAC,MAAAtK,EAAAknB,gBAAApnB,KACAilC,EAAA16B,KAAAJ,IAAA,EAAAI,KAAAC,MAAAq2B,EAAAmE,EAAAnE,EAAA3gC,EAAAsnB,iBAAAxnB,KAEA,IAAA4F,EAAA1D,QAAA8iC,GAAAp/B,EAAAzD,SAAA8iC,KAIAjlC,EAAAkC,MAAA0D,EAAA1D,MAAA8iC,EACAhlC,EAAAmC,OAAAyD,EAAAzD,OAAA8iC,EACAjlC,EAAAwd,MAAAtb,MAAA8iC,EAAA,KACAhlC,EAAAwd,MAAArb,OAAA8iC,EAAA,KAEA/kC,EAAA8nB,YAAApiB,EAAA3F,EAAAkoB,mBAEA4c,GAAA,CAEA,IAAAG,EAAA,CAAmBhjC,MAAA8iC,EAAA7iC,OAAA8iC,GACnBh9B,EAAA45B,OAAAj8B,EAAA,UAAAs/B,IAGAt/B,EAAA3F,QAAAklC,UACAv/B,EAAA3F,QAAAklC,SAAAv/B,EAAAs/B,GAGAt/B,EAAAk/B,OACAl/B,EAAA4+B,OAAA5+B,EAAA3F,QAAA+Y,+BAIA2rB,oBAAA,WACA,IAAA1kC,EAAA7F,KAAA6F,QACAmlC,EAAAnlC,EAAAolC,QAAA,GACAC,EAAArlC,EAAAwhB,MAEAvhB,EAAAiN,KAAAi4B,EAAAG,MAAA,SAAAC,EAAAz5B,GACAy5B,EAAA1rC,GAAA0rC,EAAA1rC,IAAA,UAAAiS,IAGA7L,EAAAiN,KAAAi4B,EAAAK,MAAA,SAAAC,EAAA35B,GACA25B,EAAA5rC,GAAA4rC,EAAA5rC,IAAA,UAAAiS,IAGAu5B,IACAA,EAAAxrC,GAAAwrC,EAAAxrC,IAAA,UAOA8qC,YAAA,WACA,IAAAh/B,EAAAxL,KACA6F,EAAA2F,EAAA3F,QACAolC,EAAAz/B,EAAAy/B,OAAA,GACA/tB,EAAA,GAEArX,EAAAolC,SACA/tB,IAAAvG,QACA9Q,EAAAolC,OAAAE,OAAA,IAAA13B,IAAA,SAAA23B,GACA,OAAcvlC,QAAAulC,EAAAG,MAAA,WAAAC,UAAA,aAEd3lC,EAAAolC,OAAAI,OAAA,IAAA53B,IAAA,SAAA63B,GACA,OAAczlC,QAAAylC,EAAAC,MAAA,SAAAC,UAAA,YAKd3lC,EAAAwhB,OACAnK,EAAA/X,KAAA,CACAU,UAAAwhB,MACAkkB,MAAA,eACAE,WAAA,EACAD,UAAA,cAIA1lC,EAAAiN,KAAAmK,EAAA,SAAA7X,GACA,IAAA6lC,EAAA7lC,EAAAQ,QACA6lC,EAAA5lC,EAAAkL,eAAAk6B,EAAA1+B,KAAAnH,EAAAkmC,OACAI,EAAAn+B,EAAA2Z,aAAAykB,oBAAAF,GACA,GAAAC,EAAA,CAIA/B,EAAAsB,EAAAljC,YAAA4hC,EAAAvkC,EAAAmmC,aACAN,EAAAljC,SAAA3C,EAAAmmC,WAGA,IAAAnkB,EAAA,IAAAskB,EAAA,CACAjsC,GAAAwrC,EAAAxrC,GACAmG,QAAAqlC,EACAzoB,IAAAjX,EAAAiX,IACAxH,MAAAzP,IAGAy/B,EAAA5jB,EAAA3nB,IAAA2nB,EACAA,EAAAwkB,oBAKAxmC,EAAAomC,YACAjgC,EAAA6b,YAIA7Z,EAAA2Z,aAAA2kB,kBAAA9rC,OAGA+rC,yBAAA,WACA,IAAAvgC,EAAAxL,KACA6pC,EAAA,GACAmC,EAAA,GA2BA,OAzBAlmC,EAAAiN,KAAAvH,EAAA+P,KAAAC,SAAA,SAAA2B,EAAAC,GACA,IAAA/B,EAAA7P,EAAAkQ,eAAA0B,GACA5Q,EAAA2Q,EAAA3Q,MAAAhB,EAAAwU,OAAAxT,KAUA,GARA6O,EAAA7O,MAAA6O,EAAA7O,WACAhB,EAAAygC,mBAAA7uB,GACA/B,EAAA7P,EAAAkQ,eAAA0B,IAEA/B,EAAA7O,OAEAq9B,EAAA1kC,KAAAkW,EAAA7O,MAEA6O,EAAA8uB,WACA9uB,EAAA8uB,WAAA+B,YAAA9uB,OACK,CACL,IAAA+uB,EAAA3+B,EAAAu8B,YAAA1uB,EAAA7O,MACA,QAAAmE,IAAAw7B,EACA,UAAAC,MAAA,IAAA/wB,EAAA7O,KAAA,0BAGA6O,EAAA8uB,WAAA,IAAAgC,EAAA3gC,EAAA4R,GACA4uB,EAAA7mC,KAAAkW,EAAA8uB,cAEI3+B,GAEJwgC,GAOAK,cAAA,WACA,IAAA7gC,EAAAxL,KACA8F,EAAAiN,KAAAvH,EAAA+P,KAAAC,SAAA,SAAA2B,EAAAC,GACA5R,EAAAkQ,eAAA0B,GAAA+sB,WAAAmC,SACI9gC,IAMJ8gC,MAAA,WACAtsC,KAAAqsC,gBACArsC,KAAAusC,QAAAphC,cAGAi/B,OAAA,SAAApqB,GACA,IArSA/E,EACAuxB,EAoSAhhC,EAAAxL,KAYA,GAVAggB,GAAA,iBAAAA,IAEAA,EAAA,CACAmoB,SAAAnoB,EACAipB,KAAA59B,UAAA,MA1SAmhC,GADAvxB,EA+SAzP,GA9SA3F,SAGAwhB,MACApM,EAAAoM,MAAAxhB,QAAA2mC,EAAAnlB,MACGmlB,EAAAvB,QACHuB,EAAAvB,OAAAE,MAAAx0B,OAAA61B,EAAAvB,OAAAI,OAAArqC,QAAA,SAAAkqC,GACAjwB,EAAAgwB,OAAAC,EAAAxrC,IAAAmG,QAAAqlC,IAKAjwB,EAAAsxB,QAAAE,SAAAD,EAAAE,UAoSA,IAAA7+B,EAAA45B,OAAAj8B,EAAA,iBAKAA,EAAA+gC,QAAAI,MAAAnhC,EAAA+P,KAGA,IAAAywB,EAAAxgC,EAAAugC,2BAGAjmC,EAAAiN,KAAAvH,EAAA+P,KAAAC,SAAA,SAAA2B,EAAAC,GACA5R,EAAAkQ,eAAA0B,GAAA+sB,WAAAyC,yBACIphC,GAEJA,EAAAqhC,eAGA/mC,EAAAiN,KAAAi5B,EAAA,SAAA7B,GACAA,EAAAmC,UAGA9gC,EAAAshC,iBAIAthC,EAAA+gC,QAAAphC,aAIAK,EAAAuhC,WAAA,GAGAl/B,EAAA45B,OAAAj8B,EAAA,eAEAA,EAAA0+B,gBACA1+B,EAAAwhC,iBAAA,CACA7E,SAAAnoB,EAAAmoB,SACAxiC,OAAAqa,EAAAra,OACAsjC,KAAAjpB,EAAAipB,MAGAz9B,EAAAhL,OAAAwf,KASA6sB,aAAA,YAGA,IAAAh/B,EAAA45B,OAFAznC,KAEA,kBAIAwN,EAAAy/B,cAAA7C,OAAApqC,UAAA8H,MAAA9H,KAAA+H,QASA8F,EAAA45B,OAfAznC,KAeA,oBACA6N,EAAA45B,OAhBAznC,KAgBA,iBAQA8sC,eAAA,WAGA,QAAAj/B,EAAA45B,OAFAznC,KAEA,yBAIA,QAAAkM,EAAA,EAAAC,EANAnM,KAMAub,KAAAC,SAAA3O,OAAkDX,EAAAC,IAAUD,EAN5DlM,KAOAktC,cAAAhhC,GAGA2B,EAAA45B,OAVAznC,KAUA,yBAQAktC,cAAA,SAAAv7B,GACA,IACA0J,EADArb,KACA0b,eAAA/J,GACAkB,EAAA,CACAwI,OACA1J,UAGA,IAAA9D,EAAA45B,OAPAznC,KAOA,uBAAA6S,MAIAwI,EAAA8uB,WAAAC,SAEAv8B,EAAA45B,OAbAznC,KAaA,sBAAA6S,MAGArS,OAAA,SAAAwf,GACA,IAAAxU,EAAAxL,KAEAggB,GAAA,iBAAAA,IAEAA,EAAA,CACAmoB,SAAAnoB,EACAipB,KAAA59B,UAAA,KAIA,IAAA88B,EAAAnoB,EAAAmoB,SACAc,EAAAjpB,EAAAipB,KAEA,QAAAp7B,EAAA45B,OAAAj8B,EAAA,iBAIA,IAAA2hC,EAAA3hC,EAAA3F,QAAAqiC,UACAG,EAAA,SAAAH,GACAr6B,EAAA45B,OAAAj8B,EAAA,eACA1F,EAAAZ,SAAAioC,KAAA9E,WAAA,CAAAH,GAAA18B,IAGA,GAAA2hC,SAAA,IAAAhF,GAAA,IAAAA,QAAA,IAAAA,GAAA,IAAAgF,EAAAhF,UAAA,CACA,IAAAD,EAAA,IAAA16B,EAAA86B,UAAA,CACAE,UAAAL,GAAAgF,EAAAhF,UAAA,MACAxiC,OAAAqa,EAAAra,QAAAwnC,EAAAxnC,OAEAnF,OAAA,SAAAya,EAAAmyB,GACA,IAAAC,EAAAvnC,EAAAH,OAAAua,QAAAktB,EAAAznC,QACA4iC,EAAA6E,EAAA7E,YACA+E,EAAA/E,EAAA6E,EAAA5E,SAEAvtB,EAAA+jB,KAAAqO,EAAAC,KAAA/E,IAGAE,oBAAA0E,EAAA/E,WACAM,oBAAAL,IAGA76B,EAAAm7B,iBAAAK,aAAAx9B,EAAA08B,EAAAC,EAAAc,QAEAz9B,EAAAwzB,OAGAqJ,EAAA,IAAA76B,EAAA86B,UAAA,CAAoCE,SAAA,EAAAvtB,MAAAzP,KAGpC,OAAAA,IAGAwzB,KAAA,SAAAuO,GACA,IAAA/hC,EAAAxL,KAEAwL,EAAAgX,QAEA1c,EAAAwM,cAAAi7B,KACAA,EAAA,GAGA/hC,EAAAK,WAAA0hC,IAEA,IAAA1/B,EAAA45B,OAAAj8B,EAAA,cAAA+hC,MAKAznC,EAAAiN,KAAAvH,EAAAgiC,MAAA,SAAAC,GACAA,EAAAzO,KAAAxzB,EAAAo1B,YACIp1B,GAEJA,EAAA6b,OACA7b,EAAA6b,MAAA2X,OAGAxzB,EAAAkiC,aAAAH,GACA/hC,EAAAmiC,aAAAJ,GAEA1/B,EAAA45B,OAAAj8B,EAAA,aAAA+hC,MAMA1hC,WAAA,SAAA0hC,GAGA,IAFA,IAEArhC,EAAA,EAAAC,GAFAnM,KAEAub,KAAAC,UAAA,IAAA3O,OAA0DX,EAAAC,IAAUD,EAFpElM,KAGAyb,iBAAAvP,IAHAlM,KAIA0b,eAAAxP,GAAAi+B,WAAAt+B,WAAA0hC,GAJAvtC,KAQAusC,QAAA1gC,WAAA0hC,IAQAG,aAAA,SAAAH,GACA,IAAA/hC,EAAAxL,KAEA,QAAA6N,EAAA45B,OAAAj8B,EAAA,sBAAA+hC,IAAA,CAKA,QAAArhC,GAAAV,EAAA+P,KAAAC,UAAA,IAAA3O,OAAA,EAAoDX,GAAA,IAAQA,EAC5DV,EAAAiQ,iBAAAvP,IACAV,EAAAoiC,YAAA1hC,EAAAqhC,GAIA1/B,EAAA45B,OAAAj8B,EAAA,qBAAA+hC,MAQAK,YAAA,SAAAj8B,EAAA47B,GACA,IACAlyB,EADArb,KACA0b,eAAA/J,GACAkB,EAAA,CACAwI,OACA1J,QACA47B,gBAGA,IAAA1/B,EAAA45B,OARAznC,KAQA,qBAAA6S,MAIAwI,EAAA8uB,WAAAnL,KAAAuO,GAEA1/B,EAAA45B,OAdAznC,KAcA,oBAAA6S,MAQA86B,aAAA,SAAAJ,GACA,IACAhB,EADAvsC,KACAusC,QACA15B,EAAA,CACA05B,UACAgB,gBAGA,IAAA1/B,EAAA45B,OAPAznC,KAOA,qBAAA6S,MAIA05B,EAAAvN,OAEAnxB,EAAA45B,OAbAznC,KAaA,oBAAA6S,MAKAg7B,kBAAA,SAAA7yB,GACA,OAAArN,EAAA2P,MAAAC,OAAAvd,KAAAgb,IAGA8yB,mBAAA,SAAA9yB,GACA,OAAArN,EAAA2P,MAAAE,MAAAxd,KAAAgb,EAAA,CAA4Ce,WAAA,KAG5CgyB,mBAAA,SAAA/yB,GACA,OAAArN,EAAA2P,MAAA,UAAAtd,KAAAgb,EAAA,CAAgDe,WAAA,KAGhDiyB,0BAAA,SAAAhzB,EAAAiE,EAAApZ,GACA,IAAAgiC,EAAAl6B,EAAA2P,MAAA2B,GACA,yBAAA4oB,EACAA,EAAA7nC,KAAAgb,EAAAnV,GAGA,IAGAooC,kBAAA,SAAAjzB,GACA,OAAArN,EAAA2P,MAAAH,QAAAnd,KAAAgb,EAAA,CAA8Ce,WAAA,KAG9CL,eAAA,SAAA0B,GACA,IACAD,EADAnd,KACAub,KAAAC,SAAA4B,GACAD,EAAA+wB,QACA/wB,EAAA+wB,MAAA,IAGA,IAAA7yB,EAAA8B,EAAA+wB,MANAluC,KAMAN,IAaA,OAZA2b,IACAA,EAAA8B,EAAA+wB,MARAluC,KAQAN,IAAA,CACA8M,KAAA,KACA+O,KAAA,GACA4B,QAAA,KACAgtB,WAAA,KACA7qC,OAAA,KACA6uC,QAAA,KACAC,QAAA,OAIA/yB,GAGAgzB,uBAAA,WAEA,IADA,IAAA9G,EAAA,EACAr7B,EAAA,EAAAC,EAAAnM,KAAAub,KAAAC,SAAA3O,OAAoDX,EAAAC,IAAUD,EAC9DlM,KAAAyb,iBAAAvP,IACAq7B,IAGA,OAAAA,GAGA9rB,iBAAA,SAAA2B,GACA,IAAA/B,EAAArb,KAAA0b,eAAA0B,GAIA,wBAAA/B,EAAA/b,QAAA+b,EAAA/b,QAAAU,KAAAub,KAAAC,SAAA4B,GAAA9d,QAGAgvC,eAAA,WACA,OAAAtuC,KAAA6F,QAAA0oC,eAAAvuC,OAMAisC,mBAAA,SAAA7uB,GACA,IAAA1d,EAAAM,KAAAN,GACAyd,EAAAnd,KAAAub,KAAAC,SAAA4B,GACA/B,EAAA8B,EAAA+wB,OAAA/wB,EAAA+wB,MAAAxuC,GAEA2b,IACAA,EAAA8uB,WAAAqE,iBACArxB,EAAA+wB,MAAAxuC,KAIA8uC,QAAA,WACA,IAEAtiC,EAAAC,EAFAX,EAAAxL,KACA4F,EAAA4F,EAAA5F,OAMA,IAHA4F,EAAAk/B,OAGAx+B,EAAA,EAAAC,EAAAX,EAAA+P,KAAAC,SAAA3O,OAA8CX,EAAAC,IAAUD,EACxDV,EAAAygC,mBAAA//B,GAGAtG,IACA4F,EAAAijC,eACA3oC,EAAAF,OAAA4c,MAAAhX,GACAoC,EAAA4Q,eAAAhT,EAAAiX,KACAjX,EAAA5F,OAAA,KACA4F,EAAAiX,IAAA,MAGA5U,EAAA45B,OAAAj8B,EAAA,kBAEAgC,EAAAs8B,UAAAt+B,EAAA9L,KAGAgvC,cAAA,WACA,OAAA1uC,KAAA4F,OAAA+oC,UAAAvjC,MAAApL,KAAA4F,OAAAyF,YAGAo/B,YAAA,WACA,IAAAj/B,EAAAxL,KACAwL,EAAA+gC,QAAA,IAAA/+B,EAAAohC,QAAA,CACA3P,OAAAzzB,EACAqjC,eAAArjC,EACAmhC,MAAAnhC,EAAA+P,KACAkxB,SAAAjhC,EAAA3F,QAAA6mC,UACIlhC,IAMJ6+B,WAAA,WACA,IAAA7+B,EAAAxL,KACA8uC,EAAAtjC,EAAAujC,WAAA,GACApL,EAAA,WACAn4B,EAAAwjC,aAAA5jC,MAAAI,EAAAH,YAGAvF,EAAAiN,KAAAvH,EAAA3F,QAAAiZ,OAAA,SAAAtS,GACAoB,EAAA6Q,iBAAAjT,EAAAgB,EAAAm3B,GACAmL,EAAAtiC,GAAAm3B,IAKAn4B,EAAA3F,QAAA8Y,aACAglB,EAAA,WACAn4B,EAAA8+B,UAGA18B,EAAA6Q,iBAAAjT,EAAA,SAAAm4B,GACAmL,EAAAxE,OAAA3G,IAOA8K,aAAA,WACA,IAAAjjC,EAAAxL,KACA8uC,EAAAtjC,EAAAujC,WACAD,WAIAtjC,EAAAujC,WACAjpC,EAAAiN,KAAA+7B,EAAA,SAAAnL,EAAAn3B,GACAoB,EAAA8Q,oBAAAlT,EAAAgB,EAAAm3B,OAIAsL,iBAAA,SAAAvhC,EAAAuR,EAAAiwB,GACA,IACAltC,EAAAkK,EAAAC,EADA07B,EAAAqH,EAAA,mCAGA,IAAAhjC,EAAA,EAAAC,EAAAuB,EAAAb,OAAsCX,EAAAC,IAAUD,GAChDlK,EAAA0L,EAAAxB,KAEAlM,KAAA0b,eAAA1Z,EAAAyb,eAAA0sB,WAAAtC,GAAA7lC,IAQAgtC,aAAA,SAAAh0B,GACA,IAAAxP,EAAAxL,KACAusC,EAAA/gC,EAAA+gC,QAEA,QAAA1+B,EAAA45B,OAAAj8B,EAAA,eAAAwP,IAAA,CAKAxP,EAAA0+B,iBAAA,EACA1+B,EAAAwhC,iBAAA,KAEA,IAAAmC,EAAA3jC,EAAA4jC,YAAAp0B,GACAm0B,GAAA5C,KAAA6C,YAAAp0B,GAEAnN,EAAA45B,OAAAj8B,EAAA,cAAAwP,IAEA,IAAAq0B,EAAA7jC,EAAAwhC,iBAgBA,OAfAqC,EAEA7jC,EAAAhL,OAAA6uC,GACIF,IAAA3jC,EAAA09B,YAEJ19B,EAAAk/B,OAIAl/B,EAAAhL,OAAAgL,EAAA3F,QAAAkZ,MAAAG,mBAAA,IAGA1T,EAAA0+B,iBAAA,EACA1+B,EAAAwhC,iBAAA,KAEAxhC,IASA4jC,YAAA,SAAAp0B,GACA,IAGAm0B,EAHA3jC,EAAAxL,KACA6F,EAAA2F,EAAA3F,SAAA,GACAypC,EAAAzpC,EAAAkZ,MAsCA,OAnCAvT,EAAAuhC,WAAAvhC,EAAAuhC,YAAA,GAGA,aAAA/xB,EAAAxO,KACAhB,EAAA+jC,OAAA,GAEA/jC,EAAA+jC,OAAA/jC,EAAAwiC,0BAAAhzB,EAAAs0B,EAAArwB,KAAAqwB,GAKAxpC,EAAAZ,SAAAW,EAAAmZ,SAAAnZ,EAAAkZ,MAAAC,QAAA,CAAAhE,EAAAE,OAAA1P,EAAA+jC,QAAA/jC,GAEA,YAAAwP,EAAAxO,MAAA,UAAAwO,EAAAxO,MACA3G,EAAAsZ,SAEAtZ,EAAAsZ,QAAApQ,KAAAvD,EAAAwP,EAAAE,OAAA1P,EAAA+jC,QAKA/jC,EAAAuhC,WAAAlgC,QACArB,EAAAyjC,iBAAAzjC,EAAAuhC,WAAAuC,EAAArwB,MAAA,GAIAzT,EAAA+jC,OAAA1iC,QAAAyiC,EAAArwB,MACAzT,EAAAyjC,iBAAAzjC,EAAA+jC,OAAAD,EAAArwB,MAAA,GAGAkwB,GAAArpC,EAAAqN,YAAA3H,EAAA+jC,OAAA/jC,EAAAuhC,YAGAvhC,EAAAuhC,WAAAvhC,EAAA+jC,OAEAJ,KAWA3hC,EAAAgiC,WAAAhiC,sCCp4BA,IAAA1H,EAAc7H,EAAQ,MAEtBuD,EAAAC,QAAA,SAAA+L,GAEA,IAAAiiC,EAAA,0CAgDA,SAAAC,EAAAh7B,EAAAivB,GACA,IAAAgM,EAAAj7B,EAAAk7B,SACA,GAAAD,EAAA,CAIA,IAAAb,EAAAa,EAAAb,UACAn9B,EAAAm9B,EAAAngC,QAAAg1B,IACA,IAAAhyB,GACAm9B,EAAA/f,OAAApd,EAAA,GAGAm9B,EAAAjiC,OAAA,IAIA4iC,EAAAzuC,QAAA,SAAAoL,UACAsI,EAAAtI,YAGAsI,EAAAk7B,WAIApiC,EAAAqiC,kBAAA,SAAA50B,EAAAmC,GACApd,KAAAmL,WAAA8P,EAAAmC,IAGAtX,EAAAoF,OAAAsC,EAAAqiC,kBAAAvkC,UAAA,CAMAwkC,mBAAA,KAMAC,gBAAA,KAEA5kC,WAAA,SAAA8P,EAAAmC,GACApd,KACAib,QADAjb,KAEA2R,MAAAyL,EAFApd,KAGAgwC,aAHAhwC,KAIAiwC,eAGA/D,YAAA,SAAA9uB,GACApd,KAAA2R,MAAAyL,GAGA4yB,WAAA,WACA,IACA30B,EADArb,KACAkwC,UACA/yB,EAFAnd,KAEAmwC,aAEA,OAAA90B,EAAA8yB,UACA9yB,EAAA8yB,QAAAhxB,EAAAgxB,SALAnuC,KAKAib,MAAApV,QAAAolC,OAAAE,MAAA,GAAAzrC,IAEA,OAAA2b,EAAA+yB,UACA/yB,EAAA+yB,QAAAjxB,EAAAixB,SARApuC,KAQAib,MAAApV,QAAAolC,OAAAI,MAAA,GAAA3rC,KAIAywC,WAAA,WACA,OAAAnwC,KAAAib,MAAAM,KAAAC,SAAAxb,KAAA2R,QAGAu+B,QAAA,WACA,OAAAlwC,KAAAib,MAAAS,eAAA1b,KAAA2R,QAGAy+B,cAAA,SAAAC,GACA,OAAArwC,KAAAib,MAAAgwB,OAAAoF,IAGA/D,MAAA,WACAtsC,KAAAoqC,QAAA,IAMAoE,QAAA,WACAxuC,KAAA2sC,OACA+C,EAAA1vC,KAAA2sC,MAAA3sC,OAIAswC,kBAAA,WACA,IACA9jC,EADAxM,KACA8vC,mBACA,OAAAtjC,GAAA,IAAAA,EAAA,CACAyyB,OAHAj/B,KAGAib,MACAwC,cAJAzd,KAIA2R,SAIA4+B,eAAA,SAAA5+B,GACA,IACAnF,EADAxM,KACA+vC,gBACA,OAAAvjC,GAAA,IAAAA,EAAA,CACAyyB,OAHAj/B,KAGAib,MACAwC,cAJAzd,KAIA2R,MACA0L,OAAA1L,KAIAs+B,YAAA,WACA,IAIA/jC,EAAAC,EAHAkP,EADArb,KACAkwC,UACA30B,EAFAvb,KAEAmwC,aAAA50B,MAAA,GACAi1B,EAAAn1B,EAAAE,KAGA,IAAArP,EAAA,EAAAC,EAAAoP,EAAA1O,OAAkCX,EAAAC,IAAUD,EAC5CskC,EAAAtkC,GAAAskC,EAAAtkC,IAPAlM,KAOAuwC,eAAArkC,GAGAmP,EAAA8B,QAAA9B,EAAA8B,SAVAnd,KAUAswC,qBAGAG,mBAAA,SAAA9+B,GACA,IAAA3P,EAAAhC,KAAAuwC,eAAA5+B,GACA3R,KAAAkwC,UAAA30B,KAAAwT,OAAApd,EAAA,EAAA3P,GACAhC,KAAA0wC,cAAA1uC,EAAA2P,GAAA,IAGAi7B,sBAAA,WACA,IA7KAl4B,EAAAivB,EA6KAn4B,EAAAxL,KACAmd,EAAA3R,EAAA2kC,aACA50B,EAAA4B,EAAA5B,OAAA4B,EAAA5B,KAAA,IAKA/P,EAAAmhC,QAAApxB,IACA/P,EAAAmhC,OAEA+C,EAAAlkC,EAAAmhC,MAAAnhC,GAvLAm4B,EA0LAn4B,GA1LAkJ,EA0LA6G,GAzLAq0B,SACAl7B,EAAAk7B,SAAAd,UAAA3pC,KAAAw+B,IAIA/2B,OAAA62B,eAAA/uB,EAAA,YACAi8B,cAAA,EACAC,YAAA,EACA5hC,MAAA,CACA8/B,UAAA,CAAAnL,MAIA8L,EAAAzuC,QAAA,SAAAoL,GACA,IAAAy7B,EAAA,SAAAz7B,EAAAsO,OAAA,GAAA6iB,cAAAnxB,EAAA+N,MAAA,GACAinB,EAAA1sB,EAAAtI,GAEAQ,OAAA62B,eAAA/uB,EAAAtI,EAAA,CACAukC,cAAA,EACAC,YAAA,EACA5hC,MAAA,WACA,IAAA6D,EAAAN,MAAAjH,UAAA6O,MAAApL,KAAA1D,WACAwlC,EAAAzP,EAAAh2B,MAAApL,KAAA6S,GAQA,OANA/M,EAAAiN,KAAA2B,EAAAk7B,SAAAd,UAAA,SAAAgC,GACA,mBAAAA,EAAAjJ,IACAiJ,EAAAjJ,GAAAz8B,MAAA0lC,EAAAj+B,KAIAg+B,QA4JArlC,EAAAmhC,MAAApxB,GAKA/P,EAAAulC,kBAGA3G,OAAAtkC,EAAAsM,KAEAvG,WAAA,SAAA0hC,GAMA,IALA,IAAAlyB,EAAArb,KAAAkwC,UACAxiC,EAAA2N,EAAAE,MAAA,GACApP,EAAAuB,EAAAb,OACAX,EAAA,EAESA,EAAAC,IAAUD,EACnBwB,EAAAxB,GAAAL,WAAA0hC,GAGAlyB,EAAA8B,SACA9B,EAAA8B,QAAAtR,WAAA0hC,IAIAvO,KAAA,WACA,IAAA3jB,EAAArb,KAAAkwC,UACAxiC,EAAA2N,EAAAE,MAAA,GACApP,EAAAuB,EAAAb,OACAX,EAAA,EAMA,IAJAmP,EAAA8B,SACA9B,EAAA8B,QAAA6hB,OAGS9yB,EAAAC,IAAUD,EACnBwB,EAAAxB,GAAA8yB,QAIAgS,iBAAA,SAAAhvC,EAAAivC,GACA,IAAA9zB,EAAAnd,KAAAib,MAAAM,KAAAC,SAAAxZ,EAAAyb,eACA9L,EAAA3P,EAAAqb,OACA6zB,EAAAlvC,EAAAkvC,QAAA,GACAlgC,EAAAlL,EAAA6M,sBACA5G,EAAA/J,EAAA2J,OAEAI,EAAA8xB,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA7sB,EAAAmM,EAAA0gB,gBAAAlsB,EAAAs/B,EAAApT,iBACA9xB,EAAA+xB,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAA9sB,EAAAmM,EAAA2gB,YAAAnsB,EAAAs/B,EAAAnT,aACA/xB,EAAAgyB,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAA/sB,EAAAmM,EAAA4gB,YAAApsB,EAAAs/B,EAAAlT,cAGAoT,cAAA,SAAAnvC,GACA,IAAAmb,EAAAnd,KAAAib,MAAAM,KAAAC,SAAAxZ,EAAAyb,eACA9L,EAAA3P,EAAAqb,OACA6zB,EAAAlvC,EAAAkvC,QAAA,GACAlgC,EAAAlL,EAAA6M,sBACA0c,EAAAvpB,EAAAupB,cACAtjB,EAAA/J,EAAA2J,OAEAI,EAAA8xB,gBAAAqT,EAAAE,qBAAAF,EAAAE,qBAAApgC,EAAAmM,EAAAi0B,qBAAAz/B,EAAA0d,EAAAtjB,EAAA8xB,kBACA9xB,EAAA+xB,YAAAoT,EAAAG,iBAAAH,EAAAG,iBAAArgC,EAAAmM,EAAAk0B,iBAAA1/B,EAAA0d,EAAAtjB,EAAA+xB,cACA/xB,EAAAgyB,YAAAmT,EAAAvQ,iBAAAuQ,EAAAvQ,iBAAA3vB,EAAAmM,EAAAwjB,iBAAAhvB,EAAA5F,EAAAgyB,cAMAgT,eAAA,WACA,IACA11B,EADArb,KACAkwC,UACA30B,EAFAvb,KAEAmwC,aAAA50B,KACA+1B,EAAAj2B,EAAAE,KAAA1O,OACA0kC,EAAAh2B,EAAA1O,OAEA0kC,EAAAD,EACAj2B,EAAAE,KAAAwT,OAAAwiB,EAAAD,EAAAC,GACIA,EAAAD,GARJtxC,KASAwxC,eAAAF,EAAAC,EAAAD,IAOAE,eAAA,SAAAxlC,EAAAu7B,GACA,QAAAr7B,EAAA,EAAkBA,EAAAq7B,IAAWr7B,EAC7BlM,KAAAywC,mBAAAzkC,EAAAE,IAOAulC,WAAA,WACAzxC,KAAAwxC,eAAAxxC,KAAAmwC,aAAA50B,KAAA1O,OAAA,EAAAxB,UAAAwB,SAMA6kC,UAAA,WACA1xC,KAAAkwC,UAAA30B,KAAAo2B,OAMAC,YAAA,WACA5xC,KAAAkwC,UAAA30B,KAAAs2B,SAMAC,aAAA,SAAA9lC,EAAAu7B,GACAvnC,KAAAkwC,UAAA30B,KAAAwT,OAAA/iB,EAAAu7B,GACAvnC,KAAAwxC,eAAAxlC,EAAAX,UAAAwB,OAAA,IAMAklC,cAAA,WACA/xC,KAAAwxC,eAAA,EAAAnmC,UAAAwB,WAIAW,EAAAqiC,kBAAA3kC,OAAApF,EAAAyH,6CCtUA,IAAAzH,EAAc7H,EAAQ,MAEtBuD,EAAAC,QAAA,SAAA+L,GAEA,SAAAwkC,EAAAt9B,EAAA1M,GACA,OAAAlC,EAAAyhB,MAAA7S,EAAA,SAAAsB,GACA,OAAAA,EAAAhO,eAIA,SAAAiqC,EAAAv9B,EAAAzB,GACAyB,EAAA1T,QAAA,SAAAgV,EAAA9J,GAEA,OADA8J,EAAAk8B,WAAAhmC,EACA8J,IAEAtB,EAAAkJ,KAAA,SAAA/D,EAAAgE,GACA,IAAAvK,EAAAL,EAAA4K,EAAAhE,EACAtG,EAAAN,EAAA4G,EAAAgE,EACA,OAAAvK,EAAAqG,SAAApG,EAAAoG,OACArG,EAAA4+B,WAAA3+B,EAAA2+B,WACA5+B,EAAAqG,OAAApG,EAAAoG,SAEAjF,EAAA1T,QAAA,SAAAgV,UACAA,EAAAk8B,aAwBA1kC,EAAAy/B,cAAA,CACAx/B,SAAA,GAQA0kC,OAAA,SAAAl3B,EAAA5V,GACA4V,EAAAuyB,QACAvyB,EAAAuyB,MAAA,IAIAnoC,EAAA+sC,UAAA/sC,EAAA+sC,YAAA,EACA/sC,EAAA2C,SAAA3C,EAAA2C,UAAA,MACA3C,EAAAsU,OAAAtU,EAAAsU,QAAA,EAEAsB,EAAAuyB,MAAAroC,KAAAE,IAQAgtC,UAAA,SAAAp3B,EAAAq3B,GACA,IAAA3gC,EAAAsJ,EAAAuyB,MAAAvyB,EAAAuyB,MAAA7+B,QAAA2jC,IAAA,GACA,IAAA3gC,GACAsJ,EAAAuyB,MAAAze,OAAApd,EAAA,IAUA4gC,UAAA,SAAAt3B,EAAA5V,EAAAQ,GAMA,IALA,IAGAqU,EAHAha,EAAA,kCACAiM,EAAAjM,EAAA2M,OACAX,EAAA,EAGSA,EAAAC,IAAUD,EACnBgO,EAAAha,EAAAgM,GACArG,EAAAiH,eAAAoN,KACA7U,EAAA6U,GAAArU,EAAAqU,KAYAkwB,OAAA,SAAAnvB,EAAAnT,EAAAC,GACA,GAAAkT,EAAA,CAIA,IAAAu3B,EAAAv3B,EAAApV,QAAA6Z,QAAA,GACAC,EAAA7Z,EAAAD,QAAA6f,UAAA8sB,EAAA7yB,SACA8yB,EAAA9yB,EAAAI,KACA2yB,EAAA/yB,EAAAE,MACA8yB,EAAAhzB,EAAAC,IACAgzB,EAAAjzB,EAAAG,OAEA+yB,EAAAb,EAAA/2B,EAAAuyB,MAAA,QACAsF,EAAAd,EAAA/2B,EAAAuyB,MAAA,SACAuF,EAAAf,EAAA/2B,EAAAuyB,MAAA,OACAwF,EAAAhB,EAAA/2B,EAAAuyB,MAAA,UACAyF,EAAAjB,EAAA/2B,EAAAuyB,MAAA,aAGAyE,EAAAY,GAAA,GACAZ,EAAAa,GAAA,GACAb,EAAAc,GAAA,GACAd,EAAAe,GAAA,GAwCA,IAAAE,EAAAprC,EAAA2qC,EAAAC,EACAS,EAAAprC,EAAA4qC,EAAAC,EAEAQ,EAAAD,EAAA,EAGAE,GAAAvrC,EAJAorC,EAAA,IAIAL,EAAAhmC,OAAAimC,EAAAjmC,QAGAymC,GAAAvrC,EAAAqrC,IAAAL,EAAAlmC,OAAAmmC,EAAAnmC,QAGA0mC,EAAAL,EACAM,EAAAL,EACAM,EAAA,GAqBA3tC,EAAAiN,KAAA8/B,EAAAl8B,OAAAm8B,EAAAC,EAAAC,GAnBA,SAAAvF,GACA,IAAAiG,EACAC,EAAAlG,EAAAkG,eAEAA,GACAD,EAAAjG,EAAArD,OAAAqD,EAAA2E,UAAAc,EAAAK,EAAAD,GACAE,GAAAE,EAAA3rC,SAEA2rC,EAAAjG,EAAArD,OAAAiJ,EAAAD,GACAG,GAAAG,EAAA5rC,OAGA2rC,EAAAtuC,KAAA,CACAu8B,WAAAiS,EACAD,UACAjG,UAOA,IAAAmG,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAjuC,EAAAiN,KAAAggC,EAAAp8B,OAAAq8B,GAAA,SAAAgB,GACA,GAAAA,EAAAC,WAAA,CACA,IAAAC,EAAAF,EAAAC,aACAL,EAAAzjC,KAAAJ,IAAA6jC,EAAAM,EAAAn0B,MACA8zB,EAAA1jC,KAAAJ,IAAA8jC,EAAAK,EAAAr0B,UAIA/Z,EAAAiN,KAAA8/B,EAAAl8B,OAAAm8B,GAAA,SAAAqB,GACA,GAAAA,EAAAF,WAAA,CACA,IAAAC,EAAAC,EAAAF,aACAH,EAAA3jC,KAAAJ,IAAA+jC,EAAAI,EAAAt0B,KACAm0B,EAAA5jC,KAAAJ,IAAAgkC,EAAAG,EAAAp0B,WAOA,IAAAs0B,EAAA3B,EACA4B,EAAA3B,EACA4B,EAAA3B,EACA4B,EAAA3B,EA2BA9sC,EAAAiN,KAAA8/B,EAAAl8B,OAAAm8B,GAAA0B,GAEA1uC,EAAAiN,KAAA8/B,EAAA,SAAApF,GACA2G,GAAA3G,EAAA3lC,QAGAhC,EAAAiN,KAAA+/B,EAAA,SAAArF,GACA4G,GAAA5G,EAAA3lC,QAIAhC,EAAAiN,KAAAggC,EAAAp8B,OAAAq8B,GAAAwB,GAGA1uC,EAAAiN,KAAAggC,EAAA,SAAAtF,GACA6G,GAAA7G,EAAA1lC,SAGAjC,EAAAiN,KAAAigC,EAAA,SAAAvF,GACA8G,GAAA9G,EAAA1lC,SAqBAjC,EAAAiN,KAAA8/B,EAAAl8B,OAAAm8B,GAlBA,SAAArF,GACA,IAAAgH,EAAA3uC,EAAA8hB,cAAA6rB,EAAA,SAAAC,GACA,OAAAA,EAAAjG,UAGAiH,EAAA,CACA30B,KAAA,EACAF,MAAA,EACAD,IAAA00B,EACAx0B,OAAAy0B,GAGAE,GACAhH,EAAArD,OAAAqK,EAAAf,QAAA5rC,MAAA0rC,EAAAkB,KAQAN,EAAA3B,EACA4B,EAAA3B,EACA4B,EAAA3B,EACA4B,EAAA3B,EAEA9sC,EAAAiN,KAAA8/B,EAAA,SAAApF,GACA2G,GAAA3G,EAAA3lC,QAGAhC,EAAAiN,KAAA+/B,EAAA,SAAArF,GACA4G,GAAA5G,EAAA3lC,QAGAhC,EAAAiN,KAAAggC,EAAA,SAAAtF,GACA6G,GAAA7G,EAAA1lC,SAEAjC,EAAAiN,KAAAigC,EAAA,SAAAvF,GACA8G,GAAA9G,EAAA1lC,SAIA,IAAA4sC,EAAAxkC,KAAAJ,IAAA6jC,EAAAQ,EAAA,GACAA,GAAAO,EACAN,GAAAlkC,KAAAJ,IAAA8jC,EAAAQ,EAAA,GAEA,IAAAO,EAAAzkC,KAAAJ,IAAA+jC,EAAAQ,EAAA,GACAA,GAAAM,EACAL,GAAApkC,KAAAJ,IAAAgkC,EAAAQ,EAAA,GAKA,IAAAM,EAAA9sC,EAAAusC,EAAAC,EACAO,EAAAhtC,EAAAssC,EAAAC,EAEAS,IAAAvB,GAAAsB,IAAArB,IACA1tC,EAAAiN,KAAA8/B,EAAA,SAAApF,GACAA,EAAA1lC,OAAA8sC,IAGA/uC,EAAAiN,KAAA+/B,EAAA,SAAArF,GACAA,EAAA1lC,OAAA8sC,IAGA/uC,EAAAiN,KAAAggC,EAAA,SAAAtF,GACAA,EAAA2E,YACA3E,EAAA3lC,MAAAgtC,KAIAhvC,EAAAiN,KAAAigC,EAAA,SAAAvF,GACAA,EAAA2E,YACA3E,EAAA3lC,MAAAgtC,KAIAtB,EAAAqB,EACAtB,EAAAuB,GAIA,IAAA/0B,EAAA0yB,EAAAkC,EACA/0B,EAAA+yB,EAAAiC,EAwBA9uC,EAAAiN,KAAA8/B,EAAAl8B,OAAAo8B,GAAAgC,GAGAh1B,GAAAwzB,EACA3zB,GAAA4zB,EAEA1tC,EAAAiN,KAAA+/B,EAAAiC,GACAjvC,EAAAiN,KAAAigC,EAAA+B,GAGA95B,EAAA2lB,UAAA,CACA7gB,KAAAq0B,EACAx0B,IAAA00B,EACAz0B,MAAAu0B,EAAAb,EACAzzB,OAAAw0B,EAAAd,GAIA1tC,EAAAiN,KAAAkgC,EAAA,SAAAxF,GACAA,EAAA1tB,KAAA9E,EAAA2lB,UAAA7gB,KACA0tB,EAAA7tB,IAAA3E,EAAA2lB,UAAAhhB,IACA6tB,EAAA5tB,MAAA5E,EAAA2lB,UAAA/gB,MACA4tB,EAAA3tB,OAAA7E,EAAA2lB,UAAA9gB,OAEA2tB,EAAArD,OAAAmJ,EAAAC,KAjLA,SAAAgB,EAAA/G,GACA,IAAAgH,EAAA3uC,EAAA8hB,cAAA6rB,EAAA,SAAAuB,GACA,OAAAA,EAAAvH,UAGA,GAAAgH,EACA,GAAAhH,EAAAkG,eAAA,CACA,IAAAe,EAAA,CACA30B,KAAA5P,KAAAJ,IAAAqkC,EAAAR,GACA/zB,MAAA1P,KAAAJ,IAAAskC,EAAAR,GACAj0B,IAAA,EACAE,OAAA,GAKA2tB,EAAArD,OAAAqD,EAAA2E,UAAAc,EAAAK,EAAAJ,EAAA,EAAAuB,QAEAjH,EAAArD,OAAAqK,EAAAf,QAAA5rC,MAAA0rC,GAiHA,SAAAuB,EAAAtH,GACAA,EAAAkG,gBACAlG,EAAA1tB,KAAA0tB,EAAA2E,UAAAK,EAAA2B,EACA3G,EAAA5tB,MAAA4tB,EAAA2E,UAAAtqC,EAAA4qC,EAAA0B,EAAAb,EACA9F,EAAA7tB,MACA6tB,EAAA3tB,OAAAF,EAAA6tB,EAAA1lC,OAGA6X,EAAA6tB,EAAA3tB,SAIA2tB,EAAA1tB,OACA0tB,EAAA5tB,MAAAE,EAAA0tB,EAAA3lC,MACA2lC,EAAA7tB,IAAA00B,EACA7G,EAAA3tB,OAAAw0B,EAAAd,EAGAzzB,EAAA0tB,EAAA5tB,8CCnYA,IAAApS,EAAexP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBuD,EAAAC,QAAA,SAAA+L,GAEAA,EAAA2Z,aAAA,CAGA8tB,aAAA,GAKAxnC,SAAA,GACAynC,kBAAA,SAAA1oC,EAAA2oC,EAAAC,GACAp1C,KAAAi1C,aAAAzoC,GAAA2oC,EACAn1C,KAAAyN,SAAAjB,GAAA1G,EAAA4F,MAAA0pC,IAEAxJ,oBAAA,SAAAp/B,GACA,OAAAxM,KAAAi1C,aAAAnoC,eAAAN,GAAAxM,KAAAi1C,aAAAzoC,QAAAmE,GAEAyW,iBAAA,SAAA5a,GAEA,OAAAxM,KAAAyN,SAAAX,eAAAN,GAAA1G,EAAAI,MAAA,GAA+D,CAAAuH,EAAA4Z,MAAArnB,KAAAyN,SAAAjB,KAAA,IAE/D6oC,oBAAA,SAAA7oC,EAAA8oC,GACAt1C,KACAyN,SAAAX,eAAAN,KADAxM,KAEAyN,SAAAjB,GAAA1G,EAAAoF,OAFAlL,KAEAyN,SAAAjB,GAAA8oC,KAGAxJ,kBAAA,SAAA7wB,GAEAnV,EAAAiN,KAAAkI,EAAAgwB,OAAA,SAAA5jB,GAEAA,EAAA+qB,UAAA/qB,EAAAxhB,QAAAusC,UACA/qB,EAAArf,SAAAqf,EAAAxhB,QAAAmC,SACAqf,EAAA1N,OAAA0N,EAAAxhB,QAAA8T,OACAnM,EAAAy/B,cAAAkF,OAAAl3B,EAAAoM,2CCtCA,IAAA5Z,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MACtBs3C,EAAYt3C,EAAQ,MA8DpB,SAAAu3C,EAAA7lC,GACA,IACAzD,EAAAC,EADA69B,EAAA,GAGA,IAAA99B,EAAA,EAAAC,EAAAwD,EAAA9C,OAAiCX,EAAAC,IAAUD,EAC3C89B,EAAA7kC,KAAAwK,EAAAzD,GAAAsR,OAGA,OAAAwsB,EAGA,SAAAyL,EAAApuB,EAAA1V,EAAA+jC,GACA,IAAAC,EAAAtuB,EAAAuuB,gBAAAjkC,GASA,OAPA+jC,IAEAC,GADA,IAAAhkC,GACA0V,EAAAuuB,gBAAA,GAAAD,GAAA,GAEAA,EAAAtuB,EAAAuuB,gBAAAjkC,EAAA,OAGAgkC,EAjFAloC,EAAA1H,KAAA,SACAwgC,SAAA,EACAv+B,SAAA,OACAic,QAAA,EAGA4xB,UAAA,CACAtP,SAAA,EACAhnC,MAAA,qBACA8/B,UAAA,EACAyW,YAAA,EACAC,iBAAA,EACAC,WAAA,EACAC,eAAA,GACAC,cAAA,EACAC,cAAA,mBACAC,mBAAA,GACAC,yBAAA,EACAX,iBAAA,EACA/V,WAAA,GACAC,iBAAA,GAIA0W,WAAA,CAEA/P,SAAA,EAGAgQ,YAAA,GAGAC,WAAA,IAGA72B,QAAA,CACAC,IAAA,EACAE,OAAA,IAKAnQ,MAAA,CACA8mC,aAAA,EACAC,YAAA,EACAC,YAAA,GACAC,QAAA,EACAj3B,QAAA,EACA1M,SAAA,EACAszB,SAAA,EACAsQ,UAAA,EACAC,gBAAA,EACAC,YAAA,EAEA7xC,SAAAqwC,EAAA/jC,WAAAvL,OACA+wC,MAAA,GACAC,MAAA,MA4BAz1C,EAAAC,QAAA,SAAA+L,GAEA,SAAA0pC,EAAA92C,EAAA+2C,EAAA9oB,GACA,OAAAvoB,EAAA2L,QAAA0lC,GACArxC,EAAAsoB,YAAAhuB,EAAAiuB,EAAA8oB,GACA/2C,EAAAwuB,YAAAuoB,GAAArvC,MAGA,SAAAsvC,EAAAvxC,GACA,IAAAmL,EAAAlL,EAAAkL,eACAwuB,EAAA/xB,EAAA2hB,OACA5L,EAAAxS,EAAAnL,EAAAwxC,SAAA7X,EAAAjgB,iBACA6D,EAAApS,EAAAnL,EAAAqoB,UAAAsR,EAAAhgB,kBACA83B,EAAAtmC,EAAAnL,EAAAsoB,WAAAqR,EAAAlgB,mBAEA,OACAkE,OACAJ,QACAk0B,SACAjpB,KAAAvoB,EAAAkoB,WAAAxK,EAAAJ,EAAAk0B,IAIA,SAAAC,EAAA1xC,GACA,OAAAC,EAAAD,QAAA0f,aACAzf,EAAAkL,eAAAnL,EAAA2wC,WAAA,KACA1wC,EAAAkL,eAAAnL,EAAAwxC,SAAA5pC,EAAA2hB,OAAA7P,kBAGA/R,EAAAgqC,MAAAxsC,EAAAE,OAAA,CAOA+oC,WAAA,WAEA,OACAl0B,KAFA/f,KAEAwsB,aAAA,EACA5M,IAHA5f,KAGA0sB,YAAA,EACA7M,MAJA7f,KAIA2sB,cAAA,EACA7M,OALA9f,KAKA4sB,eAAA,IAQA6qB,SAAA,WACA,OAAAz3C,KAAA03C,QAOA7L,kBAAA,WACA,IAAAl8B,EAAA3P,KAAA6F,QAAA8J,MAWA,QAAAvD,KAVA,IAAAuD,EAAAqnC,QACArnC,EAAAqnC,MAAA,CACAzQ,SAAA,KAGA,IAAA52B,EAAAsnC,QACAtnC,EAAAsnC,MAAA,CACA1Q,SAAA,IAGA52B,EACA,UAAAvD,GAAA,UAAAA,SACA,IAAAuD,EAAAqnC,MAAA5qC,KACAuD,EAAAqnC,MAAA5qC,GAAAuD,EAAAvD,SAEA,IAAAuD,EAAAsnC,MAAA7qC,KACAuD,EAAAsnC,MAAA7qC,GAAAuD,EAAAvD,MAKAurC,aAAA,WACA7xC,EAAAZ,SAAAlF,KAAA6F,QAAA8xC,aAAA,CAAA33C,QAEAoqC,OAAA,SAAAwN,EAAAC,EAAAC,GACA,IACA5rC,EAAAC,EAAA69B,EAAAxsB,EAAA7N,EAAAwnC,EADA3rC,EAAAxL,KAwDA,IApDAwL,EAAAmsC,eAGAnsC,EAAAosC,WACApsC,EAAAqsC,YACArsC,EAAAssC,QAAAhyC,EAAAoF,OAAA,CACA6U,KAAA,EACAF,MAAA,EACAD,IAAA,EACAE,OAAA,GACIg4B,GACJtsC,EAAAusC,iBAAAvsC,EAAAusC,kBAAA,GAGAvsC,EAAAwsC,sBACAxsC,EAAAysC,gBACAzsC,EAAA0sC,qBAGA1sC,EAAA2sC,mBACA3sC,EAAA4sC,sBACA5sC,EAAA6sC,kBASA7sC,EAAA8sC,mBAIA3oC,EAAAnE,EAAA+sC,cAAA,GAEA/sC,EAAAgtC,kBAEAhtC,EAAAitC,8BAKAzO,EAAAx+B,EAAAktC,qBAAA/oC,IAAAnE,EAAAmE,MAEAnE,EAAAmtC,6BAEAntC,EAAAmE,MAAAq6B,EAKA99B,EAAA,EAAAC,EAAA69B,EAAAn9B,OAAoCX,EAAAC,IAAUD,EAC9CsR,EAAAwsB,EAAA99B,IACAirC,EAAAxnC,EAAAzD,IAOAirC,EAAA35B,QALA7N,EAAAxK,KAAAgyC,EAAA,CACA35B,QACAy5B,OAAA,IAoBA,OAbAzrC,EAAAksC,OAAA/nC,EAGAnE,EAAAotC,8BACAptC,EAAAqtC,wBACArtC,EAAAstC,6BAEAttC,EAAAutC,YACAvtC,EAAAwtC,MACAxtC,EAAAytC,WAEAztC,EAAA0tC,cAEA1tC,EAAAkoC,SAGAwF,YAAA,WACApzC,EAAAZ,SAAAlF,KAAA6F,QAAAqzC,YAAA,CAAAl5C,QAKAg4C,oBAAA,WACAlyC,EAAAZ,SAAAlF,KAAA6F,QAAAmyC,oBAAA,CAAAh4C,QAEAi4C,cAAA,WACA,IAAAzsC,EAAAxL,KAEAwL,EAAAmoC,gBAEAnoC,EAAA1D,MAAA0D,EAAAosC,SACApsC,EAAAuU,KAAA,EACAvU,EAAAqU,MAAArU,EAAA1D,QAEA0D,EAAAzD,OAAAyD,EAAAqsC,UAGArsC,EAAAoU,IAAA,EACApU,EAAAsU,OAAAtU,EAAAzD,QAIAyD,EAAAghB,YAAA,EACAhhB,EAAAkhB,WAAA,EACAlhB,EAAAmhB,aAAA,EACAnhB,EAAAohB,cAAA,GAEAsrB,mBAAA,WACApyC,EAAAZ,SAAAlF,KAAA6F,QAAAqyC,mBAAA,CAAAl4C,QAIAm4C,iBAAA,WACAryC,EAAAZ,SAAAlF,KAAA6F,QAAAsyC,iBAAA,CAAAn4C,QAEAo4C,oBAAAtyC,EAAAsM,KACAimC,gBAAA,WACAvyC,EAAAZ,SAAAlF,KAAA6F,QAAAwyC,gBAAA,CAAAr4C,QAIAs4C,iBAAA,WACAxyC,EAAAZ,SAAAlF,KAAA6F,QAAAyyC,iBAAA,CAAAt4C,QAEAu4C,WAAAzyC,EAAAsM,KACAomC,gBAAA,WACA1yC,EAAAZ,SAAAlF,KAAA6F,QAAA2yC,gBAAA,CAAAx4C,QAGAy4C,4BAAA,WACA3yC,EAAAZ,SAAAlF,KAAA6F,QAAA4yC,4BAAA,CAAAz4C,QAEA04C,qBAAA,WACA,IAEAS,EAFAn5C,KAEA6F,QAAA8J,MAFA3P,KAGA2P,MAHA3P,KAGA2P,MAAA8D,IAAA0lC,EAAAC,cAAAD,EAAAj0C,SAAAlF,OAEA24C,2BAAA,WACA7yC,EAAAZ,SAAAlF,KAAA6F,QAAA8yC,2BAAA,CAAA34C,QAKA44C,4BAAA,WACA9yC,EAAAZ,SAAAlF,KAAA6F,QAAA+yC,4BAAA,CAAA54C,QAEA64C,sBAAA,WACA,IAAArtC,EAAAxL,KACAI,EAAAoL,EAAAiX,IACA02B,EAAA3tC,EAAA3F,QAAA8J,MACAq6B,EAAAwL,EAAAhqC,EAAAksC,QAIA2B,EAAAjC,EAAA+B,GACA/4C,EAAAiuB,KAAAgrB,EAAAhrB,KAEA,IAAAirB,EAAAH,EAAAzC,aAAA,EAEA,GAAA1M,EAAAn9B,QAAArB,EAAA3F,QAAA0gC,SAAA/6B,EAAAmoC,eASA,IARA,IAEA4F,EAFAC,EAAA1zC,EAAAsoB,YAAAhuB,EAAAi5C,EAAAhrB,KAAA2b,EAAAx+B,EAAAusC,kBACA0B,EAAAD,EAIAE,EAAAluC,EAAAoqC,gBAAA,GAAApqC,EAAAoqC,gBAAA,KAGA6D,EAAAC,GAAAJ,EAAAH,EAAAxC,aAAA,CACA,IAAAgD,EAAA7zC,EAAA4iB,UAAA4wB,GAIA,GAHAC,EAAAppC,KAAA8Q,IAAA04B,GACAxpC,KAAAiR,IAAAu4B,GAEAH,EAAAhuC,EAAAqsC,UAAA,CAEAyB,IACA,MAGAA,IACAG,EAAAF,EAAAC,EAIAhuC,EAAA8tC,iBAEAR,2BAAA,WACAhzC,EAAAZ,SAAAlF,KAAA6F,QAAAizC,2BAAA,CAAA94C,QAKA+4C,UAAA,WACAjzC,EAAAZ,SAAAlF,KAAA6F,QAAAkzC,UAAA,CAAA/4C,QAEAg5C,IAAA,WACA,IAAAxtC,EAAAxL,KAEA0zC,EAAAloC,EAAAkoC,QAAA,CACA5rC,MAAA,EACAC,OAAA,GAGAiiC,EAAAwL,EAAAhqC,EAAAksC,QAEA3P,EAAAv8B,EAAA3F,QACAszC,EAAApR,EAAAp4B,MACAiqC,EAAA7R,EAAAuO,WACAuD,EAAA9R,EAAA8N,UACAtP,EAAAwB,EAAAxB,QACAoN,EAAAnoC,EAAAmoC,eAEA0F,EAAAjC,EAAA+B,GACAlD,EAAAlO,EAAA8N,UAAAI,eAkBA,GAbAvC,EAAA5rC,MAFA6rC,EAEAnoC,EAAAsuC,cAAAtuC,EAAAosC,SAAApsC,EAAAssC,QAAA/3B,KAAAvU,EAAAssC,QAAAj4B,MAAArU,EAAAosC,SAEArR,GAAAsT,EAAA7D,UAAAC,EAAA,EAKAvC,EAAA3rC,OADA4rC,EACApN,GAAAsT,EAAA7D,UAAAC,EAAA,EAEAzqC,EAAAqsC,UAIA+B,EAAArT,WAAA,CACA,IAEAwT,EAFAxC,EAAAqC,GACA9zC,EAAAD,QAAA6f,UAAAk0B,EAAAj6B,SACA5X,OAEA4rC,EACAD,EAAA3rC,QAAAgyC,EAEArG,EAAA5rC,OAAAiyC,EAKA,GAAAZ,EAAA5S,WAAA,CACA,IAAAyT,EAAAl0C,EAAAsoB,YAAA5iB,EAAAiX,IAAA42B,EAAAhrB,KAAA2b,EAAAx+B,EAAAusC,kBACAkC,EAAAn0C,EAAAmpB,mBAAA+a,GACAkQ,EAAA,GAAAb,EAAA71B,KACA22B,EAAA3uC,EAAA3F,QAAA8J,MAAAgQ,QAEA,GAAAg0B,EAAA,CAEAnoC,EAAA4uC,kBAAAJ,EAEA,IAAAL,EAAA7zC,EAAA4iB,UAAAld,EAAA8tC,eACAC,EAAAppC,KAAA8Q,IAAA04B,GAIAU,EAHAlqC,KAAAiR,IAAAu4B,GAGAK,EACAX,EAAA71B,KAAAy2B,EACAC,GAAAD,EAAA,GACAC,EAEAxG,EAAA3rC,OAAAoI,KAAAH,IAAAxE,EAAAqsC,UAAAnE,EAAA3rC,OAAAsyC,EAAAF,GAEA3uC,EAAAiX,IAAA4L,KAAAgrB,EAAAhrB,KACA,IAAAisB,EAAApD,EAAA1rC,EAAAiX,IAAAunB,EAAA,GAAAqP,EAAAhrB,MACAksB,EAAArD,EAAA1rC,EAAAiX,IAAAunB,IAAAn9B,OAAA,GAAAwsC,EAAAhrB,MAIA,IAAA7iB,EAAA8tC,eACA9tC,EAAAghB,YAAA,WAAAub,EAAA//B,SAAAuxC,EAAAe,EAAA,EAAAf,EAAAW,EAAA,EACA1uC,EAAAmhB,aAAA,WAAAob,EAAA//B,SAAAuxC,EAAAW,EAAA,EAAAX,EAAAgB,EAAA,IAEA/uC,EAAAghB,YAAA8tB,EAAA,IACA9uC,EAAAmhB,aAAA4tB,EAAA,UAKApB,EAAAvC,OACAoD,EAAA,EAIAA,GAAAG,EAAAD,EAGAxG,EAAA5rC,MAAAqI,KAAAH,IAAAxE,EAAAosC,SAAAlE,EAAA5rC,MAAAkyC,GAEAxuC,EAAAkhB,WAAA2sB,EAAA71B,KAAA,EACAhY,EAAAohB,cAAAysB,EAAA71B,KAAA,EAIAhY,EAAAgvC,gBAEAhvC,EAAA1D,MAAA4rC,EAAA5rC,MACA0D,EAAAzD,OAAA2rC,EAAA3rC,QAOAyyC,cAAA,WACA,IAAAhvC,EAAAxL,KACAwL,EAAAssC,UACAtsC,EAAAghB,YAAArc,KAAAJ,IAAAvE,EAAAghB,YAAAhhB,EAAAssC,QAAA/3B,KAAA,GACAvU,EAAAkhB,WAAAvc,KAAAJ,IAAAvE,EAAAkhB,WAAAlhB,EAAAssC,QAAAl4B,IAAA,GACApU,EAAAmhB,aAAAxc,KAAAJ,IAAAvE,EAAAmhB,aAAAnhB,EAAAssC,QAAAj4B,MAAA,GACArU,EAAAohB,cAAAzc,KAAAJ,IAAAvE,EAAAohB,cAAAphB,EAAAssC,QAAAh4B,OAAA,KAIAm5B,SAAA,WACAnzC,EAAAZ,SAAAlF,KAAA6F,QAAAozC,SAAA,CAAAj5C,QAIA2zC,aAAA,WACA,cAAA3zC,KAAA6F,QAAAmC,UAAA,WAAAhI,KAAA6F,QAAAmC,UAEA8xC,YAAA,WACA,OAAA95C,KAAA6F,QAAA,WAIA40C,cAAA,SAAAC,GAEA,GAAA50C,EAAAwM,cAAAooC,GACA,OAAAC,IAGA,oBAAAD,IAAAxtC,SAAAwtC,GACA,OAAAC,IAGA,GAAAD,EACA,GAAA16C,KAAA2zC,gBACA,QAAAhjC,IAAA+pC,EAAA/yC,EACA,OAAA3H,KAAAy6C,cAAAC,EAAA/yC,QAEK,QAAAgJ,IAAA+pC,EAAA9yC,EACL,OAAA5H,KAAAy6C,cAAAC,EAAA9yC,GAKA,OAAA8yC,GAQAE,iBAAA90C,EAAAsM,KASAyoC,iBAAA/0C,EAAAsM,KAOA0oC,iBAAAh1C,EAAAsM,KAMAwjC,gBAAA,SAAAjkC,GACA,IAAAnG,EAAAxL,KACAikB,EAAAzY,EAAA3F,QAAAoe,OACA,GAAAzY,EAAAmoC,eAAA,CACA,IACA+F,GADAluC,EAAA1D,OAAA0D,EAAAghB,YAAAhhB,EAAAmhB,eACAxc,KAAAJ,IAAAvE,EAAAksC,OAAA7qC,QAAAoX,EAAA,QACA82B,EAAArB,EAAA/nC,EAAAnG,EAAAghB,YAEAvI,IACA82B,GAAArB,EAAA,GAGA,IAAAsB,EAAAxvC,EAAAuU,KAAA5P,KAAAO,MAAAqqC,GAEA,OADAC,GAAAxvC,EAAAsuC,cAAAtuC,EAAAssC,QAAA/3B,KAAA,EAGA,IAAAk7B,EAAAzvC,EAAAzD,QAAAyD,EAAAkhB,WAAAlhB,EAAAohB,eACA,OAAAphB,EAAAoU,IAAAjO,GAAAspC,GAAAzvC,EAAAksC,OAAA7qC,OAAA,KAOAquC,mBAAA,SAAAC,GACA,IAAA3vC,EAAAxL,KACA,GAAAwL,EAAAmoC,eAAA,CACA,IACAyH,GADA5vC,EAAA1D,OAAA0D,EAAAghB,YAAAhhB,EAAAmhB,eACAwuB,EAAA3vC,EAAAghB,YAEAwuB,EAAAxvC,EAAAuU,KAAA5P,KAAAO,MAAA0qC,GAEA,OADAJ,GAAAxvC,EAAAsuC,cAAAtuC,EAAAssC,QAAA/3B,KAAA,EAGA,OAAAvU,EAAAoU,IAAAu7B,EAAA3vC,EAAAzD,QAOAszC,aAAA,WACA,OAAAr7C,KAAA66C,iBAAA76C,KAAAs7C,iBAGAA,aAAA,WACA,IACAtrC,EADAhQ,KACAgQ,IACAD,EAFA/P,KAEA+P,IAEA,OAJA/P,KAIAy2C,YAAA,EACAzmC,EAAA,GAAAD,EAAA,EAAAA,EACAC,EAAA,GAAAD,EAAA,EAAAC,EACA,GAOAurC,UAAA,SAAA5rC,GACA,IAAA6rC,EASAtvC,EAAAirC,EAGAlnC,EAXAzE,EAAAxL,KACA2zC,EAAAnoC,EAAAmoC,eACA8H,EAAAjwC,EAAA3F,QAAA8J,MAAAqnC,MACA0E,EAAA/rC,EAAA9C,OACA8uC,EAAA71C,EAAA4iB,UAAAld,EAAA8tC,eACAC,EAAAppC,KAAA8Q,IAAA06B,GACAC,EAAApwC,EAAA4uC,kBAAAb,EACAt/B,EAAA,GAuBA,IAlBAwhC,EAAAI,gBACA5rC,EAAAwrC,EAAAI,eAGAlI,IACA6H,GAAA,GAEAI,EAAAH,EAAA3E,iBAAA4E,EAAAlwC,EAAA1D,OAAA0D,EAAAghB,YAAAhhB,EAAAmhB,gBACA6uB,EAAA,EAAArrC,KAAAC,OAAAwrC,EAAAH,EAAA3E,iBAAA4E,GAAAlwC,EAAA1D,OAAA0D,EAAAghB,YAAAhhB,EAAAmhB,iBAKA1c,GAAAyrC,EAAAzrC,IACAurC,EAAArrC,KAAAJ,IAAAyrC,EAAArrC,KAAAC,MAAAsrC,EAAAzrC,MAIA/D,EAAA,EAAcA,EAAAwvC,EAAexvC,IAC7BirC,EAAAxnC,EAAAzD,IAGAsvC,EAAA,GAAAtvC,EAAAsvC,EAAA,GAAAtvC,EAAAsvC,GAAA,GAAAtvC,EAAAsvC,GAAAE,IACAxvC,IAAAwvC,EAAA,UAEAvE,EAAA35B,MAEAvD,EAAA9U,KAAAgyC,GAEA,OAAAl9B,GAKA+kB,KAAA,SAAA4B,GACA,IAAAp1B,EAAAxL,KACA6F,EAAA2F,EAAA3F,QACA,GAAAA,EAAA0gC,QAAA,CAIA,IAAAnmC,EAAAoL,EAAAiX,IACA+c,EAAA/xB,EAAA2hB,OACAqsB,EAAA51C,EAAA8J,MAAAqnC,MACA8E,EAAAj2C,EAAA8J,MAAAsnC,OAAAwE,EACA5F,EAAAhwC,EAAAgwC,UACAS,EAAAzwC,EAAAywC,WAEAyF,EAAA,IAAAvwC,EAAA8tC,cACA3F,EAAAnoC,EAAAmoC,eAEAhkC,EAAA8rC,EAAA5E,SAAArrC,EAAA+vC,UAAA/vC,EAAAisC,YAAAjsC,EAAAisC,WACAuE,EAAAl2C,EAAAkL,eAAAyqC,EAAAQ,UAAAzc,EAAAngB,kBACAg6B,EAAAjC,EAAAqE,GACAS,EAAAp2C,EAAAkL,eAAA8qC,EAAAG,UAAAzc,EAAAngB,kBACA88B,EAAA/E,EAAA0E,GAEAM,EAAAvG,EAAAG,UAAAH,EAAAI,eAAA,EAEAoG,EAAAv2C,EAAAkL,eAAAslC,EAAA2F,UAAAzc,EAAAngB,kBACAi9B,EAAAlF,EAAAd,GACAiG,EAAAz2C,EAAAD,QAAA6f,UAAA4wB,EAAA32B,SACAg8B,EAAA71C,EAAA4iB,UAAAld,EAAA8tC,eAEAkD,EAAA,GAEAC,EAAA,UAAA52C,EAAAmC,SAAAwD,EAAAuU,KAAAvU,EAAAqU,MAAAu8B,EACAM,EAAA,UAAA72C,EAAAmC,SAAAwD,EAAAuU,KAAAq8B,EAAA5wC,EAAAqU,MACA88B,EAAA,WAAA92C,EAAAmC,SAAAwD,EAAAoU,IAAApU,EAAAsU,OAAAs8B,EACAQ,EAAA,WAAA/2C,EAAAmC,SAAAwD,EAAAoU,IAAAw8B,EAAA5wC,EAAAsU,OAiKA,GA/JAha,EAAAiN,KAAApD,EAAA,SAAAwnC,EAAAxlC,GAEA,IAAA7L,EAAAwM,cAAA6kC,EAAA35B,OAAA,CAIA,IACA6hB,EAAAwd,EAAAld,EAAAC,EAeAkd,EAAAC,EAAAC,EAAAC,EAAAjc,EAAAE,EAAAD,EAAAjP,EAAAkrB,EAAAC,EAhBA3/B,EAAA25B,EAAA35B,MAEA7L,IAAAnG,EAAA4xC,eAAAv3C,EAAAoe,SAAA4xB,EAAAH,iBAEArW,EAAAwW,EAAAK,cACA2G,EAAAhH,EAAAM,cACAxW,EAAAkW,EAAAO,mBACAxW,EAAAiW,EAAAQ,2BAEAhX,EAAAv5B,EAAA6M,sBAAAkjC,EAAAxW,UAAA1tB,GACAkrC,EAAA/2C,EAAA6M,sBAAAkjC,EAAAt2C,MAAAoS,GACAguB,EAAA75B,EAAAkL,eAAA6kC,EAAAlW,WAAAH,EAAAG,YACAC,EAAA95B,EAAAkL,eAAA6kC,EAAAjW,iBAAAJ,EAAAI,mBAKA,IAAAyd,EAAA,SACAC,EAAA,SACAnD,EAAAsB,EAAA97B,QAEA,GAAAg0B,EAAA,CACA,IAAA4J,EAAAnB,EAAAjC,EAEA,WAAAt0C,EAAAmC,UAEAs1C,EAAAvB,EAAA,eACAsB,EAAAtB,EAAA,iBACAoB,EAAA3xC,EAAAoU,IAAA29B,IAGAD,EAAAvB,EAAA,kBACAsB,EAAAtB,EAAA,gBACAoB,EAAA3xC,EAAAsU,OAAAy9B,GAGA,IAAAC,EAAA/H,EAAAjqC,EAAAmG,EAAAkkC,EAAAH,iBAAA/lC,EAAA9C,OAAA,GACA2wC,EAAAhyC,EAAAuU,OACA88B,EAAA,iBAEAW,GAAA13C,EAAAwjB,WAAA+V,GAEA6d,EAAA1xC,EAAAoqC,gBAAAjkC,GAAA8pC,EAAA1E,YAEA+F,EAAAE,EAAAhc,EAAAC,EAAAuc,EACAT,EAAAJ,EACAM,EAAAL,EACA1b,EAAAN,EAAAhhB,IACAoS,EAAA4O,EAAA9gB,WACK,CACL,IACA29B,EADAC,EAAA,SAAA73C,EAAAmC,SAGAyzC,EAAA7E,QACAyG,EAAAK,EAAA,eACAD,EAAAtD,IAEAkD,EAAAK,EAAA,eACAD,EAAArB,EAAAjC,GAGA+C,EAAAQ,EAAAlyC,EAAAqU,MAAA49B,EAAAjyC,EAAAuU,KAAA09B,EAEA,IAAAE,EAAAlI,EAAAjqC,EAAAmG,EAAAkkC,EAAAH,iBAAA/lC,EAAA9C,OAAA,GACA8wC,EAAAnyC,EAAAoU,MACAi9B,EAAA,iBAEAc,GAAA73C,EAAAwjB,WAAA+V,GAEA8d,EAAA3xC,EAAAoqC,gBAAAjkC,GAAA8pC,EAAA1E,YAEA+F,EAAAL,EACAO,EAAAN,EACA1b,EAAAJ,EAAA7gB,KACAkhB,EAAAL,EAAA/gB,MACAk9B,EAAAE,EAAA/b,EAAAlP,EAAA2rB,EAGAnB,EAAAr3C,KAAA,CACA23C,MACAC,MACAC,MACAC,MACAjc,KACAE,KACAD,KACAjP,KACAkrB,SACAC,SACAS,QAAAve,EACAwe,QAAAhB,EACAiB,aAAAne,EACAoe,mBAAAne,EACAoe,UAAA,EAAArC,EACAn+B,QACAy5B,MAAAE,EAAAF,MACAqG,eACAD,iBAKAv3C,EAAAiN,KAAAypC,EAAA,SAAAyB,GA0BA,GAzBApI,EAAAtP,UACAnmC,EAAAqkB,OACArkB,EAAAi/B,UAAA4e,EAAAL,QACAx9C,EAAAg/B,YAAA6e,EAAAJ,QACAz9C,EAAAkgC,cACAlgC,EAAAkgC,YAAA2d,EAAAH,cACA19C,EAAAmgC,eAAA0d,EAAAF,oBAGA39C,EAAAsjB,YAEAmyB,EAAAG,YACA51C,EAAA2iB,OAAAk7B,EAAAnB,IAAAmB,EAAAlB,KACA38C,EAAA4iB,OAAAi7B,EAAAjB,IAAAiB,EAAAhB,MAGApH,EAAAE,kBACA31C,EAAA2iB,OAAAk7B,EAAAjd,GAAAid,EAAA/c,IACA9gC,EAAA4iB,OAAAi7B,EAAAhd,GAAAgd,EAAAjsB,KAGA5xB,EAAAikB,SACAjkB,EAAAwkB,WAGA62B,EAAAlV,QAAA,CAEAnmC,EAAAqkB,OACArkB,EAAA89C,UAAAD,EAAAf,OAAAe,EAAAd,QACA/8C,EAAAoZ,OAAAykC,EAAAD,UACA59C,EAAAiuB,KAAA4vB,EAAAhH,MAAAkF,EAAA9tB,KAAAgrB,EAAAhrB,KACAjuB,EAAAk/B,UAAA2e,EAAAhH,MAAAiF,EAAAF,EACA57C,EAAAk9C,aAAAW,EAAAX,aACAl9C,EAAAi9C,UAAAY,EAAAZ,UAEA,IAAA7/B,EAAAygC,EAAAzgC,MACA,GAAA1X,EAAA2L,QAAA+L,GACA,QAAAtR,EAAA,EAAAtE,EAAA,EAA4BsE,EAAAsR,EAAA3Q,SAAkBX,EAE9C9L,EAAA+9C,SAAA,GAAA3gC,EAAAtR,GAAA,EAAAtE,GAEAA,GAAA,IAAAyxC,EAAA71B,UAGApjB,EAAA+9C,SAAA3gC,EAAA,KAEApd,EAAAwkB,aAIA0xB,EAAA/P,QAAA,CAEA,IAAA6X,EACAC,EACAL,EAAA,EACAM,EAAA/G,EAAAjB,GAAA,EAEA,GAAA3C,EACAyK,EAAA5yC,EAAAuU,MAAAvU,EAAAqU,MAAArU,EAAAuU,MAAA,EACAs+B,EAAA,WAAAx4C,EAAAmC,SACAwD,EAAAsU,OAAAw+B,EAAA/B,EAAAz8B,OACAtU,EAAAoU,IAAA0+B,EAAA/B,EAAA38B,QACK,CACL,IAAA89B,EAAA,SAAA73C,EAAAmC,SACAo2C,EAAAV,EACAlyC,EAAAuU,KAAAu+B,EAAA/B,EAAA38B,IACApU,EAAAqU,MAAAy+B,EAAA/B,EAAA38B,IACAy+B,EAAA7yC,EAAAoU,KAAApU,EAAAsU,OAAAtU,EAAAoU,KAAA,EACAo+B,EAAAN,GAAA,GAAAvtC,KAAA+Q,GAAA,GAAA/Q,KAAA+Q,GAGA9gB,EAAAqkB,OACArkB,EAAA89C,UAAAE,EAAAC,GACAj+C,EAAAoZ,OAAAwkC,GACA59C,EAAAi9C,UAAA,SACAj9C,EAAAk9C,aAAA,SACAl9C,EAAAk/B,UAAA+c,EACAj8C,EAAAiuB,KAAAiuB,EAAAjuB,KACAjuB,EAAA+9C,SAAA7H,EAAAC,YAAA,KACAn2C,EAAAwkB,UAGA,GAAAixB,EAAAC,WAAA,CAEA11C,EAAAi/B,UAAAv5B,EAAA6M,sBAAAkjC,EAAAxW,UAAA,GACAj/B,EAAAg/B,YAAAt5B,EAAA6M,sBAAAkjC,EAAAt2C,MAAA,GACA,IAAAyhC,EAAAx1B,EAAAuU,KACAkhB,EAAAz1B,EAAAqU,MACAqhB,EAAA11B,EAAAoU,IACAoS,EAAAxmB,EAAAsU,OAEAwJ,EAAAxjB,EAAAwjB,WAAAlpB,EAAAi/B,WACAsU,GACAzS,EAAAlP,EAAA,QAAAnsB,EAAAmC,SAAAwD,EAAAsU,OAAAtU,EAAAoU,IACAshB,GAAA5X,EACA0I,GAAA1I,IAEA0X,EAAAC,EAAA,SAAAp7B,EAAAmC,SAAAwD,EAAAqU,MAAArU,EAAAuU,KACAihB,GAAA1X,EACA2X,GAAA3X,GAGAlpB,EAAAsjB,YACAtjB,EAAA2iB,OAAAie,EAAAE,GACA9gC,EAAA4iB,OAAAie,EAAAjP,GACA5xB,EAAAikB,kDC55BA,IAAA5W,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACA2mC,SAAA,CACAwC,SAAA,EACAgC,OAAA,KACAjyB,KAAA,UACAjX,SAAA,UACA+T,WAAA,EACA8hB,gBAAA,kBACA0gB,eAAA,OACAC,aAAA,EACAC,kBAAA,EACAC,eAAA,OACAC,WAAA,OACAC,YAAA,EACAC,cAAA,OACAC,UAAA,OACAC,gBAAA,OACAC,cAAA,EACAC,gBAAA,EACAC,gBAAA,OACAC,YAAA,OACAC,SAAA,EACAC,SAAA,EACAC,aAAA,EACAC,UAAA,EACAC,aAAA,EACAC,mBAAA,OACAC,eAAA,EACA5hB,YAAA,gBACAC,YAAA,EACA4hB,UAAA,CAEAC,YAAA95C,EAAAsM,KACAvQ,MAAA,SAAAg+C,EAAAtkC,GAEA,IAAA1Z,EAAA,GACAmoC,EAAAzuB,EAAAyuB,OACA8V,EAAA9V,IAAAn9B,OAAA,EAEA,GAAAgzC,EAAAhzC,OAAA,GACA,IAAAxH,EAAAw6C,EAAA,GAEAx6C,EAAA06C,OACAl+C,EAAAwD,EAAA06C,OACMD,EAAA,GAAAz6C,EAAAsM,MAAAmuC,IACNj+C,EAAAmoC,EAAA3kC,EAAAsM,QAIA,OAAA9P,GAEAm+C,WAAAl6C,EAAAsM,KAGA6tC,WAAAn6C,EAAAsM,KAGA8tC,YAAAp6C,EAAAsM,KACAoL,MAAA,SAAA2iC,EAAA5kC,GACA,IAAAiC,EAAAjC,EAAAC,SAAA2kC,EAAA/iC,cAAAI,OAAA,GAMA,OAJAA,IACAA,GAAA,MAEAA,GAAA2iC,EAAAC,QAGAC,WAAA,SAAAF,EAAAllC,GACA,IAEAhP,EAFAgP,EAAAS,eAAAykC,EAAA/iC,cACA7B,KAAA4kC,EAAAxuC,OACAlG,MACA,OACAqyB,YAAA7xB,EAAA6xB,YACAD,gBAAA5xB,EAAA4xB,kBAGAyiB,eAAA,WACA,OAAAtgD,KAAAysC,SAAAoS,eAEA0B,WAAAz6C,EAAAsM,KAGAouC,UAAA16C,EAAAsM,KAGAquC,aAAA36C,EAAAsM,KACAsuC,OAAA56C,EAAAsM,KACAuuC,YAAA76C,EAAAsM,SAKA5Q,EAAAC,QAAA,SAAA+L,GAKA,SAAAozC,EAAAC,EAAAh3C,GACA,IAAAtK,EAAAuG,EAAAvG,MAAAshD,GACA,OAAAthD,EAAA+V,MAAAzL,EAAAtK,EAAA+V,SAAAqC,aAIA,SAAAmpC,EAAA1f,EAAA2f,GAUA,OATAA,IACAj7C,EAAA2L,QAAAsvC,GAEAxuC,MAAAjH,UAAAnG,KAAAiG,MAAAg2B,EAAA2f,GAEA3f,EAAAj8B,KAAA47C,IAIA3f,EA0BA,SAAA4f,EAAAC,GACA,IAAAzhB,EAAA/xB,EAAA2hB,OACApe,EAAAlL,EAAAkL,eAEA,OAEAquC,SAAA4B,EAAA5B,SACAD,SAAA6B,EAAA7B,SACA8B,OAAAD,EAAAC,OACAC,OAAAF,EAAAE,OAGAtC,cAAAoC,EAAApC,cACAuC,gBAAApwC,EAAAiwC,EAAAI,eAAA7hB,EAAAlgB,mBACAgiC,eAAAtwC,EAAAiwC,EAAAM,cAAA/hB,EAAAhgB,kBACAgiC,WAAAP,EAAAnC,UACA2C,aAAAzwC,EAAAiwC,EAAAQ,aAAAjiB,EAAAjgB,iBACAq/B,YAAAqC,EAAArC,YAGAF,eAAAuC,EAAAvC,eACAgD,iBAAA1wC,EAAAiwC,EAAAU,gBAAAniB,EAAAlgB,mBACAsiC,gBAAA5wC,EAAAiwC,EAAA1C,eAAA/e,EAAAhgB,kBACAqiC,cAAA7wC,EAAAiwC,EAAAY,cAAAriB,EAAAjgB,iBACAuiC,YAAAb,EAAAtC,WACAH,aAAAyC,EAAAzC,aACAC,kBAAAwC,EAAAxC,kBAGAS,gBAAA+B,EAAA/B,gBACA6C,kBAAA/wC,EAAAiwC,EAAAe,iBAAAxiB,EAAAlgB,mBACA2iC,iBAAAjxC,EAAAiwC,EAAAlC,gBAAAvf,EAAAhgB,kBACA0iC,eAAAlxC,EAAAiwC,EAAAiB,eAAA1iB,EAAAjgB,iBACA4iC,aAAAlB,EAAA9B,YACAH,cAAAiC,EAAAjC,cACAC,gBAAAgC,EAAAhC,gBAGAM,UAAA0B,EAAA1B,UACAC,aAAAyB,EAAAzB,aACA3hB,gBAAAojB,EAAApjB,gBACAh0B,QAAA,EACAu4C,sBAAAnB,EAAAxB,mBACAC,cAAAuB,EAAAvB,cACA5hB,YAAAmjB,EAAAnjB,YACAC,YAAAkjB,EAAAljB,aAiMAvwB,EAAAohC,QAAA5jC,EAAAE,OAAA,CACAC,WAAA,WACAnL,KAAA2L,OAAAq1C,EAAAhhD,KAAAysC,UACAzsC,KAAAqiD,YAAA,IAKAC,SAAA,WACA,IAEA3C,EAFA3/C,KACAysC,SACAkT,UAEAC,EAAAD,EAAAC,YAAAx0C,MAJApL,KAIAqL,WACAxJ,EAAA89C,EAAA99C,MAAAuJ,MALApL,KAKAqL,WACA20C,EAAAL,EAAAK,WAAA50C,MANApL,KAMAqL,WAEAk3C,EAAA,GAKA,OAJAA,EAAAzB,EAAAyB,EAAA3C,GACA2C,EAAAzB,EAAAyB,EAAA1gD,GACA0gD,EAAAzB,EAAAyB,EAAAvC,IAMAwC,cAAA,WACA,IAAAD,EAAAviD,KAAAysC,SAAAkT,UAAAM,WAAA70C,MAAApL,KAAAqL,WACA,OAAAvF,EAAA2L,QAAA8wC,UAAA5xC,IAAA4xC,EAAA,CAAAA,GAAA,IAIAE,QAAA,SAAA5C,EAAAtkC,GACA,IAAA/P,EAAAxL,KACA2/C,EAAAn0C,EAAAihC,SAAAkT,UACA+C,EAAA,GAeA,OAbA58C,EAAAiN,KAAA8sC,EAAA,SAAAM,GACA,IAAAwC,EAAA,CACAC,OAAA,GACAL,MAAA,GACAM,MAAA,IAEA/B,EAAA6B,EAAAC,OAAAjD,EAAAO,YAAAnxC,KAAAvD,EAAA20C,EAAA5kC,IACAulC,EAAA6B,EAAAJ,MAAA5C,EAAAniC,MAAAzO,KAAAvD,EAAA20C,EAAA5kC,IACAulC,EAAA6B,EAAAE,MAAAlD,EAAAY,WAAAxxC,KAAAvD,EAAA20C,EAAA5kC,IAEAmnC,EAAAv9C,KAAAw9C,KAGAD,GAIAI,aAAA,WACA,IAAAP,EAAAviD,KAAAysC,SAAAkT,UAAAa,UAAAp1C,MAAApL,KAAAqL,WACA,OAAAvF,EAAA2L,QAAA8wC,UAAA5xC,IAAA4xC,EAAA,CAAAA,GAAA,IAKAQ,UAAA,WACA,IACApD,EADA3/C,KACAysC,SAAAkT,UAEAc,EAAAd,EAAAc,aAAAr1C,MAHApL,KAGAqL,WACAq1C,EAAAf,EAAAe,OAAAt1C,MAJApL,KAIAqL,WACAs1C,EAAAhB,EAAAgB,YAAAv1C,MALApL,KAKAqL,WAEAk3C,EAAA,GAKA,OAJAA,EAAAzB,EAAAyB,EAAA9B,GACA8B,EAAAzB,EAAAyB,EAAA7B,GACA6B,EAAAzB,EAAAyB,EAAA5B,IAKAvW,OAAA,SAAA+E,GACA,IA8BAjjC,EAAAgH,EA9WAlR,EACAghD,EACAC,EACAtxC,EACAyL,EA4UA5R,EAAAxL,KACA+nC,EAAAv8B,EAAAihC,SAKAyW,EAAA13C,EAAAG,OACAI,EAAAP,EAAAG,OAAAq1C,EAAAjZ,GACAwH,EAAA/jC,EAAA23C,QAEA5nC,EAAA/P,EAAAmhC,MAGAyW,EAAA,CACAlC,OAAAgC,EAAAhC,OACAC,OAAA+B,EAAA/B,QAEAkC,EAAA,CACA17C,EAAAu7C,EAAAv7C,EACAC,EAAAs7C,EAAAt7C,GAEA07C,EAAA,CACAx7C,MAAAo7C,EAAAp7C,MACAC,OAAAm7C,EAAAn7C,QAEAqF,EAAA,CACAzF,EAAAu7C,EAAAK,OACA37C,EAAAs7C,EAAAM,QAKA,GAAAjU,EAAA1iC,OAAA,CACAd,EAAAlC,QAAA,EAEA,IAAA45C,EAAA,GACAC,EAAA,GACAt2C,EAAAI,EAAAohC,QAAA+U,YAAA5b,EAAA//B,UAAA+G,KAAAvD,EAAA+jC,EAAA/jC,EAAAo4C,gBAEA,IAAA/D,EAAA,GACA,IAAA3zC,EAAA,EAAAgH,EAAAq8B,EAAA1iC,OAAoCX,EAAAgH,IAAShH,EAC7C2zC,EAAA16C,MAzXAnD,EAyXAutC,EAAArjC,GAxXA82C,SACAC,SACAtxC,SACAyL,SAHA4lC,EAAAhhD,EAAA6hD,QACAZ,EAAAjhD,EAAA8hD,SAAA9hD,EAAA+hD,OACApyC,EAAA3P,EAAAqb,OACAD,EAAApb,EAAAyb,cAEA,CACAsiC,OAAAiD,IAAApI,iBAAAjpC,EAAAyL,GAAA,GACAgjC,OAAA6C,IAAArI,iBAAAjpC,EAAAyL,GAAA,GACAzL,QACAyL,eACAzV,EAAA3F,EAAA2J,OAAAhE,EACAC,EAAA5F,EAAA2J,OAAA/D,KAiXAmgC,EAAA3iC,SACAy6C,IAAAz6C,OAAA,SAAAyU,GACA,OAAAkuB,EAAA3iC,OAAAyU,EAAA0B,MAKAwsB,EAAAic,WACAnE,IAAAjiC,KAAA,SAAA/D,EAAAgE,GACA,OAAAkqB,EAAAic,SAAAnqC,EAAAgE,EAAAtC,MAKAzV,EAAAiN,KAAA8sC,EAAA,SAAAM,GACAsD,EAAAt+C,KAAA4iC,EAAA4X,UAAAU,WAAAtxC,KAAAvD,EAAA20C,EAAA30C,EAAAyzB,SACAykB,EAAAv+C,KAAA4iC,EAAA4X,UAAAW,eAAAvxC,KAAAvD,EAAA20C,EAAA30C,EAAAyzB,WAKAlzB,EAAAlK,MAAA2J,EAAA82C,SAAAzC,EAAAtkC,GACAxP,EAAAk0C,WAAAz0C,EAAAg3C,cAAA3C,EAAAtkC,GACAxP,EAAAk4C,KAAAz4C,EAAAi3C,QAAA5C,EAAAtkC,GACAxP,EAAAy0C,UAAAh1C,EAAAs3C,aAAAjD,EAAAtkC,GACAxP,EAAA20C,OAAAl1C,EAAAu3C,UAAAlD,EAAAtkC,GAGAxP,EAAApE,EAAAwI,KAAAO,MAAAtD,EAAAzF,GACAoE,EAAAnE,EAAAuI,KAAAO,MAAAtD,EAAAxF,GACAmE,EAAAuzC,aAAAvX,EAAAuX,aACAvzC,EAAA03C,cACA13C,EAAA23C,kBAGA33C,EAAAm4C,WAAArE,EAGAyD,EA3VA,SAAA/W,EAAAxgC,GACA,IAAA0W,EAAA8pB,EAAAtN,OAAAxc,IAEA1a,EAAA,EAAAgE,EAAAqzC,SACAt3C,EAAA,EAGAm8C,EAAAl4C,EAAAk4C,KACAE,EAAAF,EAAA57B,OAAA,SAAAkf,EAAAob,GACA,OAAApb,EAAAob,EAAAC,OAAA/1C,OAAA81C,EAAAJ,MAAA11C,OAAA81C,EAAAE,MAAAh2C,QACG,GACHs3C,GAAAp4C,EAAAk0C,WAAApzC,OAAAd,EAAAy0C,UAAA3zC,OAEA,IAAAu3C,EAAAr4C,EAAAlK,MAAAgL,OACAw3C,EAAAt4C,EAAA20C,OAAA7zC,OACAg1C,EAAA91C,EAAA81C,cACAJ,EAAA11C,EAAA01C,aACAS,EAAAn2C,EAAAm2C,eAEAn6C,GAAAq8C,EAAAvC,EACA95C,GAAAq8C,KAAA,GAAAr4C,EAAAyyC,aAAA,EACAz2C,GAAAq8C,EAAAr4C,EAAA0yC,kBAAA,EACA12C,GAAAo8C,EAAA1C,EACA15C,GAAAo8C,KAAA,GAAAp4C,EAAA6yC,YAAA,EACA72C,GAAAs8C,EAAAt4C,EAAAkzC,gBAAA,EACAl3C,GAAAs8C,EAAA,EACAt8C,GAAAs8C,KAAA,GAAAt4C,EAAAizC,cAAA,EAGA,IAAAsF,EAAA,EACAC,EAAA,SAAA9kB,GACA33B,EAAAqI,KAAAJ,IAAAjI,EAAA2a,EAAAmM,YAAA6Q,GAAA33B,MAAAw8C,IA4BA,OAzBA7hC,EAAA4L,KAAAvoB,EAAAkoB,WAAA6zB,EAAA91C,EAAA61C,gBAAA71C,EAAA21C,kBACA57C,EAAAiN,KAAAhH,EAAAlK,MAAA0iD,GAGA9hC,EAAA4L,KAAAvoB,EAAAkoB,WAAAyzB,EAAA11C,EAAAu1C,eAAAv1C,EAAAq1C,iBACAt7C,EAAAiN,KAAAhH,EAAAk0C,WAAAtpC,OAAA5K,EAAAy0C,WAAA+D,GAGAD,EAAAv4C,EAAA2zC,cAAA+B,EAAA,IACA37C,EAAAiN,KAAAkxC,EAAA,SAAAtB,GACA78C,EAAAiN,KAAA4vC,EAAAC,OAAA2B,GACAz+C,EAAAiN,KAAA4vC,EAAAJ,MAAAgC,GACAz+C,EAAAiN,KAAA4vC,EAAAE,MAAA0B,KAIAD,EAAA,EAGA7hC,EAAA4L,KAAAvoB,EAAAkoB,WAAAk0B,EAAAn2C,EAAAk2C,iBAAAl2C,EAAAg2C,mBACAj8C,EAAAiN,KAAAhH,EAAA20C,OAAA6D,GAKA,CACAz8C,MAHAA,GAAA,EAAAiE,EAAAszC,SAIAt3C,UA8RAy8C,CAAAxkD,KAAA+L,GAGAs3C,EAjNA,SAAAplB,EAAAza,EAAA4/B,GAEA,IAAAz7C,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,EAEA23C,EAAAthB,EAAAshB,UACAD,EAAArhB,EAAAqhB,aACAE,EAAAvhB,EAAAuhB,aACA0B,EAAAkC,EAAAlC,OACAC,EAAAiC,EAAAjC,OACAsD,EAAAlF,EAAAD,EACAoF,EAAAlF,EAAAF,EA4BA,MA1BA,UAAA4B,EACAv5C,GAAA6b,EAAA1b,MACG,WAAAo5C,IACHv5C,GAAA6b,EAAA1b,MAAA,GAGA,QAAAq5C,EACAv5C,GAAA68C,EAEA78C,GADG,WAAAu5C,EACH39B,EAAAzb,OAAA08C,EAEAjhC,EAAAzb,OAAA,EAGA,WAAAo5C,EACA,SAAAD,EACAv5C,GAAA88C,EACI,UAAAvD,IACJv5C,GAAA88C,GAEG,SAAAvD,EACHv5C,GAAA+8C,EACG,UAAAxD,IACHv5C,GAAA+8C,GAGA,CACA/8C,IACAC,KAwKA+8C,CAAA54C,EAAAu3C,EAFAF,EAxRA,SAAA7W,EAAA/oB,GACA,IAYAohC,EAAAC,EACAC,EAAAC,EACAC,EAdAj5C,EAAAwgC,EAAA5gC,OACAsP,EAAAsxB,EAAAtN,OACA2B,EAAA2L,EAAAtN,OAAA2B,UACAsgB,EAAA,SACAC,EAAA,SAEAp1C,EAAAnE,EAAA4b,EAAAzb,OACAo5C,EAAA,MACGp1C,EAAAnE,EAAAqT,EAAAlT,OAAAyb,EAAAzb,SACHo5C,EAAA,UAMA,IAAA8D,GAAArkB,EAAA7gB,KAAA6gB,EAAA/gB,OAAA,EACAqlC,GAAAtkB,EAAAhhB,IAAAghB,EAAA9gB,QAAA,EAEA,WAAAqhC,GACAyD,EAAA,SAAAj9C,GACA,OAAAA,GAAAs9C,GAEAJ,EAAA,SAAAl9C,GACA,OAAAA,EAAAs9C,KAGAL,EAAA,SAAAj9C,GACA,OAAAA,GAAA6b,EAAA1b,MAAA,GAEA+8C,EAAA,SAAAl9C,GACA,OAAAA,GAAAsT,EAAAnT,MAAA0b,EAAA1b,MAAA,IAIAg9C,EAAA,SAAAn9C,GACA,OAAAA,EAAA6b,EAAA1b,MAAAmT,EAAAnT,OAEAi9C,EAAA,SAAAp9C,GACA,OAAAA,EAAA6b,EAAA1b,MAAA,GAEAk9C,EAAA,SAAAp9C,GACA,OAAAA,GAAAs9C,EAAA,gBAGAN,EAAA74C,EAAApE,IACAu5C,EAAA,OAGA4D,EAAA/4C,EAAApE,KACAu5C,EAAA,SACAC,EAAA6D,EAAAj5C,EAAAnE,KAEGi9C,EAAA94C,EAAApE,KACHu5C,EAAA,QAGA6D,EAAAh5C,EAAApE,KACAu5C,EAAA,SACAC,EAAA6D,EAAAj5C,EAAAnE,KAIA,IAAAmgC,EAAAwE,EAAAE,SACA,OACAyU,OAAAnZ,EAAAmZ,OAAAnZ,EAAAmZ,SACAC,OAAApZ,EAAAoZ,OAAApZ,EAAAoZ,UAsNAgE,CAAAnlD,KAAAsjD,SAIAv3C,EAAAlC,QAAA,EAoBA,OAjBAkC,EAAAm1C,OAAAkC,EAAAlC,OACAn1C,EAAAo1C,OAAAiC,EAAAjC,OACAp1C,EAAApE,EAAA07C,EAAA17C,EACAoE,EAAAnE,EAAAy7C,EAAAz7C,EACAmE,EAAAjE,MAAAw7C,EAAAx7C,MACAiE,EAAAhE,OAAAu7C,EAAAv7C,OAGAgE,EAAAw3C,OAAAn2C,EAAAzF,EACAoE,EAAAy3C,OAAAp2C,EAAAxF,EAEA4D,EAAAG,OAAAI,EAEAojC,GAAApH,EAAAmJ,QACAnJ,EAAAmJ,OAAAniC,KAAAvD,EAAAO,GAGAP,GAEA45C,UAAA,SAAAC,EAAA7hC,GACA,IAAAf,EAAAziB,KAAAi/B,OAAAxc,IACAwb,EAAAj+B,KAAAyL,MACA65C,EAAAtlD,KAAAulD,iBAAAF,EAAA7hC,EAAAya,GAEAxb,EAAAO,OAAAsiC,EAAAtkB,GAAAskB,EAAApkB,IACAze,EAAAO,OAAAsiC,EAAArkB,GAAAqkB,EAAAtzB,IACAvP,EAAAO,OAAAsiC,EAAAE,GAAAF,EAAAG,KAEAF,iBAAA,SAAAF,EAAA7hC,EAAAya,GACA,IAAA+C,EAAAC,EAAAukB,EAAAtkB,EAAAlP,EAAAyzB,EACAlG,EAAAthB,EAAAshB,UACAC,EAAAvhB,EAAAuhB,aACA0B,EAAAjjB,EAAAijB,OACAC,EAAAljB,EAAAkjB,OACAuE,EAAAL,EAAA19C,EACAg+C,EAAAN,EAAAz9C,EACAE,EAAA0b,EAAA1b,MACAC,EAAAyb,EAAAzb,OAEA,cAAAo5C,EACAnvB,EAAA2zB,EAAA59C,EAAA,EAEA,SAAAm5C,GAEAjgB,GADAD,EAAA0kB,GACAnG,EACAiG,EAAAxkB,EAEAE,EAAAlP,EAAAutB,EACAkG,EAAAzzB,EAAAutB,IAGAte,GADAD,EAAA0kB,EAAA59C,GACAy3C,EACAiG,EAAAxkB,EAEAE,EAAAlP,EAAAutB,EACAkG,EAAAzzB,EAAAutB,QAgBA,GAbA,SAAA2B,GAEAlgB,GADAC,EAAAykB,EAAAlG,EAAA,GACAD,EACAiG,EAAAvkB,EAAAse,GACK,UAAA2B,GAELlgB,GADAC,EAAAykB,EAAA59C,EAAA03C,EAAAD,GACAA,EACAiG,EAAAvkB,EAAAse,IAGAve,GADAC,EAAAykB,EAAA59C,EAAA,GACAy3C,EACAiG,EAAAvkB,EAAAse,GAEA,QAAA4B,EAEAnvB,GADAkP,EAAAykB,GACApG,EACAkG,EAAAvkB,MACK,CAELlP,GADAkP,EAAAykB,EAAA59C,GACAw3C,EACAkG,EAAAvkB,EAEA,IAAA0kB,EAAAJ,EACAA,EAAAxkB,EACAA,EAAA4kB,EAGA,OAAW5kB,KAAAC,KAAAukB,KAAAtkB,KAAAlP,KAAAyzB,OAEXI,UAAA,SAAAC,EAAA7nB,EAAAxb,EAAA5Y,GACA,IAAAhI,EAAAo8B,EAAAp8B,MAEA,GAAAA,EAAAgL,OAAA,CACA4V,EAAA46B,UAAApf,EAAA6jB,YACAr/B,EAAA66B,aAAA,MAEA,IAMApxC,EAAAgH,EANA2uC,EAAA5jB,EAAA4jB,cACArD,EAAAvgB,EAAAugB,aAMA,IAJA/7B,EAAA6c,UAAAshB,EAAA3iB,EAAAygB,eAAA70C,GACA4Y,EAAA4L,KAAAvoB,EAAAkoB,WAAA6zB,EAAA5jB,EAAA2jB,gBAAA3jB,EAAAyjB,kBAGAx1C,EAAA,EAAAgH,EAAArR,EAAAgL,OAAmCX,EAAAgH,IAAShH,EAC5CuW,EAAA07B,SAAAt8C,EAAAqK,GAAA45C,EAAAn+C,EAAAm+C,EAAAl+C,GACAk+C,EAAAl+C,GAAAi6C,EAAArD,EAEAtyC,EAAA,IAAArK,EAAAgL,SACAi5C,EAAAl+C,GAAAq2B,EAAAwgB,kBAAAD,KAKAuH,SAAA,SAAAD,EAAA7nB,EAAAxb,EAAA5Y,GACA,IAAA43C,EAAAxjB,EAAAwjB,aACA7C,EAAA3gB,EAAA2gB,YACAqF,EAAAhmB,EAAAgmB,KAEAxhC,EAAA46B,UAAApf,EAAAujB,WACA/+B,EAAA66B,aAAA,MACA76B,EAAA4L,KAAAvoB,EAAAkoB,WAAAyzB,EAAAxjB,EAAAqjB,eAAArjB,EAAAmjB,iBAGA,IAAA4E,EAAA,EACAC,EAAA,SAAAxmB,GACAhd,EAAA07B,SAAA1e,EAAAqmB,EAAAn+C,EAAAq+C,EAAAF,EAAAl+C,GACAk+C,EAAAl+C,GAAA65C,EAAA7C,GAIAn8B,EAAA6c,UAAAshB,EAAA3iB,EAAA4gB,cAAAh1C,GACA/D,EAAAiN,KAAAkrB,EAAAgiB,WAAAgG,GAEA,IAAAC,EAAAjoB,EAAAyhB,cACAsG,EAAAE,EAAAzE,EAAA,IAGA37C,EAAAiN,KAAAkxC,EAAA,SAAAtB,EAAAz2C,GACA,IAAAi6C,EAAAvF,EAAA3iB,EAAAylB,gBAAAx3C,GAAArC,GACA4Y,EAAA6c,UAAA6mB,EACArgD,EAAAiN,KAAA4vC,EAAAC,OAAAqD,GAEAngD,EAAAiN,KAAA4vC,EAAAJ,MAAA,SAAA9iB,GAEAymB,IAEAzjC,EAAA6c,UAAAshB,EAAA3iB,EAAAmkB,sBAAAv4C,GACA4Y,EAAAsB,SAAA+hC,EAAAn+C,EAAAm+C,EAAAl+C,EAAA65C,KAGAh/B,EAAA4c,UAAA,EACA5c,EAAA2c,YAAAwhB,EAAA3iB,EAAAwlB,YAAAv3C,GAAA4xB,YAAAj0B,GACA4Y,EAAAuB,WAAA8hC,EAAAn+C,EAAAm+C,EAAAl+C,EAAA65C,KAGAh/B,EAAA6c,UAAAshB,EAAA3iB,EAAAwlB,YAAAv3C,GAAA2xB,gBAAAh0B,GACA4Y,EAAAsB,SAAA+hC,EAAAn+C,EAAA,EAAAm+C,EAAAl+C,EAAA,EAAA65C,EAAA,EAAAA,EAAA,GACAh/B,EAAA6c,UAAA6mB,GAGAF,EAAAxmB,KAGA35B,EAAAiN,KAAA4vC,EAAAE,MAAAoD,KAIAD,EAAA,EAGAlgD,EAAAiN,KAAAkrB,EAAAuiB,UAAAyF,GACAH,EAAAl+C,GAAAg3C,GAEAwH,WAAA,SAAAN,EAAA7nB,EAAAxb,EAAA5Y,GACA,IAAA62C,EAAAziB,EAAAyiB,OAEAA,EAAA7zC,SACAi5C,EAAAl+C,GAAAq2B,EAAAghB,gBAEAx8B,EAAA46B,UAAApf,EAAAkkB,aACA1/B,EAAA66B,aAAA,MAEA76B,EAAA6c,UAAAshB,EAAA3iB,EAAAihB,gBAAAr1C,GACA4Y,EAAA4L,KAAAvoB,EAAAkoB,WAAAiQ,EAAAikB,eAAAjkB,EAAAgkB,iBAAAhkB,EAAA8jB,mBAEAj8C,EAAAiN,KAAA2tC,EAAA,SAAAjhB,GACAhd,EAAA07B,SAAA1e,EAAAqmB,EAAAn+C,EAAAm+C,EAAAl+C,GACAk+C,EAAAl+C,GAAAq2B,EAAAikB,eAAAjkB,EAAA+gB,kBAIAqH,eAAA,SAAAP,EAAA7nB,EAAAxb,EAAA6gC,EAAAz5C,GACA4Y,EAAA6c,UAAAshB,EAAA3iB,EAAAJ,gBAAAh0B,GACA4Y,EAAA2c,YAAAwhB,EAAA3iB,EAAAH,YAAAj0B,GACA4Y,EAAA4c,UAAApB,EAAAF,YACA,IAAAmjB,EAAAjjB,EAAAijB,OACAC,EAAAljB,EAAAkjB,OACAx5C,EAAAm+C,EAAAn+C,EACAC,EAAAk+C,EAAAl+C,EACAE,EAAAw7C,EAAAx7C,MACAC,EAAAu7C,EAAAv7C,OACA6a,EAAAqb,EAAAuhB,aAEA/8B,EAAAiB,YACAjB,EAAAM,OAAApb,EAAAib,EAAAhb,GACA,QAAAu5C,GACAnhD,KAAAolD,UAAAU,EAAAxC,GAEA7gC,EAAAO,OAAArb,EAAAG,EAAA8a,EAAAhb,GACA6a,EAAAQ,iBAAAtb,EAAAG,EAAAF,EAAAD,EAAAG,EAAAF,EAAAgb,GACA,WAAAu+B,GAAA,UAAAD,GACAlhD,KAAAolD,UAAAU,EAAAxC,GAEA7gC,EAAAO,OAAArb,EAAAG,EAAAF,EAAAG,EAAA6a,GACAH,EAAAQ,iBAAAtb,EAAAG,EAAAF,EAAAG,EAAAJ,EAAAG,EAAA8a,EAAAhb,EAAAG,GACA,WAAAo5C,GACAnhD,KAAAolD,UAAAU,EAAAxC,GAEA7gC,EAAAO,OAAArb,EAAAib,EAAAhb,EAAAG,GACA0a,EAAAQ,iBAAAtb,EAAAC,EAAAG,EAAAJ,EAAAC,EAAAG,EAAA6a,GACA,WAAAu+B,GAAA,SAAAD,GACAlhD,KAAAolD,UAAAU,EAAAxC,GAEA7gC,EAAAO,OAAArb,EAAAC,EAAAgb,GACAH,EAAAQ,iBAAAtb,EAAAC,EAAAD,EAAAib,EAAAhb,GACA6a,EAAAmB,YAEAnB,EAAAoB,OAEAoa,EAAAF,YAAA,GACAtb,EAAA4B,UAGA2a,KAAA,WACA,IAAAvc,EAAAziB,KAAAi/B,OAAAxc,IACAwb,EAAAj+B,KAAAyL,MAEA,OAAAwyB,EAAAp0B,QAAA,CAIA,IAAAy5C,EAAA,CACAx7C,MAAAm2B,EAAAn2B,MACAC,OAAAk2B,EAAAl2B,QAEA+9C,EAAA,CACAn+C,EAAAs2B,EAAAt2B,EACAC,EAAAq2B,EAAAr2B,GAIAiC,EAAAsG,KAAA0B,IAAAosB,EAAAp0B,QAAA,QAAAo0B,EAAAp0B,QAGAy8C,EAAAroB,EAAAp8B,MAAAgL,QAAAoxB,EAAAgiB,WAAApzC,QAAAoxB,EAAAgmB,KAAAp3C,QAAAoxB,EAAAuiB,UAAA3zC,QAAAoxB,EAAAyiB,OAAA7zC,OAEA7M,KAAAysC,SAAAyC,SAAAoX,IAEAtmD,KAAAqmD,eAAAP,EAAA7nB,EAAAxb,EAAA6gC,EAAAz5C,GAGAi8C,EAAAn+C,GAAAs2B,EAAAohB,SACAyG,EAAAl+C,GAAAq2B,EAAAmhB,SAGAp/C,KAAA6lD,UAAAC,EAAA7nB,EAAAxb,EAAA5Y,GAGA7J,KAAA+lD,SAAAD,EAAA7nB,EAAAxb,EAAA5Y,GAGA7J,KAAAomD,WAAAN,EAAA7nB,EAAAxb,EAAA5Y,MAUAulC,YAAA,SAAAp0B,GACA,IAAAxP,EAAAxL,KACA6F,EAAA2F,EAAAihC,SACA0C,GAAA,EAeA,GAbA3jC,EAAA62C,YAAA72C,EAAA62C,aAAA,GAGA,aAAArnC,EAAAxO,KACAhB,EAAA23C,QAAA,GAEA33C,EAAA23C,QAAA33C,EAAAyzB,OAAA+O,0BAAAhzB,EAAAnV,EAAAoZ,KAAApZ,KAIAspC,GAAArpC,EAAAqN,YAAA3H,EAAA23C,QAAA33C,EAAA62C,cAIA,SAKA,GAFA72C,EAAA62C,YAAA72C,EAAA23C,QAEAt9C,EAAAqpC,SAAArpC,EAAAqrC,OAAA,CACA1lC,EAAAo4C,eAAA,CACAj8C,EAAAqT,EAAArT,EACAC,EAAAoT,EAAApT,GAGA,IAAAmE,EAAAP,EAAAG,OACAH,EAAA4+B,QAAA,GACA5+B,EAAAD,QAGA4jC,GAAApjC,EAAApE,IAAA6D,EAAAG,OAAAhE,GAAAoE,EAAAnE,IAAA4D,EAAAG,OAAA/D,EAGA,OAAAunC,KAOA3hC,EAAAohC,QAAA+U,YAAA,CAOA4C,QAAA,SAAA74C,GACA,IAAAA,EAAAb,OACA,SAGA,IAAAX,EAAAgH,EACAvL,EAAA,EACAC,EAAA,EACA2/B,EAAA,EAEA,IAAAr7B,EAAA,EAAAgH,EAAAxF,EAAAb,OAAqCX,EAAAgH,IAAShH,EAAA,CAC9C,IAAAshB,EAAA9f,EAAAxB,GACA,GAAAshB,KAAAngB,WAAA,CACA,IAAAy5B,EAAAtZ,EAAApgB,kBACAzF,GAAAm/B,EAAAn/B,EACAC,GAAAk/B,EAAAl/B,IACA2/B,GAIA,OACA5/B,EAAAwI,KAAAO,MAAA/I,EAAA4/B,GACA3/B,EAAAuI,KAAAO,MAAA9I,EAAA2/B,KAWA5pB,QAAA,SAAAjQ,EAAA84C,GACA,IAGAt6C,EAAAgH,EAAAuzC,EAHA9+C,EAAA6+C,EAAA7+C,EACAC,EAAA4+C,EAAA5+C,EACAqU,EAAAC,OAAAC,kBAGA,IAAAjQ,EAAA,EAAAgH,EAAAxF,EAAAb,OAAqCX,EAAAgH,IAAShH,EAAA,CAC9C,IAAAshB,EAAA9f,EAAAxB,GACA,GAAAshB,KAAAngB,WAAA,CACA,IAAAgP,EAAAmR,EAAAlR,iBACAoqC,EAAA5gD,EAAAujB,sBAAAm9B,EAAAnqC,GAEAqqC,EAAAzqC,IACAA,EAAAyqC,EACAD,EAAAj5B,IAKA,GAAAi5B,EAAA,CACA,IAAAE,EAAAF,EAAAr5C,kBACAzF,EAAAg/C,EAAAh/C,EACAC,EAAA++C,EAAA/+C,EAGA,OACAD,IACAC,2CC76BA,IAAA9B,EAAc7H,EAAQ,MACtBs3C,EAAYt3C,EAAQ,MAEpBuD,EAAAC,QAAA,SAAA+L,GAEA,IAAA4E,EAAAtM,EAAAsM,KAEA5E,EAAAo5C,gBAAAp5C,EAAAgqC,MAAAtsC,OAAA,CACAuvC,cAAA,SAAAzrC,GACA,uBAAAA,GACAA,EAEAxB,EAAAgqC,MAAAlsC,UAAAmvC,cAAA1rC,KAAA/O,KAAAgP,IAGA63C,uBAAA,WACA,IAAAr7C,EAAAxL,KAEAm5C,EADA3tC,EAAA3F,QACA8J,MAKA,GAAAwpC,EAAA1C,YAAA,CACA,IAAAqQ,EAAAhhD,EAAAyiB,KAAA/c,EAAAwE,KACA+2C,EAAAjhD,EAAAyiB,KAAA/c,EAAAuE,KAEA+2C,EAAA,GAAAC,EAAA,EAEAv7C,EAAAuE,IAAA,EACK+2C,EAAA,GAAAC,EAAA,IAELv7C,EAAAwE,IAAA,GAIA,IAAAg3C,OAAAr2C,IAAAwoC,EAAAnpC,UAAAW,IAAAwoC,EAAA8N,aACAC,OAAAv2C,IAAAwoC,EAAAppC,UAAAY,IAAAwoC,EAAAgO,kBAEAx2C,IAAAwoC,EAAAnpC,IACAxE,EAAAwE,IAAAmpC,EAAAnpC,SACIW,IAAAwoC,EAAA8N,eACJ,OAAAz7C,EAAAwE,IACAxE,EAAAwE,IAAAmpC,EAAA8N,aAEAz7C,EAAAwE,IAAAG,KAAAH,IAAAxE,EAAAwE,IAAAmpC,EAAA8N,oBAIAt2C,IAAAwoC,EAAAppC,IACAvE,EAAAuE,IAAAopC,EAAAppC,SACIY,IAAAwoC,EAAAgO,eACJ,OAAA37C,EAAAuE,IACAvE,EAAAuE,IAAAopC,EAAAgO,aAEA37C,EAAAuE,IAAAI,KAAAJ,IAAAvE,EAAAuE,IAAAopC,EAAAgO,eAIAH,IAAAE,GAKA17C,EAAAwE,KAAAxE,EAAAuE,MACAi3C,EACAx7C,EAAAuE,IAAAvE,EAAAwE,IAAA,EAEAxE,EAAAwE,IAAAxE,EAAAuE,IAAA,GAKAvE,EAAAwE,MAAAxE,EAAAuE,MACAvE,EAAAuE,MAEAopC,EAAA1C,aACAjrC,EAAAwE,QAIAo3C,aAAAh1C,EACAi1C,yBAAAj1C,EAEAmmC,WAAA,WACA,IAAA/sC,EAAAxL,KAEAm5C,EADA3tC,EAAA3F,QACA8J,MAMAM,EAAAzE,EAAA47C,eAGAE,EAAA,CACAr3C,SAHAA,EAAAE,KAAAJ,IAAA,EAAAE,GAIAD,IAAAmpC,EAAAnpC,IACAD,IAAAopC,EAAAppC,IACAH,SAAA9J,EAAAkL,eAAAmoC,EAAAoO,cAAApO,EAAAvpC,WAEAD,EAAAnE,EAAAmE,MAAA4lC,EAAAjmC,WAAAC,OAAA+3C,EAAA97C,GAEAA,EAAA67C,2BAIA77C,EAAAuE,IAAAjK,EAAAiK,IAAAJ,GACAnE,EAAAwE,IAAAlK,EAAAkK,IAAAL,GAEAwpC,EAAAlmC,SACAtD,EAAAsD,UAEAzH,EAAAQ,MAAAR,EAAAuE,IACAvE,EAAAg8C,IAAAh8C,EAAAwE,MAEAxE,EAAAQ,MAAAR,EAAAwE,IACAxE,EAAAg8C,IAAAh8C,EAAAuE,MAGA2oC,qBAAA,WACA,IAAAltC,EAAAxL,KACAwL,EAAAi8C,eAAAj8C,EAAAmE,MAAAwK,QACA3O,EAAA4xC,cAAA5xC,EAAAmE,MAAAhB,QAAA,GAEAnB,EAAAgqC,MAAAlsC,UAAAotC,qBAAA3pC,KAAAvD,0CC9HAhK,EAAAC,QAAA,SAAA+L,GAGA,IAIAk6C,EAAAl6C,EAAAgqC,MAAAtsC,OAAA,CAMAy8C,UAAA,WACA,IAAApsC,EAAAvb,KAAAib,MAAAM,KACA,OAAAvb,KAAA6F,QAAAmkC,SAAAhqC,KAAA2zC,eAAAp4B,EAAAqsC,QAAArsC,EAAAssC,UAAAtsC,EAAAyuB,QAGAoO,oBAAA,WACA,IAIAzwB,EAJAnc,EAAAxL,KACAgqC,EAAAx+B,EAAAm8C,YACAn8C,EAAAs8C,SAAA,EACAt8C,EAAAu8C,SAAA/d,EAAAn9B,OAAA,OAGA8D,IAAAnF,EAAA3F,QAAA8J,MAAAK,MAEA2X,EAAAqiB,EAAAr7B,QAAAnD,EAAA3F,QAAA8J,MAAAK,KACAxE,EAAAs8C,UAAA,IAAAngC,IAAAnc,EAAAs8C,eAGAn3C,IAAAnF,EAAA3F,QAAA8J,MAAAI,MAEA4X,EAAAqiB,EAAAr7B,QAAAnD,EAAA3F,QAAA8J,MAAAI,KACAvE,EAAAu8C,UAAA,IAAApgC,IAAAnc,EAAAu8C,UAGAv8C,EAAAwE,IAAAg6B,EAAAx+B,EAAAs8C,UACAt8C,EAAAuE,IAAAi6B,EAAAx+B,EAAAu8C,WAGAxP,WAAA,WACA,IAAA/sC,EAAAxL,KACAgqC,EAAAx+B,EAAAm8C,YAEAn8C,EAAAmE,MAAA,IAAAnE,EAAAs8C,UAAAt8C,EAAAu8C,WAAA/d,EAAAn9B,OAAA,EAAAm9B,IAAA7vB,MAAA3O,EAAAs8C,SAAAt8C,EAAAu8C,SAAA,IAGAnN,iBAAA,SAAAjpC,EAAAyL,GACA,IAAA5R,EAAAxL,KACAub,EAAA/P,EAAAyP,MAAAM,KACAo4B,EAAAnoC,EAAAmoC,eAEA,OAAAp4B,EAAAssC,UAAAlU,EACAnoC,EAAAivC,cAAAl/B,EAAAC,SAAA4B,GAAA7B,KAAA5J,IAEAnG,EAAAmE,MAAAgC,EAAAnG,EAAAs8C,WAIAjN,iBAAA,SAAA7rC,EAAA2C,GACA,IAOAq2C,EAPAx8C,EAAAxL,KACAikB,EAAAzY,EAAA3F,QAAAoe,OAEAgkC,EAAA93C,KAAAJ,IAAAvE,EAAAu8C,SAAA,EAAAv8C,EAAAs8C,UAAA7jC,EAAA,QAQA,GAHAjV,UACAg5C,EAAAx8C,EAAAmoC,eAAA3kC,EAAArH,EAAAqH,EAAApH,QAEA+I,IAAAq3C,QAAAr3C,IAAA3B,GAAAyU,MAAA9R,GAAA,CAEA3C,EAAAg5C,GAAAh5C,EACA,IAAAs4B,EAFA97B,EAAAm8C,YAEAh5C,QAAAK,GACA2C,GAAA,IAAA21B,IAAA31B,EAGA,GAAAnG,EAAAmoC,eAAA,CACA,IAAAuU,EAAA18C,EAAA1D,MAAAmgD,EACAE,EAAAD,GAAAv2C,EAAAnG,EAAAs8C,UAMA,OAJA7jC,IACAkkC,GAAAD,EAAA,GAGA18C,EAAAuU,KAAA5P,KAAAO,MAAAy3C,GAEA,IAAAC,EAAA58C,EAAAzD,OAAAkgD,EACAI,EAAAD,GAAAz2C,EAAAnG,EAAAs8C,UAMA,OAJA7jC,IACAokC,GAAAD,EAAA,GAGA58C,EAAAoU,IAAAzP,KAAAO,MAAA23C,IAEAzS,gBAAA,SAAAjkC,GACA,OAAA3R,KAAA66C,iBAAA76C,KAAA2P,MAAAgC,KAAA3R,KAAA8nD,SAAA,OAEAhN,iBAAA,SAAAC,GACA,IAAAvvC,EAAAxL,KACAikB,EAAAzY,EAAA3F,QAAAoe,OAEAgkC,EAAA93C,KAAAJ,IAAAvE,EAAAksC,OAAA7qC,QAAAoX,EAAA,QACAqkC,EAAA98C,EAAAmoC,eACA4U,GAAAD,EAAA98C,EAAA1D,MAAA0D,EAAAzD,QAAAkgD,EAcA,OAZAlN,GAAAuN,EAAA98C,EAAAuU,KAAAvU,EAAAoU,IAEAqE,IACA82B,GAAAwN,EAAA,IAGAxN,GAAA,EACA,EAEA5qC,KAAAO,MAAAqqC,EAAAwN,IAGA/8C,EAAAs8C,UAEAzM,aAAA,WACA,OAAAr7C,KAAA8f,UAIAtS,EAAA2Z,aAAA+tB,kBAAA,WAAAwS,EA7HA,CACA1/C,SAAA,+CCJA,IAAAyF,EAAexP,EAAQ,MACvB6H,EAAc7H,EAAQ,MACtBs3C,EAAYt3C,EAAQ,MAEpBuD,EAAAC,QAAA,SAAA+L,GAEA,IAAAg7C,EAAA,CACAxgD,SAAA,OACA2H,MAAA,CACAzK,SAAAqwC,EAAA/jC,WAAAjC,SAIAk5C,EAAAj7C,EAAAo5C,gBAAA17C,OAAA,CAEAktC,oBAAA,WACA,IAAA5sC,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAoV,EAAAzP,EAAAyP,MAEAO,EADAP,EAAAM,KACAC,SACAm4B,EAAAnoC,EAAAmoC,eAIA,SAAA+U,EAAArtC,GACA,OAAAs4B,EAAAt4B,EAAA8yB,UAAA3iC,EAAA9L,GAAA2b,EAAA+yB,UAAA5iC,EAAA9L,GAIA8L,EAAAwE,IAAA,KACAxE,EAAAuE,IAAA,KAEA,IAAA44C,EAAA5gB,EAAA6gB,QAeA,QAdAj4C,IAAAg4C,GACA7iD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAAurC,EAAA,CAIA,IAAAttC,EAAAJ,EAAAS,eAAA0B,GACAnC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,SACA1K,IAAA0K,EAAAwtC,QACAF,GAAA,MAKA5gB,EAAA6gB,SAAAD,EAAA,CACA,IAAAG,EAAA,GAEAhjD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAA/B,EAAAJ,EAAAS,eAAA0B,GACAhR,EAAA,CACAiP,EAAA7O,UAEAmE,IAAAo3B,EAAA6gB,cAAAj4C,IAAA0K,EAAAwtC,MAAAzrC,EAAA,GACA/B,EAAAwtC,OACAE,KAAA,UAEAp4C,IAAAm4C,EAAA18C,KACA08C,EAAA18C,GAAA,CACA48C,eAAA,GACAC,eAAA,KAKA,IAAAD,EAAAF,EAAA18C,GAAA48C,eACAC,EAAAH,EAAA18C,GAAA68C,eAEAhuC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,IACAvV,EAAAiN,KAAAoK,EAAA5B,KAAA,SAAAm/B,EAAA/oC,GACA,IAAA3C,GAAAxD,EAAAivC,cAAAC,GACAj3B,MAAAzU,IAAAqM,EAAAE,KAAA5J,GAAArS,SAIA0pD,EAAAr3C,GAAAq3C,EAAAr3C,IAAA,EACAs3C,EAAAt3C,GAAAs3C,EAAAt3C,IAAA,EAEAo2B,EAAAmhB,eACAF,EAAAr3C,GAAA,IACQ3C,EAAA,EACRi6C,EAAAt3C,IAAA3C,EAEAg6C,EAAAr3C,IAAA3C,OAMAlJ,EAAAiN,KAAA+1C,EAAA,SAAAK,GACA,IAAAljD,EAAAkjD,EAAAH,eAAAryC,OAAAwyC,EAAAF,gBACAG,EAAAtjD,EAAAkK,IAAA/J,GACAojD,EAAAvjD,EAAAiK,IAAA9J,GACAuF,EAAAwE,IAAA,OAAAxE,EAAAwE,IAAAo5C,EAAAj5C,KAAAH,IAAAxE,EAAAwE,IAAAo5C,GACA59C,EAAAuE,IAAA,OAAAvE,EAAAuE,IAAAs5C,EAAAl5C,KAAAJ,IAAAvE,EAAAuE,IAAAs5C,UAIAvjD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAA/B,EAAAJ,EAAAS,eAAA0B,GACAnC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,IACAvV,EAAAiN,KAAAoK,EAAA5B,KAAA,SAAAm/B,EAAA/oC,GACA,IAAA3C,GAAAxD,EAAAivC,cAAAC,GACAj3B,MAAAzU,IAAAqM,EAAAE,KAAA5J,GAAArS,SAIA,OAAAkM,EAAAwE,IACAxE,EAAAwE,IAAAhB,EACQA,EAAAxD,EAAAwE,MACRxE,EAAAwE,IAAAhB,GAGA,OAAAxD,EAAAuE,IACAvE,EAAAuE,IAAAf,EACQA,EAAAxD,EAAAuE,MACRvE,EAAAuE,IAAAf,QAOAxD,EAAAwE,IAAA9C,SAAA1B,EAAAwE,OAAAyT,MAAAjY,EAAAwE,KAAAxE,EAAAwE,IAxGA,EAyGAxE,EAAAuE,IAAA7C,SAAA1B,EAAAuE,OAAA0T,MAAAjY,EAAAuE,KAAAvE,EAAAuE,IAxGA,EA2GA/P,KAAA6mD,0BAEAO,aAAA,WACA,IAAAn3C,EAEAkpC,EADAn5C,KACA6F,QAAA8J,MAEA,GAHA3P,KAGA2zC,eACA1jC,EAAAE,KAAAH,IAAAmpC,EAAA0C,cAAA1C,EAAA0C,cAAA,GAAA1rC,KAAAG,KAJAtQ,KAIA8H,MAAA,SACI,CAEJ,IAAAwhD,EAAAxjD,EAAAkL,eAAAmoC,EAAA9B,SAAA5pC,EAAA2hB,OAAA7P,iBACAtP,EAAAE,KAAAH,IAAAmpC,EAAA0C,cAAA1C,EAAA0C,cAAA,GAAA1rC,KAAAG,KARAtQ,KAQA+H,QAAA,EAAAuhD,KAGA,OAAAr5C,GAGAo3C,yBAAA,WACArnD,KAAA2zC,gBAEA3zC,KAAA2P,MAAAsD,WAGA2nC,iBAAA,SAAAjpC,EAAAyL,GACA,OAAApd,KAAAy6C,cAAAz6C,KAAAib,MAAAM,KAAAC,SAAA4B,GAAA7B,KAAA5J,KAGAkpC,iBAAA,SAAA7rC,GAGA,IAIA+rC,EAJAvvC,EAAAxL,KACAgM,EAAAR,EAAAQ,MAEAu9C,GAAA/9C,EAAAivC,cAAAzrC,GAEAqc,EAAA7f,EAAAg8C,IAAAx7C,EAEA,OAAAR,EAAAmoC,gBACAoH,EAAAvvC,EAAAuU,KAAAvU,EAAA1D,MAAAujB,GAAAk+B,EAAAv9C,GACAmE,KAAAO,MAAAqqC,KAGAA,EAAAvvC,EAAAsU,OAAAtU,EAAAzD,OAAAsjB,GAAAk+B,EAAAv9C,GACAmE,KAAAO,MAAAqqC,KAEAD,iBAAA,SAAAC,GACA,IAAAvvC,EAAAxL,KACA2zC,EAAAnoC,EAAAmoC,eACA6V,EAAA7V,EAAAnoC,EAAA1D,MAAA0D,EAAAzD,OACAkc,GAAA0vB,EAAAoH,EAAAvvC,EAAAuU,KAAAvU,EAAAsU,OAAAi7B,GAAAyO,EACA,OAAAh+C,EAAAQ,OAAAR,EAAAg8C,IAAAh8C,EAAAQ,OAAAiY,GAEA2xB,gBAAA,SAAAjkC,GACA,OAAA3R,KAAA66C,iBAAA76C,KAAAynD,eAAA91C,OAGAnE,EAAA2Z,aAAA+tB,kBAAA,SAAAuT,EAAAD,uCC3LA,IAAA1iD,EAAc7H,EAAQ,MACtBs3C,EAAYt3C,EAAQ,MAEpBuD,EAAAC,QAAA,SAAA+L,GAEA,IAAAg7C,EAAA,CACAxgD,SAAA,OAGA2H,MAAA,CACAzK,SAAAqwC,EAAA/jC,WAAAX,cAIA44C,EAAAj8C,EAAAgqC,MAAAtsC,OAAA,CACAktC,oBAAA,WACA,IAAA5sC,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAszC,EAAApR,EAAAp4B,MACAsL,EAAAzP,EAAAyP,MAEAO,EADAP,EAAAM,KACAC,SACAxK,EAAAlL,EAAAkL,eACA2iC,EAAAnoC,EAAAmoC,eACA,SAAA+U,EAAArtC,GACA,OAAAs4B,EAAAt4B,EAAA8yB,UAAA3iC,EAAA9L,GAAA2b,EAAA+yB,UAAA5iC,EAAA9L,GAIA8L,EAAAwE,IAAA,KACAxE,EAAAuE,IAAA,KACAvE,EAAA8F,WAAA,KAEA,IAAAq3C,EAAA5gB,EAAA6gB,QAeA,QAdAj4C,IAAAg4C,GACA7iD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAAurC,EAAA,CAIA,IAAAttC,EAAAJ,EAAAS,eAAA0B,GACAnC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,SACA1K,IAAA0K,EAAAwtC,QACAF,GAAA,MAKA5gB,EAAA6gB,SAAAD,EAAA,CACA,IAAAG,EAAA,GAEAhjD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAA/B,EAAAJ,EAAAS,eAAA0B,GACAhR,EAAA,CACAiP,EAAA7O,UAEAmE,IAAAo3B,EAAA6gB,cAAAj4C,IAAA0K,EAAAwtC,MAAAzrC,EAAA,GACA/B,EAAAwtC,OACAE,KAAA,KAEA9tC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,UACA1K,IAAAm4C,EAAA18C,KACA08C,EAAA18C,GAAA,IAGAtG,EAAAiN,KAAAoK,EAAA5B,KAAA,SAAAm/B,EAAA/oC,GACA,IAAA1L,EAAA6iD,EAAA18C,GACA4C,GAAAxD,EAAAivC,cAAAC,GACAj3B,MAAAzU,IAAAqM,EAAAE,KAAA5J,GAAArS,SAIA2G,EAAA0L,GAAA1L,EAAA0L,IAAA,EAEAo2B,EAAAmhB,eACAjjD,EAAA0L,GAAA,IAGA1L,EAAA0L,IAAA3C,QAMAlJ,EAAAiN,KAAA+1C,EAAA,SAAAK,GACA,IAAAC,EAAAtjD,EAAAkK,IAAAm5C,GACAE,EAAAvjD,EAAAiK,IAAAo5C,GACA39C,EAAAwE,IAAA,OAAAxE,EAAAwE,IAAAo5C,EAAAj5C,KAAAH,IAAAxE,EAAAwE,IAAAo5C,GACA59C,EAAAuE,IAAA,OAAAvE,EAAAuE,IAAAs5C,EAAAl5C,KAAAJ,IAAAvE,EAAAuE,IAAAs5C,UAIAvjD,EAAAiN,KAAAyI,EAAA,SAAA2B,EAAAC,GACA,IAAA/B,EAAAJ,EAAAS,eAAA0B,GACAnC,EAAAQ,iBAAA2B,IAAAsrC,EAAArtC,IACAvV,EAAAiN,KAAAoK,EAAA5B,KAAA,SAAAm/B,EAAA/oC,GACA,IAAA3C,GAAAxD,EAAAivC,cAAAC,GACAj3B,MAAAzU,IAAAqM,EAAAE,KAAA5J,GAAArS,SAIA,OAAAkM,EAAAwE,IACAxE,EAAAwE,IAAAhB,EACQA,EAAAxD,EAAAwE,MACRxE,EAAAwE,IAAAhB,GAGA,OAAAxD,EAAAuE,IACAvE,EAAAuE,IAAAf,EACQA,EAAAxD,EAAAuE,MACRvE,EAAAuE,IAAAf,GAGA,IAAAA,IAAA,OAAAxD,EAAA8F,YAAAtC,EAAAxD,EAAA8F,cACA9F,EAAA8F,WAAAtC,QAOAxD,EAAAwE,IAAAgB,EAAAmoC,EAAAnpC,IAAAxE,EAAAwE,KACAxE,EAAAuE,IAAAiB,EAAAmoC,EAAAppC,IAAAvE,EAAAuE,KAEAvE,EAAAwE,MAAAxE,EAAAuE,MACA,IAAAvE,EAAAwE,KAAA,OAAAxE,EAAAwE,KACAxE,EAAAwE,IAAAG,KAAAe,IAAA,GAAAf,KAAAC,MAAAtK,EAAAqL,MAAA3F,EAAAwE,MAAA,GACAxE,EAAAuE,IAAAI,KAAAe,IAAA,GAAAf,KAAAC,MAAAtK,EAAAqL,MAAA3F,EAAAuE,MAAA,KAEAvE,EAAAwE,IAAA,EACAxE,EAAAuE,IAAA,MAIAwoC,WAAA,WACA,IAAA/sC,EAAAxL,KAEAm5C,EADA3tC,EAAA3F,QACA8J,MAEAH,EAAA,CACAQ,IAAAmpC,EAAAnpC,IACAD,IAAAopC,EAAAppC,KAEAJ,EAAAnE,EAAAmE,MAAA4lC,EAAAjmC,WAAAuB,YAAArB,EAAAhE,GAEAA,EAAAmoC,gBAEAhkC,EAAAsD,UAKAzH,EAAAuE,IAAAjK,EAAAiK,IAAAJ,GACAnE,EAAAwE,IAAAlK,EAAAkK,IAAAL,GAEAwpC,EAAAlmC,SACAtD,EAAAsD,UAEAzH,EAAAQ,MAAAR,EAAAuE,IACAvE,EAAAg8C,IAAAh8C,EAAAwE,MAEAxE,EAAAQ,MAAAR,EAAAwE,IACAxE,EAAAg8C,IAAAh8C,EAAAuE,MAGA2oC,qBAAA,WACA14C,KAAA0pD,WAAA1pD,KAAA2P,MAAAwK,QAEA3M,EAAAgqC,MAAAlsC,UAAAotC,qBAAA3pC,KAAA/O,OAGA46C,iBAAA,SAAAjpC,EAAAyL,GACA,OAAApd,KAAAy6C,cAAAz6C,KAAAib,MAAAM,KAAAC,SAAA4B,GAAA7B,KAAA5J,KAEAikC,gBAAA,SAAAjkC,GACA,OAAA3R,KAAA66C,iBAAA76C,KAAA0pD,WAAA/3C,KAEAkpC,iBAAA,SAAA7rC,GACA,IAKAw6C,EAAAzO,EAAA1vB,EALA7f,EAAAxL,KACAgM,EAAAR,EAAAQ,MACA29C,GAAAn+C,EAAAivC,cAAAzrC,GAEAmqC,EADA3tC,EAAA3F,QACA8J,MAwCA,OArCAnE,EAAAmoC,gBACAtoB,EAAAvlB,EAAAqL,MAAA3F,EAAAg8C,KAAA1hD,EAAAqL,MAAAnF,GACA,IAAA29C,EACA5O,EAAAvvC,EAAAuU,MAEAypC,EAAAh+C,EAAA1D,MACAizC,EAAAvvC,EAAAuU,KAAAypC,EAAAn+B,GAAAvlB,EAAAqL,MAAAw4C,GAAA7jD,EAAAqL,MAAAnF,OAIAw9C,EAAAh+C,EAAAzD,OACA,IAAAiE,GAAAmtC,EAAAlmC,QASK,IAAAzH,EAAAg8C,KAAArO,EAAAlmC,SACLoY,EAAAvlB,EAAAqL,MAAA3F,EAAAQ,OAAAlG,EAAAqL,MAAA3F,EAAA8F,YAEAypC,EADA4O,IAAAn+C,EAAAg8C,IACAh8C,EAAAoU,IACM+pC,IAAAn+C,EAAA8F,WACN9F,EAAAoU,IAAA,IAAA4pC,EAEAh+C,EAAAoU,IAAA,IAAA4pC,EAAA,IAAAA,EAAAn+B,GAAAvlB,EAAAqL,MAAAw4C,GAAA7jD,EAAAqL,MAAA3F,EAAA8F,cAEK,IAAAq4C,EACL5O,EAAA5B,EAAAlmC,QAAAzH,EAAAoU,IAAApU,EAAAsU,QAEAuL,EAAAvlB,EAAAqL,MAAA3F,EAAAg8C,KAAA1hD,EAAAqL,MAAAnF,GACAw9C,EAAAh+C,EAAAzD,OACAgzC,EAAAvvC,EAAAsU,OAAA0pC,EAAAn+B,GAAAvlB,EAAAqL,MAAAw4C,GAAA7jD,EAAAqL,MAAAnF,MAtBAqf,EAAAvlB,EAAAqL,MAAA3F,EAAAg8C,KAAA1hD,EAAAqL,MAAA3F,EAAA8F,YAEAypC,EADA4O,IAAA39C,EACAR,EAAAsU,OACM6pC,IAAAn+C,EAAA8F,WACN9F,EAAAsU,OAAA,IAAA0pC,EAEAh+C,EAAAsU,OAAA,IAAA0pC,EAAA,IAAAA,EAAAn+B,GAAAvlB,EAAAqL,MAAAw4C,GAAA7jD,EAAAqL,MAAA3F,EAAA8F,eAmBAypC,GAEAD,iBAAA,SAAAC,GACA,IAEA/rC,EAAAw6C,EAFAh+C,EAAAxL,KACAqrB,EAAAvlB,EAAAqL,MAAA3F,EAAAg8C,KAAA1hD,EAAAqL,MAAA3F,EAAAQ,OAUA,OAPAR,EAAAmoC,gBACA6V,EAAAh+C,EAAA1D,MACAkH,EAAAxD,EAAAQ,MAAAmE,KAAAe,IAAA,IAAA6pC,EAAAvvC,EAAAuU,MAAAsL,EAAAm+B,KAEAA,EAAAh+C,EAAAzD,OACAiH,EAAAmB,KAAAe,IAAA,IAAA1F,EAAAsU,OAAAi7B,GAAA1vB,EAAAm+B,GAAAh+C,EAAAQ,OAEAgD,KAGAxB,EAAA2Z,aAAA+tB,kBAAA,cAAAuU,EAAAjB,uCC/OA,IAAA/6C,EAAexP,EAAQ,MACvB6H,EAAc7H,EAAQ,MACtBs3C,EAAYt3C,EAAQ,MAEpBuD,EAAAC,QAAA,SAAA+L,GAEA,IAAAgyB,EAAA/xB,EAAA2hB,OAEAo5B,EAAA,CACAjiB,SAAA,EAGAqjB,SAAA,EACA5hD,SAAA,YAEA6hD,WAAA,CACAtjB,SAAA,EACAhnC,MAAA,qBACA8/B,UAAA,GAGAwW,UAAA,CACAiU,UAAA,GAIAn6C,MAAA,CAEAo6C,mBAAA,EAGAC,cAAA,yBAGAC,iBAAA,EAGAC,iBAAA,EAEAhlD,SAAAqwC,EAAA/jC,WAAAjC,QAGA46C,YAAA,CAEA5jB,SAAA,EAGA8Q,SAAA,GAGAnyC,SAAA,SAAAsY,GACA,OAAAA,KAKA,SAAA4sC,EAAA/iC,GACA,IAAA0gB,EAAA1gB,EAAAxhB,QACA,OAAAkiC,EAAA8hB,WAAAtjB,SAAAwB,EAAAoiB,YAAA5jB,QAAAlf,EAAApM,MAAAM,KAAAyuB,OAAAn9B,OAAA,EAGA,SAAAw9C,EAAAhjC,GACA,IAAAijC,EAAAjjC,EAAAxhB,QAAAskD,YACA9S,EAAAvxC,EAAAkL,eAAAs5C,EAAAjT,SAAA7X,EAAAjgB,iBACA2O,EAAApoB,EAAAkL,eAAAs5C,EAAAp8B,UAAAsR,EAAAhgB,kBACA2O,EAAAroB,EAAAkL,eAAAs5C,EAAAn8B,WAAAqR,EAAAlgB,mBAGA,OACAkE,KAAA6zB,EACAj0B,MAAA8K,EACAopB,OAAAnpB,EACAE,KANAvoB,EAAAkoB,WAAAqpB,EAAAnpB,EAAAC,IAwBA,SAAAo8B,EAAAphC,EAAA2d,EAAAtjB,EAAAxT,EAAAD,GACA,OAAAoZ,IAAAnZ,GAAAmZ,IAAApZ,EACA,CACA/D,MAAA86B,EAAAtjB,EAAA,EACAgkC,IAAA1gB,EAAAtjB,EAAA,GAEG2F,EAAAnZ,GAAAmZ,EAAApZ,EACH,CACA/D,MAAA86B,EAAAtjB,EAAA,EACAgkC,IAAA1gB,GAIA,CACA96B,MAAA86B,EACA0gB,IAAA1gB,EAAAtjB,EAAA,GAkGA,SAAAgnC,EAAArhC,GACA,WAAAA,GAAA,MAAAA,EACA,SACGA,EAAA,IACH,OAGA,QAGA,SAAAg1B,EAAA17B,EAAAgoC,EAAAziD,EAAAqvC,GACA,GAAAvxC,EAAA2L,QAAAg5C,GAIA,IAHA,IAAA7iD,EAAAI,EAAAJ,EACA8H,EAAA,IAAA2nC,EAEAnrC,EAAA,EAAkBA,EAAAu+C,EAAA59C,SAAiBX,EACnCuW,EAAA07B,SAAAsM,EAAAv+C,GAAAlE,EAAAL,EAAAC,GACAA,GAAA8H,OAGA+S,EAAA07B,SAAAsM,EAAAziD,EAAAL,EAAAK,EAAAJ,GAIA,SAAA8iD,EAAAvhC,EAAAwhC,EAAA3iD,GACA,KAAAmhB,GAAA,MAAAA,EACAnhB,EAAAJ,GAAA+iD,EAAAr9B,EAAA,GACGnE,EAAA,KAAAA,EAAA,MACHnhB,EAAAJ,GAAA+iD,EAAAr9B,GAkFA,SAAAs9B,EAAAC,GACA,OAAA/kD,EAAAwH,SAAAu9C,KAAA,EAGA,IAAAC,EAAAt9C,EAAAo5C,gBAAA17C,OAAA,CACA+sC,cAAA,WACA,IAAAzsC,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAszC,EAAApR,EAAAp4B,MAEAnE,EAAA1D,MAAA0D,EAAAosC,SACApsC,EAAAzD,OAAAyD,EAAAqsC,UACArsC,EAAAu/C,QAAA56C,KAAAO,MAAAlF,EAAA1D,MAAA,GACA0D,EAAAw/C,QAAA76C,KAAAO,MAAAlF,EAAAzD,OAAA,GAEA,IAAA2rC,EAAA5tC,EAAAkK,IAAA,CAAAxE,EAAAzD,OAAAyD,EAAA1D,QACAwhD,EAAAxjD,EAAAkL,eAAAmoC,EAAA9B,SAAA7X,EAAAjgB,iBACA/T,EAAAy/C,YAAAljB,EAAAxB,QAAAmN,EAAA,GAAA4V,EAAA,EAAAnQ,EAAA8Q,kBAAAvW,EAAA,GAEA0E,oBAAA,WACA,IAAA5sC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACAjL,EAAAkM,OAAAC,kBACApM,EAAAmM,OAAAoM,kBAEAxiB,EAAAiN,KAAAkI,EAAAM,KAAAC,SAAA,SAAA2B,EAAAC,GACA,GAAAnC,EAAAQ,iBAAA2B,GAAA,CACA,IAAA/B,EAAAJ,EAAAS,eAAA0B,GAEAtX,EAAAiN,KAAAoK,EAAA5B,KAAA,SAAAm/B,EAAA/oC,GACA,IAAA3C,GAAAxD,EAAAivC,cAAAC,GACAj3B,MAAAzU,IAAAqM,EAAAE,KAAA5J,GAAArS,SAIA0Q,EAAAG,KAAAH,IAAAhB,EAAAgB,GACAD,EAAAI,KAAAJ,IAAAf,EAAAe,SAKAvE,EAAAwE,QAAAkM,OAAAC,kBAAA,EAAAnM,EACAxE,EAAAuE,QAAAmM,OAAAoM,kBAAA,EAAAvY,EAGAvE,EAAAq7C,0BAEAO,aAAA,WACA,IAAAjO,EAAAn5C,KAAA6F,QAAA8J,MACA25C,EAAAxjD,EAAAkL,eAAAmoC,EAAA9B,SAAA7X,EAAAjgB,iBACA,OAAApP,KAAAH,IAAAmpC,EAAA0C,cAAA1C,EAAA0C,cAAA,GAAA1rC,KAAAG,KAAAtQ,KAAAirD,aAAA,IAAA3B,MAEA5Q,qBAAA,WACA,IAAAltC,EAAAxL,KAEAwN,EAAAo5C,gBAAAt7C,UAAAotC,qBAAA3pC,KAAAvD,GAGAA,EAAA2+C,YAAA3+C,EAAAyP,MAAAM,KAAAyuB,OAAAv2B,IAAAjI,EAAA3F,QAAAskD,YAAAjlD,SAAAsG,IAEAovC,iBAAA,SAAAjpC,EAAAyL,GACA,OAAApd,KAAAy6C,cAAAz6C,KAAAib,MAAAM,KAAAC,SAAA4B,GAAA7B,KAAA5J,KAEAqnC,IAAA,WAnLA,IAAA3xB,EACA6jC,EAmLAlrD,KAAA6F,QAAAskD,YAAA5jB,QAzQA,SAAAlf,GA6BA,IAYAnb,EAAAy+C,EAAAQ,EAZAC,EAAAf,EAAAhjC,GAIA6jC,EAAA/6C,KAAAH,IAAAqX,EAAAtf,OAAA,EAAAsf,EAAAvf,MAAA,GACAujD,EAAA,CACAz1C,EAAAyR,EAAAvf,MACAgO,EAAA,EACAqK,EAAAkH,EAAAtf,OACA8V,EAAA,GAEAytC,EAAA,GAGAjkC,EAAA5E,IAAA4L,KAAA+8B,EAAA/8B,KACAhH,EAAAkkC,iBAAA,GAEA,IAlFA9oC,EAAA40B,EAAA75B,EAkFAguC,EAAApB,EAAA/iC,GACA,IAAAnb,EAAA,EAAaA,EAAAs/C,EAAgBt/C,IAAA,CAC7Bi/C,EAAA9jC,EAAAokC,iBAAAv/C,EAAAg/C,GApFAzoC,EAqFA4E,EAAA5E,IArFA40B,EAqFA+T,EAAA5nC,KArFAhG,EAqFA6J,EAAA8iC,YAAAj+C,IAAA,GAAAy+C,EApFA7kD,EAAA2L,QAAA+L,GACA,CACAvH,EAAAnQ,EAAAsoB,YAAA3L,IAAA4L,KAAA7Q,GACA8P,EAAA9P,EAAA3Q,OAAAwqC,EAAA,KAAA75B,EAAA3Q,OAAA,GAAAwqC,GAIA,CACAphC,EAAAwM,EAAAmM,YAAApR,GAAA1V,MACAwlB,EAAA+pB,GA4EAhwB,EAAAkkC,iBAAAr/C,GAAAy+C,EAGA,IAAAhR,EAAAtyB,EAAAqkC,cAAAx/C,GACAid,EAAArjB,EAAA6iB,UAAAgxB,GAAA,IACAgS,EAAApB,EAAAphC,EAAAgiC,EAAAxjD,EAAAgjD,EAAA10C,EAAA,OACA21C,EAAArB,EAAAphC,EAAAgiC,EAAAvjD,EAAA+iD,EAAAr9B,EAAA,QAEAq+B,EAAA3/C,MAAAq/C,EAAAv1C,IACAu1C,EAAAv1C,EAAA61C,EAAA3/C,MACAs/C,EAAAx1C,EAAA6jC,GAGAgS,EAAAnE,IAAA6D,EAAAz1C,IACAy1C,EAAAz1C,EAAA+1C,EAAAnE,IACA8D,EAAA11C,EAAA+jC,GAGAiS,EAAA5/C,MAAAq/C,EAAAlrC,IACAkrC,EAAAlrC,EAAAyrC,EAAA5/C,MACAs/C,EAAAnrC,EAAAw5B,GAGAiS,EAAApE,IAAA6D,EAAAxtC,IACAwtC,EAAAxtC,EAAA+tC,EAAApE,IACA8D,EAAAztC,EAAA87B,GAIAtyB,EAAAwkC,cAAAX,EAAAG,EAAAC,GA2LAQ,CAAA9rD,OArLAqnB,EAuLArnB,KAtLAkrD,EAAA/6C,KAAAH,IAAAqX,EAAAtf,OAAA,EAAAsf,EAAAvf,MAAA,GACAuf,EAAA4jC,YAAA96C,KAAAO,MAAAw6C,GACA7jC,EAAA0kC,eAAA,WA2LAF,cAAA,SAAAX,EAAAG,EAAAC,GACA,IACAU,EAAAX,EAAAv1C,EAAA3F,KAAAiR,IAAAkqC,EAAAx1C,GACAm2C,EAAA97C,KAAAJ,IAAAs7C,EAAAz1C,EAFA5V,KAEA8H,MAAA,GAAAqI,KAAAiR,IAAAkqC,EAAA11C,GACAs2C,GAAAb,EAAAlrC,EAAAhQ,KAAA8Q,IAAAqqC,EAAAnrC,GACAgsC,GAAAh8C,KAAAJ,IAAAs7C,EAAAxtC,EAJA7d,KAIA+H,OAAA,GAAAoI,KAAA8Q,IAAAqqC,EAAAztC,GAEAmuC,EAAApB,EAAAoB,GACAC,EAAArB,EAAAqB,GACAC,EAAAtB,EAAAsB,GACAC,EAAAvB,EAAAuB,GATAnsD,KAWAirD,YAAA96C,KAAAH,IACAG,KAAAO,MAAAw6C,GAAAc,EAAAC,GAAA,GACA97C,KAAAO,MAAAw6C,GAAAgB,EAAAC,GAAA,IAbAnsD,KAcA+rD,eAAAC,EAAAC,EAAAC,EAAAC,IAEAJ,eAAA,SAAAK,EAAAC,EAAAC,EAAAC,GACA,IAAA/gD,EAAAxL,KACAwsD,EAAAhhD,EAAA1D,MAAAukD,EAAA7gD,EAAAy/C,YACAwB,EAAAL,EAAA5gD,EAAAy/C,YACAyB,EAAAJ,EAAA9gD,EAAAy/C,YACA0B,EAAAnhD,EAAAzD,OAAAwkD,EAAA/gD,EAAAy/C,YAEAz/C,EAAAu/C,QAAA56C,KAAAO,OAAA+7C,EAAAD,GAAA,EAAAhhD,EAAAuU,MACAvU,EAAAw/C,QAAA76C,KAAAO,OAAAg8C,EAAAC,GAAA,EAAAnhD,EAAAoU,MAGA8rC,cAAA,SAAA/5C,GASA,OAAAA,GARA,EAAAxB,KAAA+Q,GAAAkpC,EAAApqD,QACAA,KAAAib,MAAApV,SAAA7F,KAAAib,MAAApV,QAAAy4B,WACAt+B,KAAAib,MAAApV,QAAAy4B,WACA,GAEAnuB,KAAA+Q,GAAA,OAKA0rC,8BAAA,SAAA59C,GACA,IAAAxD,EAAAxL,KAEA,UAAAgP,EACA,SAIA,IAAA69C,EAAArhD,EAAAy/C,aAAAz/C,EAAAuE,IAAAvE,EAAAwE,KACA,OAAAxE,EAAA3F,QAAA8J,MAAAsD,SACAzH,EAAAuE,IAAAf,GAAA69C,GAEA79C,EAAAxD,EAAAwE,KAAA68C,GAEApB,iBAAA,SAAA95C,EAAAm7C,GACA,IACAC,EADA/sD,KACA0rD,cAAA/5C,GAAAxB,KAAA+Q,GAAA,EACA,OACAvZ,EAAAwI,KAAAO,MAAAP,KAAA8Q,IAAA8rC,GAAAD,GAHA9sD,KAGA+qD,QACAnjD,EAAAuI,KAAAO,MAAAP,KAAAiR,IAAA2rC,GAAAD,GAJA9sD,KAIAgrD,UAGAgC,yBAAA,SAAAr7C,EAAA3C,GACA,OAAAhP,KAAAyrD,iBAAA95C,EAAA3R,KAAA4sD,8BAAA59C,KAGAi+C,gBAAA,WACA,IACAj9C,EADAhQ,KACAgQ,IACAD,EAFA/P,KAEA+P,IAEA,OAJA/P,KAIAgtD,yBAAA,EAJAhtD,KAKAy2C,YAAA,EACAzmC,EAAA,GAAAD,EAAA,EAAAA,EACAC,EAAA,GAAAD,EAAA,EAAAC,EACA,IAGAgvB,KAAA,WACA,IAAAxzB,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAg0C,EAAA9R,EAAA8N,UACAsD,EAAApR,EAAAp4B,MACAqB,EAAAlL,EAAAkL,eAEA,GAAA+2B,EAAAxB,QAAA,CACA,IAAA9jB,EAAAjX,EAAAiX,IACA6b,EAAAt+B,KAAA0rD,cAAA,GAGApC,EAAAt4C,EAAAmoC,EAAA9B,SAAA7X,EAAAjgB,iBACA2tC,EAAAl8C,EAAAmoC,EAAAjrB,UAAAsR,EAAAhgB,kBACA2tC,EAAAn8C,EAAAmoC,EAAAhrB,WAAAqR,EAAAlgB,mBACA8tC,EAAAtnD,EAAAkoB,WAAAs7B,EAAA4D,EAAAC,GAEArnD,EAAAiN,KAAAvH,EAAAmE,MAAA,SAAA6N,EAAA7L,GAEA,GAAAA,EAAA,GAAAwnC,EAAAlmC,QAAA,CACA,IAAAo6C,EAAA7hD,EAAAohD,8BAAAphD,EAAAi8C,eAAA91C,IAOA,GAJAkoC,EAAAtT,SAAA,IAAA50B,GA/MA,SAAA0V,EAAAwyB,EAAAj3B,EAAAjR,GACA,IAAA8Q,EAAA4E,EAAA5E,IAIA,GAHAA,EAAA2c,YAAAt5B,EAAA6M,sBAAAknC,EAAAt6C,MAAAoS,EAAA,GACA8Q,EAAA4c,UAAAv5B,EAAA6M,sBAAAknC,EAAAxa,UAAA1tB,EAAA,GAEA0V,EAAAxhB,QAAAgwC,UAAAiU,SAEArnC,EAAAiB,YACAjB,EAAAkB,IAAA0D,EAAA0jC,QAAA1jC,EAAA2jC,QAAApoC,EAAA,IAAAzS,KAAA+Q,IACAuB,EAAAmB,YACAnB,EAAA4B,aACG,CAEH,IAAAmnC,EAAApB,EAAA/iC,GAEA,OAAAmkC,EACA,OAGA/oC,EAAAiB,YACA,IAAAynC,EAAA9jC,EAAAokC,iBAAA,EAAA7oC,GACAH,EAAAM,OAAAooC,EAAAxjD,EAAAwjD,EAAAvjD,GAEA,QAAAsE,EAAA,EAAkBA,EAAAs/C,EAAgBt/C,IAClCi/C,EAAA9jC,EAAAokC,iBAAAv/C,EAAA0W,GACAH,EAAAO,OAAAmoC,EAAAxjD,EAAAwjD,EAAAvjD,GAGA6a,EAAAmB,YACAnB,EAAA4B,UAmLAipC,CAAA9hD,EAAAquC,EAAAwT,EAAA17C,GAGAwnC,EAAA5S,QAAA,CACA,IAAAyV,EAAAhrC,EAAAmoC,EAAA8C,UAAAzc,EAAAngB,kBAOA,GANAoD,EAAA4L,KAAA++B,EAEA3qC,EAAAgC,OACAhC,EAAAy7B,UAAA1yC,EAAAu/C,QAAAv/C,EAAAw/C,SACAvoC,EAAAjJ,OAAA8kB,GAEA6a,EAAA4Q,kBAAA,CACA,IAAAtQ,EAAAh3B,EAAAmM,YAAApR,GAAA1V,MACA2a,EAAA6c,UAAA6Z,EAAA6Q,cACAvnC,EAAAsB,UACA01B,EAAA,EAAAN,EAAA+Q,kBACAmD,EAAA/D,EAAA,EAAAnQ,EAAA8Q,iBACAxQ,EAAA,EAAAN,EAAA+Q,iBACAZ,EAAA,EAAAnQ,EAAA8Q,kBAIAxnC,EAAA46B,UAAA,SACA56B,EAAA66B,aAAA,SACA76B,EAAA6c,UAAA0c,EACAv5B,EAAA07B,SAAA3gC,EAAA,GAAA6vC,GACA5qC,EAAAmC,eAKAmjB,EAAA8hB,WAAAtjB,SAAAwB,EAAAoiB,YAAA5jB,UA5RA,SAAAlf,GACA,IAAA5E,EAAA4E,EAAA5E,IACAzR,EAAAlL,EAAAkL,eACA+2B,EAAA1gB,EAAAxhB,QACA0nD,EAAAxlB,EAAA8hB,WACA2D,EAAAzlB,EAAAoiB,YAEA1nC,EAAA4c,UAAAkuB,EAAAluB,UACA5c,EAAA2c,YAAAmuB,EAAAhuD,MAEA,IAAAkuD,EAAApmC,EAAAulC,8BAAA7kB,EAAAp4B,MAAAsD,QAAAoU,EAAArX,IAAAqX,EAAAtX,KAGAq7C,EAAAf,EAAAhjC,GAEA5E,EAAA66B,aAAA,MAEA,QAAApxC,EAAAk+C,EAAA/iC,GAAA,EAAwCnb,GAAA,EAAQA,IAAA,CAChD,GAAAqhD,EAAAhnB,QAAA,CACA,IAAAmnB,EAAArmC,EAAAokC,iBAAAv/C,EAAAuhD,GACAhrC,EAAAiB,YACAjB,EAAAM,OAAAsE,EAAA0jC,QAAA1jC,EAAA2jC,SACAvoC,EAAAO,OAAA0qC,EAAA/lD,EAAA+lD,EAAA9lD,GACA6a,EAAA4B,SACA5B,EAAAmB,YAGA,GAAA4pC,EAAAjnB,QAAA,CAEA,IAAAonB,EAAAtmC,EAAAokC,iBAAAv/C,EAAAuhD,EAAA,GAGAG,EAAA58C,EAAAw8C,EAAAvR,UAAAzc,EAAAngB,kBACAoD,EAAA4L,KAAA+8B,EAAA/8B,KACA5L,EAAA6c,UAAAsuB,EAEA,IAAAjU,EAAAtyB,EAAAqkC,cAAAx/C,GACAid,EAAArjB,EAAA6iB,UAAAgxB,GACAl3B,EAAA46B,UAAAmN,EAAArhC,GACAuhC,EAAAvhC,EAAA9B,EAAAkkC,iBAAAr/C,GAAAyhD,GACAxP,EAAA17B,EAAA4E,EAAA8iC,YAAAj+C,IAAA,GAAAyhD,EAAAvC,EAAA5nC,QAqPAqqC,CAAAriD,OAKAgC,EAAA2Z,aAAA+tB,kBAAA,eAAA4V,EAAAtC,uCC5gBA,IAAAsF,EAAa7vD,EAAQ,KACrB6vD,EAAA,mBAAAA,IAAA//C,OAAA+/C,OAEA,IAAArgD,EAAexP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAGtB8vD,EAAA7xC,OAAA8xC,mBAAA,iBACAC,EAAA/xC,OAAAgyC,kBAAA,iBAEAC,EAAA,CACAC,YAAA,CACAC,QAAA,EACA7qC,KAAA,EACA8qC,MAAA,8BAEAC,OAAA,CACAF,QAAA,EACA7qC,KAAA,IACA8qC,MAAA,eAEAE,OAAA,CACAH,QAAA,EACA7qC,KAAA,IACA8qC,MAAA,eAEAG,KAAA,CACAJ,QAAA,EACA7qC,KAAA,KACA8qC,MAAA,cAEAI,IAAA,CACAL,QAAA,EACA7qC,KAAA,MACA8qC,MAAA,SAEAK,KAAA,CACAN,QAAA,EACA7qC,KAAA,OACA8qC,MAAA,WAEAM,MAAA,CACAP,QAAA,EACA7qC,KAAA,OACA8qC,MAAA,SAEAO,QAAA,CACAR,QAAA,EACA7qC,KAAA,OACA8qC,MAAA,WAEAQ,KAAA,CACAT,QAAA,EACA7qC,KAAA,SAIAurC,EAAAniD,OAAAD,KAAAwhD,GAEA,SAAAa,EAAAn1C,EAAAgE,GACA,OAAAhE,EAAAgE,EAGA,SAAAoxC,EAAA/xC,GACA,IAEAhR,EAAAC,EAAA9G,EAFA6pD,EAAA,GACAC,EAAA,GAGA,IAAAjjD,EAAA,EAAAC,EAAA+Q,EAAArQ,OAAiCX,EAAAC,IAAUD,EAE3CgjD,EADA7pD,EAAA6X,EAAAhR,MAEAgjD,EAAA7pD,IAAA,EACA8pD,EAAAhqD,KAAAE,IAIA,OAAA8pD,EAsFA,SAAAhiD,EAAAiiD,EAAAC,EAAAv7C,EAAAw7C,GACA,IAAAjkC,EAjCA,SAAA+jC,EAAAhjD,EAAA4C,GAKA,IAJA,IAEAugD,EAAAC,EAAAC,EAFAC,EAAA,EACAt+B,EAAAg+B,EAAAviD,OAAA,EAGA6iD,GAAA,GAAAA,GAAAt+B,GAAA,CAKA,GAHAo+B,EAAAJ,GADAG,EAAAG,EAAAt+B,GAAA,GACA,SACAq+B,EAAAL,EAAAG,IAEAC,EAEA,OAAWE,GAAA,KAAAt+B,GAAAq+B,GACR,GAAAA,EAAArjD,GAAA4C,EACH0gD,EAAAH,EAAA,MACG,MAAAC,EAAApjD,GAAA4C,GAGH,OAAW0gD,GAAAF,EAAAp+B,GAAAq+B,GAFXr+B,EAAAm+B,EAAA,GAOA,OAASG,GAAAD,EAAAr+B,GAAA,MAUTu+B,CAAAP,EAAAC,EAAAv7C,GAGA87C,EAAAvkC,EAAAqkC,GAAArkC,EAAA+F,GAAA/F,EAAAqkC,GAAAN,IAAAviD,OAAA,GAAAuiD,EAAA,GACAvlC,EAAAwB,EAAAqkC,GAAArkC,EAAA+F,GAAA/F,EAAA+F,GAAAg+B,IAAAviD,OAAA,GAAAuiD,EAAA,GAEAS,EAAAhmC,EAAAwlC,GAAAO,EAAAP,GACAt2C,EAAA82C,GAAA/7C,EAAA87C,EAAAP,IAAAQ,EAAA,EACA5rC,GAAA4F,EAAAylC,GAAAM,EAAAN,IAAAv2C,EAEA,OAAA62C,EAAAN,GAAArrC,EAOA,SAAA6rC,EAAA9gD,EAAAnJ,GACA,IAAAkqD,EAAAlqD,EAAAkqD,OACAC,EAAAnqD,EAAAkqD,QAAAlqD,EAAAmqD,OAEA,yBAAAD,EACAA,EAAA/gD,GAGA,iBAAAA,GAAA,iBAAAghD,EACAlC,EAAA9+C,EAAAghD,IAGAhhD,aAAA8+C,IACA9+C,EAAA8+C,EAAA9+C,IAGAA,EAAAqH,UACArH,EAKA,mBAAAghD,EACAA,EAAAhhD,GAGAA,GAGA,SAAAihD,EAAAC,EAAA7oC,GACA,GAAAvhB,EAAAwM,cAAA49C,GACA,YAGA,IAAArqD,EAAAwhB,EAAAxhB,QAAAsqD,KACAnhD,EAAA8gD,EAAAzoC,EAAAozB,cAAAyV,GAAArqD,GACA,OAAAmJ,EAAAqH,WAIAxQ,EAAA6K,OACA1B,EAAAohD,QAAAvqD,EAAA6K,OAGA1B,EAAAqhD,WAPA,KAwEA,SAAAC,EAAAC,GACA,QAAArkD,EAAA6iD,EAAApgD,QAAA4hD,GAAA,EAAApkD,EAAA4iD,EAAAliD,OAA2DX,EAAAC,IAAUD,EACrE,GAAAiiD,EAAAY,EAAA7iD,IAAAmiD,OACA,OAAAU,EAAA7iD,GAWA,SAAAskD,EAAAxgD,EAAAD,EAAA0gD,EAAA5qD,GACA,IAUAsqD,EAVAO,EAAA7qD,EAAAsqD,KACAnZ,EAAA0Z,EAAAH,MAlDA,SAAAI,EAAA3gD,EAAAD,EAAA0gD,GACA,IACAvkD,EAAA0kD,EAAAC,EADA1kD,EAAA4iD,EAAAliD,OAGA,IAAAX,EAAA6iD,EAAApgD,QAAAgiD,GAAiCzkD,EAAAC,EAAA,IAAcD,EAI/C,GAFA2kD,GADAD,EAAAzC,EAAAY,EAAA7iD,KACAoiD,MAAAsC,EAAAtC,MAAAsC,EAAAtC,MAAAzhD,OAAA,GAAAohD,EAEA2C,EAAAvC,QAAAl+C,KAAAG,MAAAP,EAAAC,IAAA6gD,EAAAD,EAAAptC,QAAAitC,EACA,OAAA1B,EAAA7iD,GAIA,OAAA6iD,EAAA5iD,EAAA,GAqCA2kD,CAAAJ,EAAAC,QAAA3gD,EAAAD,EAAA0gD,GACAxZ,EAAAqZ,EAAAtZ,GACApnC,EAAA9J,EAAAkL,eAAA0/C,EAAA9gD,SAAA8gD,EAAAK,cACAC,EAAA,SAAAha,GAAA0Z,EAAAO,WACAC,EAAArrD,EAAA8J,MAAAsnC,MAAA/H,QACA0hB,EAAAzC,EAAAnX,GACAma,EAAArD,EAAA99C,GACAohD,EAAAtD,EAAA/9C,GACAJ,EAAA,GAgCA,IA7BAC,IACAA,EAtFA,SAAAI,EAAAD,EAAAwgD,EAAAE,GACA,IAIAvkD,EAAAC,EAAA0kD,EAJAxlC,EAAAtb,EAAAC,EACA4gD,EAAAzC,EAAAoC,GACAc,EAAAT,EAAAptC,KACA8qC,EAAAsC,EAAAtC,MAGA,IAAAA,EACA,OAAAn+C,KAAAG,KAAA+a,IAAAolC,GAAA,GAAAY,IAGA,IAAAnlD,EAAA,EAAAC,EAAAmiD,EAAAzhD,OAAiCX,EAAAC,IACjC0kD,EAAAvC,EAAApiD,KACAiE,KAAAG,KAAA+a,GAAAgmC,EAAAR,KAAAJ,MAF2CvkD,GAO3C,OAAA2kD,EAoEAS,CAAAthD,EAAAD,EAAAinC,EAAAyZ,IAIAO,IACAG,IAAAF,WAAAD,GACAI,IAAAH,WAAAD,IAIAG,IAAAf,QAAAY,EAAA,MAAAha,IACAoa,IAAAhB,QAAAY,EAAA,MAAAha,IAGAjnC,GACAqhD,EAAAjsB,IAAA,EAAA6R,GAGAmZ,EAAArC,EAAAqD,GAEAD,GAAAja,IAAA+Z,IAAAN,EAAAhgD,QAIAy/C,EAAAC,QAAAnZ,GACAkZ,EAAAhrB,QAAAgsB,EAAAhB,IAAAS,EAAAptC,KAAA5T,MAAAonC,IAGOmZ,EAAAiB,EAAajB,EAAAhrB,IAAAv1B,EAAAonC,GACpBrnC,EAAAxK,MAAAgrD,GAKA,OAFAxgD,EAAAxK,MAAAgrD,GAEAxgD,EAmDAnO,EAAAC,QAAA,SAAA+L,GAEA,IA8DA+jD,EAAA/jD,EAAAgqC,MAAAtsC,OAAA,CACAC,WAAA,WACA,IAAA2iD,EACA,UAAA1hB,MAAA,wIAGApsC,KAAA6rC,oBAEAr+B,EAAAgqC,MAAAlsC,UAAAH,WAAA4D,KAAA/O,OAGAoqC,OAAA,WACA,IACAvkC,EADA7F,KACA6F,QAOA,OAJAA,EAAAsqD,MAAAtqD,EAAAsqD,KAAAH,QACA51C,QAAAo3C,KAAA,0EAGAhkD,EAAAgqC,MAAAlsC,UAAA8+B,OAAAh/B,MARApL,KAQAqL,YAMAovC,cAAA,SAAAC,GAIA,OAHAA,QAAA/pC,IAAA+pC,EAAAv6B,IACAu6B,IAAAv6B,GAEA3S,EAAAgqC,MAAAlsC,UAAAmvC,cAAA1rC,KAAA/O,KAAA06C,IAGAtC,oBAAA,WACA,IAQAlsC,EAAA0E,EAAAzE,EAAAmP,EAAAC,EAAAk2C,EARAjmD,EAAAxL,KACAib,EAAAzP,EAAAyP,MACAy1C,EAAAllD,EAAA3F,QAAAsqD,KACAngD,EAAAi+C,EACAl+C,EAAAg+C,EACA2D,EAAA,GACAl2C,EAAA,GACAwuB,EAAA,GAIA,IAAA99B,EAAA,EAAAC,EAAA8O,EAAAM,KAAAyuB,OAAAn9B,OAA+CX,EAAAC,IAAUD,EACzD89B,EAAA7kC,KAAA8qD,EAAAh1C,EAAAM,KAAAyuB,OAAA99B,GAAAV,IAIA,IAAAU,EAAA,EAAAC,GAAA8O,EAAAM,KAAAC,UAAA,IAAA3O,OAAyDX,EAAAC,IAAUD,EACnE,GAAA+O,EAAAQ,iBAAAvP,GAIA,GAHAqP,EAAAN,EAAAM,KAAAC,SAAAtP,GAAAqP,KAGAzV,EAAA2M,SAAA8I,EAAA,IAGA,IAFAC,EAAAtP,GAAA,GAEA0E,EAAA,EAAA0K,EAAAC,EAAA1O,OAAqC+D,EAAA0K,IAAU1K,EAC/C6gD,EAAAxB,EAAA10C,EAAA3K,GAAApF,GACAkmD,EAAAvsD,KAAAssD,GACAj2C,EAAAtP,GAAA0E,GAAA6gD,OAGAC,EAAAvsD,KAAAiG,MAAAsmD,EAAA1nB,GACAxuB,EAAAtP,GAAA89B,EAAA7vB,MAAA,QAGAqB,EAAAtP,GAAA,GAIA89B,EAAAn9B,SAEAm9B,EAAAilB,EAAAjlB,GAAApsB,KAAAoxC,GACAh/C,EAAAG,KAAAH,MAAAg6B,EAAA,IACAj6B,EAAAI,KAAAJ,MAAAi6B,IAAAn9B,OAAA,KAGA6kD,EAAA7kD,SACA6kD,EAAAzC,EAAAyC,GAAA9zC,KAAAoxC,GACAh/C,EAAAG,KAAAH,MAAA0hD,EAAA,IACA3hD,EAAAI,KAAAJ,MAAA2hD,IAAA7kD,OAAA,KAGAmD,EAAAigD,EAAAS,EAAA1gD,IAAAxE,IAAAwE,EACAD,EAAAkgD,EAAAS,EAAA3gD,IAAAvE,IAAAuE,EAGAC,MAAAi+C,GAAAH,IAAAsC,QAAA,OAAApgD,EACAD,MAAAg+C,GAAAD,IAAA6D,MAAA,SAAA5hD,EAGAvE,EAAAwE,IAAAG,KAAAH,MAAAD,GACAvE,EAAAuE,IAAAI,KAAAJ,IAAAC,EAAA,EAAAD,GAGAvE,EAAAomD,YAAApmD,EAAAmoC,eACAnoC,EAAAqmD,OAAA,GACArmD,EAAAsmD,YAAA,CACAv2C,KAAAm2C,EACAl2C,WACAwuB,WAIAuO,WAAA,WACA,IAOArsC,EAAAC,EAAAslD,EAPAjmD,EAAAxL,KACAgQ,EAAAxE,EAAAwE,IACAD,EAAAvE,EAAAuE,IACAlK,EAAA2F,EAAA3F,QACA6qD,EAAA7qD,EAAAsqD,KACAuB,EAAA,GACA/hD,EAAA,GAGA,OAAA9J,EAAA8J,MAAA6D,QACA,WACAk+C,EAAAlmD,EAAAsmD,YAAAv2C,KACA,MACA,aACAm2C,EAAAlmD,EAAAsmD,YAAA9nB,OACA,MACA,WACA,QACA0nB,EAAAlB,EAAAxgD,EAAAD,EAAAvE,EAAAumD,iBAAA/hD,GAAAnK,GAaA,IAVA,UAAAA,EAAAw8B,QAAAqvB,EAAA7kD,SACAmD,EAAA0hD,EAAA,GACA3hD,EAAA2hD,IAAA7kD,OAAA,IAIAmD,EAAAigD,EAAAS,EAAA1gD,IAAAxE,IAAAwE,EACAD,EAAAkgD,EAAAS,EAAA3gD,IAAAvE,IAAAuE,EAGA7D,EAAA,EAAAC,EAAAulD,EAAA7kD,OAAwCX,EAAAC,IAAUD,GAClDulD,EAAAC,EAAAxlD,KACA8D,GAAAyhD,GAAA1hD,GACAJ,EAAAxK,KAAAssD,GAaA,OATAjmD,EAAAwE,MACAxE,EAAAuE,MAGAvE,EAAAwmD,MAAAtB,EAAAH,MArVA,SAAA5gD,EAAAghD,EAAA3gD,EAAAD,GACA,IAEA7D,EAAAqkD,EAFApoB,EAAA2lB,EAAA3lB,SAAA2lB,EAAA/9C,GAAAkiD,KAAAnE,EAAA99C,KAIA,IAAA9D,EAHA6iD,EAAAliD,OAGA,EAAmBX,GAAA6iD,EAAApgD,QAAAgiD,GAA6BzkD,IAEhD,GADAqkD,EAAAxB,EAAA7iD,GACAiiD,EAAAoC,GAAAlC,QAAAlmB,EAAA+pB,GAAA3B,IAAA5gD,EAAA9C,OACA,OAAA0jD,EAIA,OAAAxB,EAAA4B,EAAA5B,EAAApgD,QAAAgiD,GAAA,GAyUAwB,CAAAxiD,EAAA+gD,EAAAC,QAAAnlD,EAAAwE,IAAAxE,EAAAuE,KACAvE,EAAA4mD,WAAA9B,EAAA9kD,EAAAwmD,OACAxmD,EAAAqmD,OA3gBA,SAAAH,EAAA1hD,EAAAD,EAAAsiD,GACA,cAAAA,IAAAX,EAAA7kD,OACA,OACA,CAAIsjD,KAAAngD,EAAA82B,IAAA,GACJ,CAAIqpB,KAAApgD,EAAA+2B,IAAA,IAIJ,IAEA56B,EAAAC,EAAAyjD,EAAA0C,EAAAzoC,EAFAulC,EAAA,GACAlyC,EAAA,CAAAlN,GAGA,IAAA9D,EAAA,EAAAC,EAAAulD,EAAA7kD,OAAsCX,EAAAC,IAAUD,GAChDomD,EAAAZ,EAAAxlD,IACA8D,GAAAsiD,EAAAviD,GACAmN,EAAA/X,KAAAmtD,GAMA,IAFAp1C,EAAA/X,KAAA4K,GAEA7D,EAAA,EAAAC,EAAA+Q,EAAArQ,OAAiCX,EAAAC,IAAUD,EAC3C2d,EAAA3M,EAAAhR,EAAA,GACA0jD,EAAA1yC,EAAAhR,EAAA,GACAomD,EAAAp1C,EAAAhR,QAGAyE,IAAAi/C,QAAAj/C,IAAAkZ,GAAA1Z,KAAAO,OAAAmZ,EAAA+lC,GAAA,KAAA0C,GACAlD,EAAAjqD,KAAA,CAAegrD,KAAAmC,EAAAxrB,IAAA56B,GAAAC,EAAA,KAIf,OAAAijD,EA2eAmD,CAAA/mD,EAAAsmD,YAAAv2C,KAAAvL,EAAAD,EAAAlK,EAAAwsD,cACA7mD,EAAAgnD,SApQA,SAAApD,EAAAz/C,EAAAK,EAAAD,EAAAlK,GACA,IAEA4sD,EAAAC,EAFA3yC,EAAA,EACAF,EAAA,EAsBA,OAnBAha,EAAAoe,QAAAtU,EAAA9C,SACAhH,EAAAsqD,KAAAngD,MACAyiD,EAAA9iD,EAAA9C,OAAA,EAAA8C,EAAA,GAAAI,EACA2iD,EAAA/iD,EAAA,GACAoQ,GACA5S,EAAAiiD,EAAA,OAAAqD,EAAA,OACAtlD,EAAAiiD,EAAA,OAAAsD,EAAA,QACA,GAEA7sD,EAAAsqD,KAAApgD,MACA0iD,EAAA9iD,IAAA9C,OAAA,GACA6lD,EAAA/iD,EAAA9C,OAAA,EAAA8C,IAAA9C,OAAA,GAAAmD,EACA6P,GACA1S,EAAAiiD,EAAA,OAAAqD,EAAA,OACAtlD,EAAAiiD,EAAA,OAAAsD,EAAA,QACA,IAIA,CAAS3yC,OAAAF,SA4OT8yC,CAAAnnD,EAAAqmD,OAAAliD,EAAAK,EAAAD,EAAAlK,GAzOA,SAAAI,EAAA2sD,GACA,IACA1mD,EAAAC,EAAA6C,EAAAioC,EADAtnC,EAAA,GAGA,IAAAzD,EAAA,EAAAC,EAAAlG,EAAA4G,OAAkCX,EAAAC,IAAUD,EAC5C8C,EAAA/I,EAAAiG,GACA+qC,IAAA2b,GAAA5jD,KAAA8+C,EAAA9+C,GAAAohD,QAAAwC,GAEAjjD,EAAAxK,KAAA,CACA6J,QACAioC,UAIA,OAAAtnC,EA6NAkjD,CAAAljD,EAAAnE,EAAA4mD,aAGAxX,iBAAA,SAAAjpC,EAAAyL,GACA,IACA7B,EADAvb,KACAib,MAAAM,KACAm1C,EAFA1wD,KAEA6F,QAAAsqD,KACA3yC,EAAAjC,EAAAyuB,QAAAr4B,EAAA4J,EAAAyuB,OAAAn9B,OAAA0O,EAAAyuB,OAAAr4B,GAAA,GACA3C,EAAAuM,EAAAC,SAAA4B,GAAA7B,KAAA5J,GASA,OAPA7L,EAAA2M,SAAAzD,KACAwO,EAPAxd,KAOAy6C,cAAAzrC,IAEA0hD,EAAAoC,gBACAt1C,EAAAsyC,EAAAtyC,EAAAkzC,GAAAV,OAAAU,EAAAoC,gBAGAt1C,GAOAu1C,mBAAA,SAAA5b,EAAAxlC,EAAAhC,EAAAqjD,GACA,IACAntD,EADA7F,KACA6F,QACAsqD,EAAAhZ,EAAAkZ,UACA4C,EAAAptD,EAAAsqD,KAAA+C,eACAC,EAAAF,EAJAjzD,KAIAgyD,OACAY,EALA5yD,KAKAoyD,WACAgB,EAAAH,EAAAL,GACAS,EAAAlc,EAAAzrC,QAAA0kD,QAAAwC,GAAAvC,UACAiD,EAAAztD,EAAA8J,MAAAsnC,MACAA,EAAAqc,EAAApkB,SAAA0jB,GAAAQ,GAAAjD,IAAAkD,EACA71C,EAAA25B,EAAA6Y,OAAAgD,IAAA/b,EAAAmc,EAAAD,IACAha,EAAAlC,EAAAqc,EAAAztD,EAAA8J,MAAAqnC,MACAuc,EAAAztD,EAAAkL,eAAAmoC,EAAAj0C,SAAAi0C,EAAAC,cAEA,OAAAma,IAAA/1C,EAAA7L,EAAAhC,GAAA6N,GAGAk7B,qBAAA,SAAA/oC,GACA,IACAzD,EAAAC,EADA69B,EAAA,GAGA,IAAA99B,EAAA,EAAAC,EAAAwD,EAAA9C,OAAmCX,EAAAC,IAAUD,EAC7C89B,EAAA7kC,KAAAnF,KAAA+yD,mBAAAjF,EAAAn+C,EAAAzD,GAAA8C,OAAA9C,EAAAyD,IAGA,OAAAq6B,GAMAwpB,kBAAA,SAAArD,GACA,IAAA3kD,EAAAxL,KACAwjB,EAAAhY,EAAAomD,YAAApmD,EAAA1D,MAAA0D,EAAAzD,OACAiE,EAAAR,EAAAomD,YAAApmD,EAAAuU,KAAAvU,EAAAoU,IACAknB,EAAA35B,EAAA3B,EAAAqmD,OAAA,OAAA1B,EAAA,OAEA,OAAAnkD,EAAAwX,GAAAhY,EAAAgnD,SAAAzyC,KAAA+mB,IAAAt7B,EAAAgnD,SAAAzyC,KAAA,EAAAvU,EAAAgnD,SAAA3yC,QAGAg7B,iBAAA,SAAA7rC,EAAA2C,EAAAyL,GACA,IACA+yC,EAAA,KAUA,QARAx/C,IAAAgB,QAAAhB,IAAAyM,IACA+yC,EAJAnwD,KAIA8xD,YAAAt2C,SAAA4B,GAAAzL,IAGA,OAAAw+C,IACAA,EAAAF,EAAAjhD,EARAhP,OAWA,OAAAmwD,EACA,OAZAnwD,KAYAwzD,kBAAArD,IAIAva,gBAAA,SAAAjkC,GACA,IAAAhC,EAAA3P,KAAAy3C,WACA,OAAA9lC,GAAA,GAAAA,EAAAhC,EAAA9C,OACA7M,KAAAwzD,kBAAA7jD,EAAAgC,GAAA3C,OACA,MAGA8rC,iBAAA,SAAAC,GACA,IAAAvvC,EAAAxL,KACAwjB,EAAAhY,EAAAomD,YAAApmD,EAAA1D,MAAA0D,EAAAzD,OACAiE,EAAAR,EAAAomD,YAAApmD,EAAAuU,KAAAvU,EAAAoU,IACAknB,GAAAtjB,GAAAu3B,EAAA/uC,GAAAwX,EAAA,IAAAhY,EAAAgnD,SAAAzyC,KAAA,EAAAvU,EAAAgnD,SAAAzyC,MAAAvU,EAAAgnD,SAAA3yC,MACAswC,EAAAhjD,EAAA3B,EAAAqmD,OAAA,MAAA/qB,EAAA,QAEA,OAAAgnB,EAAAqC,IAOAsD,cAAA,SAAAj2C,GACA,IACAk2C,EADA1zD,KACA6F,QAAA8J,MACAgkD,EAFA3zD,KAEAyiB,IAAAmM,YAAApR,GAAA1V,MACAqhB,EAAArjB,EAAA4iB,UAAAgrC,EAAA/c,aACA4C,EAAAppC,KAAA8Q,IAAAkI,GACAyqC,EAAAzjD,KAAAiR,IAAA+H,GAGA,OAAAwqC,EAAApa,EAFAzzC,EAAAkL,eAAA0iD,EAAArc,SAAA5pC,EAAA2hB,OAAA7P,iBAEAq0C,GAMA7B,iBAAA,SAAA8B,GACA,IAAAroD,EAAAxL,KAEAgzD,EAAAxnD,EAAA3F,QAAAsqD,KAAA+C,eAAA9E,YAEA0F,EAAAtoD,EAAAunD,mBAAAjF,EAAA+F,GAAA,KAAAb,GACAW,EAAAnoD,EAAAioD,cAAAK,GACAC,EAAAvoD,EAAAmoC,eAAAnoC,EAAA1D,MAAA0D,EAAAzD,OAEA,OAAAoI,KAAAC,MAAA2jD,EAAAJ,MAIAnmD,EAAA2Z,aAAA+tB,kBAAA,OAAAqc,EA3VA,CACAvpD,SAAA,SASAqqD,aAAA,SASAhwB,OAAA,OAEA8tB,KAAA,CACAJ,QAAA,EACAC,QAAA,EACAO,MAAA,EACA7/C,OAAA,EACAsjD,eAAA,EACA/C,YAAA,EACAN,QAAA,cAGAuC,eAAA,CACA9E,YAAA,gBACAG,OAAA,YACAC,OAAA,SACAC,KAAA,KACAC,IAAA,QACAC,KAAA,KACAC,MAAA,WACAC,QAAA,cACAC,KAAA,SAGAn/C,MAAA,CACAknC,UAAA,EAUArjC,OAAA,OAEAyjC,MAAA,CACA/H,SAAA,0CC9cA,IAAAzhC,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,OACAgZ,MAAA,CACAE,KAAA,SAGAgsB,OAAA,CACAE,MAAA,EACA3+B,KAAA,WAGAynD,mBAAA,GACAC,cAAA,GAGAjwC,QAAA,EAGA4xB,UAAA,CACAH,iBAAA,KAIArK,MAAA,EACA7+B,KAAA,cAKAiB,EAAA1H,KAAA,iBACAgZ,MAAA,CACAE,KAAA,QACAxC,KAAA,KAGAwuB,OAAA,CACAE,MAAA,EACA3+B,KAAA,SACAxE,SAAA,WAGAqjC,MAAA,EACArjC,SAAA,OACAwE,KAAA,WAGAynD,mBAAA,GACAC,cAAA,GAGAjwC,QAAA,EAGA4xB,UAAA,CACAH,iBAAA,MAKAhoC,SAAA,CACA4zB,UAAA,CACAC,cAAA,SAIAmL,SAAA,CACAiT,UAAA,CACA99C,MAAA,SAAAwD,EAAAkW,GAEA,IAAA1Z,EAAA,GAUA,OARAwD,EAAAwH,OAAA,IACAxH,EAAA,GAAA+6C,OACAv+C,EAAAwD,EAAA,GAAA+6C,OACM7kC,EAAAyuB,OAAAn9B,OAAA,GAAAxH,EAAA,GAAAsM,MAAA4J,EAAAyuB,OAAAn9B,SACNhL,EAAA0Z,EAAAyuB,OAAA3kC,EAAA,GAAAsM,SAIA9P,GAGA2b,MAAA,SAAAnY,EAAAkW,GAEA,OADAA,EAAAC,SAAAnW,EAAA+X,cAAAI,OAAA,IACA,KAAAnY,EAAA06C,SAGA9gC,KAAA,QACAxC,KAAA,OAIAjb,EAAAC,QAAA,SAAA+L,GAEAA,EAAAu8B,YAAAjJ,IAAAtzB,EAAAqiC,kBAAA3kC,OAAA,CAEA6kC,gBAAAriC,EAAA2B,UAEAlE,WAAA,WACA,IACAkQ,EAEA7N,EAAAqiC,kBAAAvkC,UAAAH,WAAAC,MAHApL,KAGAqL,YAEAgQ,EALArb,KAKAkwC,WACA2Y,MANA7oD,KAMAmwC,aAAA0Y,MACAxtC,EAAAylB,KAAA,GAGAsJ,OAAA,SAAAkC,GACA,IAEApgC,EAAAC,EADAgoD,EADAn0D,KACAkwC,UAAA30B,KAKA,IANAvb,KAIAo0D,OAJAp0D,KAIAq0D,WAEAnoD,EAAA,EAAAC,EAAAgoD,EAAAtnD,OAAmCX,EAAAC,IAAUD,EAN7ClM,KAOA0wC,cAAAyjB,EAAAjoD,KAAAogC,IAIAoE,cAAA,SAAApP,EAAA3vB,EAAA26B,GACA,IAAA9gC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACAI,EAAA7P,EAAA0kC,UACA/yB,EAAA3R,EAAA2kC,aACAe,EAAA5P,EAAA4P,QAAA,GACAojB,EAAAr5C,EAAApV,QAAA6H,SAAA4zB,UAEAA,EAAAuiB,QAAAr4C,EAAA4kC,cAAA/0B,EAAA8yB,SACA7M,EAAAwiB,QAAAt4C,EAAA4kC,cAAA/0B,EAAA+yB,SACA9M,EAAA7jB,cAAAjS,EAAAmG,MACA2vB,EAAAjkB,OAAA1L,EAEA2vB,EAAA31B,OAAA,CACA4oD,aAAAp3C,EAAAK,MACAA,MAAAvC,EAAAM,KAAAyuB,OAAAr4B,GACA4vB,cAAA2P,EAAA3P,cAAA2P,EAAA3P,cAAA+yB,EAAA/yB,cACA1D,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA/3B,EAAA6M,sBAAAwK,EAAA0gB,gBAAAlsB,EAAA2iD,EAAAz2B,iBACAC,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAAh4B,EAAA6M,sBAAAwK,EAAA2gB,YAAAnsB,EAAA2iD,EAAAx2B,aACAC,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAAj4B,EAAA6M,sBAAAwK,EAAA4gB,YAAApsB,EAAA2iD,EAAAv2B,cAGAvyB,EAAAgpD,sBAAAlzB,EAAA3vB,EAAA26B,GAEAhL,EAAA/1B,SAMAipD,sBAAA,SAAAlzB,EAAA3vB,EAAA26B,GACA,IAAA9gC,EAAAxL,KACA+L,EAAAu1B,EAAA31B,OACA8oD,EAAAjpD,EAAAkpD,gBACAtzB,EAAAqzB,EAAApZ,eACA3Z,EAAA+yB,EAAA9gB,eACAghB,EAAAnpD,EAAA4oD,QAAA5oD,EAAA6oD,WACAO,EAAAppD,EAAAqpD,wBAAArpD,EAAAmG,SACAmjD,EAAAtpD,EAAAupD,wBAAAvpD,EAAAmG,QAAAgjD,GAEA5oD,EAAA21B,aACA31B,EAAAq1B,KAAAkL,EAAAlL,EAAAwzB,EAAAxzB,KACAr1B,EAAApE,EAAA+5B,EAAA4K,EAAAlL,EAAAwzB,EAAAI,KAAAF,EAAAz4C,OACAtQ,EAAAnE,EAAA85B,EAAAozB,EAAAz4C,OAAAiwB,EAAAlL,EAAAwzB,EAAAI,KACAjpD,EAAAhE,OAAA25B,EAAAozB,EAAAtxC,UAAA7S,EACA5E,EAAAjE,MAAA45B,OAAA/wB,EAAAmkD,EAAAtxC,MAMAyxC,gBAAA,WACA,OAAAj1D,KAAAkwC,UAAA9B,SAMA8mB,gBAAA,WACA,OAAAl1D,KAAAkwC,UAAA/B,SAMAumB,cAAA,WACA,OAAA10D,KAAAowC,cAAApwC,KAAAi1D,oBAMAE,cAAA,WACA,OAAAn1D,KAAAowC,cAAApwC,KAAAk1D,oBAOAE,cAAA,SAAAhE,GACA,IAMAllD,EAAAmP,EALAJ,EADAjb,KACAib,MAEA2tC,EAHA5oD,KAEAm1D,gBACAtvD,QAAA+iD,QACAz8C,OAAAwE,IAAAygD,EAAAn2C,EAAAM,KAAAC,SAAA3O,OAAAukD,EAAA,EACAiE,EAAA,GAGA,IAAAnpD,EAAA,EAAcA,EAAAC,IAAUD,GACxBmP,EAAAJ,EAAAS,eAAAxP,IACA40B,KAAA7lB,EAAAQ,iBAAAvP,MACA,IAAA08C,IACA,IAAAA,IAAA,IAAAyM,EAAA1mD,QAAA0M,EAAAwtC,aACAl4C,IAAAi4C,SAAAj4C,IAAA0K,EAAAwtC,QAAA,IAAAwM,EAAA1mD,QAAA0M,EAAAwtC,UACAwM,EAAAlwD,KAAAkW,EAAAwtC,OAIA,OAAAwM,EAAAxoD,QAOAyoD,cAAA,SAAAl4C,GACA,OAAApd,KAAAo1D,cAAAh4C,GAAA,GAMAi3C,SAAA,WACA,IAQAnoD,EAAAC,EAPAkb,EADArnB,KACAm1D,gBACAI,EAFAv1D,KAEAo1D,gBACAh4C,EAHApd,KAGA2R,MACA6jD,EAAA,GACA7hB,EAAAtsB,EAAAssB,eACA3nC,EAAA2nC,EAAAtsB,EAAAtH,KAAAsH,EAAAzH,IACA4nC,EAAAx7C,GAAA2nC,EAAAtsB,EAAAvf,MAAAuf,EAAAtf,QAGA,IAAAmE,EAAA,EAAAC,EAVAnM,KAUAkwC,UAAA30B,KAAA1O,OAA+CX,EAAAC,IAAUD,EACzDspD,EAAArwD,KAAAkiB,EAAAwzB,iBAAA,KAAA3uC,EAAAkR,IAGA,OACAo4C,SACAxpD,QACAw7C,MACA+N,aACAluC,UAQAwtC,wBAAA,SAAAz3C,EAAAzL,GACA,IASAzF,EAAAupD,EAAAC,EAAAt0B,EAAA4zB,EAAAxxC,EARAvI,EADAjb,KACAib,MACAI,EAFArb,KAEAkwC,UACA7oB,EAHArnB,KAGA00D,gBACAl5C,EAAAP,EAAAM,KAAAC,SACAxM,EAAAqY,EAAAozB,cAAAj/B,EAAA4B,GAAA7B,KAAA5J,IACAi3C,EAAAvhC,EAAAxhB,QAAA+iD,QACAC,EAAAxtC,EAAAwtC,MACA78C,EAAA,EAGA,GAAA48C,QAAAj4C,IAAAi4C,QAAAj4C,IAAAk4C,EACA,IAAA38C,EAAA,EAAeA,EAAAkR,IAAkBlR,GACjCupD,EAAAx6C,EAAAS,eAAAxP,IAEA40B,KACA20B,EAAA5M,WACA4M,EAAAtrB,WAAA8qB,oBAAA5tC,EAAA3nB,IACAub,EAAAQ,iBAAAvP,KAEAwpD,EAAAruC,EAAAozB,cAAAj/B,EAAAtP,GAAAqP,KAAA5J,KACA3C,EAAA,GAAA0mD,EAAA,GAAA1mD,GAAA,GAAA0mD,EAAA,KACA1pD,GAAA0pD,IAUA,OAJAt0B,EAAA/Z,EAAAwzB,iBAAA7uC,GAIA,CACAwX,KAHAA,IADAwxC,EAAA3tC,EAAAwzB,iBAAA7uC,EAAAgD,IACAoyB,GAAA,EAIAA,OACA4zB,OACA34C,OAAA24C,EAAAxxC,EAAA,IAOAuxC,wBAAA,SAAA33C,EAAAzL,EAAAgjD,GACA,IAQAgB,EAAAC,EAAAC,EAAAC,EAAAtyC,EAPA3d,EAAA8uD,EAAAttC,MAAAxhB,QACAkwD,EAFA/1D,KAEAs1D,cAAAl4C,GACAo4C,EAAAb,EAAAa,OACAp0B,EAAAo0B,EAAA7jD,GACA9E,EAAA2oD,EAAA3oD,OACAb,EAAA2oD,EAAA3oD,MACAw7C,EAAAmN,EAAAnN,IAkCA,OA/BA,IAAA36C,GACA8oD,EAAAv0B,EAAAp1B,EAAAo1B,EAAAp1B,EAAAw7C,EAAApmB,EACAw0B,EAAAx0B,EAAAomB,IAAApmB,IAAAp1B,IAEA2F,EAAA,IACAgkD,GAAAv0B,EAAAo0B,EAAA7jD,EAAA,MACAA,IAAA9E,EAAA,IACA+oD,EAAAD,IAGAhkD,EAAA9E,EAAA,IACA+oD,GAAAJ,EAAA7jD,EAAA,GAAAyvB,GAAA,EACA,IAAAzvB,IACAgkD,EAAAC,KAQApyC,GADAsyC,IAFAD,EAAAF,EAAA9vD,EAAAouD,oBACA2B,EAAA/vD,EAAAouD,oBACAU,EAAAY,YACA1vD,EAAAquD,cAMA9yB,GAAAy0B,EACAz0B,GAAA00B,EAAAC,EAGA,CACAvyC,KATAA,EAAArT,KAAAH,IACAlK,EAAAkL,eAAAnL,EAAAmwD,aAAAxyC,GACA1d,EAAAkL,eAAAnL,EAAAowD,gBAAAC,MAQA90B,KAJAA,IAAA00B,EAAAtyC,GAAA,EAKAwxC,KAAA5zB,EAAA5d,EACAnH,OAAA+kB,EAAA5d,EAAA,IAIAwb,KAAA,WACA,IACA/jB,EADAjb,KACAib,MACAoM,EAFArnB,KAEA00D,gBACAP,EAHAn0D,KAGAkwC,UAAA30B,KACA4B,EAJAnd,KAIAmwC,aACAhkC,EAAAgoD,EAAAtnD,OACAX,EAAA,EAIA,IAFApG,EAAAF,OAAA2e,SAAAtJ,EAAAwH,IAAAxH,EAAA2lB,WAES10B,EAAAC,IAAUD,EACnBuX,MAAA4D,EAAAozB,cAAAt9B,EAAA5B,KAAArP,MACAioD,EAAAjoD,GAAA8yB,OAIAl5B,EAAAF,OAAA+e,WAAA1J,EAAAwH,MAGA0uB,cAAA,SAAA7P,GACA,IAAAnkB,EAAAnd,KAAAib,MAAAM,KAAAC,SAAA8lB,EAAA7jB,eACA9L,EAAA2vB,EAAAjkB,OACA6zB,EAAA5P,EAAA4P,QAAA,GACAnlC,EAAAu1B,EAAA31B,OAEAI,EAAA8xB,gBAAAqT,EAAAE,qBAAAF,EAAAE,qBAAAtrC,EAAA6M,sBAAAwK,EAAAi0B,qBAAAz/B,EAAA7L,EAAAupB,cAAAtjB,EAAA8xB,kBACA9xB,EAAA+xB,YAAAoT,EAAAG,iBAAAH,EAAAG,iBAAAvrC,EAAA6M,sBAAAwK,EAAAk0B,iBAAA1/B,EAAA7L,EAAAupB,cAAAtjB,EAAA+xB,cACA/xB,EAAAgyB,YAAAmT,EAAAvQ,iBAAAuQ,EAAAvQ,iBAAA76B,EAAA6M,sBAAAwK,EAAAwjB,iBAAAhvB,EAAA5F,EAAAgyB,cAGAiT,iBAAA,SAAA1P,GACA,IAAAnkB,EAAAnd,KAAAib,MAAAM,KAAAC,SAAA8lB,EAAA7jB,eACA9L,EAAA2vB,EAAAjkB,OACA6zB,EAAA5P,EAAA4P,QAAA,GACAnlC,EAAAu1B,EAAA31B,OACAwqD,EAAAn2D,KAAAib,MAAApV,QAAA6H,SAAA4zB,UAEAv1B,EAAA8xB,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA/3B,EAAA6M,sBAAAwK,EAAA0gB,gBAAAlsB,EAAAwkD,EAAAt4B,iBACA9xB,EAAA+xB,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAAh4B,EAAA6M,sBAAAwK,EAAA2gB,YAAAnsB,EAAAwkD,EAAAr4B,aACA/xB,EAAAgyB,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAAj4B,EAAA6M,sBAAAwK,EAAA4gB,YAAApsB,EAAAwkD,EAAAp4B,gBAIAvwB,EAAAu8B,YAAAqsB,cAAA5oD,EAAAu8B,YAAAjJ,IAAA51B,OAAA,CAIA+pD,gBAAA,WACA,OAAAj1D,KAAAkwC,UAAA/B,SAMA+mB,gBAAA,WACA,OAAAl1D,KAAAkwC,UAAA9B,+CC/ZA,IAAA3gC,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACAgZ,MAAA,CACAE,KAAA,UAGAgsB,OAAA,CACAE,MAAA,EACA3+B,KAAA,SACAxE,SAAA,SACAtI,GAAA,aAEA2rC,MAAA,EACA7+B,KAAA,SACAxE,SAAA,OACAtI,GAAA,cAIAgtC,SAAA,CACAiT,UAAA,CACA99C,MAAA,WAEA,UAEA2b,MAAA,SAAAnY,EAAAkW,GACA,IAAAg5C,EAAAh5C,EAAAC,SAAAnW,EAAA+X,cAAAI,OAAA,GACA64C,EAAA96C,EAAAC,SAAAnW,EAAA+X,cAAA7B,KAAAlW,EAAAsM,OACA,OAAA4iD,EAAA,MAAAlvD,EAAA06C,OAAA,KAAA16C,EAAA+6C,OAAA,KAAAiW,EAAAzgD,EAAA,SAOApU,EAAAC,QAAA,SAAA+L,GAEAA,EAAAu8B,YAAAusB,OAAA9oD,EAAAqiC,kBAAA3kC,OAAA,CAIA6kC,gBAAAriC,EAAA0B,MAKAg7B,OAAA,SAAAkC,GACA,IAAA9gC,EAAAxL,KAEAqqB,EADA7e,EAAA0kC,UACA30B,KAGAzV,EAAAiN,KAAAsX,EAAA,SAAArjB,EAAA2K,GACAnG,EAAAklC,cAAA1pC,EAAA2K,EAAA26B,MAOAoE,cAAA,SAAA1pC,EAAA2K,EAAA26B,GACA,IAAA9gC,EAAAxL,KACAqb,EAAA7P,EAAA0kC,UACAgB,EAAAlqC,EAAAkqC,QAAA,GACA8R,EAAAx3C,EAAA4kC,cAAA/0B,EAAA8yB,SACA8U,EAAAz3C,EAAA4kC,cAAA/0B,EAAA+yB,SACAvoC,EAAA2F,EAAA+qD,uBAAAvvD,EAAA2K,GACA4J,EAAA/P,EAAA2kC,aAAA50B,KAAA5J,GACA6kD,EAAAhrD,EAAAmG,MAEAhK,EAAA2kC,EAAA0W,EAAA9H,mBAAA,IAAA8H,EAAAnI,iBAAA,iBAAAt/B,IAAAo/B,IAAAhpC,EAAA6kD,GACA5uD,EAAA0kC,EAAA2W,EAAA5H,eAAA4H,EAAApI,iBAAAt/B,EAAA5J,EAAA6kD,GAEAxvD,EAAA68C,QAAAb,EACAh8C,EAAA88C,QAAAb,EACAj8C,EAAAylC,SAAA5mC,EACAmB,EAAAyW,cAAA+4C,EACAxvD,EAAAqW,OAAA1L,EACA3K,EAAA2E,OAAA,CACAkyB,gBAAAh4B,EAAAg4B,gBACAC,YAAAj4B,EAAAi4B,YACAC,YAAAl4B,EAAAk4B,YACA0C,UAAA56B,EAAA46B,UACAC,WAAA76B,EAAA66B,WACA9d,OAAA0pB,EAAA,EAAAzmC,EAAA+c,OACAjH,KAAAu1B,EAAAv1B,MAAA8H,MAAA9b,IAAA8b,MAAA7b,GACAD,IACAC,KAGAZ,EAAAuE,SAMA4lC,cAAA,SAAAnqC,GACA,IAAA+E,EAAA/E,EAAA2E,OACA9F,EAAAmB,EAAAylC,SAEA1gC,EAAA8xB,gBAAA/3B,EAAAkL,eAAAnL,EAAAurC,qBAAAtrC,EAAAupB,cAAAxpB,EAAAg4B,kBACA9xB,EAAA+xB,YAAAh4B,EAAAkL,eAAAnL,EAAAwrC,iBAAAvrC,EAAAupB,cAAAxpB,EAAAi4B,cACA/xB,EAAAgyB,YAAAj4B,EAAAkL,eAAAnL,EAAA86B,iBAAA96B,EAAAk4B,aACAhyB,EAAA6W,OAAA/c,EAAA+c,OAAA/c,EAAAq4B,aAMA8S,iBAAA,SAAAhqC,GACA,IAAA+E,EAAA/E,EAAA2E,OACA9F,EAAAmB,EAAAylC,SAEA1gC,EAAA8xB,gBAAAh4B,EAAAg4B,gBACA9xB,EAAA+xB,YAAAj4B,EAAAi4B,YACA/xB,EAAAgyB,YAAAl4B,EAAAk4B,YACAhyB,EAAA6W,OAAA/c,EAAA+c,QAMA2zC,uBAAA,SAAAvvD,EAAA2K,GACA,IASAzF,EAAAC,EAAAC,EARA6O,EADAjb,KACAib,MAEAkC,EADAlC,EAAAM,KAAAC,SAFAxb,KAGA2R,OACAu/B,EAAAlqC,EAAAkqC,QAAA,GACArrC,EAAAoV,EAAApV,QAAA6H,SAAA1G,MACA2e,EAAA7f,EAAAD,QAAA8f,QACApK,EAAA4B,EAAA5B,KAAA5J,GACA1L,EAAA,GAIA7F,EAAA,CACA6a,QACAw7C,UAAA9kD,EACAwL,UACAC,aAhBApd,KAgBA2R,OAGAhF,EAAA,CACA,kBACA,cACA,cACA,uBACA,mBACA,mBACA,cACA,YACA,cAGA,IAAAT,EAAA,EAAAC,EAAAQ,EAAAE,OAAkCX,EAAAC,IAAUD,EAE5CjG,EADAmG,EAAAO,EAAAT,IACAyZ,EAAA,CACAurB,EAAA9kC,GACA+Q,EAAA/Q,GACAvG,EAAAuG,IACAhM,EAAAuR,GAWA,OAPA1L,EAAA2c,OAAA+C,EAAA,CACAurB,EAAAtuB,OACArH,IAAA3F,OAAAjF,EACAwM,EAAAyF,OACA/c,EAAA+c,QACAxiB,EAAAuR,GAEA1L,yCC9KA,IAAAwH,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,YACAmiC,UAAA,CAEAwuB,eAAA,EAEAC,cAAA,GAEA53C,MAAA,CACAE,KAAA,UAEAsvB,eAAA,SAAAtzB,GACA,IAAAwvC,EAAA,GACAA,EAAAtlD,KAAA,cAAA8V,EAAAvb,GAAA,aAEA,IAAA6b,EAAAN,EAAAM,KACAC,EAAAD,EAAAC,SACAwuB,EAAAzuB,EAAAyuB,OAEA,GAAAxuB,EAAA3O,OACA,QAAAX,EAAA,EAAkBA,EAAAsP,EAAA,GAAAD,KAAA1O,SAA6BX,EAC/Cu+C,EAAAtlD,KAAA,qCAAAqW,EAAA,GAAAqiB,gBAAA3xB,GAAA,aACA89B,EAAA99B,IACAu+C,EAAAtlD,KAAA6kC,EAAA99B,IAEAu+C,EAAAtlD,KAAA,SAKA,OADAslD,EAAAtlD,KAAA,SACAslD,EAAA1B,KAAA,KAEA6N,OAAA,CACA5sB,OAAA,CACA6sB,eAAA,SAAA57C,GACA,IAAAM,EAAAN,EAAAM,KACA,OAAAA,EAAAyuB,OAAAn9B,QAAA0O,EAAAC,SAAA3O,OACA0O,EAAAyuB,OAAAv2B,IAAA,SAAA+J,EAAAtR,GACA,IAAAmP,EAAAJ,EAAAS,eAAA,GACAo7C,EAAAv7C,EAAAC,SAAA,GACAmI,EAAAtI,EAAAE,KAAArP,GACAglC,EAAAvtB,KAAAutB,QAAA,GACAv+B,EAAA7M,EAAA6M,sBACAokD,EAAA97C,EAAApV,QAAA6H,SAAAiW,IAKA,OACA8mC,KAAAjtC,EACA8hB,UANA4R,EAAArT,gBAAAqT,EAAArT,gBAAAlrB,EAAAmkD,EAAAj5B,gBAAA3xB,EAAA6qD,EAAAl5B,iBAOAuB,YANA8R,EAAApT,YAAAoT,EAAApT,YAAAnrB,EAAAmkD,EAAAh5B,YAAA5xB,EAAA6qD,EAAAj5B,aAOAuB,UANA6R,EAAAnT,YAAAmT,EAAAnT,YAAAprB,EAAAmkD,EAAA/4B,YAAA7xB,EAAA6qD,EAAAh5B,aAOAz+B,OAAAmkB,MAAAqzC,EAAAv7C,KAAArP,KAAAmP,EAAAE,KAAArP,GAAA5M,OAGAqS,MAAAzF,KAIA,KAIAiT,QAAA,SAAAnE,EAAAg8C,GACA,IAEA9qD,EAAAC,EAAAkP,EAFA1J,EAAAqlD,EAAArlD,MACAsJ,EAAAjb,KAAAib,MAGA,IAAA/O,EAAA,EAAAC,GAAA8O,EAAAM,KAAAC,UAAA,IAAA3O,OAAyDX,EAAAC,IAAUD,GACnEmP,EAAAJ,EAAAS,eAAAxP,IAEAqP,KAAA5J,KACA0J,EAAAE,KAAA5J,GAAArS,QAAA+b,EAAAE,KAAA5J,GAAArS,QAIA2b,EAAAmvB,WAKA6sB,iBAAA,GAGAjZ,UAAA,GAAA7tC,KAAA+Q,GAGAg2C,cAAA,EAAA/mD,KAAA+Q,GAGAwrB,SAAA,CACAiT,UAAA,CACA99C,MAAA,WACA,UAEA2b,MAAA,SAAA2iC,EAAA5kC,GACA,IAAA47C,EAAA57C,EAAAyuB,OAAAmW,EAAAxuC,OACA3C,EAAA,KAAAuM,EAAAC,SAAA2kC,EAAA/iC,cAAA7B,KAAA4kC,EAAAxuC,OAWA,OATA7L,EAAA2L,QAAA0lD,IAGAA,IAAAh9C,SACA,IAAAnL,EAEAmoD,GAAAnoD,EAGAmoD,OAMA1pD,EAAA1H,KAAA,MAAAD,EAAA4F,MAAA+B,EAAA2pD,WACA3pD,EAAA1H,KAAA,OACAkxD,iBAAA,IAGAz1D,EAAAC,QAAA,SAAA+L,GAEAA,EAAAu8B,YAAAqtB,SAAA5pD,EAAAu8B,YAAAstB,IAAA7pD,EAAAqiC,kBAAA3kC,OAAA,CAEA6kC,gBAAAriC,EAAAwB,IAEA8gC,WAAAlqC,EAAAsM,KAGAklD,aAAA,SAAAl6C,GAGA,IAFA,IAAAm6C,EAAA,EAEA3mD,EAAA,EAAkBA,EAAAwM,IAAkBxM,EACpC5Q,KAAAib,MAAAQ,iBAAA7K,MACA2mD,EAIA,OAAAA,GAGAntB,OAAA,SAAAkC,GACA,IAAA9gC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACA2lB,EAAA3lB,EAAA2lB,UACAmH,EAAA9sB,EAAApV,QACAkxD,EAAAhvB,EAAAr6B,SAAAiW,IACA6zC,EAAA52B,EAAA/gB,MAAA+gB,EAAA7gB,KAAAg3C,EAAAh5B,YACA05B,EAAA72B,EAAA9gB,OAAA8gB,EAAAhhB,IAAAm3C,EAAAh5B,YACA2V,EAAAvjC,KAAAH,IAAAwnD,EAAAC,GACAxzC,EAAA,CAAiBtc,EAAA,EAAAC,EAAA,GACjByT,EAAA7P,EAAA0kC,UACA+mB,EAAAlvB,EAAAkvB,iBACAC,EAAAnvB,EAAAmvB,cAGA,GAAAA,EAAA,EAAA/mD,KAAA+Q,GAAA,CACA,IAAAod,EAAAyJ,EAAAiW,UAAA,EAAA7tC,KAAA+Q,IAEAqd,GADAD,GAAA,EAAAnuB,KAAA+Q,IAAAod,GAAAnuB,KAAA+Q,IAAA,EAAAod,GAAAnuB,KAAA+Q,GAAA,MACAg2C,EACAlrD,EAAA,CAAiBrE,EAAAwI,KAAA8Q,IAAAqd,GAAA12B,EAAAuI,KAAAiR,IAAAkd,IACjBkpB,EAAA,CAAe7/C,EAAAwI,KAAA8Q,IAAAsd,GAAA32B,EAAAuI,KAAAiR,IAAAmd,IACfm5B,EAAAp5B,GAAA,GAAAC,GAAA,GAAAD,GAAA,EAAAnuB,KAAA+Q,IAAA,EAAA/Q,KAAA+Q,IAAAqd,EACAo5B,EAAAr5B,GAAA,GAAAnuB,KAAA+Q,IAAA,GAAA/Q,KAAA+Q,IAAAqd,GAAAD,GAAA,IAAAnuB,KAAA+Q,IAAA,IAAA/Q,KAAA+Q,IAAAqd,EACAq5B,EAAAt5B,IAAAnuB,KAAA+Q,KAAA/Q,KAAA+Q,IAAAqd,GAAAD,GAAAnuB,KAAA+Q,IAAA/Q,KAAA+Q,IAAAqd,EACAs5B,EAAAv5B,GAAA,IAAAnuB,KAAA+Q,IAAA,IAAA/Q,KAAA+Q,IAAAqd,GAAAD,GAAA,IAAAnuB,KAAA+Q,IAAA,IAAA/Q,KAAA+Q,IAAAqd,EACAu5B,EAAAb,EAAA,IACAjnD,EAAA,CAAerI,EAAAiwD,GAAA,EAAAznD,KAAAH,IAAAhE,EAAArE,GAAAqE,EAAArE,EAAA,IAAAmwD,GAAAtQ,EAAA7/C,GAAA6/C,EAAA7/C,EAAA,IAAAmwD,IAAAlwD,EAAAiwD,GAAA,EAAA1nD,KAAAH,IAAAhE,EAAApE,GAAAoE,EAAApE,EAAA,IAAAkwD,GAAAtQ,EAAA5/C,GAAA4/C,EAAA5/C,EAAA,IAAAkwD,KACf/nD,EAAA,CAAepI,EAAA+vD,EAAA,EAAAvnD,KAAAJ,IAAA/D,EAAArE,GAAAqE,EAAArE,EAAA,IAAAmwD,GAAAtQ,EAAA7/C,GAAA6/C,EAAA7/C,EAAA,IAAAmwD,IAAAlwD,EAAA+vD,EAAA,EAAAxnD,KAAAJ,IAAA/D,EAAApE,GAAAoE,EAAApE,EAAA,IAAAkwD,GAAAtQ,EAAA5/C,GAAA4/C,EAAA5/C,EAAA,IAAAkwD,KACft0C,EAAA,CAAgB1b,MAAA,IAAAiI,EAAApI,EAAAqI,EAAArI,GAAAI,OAAA,IAAAgI,EAAAnI,EAAAoI,EAAApI,IAChB8rC,EAAAvjC,KAAAH,IAAAwnD,EAAAh0C,EAAA1b,MAAA2vD,EAAAj0C,EAAAzb,QACAkc,EAAA,CAActc,GAAA,IAAAoI,EAAApI,EAAAqI,EAAArI,GAAAC,GAAA,IAAAmI,EAAAnI,EAAAoI,EAAApI,IAGdqT,EAAA8iB,YAAAvyB,EAAAusD,kBAAA18C,EAAAE,MACAN,EAAA0jB,YAAAxuB,KAAAJ,KAAA2jC,EAAAz4B,EAAA8iB,aAAA,KACA9iB,EAAAyjB,YAAAvuB,KAAAJ,IAAAknD,EAAAh8C,EAAA0jB,YAAA,WACA1jB,EAAA+8C,cAAA/8C,EAAA0jB,YAAA1jB,EAAAyjB,aAAAzjB,EAAAozB,yBACApzB,EAAAg9C,QAAAh0C,EAAAtc,EAAAsT,EAAA0jB,YACA1jB,EAAAi9C,QAAAj0C,EAAArc,EAAAqT,EAAA0jB,YAEAtjB,EAAA88C,MAAA3sD,EAAA4sD,iBAEA5sD,EAAAmzB,YAAA1jB,EAAA0jB,YAAA1jB,EAAA+8C,aAAAxsD,EAAA8rD,aAAA9rD,EAAAmG,OACAnG,EAAAkzB,YAAAvuB,KAAAJ,IAAAvE,EAAAmzB,YAAA1jB,EAAA+8C,aAAA,GAEAlyD,EAAAiN,KAAAsI,EAAAE,KAAA,SAAAoI,EAAAhS,GACAnG,EAAAklC,cAAA/sB,EAAAhS,EAAA26B,MAIAoE,cAAA,SAAA/sB,EAAAhS,EAAA26B,GACA,IAAA9gC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACA2lB,EAAA3lB,EAAA2lB,UACAmH,EAAA9sB,EAAApV,QACAwyD,EAAAtwB,EAAAG,UACAowB,GAAA13B,EAAA7gB,KAAA6gB,EAAA/gB,OAAA,EACA04C,GAAA33B,EAAAhhB,IAAAghB,EAAA9gB,QAAA,EACAwe,EAAAyJ,EAAAiW,SACAzf,EAAAwJ,EAAAiW,SACA7gC,EAAA3R,EAAA2kC,aACA+mB,EAAA5qB,GAAA+rB,EAAA3B,cAAA,EAAA/yC,EAAArkB,OAAA,EAAAkM,EAAAgtD,uBAAAr7C,EAAA5B,KAAA5J,KAAAo2B,EAAAmvB,eAAA,EAAA/mD,KAAA+Q,KACAwd,EAAA4N,GAAA+rB,EAAA1B,aAAA,EAAAnrD,EAAAkzB,YACAC,EAAA2N,GAAA+rB,EAAA1B,aAAA,EAAAnrD,EAAAmzB,YACAhsB,EAAA7M,EAAA6M,sBAEA7M,EAAAoF,OAAAyY,EAAA,CAEAlG,cAAAjS,EAAAmG,MACA0L,OAAA1L,EAGAhG,OAAA,CACAhE,EAAA2wD,EAAAr9C,EAAAg9C,QACArwD,EAAA2wD,EAAAt9C,EAAAi9C,QACA55B,aACAC,WACA24B,gBACAv4B,cACAD,cACAlhB,MAAA7K,EAAAwK,EAAAK,MAAA7L,EAAAsJ,EAAAM,KAAAyuB,OAAAr4B,OAIA,IAAA5F,EAAA4X,EAAAhY,OAEA3L,KAAAgxC,iBAAArtB,GAGA2oB,GAAA+rB,EAAA3B,gBAEA3qD,EAAAuyB,WADA,IAAA3sB,EACAo2B,EAAAiW,SAEAxyC,EAAA0kC,UAAA30B,KAAA5J,EAAA,GAAAhG,OAAA4yB,SAGAxyB,EAAAwyB,SAAAxyB,EAAAuyB,WAAAvyB,EAAAmrD,eAGAvzC,EAAApY,SAGAylC,iBAAA,SAAArtB,GACAnW,EAAAqiC,kBAAAvkC,UAAA0lC,iBAAAjiC,KAAA/O,KAAA2jB,EAAA3jB,KAAAib,MAAApV,QAAA6H,SAAAiW,MAGAy0C,eAAA,WACA,IAGAppD,EAHAmO,EAAAnd,KAAAmwC,aACA90B,EAAArb,KAAAkwC,UACAioB,EAAA,EAcA,OAXAryD,EAAAiN,KAAAsI,EAAAE,KAAA,SAAAvZ,EAAA2P,GACA3C,EAAAmO,EAAA5B,KAAA5J,GACA8R,MAAAzU,IAAAhN,EAAA1C,SACA64D,GAAAhoD,KAAA0B,IAAA7C,MAQAmpD,GAGAK,uBAAA,SAAAxpD,GACA,IAAAmpD,EAAAn4D,KAAAkwC,UAAAioB,MACA,OAAAA,EAAA,IAAA10C,MAAAzU,GACA,EAAAmB,KAAA+Q,IAAAlS,EAAAmpD,GAEA,GAIAJ,kBAAA,SAAAU,GAOA,IANA,IAGA16B,EACA26B,EAJA3oD,EAAA,EACA4B,EAAA3R,KAAA2R,MACA9E,EAAA4rD,EAAA5rD,OAIAX,EAAA,EAAkBA,EAAAW,EAAYX,IAC9B6xB,EAAA06B,EAAAvsD,GAAAP,OAAA8sD,EAAAvsD,GAAAP,OAAAoyB,YAAA,EAIAhuB,GAHA2oD,EAAAD,EAAAvsD,GAAA+yB,OAAAw5B,EAAAvsD,GAAA+yB,OAAAjf,OAAAzE,KAAAC,SAAA7J,GAAAgvB,iBAAA,IAEA5wB,EAAAguB,EAAAhuB,EAAAguB,EAAAhuB,GACA2oD,EAAA3oD,EAEA,OAAAA,yCCrSA,IAAAtC,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,QACA0Z,WAAA,EACAugB,UAAA,EAEAjhB,MAAA,CACAE,KAAA,SAGAgsB,OAAA,CACAE,MAAA,EACA3+B,KAAA,WACA9M,GAAA,aAEA2rC,MAAA,EACA7+B,KAAA,SACA9M,GAAA,gBAKA8B,EAAAC,QAAA,SAAA+L,GAEA,SAAAmrD,EAAAx7C,EAAAtX,GACA,OAAAC,EAAAkL,eAAAmM,EAAAy7C,SAAA/yD,EAAA4Z,WAGAjS,EAAAu8B,YAAAtK,KAAAjyB,EAAAqiC,kBAAA3kC,OAAA,CAEA4kC,mBAAApiC,EAAAyB,KAEA4gC,gBAAAriC,EAAA0B,MAEAg7B,OAAA,SAAAkC,GACA,IAOApgC,EAAAC,EAAA+kC,EAPA1lC,EAAAxL,KACAqb,EAAA7P,EAAA0kC,UACAzQ,EAAApkB,EAAA8B,QACAkN,EAAAhP,EAAAE,MAAA,GACA1V,EAAA2F,EAAAyP,MAAApV,QACAgzD,EAAAhzD,EAAA6H,SAAA+xB,KACApY,EAAA7b,EAAA4kC,cAAA/0B,EAAA+yB,SAEAjxB,EAAA3R,EAAA2kC,aACAyoB,EAAAD,EAAAx7C,EAAAtX,GAwCA,IArCA+yD,IACA1nB,EAAAzR,EAAAyR,QAAA,QAGAvgC,IAAAwM,EAAA6H,cAAArU,IAAAwM,EAAA27C,cACA37C,EAAA27C,YAAA37C,EAAA6H,SAIAya,EAAAskB,OAAA18B,EACAoY,EAAAhiB,cAAAjS,EAAAmG,MAEA8tB,EAAAQ,UAAA5V,EAEAoV,EAAA9zB,OAAA,CAKAq0B,SAAA7iB,EAAA6iB,SAAA7iB,EAAA6iB,SAAAn6B,EAAAm6B,SACAhb,QAAAksB,EAAAlsB,QAAAksB,EAAAlsB,QAAAlf,EAAAkL,eAAAmM,EAAA27C,YAAAD,EAAA7zC,SACA6Y,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA1gB,EAAA0gB,iBAAAg7B,EAAAh7B,gBACAE,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAA5gB,EAAA4gB,aAAA86B,EAAA96B,YACAD,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAA3gB,EAAA2gB,aAAA+6B,EAAA/6B,YACA4B,eAAAwR,EAAAxR,eAAAwR,EAAAxR,eAAAviB,EAAAuiB,gBAAAm5B,EAAAn5B,eACAC,WAAAuR,EAAAvR,WAAAuR,EAAAvR,WAAAxiB,EAAAwiB,YAAAk5B,EAAAl5B,WACAC,iBAAAsR,EAAAtR,iBAAAsR,EAAAtR,iBAAAziB,EAAAyiB,kBAAAi5B,EAAAj5B,iBACAC,gBAAAqR,EAAArR,gBAAAqR,EAAArR,gBAAA1iB,EAAA0iB,iBAAAg5B,EAAAh5B,gBACAhc,KAAAqtB,EAAArtB,KAAAqtB,EAAArtB,UAAAlT,IAAAwM,EAAA0G,KAAA1G,EAAA0G,KAAAg1C,EAAAh1C,KACAkB,YAAAmsB,EAAAnsB,YAAAmsB,EAAAnsB,YAAAjf,EAAAkL,eAAAmM,EAAA4H,YAAA8zC,EAAAE,SACAC,uBAAA9nB,EAAA8nB,uBAAA9nB,EAAA8nB,uBAAAlzD,EAAAkL,eAAAmM,EAAA67C,uBAAAH,EAAAG,yBAGAv5B,EAAAl0B,SAIAW,EAAA,EAAAC,EAAAke,EAAAxd,OAAoCX,EAAAC,IAAUD,EAC9CV,EAAAklC,cAAArmB,EAAAne,KAAAogC,GAQA,IALAssB,GAAA,IAAAn5B,EAAA9zB,OAAAqZ,SACAxZ,EAAAytD,4BAIA/sD,EAAA,EAAAC,EAAAke,EAAAxd,OAAoCX,EAAAC,IAAUD,EAC9Cme,EAAAne,GAAAX,SAIA2tD,wBAAA,SAAAlyD,EAAA2K,GACA,IAAAksB,EAAA79B,KAAAib,MAAApV,QAAA6H,SAAA1G,MAAA62B,gBACA1gB,EAAAnd,KAAAmwC,aACAe,EAAAlqC,EAAAkqC,QAAA,GAUA,OARAA,EAAArT,gBACAA,EAAAqT,EAAArT,gBACI1gB,EAAAg8C,qBACJt7B,EAAA/3B,EAAA6M,sBAAAwK,EAAAg8C,qBAAAxnD,EAAAksB,GACI1gB,EAAA0gB,kBACJA,EAAA1gB,EAAA0gB,iBAGAA,GAGAu7B,oBAAA,SAAApyD,EAAA2K,GACA,IAAAmsB,EAAA99B,KAAAib,MAAApV,QAAA6H,SAAA1G,MAAA82B,YACA3gB,EAAAnd,KAAAmwC,aACAe,EAAAlqC,EAAAkqC,QAAA,GAUA,OARAA,EAAApT,YACAA,EAAAoT,EAAApT,YACI3gB,EAAAk8C,iBACJv7B,EAAAh4B,EAAA6M,sBAAAwK,EAAAk8C,iBAAA1nD,EAAAmsB,GACI3gB,EAAA2gB,cACJA,EAAA3gB,EAAA2gB,aAGAA,GAGAw7B,oBAAA,SAAAtyD,EAAA2K,GACA,IAAAosB,EAAA/9B,KAAAib,MAAApV,QAAA6H,SAAA1G,MAAA+2B,YACA5gB,EAAAnd,KAAAmwC,aACAe,EAAAlqC,EAAAkqC,QAAA,GAUA,OARAztB,MAAAytB,EAAAnT,cAEIta,MAAAtG,EAAAo8C,mBAAAzzD,EAAA2L,QAAA0L,EAAAo8C,kBACJx7B,EAAAj4B,EAAA6M,sBAAAwK,EAAAo8C,iBAAA5nD,EAAAosB,GACIta,MAAAtG,EAAA4gB,eACJA,EAAA5gB,EAAA4gB,aAJAA,EAAAmT,EAAAnT,YAOAA,GAGA2S,cAAA,SAAA1pC,EAAA2K,EAAA26B,GACA,IASA3kC,EAAAC,EATA4D,EAAAxL,KACAqb,EAAA7P,EAAA0kC,UACAgB,EAAAlqC,EAAAkqC,QAAA,GACA/zB,EAAA3R,EAAA2kC,aACA/yB,EAAA5R,EAAAmG,MACA3C,EAAAmO,EAAA5B,KAAA5J,GACAsxC,EAAAz3C,EAAA4kC,cAAA/0B,EAAA+yB,SACA4U,EAAAx3C,EAAA4kC,cAAA/0B,EAAA8yB,SACAqrB,EAAAhuD,EAAAyP,MAAApV,QAAA6H,SAAA1G,WAIA2J,IAAAwM,EAAAyF,aAAAjS,IAAAwM,EAAAs8C,cACAt8C,EAAAs8C,YAAAt8C,EAAAyF,aAEAjS,IAAAwM,EAAAsjB,gBAAA9vB,IAAAwM,EAAAu8C,iBACAv8C,EAAAu8C,eAAAv8C,EAAAsjB,WAGA94B,EAAAq7C,EAAAnI,iBAAA,iBAAA7rC,IAAA2rC,IAAAhpC,EAAAyL,GACAxV,EAAA0kC,EAAA2W,EAAA5H,eAAA7vC,EAAAmuD,gBAAA3qD,EAAA2C,EAAAyL,GAGApW,EAAA68C,QAAAb,EACAh8C,EAAA88C,QAAAb,EACAj8C,EAAAyW,cAAAL,EACApW,EAAAqW,OAAA1L,EAGA3K,EAAA2E,OAAA,CACAhE,IACAC,IACA+T,KAAAu1B,EAAAv1B,MAAA8H,MAAA9b,IAAA8b,MAAA7b,GAEAgb,OAAAsuB,EAAAtuB,QAAA9c,EAAA6M,sBAAAwK,EAAAs8C,YAAA9nD,EAAA6nD,EAAA52C,QACA8d,WAAAwQ,EAAAxQ,YAAA56B,EAAA6M,sBAAAwK,EAAAujB,WAAA/uB,EAAA6nD,EAAA94B,YACA7C,gBAAAryB,EAAA0tD,wBAAAlyD,EAAA2K,GACAmsB,YAAAtyB,EAAA4tD,oBAAApyD,EAAA2K,GACAosB,YAAAvyB,EAAA8tD,oBAAAtyD,EAAA2K,GACAqT,QAAA3J,EAAA8B,QAAAxR,OAAA0P,EAAA8B,QAAAxR,OAAAqZ,QAAA,EACAD,cAAA1J,EAAA8B,QAAAxR,QAAA0P,EAAA8B,QAAAxR,OAAAoZ,YAEA0b,UAAAyQ,EAAAzQ,WAAA36B,EAAA6M,sBAAAwK,EAAAu8C,eAAA/nD,EAAA6nD,EAAA/4B,aAIAk5B,gBAAA,SAAA3qD,EAAA2C,EAAAyL,GACA,IAMAlR,EAAA4qD,EAAA8C,EALA3+C,EADAjb,KACAib,MACAI,EAFArb,KAEAkwC,UACA+S,EAHAjjD,KAGAowC,cAAA/0B,EAAA+yB,SACAyrB,EAAA,EACAC,EAAA,EAGA,GAAA7W,EAAAp9C,QAAA+iD,QAAA,CACA,IAAA18C,EAAA,EAAeA,EAAAkR,EAAkBlR,IAGjC,GAFA4qD,EAAA77C,EAAAM,KAAAC,SAAAtP,GAEA,UADA0tD,EAAA3+C,EAAAS,eAAAxP,IACAM,MAAAotD,EAAAxrB,UAAA6U,EAAAvjD,IAAAub,EAAAQ,iBAAAvP,GAAA,CACA,IAAA6tD,EAAA79C,OAAA+mC,EAAAxI,cAAAqc,EAAAv7C,KAAA5J,KACAooD,EAAA,EACAD,GAAAC,GAAA,EAEAF,GAAAE,GAAA,EAKA,IAAAxQ,EAAArtC,OAAA+mC,EAAAxI,cAAAzrC,IACA,OAAAu6C,EAAA,EACAtG,EAAApI,iBAAAif,EAAAvQ,GAEAtG,EAAApI,iBAAAgf,EAAAtQ,GAGA,OAAAtG,EAAApI,iBAAA7rC,IAGAiqD,0BAAA,WACA,IAIA/sD,EAAAC,EAAAJ,EAAAiuD,EAHA3+C,EADArb,KACAkwC,UACA1rB,EAFAxkB,KAEAib,MAAA2lB,UACAvW,EAAAhP,EAAAE,MAAA,GAUA,SAAA0+C,EAAAnU,EAAA91C,EAAAD,GACA,OAAAI,KAAAJ,IAAAI,KAAAH,IAAA81C,EAAA/1C,GAAAC,GAGA,GAVAqL,EAAA8B,QAAAxR,OAAAq0B,WACA3V,IAAAjlB,OAAA,SAAA0gD,GACA,OAAAA,EAAAn6C,OAAAgQ,QAQA,aAAAN,EAAA8B,QAAAxR,OAAAqtD,uBACAlzD,EAAAskB,oBAAAC,QAEA,IAAAne,EAAA,EAAAC,EAAAke,EAAAxd,OAAqCX,EAAAC,IAAUD,EAE/CH,EADAse,EAAAne,GACAP,OACAquD,EAAAl0D,EAAA0jB,YACA1jB,EAAAslB,aAAAf,EAAAne,GAAAP,OACAI,EACAjG,EAAAolB,SAAAb,EAAAne,GAAAP,OACA0P,EAAA8B,QAAAxR,OAAAqZ,SAEAjZ,EAAAmZ,sBAAA80C,EAAAn1C,SAAAld,EACAoE,EAAAqZ,sBAAA40C,EAAAn1C,SAAAjd,EACAmE,EAAAoZ,kBAAA60C,EAAAnwC,KAAAliB,EACAoE,EAAAsZ,kBAAA20C,EAAAnwC,KAAAjiB,EAIA,GApCA5H,KAoCAib,MAAApV,QAAA6H,SAAA+xB,KAAAK,gBACA,IAAA5zB,EAAA,EAAAC,EAAAke,EAAAxd,OAAqCX,EAAAC,IAAUD,GAC/CH,EAAAse,EAAAne,GAAAP,QACAuZ,sBAAA+0C,EAAAluD,EAAAmZ,sBAAAV,EAAAzE,KAAAyE,EAAA3E,OACA9T,EAAAqZ,sBAAA60C,EAAAluD,EAAAqZ,sBAAAZ,EAAA5E,IAAA4E,EAAA1E,QACA/T,EAAAoZ,kBAAA80C,EAAAluD,EAAAoZ,kBAAAX,EAAAzE,KAAAyE,EAAA3E,OACA9T,EAAAsZ,kBAAA40C,EAAAluD,EAAAsZ,kBAAAb,EAAA5E,IAAA4E,EAAA1E,SAKAkf,KAAA,WACA,IACA/jB,EADAjb,KACAib,MACAI,EAFArb,KAEAkwC,UACA7lB,EAAAhP,EAAAE,MAAA,GACAiJ,EAAAvJ,EAAA2lB,UACAz0B,EAAAke,EAAAxd,OACAX,EAAA,EAWA,IATApG,EAAAF,OAAA2e,SAAAtJ,EAAAwH,IAAA+B,GAEAm0C,EAVA34D,KAUAmwC,aAAAl1B,EAAApV,UACAwV,EAAA8B,QAAA6hB,OAGAl5B,EAAAF,OAAA+e,WAAA1J,EAAAwH,KAGSvW,EAAAC,IAAUD,EACnBme,EAAAne,GAAA8yB,KAAAxa,IAIA2sB,cAAA,SAAAnqC,GAEA,IAAAmW,EAAAnd,KAAAib,MAAAM,KAAAC,SAAAxU,EAAAyW,eACA9L,EAAA3K,EAAAqW,OACA6zB,EAAAlqC,EAAAkqC,QAAA,GACAnlC,EAAA/E,EAAA2E,OAEAI,EAAA6W,OAAAsuB,EAAAhT,aAAAp4B,EAAA6M,sBAAAwK,EAAA+8C,iBAAAvoD,EAAA3R,KAAAib,MAAApV,QAAA6H,SAAA1G,MAAAk3B,aACAnyB,EAAA8xB,gBAAAqT,EAAAE,sBAAAtrC,EAAA6M,sBAAAwK,EAAAg9C,0BAAAxoD,EAAA7L,EAAAupB,cAAAtjB,EAAA8xB,kBACA9xB,EAAA+xB,YAAAoT,EAAAG,kBAAAvrC,EAAA6M,sBAAAwK,EAAAi9C,sBAAAzoD,EAAA7L,EAAAupB,cAAAtjB,EAAA+xB,cACA/xB,EAAAgyB,YAAAmT,EAAAvQ,kBAAA76B,EAAA6M,sBAAAwK,EAAAk9C,sBAAA1oD,EAAA5F,EAAAgyB,cAGAiT,iBAAA,SAAAhqC,GACA,IAAAwE,EAAAxL,KACAmd,EAAA3R,EAAAyP,MAAAM,KAAAC,SAAAxU,EAAAyW,eACA9L,EAAA3K,EAAAqW,OACA6zB,EAAAlqC,EAAAkqC,QAAA,GACAnlC,EAAA/E,EAAA2E,YAGAgF,IAAAwM,EAAAyF,aAAAjS,IAAAwM,EAAAs8C,cACAt8C,EAAAs8C,YAAAt8C,EAAAyF,QAGA7W,EAAA6W,OAAAsuB,EAAAtuB,QAAA9c,EAAA6M,sBAAAwK,EAAAs8C,YAAA9nD,EAAAnG,EAAAyP,MAAApV,QAAA6H,SAAA1G,MAAA4b,QACA7W,EAAA8xB,gBAAAryB,EAAA0tD,wBAAAlyD,EAAA2K,GACA5F,EAAA+xB,YAAAtyB,EAAA4tD,oBAAApyD,EAAA2K,GACA5F,EAAAgyB,YAAAvyB,EAAA8tD,oBAAAtyD,EAAA2K,0CCvUA,IAAAlE,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,aACAshB,MAAA,CACA7a,KAAA,eACAq9C,WAAA,CACAtjB,SAAA,GAEAsP,UAAA,CACAiU,UAAA,GAEAK,YAAA,CACA5jB,SAAA,GAEA52B,MAAA,CACA8mC,aAAA,IAKAvO,UAAA,CACAwuB,eAAA,EACAC,cAAA,GAGAr4B,YAAA,GAAAnuB,KAAA+Q,GACAqtB,eAAA,SAAAtzB,GACA,IAAAwvC,EAAA,GACAA,EAAAtlD,KAAA,cAAA8V,EAAAvb,GAAA,aAEA,IAAA6b,EAAAN,EAAAM,KACAC,EAAAD,EAAAC,SACAwuB,EAAAzuB,EAAAyuB,OAEA,GAAAxuB,EAAA3O,OACA,QAAAX,EAAA,EAAkBA,EAAAsP,EAAA,GAAAD,KAAA1O,SAA6BX,EAC/Cu+C,EAAAtlD,KAAA,qCAAAqW,EAAA,GAAAqiB,gBAAA3xB,GAAA,aACA89B,EAAA99B,IACAu+C,EAAAtlD,KAAA6kC,EAAA99B,IAEAu+C,EAAAtlD,KAAA,SAKA,OADAslD,EAAAtlD,KAAA,SACAslD,EAAA1B,KAAA,KAEA6N,OAAA,CACA5sB,OAAA,CACA6sB,eAAA,SAAA57C,GACA,IAAAM,EAAAN,EAAAM,KACA,OAAAA,EAAAyuB,OAAAn9B,QAAA0O,EAAAC,SAAA3O,OACA0O,EAAAyuB,OAAAv2B,IAAA,SAAA+J,EAAAtR,GACA,IAAAmP,EAAAJ,EAAAS,eAAA,GACAo7C,EAAAv7C,EAAAC,SAAA,GAEA01B,EADA71B,EAAAE,KAAArP,GACAglC,QAAA,GACAv+B,EAAA7M,EAAA6M,sBACAokD,EAAA97C,EAAApV,QAAA6H,SAAAiW,IAKA,OACA8mC,KAAAjtC,EACA8hB,UANA4R,EAAArT,gBAAAqT,EAAArT,gBAAAlrB,EAAAmkD,EAAAj5B,gBAAA3xB,EAAA6qD,EAAAl5B,iBAOAuB,YANA8R,EAAApT,YAAAoT,EAAApT,YAAAnrB,EAAAmkD,EAAAh5B,YAAA5xB,EAAA6qD,EAAAj5B,aAOAuB,UANA6R,EAAAnT,YAAAmT,EAAAnT,YAAAprB,EAAAmkD,EAAA/4B,YAAA7xB,EAAA6qD,EAAAh5B,aAOAz+B,OAAAmkB,MAAAqzC,EAAAv7C,KAAArP,KAAAmP,EAAAE,KAAArP,GAAA5M,OAGAqS,MAAAzF,KAIA,KAIAiT,QAAA,SAAAnE,EAAAg8C,GACA,IAEA9qD,EAAAC,EAAAkP,EAFA1J,EAAAqlD,EAAArlD,MACAsJ,EAAAjb,KAAAib,MAGA,IAAA/O,EAAA,EAAAC,GAAA8O,EAAAM,KAAAC,UAAA,IAAA3O,OAAyDX,EAAAC,IAAUD,GACnEmP,EAAAJ,EAAAS,eAAAxP,IACAqP,KAAA5J,GAAArS,QAAA+b,EAAAE,KAAA5J,GAAArS,OAGA2b,EAAAmvB,WAKAsC,SAAA,CACAiT,UAAA,CACA99C,MAAA,WACA,UAEA2b,MAAA,SAAAnY,EAAAkW,GACA,OAAAA,EAAAyuB,OAAA3kC,EAAAsM,OAAA,KAAAtM,EAAA+6C,YAMA5+C,EAAAC,QAAA,SAAA+L,GAEAA,EAAAu8B,YAAAuwB,UAAA9sD,EAAAqiC,kBAAA3kC,OAAA,CAEA6kC,gBAAAriC,EAAAwB,IAEA8gC,WAAAlqC,EAAAsM,KAEAg4B,OAAA,SAAAkC,GACA,IAAA9gC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACA2lB,EAAA3lB,EAAA2lB,UACAvlB,EAAA7P,EAAA0kC,UACAnI,EAAA9sB,EAAApV,QACAkxD,EAAAhvB,EAAAr6B,SAAAiW,IACA+vB,EAAAvjC,KAAAH,IAAA4wB,EAAA/gB,MAAA+gB,EAAA7gB,KAAA6gB,EAAA9gB,OAAA8gB,EAAAhhB,KACA3E,EAAA0jB,YAAAxuB,KAAAJ,KAAA2jC,EAAAqjB,EAAAh5B,YAAA,QACA9iB,EAAAyjB,YAAAvuB,KAAAJ,IAAAg4B,EAAAkvB,iBAAAh8C,EAAA0jB,YAAA,IAAAoJ,EAAA,sBACA9sB,EAAA+8C,cAAA/8C,EAAA0jB,YAAA1jB,EAAAyjB,aAAAzjB,EAAAozB,yBAEA7iC,EAAAmzB,YAAA1jB,EAAA0jB,YAAA1jB,EAAA+8C,aAAAxsD,EAAAmG,MACAnG,EAAAkzB,YAAAlzB,EAAAmzB,YAAA1jB,EAAA+8C,aAEA38C,EAAAksB,MAAA/7B,EAAA+uD,uBAEAz0D,EAAAiN,KAAAsI,EAAAE,KAAA,SAAAoI,EAAAhS,GACAnG,EAAAklC,cAAA/sB,EAAAhS,EAAA26B,MAIAoE,cAAA,SAAA/sB,EAAAhS,EAAA26B,GAiBA,IAhBA,IAAA9gC,EAAAxL,KACAib,EAAAzP,EAAAyP,MACAkC,EAAA3R,EAAA2kC,aACApI,EAAA9sB,EAAApV,QACAwyD,EAAAtwB,EAAAG,UACA7gB,EAAApM,EAAAoM,MACA2iB,EAAA/uB,EAAAM,KAAAyuB,OAEAktB,EAAA1rD,EAAAgtD,uBAAAr7C,EAAA5B,KAAA5J,IACA2mD,EAAAjxC,EAAA0jC,QACAwN,EAAAlxC,EAAA2jC,QAIAwP,EAAA,EACAn/C,EAAA7P,EAAA0kC,UACAhkC,EAAA,EAAkBA,EAAAyF,IAAWzF,EAC7BuX,MAAAtG,EAAA5B,KAAArP,KAAAmP,EAAAE,KAAArP,GAAA5M,UACAk7D,EAKA,IAAAC,EAAA1yB,EAAAzJ,WACA/hB,EAAAoH,EAAArkB,OAAA,EAAA+nB,EAAAulC,8BAAAzvC,EAAA5B,KAAA5J,IACA2sB,EAAAm8B,EAAAvD,EAAAsD,EACAj8B,EAAAD,GAAA3a,EAAArkB,OAAA,EAAA43D,GAEAwD,EAAArC,EAAA1B,aAAA,EAAAtvC,EAAAulC,8BAAAzvC,EAAA5B,KAAA5J,IAEA7L,EAAAoF,OAAAyY,EAAA,CAEAlG,cAAAjS,EAAAmG,MACA0L,OAAA1L,EACAoyC,OAAA18B,EAGA1b,OAAA,CACAhE,EAAA2wD,EACA1wD,EAAA2wD,EACA75B,YAAA,EACAC,YAAA2N,EAAAouB,EAAAn+C,EACA+hB,WAAAgO,GAAA+rB,EAAA3B,cAAA+D,EAAAn8B,EACAC,SAAA+N,GAAA+rB,EAAA3B,cAAA+D,EAAAl8B,EACA/gB,MAAA1X,EAAA6M,sBAAAq3B,EAAAr4B,EAAAq4B,EAAAr4B,OAKAnG,EAAAwlC,iBAAArtB,GAEAA,EAAApY,SAGAylC,iBAAA,SAAArtB,GACAnW,EAAAqiC,kBAAAvkC,UAAA0lC,iBAAAjiC,KAAA/O,KAAA2jB,EAAA3jB,KAAAib,MAAApV,QAAA6H,SAAAiW,MAGA42C,qBAAA,WACA,IAAAp9C,EAAAnd,KAAAmwC,aACA90B,EAAArb,KAAAkwC,UACA3I,EAAA,EAQA,OANAzhC,EAAAiN,KAAAsI,EAAAE,KAAA,SAAAvZ,EAAA2P,GACA8R,MAAAtG,EAAA5B,KAAA5J,KAAA3P,EAAA1C,QACAioC,MAIAA,GAGAixB,uBAAA,SAAAxpD,GACA,IAAAu4B,EAAAvnC,KAAAkwC,UAAA3I,MACA,OAAAA,EAAA,IAAA9jB,MAAAzU,GACA,EAAAmB,KAAA+Q,GAAAqmB,EAEA,yCCxNA,IAAA95B,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,SACAshB,MAAA,CACA7a,KAAA,gBAEAkB,SAAA,CACA+xB,KAAA,CACAza,QAAA,MAKAxjB,EAAAC,QAAA,SAAA+L,GAEAA,EAAAu8B,YAAA4wB,MAAAntD,EAAAqiC,kBAAA3kC,OAAA,CAEA4kC,mBAAApiC,EAAAyB,KAEA4gC,gBAAAriC,EAAA0B,MAEA4gC,WAAAlqC,EAAAsM,KAEAg4B,OAAA,SAAAkC,GACA,IAAA9gC,EAAAxL,KACAqb,EAAA7P,EAAA0kC,UACAzQ,EAAApkB,EAAA8B,QACAkN,EAAAhP,EAAAE,KACA21B,EAAAzR,EAAAyR,QAAA,GACA/zB,EAAA3R,EAAA2kC,aACA0oB,EAAArtD,EAAAyP,MAAApV,QAAA6H,SAAA+xB,KACApY,EAAA7b,EAAAyP,MAAAoM,WAGA1W,IAAAwM,EAAA6H,cAAArU,IAAAwM,EAAA27C,cACA37C,EAAA27C,YAAA37C,EAAA6H,SAGAlf,EAAAoF,OAAAmQ,EAAA8B,QAAA,CAEAM,cAAAjS,EAAAmG,MACAoyC,OAAA18B,EAEA4Y,UAAA5V,EACA+V,OAAA,EAEAz0B,OAAA,CAEAqZ,QAAAksB,EAAAlsB,QAAAksB,EAAAlsB,QAAAlf,EAAAkL,eAAAmM,EAAA27C,YAAAD,EAAA7zC,SACA6Y,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA1gB,EAAA0gB,iBAAAg7B,EAAAh7B,gBACAE,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAA5gB,EAAA4gB,aAAA86B,EAAA96B,YACAD,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAA3gB,EAAA2gB,aAAA+6B,EAAA/6B,YACAja,KAAAqtB,EAAArtB,KAAAqtB,EAAArtB,UAAAlT,IAAAwM,EAAA0G,KAAA1G,EAAA0G,KAAAg1C,EAAAh1C,KACA6b,eAAAwR,EAAAxR,eAAAwR,EAAAxR,eAAAviB,EAAAuiB,gBAAAm5B,EAAAn5B,eACAC,WAAAuR,EAAAvR,WAAAuR,EAAAvR,WAAAxiB,EAAAwiB,YAAAk5B,EAAAl5B,WACAC,iBAAAsR,EAAAtR,iBAAAsR,EAAAtR,iBAAAziB,EAAAyiB,kBAAAi5B,EAAAj5B,iBACAC,gBAAAqR,EAAArR,gBAAAqR,EAAArR,gBAAA1iB,EAAA0iB,iBAAAg5B,EAAAh5B,mBAIAxkB,EAAA8B,QAAA5R,QAGAzF,EAAAiN,KAAAsX,EAAA,SAAArjB,EAAA2K,GACAnG,EAAAklC,cAAA1pC,EAAA2K,EAAA26B,IACI9gC,GAGJA,EAAAytD,6BAEAvoB,cAAA,SAAA1pC,EAAA2K,EAAA26B,GACA,IAAA9gC,EAAAxL,KACAkxC,EAAAlqC,EAAAkqC,QAAA,GACA/zB,EAAA3R,EAAA2kC,aACA9oB,EAAA7b,EAAAyP,MAAAoM,MACAuzC,EAAApvD,EAAAyP,MAAApV,QAAA6H,SAAA1G,MACAmkD,EAAA9jC,EAAA2lC,yBAAAr7C,EAAAwL,EAAA5B,KAAA5J,SAGAhB,IAAAwM,EAAAyF,aAAAjS,IAAAwM,EAAAs8C,cACAt8C,EAAAs8C,YAAAt8C,EAAAyF,aAEAjS,IAAAwM,EAAAsjB,gBAAA9vB,IAAAwM,EAAAu8C,iBACAv8C,EAAAu8C,eAAAv8C,EAAAsjB,WAGA36B,EAAAoF,OAAAlE,EAAA,CAEAyW,cAAAjS,EAAAmG,MACA0L,OAAA1L,EACAoyC,OAAA18B,EAGA1b,OAAA,CACAhE,EAAA2kC,EAAAjlB,EAAA0jC,QAAAI,EAAAxjD,EACAC,EAAA0kC,EAAAjlB,EAAA2jC,QAAAG,EAAAvjD,EAGAod,QAAAksB,EAAAlsB,QAAAksB,EAAAlsB,QAAAlf,EAAAkL,eAAAmM,EAAA27C,YAAAttD,EAAAyP,MAAApV,QAAA6H,SAAA+xB,KAAAza,SACApC,OAAAsuB,EAAAtuB,OAAAsuB,EAAAtuB,OAAA9c,EAAA6M,sBAAAwK,EAAAs8C,YAAA9nD,EAAAipD,EAAAh4C,QACAib,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA/3B,EAAA6M,sBAAAwK,EAAAg8C,qBAAAxnD,EAAAipD,EAAA/8B,iBACAC,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAAh4B,EAAA6M,sBAAAwK,EAAAk8C,iBAAA1nD,EAAAipD,EAAA98B,aACAC,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAAj4B,EAAA6M,sBAAAwK,EAAAo8C,iBAAA5nD,EAAAipD,EAAA78B,aACA2C,WAAAwQ,EAAAxQ,WAAAwQ,EAAAxQ,WAAA56B,EAAA6M,sBAAAwK,EAAAujB,WAAA/uB,EAAAipD,EAAAl6B,YAGAD,UAAAyQ,EAAAzQ,UAAAyQ,EAAAzQ,UAAA36B,EAAA6M,sBAAAwK,EAAAu8C,eAAA/nD,EAAAipD,EAAAn6B,cAIAz5B,EAAA2E,OAAAgQ,KAAAu1B,EAAAv1B,KAAAu1B,EAAAv1B,KAAA8H,MAAAzc,EAAA2E,OAAAhE,IAAA8b,MAAAzc,EAAA2E,OAAA/D,IAEAqxD,0BAAA,WACA,IAAAr4B,EAAA5gC,KAAAib,MAAA2lB,UACAvlB,EAAArb,KAAAkwC,UAEApqC,EAAAiN,KAAAsI,EAAAE,KAAA,SAAAvU,EAAA2K,GACA,IAAA5F,EAAA/E,EAAA2E,OACAquD,EAAAl0D,EAAA0jB,YACA1jB,EAAAslB,aAAA/P,EAAAE,KAAA5J,GAAA,GAAAhG,OACAI,EACAjG,EAAAolB,SAAA7P,EAAAE,KAAA5J,GAAA,GAAAhG,OACAI,EAAAiZ,SAIAjZ,EAAAmZ,sBAAA/U,KAAAJ,IAAAI,KAAAH,IAAAgqD,EAAAn1C,SAAAld,EAAAi5B,EAAA/gB,OAAA+gB,EAAA7gB,MACAhU,EAAAqZ,sBAAAjV,KAAAJ,IAAAI,KAAAH,IAAAgqD,EAAAn1C,SAAAjd,EAAAg5B,EAAA9gB,QAAA8gB,EAAAhhB,KAEA7T,EAAAoZ,kBAAAhV,KAAAJ,IAAAI,KAAAH,IAAAgqD,EAAAnwC,KAAAliB,EAAAi5B,EAAA/gB,OAAA+gB,EAAA7gB,MACAhU,EAAAsZ,kBAAAlV,KAAAJ,IAAAI,KAAAH,IAAAgqD,EAAAnwC,KAAAjiB,EAAAg5B,EAAA9gB,QAAA8gB,EAAAhhB,KAGA5Y,EAAAuE,WAIA4lC,cAAA,SAAAnqC,GAEA,IAAAmW,EAAAnd,KAAAib,MAAAM,KAAAC,SAAAxU,EAAAyW,eACAyzB,EAAAlqC,EAAAkqC,QAAA,GACAv/B,EAAA3K,EAAAqW,OACAtR,EAAA/E,EAAA2E,OAEAI,EAAA6W,OAAAsuB,EAAAhT,YAAAgT,EAAAhT,YAAAp4B,EAAA6M,sBAAAwK,EAAA+8C,iBAAAvoD,EAAA3R,KAAAib,MAAApV,QAAA6H,SAAA1G,MAAAk3B,aACAnyB,EAAA8xB,gBAAAqT,EAAAE,qBAAAF,EAAAE,qBAAAtrC,EAAA6M,sBAAAwK,EAAAg9C,0BAAAxoD,EAAA7L,EAAAupB,cAAAtjB,EAAA8xB,kBACA9xB,EAAA+xB,YAAAoT,EAAAG,iBAAAH,EAAAG,iBAAAvrC,EAAA6M,sBAAAwK,EAAAi9C,sBAAAzoD,EAAA7L,EAAAupB,cAAAtjB,EAAA+xB,cACA/xB,EAAAgyB,YAAAmT,EAAAvQ,iBAAAuQ,EAAAvQ,iBAAA76B,EAAA6M,sBAAAwK,EAAAk9C,sBAAA1oD,EAAA5F,EAAAgyB,cAGAiT,iBAAA,SAAAhqC,GACA,IAAAmW,EAAAnd,KAAAib,MAAAM,KAAAC,SAAAxU,EAAAyW,eACAyzB,EAAAlqC,EAAAkqC,QAAA,GACAv/B,EAAA3K,EAAAqW,OACAtR,EAAA/E,EAAA2E,OACAivD,EAAA56D,KAAAib,MAAApV,QAAA6H,SAAA1G,MAEA+E,EAAA6W,OAAAsuB,EAAAtuB,OAAAsuB,EAAAtuB,OAAA9c,EAAA6M,sBAAAwK,EAAAs8C,YAAA9nD,EAAAipD,EAAAh4C,QACA7W,EAAA8xB,gBAAAqT,EAAArT,gBAAAqT,EAAArT,gBAAA/3B,EAAA6M,sBAAAwK,EAAAg8C,qBAAAxnD,EAAAipD,EAAA/8B,iBACA9xB,EAAA+xB,YAAAoT,EAAApT,YAAAoT,EAAApT,YAAAh4B,EAAA6M,sBAAAwK,EAAAk8C,iBAAA1nD,EAAAipD,EAAA98B,aACA/xB,EAAAgyB,YAAAmT,EAAAnT,YAAAmT,EAAAnT,YAAAj4B,EAAA6M,sBAAAwK,EAAAo8C,iBAAA5nD,EAAAipD,EAAA78B,oDClKe9/B,EAAQ,MAEvB8H,KAAA,WACAgZ,MAAA,CACAE,KAAA,UAGAgsB,OAAA,CACAE,MAAA,EACAzrC,GAAA,WACA8M,KAAA,SACAxE,SAAA,WAEAqjC,MAAA,EACA3rC,GAAA,WACA8M,KAAA,SACAxE,SAAA,UAIAyX,WAAA,EAEAitB,SAAA,CACAiT,UAAA,CACA99C,MAAA,WACA,UAEA2b,MAAA,SAAAnY,GACA,UAAAA,EAAA06C,OAAA,KAAA16C,EAAA+6C,OAAA,SAMA5+C,EAAAC,QAAA,SAAA+L,GAGAA,EAAAu8B,YAAA8wB,QAAArtD,EAAAu8B,YAAAtK,yCCrCAj+B,EAAAC,QAAA,SAAA+L,GAEAA,EAAAstD,IAAA,SAAA16D,EAAA4f,GAGA,OAFAA,EAAAxT,KAAA,MAEA,IAAAgB,EAAApN,EAAA4f,wCCLAxe,EAAAC,QAAA,SAAA+L,GAEAA,EAAAutD,OAAA,SAAA36D,EAAA4f,GAEA,OADAA,EAAAxT,KAAA,SACA,IAAAgB,EAAApN,EAAA4f,wCCJAxe,EAAAC,QAAA,SAAA+L,GAEAA,EAAAwtD,SAAA,SAAA56D,EAAA4f,GAGA,OAFAA,EAAAxT,KAAA,WAEA,IAAAgB,EAAApN,EAAA4f,wCCLAxe,EAAAC,QAAA,SAAA+L,GAEAA,EAAA2B,KAAA,SAAA/O,EAAA4f,GAGA,OAFAA,EAAAxT,KAAA,OAEA,IAAAgB,EAAApN,EAAA4f,wCCLAxe,EAAAC,QAAA,SAAA+L,GAEAA,EAAAytD,UAAA,SAAA76D,EAAA4f,GAGA,OAFAA,EAAAxT,KAAA,YAEA,IAAAgB,EAAApN,EAAA4f,wCCLAxe,EAAAC,QAAA,SAAA+L,GAEAA,EAAA0tD,MAAA,SAAA96D,EAAA4f,GAGA,OAFAA,EAAAxT,KAAA,QAEA,IAAAgB,EAAApN,EAAA4f,wCCLAxe,EAAAC,QAAA,SAAA+L,GACAA,EAAA2tD,QAAA,SAAA/6D,EAAA4f,GAEA,OADAA,EAAAxT,KAAA,UACA,IAAAgB,EAAApN,EAAA4f,wCCGA,IAAAvS,EAAexP,EAAQ,MACvByP,EAAezP,EAAQ,MACvB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACA8H,QAAA,CACAutD,OAAA,CACAC,WAAA,MAKA75D,EAAAC,QAAA,WAEA,IAAA65D,EAAA,CACAn+C,QAAA,SAAA3J,GACA,IAAA7B,EAAA6B,EAAAqQ,KACA5I,EAAAzH,EAAAyH,MACAI,EAAAJ,EAAAS,eAAA/J,GAEA0Y,EADAhP,GAAAJ,EAAAQ,iBAAA9J,IACA0J,EAAA8B,QAAA8iB,WAAA,GACApzB,EAAAwd,EAAAxd,QAAA,EAEA,OAAAA,EAAA,SAAA7F,EAAAkF,GACA,OAAAA,EAAAW,GAAAwd,EAAAne,GAAAT,OAAA,MADA,MAKA8vD,SAAA,SAAA/nD,GACA,IAAA+nD,EAAA/nD,EAAA+nD,SACA5zD,EAAA4zD,IAAA5zD,EAAA,KACAC,EAAA2zD,IAAA3zD,EAAA,KAEA,gBAAAZ,GACA,OACAW,EAAA,OAAAA,EAAAX,EAAAW,IACAC,EAAA,OAAAA,EAAAZ,EAAAY,QAOA,SAAA4zD,EAAAhuC,EAAA7b,EAAA41B,GACA,IAEAh7B,EAFAR,EAAAyhB,EAAA7hB,QAAA,GACAkY,EAAA9X,EAAA8X,KAOA,QAJAlT,IAAAkT,IACAA,IAAA9X,EAAA8xB,kBAGA,IAAAha,GAAA,OAAAA,EACA,SAGA,QAAAA,EACA,eAIA,GADAtX,EAAA2b,WAAArE,EAAA,IACA3W,SAAAX,IAAA4D,KAAAC,MAAA7D,OAKA,MAJA,MAAAsX,EAAA,UAAAA,EAAA,KACAtX,EAAAoF,EAAApF,KAGAA,IAAAoF,GAAApF,EAAA,GAAAA,GAAAg7B,IAIAh7B,EAGA,OAAAsX,GAEA,aACA,cACA,UACA,YACA,WACA,eAEA,aACA,YACA,UACA,OAAAA,EAEA,QACA,UAIA,SAAA43C,EAAAjoD,GACA,IAIAkuB,EAJA31B,EAAAyH,EAAAga,GAAA7hB,QAAA,GACA0b,EAAA7T,EAAAga,GAAAu2B,QAAA,GACAlgC,EAAArQ,EAAAqQ,KACAtX,EAAA,KAGA,GAAAW,SAAA2W,GACA,YAmBA,GAZA,UAAAA,EACAtX,OAAAoE,IAAA5E,EAAA2vD,YAAAr0C,EAAAvH,OAAA/T,EAAA2vD,YACG,QAAA73C,EACHtX,OAAAoE,IAAA5E,EAAA4vD,SAAAt0C,EAAAzH,IAAA7T,EAAA4vD,cACGhrD,IAAA5E,EAAA6vD,UACHrvD,EAAAR,EAAA6vD,UACGv0C,EAAA4lC,gBACH1gD,EAAA8a,EAAA4lC,kBACG5lC,EAAAg0B,eACH9uC,EAAA8a,EAAAg0B,gBAGA9uC,QAAA,CACA,QAAAoE,IAAApE,EAAA5E,QAAAgJ,IAAApE,EAAA3E,EACA,OAAA2E,EAGA,oBAAAA,GAAAW,SAAAX,GAEA,OACA5E,GAFA+5B,EAAAra,EAAAssB,gBAEApnC,EAAA,KACA3E,EAAA85B,EAAA,KAAAn1B,GAKA,YAGA,SAAAsvD,EAAA5nD,EAAAtC,EAAA0pD,GACA,IAGA9uD,EAFAsX,EADA5P,EAAAtC,GACAkS,KACAi4C,EAAA,CAAAnqD,GAGA,IAAA0pD,EACA,OAAAx3C,EAGA,UAAAA,IAAA,IAAAi4C,EAAAntD,QAAAkV,IAAA,CACA,IAAA3W,SAAA2W,GACA,OAAAA,EAIA,KADAtX,EAAA0H,EAAA4P,IAEA,SAGA,GAAAtX,EAAAwvD,QACA,OAAAl4C,EAGAi4C,EAAA32D,KAAA0e,GACAA,EAAAtX,EAAAsX,KAGA,SAGA,SAAAm4C,EAAAxoD,GACA,IAAAqQ,EAAArQ,EAAAqQ,KACArX,EAAA,UAEA,WAAAqX,EACA,MAGA3W,SAAA2W,KACArX,EAAA,YAGA8uD,EAAA9uD,GAAAgH,IAGA,SAAAyoD,EAAAj1D,GACA,OAAAA,MAAA2U,KAGA,SAAAugD,EAAAz5C,EAAA05C,EAAAC,EAAAC,EAAAC,GACA,IAAApwD,EAEA,GAAAmwD,GAAAC,EAAA,CAMA,IADA75C,EAAAM,OAAAo5C,EAAA,GAAAx0D,EAAAw0D,EAAA,GAAAv0D,GACAsE,EAAA,EAAaA,EAAAmwD,IAAUnwD,EACvBpG,EAAAF,OAAAod,OAAAP,EAAA05C,EAAAjwD,EAAA,GAAAiwD,EAAAjwD,IAOA,IAHAuW,EAAAO,OAAAo5C,EAAAE,EAAA,GAAA30D,EAAAy0D,EAAAE,EAAA,GAAA10D,GAGAsE,EAAAowD,EAAA,EAAoBpwD,EAAA,IAAOA,EAC3BpG,EAAAF,OAAAod,OAAAP,EAAA25C,EAAAlwD,GAAAkwD,EAAAlwD,EAAA,QAiDA,OACAxM,GAAA,SAEA68D,oBAAA,SAAAthD,EAAApV,GACA,IAGAwV,EAAAnP,EAAAshB,EAAAha,EAHA+zB,GAAAtsB,EAAAM,KAAAC,UAAA,IAAA3O,OACAwuD,EAAAx1D,EAAAw1D,UACApnD,EAAA,GAGA,IAAA/H,EAAA,EAAcA,EAAAq7B,IAAWr7B,EAGzBsH,EAAA,MADAga,GADAnS,EAAAJ,EAAAS,eAAAxP,IACAiR,UAGAqQ,EAAA7hB,QAAA6hB,aAAA9f,EAAAyB,OACAqE,EAAA,CACAuoD,QAAA9gD,EAAAQ,iBAAAvP,GACA2X,KAAA23C,EAAAhuC,EAAAthB,EAAAq7B,GACAtsB,QACAuS,OAIAnS,EAAAmhD,QAAAhpD,EACAS,EAAA9O,KAAAqO,GAGA,IAAAtH,EAAA,EAAcA,EAAAq7B,IAAWr7B,GACzBsH,EAAAS,EAAA/H,MAKAsH,EAAAqQ,KAAAg4C,EAAA5nD,EAAA/H,EAAAmvD,GACA7nD,EAAA+nD,SAAAE,EAAAjoD,GACAA,EAAAipD,OAAAT,EAAAxoD,KAIAkpD,kBAAA,SAAAzhD,EAAApI,GACA,IAAAwI,EAAAxI,EAAAwI,KAAAmhD,QACA,GAAAnhD,EAAA,CAIA,IAAAoH,EAAAxH,EAAAwH,IACA+K,EAAAnS,EAAAmS,GACAvhB,EAAAuhB,EAAA/hB,MACA4e,EAAAmD,EAAAyS,WAAA,GACAw8B,EAAAphD,EAAAohD,OACAl9D,EAAA0M,EAAA4xB,iBAAApwB,EAAA2hB,OAAAhQ,aAEAq9C,GAAAl9D,GAAA8qB,EAAAxd,SACA/G,EAAAF,OAAA2e,SAAA9B,EAAAxH,EAAA2lB,WAlGA,SAAAne,EAAA4H,EAAAoyC,EAAAxwD,EAAA1M,EAAA4rB,GACA,IAMAjf,EAAAC,EAAAwF,EAAAgrD,EAAAC,EAAAC,EAAAC,EANAv1B,EAAAld,EAAAxd,OACAgjD,EAAA5jD,EAAA+zB,SACAm8B,EAAA,GACAC,EAAA,GACAC,EAAA,EACAC,EAAA,EAKA,IAFA75C,EAAAiB,YAEAxX,EAAA,EAAAC,EAAAo7B,IAAApc,EAAsCjf,EAAAC,IAAUD,EAGhD0wD,EAAAH,EADAE,EAAAtyC,EADA1Y,EAAAzF,EAAAq7B,GACA97B,MACAkG,EAAA1F,GACA4wD,EAAAZ,EAAAU,GACAG,EAAAb,EAAAW,GAEAC,GAAAC,GACAT,EAAAF,EAAAh3D,KAAAw3D,GACAL,EAAAF,EAAAj3D,KAAAy3D,IACIP,GAAAC,IACJzM,GAMAgN,GACAV,EAAAh3D,KAAAw3D,GAEAG,GACAV,EAAAj3D,KAAAy3D,KATAV,EAAAz5C,EAAA05C,EAAAC,EAAAC,EAAAC,GACAD,EAAAC,EAAA,EACAH,EAAA,GACAC,EAAA,KAYAF,EAAAz5C,EAAA05C,EAAAC,EAAAC,EAAAC,GAEA75C,EAAAmB,YACAnB,EAAA6c,UAAA//B,EACAkjB,EAAAoB,OAyDAk5C,CAAAt6C,EAAA4H,EAAAoyC,EAAAxwD,EAAA1M,EAAAiuB,EAAA4S,OACAt6B,EAAAF,OAAA+e,WAAAlC,2CC1TA,IAAAhV,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACA6wD,OAAA,CACArwB,SAAA,EACAv+B,SAAA,MACAoqC,WAAA,EACAn/B,SAAA,EACA0G,OAAA,IAGAwF,QAAA,SAAAnE,EAAAg8C,GACA,IAAArlD,EAAAqlD,EAAA55C,aACA4/C,EAAAh9D,KAAAib,MACAI,EAAA2hD,EAAAthD,eAAA/J,GAGA0J,EAAA/b,OAAA,OAAA+b,EAAA/b,QAAA09D,EAAAzhD,KAAAC,SAAA7J,GAAArS,OAAA,KAGA09D,EAAA5yB,UAGAprB,QAAA,KAEAgrB,OAAA,CACAizB,SAAA,GACAt9C,QAAA,GAYAk3C,eAAA,SAAA57C,GACA,IAAAM,EAAAN,EAAAM,KACA,OAAAzV,EAAA2L,QAAA8J,EAAAC,UAAAD,EAAAC,SAAA/H,IAAA,SAAA0J,EAAAjR,GACA,OACAu+C,KAAAttC,EAAAK,MACA8hB,UAAAx5B,EAAA2L,QAAA0L,EAAA0gB,iBAAA1gB,EAAA0gB,gBAAA,GAAA1gB,EAAA0gB,gBACAv+B,QAAA2b,EAAAQ,iBAAAvP,GACAm0B,QAAAljB,EAAAuiB,eACAw9B,SAAA//C,EAAAwiB,WACAY,eAAApjB,EAAAyiB,iBACAL,SAAApiB,EAAA0iB,gBACAR,UAAAliB,EAAA4gB,YACAqB,YAAAjiB,EAAA2gB,YACA4C,WAAAvjB,EAAAujB,WAGAtjB,aAAAlR,IAEKlM,MAAA,MAKLuuC,eAAA,SAAAtzB,GACA,IAAAwvC,EAAA,GACAA,EAAAtlD,KAAA,cAAA8V,EAAAvb,GAAA,aACA,QAAAwM,EAAA,EAAiBA,EAAA+O,EAAAM,KAAAC,SAAA3O,OAAgCX,IACjDu+C,EAAAtlD,KAAA,qCAAA8V,EAAAM,KAAAC,SAAAtP,GAAA2xB,gBAAA,aACA5iB,EAAAM,KAAAC,SAAAtP,GAAAsR,OACAitC,EAAAtlD,KAAA8V,EAAAM,KAAAC,SAAAtP,GAAAsR,OAEAitC,EAAAtlD,KAAA,SAGA,OADAslD,EAAAtlD,KAAA,SACAslD,EAAA1B,KAAA,OAIAvnD,EAAAC,QAAA,SAAA+L,GAEA,IAAAkS,EAAAlS,EAAAy/B,cACA76B,EAAAtM,EAAAsM,KAQA,SAAA+qD,EAAAC,EAAA/lB,GACA,OAAA+lB,EAAAC,cACAhmB,EAAAlnC,KAAA2T,MACAs5C,EAAAH,SAsaA,SAAAK,EAAAriD,EAAAsiD,GACA,IAAA3G,EAAA,IAAAppD,EAAAgwD,OAAA,CACA/6C,IAAAxH,EAAAwH,IACA5c,QAAA03D,EACAtiD,UAGAyE,EAAA6yB,UAAAt3B,EAAA27C,EAAA2G,GACA79C,EAAAyyB,OAAAl3B,EAAA27C,GACA37C,EAAA27C,SAGA,OA/aAppD,EAAAgwD,OAAAxyD,EAAAE,OAAA,CAEAC,WAAA,SAAA6U,GACAla,EAAAoF,OAAAlL,KAAAggB,GAGAhgB,KAAAy9D,eAAA,GAGAz9D,KAAA09D,cAAA,GAOA/lB,aAAAvlC,EACAg4B,OAAA,SAAAwN,EAAAC,EAAAC,GACA,IAAAtsC,EAAAxL,KA0BA,OAvBAwL,EAAAmsC,eAGAnsC,EAAAosC,WACApsC,EAAAqsC,YACArsC,EAAAssC,UAGAtsC,EAAAwsC,sBACAxsC,EAAAysC,gBACAzsC,EAAA0sC,qBAEA1sC,EAAAmyD,oBACAnyD,EAAAoyD,cACApyD,EAAAqyD,mBAGAryD,EAAAutC,YACAvtC,EAAAwtC,MACAxtC,EAAAytC,WAEAztC,EAAA0tC,cAEA1tC,EAAAkoC,SAEAwF,YAAA9mC,EAIA4lC,oBAAA5lC,EACA6lC,cAAA,WACA,IAAAzsC,EAAAxL,KAEAwL,EAAAmoC,gBAEAnoC,EAAA1D,MAAA0D,EAAAosC,SACApsC,EAAAuU,KAAA,EACAvU,EAAAqU,MAAArU,EAAA1D,QAEA0D,EAAAzD,OAAAyD,EAAAqsC,UAGArsC,EAAAoU,IAAA,EACApU,EAAAsU,OAAAtU,EAAAzD,QAIAyD,EAAAghB,YAAA,EACAhhB,EAAAkhB,WAAA,EACAlhB,EAAAmhB,aAAA,EACAnhB,EAAAohB,cAAA,EAGAphB,EAAAkoC,QAAA,CACA5rC,MAAA,EACAC,OAAA,IAGAmwC,mBAAA9lC,EAIAurD,kBAAAvrD,EACAwrD,YAAA,WACA,IAAApyD,EAAAxL,KACAo9D,EAAA5xD,EAAA3F,QAAAmkC,QAAA,GACA8zB,EAAAh4D,EAAAZ,SAAAk4D,EAAAvG,eAAA,CAAArrD,EAAAyP,OAAAzP,IAAA,GAEA4xD,EAAAh4D,SACA04D,IAAA14D,OAAA,SAAAC,GACA,OAAA+3D,EAAAh4D,OAAAC,EAAAmG,EAAAyP,MAAAM,SAIA/P,EAAA3F,QAAAoN,SACA6qD,EAAA7qD,UAGAzH,EAAAsyD,eAEAD,iBAAAzrD,EAIA2mC,UAAA3mC,EACA4mC,IAAA,WACA,IAAAxtC,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAu3D,EAAAr1B,EAAAiC,OACAzD,EAAAwB,EAAAxB,QAEA9jB,EAAAjX,EAAAiX,IAEAs7C,EAAAtwD,EAAA2hB,OACApe,EAAAlL,EAAAkL,eACAqmC,EAAArmC,EAAAosD,EAAA/lB,SAAA0mB,EAAAx+C,iBACA2O,EAAAld,EAAAosD,EAAAlvC,UAAA6vC,EAAAv+C,kBACA2O,EAAAnd,EAAAosD,EAAAjvC,WAAA4vC,EAAAz+C,mBACA0+C,EAAAl4D,EAAAkoB,WAAAqpB,EAAAnpB,EAAAC,GAGA8vC,EAAAzyD,EAAAiyD,eAAA,GAEA/pB,EAAAloC,EAAAkoC,QACAC,EAAAnoC,EAAAmoC,eAWA,GATAA,GACAD,EAAA5rC,MAAA0D,EAAAosC,SACAlE,EAAA3rC,OAAAw+B,EAAA,OAEAmN,EAAA5rC,MAAAy+B,EAAA,KACAmN,EAAA3rC,OAAAyD,EAAAqsC,WAIAtR,EAGA,GAFA9jB,EAAA4L,KAAA2vC,EAEArqB,EAAA,CAIA,IAAAuqB,EAAA1yD,EAAA0yD,WAAA,IACAC,EAAA3yD,EAAAsyD,YAAAjxD,OAAAwqC,EAAA+lB,EAAA,UAEA36C,EAAA46B,UAAA,OACA56B,EAAA66B,aAAA,MAEAx3C,EAAAiN,KAAAvH,EAAAsyD,YAAA,SAAA9G,EAAA9qD,GACA,IACApE,EADAq1D,EAAAC,EAAA/lB,GACAA,EAAA,EAAA50B,EAAAmM,YAAAooC,EAAAvM,MAAA3iD,MAEAo2D,IAAArxD,OAAA,GAAA/E,EAAAs1D,EAAAz9C,SAAAnU,EAAA1D,QACAq2D,GAAA9mB,EAAA+lB,EAAA,QACAc,IAAArxD,QAAArB,EAAAuU,MAIAk+C,EAAA/xD,GAAA,CACA6T,KAAA,EACAH,IAAA,EACA9X,QACAC,OAAAsvC,GAGA6mB,IAAArxD,OAAA,IAAA/E,EAAAs1D,EAAAz9C,UAGA+zB,EAAA3rC,QAAAo2D,MAEK,CACL,IAAAC,EAAAhB,EAAAz9C,QACA0+C,EAAA7yD,EAAA6yD,aAAA,GACAC,EAAAlB,EAAAz9C,QACA4+C,EAAA,EACAC,EAAA,EACAC,EAAApnB,EAAA+mB,EAEAt4D,EAAAiN,KAAAvH,EAAAsyD,YAAA,SAAA9G,EAAA9qD,GACA,IACAwyD,EADAvB,EAAAC,EAAA/lB,GACAA,EAAA,EAAA50B,EAAAmM,YAAAooC,EAAAvM,MAAA3iD,MAGA02D,EAAAC,EAAA/qB,EAAA3rC,SACAu2D,GAAAC,EAAAnB,EAAAz9C,QACA0+C,EAAAl5D,KAAAo5D,GAEAA,EAAA,EACAC,EAAA,GAIAD,EAAApuD,KAAAJ,IAAAwuD,EAAAG,GACAF,GAAAC,EAGAR,EAAA/xD,GAAA,CACA6T,KAAA,EACAH,IAAA,EACA9X,MAAA42D,EACA32D,OAAAsvC,KAIAinB,GAAAC,EACAF,EAAAl5D,KAAAo5D,GACA7qB,EAAA5rC,OAAAw2D,EAIA9yD,EAAA1D,MAAA4rC,EAAA5rC,MACA0D,EAAAzD,OAAA2rC,EAAA3rC,QAEAkxC,SAAA7mC,EAGAuhC,aAAA,WACA,cAAA3zC,KAAA6F,QAAAmC,UAAA,WAAAhI,KAAA6F,QAAAmC,UAIAg3B,KAAA,WACA,IAAAxzB,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACAu3D,EAAAr1B,EAAAiC,OACA+zB,EAAAtwD,EAAA2hB,OACAuvC,EAAAZ,EAAArwD,SAAA+xB,KACAm/B,EAAApzD,EAAA1D,MACAo2D,EAAA1yD,EAAA0yD,WAEA,GAAAn2B,EAAAxB,QAAA,CACA,IAOAs4B,EAPAp8C,EAAAjX,EAAAiX,IACAzR,EAAAlL,EAAAkL,eACAirC,EAAAjrC,EAAAosD,EAAAnhB,UAAA8hB,EAAA1+C,kBACAg4B,EAAArmC,EAAAosD,EAAA/lB,SAAA0mB,EAAAx+C,iBACA2O,EAAAld,EAAAosD,EAAAlvC,UAAA6vC,EAAAv+C,kBACA2O,EAAAnd,EAAAosD,EAAAjvC,WAAA4vC,EAAAz+C,mBACA0+C,EAAAl4D,EAAAkoB,WAAAqpB,EAAAnpB,EAAAC,GAIA1L,EAAA46B,UAAA,OACA56B,EAAA66B,aAAA,SACA76B,EAAA4c,UAAA,GACA5c,EAAA2c,YAAA6c,EACAx5B,EAAA6c,UAAA2c,EACAx5B,EAAA4L,KAAA2vC,EAEA,IAAAf,EAAAE,EAAAC,EAAA/lB,GACA4mB,EAAAzyD,EAAAiyD,eA8DA9pB,EAAAnoC,EAAAmoC,eAEAkrB,EADAlrB,EACA,CACAhsC,EAAA6D,EAAAuU,MAAA6+C,EAAAV,EAAA,MACAt2D,EAAA4D,EAAAoU,IAAAw9C,EAAAz9C,QACA8f,KAAA,GAGA,CACA93B,EAAA6D,EAAAuU,KAAAq9C,EAAAz9C,QACA/X,EAAA4D,EAAAoU,IAAAw9C,EAAAz9C,QACA8f,KAAA,GAIA,IAAAg/B,EAAApnB,EAAA+lB,EAAAz9C,QACA7Z,EAAAiN,KAAAvH,EAAAsyD,YAAA,SAAA9G,EAAA9qD,GACA,IAAA8iB,EAAAvM,EAAAmM,YAAAooC,EAAAvM,MAAA3iD,MACAA,EAAAm1D,EAAA5lB,EAAA,EAAAroB,EACArnB,EAAAk3D,EAAAl3D,EACAC,EAAAi3D,EAAAj3D,EAEA+rC,EACAhsC,EAAAG,GAAA82D,IACAh3D,EAAAi3D,EAAAj3D,GAAA62D,EACAI,EAAAp/B,OACA93B,EAAAk3D,EAAAl3D,EAAA6D,EAAAuU,MAAA6+C,EAAAV,EAAAW,EAAAp/B,OAAA,GAEM73B,EAAA62D,EAAAjzD,EAAAsU,SACNnY,EAAAk3D,EAAAl3D,IAAA6D,EAAA6yD,aAAAQ,EAAAp/B,MAAA29B,EAAAz9C,QACA/X,EAAAi3D,EAAAj3D,EAAA4D,EAAAoU,IAAAw9C,EAAAz9C,QACAk/C,EAAAp/B,QA1FA,SAAA93B,EAAAC,EAAAovD,GACA,KAAAvzC,MAAAw5C,OAAA,IAKAx6C,EAAAgC,OAEAhC,EAAA6c,UAAAtuB,EAAAgmD,EAAA13B,UAAAy+B,EAAA3+C,cACAqD,EAAA4d,QAAArvB,EAAAgmD,EAAA32B,QAAAs+B,EAAAj/B,gBACAjd,EAAA8d,eAAAvvB,EAAAgmD,EAAAz2B,eAAAo+B,EAAA/+B,kBACAnd,EAAA8c,SAAAvuB,EAAAgmD,EAAAz3B,SAAAo/B,EAAA9+B,iBACApd,EAAA4c,UAAAruB,EAAAgmD,EAAA33B,UAAAs/B,EAAA5gC,aACAtb,EAAA2c,YAAApuB,EAAAgmD,EAAA53B,YAAA2+B,EAAA3+C,cACA,IAAA0/C,EAAA,IAAA9tD,EAAAgmD,EAAA33B,UAAAs/B,EAAA5gC,aAOA,GALAtb,EAAA6d,aAEA7d,EAAA6d,YAAAtvB,EAAAgmD,EAAAkG,SAAAyB,EAAAh/B,aAGAoI,EAAAiC,QAAAjC,EAAAiC,OAAAqzB,cAAA,CAGA,IAAAz6C,EAAAy0B,EAAAlnC,KAAA2T,MAAA,EACAi7C,EAAAn8C,EAAAzS,KAAA2T,MACAw0C,EAAA3wD,EAAAo3D,EACAxG,EAAA3wD,EAAAm3D,EAGAj5D,EAAAF,OAAAud,UAAAV,EAAAu0C,EAAAt2B,WAAA9d,EAAA01C,EAAAC,QAGAuG,GACAr8C,EAAAuB,WAAArc,EAAAC,EAAAq1D,EAAA5lB,GAEA50B,EAAAsB,SAAApc,EAAAC,EAAAq1D,EAAA5lB,GAGA50B,EAAAmC,WAsDAo6C,CAAAr3D,EAAAC,EAAAovD,GAEAiH,EAAA/xD,GAAA6T,KAAApY,EACAs2D,EAAA/xD,GAAA0T,IAAAhY,EAvDA,SAAAD,EAAAC,EAAAovD,EAAAhoC,GACA,IAAAiwC,EAAA5nB,EAAA,EACA6nB,EAAAjC,EAAAgC,EAAAt3D,EACAw3D,EAAAv3D,EAAAq3D,EAEAx8C,EAAA07B,SAAA6Y,EAAAvM,KAAAyU,EAAAC,GAEAnI,EAAA13D,SAEAmjB,EAAAiB,YACAjB,EAAA4c,UAAA,EACA5c,EAAAM,OAAAm8C,EAAAC,GACA18C,EAAAO,OAAAk8C,EAAAlwC,EAAAmwC,GACA18C,EAAA4B,UA6CA85B,CAAAx2C,EAAAC,EAAAovD,EAAAhoC,GAEA2kB,EACAkrB,EAAAl3D,GAAAG,EAAAs1D,EAAA,QAEAyB,EAAAj3D,GAAA62D,MAaArvB,YAAA,SAAAp0B,GACA,IAAAxP,EAAAxL,KACA+nC,EAAAv8B,EAAA3F,QACA2G,EAAA,YAAAwO,EAAAxO,KAAA,QAAAwO,EAAAxO,KACA2iC,GAAA,EAEA,iBAAA3iC,GACA,IAAAu7B,EAAA/oB,QACA,WAEI,cAAAxS,EAKJ,OAJA,IAAAu7B,EAAA5oB,QACA,OAOA,IAAAxX,EAAAqT,EAAArT,EACAC,EAAAoT,EAAApT,EAEA,GAAAD,GAAA6D,EAAAuU,MAAApY,GAAA6D,EAAAqU,OAAAjY,GAAA4D,EAAAoU,KAAAhY,GAAA4D,EAAAsU,OAGA,IADA,IAAAs/C,EAAA5zD,EAAAiyD,eACAvxD,EAAA,EAAmBA,EAAAkzD,EAAAvyD,SAAeX,EAAA,CAClC,IAAAmzD,EAAAD,EAAAlzD,GAEA,GAAAvE,GAAA03D,EAAAt/C,MAAApY,GAAA03D,EAAAt/C,KAAAs/C,EAAAv3D,OAAAF,GAAAy3D,EAAAz/C,KAAAhY,GAAAy3D,EAAAz/C,IAAAy/C,EAAAt3D,OAAA,CAEA,aAAAyE,EAAA,CAEAu7B,EAAA5oB,QAAApQ,KAAAvD,EAAAwP,EAAAE,OAAA1P,EAAAsyD,YAAA5xD,IACAijC,GAAA,EACA,MACO,iBAAA3iC,EAAA,CAEPu7B,EAAA/oB,QAAAjQ,KAAAvD,EAAAwP,EAAAE,OAAA1P,EAAAsyD,YAAA5xD,IACAijC,GAAA,EACA,QAMA,OAAAA,KAgBA,CACAzvC,GAAA,SAEA4/D,WAAA,SAAArkD,GACA,IAAAsiD,EAAAtiD,EAAApV,QAAA+wD,OAEA2G,GACAD,EAAAriD,EAAAsiD,IAIA5lB,aAAA,SAAA18B,GACA,IAAAsiD,EAAAtiD,EAAApV,QAAA+wD,OACAA,EAAA37C,EAAA27C,OAEA2G,GACAz3D,EAAAkO,QAAAupD,EAAA9vD,EAAA2hB,OAAAwnC,QAEAA,GACAl3C,EAAA6yB,UAAAt3B,EAAA27C,EAAA2G,GACA3G,EAAA/wD,QAAA03D,GAEAD,EAAAriD,EAAAsiD,IAEI3G,IACJl3C,EAAA2yB,UAAAp3B,EAAA27C,UACA37C,EAAA27C,SAIA2I,WAAA,SAAAtkD,EAAAD,GACA,IAAA47C,EAAA37C,EAAA27C,OACAA,GACAA,EAAAxnB,YAAAp0B,yCChjBA,IAAAvN,EAAexP,EAAQ,MACvB+M,EAAc/M,EAAQ,MACtB6H,EAAc7H,EAAQ,MAEtBwP,EAAA1H,KAAA,UACAlE,MAAA,CACA0kC,SAAA,EACArY,UAAA,OACAkkB,WAAA,EACAoE,WAAA,IACA72B,QAAA,GACA3X,SAAA,MACAyiD,KAAA,GACA9wC,OAAA,OAIAnY,EAAAC,QAAA,SAAA+L,GAEA,IAAAkS,EAAAlS,EAAAy/B,cACA76B,EAAAtM,EAAAsM,KAkLA,SAAAotD,EAAAvkD,EAAAwkD,GACA,IAAA59D,EAAA,IAAA2L,EAAAkyD,MAAA,CACAj9C,IAAAxH,EAAAwH,IACA5c,QAAA45D,EACAxkD,UAGAyE,EAAA6yB,UAAAt3B,EAAApZ,EAAA49D,GACA//C,EAAAyyB,OAAAl3B,EAAApZ,GACAoZ,EAAA0kD,WAAA99D,EAGA,OA5LA2L,EAAAkyD,MAAA10D,EAAAE,OAAA,CACAC,WAAA,SAAA6U,GAEAla,EAAAoF,OADAlL,KACAggB,GADAhgB,KAIAy9D,eAAA,IAKA9lB,aAAAvlC,EACAg4B,OAAA,SAAAwN,EAAAC,EAAAC,GACA,IAAAtsC,EAAAxL,KA0BA,OAvBAwL,EAAAmsC,eAGAnsC,EAAAosC,WACApsC,EAAAqsC,YACArsC,EAAAssC,UAGAtsC,EAAAwsC,sBACAxsC,EAAAysC,gBACAzsC,EAAA0sC,qBAEA1sC,EAAAmyD,oBACAnyD,EAAAoyD,cACApyD,EAAAqyD,mBAGAryD,EAAAutC,YACAvtC,EAAAwtC,MACAxtC,EAAAytC,WAEAztC,EAAA0tC,cAEA1tC,EAAAkoC,SAGAwF,YAAA9mC,EAIA4lC,oBAAA5lC,EACA6lC,cAAA,WACA,IAAAzsC,EAAAxL,KAEAwL,EAAAmoC,gBAEAnoC,EAAA1D,MAAA0D,EAAAosC,SACApsC,EAAAuU,KAAA,EACAvU,EAAAqU,MAAArU,EAAA1D,QAEA0D,EAAAzD,OAAAyD,EAAAqsC,UAGArsC,EAAAoU,IAAA,EACApU,EAAAsU,OAAAtU,EAAAzD,QAIAyD,EAAAghB,YAAA,EACAhhB,EAAAkhB,WAAA,EACAlhB,EAAAmhB,aAAA,EACAnhB,EAAAohB,cAAA,EAGAphB,EAAAkoC,QAAA,CACA5rC,MAAA,EACAC,OAAA,IAGAmwC,mBAAA9lC,EAIAurD,kBAAAvrD,EACAwrD,YAAAxrD,EACAyrD,iBAAAzrD,EAIA2mC,UAAA3mC,EACA4mC,IAAA,WACA,IAAAxtC,EAAAxL,KACAgR,EAAAlL,EAAAkL,eACA+2B,EAAAv8B,EAAA3F,QACA0gC,EAAAwB,EAAAxB,QACA8Q,EAAArmC,EAAA+2B,EAAAsP,SAAA5pC,EAAA2hB,OAAA7P,iBACAm0B,EAAAloC,EAAAkoC,QACAksB,EAAA95D,EAAA2L,QAAAs2B,EAAA0iB,MAAA1iB,EAAA0iB,KAAA59C,OAAA,EACA2pC,EAAA1wC,EAAAD,QAAA0f,aAAAwiB,EAAAyO,WAAAa,GACAsT,EAAApkB,EAAAq5B,EAAAppB,EAAA,EAAAzO,EAAApoB,QAAA,EAEAnU,EAAAmoC,gBACAD,EAAA5rC,MAAA0D,EAAAosC,SACAlE,EAAA3rC,OAAA4iD,IAEAjX,EAAA5rC,MAAA6iD,EACAjX,EAAA3rC,OAAAyD,EAAAqsC,WAGArsC,EAAA1D,MAAA4rC,EAAA5rC,MACA0D,EAAAzD,OAAA2rC,EAAA3rC,QAGAkxC,SAAA7mC,EAGAuhC,aAAA,WACA,IAAA7M,EAAA9mC,KAAA6F,QAAAmC,SACA,cAAA8+B,GAAA,WAAAA,GAIA9H,KAAA,WACA,IAAAxzB,EAAAxL,KACAyiB,EAAAjX,EAAAiX,IACAzR,EAAAlL,EAAAkL,eACA+2B,EAAAv8B,EAAA3F,QACA25B,EAAA/xB,EAAA2hB,OAEA,GAAA2Y,EAAAxB,QAAA,CACA,IAWAqR,EAAAioB,EAAAC,EAXAzoB,EAAArmC,EAAA+2B,EAAAsP,SAAA7X,EAAAjgB,iBACA2O,EAAAld,EAAA+2B,EAAA7Z,UAAAsR,EAAAhgB,kBACA2O,EAAAnd,EAAA+2B,EAAA5Z,WAAAqR,EAAAlgB,mBACAygD,EAAAj6D,EAAAkoB,WAAAqpB,EAAAnpB,EAAAC,GACAqoB,EAAA1wC,EAAAD,QAAA0f,aAAAwiB,EAAAyO,WAAAa,GACApzB,EAAAuyB,EAAA,EAAAzO,EAAApoB,QACAq+B,EAAA,EACAp+B,EAAApU,EAAAoU,IACAG,EAAAvU,EAAAuU,KACAD,EAAAtU,EAAAsU,OACAD,EAAArU,EAAAqU,MAGA4C,EAAA6c,UAAAtuB,EAAA+2B,EAAAkU,UAAAzc,EAAAngB,kBACAoD,EAAA4L,KAAA0xC,EAGAv0D,EAAAmoC,gBACAksB,EAAA9/C,GAAAF,EAAAE,GAAA,EACA+/C,EAAAlgD,EAAAqE,EACA2zB,EAAA/3B,EAAAE,IAEA8/C,EAAA,SAAA93B,EAAA//B,SAAA+X,EAAAkE,EAAApE,EAAAoE,EACA67C,EAAAlgD,GAAAE,EAAAF,GAAA,EACAg4B,EAAA93B,EAAAF,EACAo+B,EAAA7tC,KAAA+Q,IAAA,SAAA6mB,EAAA//B,UAAA,QAGAya,EAAAgC,OACAhC,EAAAy7B,UAAA2hB,EAAAC,GACAr9C,EAAAjJ,OAAAwkC,GACAv7B,EAAA46B,UAAA,SACA56B,EAAA66B,aAAA,SAEA,IAAAmN,EAAA1iB,EAAA0iB,KACA,GAAA3kD,EAAA2L,QAAAg5C,GAEA,IADA,IAAA7iD,EAAA,EACAsE,EAAA,EAAoBA,EAAAu+C,EAAA59C,SAAiBX,EACrCuW,EAAA07B,SAAAsM,EAAAv+C,GAAA,EAAAtE,EAAAgwC,GACAhwC,GAAA4uC,OAGA/zB,EAAA07B,SAAAsM,EAAA,IAAA7S,GAGAn1B,EAAAmC,cAiBA,CACAllB,GAAA,QAEA4/D,WAAA,SAAArkD,GACA,IAAAwkD,EAAAxkD,EAAApV,QAAAhE,MAEA49D,GACAD,EAAAvkD,EAAAwkD,IAIA9nB,aAAA,SAAA18B,GACA,IAAAwkD,EAAAxkD,EAAApV,QAAAhE,MACA89D,EAAA1kD,EAAA0kD,WAEAF,GACA35D,EAAAkO,QAAAyrD,EAAAhyD,EAAA2hB,OAAAvtB,OAEA89D,GACAjgD,EAAA6yB,UAAAt3B,EAAA0kD,EAAAF,GACAE,EAAA95D,QAAA45D,GAEAD,EAAAvkD,EAAAwkD,IAEIE,IACJnyD,EAAAy/B,cAAAoF,UAAAp3B,EAAA0kD,UACA1kD,EAAA0kD","file":"3-chunk.5c1384390c9026de2bfc.js","sourcesContent":["import React from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { uniqueId } from 'lodash';\r\n\r\n/**\r\n * Created by griga on 12/1/15.\r\n */\r\n\r\nvar ElementHolder = require('../../../utils/mixins/elementHolder');\r\n\r\n/**\r\n * JarvisWidget object\r\n * @prop\r\n */\r\nvar JarvisWidget = React.createClass({\r\n\r\n getPropTypes: function() {\r\n return {\r\n autoHeight: PropTypes.bool,\r\n }\r\n },\r\n\r\n getDefaultProps: function () {\r\n return {\r\n colorbutton: true,\r\n editbutton: true,\r\n togglebutton: true,\r\n deletebutton: true,\r\n fullscreenbutton: true,\r\n custombutton: true,\r\n collapsed: false,\r\n sortable: true,\r\n hidden: false,\r\n color: \"blueLight\",\r\n load: false,\r\n refresh: false,\r\n id: uniqueId('jarviswidget-'),\r\n autoHeight: false,\r\n };\r\n },\r\n\r\n contextTypes: {\r\n updateGrid: PropTypes.func\r\n },\r\n\r\n componentWillMount(){\r\n this.widgetId = this.widgetId || this.props.id;\r\n },\r\n\r\n componentDidMount() {\r\n this.context.updateGrid();\r\n },\r\n\r\n componentWillUnmount() {\r\n if (this.widgetId) {\r\n $(`#${this.widgetId}`).jarvisWidgets('restoreScrollFromFullScreenMode');\r\n }\r\n },\r\n\r\n render: function () {\r\n var colorClass = this.props.color ? 'jarviswidget-color-' + this.props.color : '';\r\n var customClass = this.props.customClass ? this.props.customClass : '';\r\n var classes = classNames('jarviswidget', colorClass, {\r\n 'jarviswidget-sortable': this.props.sortable == true\r\n }, customClass, {\r\n 'autoheight': this.props.autoHeight\r\n });\r\n\r\n var widgetProps = {};\r\n\r\n ['colorbutton', 'editbutton', 'togglebutton', 'deletebutton',\r\n 'fullscreenbutton', 'custombutton', 'sortable'].forEach(function (option) {\r\n if (!this.props[option])\r\n widgetProps['data-widget-' + option] = false\r\n }.bind(this));\r\n\r\n ['hidden', 'collapsed'].forEach(function (option) {\r\n if (this.props[option])\r\n widgetProps['data-widget-' + option] = true\r\n }.bind(this));\r\n\r\n ['refresh', 'load'].forEach(function (option) {\r\n if (this.props[option])\r\n widgetProps['data-widget-' + option] = this.props[option]\r\n }.bind(this));\r\n\r\n return (\r\n
{this.props.children}
\r\n )\r\n }\r\n\r\n /*componentDidMount: function(){\r\n $(this.refs[this.widgetId]).find('.widget-body').prepend('
');\r\n }*/\r\n});\r\n\r\nmodule.exports = JarvisWidget;\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nvar JarvisWidgetInfo = require('./jarvisWidgetInfo');\r\n\r\n/**\r\n * jarvis widget header\r\n * @prop {ReactElement|string} title widget window title\r\n */\r\nvar JarvisWidgetHeader = React.createClass({\r\n\r\n propTypes: {\r\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\r\n dataForId: PropTypes.string,\r\n widgetInfoTitle: PropTypes.string,\r\n widgetInfoContent: PropTypes.string\r\n },\r\n\r\n render(){\r\n const { title, children, Header, dataForId } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {\r\n dataForId\r\n ?

{title}

\r\n :

{title}

\r\n }\r\n
\r\n {children}\r\n
\r\n {this._getWidgetInfoPopover()}\r\n
\r\n );\r\n },\r\n\r\n _getHeaderIconClass(){\r\n var iconClass = {\r\n 'fa': true\r\n };\r\n\r\n if (this.props.className) {\r\n iconClass[this.props.className] = true;\r\n }\r\n\r\n return classnames(iconClass);\r\n },\r\n\r\n _getWidgetInfoPopover(){\r\n if (!this.props.widgetInfoTitle && !this.props.widgetInfoContent) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n});\r\n\r\n\r\nmodule.exports = JarvisWidgetHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n/**\r\n * Jarvis widget body element\r\n */\r\nvar JarvisWidgetBody = React.createClass({\r\n\r\n propTypes: {\r\n hasPadding: PropTypes.bool\r\n },\r\n\r\n getDefaultProps(){\r\n return {\r\n hasPadding: true\r\n }\r\n },\r\n\r\n render: function () {\r\n var className = {\r\n \"widget-body\": true,\r\n \"no-padding\": !this.props.hasPadding\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n\r\n});\r\n\r\n\r\nmodule.exports = JarvisWidgetBody;\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { assign } from 'lodash';\r\n\r\nimport './widgetLocalStorage';\r\n\r\nvar jarvisWidgetsDefaults = require('./widgetDefaults');\r\n\r\nvar WidgetGridActions = require('../../../constants/widgetGridActions'); // Esk.Constants.WidgetGridActions;\r\n\r\n\r\nvar destroyGrid = function (gridElement) {\r\n const $grid = $(gridElement);\r\n $grid.jarvisWidgets('destroy');\r\n};\r\n\r\nvar updateGrid = function (gridElement, gridOptions) {\r\n const $grid = $(gridElement);\r\n destroyGrid(gridElement);\r\n gridOptions = gridOptions || jarvisWidgetsDefaults;\r\n $grid.jarvisWidgets(gridOptions);\r\n};\r\n\r\nvar gridCounter = 1;\r\n\r\nlet WidgetGrid = React.createClass({\r\n\r\n gridId: 0,\r\n\r\n gridOptions: assign({}, jarvisWidgetsDefaults),\r\n\r\n widgets: [],\r\n\r\n propTypes: {\r\n id: React.PropTypes.string,\r\n className: React.PropTypes.string,\r\n sortable: React.PropTypes.bool,\r\n },\r\n\r\n childContextTypes: {\r\n updateGrid: React.PropTypes.func,\r\n registerWidget: React.PropTypes.func,\r\n unregisterWidget: React.PropTypes.func\r\n },\r\n\r\n statics: {\r\n updateGrid: updateGrid\r\n },\r\n\r\n getChildContext(){\r\n var self = this;\r\n return {\r\n updateGrid(){\r\n updateGrid(ReactDOM.findDOMNode(self.refs['WidgetGrid']), self.gridOptions);\r\n },\r\n registerWidget: this._registerWidget,\r\n unregisterWidget: this._unregisterWidget\r\n }\r\n },\r\n\r\n componentDidMount(){\r\n this.gridOptions.onDelete = this.onWidgetDelete;\r\n $(this.refs['WidgetGrid']).jarvisWidgets(this.gridOptions);\r\n },\r\n\r\n componentWillMount(){\r\n this.gridId = this.props.id || (\"widget-grid\" + (gridCounter++));\r\n },\r\n\r\n componentWillReceiveProps(nextProps){\r\n var {id} = nextProps;\r\n if (id != this.props.id && id) {\r\n destroyGrid(ReactDOM.findDOMNode(this.refs['WidgetGrid']));\r\n this.gridId = id;\r\n this.forceUpdate();\r\n }\r\n },\r\n\r\n componentDidUpdate(prevProps, prevState){\r\n var {id} = prevProps;\r\n if (this.props.id != id) {\r\n updateGrid(ReactDOM.findDOMNode(this.refs['WidgetGrid']), this.gridOptions);\r\n }\r\n },\r\n\r\n componentWillUnmount() {\r\n const $grid = $(ReactDOM.findDOMNode(this.refs['WidgetGrid']));\r\n $grid.jarvisWidgets('destroy');\r\n },\r\n\r\n render(){\r\n const { className, sortable } = this.props;\r\n return (\r\n
\r\n {this.props.children}\r\n
\r\n )\r\n },\r\n\r\n _registerWidget(widgetId, widgetElement, callback){\r\n this._unregisterWidget(widgetId);\r\n this.widgets.push({\r\n element: widgetElement,\r\n id: widgetId,\r\n callback: callback\r\n });\r\n },\r\n\r\n _unregisterWidget(widgetId){\r\n this.widgets = this.widgets.filter((item) => {\r\n return item.id != widgetId\r\n });\r\n },\r\n\r\n onWidgetDelete($widgetElement) {\r\n var widgetElement = $widgetElement.get(0);\r\n var widget = this.widgets.find((item) => {\r\n return item.element === widgetElement\r\n });\r\n\r\n if (widget && widget.callback) {\r\n widget.callback(WidgetGridActions.ACTION_DELETE);\r\n }\r\n }\r\n\r\n\r\n});\r\n\r\n\r\nmodule.exports = WidgetGrid;\r\n","'use strict';\n\nmodule.exports = require('./helpers.core');\nmodule.exports.easing = require('./helpers.easing');\nmodule.exports.canvas = require('./helpers.canvas');\nmodule.exports.options = require('./helpers.options');\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\nmodule.exports = {\n\t/**\n\t * @private\n\t */\n\t_set: function(scope, values) {\n\t\treturn helpers.merge(this[scope] || (this[scope] = {}), values);\n\t}\n};\n","import React from 'react';\r\nimport * as AppPopover from '../../../utils/mixins/appPopover';\r\nimport { themeService, ThemeService } from '../../../services/theme/ThemeService';\r\n\r\nvar JarvisWidgetInfo = React.createClass({\r\n\r\n mixins: [AppPopover],\r\n\r\n POPOVER_REF: \"Popover\",\r\n\r\n contextTypes: {\r\n showAppPopover: React.PropTypes.func,\r\n hideAppPopover: React.PropTypes.func\r\n },\r\n\r\n propTypes: {\r\n title: React.PropTypes.oneOfType([\r\n React.PropTypes.string,\r\n React.PropTypes.element\r\n ]),\r\n content: React.PropTypes.oneOfType([\r\n React.PropTypes.string,\r\n React.PropTypes.element\r\n ])\r\n },\r\n\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n },\r\n\r\n _showPopover(event){\r\n var point = this.getPopoverPoint(this.refs[this.POPOVER_REF], 'bottom');\r\n \r\n // TODO: refactor popover positioning logic\r\n const popoverArrowOffset = 31;\r\n const popoverWidth = 220;\r\n const xCoord = themeService.layoutDirection === ThemeService.LAYOUT_DIRECTION.RIGHT_TO_LEFT\r\n ? point.clientX + (popoverWidth / 2) - popoverArrowOffset\r\n : point.clientX - 80;\r\n\r\n this.context.showAppPopoverObject({\r\n x: xCoord,\r\n y: point.clientY,\r\n content: this.props.content,\r\n title: this.props.title,\r\n width: 220,\r\n height: 100,\r\n position: 'bottom',\r\n autoHide: false,\r\n className: 'widget-info-popover'\r\n });\r\n\r\n },\r\n\r\n _hidePopover(event){\r\n this.context.hideAppPopover();\r\n }\r\n});\r\n\r\n\r\nmodule.exports = JarvisWidgetInfo;\r\n","module.exports = {\r\n grid: 'article',\r\n widgets: '.jarviswidget',\r\n localStorage: true,\r\n deleteSettingsKey: '#deletesettingskey-options',\r\n settingsKeyLabel: 'Reset settings?',\r\n deletePositionKey: '#deletepositionkey-options',\r\n positionKeyLabel: 'Reset position?',\r\n sortable: true,\r\n buttonsHidden: false,\r\n // toggle button\r\n toggleButton: true,\r\n toggleClass: 'fa fa-chevron-up | fa fa-chevron-down',\r\n toggleSpeed: 200,\r\n onToggle: function () {\r\n },\r\n // delete btn\r\n deleteButton: true,\r\n deleteMsg: 'Warning: This action cannot be undone!',\r\n deleteClass: 'fa fa-times',\r\n deleteSpeed: 200,\r\n onDelete: function () {\r\n },\r\n // edit btn\r\n editButton: true,\r\n editPlaceholder: '.jarviswidget-editbox',\r\n editClass: 'fa fa-cog | fa fa-save',\r\n editSpeed: 200,\r\n onEdit: function () {\r\n },\r\n // color button\r\n colorButton: true,\r\n // full screen\r\n fullscreenButton: true,\r\n fullscreenClass: 'fa fa-expand | fa fa-compress',\r\n fullscreenDiff: 3,\r\n onFullscreen: function () {\r\n },\r\n // custom btn\r\n customButton: true,\r\n customClass: 'fa fa-info',\r\n //customStart: function () {\r\n // alert('Hello you, this is a custom button...');\r\n //},\r\n //customEnd: function () {\r\n // alert('bye, till next time...');\r\n //},\r\n // order\r\n buttonOrder: '%custom% %refresh% %edit% %toggle% %fullscreen% %delete%',\r\n opacity: 1.0,\r\n dragHandle: '> header',\r\n placeholderClass: 'jarviswidget-placeholder',\r\n indicator: true,\r\n indicatorTime: 600,\r\n ajax: true,\r\n timestampPlaceholder: '.jarviswidget-timestamp',\r\n timestampFormat: 'Last update: %m%/%d%/%y% %h%:%i%:%s%',\r\n refreshButton: true,\r\n refreshButtonClass: 'fa fa-refresh',\r\n labelError: 'Sorry but there was a error:',\r\n labelUpdated: 'Last Update:',\r\n labelRefresh: 'Refresh',\r\n labelDelete: 'Delete widget:',\r\n afterLoad: function () {\r\n\r\n },\r\n rtl: false, // best not to toggle this!\r\n onChange: function () {\r\n\r\n },\r\n onSave: function () {\r\n\r\n },\r\n ajaxnav: true\r\n\r\n}\r\n","'use strict';\n\nvar color = require('chartjs-color');\nvar helpers = require('../helpers/index');\n\nfunction interpolate(start, view, model, ease) {\n\tvar keys = Object.keys(model);\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\n\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\tkey = keys[i];\n\n\t\ttarget = model[key];\n\n\t\t// if a value is added to the model after pivot() has been called, the view\n\t\t// doesn't contain it, so let's initialize the view to the target value.\n\t\tif (!view.hasOwnProperty(key)) {\n\t\t\tview[key] = target;\n\t\t}\n\n\t\tactual = view[key];\n\n\t\tif (actual === target || key[0] === '_') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!start.hasOwnProperty(key)) {\n\t\t\tstart[key] = actual;\n\t\t}\n\n\t\torigin = start[key];\n\n\t\ttype = typeof target;\n\n\t\tif (type === typeof origin) {\n\t\t\tif (type === 'string') {\n\t\t\t\tc0 = color(origin);\n\t\t\t\tif (c0.valid) {\n\t\t\t\t\tc1 = color(target);\n\t\t\t\t\tif (c1.valid) {\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'number' && isFinite(origin) && isFinite(target)) {\n\t\t\t\tview[key] = origin + (target - origin) * ease;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tview[key] = target;\n\t}\n}\n\nvar Element = function(configuration) {\n\thelpers.extend(this, configuration);\n\tthis.initialize.apply(this, arguments);\n};\n\nhelpers.extend(Element.prototype, {\n\n\tinitialize: function() {\n\t\tthis.hidden = false;\n\t},\n\n\tpivot: function() {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\tme._view = helpers.clone(me._model);\n\t\t}\n\t\tme._start = {};\n\t\treturn me;\n\t},\n\n\ttransition: function(ease) {\n\t\tvar me = this;\n\t\tvar model = me._model;\n\t\tvar start = me._start;\n\t\tvar view = me._view;\n\n\t\t// No animation -> No Transition\n\t\tif (!model || ease === 1) {\n\t\t\tme._view = model;\n\t\t\tme._start = null;\n\t\t\treturn me;\n\t\t}\n\n\t\tif (!view) {\n\t\t\tview = me._view = {};\n\t\t}\n\n\t\tif (!start) {\n\t\t\tstart = me._start = {};\n\t\t}\n\n\t\tinterpolate(start, view, model, ease);\n\n\t\treturn me;\n\t},\n\n\ttooltipPosition: function() {\n\t\treturn {\n\t\t\tx: this._model.x,\n\t\t\ty: this._model.y\n\t\t};\n\t},\n\n\thasValue: function() {\n\t\treturn helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);\n\t}\n});\n\nElement.extend = helpers.inherits;\n\nmodule.exports = Element;\n","/**\n * @namespace Chart\n */\nvar Chart = require('./core/core')();\n\nChart.helpers = require('./helpers/index');\n\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\nrequire('./core/core.helpers')(Chart);\n\nChart.defaults = require('./core/core.defaults');\nChart.Element = require('./core/core.element');\nChart.elements = require('./elements/index');\nChart.Interaction = require('./core/core.interaction');\nChart.platform = require('./platforms/platform');\n\nrequire('./core/core.plugin')(Chart);\nrequire('./core/core.animation')(Chart);\nrequire('./core/core.controller')(Chart);\nrequire('./core/core.datasetController')(Chart);\nrequire('./core/core.layoutService')(Chart);\nrequire('./core/core.scaleService')(Chart);\nrequire('./core/core.scale')(Chart);\nrequire('./core/core.tooltip')(Chart);\n\nrequire('./scales/scale.linearbase')(Chart);\nrequire('./scales/scale.category')(Chart);\nrequire('./scales/scale.linear')(Chart);\nrequire('./scales/scale.logarithmic')(Chart);\nrequire('./scales/scale.radialLinear')(Chart);\nrequire('./scales/scale.time')(Chart);\n\n// Controllers must be loaded after elements\n// See Chart.core.datasetController.dataElementType\nrequire('./controllers/controller.bar')(Chart);\nrequire('./controllers/controller.bubble')(Chart);\nrequire('./controllers/controller.doughnut')(Chart);\nrequire('./controllers/controller.line')(Chart);\nrequire('./controllers/controller.polarArea')(Chart);\nrequire('./controllers/controller.radar')(Chart);\nrequire('./controllers/controller.scatter')(Chart);\n\nrequire('./charts/Chart.Bar')(Chart);\nrequire('./charts/Chart.Bubble')(Chart);\nrequire('./charts/Chart.Doughnut')(Chart);\nrequire('./charts/Chart.Line')(Chart);\nrequire('./charts/Chart.PolarArea')(Chart);\nrequire('./charts/Chart.Radar')(Chart);\nrequire('./charts/Chart.Scatter')(Chart);\n\n// Loading built-it plugins\nvar plugins = [];\n\nplugins.push(\n\trequire('./plugins/plugin.filler')(Chart),\n\trequire('./plugins/plugin.legend')(Chart),\n\trequire('./plugins/plugin.title')(Chart)\n);\n\nChart.plugins.register(plugins);\n\nChart.platform.initialize();\n\nmodule.exports = Chart;\nif (typeof window !== 'undefined') {\n\twindow.Chart = Chart;\n}\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\n * @namespace Chart.canvasHelpers\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nChart.canvasHelpers = Chart.helpers.canvas;\n","import { UserStoreService } from '../../../services/userStore/UserStoreService';\r\n\r\nconst originalGetItem = window.Storage.prototype.getItem;\r\nconst originalSetItem = window.Storage.prototype.setItem;\r\nconst originalRemoveItem = window.Storage.prototype.removeItem;\r\n\r\nconst isWidgetItem = (key) => String(key).indexOf('Plugin_position') === 0\r\n || String(key).indexOf('Plugin_settings') === 0;\r\n\r\nwindow.Storage.prototype.getItem = function(key) {\r\n if (this === window.localStorage) {\r\n if (isWidgetItem(key)) {\r\n return UserStoreService.getInstance().getSync(key);\r\n }\r\n }\r\n \r\n return originalGetItem.call(this, key);\r\n};\r\n\r\nwindow.Storage.prototype.setItem = function(key, value) {\r\n if (this === window.localStorage) {\r\n if (isWidgetItem(key, value)) {\r\n return UserStoreService.getInstance().patch(key, value);\r\n }\r\n }\r\n \r\n return originalSetItem.call(this, key, value);\r\n};\r\n\r\nwindow.Storage.prototype.removeItem = function(key) {\r\n if (this === window.localStorage) {\r\n if (isWidgetItem(key)) {\r\n return UserStoreService.getInstance().patch(key, null);\r\n }\r\n }\r\n \r\n return originalRemoveItem.call(this, key);\r\n};\r\n","'use strict';\n\nmodule.exports = {};\nmodule.exports.Arc = require('./element.arc');\nmodule.exports.Line = require('./element.line');\nmodule.exports.Point = require('./element.point');\nmodule.exports.Rectangle = require('./element.rectangle');\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nmodule.exports = {\n\t/**\n\t * Namespace to hold generators for different types of ticks\n\t * @namespace Chart.Ticks.generators\n\t */\n\tgenerators: {\n\t\t/**\n\t\t * Interface for the options provided to the numeric tick generator\n\t\t * @interface INumericTickGenerationOptions\n\t\t */\n\t\t/**\n\t\t * The maximum number of ticks to display\n\t\t * @name INumericTickGenerationOptions#maxTicks\n\t\t * @type Number\n\t\t */\n\t\t/**\n\t\t * The distance between each tick.\n\t\t * @name INumericTickGenerationOptions#stepSize\n\t\t * @type Number\n\t\t * @optional\n\t\t */\n\t\t/**\n\t\t * Forced minimum for the ticks. If not specified, the minimum of the data range is used to calculate the tick minimum\n\t\t * @name INumericTickGenerationOptions#min\n\t\t * @type Number\n\t\t * @optional\n\t\t */\n\t\t/**\n\t\t * The maximum value of the ticks. If not specified, the maximum of the data range is used to calculate the tick maximum\n\t\t * @name INumericTickGenerationOptions#max\n\t\t * @type Number\n\t\t * @optional\n\t\t */\n\n\t\t/**\n\t\t * Generate a set of linear ticks\n\t\t * @method Chart.Ticks.generators.linear\n\t\t * @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks\n\t\t * @param dataRange {IRange} the range of the data\n\t\t * @returns {Array} array of tick values\n\t\t */\n\t\tlinear: function(generationOptions, dataRange) {\n\t\t\tvar ticks = [];\n\t\t\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t\t\t// \"nice number\" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t\t\t// for details.\n\n\t\t\tvar spacing;\n\t\t\tif (generationOptions.stepSize && generationOptions.stepSize > 0) {\n\t\t\t\tspacing = generationOptions.stepSize;\n\t\t\t} else {\n\t\t\t\tvar niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);\n\t\t\t\tspacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);\n\t\t\t}\n\t\t\tvar niceMin = Math.floor(dataRange.min / spacing) * spacing;\n\t\t\tvar niceMax = Math.ceil(dataRange.max / spacing) * spacing;\n\n\t\t\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\n\t\t\tif (generationOptions.min && generationOptions.max && generationOptions.stepSize) {\n\t\t\t\t// If very close to our whole number, use it.\n\t\t\t\tif (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {\n\t\t\t\t\tniceMin = generationOptions.min;\n\t\t\t\t\tniceMax = generationOptions.max;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar numSpaces = (niceMax - niceMin) / spacing;\n\t\t\t// If very close to our rounded value, use it.\n\t\t\tif (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\t\t\tnumSpaces = Math.round(numSpaces);\n\t\t\t} else {\n\t\t\t\tnumSpaces = Math.ceil(numSpaces);\n\t\t\t}\n\n\t\t\t// Put the values into the ticks array\n\t\t\tticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);\n\t\t\tfor (var j = 1; j < numSpaces; ++j) {\n\t\t\t\tticks.push(niceMin + (j * spacing));\n\t\t\t}\n\t\t\tticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);\n\n\t\t\treturn ticks;\n\t\t},\n\n\t\t/**\n\t\t * Generate a set of logarithmic ticks\n\t\t * @method Chart.Ticks.generators.logarithmic\n\t\t * @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks\n\t\t * @param dataRange {IRange} the range of the data\n\t\t * @returns {Array} array of tick values\n\t\t */\n\t\tlogarithmic: function(generationOptions, dataRange) {\n\t\t\tvar ticks = [];\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph\n\t\t\tvar tickVal = valueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));\n\n\t\t\tvar endExp = Math.floor(helpers.log10(dataRange.max));\n\t\t\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n\t\t\tvar exp, significand;\n\n\t\t\tif (tickVal === 0) {\n\t\t\t\texp = Math.floor(helpers.log10(dataRange.minNotZero));\n\t\t\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n\t\t\t\tticks.push(tickVal);\n\t\t\t\ttickVal = significand * Math.pow(10, exp);\n\t\t\t} else {\n\t\t\t\texp = Math.floor(helpers.log10(tickVal));\n\t\t\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tticks.push(tickVal);\n\n\t\t\t\t++significand;\n\t\t\t\tif (significand === 10) {\n\t\t\t\t\tsignificand = 1;\n\t\t\t\t\t++exp;\n\t\t\t\t}\n\n\t\t\t\ttickVal = significand * Math.pow(10, exp);\n\t\t\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\n\n\t\t\tvar lastTick = valueOrDefault(generationOptions.max, tickVal);\n\t\t\tticks.push(lastTick);\n\n\t\t\treturn ticks;\n\t\t}\n\t},\n\n\t/**\n\t * Namespace to hold formatters for different types of ticks\n\t * @namespace Chart.Ticks.formatters\n\t */\n\tformatters: {\n\t\t/**\n\t\t * Formatter for value labels\n\t\t * @method Chart.Ticks.formatters.values\n\t\t * @param value the value to display\n\t\t * @return {String|Array} the label to display\n\t\t */\n\t\tvalues: function(value) {\n\t\t\treturn helpers.isArray(value) ? value : '' + value;\n\t\t},\n\n\t\t/**\n\t\t * Formatter for linear numeric ticks\n\t\t * @method Chart.Ticks.formatters.linear\n\t\t * @param tickValue {Number} the value to be formatted\n\t\t * @param index {Number} the position of the tickValue parameter in the ticks array\n\t\t * @param ticks {Array} the list of ticks being converted\n\t\t * @return {String} string representation of the tickValue parameter\n\t\t */\n\t\tlinear: function(tickValue, index, ticks) {\n\t\t\t// If we have lots of ticks, don't use the ones\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\t\t\tif (Math.abs(delta) > 1) {\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\n\t\t\t\t\t// not an integer\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar logDelta = helpers.log10(Math.abs(delta));\n\t\t\tvar tickString = '';\n\n\t\t\tif (tickValue !== 0) {\n\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\n\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\t\t\t\ttickString = tickValue.toFixed(numDecimal);\n\t\t\t} else {\n\t\t\t\ttickString = '0'; // never show decimal places for 0\n\t\t\t}\n\n\t\t\treturn tickString;\n\t\t},\n\n\t\tlogarithmic: function(tickValue, index, ticks) {\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers.log10(tickValue))));\n\n\t\t\tif (tickValue === 0) {\n\t\t\t\treturn '0';\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n\t\t\t\treturn tickValue.toExponential();\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t}\n};\n","'use strict';\n\n/**\n * @namespace Chart.helpers\n */\nvar helpers = {\n\t/**\n\t * An empty function that can be used, for example, for optional callback.\n\t */\n\tnoop: function() {},\n\n\t/**\n\t * Returns a unique id, sequentially generated from a global variable.\n\t * @returns {Number}\n\t * @function\n\t */\n\tuid: (function() {\n\t\tvar id = 0;\n\t\treturn function() {\n\t\t\treturn id++;\n\t\t};\n\t}()),\n\n\t/**\n\t * Returns true if `value` is neither null nor undefined, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisNullOrUndef: function(value) {\n\t\treturn value === null || typeof value === 'undefined';\n\t},\n\n\t/**\n\t * Returns true if `value` is an array, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @function\n\t */\n\tisArray: Array.isArray ? Array.isArray : function(value) {\n\t\treturn Object.prototype.toString.call(value) === '[object Array]';\n\t},\n\n\t/**\n\t * Returns true if `value` is an object (excluding null), else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisObject: function(value) {\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\n\t},\n\n\t/**\n\t * Returns `value` if defined, else returns `defaultValue`.\n\t * @param {*} value - The value to return if defined.\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\n\t * @returns {*}\n\t */\n\tvalueOrDefault: function(value, defaultValue) {\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\n\t},\n\n\t/**\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n\t * @param {Array} value - The array to lookup for value at `index`.\n\t * @param {Number} index - The index in `value` to lookup for value.\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n\t * @returns {*}\n\t */\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n\t},\n\n\t/**\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n\t * @param {Function} fn - The function to call.\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @returns {*}\n\t */\n\tcallback: function(fn, args, thisArg) {\n\t\tif (fn && typeof fn.call === 'function') {\n\t\t\treturn fn.apply(thisArg, args);\n\t\t}\n\t},\n\n\t/**\n\t * Note(SB) for performance sake, this method should only be used when loopable type\n\t * is unknown or in none intensive code (not called often and small loopable). Else\n\t * it's preferable to use a regular for() loop and save extra function calls.\n\t * @param {Object|Array} loopable - The object or array to be iterated.\n\t * @param {Function} fn - The function to call for each item.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @param {Boolean} [reverse] - If true, iterates backward on the loopable.\n\t */\n\teach: function(loopable, fn, thisArg, reverse) {\n\t\tvar i, len, keys;\n\t\tif (helpers.isArray(loopable)) {\n\t\t\tlen = loopable.length;\n\t\t\tif (reverse) {\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (helpers.isObject(loopable)) {\n\t\t\tkeys = Object.keys(loopable);\n\t\t\tlen = keys.length;\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n\t * @see http://stackoverflow.com/a/14853974\n\t * @param {Array} a0 - The array to compare\n\t * @param {Array} a1 - The array to compare\n\t * @returns {Boolean}\n\t */\n\tarrayEquals: function(a0, a1) {\n\t\tvar i, ilen, v0, v1;\n\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\n\t\t\tv0 = a0[i];\n\t\t\tv1 = a1[i];\n\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (v0 !== v1) {\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\n\t * @param {*} source - The value to clone.\n\t * @returns {*}\n\t */\n\tclone: function(source) {\n\t\tif (helpers.isArray(source)) {\n\t\t\treturn source.map(helpers.clone);\n\t\t}\n\n\t\tif (helpers.isObject(source)) {\n\t\t\tvar target = {};\n\t\t\tvar keys = Object.keys(source);\n\t\t\tvar klen = keys.length;\n\t\t\tvar k = 0;\n\n\t\t\tfor (; k < klen; ++k) {\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\n\t\t\t}\n\n\t\t\treturn target;\n\t\t}\n\n\t\treturn source;\n\t},\n\n\t/**\n\t * The default merger when Chart.helpers.merge is called without merger option.\n\t * Note(SB): this method is also used by configMerge and scaleMerge as fallback.\n\t * @private\n\t */\n\t_merger: function(key, target, source, options) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.merge(tval, sval, options);\n\t\t} else {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Merges source[key] in target[key] only if target[key] is undefined.\n\t * @private\n\t */\n\t_mergerIf: function(key, target, source) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.mergeIf(tval, sval);\n\t\t} else if (!target.hasOwnProperty(key)) {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @param {Object} [options] - Merging options:\n\t * @param {Function} [options.merger] - The merge method (key, target, source, options)\n\t * @returns {Object} The `target` object.\n\t */\n\tmerge: function(target, source, options) {\n\t\tvar sources = helpers.isArray(source) ? source : [source];\n\t\tvar ilen = sources.length;\n\t\tvar merge, i, keys, klen, k;\n\n\t\tif (!helpers.isObject(target)) {\n\t\t\treturn target;\n\t\t}\n\n\t\toptions = options || {};\n\t\tmerge = options.merger || helpers._merger;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!helpers.isObject(source)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys = Object.keys(source);\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\n\t\t\t\tmerge(keys[k], target, source, options);\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @returns {Object} The `target` object.\n\t */\n\tmergeIf: function(target, source) {\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\n\t},\n\n\t/**\n\t * Applies the contents of two or more objects together into the first object.\n\t * @param {Object} target - The target object in which all objects are merged into.\n\t * @param {Object} arg1 - Object containing additional properties to merge in target.\n\t * @param {Object} argN - Additional objects containing properties to merge in target.\n\t * @returns {Object} The `target` object.\n\t */\n\textend: function(target) {\n\t\tvar setFn = function(value, key) {\n\t\t\ttarget[key] = value;\n\t\t};\n\t\tfor (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n\t\t\thelpers.each(arguments[i], setFn);\n\t\t}\n\t\treturn target;\n\t},\n\n\t/**\n\t * Basic javascript inheritance based on the model created in Backbone.js\n\t */\n\tinherits: function(extensions) {\n\t\tvar me = this;\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n\t\t\treturn me.apply(this, arguments);\n\t\t};\n\n\t\tvar Surrogate = function() {\n\t\t\tthis.constructor = ChartElement;\n\t\t};\n\n\t\tSurrogate.prototype = me.prototype;\n\t\tChartElement.prototype = new Surrogate();\n\t\tChartElement.extend = helpers.inherits;\n\n\t\tif (extensions) {\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t}\n\n\t\tChartElement.__super__ = me.prototype;\n\t\treturn ChartElement;\n\t}\n};\n\nmodule.exports = helpers;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.callback instead.\n * @function Chart.helpers.callCallback\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nhelpers.callCallback = helpers.callback;\n\n/**\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n * @function Chart.helpers.indexOf\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.indexOf = function(array, item, fromIndex) {\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\n};\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n * @function Chart.helpers.getValueOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueOrDefault = helpers.valueOrDefault;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n * @function Chart.helpers.getValueAtIndexOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n","/* MIT license */\nvar convert = require('color-convert');\nvar string = require('chartjs-color-string');\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = string.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn string.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = convert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nmodule.exports = Color;\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\n/**\n * Helper function to get relative position for an event\n * @param {Event|IEvent} event - The event to get the position for\n * @param {Chart} chart - The chart\n * @returns {Point} the event position\n */\nfunction getRelativePosition(e, chart) {\n\tif (e.native) {\n\t\treturn {\n\t\t\tx: e.x,\n\t\t\ty: e.y\n\t\t};\n\t}\n\n\treturn helpers.getRelativePosition(e, chart);\n}\n\n/**\n * Helper function to traverse all of the visible elements in the chart\n * @param chart {chart} the chart\n * @param handler {Function} the callback to execute for each visible item\n */\nfunction parseVisibleItems(chart, handler) {\n\tvar datasets = chart.data.datasets;\n\tvar meta, i, j, ilen, jlen;\n\n\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\n\t\tif (!chart.isDatasetVisible(i)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tmeta = chart.getDatasetMeta(i);\n\t\tfor (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n\t\t\tvar element = meta.data[j];\n\t\t\tif (!element._view.skip) {\n\t\t\t\thandler(element);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param items {ChartElement[]} elements to filter\n * @param position {Point} the point to be nearest to\n * @return {ChartElement[]} the nearest items\n */\nfunction getIntersectItems(chart, position) {\n\tvar elements = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (element.inRange(position.x, position.y)) {\n\t\t\telements.push(element);\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\n * @param chart {Chart} the chart to look at elements from\n * @param position {Point} the point to be nearest to\n * @param intersect {Boolean} if true, only consider items that intersect the position\n * @param distanceMetric {Function} function to provide the distance between points\n * @return {ChartElement[]} the nearest items\n */\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\n\tvar minDistance = Number.POSITIVE_INFINITY;\n\tvar nearestItems = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar center = element.getCenterPoint();\n\t\tvar distance = distanceMetric(position, center);\n\n\t\tif (distance < minDistance) {\n\t\t\tnearestItems = [element];\n\t\t\tminDistance = distance;\n\t\t} else if (distance === minDistance) {\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\n\t\t\tnearestItems.push(element);\n\t\t}\n\t});\n\n\treturn nearestItems;\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {String} axis the axis mode. x|y|xy\n */\nfunction getDistanceMetricForAxis(axis) {\n\tvar useX = axis.indexOf('x') !== -1;\n\tvar useY = axis.indexOf('y') !== -1;\n\n\treturn function(pt1, pt2) {\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n\t};\n}\n\nfunction indexMode(chart, e, options) {\n\tvar position = getRelativePosition(e, chart);\n\t// Default axis for index mode is 'x' to match old behaviour\n\toptions.axis = options.axis || 'x';\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\tvar elements = [];\n\n\tif (!items.length) {\n\t\treturn [];\n\t}\n\n\tchart.data.datasets.forEach(function(dataset, datasetIndex) {\n\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\tvar element = meta.data[items[0]._index];\n\n\t\t\t// don't count items that are skipped (null data)\n\t\t\tif (element && !element._view.skip) {\n\t\t\t\telements.push(element);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * @interface IInteractionOptions\n */\n/**\n * If true, only consider items that intersect the point\n * @name IInterfaceOptions#boolean\n * @type Boolean\n */\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nmodule.exports = {\n\t// Helper function for different modes\n\tmodes: {\n\t\tsingle: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar elements = [];\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\telements.push(element);\n\t\t\t\t\treturn elements;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn elements.slice(0, 1);\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.label\n\t\t * @deprecated since version 2.4.0\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\tlabel: indexMode,\n\n\t\t/**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tindex: indexMode,\n\n\t\t/**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tdataset: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n\t\t\tif (items.length > 0) {\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\n\t\t\t}\n\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.x-axis\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\t'x-axis': function(chart, e) {\n\t\t\treturn indexMode(chart, e, {intersect: false});\n\t\t},\n\n\t\t/**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tpoint: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\treturn getIntersectItems(chart, position);\n\t\t},\n\n\t\t/**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tnearest: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\tvar nearestItems = getNearestItems(chart, position, options.intersect, distanceMetric);\n\n\t\t\t// We have multiple items at the same distance from the event. Now sort by smallest\n\t\t\tif (nearestItems.length > 1) {\n\t\t\t\tnearestItems.sort(function(a, b) {\n\t\t\t\t\tvar sizeA = a.getArea();\n\t\t\t\t\tvar sizeB = b.getArea();\n\t\t\t\t\tvar ret = sizeA - sizeB;\n\n\t\t\t\t\tif (ret === 0) {\n\t\t\t\t\t\t// if equal sort by dataset index\n\t\t\t\t\t\tret = a._datasetIndex - b._datasetIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ret;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Return only 1 item\n\t\t\treturn nearestItems.slice(0, 1);\n\t\t},\n\n\t\t/**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tx: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inXRange(position.x)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\ty: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inYRange(position.y)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\nvar basic = require('./platform.basic');\nvar dom = require('./platform.dom');\n\n// @TODO Make possible to select another platform at build time.\nvar implementation = dom._enabled ? dom : basic;\n\n/**\n * @namespace Chart.platform\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n * @since 2.4.0\n */\nmodule.exports = helpers.extend({\n\t/**\n\t * @since 2.7.0\n\t */\n\tinitialize: function() {},\n\n\t/**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {*} item - The native item from which to acquire context (platform specific)\n\t * @param {Object} options - The chart options\n\t * @returns {CanvasRenderingContext2D} context2d instance\n\t */\n\tacquireContext: function() {},\n\n\t/**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {Boolean} true if the method succeeded, else false\n\t */\n\treleaseContext: function() {},\n\n\t/**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {String} type - The ({@link IEvent}) type to listen for\n\t * @param {Function} listener - Receives a notification (an object that implements\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\n\t */\n\taddEventListener: function() {},\n\n\t/**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart -Chart from which to remove the listener\n\t * @param {String} type - The ({@link IEvent}) type to remove\n\t * @param {Function} listener - The listener function to remove from the event target.\n\t */\n\tremoveEventListener: function() {}\n\n}, implementation);\n\n/**\n * @interface IPlatform\n * Allows abstracting platform dependencies away from the chart\n * @borrows Chart.platform.acquireContext as acquireContext\n * @borrows Chart.platform.releaseContext as releaseContext\n * @borrows Chart.platform.addEventListener as addEventListener\n * @borrows Chart.platform.removeEventListener as removeEventListener\n */\n\n/**\n * @interface IEvent\n * @prop {String} type - The event type name, possible values are:\n * 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',\n * 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'\n * @prop {*} native - The original native event (null for emulated events, e.g. 'resize')\n * @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)\n * @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)\n */\n","'use strict';\n\nvar defaults = require('./core.defaults');\n\ndefaults._set('global', {\n\tresponsive: true,\n\tresponsiveAnimationDuration: 0,\n\tmaintainAspectRatio: true,\n\tevents: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n\thover: {\n\t\tonHover: null,\n\t\tmode: 'nearest',\n\t\tintersect: true,\n\t\tanimationDuration: 400\n\t},\n\tonClick: null,\n\tdefaultColor: 'rgba(0,0,0,0.1)',\n\tdefaultFontColor: '#666',\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\tdefaultFontSize: 12,\n\tdefaultFontStyle: 'normal',\n\tshowLines: true,\n\n\t// Element defaults defined in element extensions\n\telements: {},\n\n\t// Layout options such as padding\n\tlayout: {\n\t\tpadding: {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0\n\t\t}\n\t}\n});\n\nmodule.exports = function() {\n\n\t// Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(item, config) {\n\t\tthis.construct(item, config);\n\t\treturn this;\n\t};\n\n\tChart.Chart = Chart;\n\n\treturn Chart;\n};\n","'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easingEffects\n * @see http://www.robertpenner.com/easing/\n */\nvar effects = {\n\tlinear: function(t) {\n\t\treturn t;\n\t},\n\n\teaseInQuad: function(t) {\n\t\treturn t * t;\n\t},\n\n\teaseOutQuad: function(t) {\n\t\treturn -t * (t - 2);\n\t},\n\n\teaseInOutQuad: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t;\n\t\t}\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\n\t},\n\n\teaseInCubic: function(t) {\n\t\treturn t * t * t;\n\t},\n\n\teaseOutCubic: function(t) {\n\t\treturn (t = t - 1) * t * t + 1;\n\t},\n\n\teaseInOutCubic: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\n\t},\n\n\teaseInQuart: function(t) {\n\t\treturn t * t * t * t;\n\t},\n\n\teaseOutQuart: function(t) {\n\t\treturn -((t = t - 1) * t * t * t - 1);\n\t},\n\n\teaseInOutQuart: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t;\n\t\t}\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\n\t},\n\n\teaseInQuint: function(t) {\n\t\treturn t * t * t * t * t;\n\t},\n\n\teaseOutQuint: function(t) {\n\t\treturn (t = t - 1) * t * t * t * t + 1;\n\t},\n\n\teaseInOutQuint: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n\t},\n\n\teaseInSine: function(t) {\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\n\t},\n\n\teaseOutSine: function(t) {\n\t\treturn Math.sin(t * (Math.PI / 2));\n\t},\n\n\teaseInOutSine: function(t) {\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n\t},\n\n\teaseInExpo: function(t) {\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\n\t},\n\n\teaseOutExpo: function(t) {\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\n\t},\n\n\teaseInOutExpo: function(t) {\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\n\t\t}\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\n\t},\n\n\teaseInCirc: function(t) {\n\t\tif (t >= 1) {\n\t\t\treturn t;\n\t\t}\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\n\t},\n\n\teaseOutCirc: function(t) {\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\n\t},\n\n\teaseInOutCirc: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\n\t\t}\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t},\n\n\teaseInElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t},\n\n\teaseOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n\t},\n\n\teaseInOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif ((t /= 0.5) === 2) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.45;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\tif (t < 1) {\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t}\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t},\n\teaseInBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn t * t * ((s + 1) * t - s);\n\t},\n\n\teaseOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\n\t},\n\n\teaseInOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t},\n\n\teaseInBounce: function(t) {\n\t\treturn 1 - effects.easeOutBounce(1 - t);\n\t},\n\n\teaseOutBounce: function(t) {\n\t\tif (t < (1 / 2.75)) {\n\t\t\treturn 7.5625 * t * t;\n\t\t}\n\t\tif (t < (2 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\n\t\t}\n\t\tif (t < (2.5 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\n\t\t}\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\n\t},\n\n\teaseInOutBounce: function(t) {\n\t\tif (t < 0.5) {\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\n\t\t}\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n\t}\n};\n\nmodule.exports = {\n\teffects: effects\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n * @function Chart.helpers.easingEffects\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.easingEffects = effects;\n","'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * @namespace Chart.helpers.canvas\n */\nvar exports = module.exports = {\n\t/**\n\t * Clears the entire canvas associated to the given `chart`.\n\t * @param {Chart} chart - The chart for which to clear the canvas.\n\t */\n\tclear: function(chart) {\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t},\n\n\t/**\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n\t * given size (width, height) and the same `radius` for all corners.\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n\t * @param {Number} x - The x axis of the coordinate for the rectangle starting point.\n\t * @param {Number} y - The y axis of the coordinate for the rectangle starting point.\n\t * @param {Number} width - The rectangle's width.\n\t * @param {Number} height - The rectangle's height.\n\t * @param {Number} radius - The rounded amount (in pixels) for the four corners.\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n\t */\n\troundedRect: function(ctx, x, y, width, height, radius) {\n\t\tif (radius) {\n\t\t\tvar rx = Math.min(radius, width / 2);\n\t\t\tvar ry = Math.min(radius, height / 2);\n\n\t\t\tctx.moveTo(x + rx, y);\n\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry);\n\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height);\n\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry);\n\t\t\tctx.lineTo(x, y + ry);\n\t\t\tctx.quadraticCurveTo(x, y, x + rx, y);\n\t\t} else {\n\t\t\tctx.rect(x, y, width, height);\n\t\t}\n\t},\n\n\tdrawPoint: function(ctx, style, radius, x, y) {\n\t\tvar type, edgeLength, xOffset, yOffset, height, size;\n\n\t\tif (style && typeof style === 'object') {\n\t\t\ttype = style.toString();\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\tctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (style) {\n\t\t// Default includes circle\n\t\tdefault:\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, y, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'triangle':\n\t\t\tctx.beginPath();\n\t\t\tedgeLength = 3 * radius / Math.sqrt(3);\n\t\t\theight = edgeLength * Math.sqrt(3) / 2;\n\t\t\tctx.moveTo(x - edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x + edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x, y - 2 * height / 3);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.fillRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tctx.strokeRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tbreak;\n\t\tcase 'rectRounded':\n\t\t\tvar offset = radius / Math.SQRT2;\n\t\t\tvar leftX = x - offset;\n\t\t\tvar topY = y - offset;\n\t\t\tvar sideSize = Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tthis.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius / 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rectRot':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - size, y);\n\t\t\tctx.lineTo(x, y + size);\n\t\t\tctx.lineTo(x + size, y);\n\t\t\tctx.lineTo(x, y - size);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'cross':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'crossRot':\n\t\t\tctx.beginPath();\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'star':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'dash':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\t}\n\n\t\tctx.stroke();\n\t},\n\n\tclipArea: function(ctx, area) {\n\t\tctx.save();\n\t\tctx.beginPath();\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n\t\tctx.clip();\n\t},\n\n\tunclipArea: function(ctx) {\n\t\tctx.restore();\n\t},\n\n\tlineTo: function(ctx, previous, target, flip) {\n\t\tif (target.steppedLine) {\n\t\t\tif ((target.steppedLine === 'after' && !flip) || (target.steppedLine !== 'after' && flip)) {\n\t\t\t\tctx.lineTo(previous.x, target.y);\n\t\t\t} else {\n\t\t\t\tctx.lineTo(target.x, previous.y);\n\t\t\t}\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!target.tension) {\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tctx.bezierCurveTo(\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\n\t\t\ttarget.x,\n\t\t\ttarget.y);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n * @namespace Chart.helpers.clear\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.clear = exports.clear;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n * @namespace Chart.helpers.drawRoundedRectangle\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.drawRoundedRectangle = function(ctx) {\n\tctx.beginPath();\n\texports.roundedRect.apply(exports, arguments);\n\tctx.closePath();\n};\n","'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\nmodule.exports = {\n\t/**\n\t * Converts the given line height `value` in pixels for a specific font `size`.\n\t * @param {Number|String} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n\t * @param {Number} size - The font size (in pixels) used to resolve relative `value`.\n\t * @returns {Number} The effective line height in pixels (size * 1.2 if value is invalid).\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n\t * @since 2.7.0\n\t */\n\ttoLineHeight: function(value, size) {\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\t\tif (!matches || matches[1] === 'normal') {\n\t\t\treturn size * 1.2;\n\t\t}\n\n\t\tvalue = +matches[2];\n\n\t\tswitch (matches[3]) {\n\t\tcase 'px':\n\t\t\treturn value;\n\t\tcase '%':\n\t\t\tvalue /= 100;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\treturn size * value;\n\t},\n\n\t/**\n\t * Converts the given value into a padding object with pre-computed width/height.\n\t * @param {Number|Object} value - If a number, set the value to all TRBL component,\n\t * else, if and object, use defined properties and sets undefined ones to 0.\n\t * @returns {Object} The padding values (top, right, bottom, left, width, height)\n\t * @since 2.7.0\n\t */\n\ttoPadding: function(value) {\n\t\tvar t, r, b, l;\n\n\t\tif (helpers.isObject(value)) {\n\t\t\tt = +value.top || 0;\n\t\t\tr = +value.right || 0;\n\t\t\tb = +value.bottom || 0;\n\t\t\tl = +value.left || 0;\n\t\t} else {\n\t\t\tt = r = b = l = +value || 0;\n\t\t}\n\n\t\treturn {\n\t\t\ttop: t,\n\t\t\tright: r,\n\t\t\tbottom: b,\n\t\t\tleft: l,\n\t\t\theight: t + b,\n\t\t\twidth: l + r\n\t\t};\n\t},\n\n\t/**\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\n\t * @param {Array[]} inputs - An array of values, falling back to the last value.\n\t * @param {Object} [context] - If defined and the current value is a function, the value\n\t * is called with `context` as first argument and the result becomes the new input.\n\t * @param {Number} [index] - If defined and the current value is an array, the value\n\t * at `index` become the new input.\n\t * @since 2.7.0\n\t */\n\tresolve: function(inputs, context, index) {\n\t\tvar i, ilen, value;\n\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\n\t\t\tvalue = inputs[i];\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (context !== undefined && typeof value === 'function') {\n\t\t\t\tvalue = value(context);\n\t\t\t}\n\t\t\tif (index !== undefined && helpers.isArray(value)) {\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}\n};\n","/* global window: false */\n/* global document: false */\n'use strict';\n\nvar color = require('chartjs-color');\nvar defaults = require('./core.defaults');\nvar helpers = require('../helpers/index');\n\nmodule.exports = function(Chart) {\n\n\t// -- Basic js utility methods\n\n\thelpers.configMerge = function(/* objects ... */) {\n\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\tmerger: function(key, target, source, options) {\n\t\t\t\tvar tval = target[key] || {};\n\t\t\t\tvar sval = source[key];\n\n\t\t\t\tif (key === 'scales') {\n\t\t\t\t\t// scale config merging is complex. Add our own function here for that\n\t\t\t\t\ttarget[key] = helpers.scaleMerge(tval, sval);\n\t\t\t\t} else if (key === 'scale') {\n\t\t\t\t\t// used in polar area & radar charts since there is only one scale\n\t\t\t\t\ttarget[key] = helpers.merge(tval, [Chart.scaleService.getScaleDefaults(sval.type), sval]);\n\t\t\t\t} else {\n\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\thelpers.scaleMerge = function(/* objects ... */) {\n\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\tmerger: function(key, target, source, options) {\n\t\t\t\tif (key === 'xAxes' || key === 'yAxes') {\n\t\t\t\t\tvar slen = source[key].length;\n\t\t\t\t\tvar i, type, scale;\n\n\t\t\t\t\tif (!target[key]) {\n\t\t\t\t\t\ttarget[key] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0; i < slen; ++i) {\n\t\t\t\t\t\tscale = source[key][i];\n\t\t\t\t\t\ttype = helpers.valueOrDefault(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n\t\t\t\t\t\tif (i >= target[key].length) {\n\t\t\t\t\t\t\ttarget[key].push({});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\n\t\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\n\t\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\n\t\t\t\t\t\t\thelpers.merge(target[key][i], [Chart.scaleService.getScaleDefaults(type), scale]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// scales type are the same\n\t\t\t\t\t\t\thelpers.merge(target[key][i], scale);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\thelpers.where = function(collection, filterCallback) {\n\t\tif (helpers.isArray(collection) && Array.prototype.filter) {\n\t\t\treturn collection.filter(filterCallback);\n\t\t}\n\t\tvar filtered = [];\n\n\t\thelpers.each(collection, function(item) {\n\t\t\tif (filterCallback(item)) {\n\t\t\t\tfiltered.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn filtered;\n\t};\n\thelpers.findIndex = Array.prototype.findIndex ?\n\t\tfunction(array, callback, scope) {\n\t\t\treturn array.findIndex(callback, scope);\n\t\t} :\n\t\tfunction(array, callback, scope) {\n\t\t\tscope = scope === undefined ? array : scope;\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\thelpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to start of the array\n\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = -1;\n\t\t}\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to end of the array\n\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = arrayToSearch.length;\n\t\t}\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\n\t// -- Math methods\n\thelpers.isNumber = function(n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t};\n\thelpers.almostEquals = function(x, y, epsilon) {\n\t\treturn Math.abs(x - y) < epsilon;\n\t};\n\thelpers.almostWhole = function(x, epsilon) {\n\t\tvar rounded = Math.round(x);\n\t\treturn (((rounded - epsilon) < x) && ((rounded + epsilon) > x));\n\t};\n\thelpers.max = function(array) {\n\t\treturn array.reduce(function(max, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.max(max, value);\n\t\t\t}\n\t\t\treturn max;\n\t\t}, Number.NEGATIVE_INFINITY);\n\t};\n\thelpers.min = function(array) {\n\t\treturn array.reduce(function(min, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.min(min, value);\n\t\t\t}\n\t\t\treturn min;\n\t\t}, Number.POSITIVE_INFINITY);\n\t};\n\thelpers.sign = Math.sign ?\n\t\tfunction(x) {\n\t\t\treturn Math.sign(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tx = +x; // convert to a number\n\t\t\tif (x === 0 || isNaN(x)) {\n\t\t\t\treturn x;\n\t\t\t}\n\t\t\treturn x > 0 ? 1 : -1;\n\t\t};\n\thelpers.log10 = Math.log10 ?\n\t\tfunction(x) {\n\t\t\treturn Math.log10(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\treturn Math.log(x) / Math.LN10;\n\t\t};\n\thelpers.toRadians = function(degrees) {\n\t\treturn degrees * (Math.PI / 180);\n\t};\n\thelpers.toDegrees = function(radians) {\n\t\treturn radians * (180 / Math.PI);\n\t};\n\t// Gets the angle from vertical upright to the point about a centre.\n\thelpers.getAngleFromPoint = function(centrePoint, anglePoint) {\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\tif (angle < (-0.5 * Math.PI)) {\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n\t\t}\n\n\t\treturn {\n\t\t\tangle: angle,\n\t\t\tdistance: radialDistanceFromCenter\n\t\t};\n\t};\n\thelpers.distanceBetweenPoints = function(pt1, pt2) {\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n\t};\n\thelpers.aliasPixel = function(pixelWidth) {\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t};\n\thelpers.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n\t\t// This function must also respect \"skipped\" points\n\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\n\t\tvar current = middlePoint;\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\n\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n\t\tvar s01 = d01 / (d01 + d12);\n\t\tvar s12 = d12 / (d01 + d12);\n\n\t\t// If all points are the same, s01 & s02 will be inf\n\t\ts01 = isNaN(s01) ? 0 : s01;\n\t\ts12 = isNaN(s12) ? 0 : s12;\n\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\n\t\tvar fb = t * s12;\n\n\t\treturn {\n\t\t\tprevious: {\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\n\t\t\t},\n\t\t\tnext: {\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\n\t\t\t}\n\t\t};\n\t};\n\thelpers.EPSILON = Number.EPSILON || 1e-14;\n\thelpers.splineCurveMonotone = function(points) {\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\n\t\t// between the dataset discrete points due to the interpolation.\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\n\t\t\treturn {\n\t\t\t\tmodel: point._model,\n\t\t\t\tdeltaK: 0,\n\t\t\t\tmK: 0\n\t\t\t};\n\t\t});\n\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\n\t\tvar pointsLen = pointsWithTangents.length;\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\n\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n\t\t\t}\n\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n\t\t\t\tpointCurrent.mK = 0;\n\t\t\t} else {\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n\t\t\t}\n\t\t}\n\n\t\t// Adjust tangents to ensure monotonic properties\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tpointAfter = pointsWithTangents[i + 1];\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\t\t\tif (squaredMagnitude <= 9) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n\t\t}\n\n\t\t// Compute control points\n\t\tvar deltaX;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.nextItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\n\t\t}\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n\t};\n\thelpers.previousItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n\t\t}\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\n\t};\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\n\thelpers.niceNum = function(range, round) {\n\t\tvar exponent = Math.floor(helpers.log10(range));\n\t\tvar fraction = range / Math.pow(10, exponent);\n\t\tvar niceFraction;\n\n\t\tif (round) {\n\t\t\tif (fraction < 1.5) {\n\t\t\t\tniceFraction = 1;\n\t\t\t} else if (fraction < 3) {\n\t\t\t\tniceFraction = 2;\n\t\t\t} else if (fraction < 7) {\n\t\t\t\tniceFraction = 5;\n\t\t\t} else {\n\t\t\t\tniceFraction = 10;\n\t\t\t}\n\t\t} else if (fraction <= 1.0) {\n\t\t\tniceFraction = 1;\n\t\t} else if (fraction <= 2) {\n\t\t\tniceFraction = 2;\n\t\t} else if (fraction <= 5) {\n\t\t\tniceFraction = 5;\n\t\t} else {\n\t\t\tniceFraction = 10;\n\t\t}\n\n\t\treturn niceFraction * Math.pow(10, exponent);\n\t};\n\t// Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\thelpers.requestAnimFrame = (function() {\n\t\tif (typeof window === 'undefined') {\n\t\t\treturn function(callback) {\n\t\t\t\tcallback();\n\t\t\t};\n\t\t}\n\t\treturn window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t};\n\t}());\n\t// -- DOM methods\n\thelpers.getRelativePosition = function(evt, chart) {\n\t\tvar mouseX, mouseY;\n\t\tvar e = evt.originalEvent || evt;\n\t\tvar canvas = evt.currentTarget || evt.srcElement;\n\t\tvar boundingRect = canvas.getBoundingClientRect();\n\n\t\tvar touches = e.touches;\n\t\tif (touches && touches.length > 0) {\n\t\t\tmouseX = touches[0].clientX;\n\t\t\tmouseY = touches[0].clientY;\n\n\t\t} else {\n\t\t\tmouseX = e.clientX;\n\t\t\tmouseY = e.clientY;\n\t\t}\n\n\t\t// Scale mouse coordinates into canvas coordinates\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\n\t\t// http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\t\tvar paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));\n\t\tvar paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));\n\t\tvar paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));\n\t\tvar paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\n\n\t\treturn {\n\t\t\tx: mouseX,\n\t\t\ty: mouseY\n\t\t};\n\n\t};\n\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\n\t\tvar valueInPixels;\n\t\tif (typeof styleValue === 'string') {\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\n\n\t\t\tif (styleValue.indexOf('%') !== -1) {\n\t\t\t\t// percentage * size in dimension\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n\t\t\t}\n\t\t} else {\n\t\t\tvalueInPixels = styleValue;\n\t\t}\n\n\t\treturn valueInPixels;\n\t}\n\n\t/**\n\t * Returns if the given value contains an effective constraint.\n\t * @private\n\t */\n\tfunction isConstrainedValue(value) {\n\t\treturn value !== undefined && value !== null && value !== 'none';\n\t}\n\n\t// Private helper to get a constraint dimension\n\t// @param domNode : the node to check the constraint on\n\t// @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)\n\t// @param percentageProperty : property of parent to use when calculating width as a percentage\n\t// @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\n\t\tvar view = document.defaultView;\n\t\tvar parentNode = domNode.parentNode;\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\n\t\tvar infinity = Number.POSITIVE_INFINITY;\n\n\t\tif (hasCNode || hasCContainer) {\n\t\t\treturn Math.min(\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n\t\t}\n\n\t\treturn 'none';\n\t}\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintWidth = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\n\t};\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintHeight = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\n\t};\n\thelpers.getMaximumWidth = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tif (!container) {\n\t\t\treturn domNode.clientWidth;\n\t\t}\n\n\t\tvar paddingLeft = parseInt(helpers.getStyle(container, 'padding-left'), 10);\n\t\tvar paddingRight = parseInt(helpers.getStyle(container, 'padding-right'), 10);\n\t\tvar w = container.clientWidth - paddingLeft - paddingRight;\n\t\tvar cw = helpers.getConstraintWidth(domNode);\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\n\t};\n\thelpers.getMaximumHeight = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tif (!container) {\n\t\t\treturn domNode.clientHeight;\n\t\t}\n\n\t\tvar paddingTop = parseInt(helpers.getStyle(container, 'padding-top'), 10);\n\t\tvar paddingBottom = parseInt(helpers.getStyle(container, 'padding-bottom'), 10);\n\t\tvar h = container.clientHeight - paddingTop - paddingBottom;\n\t\tvar ch = helpers.getConstraintHeight(domNode);\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\n\t};\n\thelpers.getStyle = function(el, property) {\n\t\treturn el.currentStyle ?\n\t\t\tel.currentStyle[property] :\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t};\n\thelpers.retinaScale = function(chart, forceRatio) {\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || window.devicePixelRatio || 1;\n\t\tif (pixelRatio === 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar canvas = chart.canvas;\n\t\tvar height = chart.height;\n\t\tvar width = chart.width;\n\n\t\tcanvas.height = height * pixelRatio;\n\t\tcanvas.width = width * pixelRatio;\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\n\n\t\t// If no style has been set on the canvas, the render size is used as display size,\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\n\t\tcanvas.style.height = height + 'px';\n\t\tcanvas.style.width = width + 'px';\n\t};\n\t// -- Canvas methods\n\thelpers.fontString = function(pixelSize, fontStyle, fontFamily) {\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n\t};\n\thelpers.longestText = function(ctx, font, arrayOfThings, cache) {\n\t\tcache = cache || {};\n\t\tvar data = cache.data = cache.data || {};\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\n\n\t\tif (cache.font !== font) {\n\t\t\tdata = cache.data = {};\n\t\t\tgc = cache.garbageCollect = [];\n\t\t\tcache.font = font;\n\t\t}\n\n\t\tctx.font = font;\n\t\tvar longest = 0;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\t// Undefined strings and arrays should not be measured\n\t\t\tif (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {\n\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, thing);\n\t\t\t} else if (helpers.isArray(thing)) {\n\t\t\t\t// if it is an array lets measure each element\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\n\t\t\t\thelpers.each(thing, function(nestedThing) {\n\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {\n\t\t\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, nestedThing);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tvar gcLen = gc.length / 2;\n\t\tif (gcLen > arrayOfThings.length) {\n\t\t\tfor (var i = 0; i < gcLen; i++) {\n\t\t\t\tdelete data[gc[i]];\n\t\t\t}\n\t\t\tgc.splice(0, gcLen);\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.measureText = function(ctx, data, gc, longest, string) {\n\t\tvar textWidth = data[string];\n\t\tif (!textWidth) {\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\n\t\t\tgc.push(string);\n\t\t}\n\t\tif (textWidth > longest) {\n\t\t\tlongest = textWidth;\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.numberOfLabelLines = function(arrayOfThings) {\n\t\tvar numberOfLines = 1;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\tif (helpers.isArray(thing)) {\n\t\t\t\tif (thing.length > numberOfLines) {\n\t\t\t\t\tnumberOfLines = thing.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn numberOfLines;\n\t};\n\n\thelpers.color = !color ?\n\t\tfunction(value) {\n\t\t\tconsole.error('Color.js not found!');\n\t\t\treturn value;\n\t\t} :\n\t\tfunction(value) {\n\t\t\t/* global CanvasGradient */\n\t\t\tif (value instanceof CanvasGradient) {\n\t\t\t\tvalue = defaults.global.defaultColor;\n\t\t\t}\n\n\t\t\treturn color(value);\n\t\t};\n\n\thelpers.getHoverColor = function(colorValue) {\n\t\t/* global CanvasPattern */\n\t\treturn (colorValue instanceof CanvasPattern) ?\n\t\t\tcolorValue :\n\t\t\thelpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n\t};\n};\n","var conversions = require(\"./conversions\");\n\nvar convert = function() {\n return new Converter();\n}\n\nfor (var func in conversions) {\n // export Raw versions\n convert[func + \"Raw\"] = (function(func) {\n // accept array or plain args\n return function(arg) {\n if (typeof arg == \"number\")\n arg = Array.prototype.slice.call(arguments);\n return conversions[func](arg);\n }\n })(func);\n\n var pair = /(\\w+)2(\\w+)/.exec(func),\n from = pair[1],\n to = pair[2];\n\n // export rgb2hsl and [\"rgb\"][\"hsl\"]\n convert[from] = convert[from] || {};\n\n convert[from][to] = convert[func] = (function(func) { \n return function(arg) {\n if (typeof arg == \"number\")\n arg = Array.prototype.slice.call(arguments);\n \n var val = conversions[func](arg);\n if (typeof val == \"string\" || val === undefined)\n return val; // keyword\n\n for (var i = 0; i < val.length; i++)\n val[i] = Math.round(val[i]);\n return val;\n }\n })(func);\n}\n\n\n/* Converter does lazy conversion and caching */\nvar Converter = function() {\n this.convs = {};\n};\n\n/* Either get the values for a space or\n set the values for a space, depending on args */\nConverter.prototype.routeSpace = function(space, args) {\n var values = args[0];\n if (values === undefined) {\n // color.rgb()\n return this.getValues(space);\n }\n // color.rgb(10, 10, 10)\n if (typeof values == \"number\") {\n values = Array.prototype.slice.call(args); \n }\n\n return this.setValues(space, values);\n};\n \n/* Set the values for a space, invalidating cache */\nConverter.prototype.setValues = function(space, values) {\n this.space = space;\n this.convs = {};\n this.convs[space] = values;\n return this;\n};\n\n/* Get the values for a space. If there's already\n a conversion for the space, fetch it, otherwise\n compute it */\nConverter.prototype.getValues = function(space) {\n var vals = this.convs[space];\n if (!vals) {\n var fspace = this.space,\n from = this.convs[fspace];\n vals = convert[fspace][space](from);\n\n this.convs[space] = vals;\n }\n return vals;\n};\n\n[\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function(space) {\n Converter.prototype[space] = function(vals) {\n return this.routeSpace(space, arguments);\n }\n});\n\nmodule.exports = convert;","/* MIT license */\n\nmodule.exports = {\n rgb2hsl: rgb2hsl,\n rgb2hsv: rgb2hsv,\n rgb2hwb: rgb2hwb,\n rgb2cmyk: rgb2cmyk,\n rgb2keyword: rgb2keyword,\n rgb2xyz: rgb2xyz,\n rgb2lab: rgb2lab,\n rgb2lch: rgb2lch,\n\n hsl2rgb: hsl2rgb,\n hsl2hsv: hsl2hsv,\n hsl2hwb: hsl2hwb,\n hsl2cmyk: hsl2cmyk,\n hsl2keyword: hsl2keyword,\n\n hsv2rgb: hsv2rgb,\n hsv2hsl: hsv2hsl,\n hsv2hwb: hsv2hwb,\n hsv2cmyk: hsv2cmyk,\n hsv2keyword: hsv2keyword,\n\n hwb2rgb: hwb2rgb,\n hwb2hsl: hwb2hsl,\n hwb2hsv: hwb2hsv,\n hwb2cmyk: hwb2cmyk,\n hwb2keyword: hwb2keyword,\n\n cmyk2rgb: cmyk2rgb,\n cmyk2hsl: cmyk2hsl,\n cmyk2hsv: cmyk2hsv,\n cmyk2hwb: cmyk2hwb,\n cmyk2keyword: cmyk2keyword,\n\n keyword2rgb: keyword2rgb,\n keyword2hsl: keyword2hsl,\n keyword2hsv: keyword2hsv,\n keyword2hwb: keyword2hwb,\n keyword2cmyk: keyword2cmyk,\n keyword2lab: keyword2lab,\n keyword2xyz: keyword2xyz,\n\n xyz2rgb: xyz2rgb,\n xyz2lab: xyz2lab,\n xyz2lch: xyz2lch,\n\n lab2xyz: lab2xyz,\n lab2rgb: lab2rgb,\n lab2lch: lab2lch,\n\n lch2lab: lch2lab,\n lch2xyz: lch2xyz,\n lch2rgb: lch2rgb\n}\n\n\nfunction rgb2hsl(rgb) {\n var r = rgb[0]/255,\n g = rgb[1]/255,\n b = rgb[2]/255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s, l;\n\n if (max == min)\n h = 0;\n else if (r == max)\n h = (g - b) / delta;\n else if (g == max)\n h = 2 + (b - r) / delta;\n else if (b == max)\n h = 4 + (r - g)/ delta;\n\n h = Math.min(h * 60, 360);\n\n if (h < 0)\n h += 360;\n\n l = (min + max) / 2;\n\n if (max == min)\n s = 0;\n else if (l <= 0.5)\n s = delta / (max + min);\n else\n s = delta / (2 - max - min);\n\n return [h, s * 100, l * 100];\n}\n\nfunction rgb2hsv(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s, v;\n\n if (max == 0)\n s = 0;\n else\n s = (delta/max * 1000)/10;\n\n if (max == min)\n h = 0;\n else if (r == max)\n h = (g - b) / delta;\n else if (g == max)\n h = 2 + (b - r) / delta;\n else if (b == max)\n h = 4 + (r - g) / delta;\n\n h = Math.min(h * 60, 360);\n\n if (h < 0)\n h += 360;\n\n v = ((max / 255) * 1000) / 10;\n\n return [h, s, v];\n}\n\nfunction rgb2hwb(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n h = rgb2hsl(rgb)[0],\n w = 1/255 * Math.min(r, Math.min(g, b)),\n b = 1 - 1/255 * Math.max(r, Math.max(g, b));\n\n return [h, w * 100, b * 100];\n}\n\nfunction rgb2cmyk(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255,\n c, m, y, k;\n\n k = Math.min(1 - r, 1 - g, 1 - b);\n c = (1 - r - k) / (1 - k) || 0;\n m = (1 - g - k) / (1 - k) || 0;\n y = (1 - b - k) / (1 - k) || 0;\n return [c * 100, m * 100, y * 100, k * 100];\n}\n\nfunction rgb2keyword(rgb) {\n return reverseKeywords[JSON.stringify(rgb)];\n}\n\nfunction rgb2xyz(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255;\n\n // assume sRGB\n r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n return [x * 100, y *100, z * 100];\n}\n\nfunction rgb2lab(rgb) {\n var xyz = rgb2xyz(rgb),\n x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l, a, b;\n\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n\n x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n l = (116 * y) - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n\n return [l, a, b];\n}\n\nfunction rgb2lch(args) {\n return lab2lch(rgb2lab(args));\n}\n\nfunction hsl2rgb(hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1, t2, t3, rgb, val;\n\n if (s == 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5)\n t2 = l * (1 + s);\n else\n t2 = l + s - l * s;\n t1 = 2 * l - t2;\n\n rgb = [0, 0, 0];\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * - (i - 1);\n t3 < 0 && t3++;\n t3 > 1 && t3--;\n\n if (6 * t3 < 1)\n val = t1 + (t2 - t1) * 6 * t3;\n else if (2 * t3 < 1)\n val = t2;\n else if (3 * t3 < 2)\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n else\n val = t1;\n\n rgb[i] = val * 255;\n }\n\n return rgb;\n}\n\nfunction hsl2hsv(hsl) {\n var h = hsl[0],\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n sv, v;\n\n if(l === 0) {\n // no need to do calc on black\n // also avoids divide by 0 error\n return [0, 0, 0];\n }\n\n l *= 2;\n s *= (l <= 1) ? l : 2 - l;\n v = (l + s) / 2;\n sv = (2 * s) / (l + s);\n return [h, sv * 100, v * 100];\n}\n\nfunction hsl2hwb(args) {\n return rgb2hwb(hsl2rgb(args));\n}\n\nfunction hsl2cmyk(args) {\n return rgb2cmyk(hsl2rgb(args));\n}\n\nfunction hsl2keyword(args) {\n return rgb2keyword(hsl2rgb(args));\n}\n\n\nfunction hsv2rgb(hsv) {\n var h = hsv[0] / 60,\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n hi = Math.floor(h) % 6;\n\n var f = h - Math.floor(h),\n p = 255 * v * (1 - s),\n q = 255 * v * (1 - (s * f)),\n t = 255 * v * (1 - (s * (1 - f))),\n v = 255 * v;\n\n switch(hi) {\n case 0:\n return [v, t, p];\n case 1:\n return [q, v, p];\n case 2:\n return [p, v, t];\n case 3:\n return [p, q, v];\n case 4:\n return [t, p, v];\n case 5:\n return [v, p, q];\n }\n}\n\nfunction hsv2hsl(hsv) {\n var h = hsv[0],\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n sl, l;\n\n l = (2 - s) * v;\n sl = s * v;\n sl /= (l <= 1) ? l : 2 - l;\n sl = sl || 0;\n l /= 2;\n return [h, sl * 100, l * 100];\n}\n\nfunction hsv2hwb(args) {\n return rgb2hwb(hsv2rgb(args))\n}\n\nfunction hsv2cmyk(args) {\n return rgb2cmyk(hsv2rgb(args));\n}\n\nfunction hsv2keyword(args) {\n return rgb2keyword(hsv2rgb(args));\n}\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nfunction hwb2rgb(hwb) {\n var h = hwb[0] / 360,\n wh = hwb[1] / 100,\n bl = hwb[2] / 100,\n ratio = wh + bl,\n i, v, f, n;\n\n // wh + bl cant be > 1\n if (ratio > 1) {\n wh /= ratio;\n bl /= ratio;\n }\n\n i = Math.floor(6 * h);\n v = 1 - bl;\n f = 6 * h - i;\n if ((i & 0x01) != 0) {\n f = 1 - f;\n }\n n = wh + f * (v - wh); // linear interpolation\n\n switch (i) {\n default:\n case 6:\n case 0: r = v; g = n; b = wh; break;\n case 1: r = n; g = v; b = wh; break;\n case 2: r = wh; g = v; b = n; break;\n case 3: r = wh; g = n; b = v; break;\n case 4: r = n; g = wh; b = v; break;\n case 5: r = v; g = wh; b = n; break;\n }\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction hwb2hsl(args) {\n return rgb2hsl(hwb2rgb(args));\n}\n\nfunction hwb2hsv(args) {\n return rgb2hsv(hwb2rgb(args));\n}\n\nfunction hwb2cmyk(args) {\n return rgb2cmyk(hwb2rgb(args));\n}\n\nfunction hwb2keyword(args) {\n return rgb2keyword(hwb2rgb(args));\n}\n\nfunction cmyk2rgb(cmyk) {\n var c = cmyk[0] / 100,\n m = cmyk[1] / 100,\n y = cmyk[2] / 100,\n k = cmyk[3] / 100,\n r, g, b;\n\n r = 1 - Math.min(1, c * (1 - k) + k);\n g = 1 - Math.min(1, m * (1 - k) + k);\n b = 1 - Math.min(1, y * (1 - k) + k);\n return [r * 255, g * 255, b * 255];\n}\n\nfunction cmyk2hsl(args) {\n return rgb2hsl(cmyk2rgb(args));\n}\n\nfunction cmyk2hsv(args) {\n return rgb2hsv(cmyk2rgb(args));\n}\n\nfunction cmyk2hwb(args) {\n return rgb2hwb(cmyk2rgb(args));\n}\n\nfunction cmyk2keyword(args) {\n return rgb2keyword(cmyk2rgb(args));\n}\n\n\nfunction xyz2rgb(xyz) {\n var x = xyz[0] / 100,\n y = xyz[1] / 100,\n z = xyz[2] / 100,\n r, g, b;\n\n r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n // assume sRGB\n r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n : r = (r * 12.92);\n\n g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n : g = (g * 12.92);\n\n b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n : b = (b * 12.92);\n\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction xyz2lab(xyz) {\n var x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l, a, b;\n\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n\n x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n l = (116 * y) - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n\n return [l, a, b];\n}\n\nfunction xyz2lch(args) {\n return lab2lch(xyz2lab(args));\n}\n\nfunction lab2xyz(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n x, y, z, y2;\n\n if (l <= 8) {\n y = (l * 100) / 903.3;\n y2 = (7.787 * (y / 100)) + (16 / 116);\n } else {\n y = 100 * Math.pow((l + 16) / 116, 3);\n y2 = Math.pow(y / 100, 1/3);\n }\n\n x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\n\n z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\n\n return [x, y, z];\n}\n\nfunction lab2lch(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n hr, h, c;\n\n hr = Math.atan2(b, a);\n h = hr * 360 / 2 / Math.PI;\n if (h < 0) {\n h += 360;\n }\n c = Math.sqrt(a * a + b * b);\n return [l, c, h];\n}\n\nfunction lab2rgb(args) {\n return xyz2rgb(lab2xyz(args));\n}\n\nfunction lch2lab(lch) {\n var l = lch[0],\n c = lch[1],\n h = lch[2],\n a, b, hr;\n\n hr = h / 360 * 2 * Math.PI;\n a = c * Math.cos(hr);\n b = c * Math.sin(hr);\n return [l, a, b];\n}\n\nfunction lch2xyz(args) {\n return lab2xyz(lch2lab(args));\n}\n\nfunction lch2rgb(args) {\n return lab2rgb(lch2lab(args));\n}\n\nfunction keyword2rgb(keyword) {\n return cssKeywords[keyword];\n}\n\nfunction keyword2hsl(args) {\n return rgb2hsl(keyword2rgb(args));\n}\n\nfunction keyword2hsv(args) {\n return rgb2hsv(keyword2rgb(args));\n}\n\nfunction keyword2hwb(args) {\n return rgb2hwb(keyword2rgb(args));\n}\n\nfunction keyword2cmyk(args) {\n return rgb2cmyk(keyword2rgb(args));\n}\n\nfunction keyword2lab(args) {\n return rgb2lab(keyword2rgb(args));\n}\n\nfunction keyword2xyz(args) {\n return rgb2xyz(keyword2rgb(args));\n}\n\nvar cssKeywords = {\n aliceblue: [240,248,255],\n antiquewhite: [250,235,215],\n aqua: [0,255,255],\n aquamarine: [127,255,212],\n azure: [240,255,255],\n beige: [245,245,220],\n bisque: [255,228,196],\n black: [0,0,0],\n blanchedalmond: [255,235,205],\n blue: [0,0,255],\n blueviolet: [138,43,226],\n brown: [165,42,42],\n burlywood: [222,184,135],\n cadetblue: [95,158,160],\n chartreuse: [127,255,0],\n chocolate: [210,105,30],\n coral: [255,127,80],\n cornflowerblue: [100,149,237],\n cornsilk: [255,248,220],\n crimson: [220,20,60],\n cyan: [0,255,255],\n darkblue: [0,0,139],\n darkcyan: [0,139,139],\n darkgoldenrod: [184,134,11],\n darkgray: [169,169,169],\n darkgreen: [0,100,0],\n darkgrey: [169,169,169],\n darkkhaki: [189,183,107],\n darkmagenta: [139,0,139],\n darkolivegreen: [85,107,47],\n darkorange: [255,140,0],\n darkorchid: [153,50,204],\n darkred: [139,0,0],\n darksalmon: [233,150,122],\n darkseagreen: [143,188,143],\n darkslateblue: [72,61,139],\n darkslategray: [47,79,79],\n darkslategrey: [47,79,79],\n darkturquoise: [0,206,209],\n darkviolet: [148,0,211],\n deeppink: [255,20,147],\n deepskyblue: [0,191,255],\n dimgray: [105,105,105],\n dimgrey: [105,105,105],\n dodgerblue: [30,144,255],\n firebrick: [178,34,34],\n floralwhite: [255,250,240],\n forestgreen: [34,139,34],\n fuchsia: [255,0,255],\n gainsboro: [220,220,220],\n ghostwhite: [248,248,255],\n gold: [255,215,0],\n goldenrod: [218,165,32],\n gray: [128,128,128],\n green: [0,128,0],\n greenyellow: [173,255,47],\n grey: [128,128,128],\n honeydew: [240,255,240],\n hotpink: [255,105,180],\n indianred: [205,92,92],\n indigo: [75,0,130],\n ivory: [255,255,240],\n khaki: [240,230,140],\n lavender: [230,230,250],\n lavenderblush: [255,240,245],\n lawngreen: [124,252,0],\n lemonchiffon: [255,250,205],\n lightblue: [173,216,230],\n lightcoral: [240,128,128],\n lightcyan: [224,255,255],\n lightgoldenrodyellow: [250,250,210],\n lightgray: [211,211,211],\n lightgreen: [144,238,144],\n lightgrey: [211,211,211],\n lightpink: [255,182,193],\n lightsalmon: [255,160,122],\n lightseagreen: [32,178,170],\n lightskyblue: [135,206,250],\n lightslategray: [119,136,153],\n lightslategrey: [119,136,153],\n lightsteelblue: [176,196,222],\n lightyellow: [255,255,224],\n lime: [0,255,0],\n limegreen: [50,205,50],\n linen: [250,240,230],\n magenta: [255,0,255],\n maroon: [128,0,0],\n mediumaquamarine: [102,205,170],\n mediumblue: [0,0,205],\n mediumorchid: [186,85,211],\n mediumpurple: [147,112,219],\n mediumseagreen: [60,179,113],\n mediumslateblue: [123,104,238],\n mediumspringgreen: [0,250,154],\n mediumturquoise: [72,209,204],\n mediumvioletred: [199,21,133],\n midnightblue: [25,25,112],\n mintcream: [245,255,250],\n mistyrose: [255,228,225],\n moccasin: [255,228,181],\n navajowhite: [255,222,173],\n navy: [0,0,128],\n oldlace: [253,245,230],\n olive: [128,128,0],\n olivedrab: [107,142,35],\n orange: [255,165,0],\n orangered: [255,69,0],\n orchid: [218,112,214],\n palegoldenrod: [238,232,170],\n palegreen: [152,251,152],\n paleturquoise: [175,238,238],\n palevioletred: [219,112,147],\n papayawhip: [255,239,213],\n peachpuff: [255,218,185],\n peru: [205,133,63],\n pink: [255,192,203],\n plum: [221,160,221],\n powderblue: [176,224,230],\n purple: [128,0,128],\n rebeccapurple: [102, 51, 153],\n red: [255,0,0],\n rosybrown: [188,143,143],\n royalblue: [65,105,225],\n saddlebrown: [139,69,19],\n salmon: [250,128,114],\n sandybrown: [244,164,96],\n seagreen: [46,139,87],\n seashell: [255,245,238],\n sienna: [160,82,45],\n silver: [192,192,192],\n skyblue: [135,206,235],\n slateblue: [106,90,205],\n slategray: [112,128,144],\n slategrey: [112,128,144],\n snow: [255,250,250],\n springgreen: [0,255,127],\n steelblue: [70,130,180],\n tan: [210,180,140],\n teal: [0,128,128],\n thistle: [216,191,216],\n tomato: [255,99,71],\n turquoise: [64,224,208],\n violet: [238,130,238],\n wheat: [245,222,179],\n white: [255,255,255],\n whitesmoke: [245,245,245],\n yellow: [255,255,0],\n yellowgreen: [154,205,50]\n};\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n}\n","/* MIT license */\nvar colorNames = require('color-name');\n\nmodule.exports = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n}\n\nfunction getRgba(string) {\n if (!string) {\n return;\n }\n var abbr = /^#([a-fA-F0-9]{3})$/i,\n hex = /^#([a-fA-F0-9]{6})$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr);\n if (match) {\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n }\n else if (match = string.match(hex)) {\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n }\n else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n rgb = colorNames[match[1]];\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n if (!a && a != 0) {\n a = 1;\n }\n else {\n a = scale(a, 0, 1);\n }\n rgb[3] = a;\n return rgb;\n}\n\nfunction getHsla(string) {\n if (!string) {\n return;\n }\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n}\n\nfunction getHwb(string) {\n if (!string) {\n return;\n }\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n}\n\nfunction getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n var vals = getRgba(string);\n if (vals) {\n return vals[3];\n }\n else if (vals = getHsla(string)) {\n return vals[3];\n }\n else if (vals = getHwb(string)) {\n return vals[3];\n }\n}\n\n// generators\nfunction hexString(rgb) {\n return \"#\" + hexDouble(rgb[0]) + hexDouble(rgb[1])\n + hexDouble(rgb[2]);\n}\n\nfunction rgbString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return rgbaString(rgba, alpha);\n }\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n }\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return percentaString(rgba, alpha);\n }\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n return hslaString(hsla, alpha);\n }\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n }\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n }\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorNames) {\n reverseNames[colorNames[name]] = name;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\telements: {\n\t\tarc: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: '#fff',\n\t\t\tborderWidth: 2\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tinLabelRange: function(mouseX) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n\t\t}\n\t\treturn false;\n\t},\n\n\tinRange: function(chartX, chartY) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(vm, {x: chartX, y: chartY});\n\t\t\tvar\tangle = pointRelativePosition.angle;\n\t\t\tvar distance = pointRelativePosition.distance;\n\n\t\t\t// Sanitise angle range\n\t\t\tvar startAngle = vm.startAngle;\n\t\t\tvar endAngle = vm.endAngle;\n\t\t\twhile (endAngle < startAngle) {\n\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle > endAngle) {\n\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle < startAngle) {\n\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t}\n\n\t\t\t// Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t}\n\t\treturn false;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n\t\treturn {\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n\t\treturn {\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t};\n\t},\n\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar sA = vm.startAngle;\n\t\tvar eA = vm.endAngle;\n\n\t\tctx.beginPath();\n\n\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\n\t\tctx.closePath();\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = vm.borderWidth;\n\n\t\tctx.fillStyle = vm.backgroundColor;\n\n\t\tctx.fill();\n\t\tctx.lineJoin = 'bevel';\n\n\t\tif (vm.borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t}\n});\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\nvar globalDefaults = defaults.global;\n\ndefaults._set('global', {\n\telements: {\n\t\tline: {\n\t\t\ttension: 0.4,\n\t\t\tbackgroundColor: globalDefaults.defaultColor,\n\t\t\tborderWidth: 3,\n\t\t\tborderColor: globalDefaults.defaultColor,\n\t\t\tborderCapStyle: 'butt',\n\t\t\tborderDash: [],\n\t\t\tborderDashOffset: 0.0,\n\t\t\tborderJoinStyle: 'miter',\n\t\t\tcapBezierPoints: true,\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar vm = me._view;\n\t\tvar ctx = me._chart.ctx;\n\t\tvar spanGaps = vm.spanGaps;\n\t\tvar points = me._children.slice(); // clone array\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\tvar lastDrawnIndex = -1;\n\t\tvar index, current, previous, currentVM;\n\n\t\t// If we are looping, adding the first point again\n\t\tif (me._loop && points.length) {\n\t\t\tpoints.push(points[0]);\n\t\t}\n\n\t\tctx.save();\n\n\t\t// Stroke Line Options\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t// IE 9 and 10 do not support line dash\n\t\tif (ctx.setLineDash) {\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t}\n\n\t\tctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\tctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t// Stroke Line\n\t\tctx.beginPath();\n\t\tlastDrawnIndex = -1;\n\n\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\tcurrent = points[index];\n\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\tcurrentVM = current._view;\n\n\t\t\t// First point moves to it's starting position no matter what\n\t\t\tif (index === 0) {\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\thelpers.canvas.lineTo(ctx, previous._view, current._view);\n\t\t\t\t\t}\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\t\tctx.restore();\n\t}\n});\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\nvar defaultColor = defaults.global.defaultColor;\n\ndefaults._set('global', {\n\telements: {\n\t\tpoint: {\n\t\t\tradius: 3,\n\t\t\tpointStyle: 'circle',\n\t\t\tbackgroundColor: defaultColor,\n\t\t\tborderColor: defaultColor,\n\t\t\tborderWidth: 1,\n\t\t\t// Hover\n\t\t\thitRadius: 1,\n\t\t\thoverRadius: 4,\n\t\t\thoverBorderWidth: 1\n\t\t}\n\t}\n});\n\nfunction xRange(mouseX) {\n\tvar vm = this._view;\n\treturn vm ? (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;\n}\n\nfunction yRange(mouseY) {\n\tvar vm = this._view;\n\treturn vm ? (Math.pow(mouseY - vm.y, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;\n}\n\nmodule.exports = Element.extend({\n\tinRange: function(mouseX, mouseY) {\n\t\tvar vm = this._view;\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n\t},\n\n\tinLabelRange: xRange,\n\tinXRange: xRange,\n\tinYRange: yRange,\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y,\n\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t};\n\t},\n\n\tdraw: function(chartArea) {\n\t\tvar vm = this._view;\n\t\tvar model = this._model;\n\t\tvar ctx = this._chart.ctx;\n\t\tvar pointStyle = vm.pointStyle;\n\t\tvar radius = vm.radius;\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\t\tvar color = helpers.color;\n\t\tvar errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)\n\t\tvar ratio = 0;\n\n\t\tif (vm.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\tctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, defaults.global.elements.point.borderWidth);\n\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\n\t\t// Cliping for Points.\n\t\t// going out from inner charArea?\n\t\tif ((chartArea !== undefined) && ((model.x < chartArea.left) || (chartArea.right * errMargin < model.x) || (model.y < chartArea.top) || (chartArea.bottom * errMargin < model.y))) {\n\t\t\t// Point fade out\n\t\t\tif (model.x < chartArea.left) {\n\t\t\t\tratio = (x - model.x) / (chartArea.left - model.x);\n\t\t\t} else if (chartArea.right * errMargin < model.x) {\n\t\t\t\tratio = (model.x - x) / (model.x - chartArea.right);\n\t\t\t} else if (model.y < chartArea.top) {\n\t\t\t\tratio = (y - model.y) / (chartArea.top - model.y);\n\t\t\t} else if (chartArea.bottom * errMargin < model.y) {\n\t\t\t\tratio = (model.y - y) / (model.y - chartArea.bottom);\n\t\t\t}\n\t\t\tratio = Math.round(ratio * 100) / 100;\n\t\t\tctx.strokeStyle = color(ctx.strokeStyle).alpha(ratio).rgbString();\n\t\t\tctx.fillStyle = color(ctx.fillStyle).alpha(ratio).rgbString();\n\t\t}\n\n\t\thelpers.canvas.drawPoint(ctx, pointStyle, radius, x, y);\n\t}\n});\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\n\ndefaults._set('global', {\n\telements: {\n\t\trectangle: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: defaults.global.defaultColor,\n\t\t\tborderSkipped: 'bottom',\n\t\t\tborderWidth: 0\n\t\t}\n\t}\n});\n\nfunction isVertical(bar) {\n\treturn bar._view.width !== undefined;\n}\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param bar {Chart.Element.Rectangle} the bar\n * @return {Bounds} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar) {\n\tvar vm = bar._view;\n\tvar x1, x2, y1, y2;\n\n\tif (isVertical(bar)) {\n\t\t// vertical\n\t\tvar halfWidth = vm.width / 2;\n\t\tx1 = vm.x - halfWidth;\n\t\tx2 = vm.x + halfWidth;\n\t\ty1 = Math.min(vm.y, vm.base);\n\t\ty2 = Math.max(vm.y, vm.base);\n\t} else {\n\t\t// horizontal bar\n\t\tvar halfHeight = vm.height / 2;\n\t\tx1 = Math.min(vm.x, vm.base);\n\t\tx2 = Math.max(vm.x, vm.base);\n\t\ty1 = vm.y - halfHeight;\n\t\ty2 = vm.y + halfHeight;\n\t}\n\n\treturn {\n\t\tleft: x1,\n\t\ttop: y1,\n\t\tright: x2,\n\t\tbottom: y2\n\t};\n}\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar left, right, top, bottom, signX, signY, borderSkipped;\n\t\tvar borderWidth = vm.borderWidth;\n\n\t\tif (!vm.horizontal) {\n\t\t\t// bar\n\t\t\tleft = vm.x - vm.width / 2;\n\t\t\tright = vm.x + vm.width / 2;\n\t\t\ttop = vm.y;\n\t\t\tbottom = vm.base;\n\t\t\tsignX = 1;\n\t\t\tsignY = bottom > top ? 1 : -1;\n\t\t\tborderSkipped = vm.borderSkipped || 'bottom';\n\t\t} else {\n\t\t\t// horizontal bar\n\t\t\tleft = vm.base;\n\t\t\tright = vm.x;\n\t\t\ttop = vm.y - vm.height / 2;\n\t\t\tbottom = vm.y + vm.height / 2;\n\t\t\tsignX = right > left ? 1 : -1;\n\t\t\tsignY = 1;\n\t\t\tborderSkipped = vm.borderSkipped || 'left';\n\t\t}\n\n\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\tif (borderWidth) {\n\t\t\t// borderWidth shold be less than bar width and bar height.\n\t\t\tvar barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));\n\t\t\tborderWidth = borderWidth > barSize ? barSize : borderWidth;\n\t\t\tvar halfStroke = borderWidth / 2;\n\t\t\t// Adjust borderWidth when bar top position is near vm.base(zero).\n\t\t\tvar borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0);\n\t\t\tvar borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);\n\t\t\tvar borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);\n\t\t\tvar borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);\n\t\t\t// not become a vertical line?\n\t\t\tif (borderLeft !== borderRight) {\n\t\t\t\ttop = borderTop;\n\t\t\t\tbottom = borderBottom;\n\t\t\t}\n\t\t\t// not become a horizontal line?\n\t\t\tif (borderTop !== borderBottom) {\n\t\t\t\tleft = borderLeft;\n\t\t\t\tright = borderRight;\n\t\t\t}\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = borderWidth;\n\n\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t// | 1 2 |\n\t\t// | 0 3 |\n\t\tvar corners = [\n\t\t\t[left, bottom],\n\t\t\t[left, top],\n\t\t\t[right, top],\n\t\t\t[right, bottom]\n\t\t];\n\n\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\tvar startCorner = borders.indexOf(borderSkipped, 0);\n\t\tif (startCorner === -1) {\n\t\t\tstartCorner = 0;\n\t\t}\n\n\t\tfunction cornerAt(index) {\n\t\t\treturn corners[(startCorner + index) % 4];\n\t\t}\n\n\t\t// Draw rectangle from 'startCorner'\n\t\tvar corner = cornerAt(0);\n\t\tctx.moveTo(corner[0], corner[1]);\n\n\t\tfor (var i = 1; i < 4; i++) {\n\t\t\tcorner = cornerAt(i);\n\t\t\tctx.lineTo(corner[0], corner[1]);\n\t\t}\n\n\t\tctx.fill();\n\t\tif (borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\theight: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.base - vm.y;\n\t},\n\n\tinRange: function(mouseX, mouseY) {\n\t\tvar inRange = false;\n\n\t\tif (this._view) {\n\t\t\tvar bounds = getBarBounds(this);\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinLabelRange: function(mouseX, mouseY) {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar inRange = false;\n\t\tvar bounds = getBarBounds(me);\n\n\t\tif (isVertical(me)) {\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right;\n\t\t} else {\n\t\t\tinRange = mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinXRange: function(mouseX) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseX >= bounds.left && mouseX <= bounds.right;\n\t},\n\n\tinYRange: function(mouseY) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar x, y;\n\t\tif (isVertical(this)) {\n\t\t\tx = vm.x;\n\t\t\ty = (vm.y + vm.base) / 2;\n\t\t} else {\n\t\t\tx = (vm.x + vm.base) / 2;\n\t\t\ty = vm.y;\n\t\t}\n\n\t\treturn {x: x, y: y};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.width * Math.abs(vm.y - vm.base);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t}\n});\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nmodule.exports = {\n\tacquireContext: function(item) {\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\treturn item && item.getContext('2d') || null;\n\t}\n};\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\n'use strict';\n\nvar helpers = require('../helpers/index');\n\nvar EXPANDO_KEY = '$chartjs';\nvar CSS_PREFIX = 'chartjs-';\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nvar EVENT_TYPES = {\n\ttouchstart: 'mousedown',\n\ttouchmove: 'mousemove',\n\ttouchend: 'mouseup',\n\tpointerenter: 'mouseenter',\n\tpointerdown: 'mousedown',\n\tpointermove: 'mousemove',\n\tpointerup: 'mouseup',\n\tpointerleave: 'mouseout',\n\tpointerout: 'mouseout'\n};\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns {Number} Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n\tvar value = helpers.getStyle(element, property);\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n\treturn matches ? Number(matches[1]) : undefined;\n}\n\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n */\nfunction initCanvas(canvas, config) {\n\tvar style = canvas.style;\n\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\n\tvar renderHeight = canvas.getAttribute('height');\n\tvar renderWidth = canvas.getAttribute('width');\n\n\t// Chart.js modifies some canvas values that we want to restore on destroy\n\tcanvas[EXPANDO_KEY] = {\n\t\tinitial: {\n\t\t\theight: renderHeight,\n\t\t\twidth: renderWidth,\n\t\t\tstyle: {\n\t\t\t\tdisplay: style.display,\n\t\t\t\theight: style.height,\n\t\t\t\twidth: style.width\n\t\t\t}\n\t\t}\n\t};\n\n\t// Force canvas to display as block to avoid extra space caused by inline\n\t// elements, which would interfere with the responsive resize process.\n\t// https://github.com/chartjs/Chart.js/issues/2538\n\tstyle.display = style.display || 'block';\n\n\tif (renderWidth === null || renderWidth === '') {\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\n\t\tif (displayWidth !== undefined) {\n\t\t\tcanvas.width = displayWidth;\n\t\t}\n\t}\n\n\tif (renderHeight === null || renderHeight === '') {\n\t\tif (canvas.style.height === '') {\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\n\t\t\t// which one can be specified by the user but also by charts as default option\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\n\t\t} else {\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\n\t\t\tif (displayWidth !== undefined) {\n\t\t\t\tcanvas.height = displayHeight;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn canvas;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nvar supportsEventListenerOptions = (function() {\n\tvar supports = false;\n\ttry {\n\t\tvar options = Object.defineProperty({}, 'passive', {\n\t\t\tget: function() {\n\t\t\t\tsupports = true;\n\t\t\t}\n\t\t});\n\t\twindow.addEventListener('e', null, options);\n\t} catch (e) {\n\t\t// continue regardless of error\n\t}\n\treturn supports;\n}());\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addEventListener(node, type, listener) {\n\tnode.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeEventListener(node, type, listener) {\n\tnode.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction createEvent(type, chart, x, y, nativeEvent) {\n\treturn {\n\t\ttype: type,\n\t\tchart: chart,\n\t\tnative: nativeEvent || null,\n\t\tx: x !== undefined ? x : null,\n\t\ty: y !== undefined ? y : null,\n\t};\n}\n\nfunction fromNativeEvent(event, chart) {\n\tvar type = EVENT_TYPES[event.type] || event.type;\n\tvar pos = helpers.getRelativePosition(event, chart);\n\treturn createEvent(type, chart, pos.x, pos.y, event);\n}\n\nfunction throttled(fn, thisArg) {\n\tvar ticking = false;\n\tvar args = [];\n\n\treturn function() {\n\t\targs = Array.prototype.slice.call(arguments);\n\t\tthisArg = thisArg || this;\n\n\t\tif (!ticking) {\n\t\t\tticking = true;\n\t\t\thelpers.requestAnimFrame.call(window, function() {\n\t\t\t\tticking = false;\n\t\t\t\tfn.apply(thisArg, args);\n\t\t\t});\n\t\t}\n\t};\n}\n\n// Implementation based on https://github.com/marcj/css-element-queries\nfunction createResizer(handler) {\n\tvar resizer = document.createElement('div');\n\tvar cls = CSS_PREFIX + 'size-monitor';\n\tvar maxSize = 1000000;\n\tvar style =\n\t\t'position:absolute;' +\n\t\t'left:0;' +\n\t\t'top:0;' +\n\t\t'right:0;' +\n\t\t'bottom:0;' +\n\t\t'overflow:hidden;' +\n\t\t'pointer-events:none;' +\n\t\t'visibility:hidden;' +\n\t\t'z-index:-1;';\n\n\tresizer.style.cssText = style;\n\tresizer.className = cls;\n\tresizer.innerHTML =\n\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t'
' +\n\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t'
';\n\n\tvar expand = resizer.childNodes[0];\n\tvar shrink = resizer.childNodes[1];\n\n\tresizer._reset = function() {\n\t\texpand.scrollLeft = maxSize;\n\t\texpand.scrollTop = maxSize;\n\t\tshrink.scrollLeft = maxSize;\n\t\tshrink.scrollTop = maxSize;\n\t};\n\tvar onScroll = function() {\n\t\tresizer._reset();\n\t\thandler();\n\t};\n\n\taddEventListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n\taddEventListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n\treturn resizer;\n}\n\n// https://davidwalsh.name/detect-node-insertion\nfunction watchForRender(node, handler) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\tvar proxy = expando.renderProxy = function(e) {\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\n\t\t\thandler();\n\t\t}\n\t};\n\n\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\taddEventListener(node, type, proxy);\n\t});\n\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n\t// is removed then added back immediately (same animation frame?). Accessing the\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n\t// https://github.com/chartjs/Chart.js/issues/4737\n\texpando.reflow = !!node.offsetParent;\n\n\tnode.classList.add(CSS_RENDER_MONITOR);\n}\n\nfunction unwatchForRender(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar proxy = expando.renderProxy;\n\n\tif (proxy) {\n\t\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\t\tremoveEventListener(node, type, proxy);\n\t\t});\n\n\t\tdelete expando.renderProxy;\n\t}\n\n\tnode.classList.remove(CSS_RENDER_MONITOR);\n}\n\nfunction addResizeListener(node, listener, chart) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\n\t\tif (expando.resizer) {\n\t\t\treturn listener(createEvent('resize', chart));\n\t\t}\n\t}));\n\n\t// The resizer needs to be attached to the node parent, so we first need to be\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\n\twatchForRender(node, function() {\n\t\tif (expando.resizer) {\n\t\t\tvar container = node.parentNode;\n\t\t\tif (container && container !== resizer.parentNode) {\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\n\t\t\t}\n\n\t\t\t// The container size might have changed, let's reset the resizer state.\n\t\t\tresizer._reset();\n\t\t}\n\t});\n}\n\nfunction removeResizeListener(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar resizer = expando.resizer;\n\n\tdelete expando.resizer;\n\tunwatchForRender(node);\n\n\tif (resizer && resizer.parentNode) {\n\t\tresizer.parentNode.removeChild(resizer);\n\t}\n}\n\nfunction injectCSS(platform, css) {\n\t// http://stackoverflow.com/q/3922139\n\tvar style = platform._style || document.createElement('style');\n\tif (!platform._style) {\n\t\tplatform._style = style;\n\t\tcss = '/* Chart.js */\\n' + css;\n\t\tstyle.setAttribute('type', 'text/css');\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t}\n\n\tstyle.appendChild(document.createTextNode(css));\n}\n\nmodule.exports = {\n\t/**\n\t * This property holds whether this platform is enabled for the current environment.\n\t * Currently used by platform.js to select the proper implementation.\n\t * @private\n\t */\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n\tinitialize: function() {\n\t\tvar keyframes = 'from{opacity:0.99}to{opacity:1}';\n\n\t\tinjectCSS(this,\n\t\t\t// DOM rendering detection\n\t\t\t// https://davidwalsh.name/detect-node-insertion\n\t\t\t'@-webkit-keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'@keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'.' + CSS_RENDER_MONITOR + '{' +\n\t\t\t\t'-webkit-animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t\t'animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t'}'\n\t\t);\n\t},\n\n\tacquireContext: function(item, config) {\n\t\tif (typeof item === 'string') {\n\t\t\titem = document.getElementById(item);\n\t\t} else if (item.length) {\n\t\t\t// Support for array based queries (such as jQuery)\n\t\t\titem = item[0];\n\t\t}\n\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\tvar context = item && item.getContext && item.getContext('2d');\n\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n\t\t// inside an iframe or when running in a protected environment. We could guess the\n\t\t// types from their toString() value but let's keep things flexible and assume it's\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\n\t\tif (context && context.canvas === item) {\n\t\t\tinitCanvas(item, config);\n\t\t\treturn context;\n\t\t}\n\n\t\treturn null;\n\t},\n\n\treleaseContext: function(context) {\n\t\tvar canvas = context.canvas;\n\t\tif (!canvas[EXPANDO_KEY]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\n\t\t['height', 'width'].forEach(function(prop) {\n\t\t\tvar value = initial[prop];\n\t\t\tif (helpers.isNullOrUndef(value)) {\n\t\t\t\tcanvas.removeAttribute(prop);\n\t\t\t} else {\n\t\t\t\tcanvas.setAttribute(prop, value);\n\t\t\t}\n\t\t});\n\n\t\thelpers.each(initial.style || {}, function(value, key) {\n\t\t\tcanvas.style[key] = value;\n\t\t});\n\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n\t\tcanvas.width = canvas.width;\n\n\t\tdelete canvas[EXPANDO_KEY];\n\t},\n\n\taddEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\taddResizeListener(canvas, listener, chart);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\n\t\t\tlistener(fromNativeEvent(event, chart));\n\t\t};\n\n\t\taddEventListener(canvas, type, proxy);\n\t},\n\n\tremoveEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\tremoveResizeListener(canvas, listener);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || {};\n\t\tvar proxies = expando.proxies || {};\n\t\tvar proxy = proxies[chart.id + '_' + type];\n\t\tif (!proxy) {\n\t\t\treturn;\n\t\t}\n\n\t\tremoveEventListener(canvas, type, proxy);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n * @function Chart.helpers.addEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.addEvent = addEventListener;\n\n/**\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n * @function Chart.helpers.removeEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.removeEvent = removeEventListener;\n","'use strict';\n\nvar defaults = require('./core.defaults');\nvar Element = require('./core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\tplugins: {}\n});\n\nmodule.exports = function(Chart) {\n\n\t/**\n\t * The plugin service singleton\n\t * @namespace Chart.plugins\n\t * @since 2.1.0\n\t */\n\tChart.plugins = {\n\t\t/**\n\t\t * Globally registered plugins.\n\t\t * @private\n\t\t */\n\t\t_plugins: [],\n\n\t\t/**\n\t\t * This identifier is used to invalidate the descriptors cache attached to each chart\n\t\t * when a global plugin is registered or unregistered. In this case, the cache ID is\n\t\t * incremented and descriptors are regenerated during following API calls.\n\t\t * @private\n\t\t */\n\t\t_cacheId: 0,\n\n\t\t/**\n\t\t * Registers the given plugin(s) if not already registered.\n\t\t * @param {Array|Object} plugins plugin instance(s).\n\t\t */\n\t\tregister: function(plugins) {\n\t\t\tvar p = this._plugins;\n\t\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\t\tif (p.indexOf(plugin) === -1) {\n\t\t\t\t\tp.push(plugin);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._cacheId++;\n\t\t},\n\n\t\t/**\n\t\t * Unregisters the given plugin(s) only if registered.\n\t\t * @param {Array|Object} plugins plugin instance(s).\n\t\t */\n\t\tunregister: function(plugins) {\n\t\t\tvar p = this._plugins;\n\t\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\t\tvar idx = p.indexOf(plugin);\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tp.splice(idx, 1);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._cacheId++;\n\t\t},\n\n\t\t/**\n\t\t * Remove all registered plugins.\n\t\t * @since 2.1.5\n\t\t */\n\t\tclear: function() {\n\t\t\tthis._plugins = [];\n\t\t\tthis._cacheId++;\n\t\t},\n\n\t\t/**\n\t\t * Returns the number of registered plugins?\n\t\t * @returns {Number}\n\t\t * @since 2.1.5\n\t\t */\n\t\tcount: function() {\n\t\t\treturn this._plugins.length;\n\t\t},\n\n\t\t/**\n\t\t * Returns all registered plugin instances.\n\t\t * @returns {Array} array of plugin objects.\n\t\t * @since 2.1.5\n\t\t */\n\t\tgetAll: function() {\n\t\t\treturn this._plugins;\n\t\t},\n\n\t\t/**\n\t\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t\t * returned value can be used, for instance, to interrupt the current action.\n\t\t * @param {Object} chart - The chart instance for which plugins should be called.\n\t\t * @param {String} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t\t * @param {Array} [args] - Extra arguments to apply to the hook call.\n\t\t * @returns {Boolean} false if any of the plugins return false, else returns true.\n\t\t */\n\t\tnotify: function(chart, hook, args) {\n\t\t\tvar descriptors = this.descriptors(chart);\n\t\t\tvar ilen = descriptors.length;\n\t\t\tvar i, descriptor, plugin, params, method;\n\n\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\tdescriptor = descriptors[i];\n\t\t\t\tplugin = descriptor.plugin;\n\t\t\t\tmethod = plugin[hook];\n\t\t\t\tif (typeof method === 'function') {\n\t\t\t\t\tparams = [chart].concat(args || []);\n\t\t\t\t\tparams.push(descriptor.options);\n\t\t\t\t\tif (method.apply(plugin, params) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Returns descriptors of enabled plugins for the given chart.\n\t\t * @returns {Array} [{ plugin, options }]\n\t\t * @private\n\t\t */\n\t\tdescriptors: function(chart) {\n\t\t\tvar cache = chart._plugins || (chart._plugins = {});\n\t\t\tif (cache.id === this._cacheId) {\n\t\t\t\treturn cache.descriptors;\n\t\t\t}\n\n\t\t\tvar plugins = [];\n\t\t\tvar descriptors = [];\n\t\t\tvar config = (chart && chart.config) || {};\n\t\t\tvar options = (config.options && config.options.plugins) || {};\n\n\t\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\n\t\t\t\tvar idx = plugins.indexOf(plugin);\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar id = plugin.id;\n\t\t\t\tvar opts = options[id];\n\t\t\t\tif (opts === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (opts === true) {\n\t\t\t\t\topts = helpers.clone(defaults.global.plugins[id]);\n\t\t\t\t}\n\n\t\t\t\tplugins.push(plugin);\n\t\t\t\tdescriptors.push({\n\t\t\t\t\tplugin: plugin,\n\t\t\t\t\toptions: opts || {}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcache.descriptors = descriptors;\n\t\t\tcache.id = this._cacheId;\n\t\t\treturn descriptors;\n\t\t}\n\t};\n\n\t/**\n\t * Plugin extension hooks.\n\t * @interface IPlugin\n\t * @since 2.1.0\n\t */\n\t/**\n\t * @method IPlugin#beforeInit\n\t * @desc Called before initializing `chart`.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#afterInit\n\t * @desc Called after `chart` has been initialized and before the first update.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeUpdate\n\t * @desc Called before updating `chart`. If any plugin returns `false`, the update\n\t * is cancelled (and thus subsequent render(s)) until another `update` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart update.\n\t */\n\t/**\n\t * @method IPlugin#afterUpdate\n\t * @desc Called after `chart` has been updated and before rendering. Note that this\n\t * hook will not be called if the chart update has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeDatasetsUpdate\n \t * @desc Called before updating the `chart` datasets. If any plugin returns `false`,\n\t * the datasets update is cancelled until another `update` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} false to cancel the datasets update.\n\t * @since version 2.1.5\n\t */\n\t/**\n\t * @method IPlugin#afterDatasetsUpdate\n\t * @desc Called after the `chart` datasets have been updated. Note that this hook\n\t * will not be called if the datasets update has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t * @since version 2.1.5\n\t */\n\t/**\n\t * @method IPlugin#beforeDatasetUpdate\n \t * @desc Called before updating the `chart` dataset at the given `args.index`. If any plugin\n\t * returns `false`, the datasets update is cancelled until another `update` is triggered.\n\t * @param {Chart} chart - The chart instance.\n\t * @param {Object} args - The call arguments.\n\t * @param {Number} args.index - The dataset index.\n\t * @param {Object} args.meta - The dataset metadata.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart datasets drawing.\n\t */\n\t/**\n\t * @method IPlugin#afterDatasetUpdate\n \t * @desc Called after the `chart` datasets at the given `args.index` has been updated. Note\n\t * that this hook will not be called if the datasets update has been previously cancelled.\n\t * @param {Chart} chart - The chart instance.\n\t * @param {Object} args - The call arguments.\n\t * @param {Number} args.index - The dataset index.\n\t * @param {Object} args.meta - The dataset metadata.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeLayout\n\t * @desc Called before laying out `chart`. If any plugin returns `false`,\n\t * the layout update is cancelled until another `update` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart layout.\n\t */\n\t/**\n\t * @method IPlugin#afterLayout\n\t * @desc Called after the `chart` has been layed out. Note that this hook will not\n\t * be called if the layout update has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeRender\n\t * @desc Called before rendering `chart`. If any plugin returns `false`,\n\t * the rendering is cancelled until another `render` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart rendering.\n\t */\n\t/**\n\t * @method IPlugin#afterRender\n\t * @desc Called after the `chart` has been fully rendered (and animation completed). Note\n\t * that this hook will not be called if the rendering has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeDraw\n\t * @desc Called before drawing `chart` at every animation frame specified by the given\n\t * easing value. If any plugin returns `false`, the frame drawing is cancelled until\n\t * another `render` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart drawing.\n\t */\n\t/**\n\t * @method IPlugin#afterDraw\n\t * @desc Called after the `chart` has been drawn for the specific easing value. Note\n\t * that this hook will not be called if the drawing has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeDatasetsDraw\n \t * @desc Called before drawing the `chart` datasets. If any plugin returns `false`,\n\t * the datasets drawing is cancelled until another `render` is triggered.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart datasets drawing.\n\t */\n\t/**\n\t * @method IPlugin#afterDatasetsDraw\n\t * @desc Called after the `chart` datasets have been drawn. Note that this hook\n\t * will not be called if the datasets drawing has been previously cancelled.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#beforeDatasetDraw\n \t * @desc Called before drawing the `chart` dataset at the given `args.index` (datasets\n\t * are drawn in the reverse order). If any plugin returns `false`, the datasets drawing\n\t * is cancelled until another `render` is triggered.\n\t * @param {Chart} chart - The chart instance.\n\t * @param {Object} args - The call arguments.\n\t * @param {Number} args.index - The dataset index.\n\t * @param {Object} args.meta - The dataset metadata.\n\t * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart datasets drawing.\n\t */\n\t/**\n\t * @method IPlugin#afterDatasetDraw\n \t * @desc Called after the `chart` datasets at the given `args.index` have been drawn\n\t * (datasets are drawn in the reverse order). Note that this hook will not be called\n\t * if the datasets drawing has been previously cancelled.\n\t * @param {Chart} chart - The chart instance.\n\t * @param {Object} args - The call arguments.\n\t * @param {Number} args.index - The dataset index.\n\t * @param {Object} args.meta - The dataset metadata.\n\t * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n \t * @method IPlugin#beforeTooltipDraw\n\t * @desc Called before drawing the `tooltip`. If any plugin returns `false`,\n\t * the tooltip drawing is cancelled until another `render` is triggered.\n\t * @param {Chart} chart - The chart instance.\n\t * @param {Object} args - The call arguments.\n\t * @param {Object} args.tooltip - The tooltip.\n\t * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n\t * @param {Object} options - The plugin options.\n\t * @returns {Boolean} `false` to cancel the chart tooltip drawing.\n \t */\n\t/**\n \t * @method IPlugin#afterTooltipDraw\n \t * @desc Called after drawing the `tooltip`. Note that this hook will not\n \t * be called if the tooltip drawing has been previously cancelled.\n \t * @param {Chart} chart - The chart instance.\n \t * @param {Object} args - The call arguments.\n \t * @param {Object} args.tooltip - The tooltip.\n\t * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n \t * @param {Object} options - The plugin options.\n \t */\n\t/**\n\t * @method IPlugin#beforeEvent\n \t * @desc Called before processing the specified `event`. If any plugin returns `false`,\n\t * the event will be discarded.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {IEvent} event - The event object.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#afterEvent\n\t * @desc Called after the `event` has been consumed. Note that this hook\n\t * will not be called if the `event` has been previously discarded.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {IEvent} event - The event object.\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#resize\n\t * @desc Called after the chart as been resized.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Number} size - The new canvas display size (eq. canvas.style width & height).\n\t * @param {Object} options - The plugin options.\n\t */\n\t/**\n\t * @method IPlugin#destroy\n\t * @desc Called after the chart as been destroyed.\n\t * @param {Chart.Controller} chart - The chart instance.\n\t * @param {Object} options - The plugin options.\n\t */\n\n\t/**\n\t * Provided for backward compatibility, use Chart.plugins instead\n\t * @namespace Chart.pluginService\n\t * @deprecated since version 2.1.5\n\t * @todo remove at version 3\n\t * @private\n\t */\n\tChart.pluginService = Chart.plugins;\n\n\t/**\n\t * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n\t * effect, instead simply create/register plugins via plain JavaScript objects.\n\t * @interface Chart.PluginBase\n\t * @deprecated since version 2.5.0\n\t * @todo remove at version 3\n\t * @private\n\t */\n\tChart.PluginBase = Element.extend({});\n};\n","/* global window: false */\n'use strict';\n\nvar defaults = require('./core.defaults');\nvar Element = require('./core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\tanimation: {\n\t\tduration: 1000,\n\t\teasing: 'easeOutQuart',\n\t\tonProgress: helpers.noop,\n\t\tonComplete: helpers.noop\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.Animation = Element.extend({\n\t\tchart: null, // the animation associated chart instance\n\t\tcurrentStep: 0, // the current animation step\n\t\tnumSteps: 60, // default number of steps\n\t\teasing: '', // the easing to use for this animation\n\t\trender: null, // render function used by the animation service\n\n\t\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\n\t\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\n\t});\n\n\tChart.animationService = {\n\t\tframeDuration: 17,\n\t\tanimations: [],\n\t\tdropFrames: 0,\n\t\trequest: null,\n\n\t\t/**\n\t\t * @param {Chart} chart - The chart to animate.\n\t\t * @param {Chart.Animation} animation - The animation that we will animate.\n\t\t * @param {Number} duration - The animation duration in ms.\n\t\t * @param {Boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n\t\t */\n\t\taddAnimation: function(chart, animation, duration, lazy) {\n\t\t\tvar animations = this.animations;\n\t\t\tvar i, ilen;\n\n\t\t\tanimation.chart = chart;\n\n\t\t\tif (!lazy) {\n\t\t\t\tchart.animating = true;\n\t\t\t}\n\n\t\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\n\t\t\t\tif (animations[i].chart === chart) {\n\t\t\t\t\tanimations[i] = animation;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tanimations.push(animation);\n\n\t\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\t\tif (animations.length === 1) {\n\t\t\t\tthis.requestAnimationFrame();\n\t\t\t}\n\t\t},\n\n\t\tcancelAnimation: function(chart) {\n\t\t\tvar index = helpers.findIndex(this.animations, function(animation) {\n\t\t\t\treturn animation.chart === chart;\n\t\t\t});\n\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.animations.splice(index, 1);\n\t\t\t\tchart.animating = false;\n\t\t\t}\n\t\t},\n\n\t\trequestAnimationFrame: function() {\n\t\t\tvar me = this;\n\t\t\tif (me.request === null) {\n\t\t\t\t// Skip animation frame requests until the active one is executed.\n\t\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\n\t\t\t\t// and 'mouseout' events will trigger multiple renders.\n\t\t\t\tme.request = helpers.requestAnimFrame.call(window, function() {\n\t\t\t\t\tme.request = null;\n\t\t\t\t\tme.startDigest();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tstartDigest: function() {\n\t\t\tvar me = this;\n\t\t\tvar startTime = Date.now();\n\t\t\tvar framesToDrop = 0;\n\n\t\t\tif (me.dropFrames > 1) {\n\t\t\t\tframesToDrop = Math.floor(me.dropFrames);\n\t\t\t\tme.dropFrames = me.dropFrames % 1;\n\t\t\t}\n\n\t\t\tme.advance(1 + framesToDrop);\n\n\t\t\tvar endTime = Date.now();\n\n\t\t\tme.dropFrames += (endTime - startTime) / me.frameDuration;\n\n\t\t\t// Do we have more stuff to animate?\n\t\t\tif (me.animations.length > 0) {\n\t\t\t\tme.requestAnimationFrame();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tadvance: function(count) {\n\t\t\tvar animations = this.animations;\n\t\t\tvar animation, chart;\n\t\t\tvar i = 0;\n\n\t\t\twhile (i < animations.length) {\n\t\t\t\tanimation = animations[i];\n\t\t\t\tchart = animation.chart;\n\n\t\t\t\tanimation.currentStep = (animation.currentStep || 0) + count;\n\t\t\t\tanimation.currentStep = Math.min(animation.currentStep, animation.numSteps);\n\n\t\t\t\thelpers.callback(animation.render, [chart, animation], chart);\n\t\t\t\thelpers.callback(animation.onAnimationProgress, [animation], chart);\n\n\t\t\t\tif (animation.currentStep >= animation.numSteps) {\n\t\t\t\t\thelpers.callback(animation.onAnimationComplete, [animation], chart);\n\t\t\t\t\tchart.animating = false;\n\t\t\t\t\tanimations.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\t++i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Provided for backward compatibility, use Chart.Animation instead\n\t * @prop Chart.Animation#animationObject\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t */\n\tObject.defineProperty(Chart.Animation.prototype, 'animationObject', {\n\t\tget: function() {\n\t\t\treturn this;\n\t\t}\n\t});\n\n\t/**\n\t * Provided for backward compatibility, use Chart.Animation#chart instead\n\t * @prop Chart.Animation#chartInstance\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t */\n\tObject.defineProperty(Chart.Animation.prototype, 'chartInstance', {\n\t\tget: function() {\n\t\t\treturn this.chart;\n\t\t},\n\t\tset: function(value) {\n\t\t\tthis.chart = value;\n\t\t}\n\t});\n\n};\n","'use strict';\n\nvar defaults = require('./core.defaults');\nvar helpers = require('../helpers/index');\nvar Interaction = require('./core.interaction');\nvar platform = require('../platforms/platform');\n\nmodule.exports = function(Chart) {\n\tvar plugins = Chart.plugins;\n\n\t// Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t// Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t// Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\t// Controllers available for dataset visualization eg. bar, line, slice, etc.\n\tChart.controllers = {};\n\n\t/**\n\t * Initializes the given config with global and chart default values.\n\t */\n\tfunction initConfig(config) {\n\t\tconfig = config || {};\n\n\t\t// Do NOT use configMerge() for the data object because this method merges arrays\n\t\t// and so would change references to labels and datasets, preventing data updates.\n\t\tvar data = config.data = config.data || {};\n\t\tdata.datasets = data.datasets || [];\n\t\tdata.labels = data.labels || [];\n\n\t\tconfig.options = helpers.configMerge(\n\t\t\tdefaults.global,\n\t\t\tdefaults[config.type],\n\t\t\tconfig.options || {});\n\n\t\treturn config;\n\t}\n\n\t/**\n\t * Updates the config of the chart\n\t * @param chart {Chart} chart to update the options for\n\t */\n\tfunction updateConfig(chart) {\n\t\tvar newOptions = chart.options;\n\n\t\t// Update Scale(s) with options\n\t\tif (newOptions.scale) {\n\t\t\tchart.scale.options = newOptions.scale;\n\t\t} else if (newOptions.scales) {\n\t\t\tnewOptions.scales.xAxes.concat(newOptions.scales.yAxes).forEach(function(scaleOptions) {\n\t\t\t\tchart.scales[scaleOptions.id].options = scaleOptions;\n\t\t\t});\n\t\t}\n\n\t\t// Tooltip\n\t\tchart.tooltip._options = newOptions.tooltips;\n\t}\n\n\tfunction positionIsHorizontal(position) {\n\t\treturn position === 'top' || position === 'bottom';\n\t}\n\n\thelpers.extend(Chart.prototype, /** @lends Chart */ {\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tconstruct: function(item, config) {\n\t\t\tvar me = this;\n\n\t\t\tconfig = initConfig(config);\n\n\t\t\tvar context = platform.acquireContext(item, config);\n\t\t\tvar canvas = context && context.canvas;\n\t\t\tvar height = canvas && canvas.height;\n\t\t\tvar width = canvas && canvas.width;\n\n\t\t\tme.id = helpers.uid();\n\t\t\tme.ctx = context;\n\t\t\tme.canvas = canvas;\n\t\t\tme.config = config;\n\t\t\tme.width = width;\n\t\t\tme.height = height;\n\t\t\tme.aspectRatio = height ? width / height : null;\n\t\t\tme.options = config.options;\n\t\t\tme._bufferedRender = false;\n\n\t\t\t/**\n\t\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n\t\t\t * the \"instance\" still need to be defined since it might be called from plugins.\n\t\t\t * @prop Chart#chart\n\t\t\t * @deprecated since version 2.6.0\n\t\t\t * @todo remove at version 3\n\t\t\t * @private\n\t\t\t */\n\t\t\tme.chart = me;\n\t\t\tme.controller = me; // chart.chart.controller #inception\n\n\t\t\t// Add the chart instance to the global namespace\n\t\t\tChart.instances[me.id] = me;\n\n\t\t\t// Define alias to the config data: `chart.data === chart.config.data`\n\t\t\tObject.defineProperty(me, 'data', {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn me.config.data;\n\t\t\t\t},\n\t\t\t\tset: function(value) {\n\t\t\t\t\tme.config.data = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!context || !canvas) {\n\t\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\n\t\t\t\t// the chart initialization but after setting basic chart / controller properties that\n\t\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n\t\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tme.initialize();\n\t\t\tme.update();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\n\t\t\t// Before init plugin notification\n\t\t\tplugins.notify(me, 'beforeInit');\n\n\t\t\thelpers.retinaScale(me, me.options.devicePixelRatio);\n\n\t\t\tme.bindEvents();\n\n\t\t\tif (me.options.responsive) {\n\t\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\n\t\t\t\tme.resize(true);\n\t\t\t}\n\n\t\t\t// Make sure scales have IDs and are built before we build any controllers.\n\t\t\tme.ensureScalesHaveIDs();\n\t\t\tme.buildScales();\n\t\t\tme.initToolTip();\n\n\t\t\t// After init plugin notification\n\t\t\tplugins.notify(me, 'afterInit');\n\n\t\t\treturn me;\n\t\t},\n\n\t\tclear: function() {\n\t\t\thelpers.canvas.clear(this);\n\t\t\treturn this;\n\t\t},\n\n\t\tstop: function() {\n\t\t\t// Stops any current animation loop occurring\n\t\t\tChart.animationService.cancelAnimation(this);\n\t\t\treturn this;\n\t\t},\n\n\t\tresize: function(silent) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar canvas = me.canvas;\n\t\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\n\n\t\t\t// the canvas render width and height will be casted to integers so make sure that\n\t\t\t// the canvas display style uses the same integer values to avoid blurring effect.\n\n\t\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collased\n\t\t\tvar newWidth = Math.max(0, Math.floor(helpers.getMaximumWidth(canvas)));\n\t\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas)));\n\n\t\t\tif (me.width === newWidth && me.height === newHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcanvas.width = me.width = newWidth;\n\t\t\tcanvas.height = me.height = newHeight;\n\t\t\tcanvas.style.width = newWidth + 'px';\n\t\t\tcanvas.style.height = newHeight + 'px';\n\n\t\t\thelpers.retinaScale(me, options.devicePixelRatio);\n\n\t\t\tif (!silent) {\n\t\t\t\t// Notify any plugins about the resize\n\t\t\t\tvar newSize = {width: newWidth, height: newHeight};\n\t\t\t\tplugins.notify(me, 'resize', [newSize]);\n\n\t\t\t\t// Notify of resize\n\t\t\t\tif (me.options.onResize) {\n\t\t\t\t\tme.options.onResize(me, newSize);\n\t\t\t\t}\n\n\t\t\t\tme.stop();\n\t\t\t\tme.update(me.options.responsiveAnimationDuration);\n\t\t\t}\n\t\t},\n\n\t\tensureScalesHaveIDs: function() {\n\t\t\tvar options = this.options;\n\t\t\tvar scalesOptions = options.scales || {};\n\t\t\tvar scaleOptions = options.scale;\n\n\t\t\thelpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {\n\t\t\t\txAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);\n\t\t\t});\n\n\t\t\thelpers.each(scalesOptions.yAxes, function(yAxisOptions, index) {\n\t\t\t\tyAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);\n\t\t\t});\n\n\t\t\tif (scaleOptions) {\n\t\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Builds a map of scale ID to scale object for future lookup.\n\t\t */\n\t\tbuildScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar scales = me.scales = {};\n\t\t\tvar items = [];\n\n\t\t\tif (options.scales) {\n\t\t\t\titems = items.concat(\n\t\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\n\t\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\n\t\t\t\t\t}),\n\t\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\n\t\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (options.scale) {\n\t\t\t\titems.push({\n\t\t\t\t\toptions: options.scale,\n\t\t\t\t\tdtype: 'radialLinear',\n\t\t\t\t\tisDefault: true,\n\t\t\t\t\tdposition: 'chartArea'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thelpers.each(items, function(item) {\n\t\t\t\tvar scaleOptions = item.options;\n\t\t\t\tvar scaleType = helpers.valueOrDefault(scaleOptions.type, item.dtype);\n\t\t\t\tvar scaleClass = Chart.scaleService.getScaleConstructor(scaleType);\n\t\t\t\tif (!scaleClass) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n\t\t\t\t\tscaleOptions.position = item.dposition;\n\t\t\t\t}\n\n\t\t\t\tvar scale = new scaleClass({\n\t\t\t\t\tid: scaleOptions.id,\n\t\t\t\t\toptions: scaleOptions,\n\t\t\t\t\tctx: me.ctx,\n\t\t\t\t\tchart: me\n\t\t\t\t});\n\n\t\t\t\tscales[scale.id] = scale;\n\t\t\t\tscale.mergeTicksOptions();\n\n\t\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\n\t\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\n\t\t\t\t// make the logic easier and remove some useless? custom code.\n\t\t\t\tif (item.isDefault) {\n\t\t\t\t\tme.scale = scale;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tChart.scaleService.addScalesToLayout(this);\n\t\t},\n\n\t\tbuildOrUpdateControllers: function() {\n\t\t\tvar me = this;\n\t\t\tvar types = [];\n\t\t\tvar newControllers = [];\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\tvar type = dataset.type || me.config.type;\n\n\t\t\t\tif (meta.type && meta.type !== type) {\n\t\t\t\t\tme.destroyDatasetMeta(datasetIndex);\n\t\t\t\t\tmeta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t}\n\t\t\t\tmeta.type = type;\n\n\t\t\t\ttypes.push(meta.type);\n\n\t\t\t\tif (meta.controller) {\n\t\t\t\t\tmeta.controller.updateIndex(datasetIndex);\n\t\t\t\t} else {\n\t\t\t\t\tvar ControllerClass = Chart.controllers[meta.type];\n\t\t\t\t\tif (ControllerClass === undefined) {\n\t\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\n\t\t\t\t\t}\n\n\t\t\t\t\tmeta.controller = new ControllerClass(me, datasetIndex);\n\t\t\t\t\tnewControllers.push(meta.controller);\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\treturn newControllers;\n\t\t},\n\n\t\t/**\n\t\t * Reset the elements of all datasets\n\t\t * @private\n\t\t */\n\t\tresetElements: function() {\n\t\t\tvar me = this;\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\n\t\t\t}, me);\n\t\t},\n\n\t\t/**\n\t\t* Resets the chart back to it's state before the initial animation\n\t\t*/\n\t\treset: function() {\n\t\t\tthis.resetElements();\n\t\t\tthis.tooltip.initialize();\n\t\t},\n\n\t\tupdate: function(config) {\n\t\t\tvar me = this;\n\n\t\t\tif (!config || typeof config !== 'object') {\n\t\t\t\t// backwards compatibility\n\t\t\t\tconfig = {\n\t\t\t\t\tduration: config,\n\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tupdateConfig(me);\n\n\t\t\tif (plugins.notify(me, 'beforeUpdate') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In case the entire data object changed\n\t\t\tme.tooltip._data = me.data;\n\n\t\t\t// Make sure dataset controllers are updated and new controllers are reset\n\t\t\tvar newControllers = me.buildOrUpdateControllers();\n\n\t\t\t// Make sure all dataset controllers have correct meta data counts\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n\t\t\t}, me);\n\n\t\t\tme.updateLayout();\n\n\t\t\t// Can only reset the new controllers after the scales have been updated\n\t\t\thelpers.each(newControllers, function(controller) {\n\t\t\t\tcontroller.reset();\n\t\t\t});\n\n\t\t\tme.updateDatasets();\n\n\t\t\t// Need to reset tooltip in case it is displayed with elements that are removed\n\t\t\t// after update.\n\t\t\tme.tooltip.initialize();\n\n\t\t\t// Last active contains items that were previously in the tooltip.\n\t\t\t// When we reset the tooltip, we need to clear it\n\t\t\tme.lastActive = [];\n\n\t\t\t// Do this before render so that any plugins that need final scale updates can use it\n\t\t\tplugins.notify(me, 'afterUpdate');\n\n\t\t\tif (me._bufferedRender) {\n\t\t\t\tme._bufferedRequest = {\n\t\t\t\t\tduration: config.duration,\n\t\t\t\t\teasing: config.easing,\n\t\t\t\t\tlazy: config.lazy\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tme.render(config);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t\t * @private\n\t\t */\n\t\tupdateLayout: function() {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeLayout') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tChart.layoutService.update(this, this.width, this.height);\n\n\t\t\t/**\n\t\t\t * Provided for backward compatibility, use `afterLayout` instead.\n\t\t\t * @method IPlugin#afterScaleUpdate\n\t\t\t * @deprecated since version 2.5.0\n\t\t\t * @todo remove at version 3\n\t\t\t * @private\n\t\t\t */\n\t\t\tplugins.notify(me, 'afterScaleUpdate');\n\t\t\tplugins.notify(me, 'afterLayout');\n\t\t},\n\n\t\t/**\n\t\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t\t * @private\n\t\t */\n\t\tupdateDatasets: function() {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tme.updateDataset(i);\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'afterDatasetsUpdate');\n\t\t},\n\n\t\t/**\n\t\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t\t * @private\n\t\t */\n\t\tupdateDataset: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\tvar args = {\n\t\t\t\tmeta: meta,\n\t\t\t\tindex: index\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmeta.controller.update();\n\n\t\t\tplugins.notify(me, 'afterDatasetUpdate', [args]);\n\t\t},\n\n\t\trender: function(config) {\n\t\t\tvar me = this;\n\n\t\t\tif (!config || typeof config !== 'object') {\n\t\t\t\t// backwards compatibility\n\t\t\t\tconfig = {\n\t\t\t\t\tduration: config,\n\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar duration = config.duration;\n\t\t\tvar lazy = config.lazy;\n\n\t\t\tif (plugins.notify(me, 'beforeRender') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar animationOptions = me.options.animation;\n\t\t\tvar onComplete = function(animation) {\n\t\t\t\tplugins.notify(me, 'afterRender');\n\t\t\t\thelpers.callback(animationOptions && animationOptions.onComplete, [animation], me);\n\t\t\t};\n\n\t\t\tif (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) {\n\t\t\t\tvar animation = new Chart.Animation({\n\t\t\t\t\tnumSteps: (duration || animationOptions.duration) / 16.66, // 60 fps\n\t\t\t\t\teasing: config.easing || animationOptions.easing,\n\n\t\t\t\t\trender: function(chart, animationObject) {\n\t\t\t\t\t\tvar easingFunction = helpers.easing.effects[animationObject.easing];\n\t\t\t\t\t\tvar currentStep = animationObject.currentStep;\n\t\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\n\n\t\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n\t\t\t\t\t},\n\n\t\t\t\t\tonAnimationProgress: animationOptions.onProgress,\n\t\t\t\t\tonAnimationComplete: onComplete\n\t\t\t\t});\n\n\t\t\t\tChart.animationService.addAnimation(me, animation, duration, lazy);\n\t\t\t} else {\n\t\t\t\tme.draw();\n\n\t\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\n\t\t\t\tonComplete(new Chart.Animation({numSteps: 0, chart: me}));\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\n\t\tdraw: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tme.clear();\n\n\t\t\tif (helpers.isNullOrUndef(easingValue)) {\n\t\t\t\teasingValue = 1;\n\t\t\t}\n\n\t\t\tme.transition(easingValue);\n\n\t\t\tif (plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Draw all the scales\n\t\t\thelpers.each(me.boxes, function(box) {\n\t\t\t\tbox.draw(me.chartArea);\n\t\t\t}, me);\n\n\t\t\tif (me.scale) {\n\t\t\t\tme.scale.draw();\n\t\t\t}\n\n\t\t\tme.drawDatasets(easingValue);\n\t\t\tme._drawTooltip(easingValue);\n\n\t\t\tplugins.notify(me, 'afterDraw', [easingValue]);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\ttransition: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.tooltip.transition(easingValue);\n\t\t},\n\n\t\t/**\n\t\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t\t * @private\n\t\t */\n\t\tdrawDatasets: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Draw datasets reversed to support proper line stacking\n\t\t\tfor (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\tme.drawDataset(i, easingValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n\t\t},\n\n\t\t/**\n\t\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t\t * @private\n\t\t */\n\t\tdrawDataset: function(index, easingValue) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\tvar args = {\n\t\t\t\tmeta: meta,\n\t\t\t\tindex: index,\n\t\t\t\teasingValue: easingValue\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmeta.controller.draw(easingValue);\n\n\t\t\tplugins.notify(me, 'afterDatasetDraw', [args]);\n\t\t},\n\n\t\t/**\n\t\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n\t\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n\t\t * @private\n\t\t */\n\t\t_drawTooltip: function(easingValue) {\n\t\t\tvar me = this;\n\t\t\tvar tooltip = me.tooltip;\n\t\t\tvar args = {\n\t\t\t\ttooltip: tooltip,\n\t\t\t\teasingValue: easingValue\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttooltip.draw();\n\n\t\t\tplugins.notify(me, 'afterTooltipDraw', [args]);\n\t\t},\n\n\t\t// Get the single element that was clicked on\n\t\t// @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n\t\tgetElementAtEvent: function(e) {\n\t\t\treturn Interaction.modes.single(this, e);\n\t\t},\n\n\t\tgetElementsAtEvent: function(e) {\n\t\t\treturn Interaction.modes.label(this, e, {intersect: true});\n\t\t},\n\n\t\tgetElementsAtXAxis: function(e) {\n\t\t\treturn Interaction.modes['x-axis'](this, e, {intersect: true});\n\t\t},\n\n\t\tgetElementsAtEventForMode: function(e, mode, options) {\n\t\t\tvar method = Interaction.modes[mode];\n\t\t\tif (typeof method === 'function') {\n\t\t\t\treturn method(this, e, options);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\n\t\tgetDatasetAtEvent: function(e) {\n\t\t\treturn Interaction.modes.dataset(this, e, {intersect: true});\n\t\t},\n\n\t\tgetDatasetMeta: function(datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.data.datasets[datasetIndex];\n\t\t\tif (!dataset._meta) {\n\t\t\t\tdataset._meta = {};\n\t\t\t}\n\n\t\t\tvar meta = dataset._meta[me.id];\n\t\t\tif (!meta) {\n\t\t\t\tmeta = dataset._meta[me.id] = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tdata: [],\n\t\t\t\t\tdataset: null,\n\t\t\t\t\tcontroller: null,\n\t\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\n\t\t\t\t\txAxisID: null,\n\t\t\t\t\tyAxisID: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn meta;\n\t\t},\n\n\t\tgetVisibleDatasetCount: function() {\n\t\t\tvar count = 0;\n\t\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tif (this.isDatasetVisible(i)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\tisDatasetVisible: function(datasetIndex) {\n\t\t\tvar meta = this.getDatasetMeta(datasetIndex);\n\n\t\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n\t\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\t\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n\t\t},\n\n\t\tgenerateLegend: function() {\n\t\t\treturn this.options.legendCallback(this);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tdestroyDatasetMeta: function(datasetIndex) {\n\t\t\tvar id = this.id;\n\t\t\tvar dataset = this.data.datasets[datasetIndex];\n\t\t\tvar meta = dataset._meta && dataset._meta[id];\n\n\t\t\tif (meta) {\n\t\t\t\tmeta.controller.destroy();\n\t\t\t\tdelete dataset._meta[id];\n\t\t\t}\n\t\t},\n\n\t\tdestroy: function() {\n\t\t\tvar me = this;\n\t\t\tvar canvas = me.canvas;\n\t\t\tvar i, ilen;\n\n\t\t\tme.stop();\n\n\t\t\t// dataset controllers need to cleanup associated data\n\t\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tme.destroyDatasetMeta(i);\n\t\t\t}\n\n\t\t\tif (canvas) {\n\t\t\t\tme.unbindEvents();\n\t\t\t\thelpers.canvas.clear(me);\n\t\t\t\tplatform.releaseContext(me.ctx);\n\t\t\t\tme.canvas = null;\n\t\t\t\tme.ctx = null;\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'destroy');\n\n\t\t\tdelete Chart.instances[me.id];\n\t\t},\n\n\t\ttoBase64Image: function() {\n\t\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\n\t\t},\n\n\t\tinitToolTip: function() {\n\t\t\tvar me = this;\n\t\t\tme.tooltip = new Chart.Tooltip({\n\t\t\t\t_chart: me,\n\t\t\t\t_chartInstance: me, // deprecated, backward compatibility\n\t\t\t\t_data: me.data,\n\t\t\t\t_options: me.options.tooltips\n\t\t\t}, me);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tbindEvents: function() {\n\t\t\tvar me = this;\n\t\t\tvar listeners = me._listeners = {};\n\t\t\tvar listener = function() {\n\t\t\t\tme.eventHandler.apply(me, arguments);\n\t\t\t};\n\n\t\t\thelpers.each(me.options.events, function(type) {\n\t\t\t\tplatform.addEventListener(me, type, listener);\n\t\t\t\tlisteners[type] = listener;\n\t\t\t});\n\n\t\t\t// Elements used to detect size change should not be injected for non responsive charts.\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/2210\n\t\t\tif (me.options.responsive) {\n\t\t\t\tlistener = function() {\n\t\t\t\t\tme.resize();\n\t\t\t\t};\n\n\t\t\t\tplatform.addEventListener(me, 'resize', listener);\n\t\t\t\tlisteners.resize = listener;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tunbindEvents: function() {\n\t\t\tvar me = this;\n\t\t\tvar listeners = me._listeners;\n\t\t\tif (!listeners) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdelete me._listeners;\n\t\t\thelpers.each(listeners, function(listener, type) {\n\t\t\t\tplatform.removeEventListener(me, type, listener);\n\t\t\t});\n\t\t},\n\n\t\tupdateHoverStyle: function(elements, mode, enabled) {\n\t\t\tvar method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n\t\t\tvar element, i, ilen;\n\n\t\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\n\t\t\t\telement = elements[i];\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[method](element);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\teventHandler: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar tooltip = me.tooltip;\n\n\t\t\tif (plugins.notify(me, 'beforeEvent', [e]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Buffer any update calls so that renders do not occur\n\t\t\tme._bufferedRender = true;\n\t\t\tme._bufferedRequest = null;\n\n\t\t\tvar changed = me.handleEvent(e);\n\t\t\tchanged |= tooltip && tooltip.handleEvent(e);\n\n\t\t\tplugins.notify(me, 'afterEvent', [e]);\n\n\t\t\tvar bufferedRequest = me._bufferedRequest;\n\t\t\tif (bufferedRequest) {\n\t\t\t\t// If we have an update that was triggered, we need to do a normal render\n\t\t\t\tme.render(bufferedRequest);\n\t\t\t} else if (changed && !me.animating) {\n\t\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\n\t\t\t\tme.stop();\n\n\t\t\t\t// We only need to render at this point. Updating will cause scales to be\n\t\t\t\t// recomputed generating flicker & using more memory than necessary.\n\t\t\t\tme.render(me.options.hover.animationDuration, true);\n\t\t\t}\n\n\t\t\tme._bufferedRender = false;\n\t\t\tme._bufferedRequest = null;\n\n\t\t\treturn me;\n\t\t},\n\n\t\t/**\n\t\t * Handle an event\n\t\t * @private\n\t\t * @param {IEvent} event the event to handle\n\t\t * @return {Boolean} true if the chart needs to re-render\n\t\t */\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options || {};\n\t\t\tvar hoverOptions = options.hover;\n\t\t\tvar changed = false;\n\n\t\t\tme.lastActive = me.lastActive || [];\n\n\t\t\t// Find Active Elements for hover and tooltips\n\t\t\tif (e.type === 'mouseout') {\n\t\t\t\tme.active = [];\n\t\t\t} else {\n\t\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n\t\t\t}\n\n\t\t\t// Invoke onHover hook\n\t\t\t// Need to call with native event here to not break backwards compatibility\n\t\t\thelpers.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n\t\t\tif (e.type === 'mouseup' || e.type === 'click') {\n\t\t\t\tif (options.onClick) {\n\t\t\t\t\t// Use e.native here for backwards compatibility\n\t\t\t\t\toptions.onClick.call(me, e.native, me.active);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove styling for last active (even if it may still be active)\n\t\t\tif (me.lastActive.length) {\n\t\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n\t\t\t}\n\n\t\t\t// Built in hover styling\n\t\t\tif (me.active.length && hoverOptions.mode) {\n\t\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\n\t\t\t}\n\n\t\t\tchanged = !helpers.arrayEquals(me.active, me.lastActive);\n\n\t\t\t// Remember Last Actives\n\t\t\tme.lastActive = me.active;\n\n\t\t\treturn changed;\n\t\t}\n\t});\n\n\t/**\n\t * Provided for backward compatibility, use Chart instead.\n\t * @class Chart.Controller\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t * @private\n\t */\n\tChart.Controller = Chart;\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\nmodule.exports = function(Chart) {\n\n\tvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n\t/**\n\t * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n\t * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n\t * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n\t */\n\tfunction listenArrayEvents(array, listener) {\n\t\tif (array._chartjs) {\n\t\t\tarray._chartjs.listeners.push(listener);\n\t\t\treturn;\n\t\t}\n\n\t\tObject.defineProperty(array, '_chartjs', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: {\n\t\t\t\tlisteners: [listener]\n\t\t\t}\n\t\t});\n\n\t\tarrayEvents.forEach(function(key) {\n\t\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\tvar base = array[key];\n\n\t\t\tObject.defineProperty(array, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: function() {\n\t\t\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\t\t\tvar res = base.apply(this, args);\n\n\t\t\t\t\thelpers.each(array._chartjs.listeners, function(object) {\n\t\t\t\t\t\tif (typeof object[method] === 'function') {\n\t\t\t\t\t\t\tobject[method].apply(object, args);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Removes the given array event listener and cleanup extra attached properties (such as\n\t * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n\t */\n\tfunction unlistenArrayEvents(array, listener) {\n\t\tvar stub = array._chartjs;\n\t\tif (!stub) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar listeners = stub.listeners;\n\t\tvar index = listeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\n\t\tif (listeners.length > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tarrayEvents.forEach(function(key) {\n\t\t\tdelete array[key];\n\t\t});\n\n\t\tdelete array._chartjs;\n\t}\n\n\t// Base class for all dataset controllers (line, bar, etc)\n\tChart.DatasetController = function(chart, datasetIndex) {\n\t\tthis.initialize(chart, datasetIndex);\n\t};\n\n\thelpers.extend(Chart.DatasetController.prototype, {\n\n\t\t/**\n\t\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdatasetElementType: null,\n\n\t\t/**\n\t\t * Element type used to generate a meta data (e.g. Chart.element.Point).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdataElementType: null,\n\n\t\tinitialize: function(chart, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tme.chart = chart;\n\t\t\tme.index = datasetIndex;\n\t\t\tme.linkScales();\n\t\t\tme.addElements();\n\t\t},\n\n\t\tupdateIndex: function(datasetIndex) {\n\t\t\tthis.index = datasetIndex;\n\t\t},\n\n\t\tlinkScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar dataset = me.getDataset();\n\n\t\t\tif (meta.xAxisID === null) {\n\t\t\t\tmeta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n\t\t\t}\n\t\t\tif (meta.yAxisID === null) {\n\t\t\t\tmeta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n\t\t\t}\n\t\t},\n\n\t\tgetDataset: function() {\n\t\t\treturn this.chart.data.datasets[this.index];\n\t\t},\n\n\t\tgetMeta: function() {\n\t\t\treturn this.chart.getDatasetMeta(this.index);\n\t\t},\n\n\t\tgetScaleForId: function(scaleID) {\n\t\t\treturn this.chart.scales[scaleID];\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.update(true);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tdestroy: function() {\n\t\t\tif (this._data) {\n\t\t\t\tunlistenArrayEvents(this._data, this);\n\t\t\t}\n\t\t},\n\n\t\tcreateMetaDataset: function() {\n\t\t\tvar me = this;\n\t\t\tvar type = me.datasetElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart,\n\t\t\t\t_datasetIndex: me.index\n\t\t\t});\n\t\t},\n\n\t\tcreateMetaData: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar type = me.dataElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart,\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index\n\t\t\t});\n\t\t},\n\n\t\taddElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar data = me.getDataset().data || [];\n\t\t\tvar metaData = meta.data;\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\n\t\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\n\t\t\t}\n\n\t\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\n\t\t},\n\n\t\taddElementAndReset: function(index) {\n\t\t\tvar element = this.createMetaData(index);\n\t\t\tthis.getMeta().data.splice(index, 0, element);\n\t\t\tthis.updateElement(element, index, true);\n\t\t},\n\n\t\tbuildOrUpdateElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar data = dataset.data || (dataset.data = []);\n\n\t\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\n\t\t\t// real-time charts), we need to monitor these data modifications and synchronize\n\t\t\t// the internal meta data accordingly.\n\t\t\tif (me._data !== data) {\n\t\t\t\tif (me._data) {\n\t\t\t\t\t// This case happens when the user replaced the data array instance.\n\t\t\t\t\tunlistenArrayEvents(me._data, me);\n\t\t\t\t}\n\n\t\t\t\tlistenArrayEvents(data, me);\n\t\t\t\tme._data = data;\n\t\t\t}\n\n\t\t\t// Re-sync meta data in case the user replaced the data array or if we missed\n\t\t\t// any updates and so make sure that we handle number of datapoints changing.\n\t\t\tme.resyncElements();\n\t\t},\n\n\t\tupdate: helpers.noop,\n\n\t\ttransition: function(easingValue) {\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar elements = meta.data || [];\n\t\t\tvar ilen = elements.length;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\telements[i].transition(easingValue);\n\t\t\t}\n\n\t\t\tif (meta.dataset) {\n\t\t\t\tmeta.dataset.transition(easingValue);\n\t\t\t}\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar elements = meta.data || [];\n\t\t\tvar ilen = elements.length;\n\t\t\tvar i = 0;\n\n\t\t\tif (meta.dataset) {\n\t\t\t\tmeta.dataset.draw();\n\t\t\t}\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\telements[i].draw();\n\t\t\t}\n\t\t},\n\n\t\tremoveHoverStyle: function(element, elementOpts) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\tvar index = element._index;\n\t\t\tvar custom = element.custom || {};\n\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\tvar model = element._model;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);\n\t\t},\n\n\t\tsetHoverStyle: function(element) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\tvar index = element._index;\n\t\t\tvar custom = element.custom || {};\n\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\tvar getHoverColor = helpers.getHoverColor;\n\t\t\tvar model = element._model;\n\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tresyncElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar data = me.getDataset().data;\n\t\t\tvar numMeta = meta.data.length;\n\t\t\tvar numData = data.length;\n\n\t\t\tif (numData < numMeta) {\n\t\t\t\tmeta.data.splice(numData, numMeta - numData);\n\t\t\t} else if (numData > numMeta) {\n\t\t\t\tme.insertElements(numMeta, numData - numMeta);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinsertElements: function(start, count) {\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tthis.addElementAndReset(start + i);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataPush: function() {\n\t\t\tthis.insertElements(this.getDataset().data.length - 1, arguments.length);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataPop: function() {\n\t\t\tthis.getMeta().data.pop();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataShift: function() {\n\t\t\tthis.getMeta().data.shift();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataSplice: function(start, count) {\n\t\t\tthis.getMeta().data.splice(start, count);\n\t\t\tthis.insertElements(start, arguments.length - 2);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataUnshift: function() {\n\t\t\tthis.insertElements(0, arguments.length);\n\t\t}\n\t});\n\n\tChart.DatasetController.extend = helpers.inherits;\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\nmodule.exports = function(Chart) {\n\n\tfunction filterByPosition(array, position) {\n\t\treturn helpers.where(array, function(v) {\n\t\t\treturn v.position === position;\n\t\t});\n\t}\n\n\tfunction sortByWeight(array, reverse) {\n\t\tarray.forEach(function(v, i) {\n\t\t\tv._tmpIndex_ = i;\n\t\t\treturn v;\n\t\t});\n\t\tarray.sort(function(a, b) {\n\t\t\tvar v0 = reverse ? b : a;\n\t\t\tvar v1 = reverse ? a : b;\n\t\t\treturn v0.weight === v1.weight ?\n\t\t\t\tv0._tmpIndex_ - v1._tmpIndex_ :\n\t\t\t\tv0.weight - v1.weight;\n\t\t});\n\t\tarray.forEach(function(v) {\n\t\t\tdelete v._tmpIndex_;\n\t\t});\n\t}\n\n\t/**\n\t * @interface ILayoutItem\n\t * @prop {String} position - The position of the item in the chart layout. Possible values are\n\t * 'left', 'top', 'right', 'bottom', and 'chartArea'\n\t * @prop {Number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n\t * @prop {Boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n\t * @prop {Function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n\t * @prop {Function} update - Takes two parameters: width and height. Returns size of item\n\t * @prop {Function} getPadding - Returns an object with padding on the edges\n\t * @prop {Number} width - Width of item. Must be valid after update()\n\t * @prop {Number} height - Height of item. Must be valid after update()\n\t * @prop {Number} left - Left edge of the item. Set by layout system and cannot be used in update\n\t * @prop {Number} top - Top edge of the item. Set by layout system and cannot be used in update\n\t * @prop {Number} right - Right edge of the item. Set by layout system and cannot be used in update\n\t * @prop {Number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n\t */\n\n\t// The layout service is very self explanatory. It's responsible for the layout within a chart.\n\t// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n\t// It is this service's responsibility of carrying out that layout.\n\tChart.layoutService = {\n\t\tdefaults: {},\n\n\t\t/**\n\t\t * Register a box to a chart.\n\t\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t\t * @param {Chart} chart - the chart to use\n\t\t * @param {ILayoutItem} item - the item to add to be layed out\n\t\t */\n\t\taddBox: function(chart, item) {\n\t\t\tif (!chart.boxes) {\n\t\t\t\tchart.boxes = [];\n\t\t\t}\n\n\t\t\t// initialize item with default values\n\t\t\titem.fullWidth = item.fullWidth || false;\n\t\t\titem.position = item.position || 'top';\n\t\t\titem.weight = item.weight || 0;\n\n\t\t\tchart.boxes.push(item);\n\t\t},\n\n\t\t/**\n\t\t * Remove a layoutItem from a chart\n\t\t * @param {Chart} chart - the chart to remove the box from\n\t\t * @param {Object} layoutItem - the item to remove from the layout\n\t\t */\n\t\tremoveBox: function(chart, layoutItem) {\n\t\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tchart.boxes.splice(index, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Sets (or updates) options on the given `item`.\n\t\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t\t * @param {Object} item - the item to configure with the given options\n\t\t * @param {Object} options - the new item options.\n\t\t */\n\t\tconfigure: function(chart, item, options) {\n\t\t\tvar props = ['fullWidth', 'position', 'weight'];\n\t\t\tvar ilen = props.length;\n\t\t\tvar i = 0;\n\t\t\tvar prop;\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\tprop = props[i];\n\t\t\t\tif (options.hasOwnProperty(prop)) {\n\t\t\t\t\titem[prop] = options[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t\t * then running a fitting algorithm\n\t\t * @param {Chart} chart - the chart\n\t\t * @param {Number} width - the width to fit into\n\t\t * @param {Number} height - the height to fit into\n\t\t */\n\t\tupdate: function(chart, width, height) {\n\t\t\tif (!chart) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar layoutOptions = chart.options.layout || {};\n\t\t\tvar padding = helpers.options.toPadding(layoutOptions.padding);\n\t\t\tvar leftPadding = padding.left;\n\t\t\tvar rightPadding = padding.right;\n\t\t\tvar topPadding = padding.top;\n\t\t\tvar bottomPadding = padding.bottom;\n\n\t\t\tvar leftBoxes = filterByPosition(chart.boxes, 'left');\n\t\t\tvar rightBoxes = filterByPosition(chart.boxes, 'right');\n\t\t\tvar topBoxes = filterByPosition(chart.boxes, 'top');\n\t\t\tvar bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n\t\t\tvar chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea');\n\n\t\t\t// Sort boxes by weight. A higher weight is further away from the chart area\n\t\t\tsortByWeight(leftBoxes, true);\n\t\t\tsortByWeight(rightBoxes, false);\n\t\t\tsortByWeight(topBoxes, true);\n\t\t\tsortByWeight(bottomBoxes, false);\n\n\t\t\t// Essentially we now have any number of boxes on each of the 4 sides.\n\t\t\t// Our canvas looks like the following.\n\t\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n\t\t\t// B1 is the bottom axis\n\t\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n\t\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n\t\t\t// an error will be thrown.\n\t\t\t//\n\t\t\t// |----------------------------------------------------|\n\t\t\t// | T1 (Full Width) |\n\t\t\t// |----------------------------------------------------|\n\t\t\t// | | | T2 | |\n\t\t\t// | |----|-------------------------------------|----|\n\t\t\t// | | | C1 | | C2 | |\n\t\t\t// | | |----| |----| |\n\t\t\t// | | | | |\n\t\t\t// | L1 | L2 | ChartArea (C0) | R1 |\n\t\t\t// | | | | |\n\t\t\t// | | |----| |----| |\n\t\t\t// | | | C3 | | C4 | |\n\t\t\t// | |----|-------------------------------------|----|\n\t\t\t// | | | B1 | |\n\t\t\t// |----------------------------------------------------|\n\t\t\t// | B2 (Full Width) |\n\t\t\t// |----------------------------------------------------|\n\t\t\t//\n\t\t\t// What we do to find the best sizing, we do the following\n\t\t\t// 1. Determine the minimum size of the chart area.\n\t\t\t// 2. Split the remaining width equally between each vertical axis\n\t\t\t// 3. Split the remaining height equally between each horizontal axis\n\t\t\t// 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n\t\t\t// 5. Adjust the sizes of each axis based on it's minimum reported size.\n\t\t\t// 6. Refit each axis\n\t\t\t// 7. Position each axis in the final location\n\t\t\t// 8. Tell the chart the final location of the chart area\n\t\t\t// 9. Tell any axes that overlay the chart area the positions of the chart area\n\n\t\t\t// Step 1\n\t\t\tvar chartWidth = width - leftPadding - rightPadding;\n\t\t\tvar chartHeight = height - topPadding - bottomPadding;\n\t\t\tvar chartAreaWidth = chartWidth / 2; // min 50%\n\t\t\tvar chartAreaHeight = chartHeight / 2; // min 50%\n\n\t\t\t// Step 2\n\t\t\tvar verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);\n\n\t\t\t// Step 3\n\t\t\tvar horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);\n\n\t\t\t// Step 4\n\t\t\tvar maxChartAreaWidth = chartWidth;\n\t\t\tvar maxChartAreaHeight = chartHeight;\n\t\t\tvar minBoxSizes = [];\n\n\t\t\tfunction getMinimumBoxSize(box) {\n\t\t\t\tvar minSize;\n\t\t\t\tvar isHorizontal = box.isHorizontal();\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tminSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);\n\t\t\t\t\tmaxChartAreaHeight -= minSize.height;\n\t\t\t\t} else {\n\t\t\t\t\tminSize = box.update(verticalBoxWidth, chartAreaHeight);\n\t\t\t\t\tmaxChartAreaWidth -= minSize.width;\n\t\t\t\t}\n\n\t\t\t\tminBoxSizes.push({\n\t\t\t\t\thorizontal: isHorizontal,\n\t\t\t\t\tminSize: minSize,\n\t\t\t\t\tbox: box,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);\n\n\t\t\t// If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\t\t\tvar maxHorizontalLeftPadding = 0;\n\t\t\tvar maxHorizontalRightPadding = 0;\n\t\t\tvar maxVerticalTopPadding = 0;\n\t\t\tvar maxVerticalBottomPadding = 0;\n\n\t\t\thelpers.each(topBoxes.concat(bottomBoxes), function(horizontalBox) {\n\t\t\t\tif (horizontalBox.getPadding) {\n\t\t\t\t\tvar boxPadding = horizontalBox.getPadding();\n\t\t\t\t\tmaxHorizontalLeftPadding = Math.max(maxHorizontalLeftPadding, boxPadding.left);\n\t\t\t\t\tmaxHorizontalRightPadding = Math.max(maxHorizontalRightPadding, boxPadding.right);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes), function(verticalBox) {\n\t\t\t\tif (verticalBox.getPadding) {\n\t\t\t\t\tvar boxPadding = verticalBox.getPadding();\n\t\t\t\t\tmaxVerticalTopPadding = Math.max(maxVerticalTopPadding, boxPadding.top);\n\t\t\t\t\tmaxVerticalBottomPadding = Math.max(maxVerticalBottomPadding, boxPadding.bottom);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n\t\t\t// be if the axes are drawn at their minimum sizes.\n\t\t\t// Steps 5 & 6\n\t\t\tvar totalLeftBoxesWidth = leftPadding;\n\t\t\tvar totalRightBoxesWidth = rightPadding;\n\t\t\tvar totalTopBoxesHeight = topPadding;\n\t\t\tvar totalBottomBoxesHeight = bottomPadding;\n\n\t\t\t// Function to fit a box\n\t\t\tfunction fitBox(box) {\n\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minBox) {\n\t\t\t\t\treturn minBox.box === box;\n\t\t\t\t});\n\n\t\t\t\tif (minBoxSize) {\n\t\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\t\tleft: Math.max(totalLeftBoxesWidth, maxHorizontalLeftPadding),\n\t\t\t\t\t\t\tright: Math.max(totalRightBoxesWidth, maxHorizontalRightPadding),\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n\t\t\t\t\t\t// on the margin. Sometimes they need to increase in size slightly\n\t\t\t\t\t\tbox.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update, and calculate the left and right margins for the horizontal boxes\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes), fitBox);\n\n\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\t// Set the Left and Right margins for the horizontal boxes\n\t\t\thelpers.each(topBoxes.concat(bottomBoxes), fitBox);\n\n\t\t\t// Figure out how much margin is on the top and bottom of the vertical boxes\n\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\tfunction finalFitVerticalBox(box) {\n\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minSize) {\n\t\t\t\t\treturn minSize.box === box;\n\t\t\t\t});\n\n\t\t\t\tvar scaleMargin = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\t\tbottom: totalBottomBoxesHeight\n\t\t\t\t};\n\n\t\t\t\tif (minBoxSize) {\n\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Let the left layout know the final margin\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);\n\n\t\t\t// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\t\t\ttotalLeftBoxesWidth = leftPadding;\n\t\t\ttotalRightBoxesWidth = rightPadding;\n\t\t\ttotalTopBoxesHeight = topPadding;\n\t\t\ttotalBottomBoxesHeight = bottomPadding;\n\n\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t});\n\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\t// We may be adding some padding to account for rotated x axis labels\n\t\t\tvar leftPaddingAddition = Math.max(maxHorizontalLeftPadding - totalLeftBoxesWidth, 0);\n\t\t\ttotalLeftBoxesWidth += leftPaddingAddition;\n\t\t\ttotalRightBoxesWidth += Math.max(maxHorizontalRightPadding - totalRightBoxesWidth, 0);\n\n\t\t\tvar topPaddingAddition = Math.max(maxVerticalTopPadding - totalTopBoxesHeight, 0);\n\t\t\ttotalTopBoxesHeight += topPaddingAddition;\n\t\t\ttotalBottomBoxesHeight += Math.max(maxVerticalBottomPadding - totalBottomBoxesHeight, 0);\n\n\t\t\t// Figure out if our chart area changed. This would occur if the dataset layout label rotation\n\t\t\t// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n\t\t\t// without calling `fit` again\n\t\t\tvar newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;\n\t\t\tvar newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;\n\n\t\t\tif (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n\t\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t});\n\n\t\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t});\n\n\t\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmaxChartAreaHeight = newMaxChartAreaHeight;\n\t\t\t\tmaxChartAreaWidth = newMaxChartAreaWidth;\n\t\t\t}\n\n\t\t\t// Step 7 - Position the boxes\n\t\t\tvar left = leftPadding + leftPaddingAddition;\n\t\t\tvar top = topPadding + topPaddingAddition;\n\n\t\t\tfunction placeBox(box) {\n\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\tbox.left = box.fullWidth ? leftPadding : totalLeftBoxesWidth;\n\t\t\t\t\tbox.right = box.fullWidth ? width - rightPadding : totalLeftBoxesWidth + maxChartAreaWidth;\n\t\t\t\t\tbox.top = top;\n\t\t\t\t\tbox.bottom = top + box.height;\n\n\t\t\t\t\t// Move to next point\n\t\t\t\t\ttop = box.bottom;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbox.left = left;\n\t\t\t\t\tbox.right = left + box.width;\n\t\t\t\t\tbox.top = totalTopBoxesHeight;\n\t\t\t\t\tbox.bottom = totalTopBoxesHeight + maxChartAreaHeight;\n\n\t\t\t\t\t// Move to next point\n\t\t\t\t\tleft = box.right;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thelpers.each(leftBoxes.concat(topBoxes), placeBox);\n\n\t\t\t// Account for chart width and height\n\t\t\tleft += maxChartAreaWidth;\n\t\t\ttop += maxChartAreaHeight;\n\n\t\t\thelpers.each(rightBoxes, placeBox);\n\t\t\thelpers.each(bottomBoxes, placeBox);\n\n\t\t\t// Step 8\n\t\t\tchart.chartArea = {\n\t\t\t\tleft: totalLeftBoxesWidth,\n\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\tright: totalLeftBoxesWidth + maxChartAreaWidth,\n\t\t\t\tbottom: totalTopBoxesHeight + maxChartAreaHeight\n\t\t\t};\n\n\t\t\t// Step 9\n\t\t\thelpers.each(chartAreaBoxes, function(box) {\n\t\t\t\tbox.left = chart.chartArea.left;\n\t\t\t\tbox.top = chart.chartArea.top;\n\t\t\t\tbox.right = chart.chartArea.right;\n\t\t\t\tbox.bottom = chart.chartArea.bottom;\n\n\t\t\t\tbox.update(maxChartAreaWidth, maxChartAreaHeight);\n\t\t\t});\n\t\t}\n\t};\n};\n","'use strict';\n\nvar defaults = require('./core.defaults');\nvar helpers = require('../helpers/index');\n\nmodule.exports = function(Chart) {\n\n\tChart.scaleService = {\n\t\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n\t\t// use the new chart options to grab the correct scale\n\t\tconstructors: {},\n\t\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\n\t\t// old browsers\n\n\t\t// Scale config defaults\n\t\tdefaults: {},\n\t\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\n\t\t\tthis.constructors[type] = scaleConstructor;\n\t\t\tthis.defaults[type] = helpers.clone(scaleDefaults);\n\t\t},\n\t\tgetScaleConstructor: function(type) {\n\t\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n\t\t},\n\t\tgetScaleDefaults: function(type) {\n\t\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\n\t\t\treturn this.defaults.hasOwnProperty(type) ? helpers.merge({}, [defaults.scale, this.defaults[type]]) : {};\n\t\t},\n\t\tupdateScaleDefaults: function(type, additions) {\n\t\t\tvar me = this;\n\t\t\tif (me.defaults.hasOwnProperty(type)) {\n\t\t\t\tme.defaults[type] = helpers.extend(me.defaults[type], additions);\n\t\t\t}\n\t\t},\n\t\taddScalesToLayout: function(chart) {\n\t\t\t// Adds each scale to the chart.boxes array to be sized accordingly\n\t\t\thelpers.each(chart.scales, function(scale) {\n\t\t\t\t// Set ILayoutItem parameters for backwards compatibility\n\t\t\t\tscale.fullWidth = scale.options.fullWidth;\n\t\t\t\tscale.position = scale.options.position;\n\t\t\t\tscale.weight = scale.options.weight;\n\t\t\t\tChart.layoutService.addBox(chart, scale);\n\t\t\t});\n\t\t}\n\t};\n};\n","'use strict';\n\nvar defaults = require('./core.defaults');\nvar Element = require('./core.element');\nvar helpers = require('../helpers/index');\nvar Ticks = require('./core.ticks');\n\ndefaults._set('scale', {\n\tdisplay: true,\n\tposition: 'left',\n\toffset: false,\n\n\t// grid line settings\n\tgridLines: {\n\t\tdisplay: true,\n\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\tlineWidth: 1,\n\t\tdrawBorder: true,\n\t\tdrawOnChartArea: true,\n\t\tdrawTicks: true,\n\t\ttickMarkLength: 10,\n\t\tzeroLineWidth: 1,\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\n\t\tzeroLineBorderDash: [],\n\t\tzeroLineBorderDashOffset: 0.0,\n\t\toffsetGridLines: false,\n\t\tborderDash: [],\n\t\tborderDashOffset: 0.0\n\t},\n\n\t// scale label\n\tscaleLabel: {\n\t\t// display property\n\t\tdisplay: false,\n\n\t\t// actual label\n\t\tlabelString: '',\n\n\t\t// line height\n\t\tlineHeight: 1.2,\n\n\t\t// top/bottom padding\n\t\tpadding: {\n\t\t\ttop: 4,\n\t\t\tbottom: 4\n\t\t}\n\t},\n\n\t// label settings\n\tticks: {\n\t\tbeginAtZero: false,\n\t\tminRotation: 0,\n\t\tmaxRotation: 50,\n\t\tmirror: false,\n\t\tpadding: 0,\n\t\treverse: false,\n\t\tdisplay: true,\n\t\tautoSkip: true,\n\t\tautoSkipPadding: 0,\n\t\tlabelOffset: 0,\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n\t\tcallback: Ticks.formatters.values,\n\t\tminor: {},\n\t\tmajor: {}\n\t}\n});\n\nfunction labelsFromTicks(ticks) {\n\tvar labels = [];\n\tvar i, ilen;\n\n\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\tlabels.push(ticks[i].label);\n\t}\n\n\treturn labels;\n}\n\nfunction getLineValue(scale, index, offsetGridLines) {\n\tvar lineValue = scale.getPixelForTick(index);\n\n\tif (offsetGridLines) {\n\t\tif (index === 0) {\n\t\t\tlineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n\t\t} else {\n\t\t\tlineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n\t\t}\n\t}\n\treturn lineValue;\n}\n\nmodule.exports = function(Chart) {\n\n\tfunction computeTextSize(context, tick, font) {\n\t\treturn helpers.isArray(tick) ?\n\t\t\thelpers.longestText(context, font, tick) :\n\t\t\tcontext.measureText(tick).width;\n\t}\n\n\tfunction parseFontOptions(options) {\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar globalDefaults = defaults.global;\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n\t\tvar style = valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle);\n\t\tvar family = valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily);\n\n\t\treturn {\n\t\t\tsize: size,\n\t\t\tstyle: style,\n\t\t\tfamily: family,\n\t\t\tfont: helpers.fontString(size, style, family)\n\t\t};\n\t}\n\n\tfunction parseLineHeight(options) {\n\t\treturn helpers.options.toLineHeight(\n\t\t\thelpers.valueOrDefault(options.lineHeight, 1.2),\n\t\t\thelpers.valueOrDefault(options.fontSize, defaults.global.defaultFontSize));\n\t}\n\n\tChart.Scale = Element.extend({\n\t\t/**\n\t\t * Get the padding needed for the scale\n\t\t * @method getPadding\n\t\t * @private\n\t\t * @returns {Padding} the necessary padding\n\t\t */\n\t\tgetPadding: function() {\n\t\t\tvar me = this;\n\t\t\treturn {\n\t\t\t\tleft: me.paddingLeft || 0,\n\t\t\t\ttop: me.paddingTop || 0,\n\t\t\t\tright: me.paddingRight || 0,\n\t\t\t\tbottom: me.paddingBottom || 0\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Returns the scale tick objects ({label, major})\n\t\t * @since 2.7\n\t\t */\n\t\tgetTicks: function() {\n\t\t\treturn this._ticks;\n\t\t},\n\n\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\t\t// Any function defined here is inherited by all scale types.\n\t\t// Any function can be extended by the scale type\n\n\t\tmergeTicksOptions: function() {\n\t\t\tvar ticks = this.options.ticks;\n\t\t\tif (ticks.minor === false) {\n\t\t\t\tticks.minor = {\n\t\t\t\t\tdisplay: false\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (ticks.major === false) {\n\t\t\t\tticks.major = {\n\t\t\t\t\tdisplay: false\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (var key in ticks) {\n\t\t\t\tif (key !== 'major' && key !== 'minor') {\n\t\t\t\t\tif (typeof ticks.minor[key] === 'undefined') {\n\t\t\t\t\t\tticks.minor[key] = ticks[key];\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof ticks.major[key] === 'undefined') {\n\t\t\t\t\t\tticks.major[key] = ticks[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbeforeUpdate: function() {\n\t\t\thelpers.callback(this.options.beforeUpdate, [this]);\n\t\t},\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\t\t\tvar i, ilen, labels, label, ticks, tick;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = helpers.extend({\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 0\n\t\t\t}, margins);\n\t\t\tme.longestTextCache = me.longestTextCache || {};\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\n\t\t\t// Data min/max\n\t\t\tme.beforeDataLimits();\n\t\t\tme.determineDataLimits();\n\t\t\tme.afterDataLimits();\n\n\t\t\t// Ticks - `this.ticks` is now DEPRECATED!\n\t\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n\t\t\t// and must not be accessed directly from outside this class. `this.ticks` being\n\t\t\t// around for long time and not marked as private, we can't change its structure\n\t\t\t// without unexpected breaking changes. If you need to access the scale ticks,\n\t\t\t// use scale.getTicks() instead.\n\n\t\t\tme.beforeBuildTicks();\n\n\t\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\n\t\t\t// we still support no return (`this.ticks` internally set by calling this method).\n\t\t\tticks = me.buildTicks() || [];\n\n\t\t\tme.afterBuildTicks();\n\n\t\t\tme.beforeTickToLabelConversion();\n\n\t\t\t// New implementations should return the formatted tick labels but for BACKWARD\n\t\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\n\t\t\t// this method and supposed to contain only string values).\n\t\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\n\n\t\t\tme.afterTickToLabelConversion();\n\n\t\t\tme.ticks = labels; // BACKWARD COMPATIBILITY\n\n\t\t\t// IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n\n\t\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\t\t\tfor (i = 0, ilen = labels.length; i < ilen; ++i) {\n\t\t\t\tlabel = labels[i];\n\t\t\t\ttick = ticks[i];\n\t\t\t\tif (!tick) {\n\t\t\t\t\tticks.push(tick = {\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\tmajor: false\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttick.label = label;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme._ticks = ticks;\n\n\t\t\t// Tick Rotation\n\t\t\tme.beforeCalculateTickRotation();\n\t\t\tme.calculateTickRotation();\n\t\t\tme.afterCalculateTickRotation();\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\n\t\t},\n\t\tafterUpdate: function() {\n\t\t\thelpers.callback(this.options.afterUpdate, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeSetDimensions: function() {\n\t\t\thelpers.callback(this.options.beforeSetDimensions, [this]);\n\t\t},\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\t\t},\n\t\tafterSetDimensions: function() {\n\t\t\thelpers.callback(this.options.afterSetDimensions, [this]);\n\t\t},\n\n\t\t// Data limits\n\t\tbeforeDataLimits: function() {\n\t\t\thelpers.callback(this.options.beforeDataLimits, [this]);\n\t\t},\n\t\tdetermineDataLimits: helpers.noop,\n\t\tafterDataLimits: function() {\n\t\t\thelpers.callback(this.options.afterDataLimits, [this]);\n\t\t},\n\n\t\t//\n\t\tbeforeBuildTicks: function() {\n\t\t\thelpers.callback(this.options.beforeBuildTicks, [this]);\n\t\t},\n\t\tbuildTicks: helpers.noop,\n\t\tafterBuildTicks: function() {\n\t\t\thelpers.callback(this.options.afterBuildTicks, [this]);\n\t\t},\n\n\t\tbeforeTickToLabelConversion: function() {\n\t\t\thelpers.callback(this.options.beforeTickToLabelConversion, [this]);\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\t// Convert ticks to strings\n\t\t\tvar tickOpts = me.options.ticks;\n\t\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n\t\t},\n\t\tafterTickToLabelConversion: function() {\n\t\t\thelpers.callback(this.options.afterTickToLabelConversion, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeCalculateTickRotation: function() {\n\t\t\thelpers.callback(this.options.beforeCalculateTickRotation, [this]);\n\t\t},\n\t\tcalculateTickRotation: function() {\n\t\t\tvar me = this;\n\t\t\tvar context = me.ctx;\n\t\t\tvar tickOpts = me.options.ticks;\n\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\t// Get the width of each grid by calculating the difference\n\t\t\t// between x offsets between 0 and 1.\n\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\tcontext.font = tickFont.font;\n\n\t\t\tvar labelRotation = tickOpts.minRotation || 0;\n\n\t\t\tif (labels.length && me.options.display && me.isHorizontal()) {\n\t\t\t\tvar originalLabelWidth = helpers.longestText(context, tickFont.font, labels, me.longestTextCache);\n\t\t\t\tvar labelWidth = originalLabelWidth;\n\t\t\t\tvar cosRotation, sinRotation;\n\n\t\t\t\t// Allow 3 pixels x2 padding either side for label readability\n\t\t\t\tvar tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n\t\t\t\t// Max label rotation can be set or default to 90 - also act as a loop counter\n\t\t\t\twhile (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n\t\t\t\t\tvar angleRadians = helpers.toRadians(labelRotation);\n\t\t\t\t\tcosRotation = Math.cos(angleRadians);\n\t\t\t\t\tsinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\tif (sinRotation * originalLabelWidth > me.maxHeight) {\n\t\t\t\t\t\t// go back one step\n\t\t\t\t\t\tlabelRotation--;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tlabelRotation++;\n\t\t\t\t\tlabelWidth = cosRotation * originalLabelWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.labelRotation = labelRotation;\n\t\t},\n\t\tafterCalculateTickRotation: function() {\n\t\t\thelpers.callback(this.options.afterCalculateTickRotation, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeFit: function() {\n\t\t\thelpers.callback(this.options.beforeFit, [this]);\n\t\t},\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\t// Reset\n\t\t\tvar minSize = me.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\n\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar scaleLabelOpts = opts.scaleLabel;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar display = opts.display;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\tvar tickMarkLength = opts.gridLines.tickMarkLength;\n\n\t\t\t// Width\n\t\t\tif (isHorizontal) {\n\t\t\t\t// subtract the margins to line up with the chartArea if we are a full width scale\n\t\t\t\tminSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n\t\t\t} else {\n\t\t\t\tminSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t}\n\n\t\t\t// height\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t} else {\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\t// Are we showing a title for the scale?\n\t\t\tif (scaleLabelOpts.display && display) {\n\t\t\t\tvar scaleLabelLineHeight = parseLineHeight(scaleLabelOpts);\n\t\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabelOpts.padding);\n\t\t\t\tvar deltaHeight = scaleLabelLineHeight + scaleLabelPadding.height;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tminSize.height += deltaHeight;\n\t\t\t\t} else {\n\t\t\t\t\tminSize.width += deltaHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Don't bother fitting the ticks if we are not showing them\n\t\t\tif (tickOpts.display && display) {\n\t\t\t\tvar largestTextWidth = helpers.longestText(me.ctx, tickFont.font, labels, me.longestTextCache);\n\t\t\t\tvar tallestLabelHeightInLines = helpers.numberOfLabelLines(labels);\n\t\t\t\tvar lineSpace = tickFont.size * 0.5;\n\t\t\t\tvar tickPadding = me.options.ticks.padding;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// A horizontal axis is more constrained by the height.\n\t\t\t\t\tme.longestLabelWidth = largestTextWidth;\n\n\t\t\t\t\tvar angleRadians = helpers.toRadians(me.labelRotation);\n\t\t\t\t\tvar cosRotation = Math.cos(angleRadians);\n\t\t\t\t\tvar sinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\t// TODO - improve this calculation\n\t\t\t\t\tvar labelHeight = (sinRotation * largestTextWidth)\n\t\t\t\t\t\t+ (tickFont.size * tallestLabelHeightInLines)\n\t\t\t\t\t\t+ (lineSpace * (tallestLabelHeightInLines - 1))\n\t\t\t\t\t\t+ lineSpace; // padding\n\n\t\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n\n\t\t\t\t\tme.ctx.font = tickFont.font;\n\t\t\t\t\tvar firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.font);\n\t\t\t\t\tvar lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.font);\n\n\t\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n\t\t\t\t\t// which means that the right padding is dominated by the font height\n\t\t\t\t\tif (me.labelRotation !== 0) {\n\t\t\t\t\t\tme.paddingLeft = opts.position === 'bottom' ? (cosRotation * firstLabelWidth) + 3 : (cosRotation * lineSpace) + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\tme.paddingRight = opts.position === 'bottom' ? (cosRotation * lineSpace) + 3 : (cosRotation * lastLabelWidth) + 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.paddingLeft = firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\tme.paddingRight = lastLabelWidth / 2 + 3;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\n\t\t\t\t\t// dominant factor here, so get that length first and account for padding\n\t\t\t\t\tif (tickOpts.mirror) {\n\t\t\t\t\t\tlargestTextWidth = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// use lineSpace for consistency with horizontal axis\n\t\t\t\t\t\t// tickPadding is not implemented for horizontal\n\t\t\t\t\t\tlargestTextWidth += tickPadding + lineSpace;\n\t\t\t\t\t}\n\n\t\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n\n\t\t\t\t\tme.paddingTop = tickFont.size / 2;\n\t\t\t\t\tme.paddingBottom = tickFont.size / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.handleMargins();\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\t\t},\n\n\t\t/**\n\t\t * Handle margins and padding interactions\n\t\t * @private\n\t\t */\n\t\thandleMargins: function() {\n\t\t\tvar me = this;\n\t\t\tif (me.margins) {\n\t\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\t\tme.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n\t\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\t\tme.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n\t\t\t}\n\t\t},\n\n\t\tafterFit: function() {\n\t\t\thelpers.callback(this.options.afterFit, [this]);\n\t\t},\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t},\n\t\tisFullWidth: function() {\n\t\t\treturn (this.options.fullWidth);\n\t\t},\n\n\t\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n\t\tgetRightValue: function(rawValue) {\n\t\t\t// Null and undefined values first\n\t\t\tif (helpers.isNullOrUndef(rawValue)) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\t\t\tif (typeof rawValue === 'number' && !isFinite(rawValue)) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// If it is in fact an object, dive in one more level\n\t\t\tif (rawValue) {\n\t\t\t\tif (this.isHorizontal()) {\n\t\t\t\t\tif (rawValue.x !== undefined) {\n\t\t\t\t\t\treturn this.getRightValue(rawValue.x);\n\t\t\t\t\t}\n\t\t\t\t} else if (rawValue.y !== undefined) {\n\t\t\t\t\treturn this.getRightValue(rawValue.y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Value is good, return it\n\t\t\treturn rawValue;\n\t\t},\n\n\t\t/**\n\t\t * Used to get the value to display in the tooltip for the data at the given index\n\t\t * @param index\n\t\t * @param datasetIndex\n\t\t */\n\t\tgetLabelForIndex: helpers.noop,\n\n\t\t/**\n\t\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t * @param value\n\t\t * @param index\n\t\t * @param datasetIndex\n\t\t */\n\t\tgetPixelForValue: helpers.noop,\n\n\t\t/**\n\t\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t * @param pixel\n\t\t */\n\t\tgetValueForPixel: helpers.noop,\n\n\t\t/**\n\t\t * Returns the location of the tick at the given index\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetPixelForTick: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\t\tvar pixel = (tickWidth * index) + me.paddingLeft;\n\n\t\t\t\tif (offset) {\n\t\t\t\t\tpixel += tickWidth / 2;\n\t\t\t\t}\n\n\t\t\t\tvar finalVal = me.left + Math.round(pixel);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\treturn me.top + (index * (innerHeight / (me._ticks.length - 1)));\n\t\t},\n\n\t\t/**\n\t\t * Utility for getting the pixel location of a percentage of scale\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetPixelForDecimal: function(decimal) {\n\t\t\tvar me = this;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n\t\t\t\tvar finalVal = me.left + Math.round(valueOffset);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\treturn me.top + (decimal * me.height);\n\t\t},\n\n\t\t/**\n\t\t * Returns the pixel for the minimum chart value\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetBasePixel: function() {\n\t\t\treturn this.getPixelForValue(this.getBaseValue());\n\t\t},\n\n\t\tgetBaseValue: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.beginAtZero ? 0 :\n\t\t\t\tmin < 0 && max < 0 ? max :\n\t\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t\t0;\n\t\t},\n\n\t\t/**\n\t\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\n\t\t * @private\n\t\t */\n\t\t_autoSkip: function(ticks) {\n\t\t\tvar skipRatio;\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar optionTicks = me.options.ticks.minor;\n\t\t\tvar tickCount = ticks.length;\n\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\t\t\tvar cosRotation = Math.cos(labelRotationRadians);\n\t\t\tvar longestRotatedLabel = me.longestLabelWidth * cosRotation;\n\t\t\tvar result = [];\n\t\t\tvar i, tick, shouldSkip;\n\n\t\t\t// figure out the maximum number of gridlines to show\n\t\t\tvar maxTicks;\n\t\t\tif (optionTicks.maxTicksLimit) {\n\t\t\t\tmaxTicks = optionTicks.maxTicksLimit;\n\t\t\t}\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tskipRatio = false;\n\n\t\t\t\tif ((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount > (me.width - (me.paddingLeft + me.paddingRight))) {\n\t\t\t\t\tskipRatio = 1 + Math.floor(((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount) / (me.width - (me.paddingLeft + me.paddingRight)));\n\t\t\t\t}\n\n\t\t\t\t// if they defined a max number of optionTicks,\n\t\t\t\t// increase skipRatio until that number is met\n\t\t\t\tif (maxTicks && tickCount > maxTicks) {\n\t\t\t\t\tskipRatio = Math.max(skipRatio, Math.floor(tickCount / maxTicks));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < tickCount; i++) {\n\t\t\t\ttick = ticks[i];\n\n\t\t\t\t// Since we always show the last tick,we need may need to hide the last shown one before\n\t\t\t\tshouldSkip = (skipRatio > 1 && i % skipRatio > 0) || (i % skipRatio === 0 && i + skipRatio >= tickCount);\n\t\t\t\tif (shouldSkip && i !== tickCount - 1) {\n\t\t\t\t\t// leave tick in place but make sure it's not displayed (#4635)\n\t\t\t\t\tdelete tick.label;\n\t\t\t\t}\n\t\t\t\tresult.push(tick);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\t// Actually draw the scale on the canvas\n\t\t// @param {rectangle} chartArea : the area of the chart to draw full grid lines on\n\t\tdraw: function(chartArea) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tif (!options.display) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar context = me.ctx;\n\t\t\tvar globalDefaults = defaults.global;\n\t\t\tvar optionTicks = options.ticks.minor;\n\t\t\tvar optionMajorTicks = options.ticks.major || optionTicks;\n\t\t\tvar gridLines = options.gridLines;\n\t\t\tvar scaleLabel = options.scaleLabel;\n\n\t\t\tvar isRotated = me.labelRotation !== 0;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tvar ticks = optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n\t\t\tvar tickFontColor = helpers.valueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar tickFont = parseFontOptions(optionTicks);\n\t\t\tvar majorTickFontColor = helpers.valueOrDefault(optionMajorTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar majorTickFont = parseFontOptions(optionMajorTicks);\n\n\t\t\tvar tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n\n\t\t\tvar scaleLabelFontColor = helpers.valueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar scaleLabelFont = parseFontOptions(scaleLabel);\n\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabel.padding);\n\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\n\t\t\tvar itemsToDraw = [];\n\n\t\t\tvar xTickStart = options.position === 'right' ? me.left : me.right - tl;\n\t\t\tvar xTickEnd = options.position === 'right' ? me.left + tl : me.right;\n\t\t\tvar yTickStart = options.position === 'bottom' ? me.top : me.bottom - tl;\n\t\t\tvar yTickEnd = options.position === 'bottom' ? me.top + tl : me.bottom;\n\n\t\t\thelpers.each(ticks, function(tick, index) {\n\t\t\t\t// autoskipper skipped this tick (#4635)\n\t\t\t\tif (helpers.isNullOrUndef(tick.label)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar label = tick.label;\n\t\t\t\tvar lineWidth, lineColor, borderDash, borderDashOffset;\n\t\t\t\tif (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n\t\t\t\t\t// Draw the first index specially\n\t\t\t\t\tlineWidth = gridLines.zeroLineWidth;\n\t\t\t\t\tlineColor = gridLines.zeroLineColor;\n\t\t\t\t\tborderDash = gridLines.zeroLineBorderDash;\n\t\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset;\n\t\t\t\t} else {\n\t\t\t\t\tlineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, index);\n\t\t\t\t\tlineColor = helpers.valueAtIndexOrDefault(gridLines.color, index);\n\t\t\t\t\tborderDash = helpers.valueOrDefault(gridLines.borderDash, globalDefaults.borderDash);\n\t\t\t\t\tborderDashOffset = helpers.valueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);\n\t\t\t\t}\n\n\t\t\t\t// Common properties\n\t\t\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;\n\t\t\t\tvar textAlign = 'middle';\n\t\t\t\tvar textBaseline = 'middle';\n\t\t\t\tvar tickPadding = optionTicks.padding;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tvar labelYOffset = tl + tickPadding;\n\n\t\t\t\t\tif (options.position === 'bottom') {\n\t\t\t\t\t\t// bottom\n\t\t\t\t\t\ttextBaseline = !isRotated ? 'top' : 'middle';\n\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'right';\n\t\t\t\t\t\tlabelY = me.top + labelYOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// top\n\t\t\t\t\t\ttextBaseline = !isRotated ? 'bottom' : 'middle';\n\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'left';\n\t\t\t\t\t\tlabelY = me.bottom - labelYOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar xLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\tif (xLineValue < me.left) {\n\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t}\n\t\t\t\t\txLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\tlabelX = me.getPixelForTick(index) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n\t\t\t\t\ttx1 = tx2 = x1 = x2 = xLineValue;\n\t\t\t\t\tty1 = yTickStart;\n\t\t\t\t\tty2 = yTickEnd;\n\t\t\t\t\ty1 = chartArea.top;\n\t\t\t\t\ty2 = chartArea.bottom;\n\t\t\t\t} else {\n\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\tvar labelXOffset;\n\n\t\t\t\t\tif (optionTicks.mirror) {\n\t\t\t\t\t\ttextAlign = isLeft ? 'left' : 'right';\n\t\t\t\t\t\tlabelXOffset = tickPadding;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttextAlign = isLeft ? 'right' : 'left';\n\t\t\t\t\t\tlabelXOffset = tl + tickPadding;\n\t\t\t\t\t}\n\n\t\t\t\t\tlabelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset;\n\n\t\t\t\t\tvar yLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\tif (yLineValue < me.top) {\n\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t}\n\t\t\t\t\tyLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\tlabelY = me.getPixelForTick(index) + optionTicks.labelOffset;\n\n\t\t\t\t\ttx1 = xTickStart;\n\t\t\t\t\ttx2 = xTickEnd;\n\t\t\t\t\tx1 = chartArea.left;\n\t\t\t\t\tx2 = chartArea.right;\n\t\t\t\t\tty1 = ty2 = y1 = y2 = yLineValue;\n\t\t\t\t}\n\n\t\t\t\titemsToDraw.push({\n\t\t\t\t\ttx1: tx1,\n\t\t\t\t\tty1: ty1,\n\t\t\t\t\ttx2: tx2,\n\t\t\t\t\tty2: ty2,\n\t\t\t\t\tx1: x1,\n\t\t\t\t\ty1: y1,\n\t\t\t\t\tx2: x2,\n\t\t\t\t\ty2: y2,\n\t\t\t\t\tlabelX: labelX,\n\t\t\t\t\tlabelY: labelY,\n\t\t\t\t\tglWidth: lineWidth,\n\t\t\t\t\tglColor: lineColor,\n\t\t\t\t\tglBorderDash: borderDash,\n\t\t\t\t\tglBorderDashOffset: borderDashOffset,\n\t\t\t\t\trotation: -1 * labelRotationRadians,\n\t\t\t\t\tlabel: label,\n\t\t\t\t\tmajor: tick.major,\n\t\t\t\t\ttextBaseline: textBaseline,\n\t\t\t\t\ttextAlign: textAlign\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Draw all of the tick labels, tick marks, and grid lines at the correct places\n\t\t\thelpers.each(itemsToDraw, function(itemToDraw) {\n\t\t\t\tif (gridLines.display) {\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.lineWidth = itemToDraw.glWidth;\n\t\t\t\t\tcontext.strokeStyle = itemToDraw.glColor;\n\t\t\t\t\tif (context.setLineDash) {\n\t\t\t\t\t\tcontext.setLineDash(itemToDraw.glBorderDash);\n\t\t\t\t\t\tcontext.lineDashOffset = itemToDraw.glBorderDashOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.beginPath();\n\n\t\t\t\t\tif (gridLines.drawTicks) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (gridLines.drawOnChartArea) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.x1, itemToDraw.y1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.x2, itemToDraw.y2);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\n\t\t\t\tif (optionTicks.display) {\n\t\t\t\t\t// Make sure we draw text in the correct color and font\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.translate(itemToDraw.labelX, itemToDraw.labelY);\n\t\t\t\t\tcontext.rotate(itemToDraw.rotation);\n\t\t\t\t\tcontext.font = itemToDraw.major ? majorTickFont.font : tickFont.font;\n\t\t\t\t\tcontext.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n\t\t\t\t\tcontext.textBaseline = itemToDraw.textBaseline;\n\t\t\t\t\tcontext.textAlign = itemToDraw.textAlign;\n\n\t\t\t\t\tvar label = itemToDraw.label;\n\t\t\t\t\tif (helpers.isArray(label)) {\n\t\t\t\t\t\tfor (var i = 0, y = 0; i < label.length; ++i) {\n\t\t\t\t\t\t\t// We just make sure the multiline element is a string here..\n\t\t\t\t\t\t\tcontext.fillText('' + label[i], 0, y);\n\t\t\t\t\t\t\t// apply same lineSpacing as calculated @ L#320\n\t\t\t\t\t\t\ty += (tickFont.size * 1.5);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.fillText(label, 0, 0);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (scaleLabel.display) {\n\t\t\t\t// Draw the scale label\n\t\t\t\tvar scaleLabelX;\n\t\t\t\tvar scaleLabelY;\n\t\t\t\tvar rotation = 0;\n\t\t\t\tvar halfLineHeight = parseLineHeight(scaleLabel) / 2;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tscaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width\n\t\t\t\t\tscaleLabelY = options.position === 'bottom'\n\t\t\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\n\t\t\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\n\t\t\t\t} else {\n\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\tscaleLabelX = isLeft\n\t\t\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\n\t\t\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\n\t\t\t\t\tscaleLabelY = me.top + ((me.bottom - me.top) / 2);\n\t\t\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n\t\t\t\t}\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.translate(scaleLabelX, scaleLabelY);\n\t\t\t\tcontext.rotate(rotation);\n\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\tcontext.textBaseline = 'middle';\n\t\t\t\tcontext.fillStyle = scaleLabelFontColor; // render in correct colour\n\t\t\t\tcontext.font = scaleLabelFont.font;\n\t\t\t\tcontext.fillText(scaleLabel.labelString, 0, 0);\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\tif (gridLines.drawBorder) {\n\t\t\t\t// Draw the line at the edge of the axis\n\t\t\t\tcontext.lineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, 0);\n\t\t\t\tcontext.strokeStyle = helpers.valueAtIndexOrDefault(gridLines.color, 0);\n\t\t\t\tvar x1 = me.left;\n\t\t\t\tvar x2 = me.right;\n\t\t\t\tvar y1 = me.top;\n\t\t\t\tvar y2 = me.bottom;\n\n\t\t\t\tvar aliasPixel = helpers.aliasPixel(context.lineWidth);\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\ty1 = y2 = options.position === 'top' ? me.bottom : me.top;\n\t\t\t\t\ty1 += aliasPixel;\n\t\t\t\t\ty2 += aliasPixel;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = x2 = options.position === 'left' ? me.right : me.left;\n\t\t\t\t\tx1 += aliasPixel;\n\t\t\t\t\tx2 += aliasPixel;\n\t\t\t\t}\n\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(x1, y1);\n\t\t\t\tcontext.lineTo(x2, y2);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('./core.defaults');\nvar Element = require('./core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\ttooltips: {\n\t\tenabled: true,\n\t\tcustom: null,\n\t\tmode: 'nearest',\n\t\tposition: 'average',\n\t\tintersect: true,\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\ttitleFontStyle: 'bold',\n\t\ttitleSpacing: 2,\n\t\ttitleMarginBottom: 6,\n\t\ttitleFontColor: '#fff',\n\t\ttitleAlign: 'left',\n\t\tbodySpacing: 2,\n\t\tbodyFontColor: '#fff',\n\t\tbodyAlign: 'left',\n\t\tfooterFontStyle: 'bold',\n\t\tfooterSpacing: 2,\n\t\tfooterMarginTop: 6,\n\t\tfooterFontColor: '#fff',\n\t\tfooterAlign: 'left',\n\t\tyPadding: 6,\n\t\txPadding: 6,\n\t\tcaretPadding: 2,\n\t\tcaretSize: 5,\n\t\tcornerRadius: 6,\n\t\tmultiKeyBackground: '#fff',\n\t\tdisplayColors: true,\n\t\tborderColor: 'rgba(0,0,0,0)',\n\t\tborderWidth: 0,\n\t\tcallbacks: {\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeTitle: helpers.noop,\n\t\t\ttitle: function(tooltipItems, data) {\n\t\t\t\t// Pick first xLabel for now\n\t\t\t\tvar title = '';\n\t\t\t\tvar labels = data.labels;\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\n\n\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\tvar item = tooltipItems[0];\n\n\t\t\t\t\tif (item.xLabel) {\n\t\t\t\t\t\ttitle = item.xLabel;\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\n\t\t\t\t\t\ttitle = labels[item.index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tafterTitle: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItem, data)\n\t\t\tbeforeLabel: helpers.noop,\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel += ': ';\n\t\t\t\t}\n\t\t\t\tlabel += tooltipItem.yLabel;\n\t\t\t\treturn label;\n\t\t\t},\n\t\t\tlabelColor: function(tooltipItem, chart) {\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\n\t\t\t\tvar view = activeElement._view;\n\t\t\t\treturn {\n\t\t\t\t\tborderColor: view.borderColor,\n\t\t\t\t\tbackgroundColor: view.backgroundColor\n\t\t\t\t};\n\t\t\t},\n\t\t\tlabelTextColor: function() {\n\t\t\t\treturn this._options.bodyFontColor;\n\t\t\t},\n\t\t\tafterLabel: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tafterBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeFooter: helpers.noop,\n\t\t\tfooter: helpers.noop,\n\t\t\tafterFooter: helpers.noop\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\t/**\n \t * Helper method to merge the opacity into a color\n \t */\n\tfunction mergeOpacity(colorString, opacity) {\n\t\tvar color = helpers.color(colorString);\n\t\treturn color.alpha(opacity * color.alpha()).rgbaString();\n\t}\n\n\t// Helper to push or concat based on if the 2nd parameter is an array or not\n\tfunction pushOrConcat(base, toPush) {\n\t\tif (toPush) {\n\t\t\tif (helpers.isArray(toPush)) {\n\t\t\t\t// base = base.concat(toPush);\n\t\t\t\tArray.prototype.push.apply(base, toPush);\n\t\t\t} else {\n\t\t\t\tbase.push(toPush);\n\t\t\t}\n\t\t}\n\n\t\treturn base;\n\t}\n\n\t// Private helper to create a tooltip item model\n\t// @param element : the chart element (point, arc, bar) to create the tooltip item for\n\t// @return : new tooltip item\n\tfunction createTooltipItem(element) {\n\t\tvar xScale = element._xScale;\n\t\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\t\tvar index = element._index;\n\t\tvar datasetIndex = element._datasetIndex;\n\n\t\treturn {\n\t\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tindex: index,\n\t\t\tdatasetIndex: datasetIndex,\n\t\t\tx: element._model.x,\n\t\t\ty: element._model.y\n\t\t};\n\t}\n\n\t/**\n\t * Helper to get the reset model for the tooltip\n\t * @param tooltipOpts {Object} the tooltip options\n\t */\n\tfunction getBaseModel(tooltipOpts) {\n\t\tvar globalDefaults = defaults.global;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\treturn {\n\t\t\t// Positioning\n\t\t\txPadding: tooltipOpts.xPadding,\n\t\t\tyPadding: tooltipOpts.yPadding,\n\t\t\txAlign: tooltipOpts.xAlign,\n\t\t\tyAlign: tooltipOpts.yAlign,\n\n\t\t\t// Body\n\t\t\tbodyFontColor: tooltipOpts.bodyFontColor,\n\t\t\t_bodyFontFamily: valueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_bodyFontStyle: valueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t_bodyAlign: tooltipOpts.bodyAlign,\n\t\t\tbodyFontSize: valueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n\t\t\tbodySpacing: tooltipOpts.bodySpacing,\n\n\t\t\t// Title\n\t\t\ttitleFontColor: tooltipOpts.titleFontColor,\n\t\t\t_titleFontFamily: valueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_titleFontStyle: valueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n\t\t\ttitleFontSize: valueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n\t\t\t_titleAlign: tooltipOpts.titleAlign,\n\t\t\ttitleSpacing: tooltipOpts.titleSpacing,\n\t\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\n\n\t\t\t// Footer\n\t\t\tfooterFontColor: tooltipOpts.footerFontColor,\n\t\t\t_footerFontFamily: valueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_footerFontStyle: valueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n\t\t\tfooterFontSize: valueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n\t\t\t_footerAlign: tooltipOpts.footerAlign,\n\t\t\tfooterSpacing: tooltipOpts.footerSpacing,\n\t\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\n\n\t\t\t// Appearance\n\t\t\tcaretSize: tooltipOpts.caretSize,\n\t\t\tcornerRadius: tooltipOpts.cornerRadius,\n\t\t\tbackgroundColor: tooltipOpts.backgroundColor,\n\t\t\topacity: 0,\n\t\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\n\t\t\tdisplayColors: tooltipOpts.displayColors,\n\t\t\tborderColor: tooltipOpts.borderColor,\n\t\t\tborderWidth: tooltipOpts.borderWidth\n\t\t};\n\t}\n\n\t/**\n\t * Get the size of the tooltip\n\t */\n\tfunction getTooltipSize(tooltip, model) {\n\t\tvar ctx = tooltip._chart.ctx;\n\n\t\tvar height = model.yPadding * 2; // Tooltip Padding\n\t\tvar width = 0;\n\n\t\t// Count of all lines in the body\n\t\tvar body = model.body;\n\t\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\n\t\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n\t\t}, 0);\n\t\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\n\n\t\tvar titleLineCount = model.title.length;\n\t\tvar footerLineCount = model.footer.length;\n\t\tvar titleFontSize = model.titleFontSize;\n\t\tvar bodyFontSize = model.bodyFontSize;\n\t\tvar footerFontSize = model.footerFontSize;\n\n\t\theight += titleLineCount * titleFontSize; // Title Lines\n\t\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\t\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\t\theight += combinedBodyLength * bodyFontSize; // Body Lines\n\t\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\t\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\t\theight += footerLineCount * (footerFontSize); // Footer Lines\n\t\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n\t\t// Title width\n\t\tvar widthPadding = 0;\n\t\tvar maxLineWidth = function(line) {\n\t\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\n\t\t};\n\n\t\tctx.font = helpers.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n\t\thelpers.each(model.title, maxLineWidth);\n\n\t\t// Body width\n\t\tctx.font = helpers.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n\t\thelpers.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n\t\t// Body lines may include some extra width due to the color box\n\t\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\n\t\thelpers.each(body, function(bodyItem) {\n\t\t\thelpers.each(bodyItem.before, maxLineWidth);\n\t\t\thelpers.each(bodyItem.lines, maxLineWidth);\n\t\t\thelpers.each(bodyItem.after, maxLineWidth);\n\t\t});\n\n\t\t// Reset back to 0\n\t\twidthPadding = 0;\n\n\t\t// Footer width\n\t\tctx.font = helpers.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n\t\thelpers.each(model.footer, maxLineWidth);\n\n\t\t// Add padding\n\t\twidth += 2 * model.xPadding;\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t}\n\n\t/**\n\t * Helper to get the alignment of a tooltip given the size\n\t */\n\tfunction determineAlignment(tooltip, size) {\n\t\tvar model = tooltip._model;\n\t\tvar chart = tooltip._chart;\n\t\tvar chartArea = tooltip._chart.chartArea;\n\t\tvar xAlign = 'center';\n\t\tvar yAlign = 'center';\n\n\t\tif (model.y < size.height) {\n\t\t\tyAlign = 'top';\n\t\t} else if (model.y > (chart.height - size.height)) {\n\t\t\tyAlign = 'bottom';\n\t\t}\n\n\t\tvar lf, rf; // functions to determine left, right alignment\n\t\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\t\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\t\tvar midX = (chartArea.left + chartArea.right) / 2;\n\t\tvar midY = (chartArea.top + chartArea.bottom) / 2;\n\n\t\tif (yAlign === 'center') {\n\t\t\tlf = function(x) {\n\t\t\t\treturn x <= midX;\n\t\t\t};\n\t\t\trf = function(x) {\n\t\t\t\treturn x > midX;\n\t\t\t};\n\t\t} else {\n\t\t\tlf = function(x) {\n\t\t\t\treturn x <= (size.width / 2);\n\t\t\t};\n\t\t\trf = function(x) {\n\t\t\t\treturn x >= (chart.width - (size.width / 2));\n\t\t\t};\n\t\t}\n\n\t\tolf = function(x) {\n\t\t\treturn x + size.width > chart.width;\n\t\t};\n\t\torf = function(x) {\n\t\t\treturn x - size.width < 0;\n\t\t};\n\t\tyf = function(y) {\n\t\t\treturn y <= midY ? 'top' : 'bottom';\n\t\t};\n\n\t\tif (lf(model.x)) {\n\t\t\txAlign = 'left';\n\n\t\t\t// Is tooltip too wide and goes over the right side of the chart.?\n\t\t\tif (olf(model.x)) {\n\t\t\t\txAlign = 'center';\n\t\t\t\tyAlign = yf(model.y);\n\t\t\t}\n\t\t} else if (rf(model.x)) {\n\t\t\txAlign = 'right';\n\n\t\t\t// Is tooltip too wide and goes outside left edge of canvas?\n\t\t\tif (orf(model.x)) {\n\t\t\t\txAlign = 'center';\n\t\t\t\tyAlign = yf(model.y);\n\t\t\t}\n\t\t}\n\n\t\tvar opts = tooltip._options;\n\t\treturn {\n\t\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\n\t\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\n\t\t};\n\t}\n\n\t/**\n\t * @Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n\t */\n\tfunction getBackgroundPoint(vm, size, alignment) {\n\t\t// Background Position\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\n\t\tvar caretSize = vm.caretSize;\n\t\tvar caretPadding = vm.caretPadding;\n\t\tvar cornerRadius = vm.cornerRadius;\n\t\tvar xAlign = alignment.xAlign;\n\t\tvar yAlign = alignment.yAlign;\n\t\tvar paddingAndSize = caretSize + caretPadding;\n\t\tvar radiusAndPadding = cornerRadius + caretPadding;\n\n\t\tif (xAlign === 'right') {\n\t\t\tx -= size.width;\n\t\t} else if (xAlign === 'center') {\n\t\t\tx -= (size.width / 2);\n\t\t}\n\n\t\tif (yAlign === 'top') {\n\t\t\ty += paddingAndSize;\n\t\t} else if (yAlign === 'bottom') {\n\t\t\ty -= size.height + paddingAndSize;\n\t\t} else {\n\t\t\ty -= (size.height / 2);\n\t\t}\n\n\t\tif (yAlign === 'center') {\n\t\t\tif (xAlign === 'left') {\n\t\t\t\tx += paddingAndSize;\n\t\t\t} else if (xAlign === 'right') {\n\t\t\t\tx -= paddingAndSize;\n\t\t\t}\n\t\t} else if (xAlign === 'left') {\n\t\t\tx -= radiusAndPadding;\n\t\t} else if (xAlign === 'right') {\n\t\t\tx += radiusAndPadding;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tChart.Tooltip = Element.extend({\n\t\tinitialize: function() {\n\t\t\tthis._model = getBaseModel(this._options);\n\t\t\tthis._lastActive = [];\n\t\t},\n\n\t\t// Get the title\n\t\t// Args are: (tooltipItem, data)\n\t\tgetTitle: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\t\t\tvar callbacks = opts.callbacks;\n\n\t\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n\t\t\tvar title = callbacks.title.apply(me, arguments);\n\t\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeTitle);\n\t\t\tlines = pushOrConcat(lines, title);\n\t\t\tlines = pushOrConcat(lines, afterTitle);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBeforeBody: function() {\n\t\t\tvar lines = this._options.callbacks.beforeBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBody: function(tooltipItems, data) {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\t\t\tvar bodyItems = [];\n\n\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\tvar bodyItem = {\n\t\t\t\t\tbefore: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tafter: []\n\t\t\t\t};\n\t\t\t\tpushOrConcat(bodyItem.before, callbacks.beforeLabel.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.after, callbacks.afterLabel.call(me, tooltipItem, data));\n\n\t\t\t\tbodyItems.push(bodyItem);\n\t\t\t});\n\n\t\t\treturn bodyItems;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetAfterBody: function() {\n\t\t\tvar lines = this._options.callbacks.afterBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Get the footer and beforeFooter and afterFooter lines\n\t\t// Args are: (tooltipItem, data)\n\t\tgetFooter: function() {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\n\t\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n\t\t\tvar footer = callbacks.footer.apply(me, arguments);\n\t\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeFooter);\n\t\t\tlines = pushOrConcat(lines, footer);\n\t\t\tlines = pushOrConcat(lines, afterFooter);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\tupdate: function(changed) {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\n\t\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n\t\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n\t\t\t// which breaks any animations.\n\t\t\tvar existingModel = me._model;\n\t\t\tvar model = me._model = getBaseModel(opts);\n\t\t\tvar active = me._active;\n\n\t\t\tvar data = me._data;\n\n\t\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\n\t\t\tvar alignment = {\n\t\t\t\txAlign: existingModel.xAlign,\n\t\t\t\tyAlign: existingModel.yAlign\n\t\t\t};\n\t\t\tvar backgroundPoint = {\n\t\t\t\tx: existingModel.x,\n\t\t\t\ty: existingModel.y\n\t\t\t};\n\t\t\tvar tooltipSize = {\n\t\t\t\twidth: existingModel.width,\n\t\t\t\theight: existingModel.height\n\t\t\t};\n\t\t\tvar tooltipPosition = {\n\t\t\t\tx: existingModel.caretX,\n\t\t\t\ty: existingModel.caretY\n\t\t\t};\n\n\t\t\tvar i, len;\n\n\t\t\tif (active.length) {\n\t\t\t\tmodel.opacity = 1;\n\n\t\t\t\tvar labelColors = [];\n\t\t\t\tvar labelTextColors = [];\n\t\t\t\ttooltipPosition = Chart.Tooltip.positioners[opts.position].call(me, active, me._eventPosition);\n\n\t\t\t\tvar tooltipItems = [];\n\t\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\n\t\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\n\t\t\t\t}\n\n\t\t\t\t// If the user provided a filter function, use it to modify the tooltip items\n\t\t\t\tif (opts.filter) {\n\t\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\n\t\t\t\t\t\treturn opts.filter(a, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\n\t\t\t\tif (opts.itemSort) {\n\t\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\n\t\t\t\t\t\treturn opts.itemSort(a, b, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Determine colors for boxes\n\t\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n\t\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n\t\t\t\t});\n\n\n\t\t\t\t// Build the Text Lines\n\t\t\t\tmodel.title = me.getTitle(tooltipItems, data);\n\t\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\n\t\t\t\tmodel.body = me.getBody(tooltipItems, data);\n\t\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\n\t\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\n\n\t\t\t\t// Initial positioning and colors\n\t\t\t\tmodel.x = Math.round(tooltipPosition.x);\n\t\t\t\tmodel.y = Math.round(tooltipPosition.y);\n\t\t\t\tmodel.caretPadding = opts.caretPadding;\n\t\t\t\tmodel.labelColors = labelColors;\n\t\t\t\tmodel.labelTextColors = labelTextColors;\n\n\t\t\t\t// data points\n\t\t\t\tmodel.dataPoints = tooltipItems;\n\n\t\t\t\t// We need to determine alignment of the tooltip\n\t\t\t\ttooltipSize = getTooltipSize(this, model);\n\t\t\t\talignment = determineAlignment(this, tooltipSize);\n\t\t\t\t// Final Size and Position\n\t\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment);\n\t\t\t} else {\n\t\t\t\tmodel.opacity = 0;\n\t\t\t}\n\n\t\t\tmodel.xAlign = alignment.xAlign;\n\t\t\tmodel.yAlign = alignment.yAlign;\n\t\t\tmodel.x = backgroundPoint.x;\n\t\t\tmodel.y = backgroundPoint.y;\n\t\t\tmodel.width = tooltipSize.width;\n\t\t\tmodel.height = tooltipSize.height;\n\n\t\t\t// Point where the caret on the tooltip points to\n\t\t\tmodel.caretX = tooltipPosition.x;\n\t\t\tmodel.caretY = tooltipPosition.y;\n\n\t\t\tme._model = model;\n\n\t\t\tif (changed && opts.custom) {\n\t\t\t\topts.custom.call(me, model);\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\t\tdrawCaret: function(tooltipPoint, size) {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\t\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n\n\t\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\n\t\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\n\t\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\n\t\t},\n\t\tgetCaretPosition: function(tooltipPoint, size, vm) {\n\t\t\tvar x1, x2, x3, y1, y2, y3;\n\t\t\tvar caretSize = vm.caretSize;\n\t\t\tvar cornerRadius = vm.cornerRadius;\n\t\t\tvar xAlign = vm.xAlign;\n\t\t\tvar yAlign = vm.yAlign;\n\t\t\tvar ptX = tooltipPoint.x;\n\t\t\tvar ptY = tooltipPoint.y;\n\t\t\tvar width = size.width;\n\t\t\tvar height = size.height;\n\n\t\t\tif (yAlign === 'center') {\n\t\t\t\ty2 = ptY + (height / 2);\n\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx1 = ptX;\n\t\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\ty1 = y2 + caretSize;\n\t\t\t\t\ty3 = y2 - caretSize;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = ptX + width;\n\t\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\ty1 = y2 - caretSize;\n\t\t\t\t\ty3 = y2 + caretSize;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t} else {\n\t\t\t\t\tx2 = ptX + (width / 2);\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t}\n\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\ty1 = ptY;\n\t\t\t\t\ty2 = y1 - caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t} else {\n\t\t\t\t\ty1 = ptY + height;\n\t\t\t\t\ty2 = y1 + caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t\t// invert drawing order\n\t\t\t\t\tvar tmp = x3;\n\t\t\t\t\tx3 = x1;\n\t\t\t\t\tx1 = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\n\t\t},\n\t\tdrawTitle: function(pt, vm, ctx, opacity) {\n\t\t\tvar title = vm.title;\n\n\t\t\tif (title.length) {\n\t\t\t\tctx.textAlign = vm._titleAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tvar titleFontSize = vm.titleFontSize;\n\t\t\t\tvar titleSpacing = vm.titleSpacing;\n\n\t\t\t\tctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity);\n\t\t\t\tctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n\t\t\t\tvar i, len;\n\t\t\t\tfor (i = 0, len = title.length; i < len; ++i) {\n\t\t\t\t\tctx.fillText(title[i], pt.x, pt.y);\n\t\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n\t\t\t\t\tif (i + 1 === title.length) {\n\t\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdrawBody: function(pt, vm, ctx, opacity) {\n\t\t\tvar bodyFontSize = vm.bodyFontSize;\n\t\t\tvar bodySpacing = vm.bodySpacing;\n\t\t\tvar body = vm.body;\n\n\t\t\tctx.textAlign = vm._bodyAlign;\n\t\t\tctx.textBaseline = 'top';\n\t\t\tctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n\t\t\t// Before Body\n\t\t\tvar xLinePadding = 0;\n\t\t\tvar fillLineOfText = function(line) {\n\t\t\t\tctx.fillText(line, pt.x + xLinePadding, pt.y);\n\t\t\t\tpt.y += bodyFontSize + bodySpacing;\n\t\t\t};\n\n\t\t\t// Before body lines\n\t\t\tctx.fillStyle = mergeOpacity(vm.bodyFontColor, opacity);\n\t\t\thelpers.each(vm.beforeBody, fillLineOfText);\n\n\t\t\tvar drawColorBoxes = vm.displayColors;\n\t\t\txLinePadding = drawColorBoxes ? (bodyFontSize + 2) : 0;\n\n\t\t\t// Draw body lines now\n\t\t\thelpers.each(body, function(bodyItem, i) {\n\t\t\t\tvar textColor = mergeOpacity(vm.labelTextColors[i], opacity);\n\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\thelpers.each(bodyItem.before, fillLineOfText);\n\n\t\t\t\thelpers.each(bodyItem.lines, function(line) {\n\t\t\t\t\t// Draw Legend-like boxes if needed\n\t\t\t\t\tif (drawColorBoxes) {\n\t\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity);\n\t\t\t\t\t\tctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Border\n\t\t\t\t\t\tctx.lineWidth = 1;\n\t\t\t\t\t\tctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity);\n\t\t\t\t\t\tctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Inner square\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity);\n\t\t\t\t\t\tctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n\t\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tfillLineOfText(line);\n\t\t\t\t});\n\n\t\t\t\thelpers.each(bodyItem.after, fillLineOfText);\n\t\t\t});\n\n\t\t\t// Reset back to 0 for after body\n\t\t\txLinePadding = 0;\n\n\t\t\t// After body lines\n\t\t\thelpers.each(vm.afterBody, fillLineOfText);\n\t\t\tpt.y -= bodySpacing; // Remove last body spacing\n\t\t},\n\t\tdrawFooter: function(pt, vm, ctx, opacity) {\n\t\t\tvar footer = vm.footer;\n\n\t\t\tif (footer.length) {\n\t\t\t\tpt.y += vm.footerMarginTop;\n\n\t\t\t\tctx.textAlign = vm._footerAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity);\n\t\t\t\tctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n\t\t\t\thelpers.each(footer, function(line) {\n\t\t\t\t\tctx.fillText(line, pt.x, pt.y);\n\t\t\t\t\tpt.y += vm.footerFontSize + vm.footerSpacing;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdrawBackground: function(pt, vm, ctx, tooltipSize, opacity) {\n\t\t\tctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);\n\t\t\tctx.strokeStyle = mergeOpacity(vm.borderColor, opacity);\n\t\t\tctx.lineWidth = vm.borderWidth;\n\t\t\tvar xAlign = vm.xAlign;\n\t\t\tvar yAlign = vm.yAlign;\n\t\t\tvar x = pt.x;\n\t\t\tvar y = pt.y;\n\t\t\tvar width = tooltipSize.width;\n\t\t\tvar height = tooltipSize.height;\n\t\t\tvar radius = vm.cornerRadius;\n\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y);\n\t\t\tif (yAlign === 'top') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\tif (yAlign === 'center' && xAlign === 'right') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\tif (yAlign === 'bottom') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\tif (yAlign === 'center' && xAlign === 'left') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x, y + radius);\n\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\tctx.closePath();\n\n\t\t\tctx.fill();\n\n\t\t\tif (vm.borderWidth > 0) {\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\tdraw: function() {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\n\t\t\tif (vm.opacity === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar tooltipSize = {\n\t\t\t\twidth: vm.width,\n\t\t\t\theight: vm.height\n\t\t\t};\n\t\t\tvar pt = {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y\n\t\t\t};\n\n\t\t\t// IE11/Edge does not like very small opacities, so snap to 0\n\t\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n\t\t\t// Truthy/falsey value for empty tooltip\n\t\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n\t\t\tif (this._options.enabled && hasTooltipContent) {\n\t\t\t\t// Draw Background\n\t\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize, opacity);\n\n\t\t\t\t// Draw Title, Body, and Footer\n\t\t\t\tpt.x += vm.xPadding;\n\t\t\t\tpt.y += vm.yPadding;\n\n\t\t\t\t// Titles\n\t\t\t\tthis.drawTitle(pt, vm, ctx, opacity);\n\n\t\t\t\t// Body\n\t\t\t\tthis.drawBody(pt, vm, ctx, opacity);\n\n\t\t\t\t// Footer\n\t\t\t\tthis.drawFooter(pt, vm, ctx, opacity);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle an event\n\t\t * @private\n\t\t * @param {IEvent} event - The event to handle\n\t\t * @returns {Boolean} true if the tooltip changed\n\t\t */\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar options = me._options;\n\t\t\tvar changed = false;\n\n\t\t\tme._lastActive = me._lastActive || [];\n\n\t\t\t// Find Active Elements for tooltips\n\t\t\tif (e.type === 'mouseout') {\n\t\t\t\tme._active = [];\n\t\t\t} else {\n\t\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n\t\t\t}\n\n\t\t\t// Remember Last Actives\n\t\t\tchanged = !helpers.arrayEquals(me._active, me._lastActive);\n\n\t\t\t// If tooltip didn't change, do not handle the target event\n\t\t\tif (!changed) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tme._lastActive = me._active;\n\n\t\t\tif (options.enabled || options.custom) {\n\t\t\t\tme._eventPosition = {\n\t\t\t\t\tx: e.x,\n\t\t\t\t\ty: e.y\n\t\t\t\t};\n\n\t\t\t\tvar model = me._model;\n\t\t\t\tme.update(true);\n\t\t\t\tme.pivot();\n\n\t\t\t\t// See if our tooltip position changed\n\t\t\t\tchanged |= (model.x !== me._model.x) || (model.y !== me._model.y);\n\t\t\t}\n\n\t\t\treturn changed;\n\t\t}\n\t});\n\n\t/**\n\t * @namespace Chart.Tooltip.positioners\n\t */\n\tChart.Tooltip.positioners = {\n\t\t/**\n\t\t * Average mode places the tooltip at the average position of the elements shown\n\t\t * @function Chart.Tooltip.positioners.average\n\t\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\n\t\t * @returns {Point} tooltip position\n\t\t */\n\t\taverage: function(elements) {\n\t\t\tif (!elements.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar i, len;\n\t\t\tvar x = 0;\n\t\t\tvar y = 0;\n\t\t\tvar count = 0;\n\n\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\tvar el = elements[i];\n\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\tvar pos = el.tooltipPosition();\n\t\t\t\t\tx += pos.x;\n\t\t\t\t\ty += pos.y;\n\t\t\t\t\t++count;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx: Math.round(x / count),\n\t\t\t\ty: Math.round(y / count)\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Gets the tooltip position nearest of the item nearest to the event position\n\t\t * @function Chart.Tooltip.positioners.nearest\n\t\t * @param elements {Chart.Element[]} the tooltip elements\n\t\t * @param eventPosition {Point} the position of the event in canvas coordinates\n\t\t * @returns {Point} the tooltip position\n\t\t */\n\t\tnearest: function(elements, eventPosition) {\n\t\t\tvar x = eventPosition.x;\n\t\t\tvar y = eventPosition.y;\n\t\t\tvar minDistance = Number.POSITIVE_INFINITY;\n\t\t\tvar i, len, nearestElement;\n\n\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\tvar el = elements[i];\n\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\tvar center = el.getCenterPoint();\n\t\t\t\t\tvar d = helpers.distanceBetweenPoints(eventPosition, center);\n\n\t\t\t\t\tif (d < minDistance) {\n\t\t\t\t\t\tminDistance = d;\n\t\t\t\t\t\tnearestElement = el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (nearestElement) {\n\t\t\t\tvar tp = nearestElement.tooltipPosition();\n\t\t\t\tx = tp.x;\n\t\t\t\ty = tp.y;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\t\t}\n\t};\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar noop = helpers.noop;\n\n\tChart.LinearScaleBase = Chart.Scale.extend({\n\t\tgetRightValue: function(value) {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\treturn +value;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, value);\n\t\t},\n\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t\t// axis, they can manually override it\n\t\t\tif (tickOpts.beginAtZero) {\n\t\t\t\tvar minSign = helpers.sign(me.min);\n\t\t\t\tvar maxSign = helpers.sign(me.max);\n\n\t\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t\t// move the top up to 0\n\t\t\t\t\tme.max = 0;\n\t\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t\t// move the bottom down to 0\n\t\t\t\t\tme.min = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n\t\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n\t\t\tif (tickOpts.min !== undefined) {\n\t\t\t\tme.min = tickOpts.min;\n\t\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\t\tif (me.min === null) {\n\t\t\t\t\tme.min = tickOpts.suggestedMin;\n\t\t\t\t} else {\n\t\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tickOpts.max !== undefined) {\n\t\t\t\tme.max = tickOpts.max;\n\t\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\t\tif (me.max === null) {\n\t\t\t\t\tme.max = tickOpts.suggestedMax;\n\t\t\t\t} else {\n\t\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (setMin !== setMax) {\n\t\t\t\t// We set the min or the max but not both.\n\t\t\t\t// So ensure that our range is good\n\t\t\t\t// Inverted or 0 length range can happen when\n\t\t\t\t// ticks.min is set, and no datasets are visible\n\t\t\t\tif (me.min >= me.max) {\n\t\t\t\t\tif (setMin) {\n\t\t\t\t\t\tme.max = me.min + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.min = me.max - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tme.max++;\n\n\t\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\t\tme.min--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTickLimit: noop,\n\t\thandleDirectionalChanges: noop,\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph. Make sure we always have at least 2 ticks\n\t\t\tvar maxTicks = me.getTickLimit();\n\t\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\t\tvar numericGeneratorOptions = {\n\t\t\t\tmaxTicks: maxTicks,\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max,\n\t\t\t\tstepSize: helpers.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n\t\t\t};\n\t\t\tvar ticks = me.ticks = Ticks.generators.linear(numericGeneratorOptions, me);\n\n\t\t\tme.handleDirectionalChanges();\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(me);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\t// Default config for a category scale\n\tvar defaultConfig = {\n\t\tposition: 'bottom'\n\t};\n\n\tvar DatasetScale = Chart.Scale.extend({\n\t\t/**\n\t\t* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n\t\t* else fall back to data.labels\n\t\t* @private\n\t\t*/\n\t\tgetLabels: function() {\n\t\t\tvar data = this.chart.data;\n\t\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\tme.minIndex = 0;\n\t\t\tme.maxIndex = labels.length - 1;\n\t\t\tvar findIndex;\n\n\t\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t\t// user specified min value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.min);\n\t\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t\t}\n\n\t\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t\t// user specified max value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.max);\n\t\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t\t}\n\n\t\t\tme.min = labels[me.minIndex];\n\t\t\tme.max = labels[me.maxIndex];\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\t// If we are viewing some subset of labels, slice the original array\n\t\t\tme.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif (data.yLabels && !isHorizontal) {\n\t\t\t\treturn me.getRightValue(data.datasets[datasetIndex].data[index]);\n\t\t\t}\n\t\t\treturn me.ticks[index - me.minIndex];\n\t\t},\n\n\t\t// Used to get data value locations. Value can either be an index or a numerical value\n\t\tgetPixelForValue: function(value, index) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\t// 1 is added because we need the length but we have the indexes\n\t\t\tvar offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1);\n\n\t\t\t// If value is a data object, then index is the index in the data array,\n\t\t\t// not the index of the scale. We need to change that.\n\t\t\tvar valueCategory;\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\n\t\t\t}\n\t\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\n\t\t\t\tvar labels = me.getLabels();\n\t\t\t\tvalue = valueCategory || value;\n\t\t\t\tvar idx = labels.indexOf(value);\n\t\t\t\tindex = idx !== -1 ? idx : index;\n\t\t\t}\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar valueWidth = me.width / offsetAmt;\n\t\t\t\tvar widthOffset = (valueWidth * (index - me.minIndex));\n\n\t\t\t\tif (offset) {\n\t\t\t\t\twidthOffset += (valueWidth / 2);\n\t\t\t\t}\n\n\t\t\t\treturn me.left + Math.round(widthOffset);\n\t\t\t}\n\t\t\tvar valueHeight = me.height / offsetAmt;\n\t\t\tvar heightOffset = (valueHeight * (index - me.minIndex));\n\n\t\t\tif (offset) {\n\t\t\t\theightOffset += (valueHeight / 2);\n\t\t\t}\n\n\t\t\treturn me.top + Math.round(heightOffset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\tvar value;\n\t\t\tvar offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\tvar horz = me.isHorizontal();\n\t\t\tvar valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n\t\t\tpixel -= horz ? me.left : me.top;\n\n\t\t\tif (offset) {\n\t\t\t\tpixel -= (valueDimension / 2);\n\t\t\t}\n\n\t\t\tif (pixel <= 0) {\n\t\t\t\tvalue = 0;\n\t\t\t} else {\n\t\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t\t}\n\n\t\t\treturn value + me.minIndex;\n\t\t},\n\t\tgetBasePixel: function() {\n\t\t\treturn this.bottom;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);\n\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.linear\n\t\t}\n\t};\n\n\tvar LinearScale = Chart.LinearScaleBase.extend({\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar DEFAULT_MIN = 0;\n\t\t\tvar DEFAULT_MAX = 1;\n\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// First Calculate the range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\tvaluesPerStack[key] = {\n\t\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store these per type\n\t\t\t\t\tvar positiveValues = valuesPerStack[key].positiveValues;\n\t\t\t\t\tvar negativeValues = valuesPerStack[key].negativeValues;\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\t\tvar minVal = helpers.min(values);\n\t\t\t\t\tvar maxVal = helpers.max(values);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n\t\t\tme.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar maxTicks;\n\t\t\tvar me = this;\n\t\t\tvar tickOpts = me.options.ticks;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));\n\t\t\t} else {\n\t\t\t\t// The factor of 2 used to scale the font size has been experimentally determined.\n\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize);\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));\n\t\t\t}\n\n\t\t\treturn maxTicks;\n\t\t},\n\t\t// Called after the ticks are built. We need\n\t\thandleDirectionalChanges: function() {\n\t\t\tif (!this.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tthis.ticks.reverse();\n\t\t\t}\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\t// Utils\n\t\tgetPixelForValue: function(value) {\n\t\t\t// This must be called after fit has been run so that\n\t\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\t\tvar me = this;\n\t\t\tvar start = me.start;\n\n\t\t\tvar rightValue = +me.getRightValue(value);\n\t\t\tvar pixel;\n\t\t\tvar range = me.end - start;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tpixel = me.left + (me.width / range * (rightValue - start));\n\t\t\t\treturn Math.round(pixel);\n\t\t\t}\n\n\t\t\tpixel = me.bottom - (me.height / range * (rightValue - start));\n\t\t\treturn Math.round(pixel);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar innerDimension = isHorizontal ? me.width : me.height;\n\t\t\tvar offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n\t\t\treturn me.start + ((me.end - me.start) * offset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);\n\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\n\t\t// label settings\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.logarithmic\n\t\t}\n\t};\n\n\tvar LogarithmicScale = Chart.Scale.extend({\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// Calculate Range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\t\t\tme.minNotZero = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\t\tvaluesPerStack[key] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar values = valuesPerStack[key];\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tvalues[index] = 100;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Don't need to split positive and negative since the log scale can't handle a 0 crossing\n\t\t\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tvar minVal = helpers.min(valuesForType);\n\t\t\t\t\tvar maxVal = helpers.max(valuesForType);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.min = valueOrDefault(tickOpts.min, me.min);\n\t\t\tme.max = valueOrDefault(tickOpts.max, me.max);\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);\n\t\t\t\t\tme.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);\n\t\t\t\t} else {\n\t\t\t\t\tme.min = 1;\n\t\t\t\t\tme.max = 10;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\tvar generationOptions = {\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max\n\t\t\t};\n\t\t\tvar ticks = me.ticks = Ticks.generators.logarithmic(generationOptions, me);\n\n\t\t\tif (!me.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tticks.reverse();\n\t\t\t}\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tthis.tickValues = this.ticks.slice();\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(this);\n\t\t},\n\t\t// Get the correct tooltip label\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t\t},\n\t\tgetPixelForValue: function(value) {\n\t\t\tvar me = this;\n\t\t\tvar start = me.start;\n\t\t\tvar newVal = +me.getRightValue(value);\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar innerDimension, pixel, range;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\trange = helpers.log10(me.end) - helpers.log10(start); // todo: if start === 0\n\t\t\t\tif (newVal === 0) {\n\t\t\t\t\tpixel = me.left;\n\t\t\t\t} else {\n\t\t\t\t\tinnerDimension = me.width;\n\t\t\t\t\tpixel = me.left + (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Bottom - top since pixels increase downward on a screen\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tif (start === 0 && !tickOpts.reverse) {\n\t\t\t\t\trange = helpers.log10(me.end) - helpers.log10(me.minNotZero);\n\t\t\t\t\tif (newVal === start) {\n\t\t\t\t\t\tpixel = me.bottom;\n\t\t\t\t\t} else if (newVal === me.minNotZero) {\n\t\t\t\t\t\tpixel = me.bottom - innerDimension * 0.02;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpixel = me.bottom - innerDimension * 0.02 - (innerDimension * 0.98 / range * (helpers.log10(newVal) - helpers.log10(me.minNotZero)));\n\t\t\t\t\t}\n\t\t\t\t} else if (me.end === 0 && tickOpts.reverse) {\n\t\t\t\t\trange = helpers.log10(me.start) - helpers.log10(me.minNotZero);\n\t\t\t\t\tif (newVal === me.end) {\n\t\t\t\t\t\tpixel = me.top;\n\t\t\t\t\t} else if (newVal === me.minNotZero) {\n\t\t\t\t\t\tpixel = me.top + innerDimension * 0.02;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpixel = me.top + innerDimension * 0.02 + (innerDimension * 0.98 / range * (helpers.log10(newVal) - helpers.log10(me.minNotZero)));\n\t\t\t\t\t}\n\t\t\t\t} else if (newVal === 0) {\n\t\t\t\t\tpixel = tickOpts.reverse ? me.top : me.bottom;\n\t\t\t\t} else {\n\t\t\t\t\trange = helpers.log10(me.end) - helpers.log10(start);\n\t\t\t\t\tinnerDimension = me.height;\n\t\t\t\t\tpixel = me.bottom - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar range = helpers.log10(me.end) - helpers.log10(me.start);\n\t\t\tvar value, innerDimension;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width;\n\t\t\t\tvalue = me.start * Math.pow(10, (pixel - me.left) * range / innerDimension);\n\t\t\t} else { // todo: if start === 0\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tvalue = Math.pow(10, (me.bottom - pixel) * range / innerDimension) / me.start;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);\n\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar globalDefaults = defaults.global;\n\n\tvar defaultConfig = {\n\t\tdisplay: true,\n\n\t\t// Boolean - Whether to animate scaling the chart from the centre\n\t\tanimate: true,\n\t\tposition: 'chartArea',\n\n\t\tangleLines: {\n\t\t\tdisplay: true,\n\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\tlineWidth: 1\n\t\t},\n\n\t\tgridLines: {\n\t\t\tcircular: false\n\t\t},\n\n\t\t// label settings\n\t\tticks: {\n\t\t\t// Boolean - Show a backdrop to the scale label\n\t\t\tshowLabelBackdrop: true,\n\n\t\t\t// String - The colour of the label backdrop\n\t\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t\t// Number - The backdrop padding above & below the label in pixels\n\t\t\tbackdropPaddingY: 2,\n\n\t\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\t\tbackdropPaddingX: 2,\n\n\t\t\tcallback: Ticks.formatters.linear\n\t\t},\n\n\t\tpointLabels: {\n\t\t\t// Boolean - if true, show point labels\n\t\t\tdisplay: true,\n\n\t\t\t// Number - Point label font size in pixels\n\t\t\tfontSize: 10,\n\n\t\t\t// Function - Used to convert point labels\n\t\t\tcallback: function(label) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction getValueCount(scale) {\n\t\tvar opts = scale.options;\n\t\treturn opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n\t}\n\n\tfunction getPointLabelFontOptions(scale) {\n\t\tvar pointLabelOptions = scale.options.pointLabels;\n\t\tvar fontSize = helpers.valueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);\n\t\tvar fontStyle = helpers.valueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);\n\t\tvar fontFamily = helpers.valueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);\n\t\tvar font = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\treturn {\n\t\t\tsize: fontSize,\n\t\t\tstyle: fontStyle,\n\t\t\tfamily: fontFamily,\n\t\t\tfont: font\n\t\t};\n\t}\n\n\tfunction measureLabelSize(ctx, fontSize, label) {\n\t\tif (helpers.isArray(label)) {\n\t\t\treturn {\n\t\t\t\tw: helpers.longestText(ctx, ctx.font, label),\n\t\t\t\th: (label.length * fontSize) + ((label.length - 1) * 1.5 * fontSize)\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tw: ctx.measureText(label).width,\n\t\t\th: fontSize\n\t\t};\n\t}\n\n\tfunction determineLimits(angle, pos, size, min, max) {\n\t\tif (angle === min || angle === max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - (size / 2),\n\t\t\t\tend: pos + (size / 2)\n\t\t\t};\n\t\t} else if (angle < min || angle > max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - size - 5,\n\t\t\t\tend: pos\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tstart: pos,\n\t\t\tend: pos + size + 5\n\t\t};\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with point labels\n\t */\n\tfunction fitWithPointLabels(scale) {\n\t\t/*\n\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t *\n\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t *\n\t\t * Solution:\n\t\t *\n\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t * at each index we check if the text overlaps.\n\t\t *\n\t\t * Where it does, we store that angle and that index.\n\t\t *\n\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t * from the shape radius to move the point inwards by that x.\n\t\t *\n\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t * along with labels.\n\t\t *\n\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t *\n\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t * and position it in the most space efficient manner\n\t\t *\n\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t */\n\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tvar furthestLimits = {\n\t\t\tr: scale.width,\n\t\t\tl: 0,\n\t\t\tt: scale.height,\n\t\t\tb: 0\n\t\t};\n\t\tvar furthestAngles = {};\n\t\tvar i, textSize, pointPosition;\n\n\t\tscale.ctx.font = plFont.font;\n\t\tscale._pointLabelSizes = [];\n\n\t\tvar valueCount = getValueCount(scale);\n\t\tfor (i = 0; i < valueCount; i++) {\n\t\t\tpointPosition = scale.getPointPosition(i, largestPossibleRadius);\n\t\t\ttextSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');\n\t\t\tscale._pointLabelSizes[i] = textSize;\n\n\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\tvar angle = helpers.toDegrees(angleRadians) % 360;\n\t\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n\t\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n\t\t\tif (hLimits.start < furthestLimits.l) {\n\t\t\t\tfurthestLimits.l = hLimits.start;\n\t\t\t\tfurthestAngles.l = angleRadians;\n\t\t\t}\n\n\t\t\tif (hLimits.end > furthestLimits.r) {\n\t\t\t\tfurthestLimits.r = hLimits.end;\n\t\t\t\tfurthestAngles.r = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.start < furthestLimits.t) {\n\t\t\t\tfurthestLimits.t = vLimits.start;\n\t\t\t\tfurthestAngles.t = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.end > furthestLimits.b) {\n\t\t\t\tfurthestLimits.b = vLimits.end;\n\t\t\t\tfurthestAngles.b = angleRadians;\n\t\t\t}\n\t\t}\n\n\t\tscale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with no point labels\n\t */\n\tfunction fit(scale) {\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tscale.drawingArea = Math.round(largestPossibleRadius);\n\t\tscale.setCenterPoint(0, 0, 0, 0);\n\t}\n\n\tfunction getTextAlignForAngle(angle) {\n\t\tif (angle === 0 || angle === 180) {\n\t\t\treturn 'center';\n\t\t} else if (angle < 180) {\n\t\t\treturn 'left';\n\t\t}\n\n\t\treturn 'right';\n\t}\n\n\tfunction fillText(ctx, text, position, fontSize) {\n\t\tif (helpers.isArray(text)) {\n\t\t\tvar y = position.y;\n\t\t\tvar spacing = 1.5 * fontSize;\n\n\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\tctx.fillText(text[i], position.x, y);\n\t\t\t\ty += spacing;\n\t\t\t}\n\t\t} else {\n\t\t\tctx.fillText(text, position.x, position.y);\n\t\t}\n\t}\n\n\tfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\n\t\tif (angle === 90 || angle === 270) {\n\t\t\tposition.y -= (textSize.h / 2);\n\t\t} else if (angle > 270 || angle < 90) {\n\t\t\tposition.y -= textSize.h;\n\t\t}\n\t}\n\n\tfunction drawPointLabels(scale) {\n\t\tvar ctx = scale.ctx;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar opts = scale.options;\n\t\tvar angleLineOpts = opts.angleLines;\n\t\tvar pointLabelOpts = opts.pointLabels;\n\n\t\tctx.lineWidth = angleLineOpts.lineWidth;\n\t\tctx.strokeStyle = angleLineOpts.color;\n\n\t\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n\t\t// Point Label Font\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\tctx.textBaseline = 'top';\n\n\t\tfor (var i = getValueCount(scale) - 1; i >= 0; i--) {\n\t\t\tif (angleLineOpts.display) {\n\t\t\t\tvar outerPosition = scale.getPointPosition(i, outerDistance);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(scale.xCenter, scale.yCenter);\n\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tif (pointLabelOpts.display) {\n\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);\n\n\t\t\t\t// Keep this in loop since we may support array properties here\n\t\t\t\tvar pointLabelFontColor = valueOrDefault(pointLabelOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\tctx.font = plFont.font;\n\t\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\t\tvar angle = helpers.toDegrees(angleRadians);\n\t\t\t\tctx.textAlign = getTextAlignForAngle(angle);\n\t\t\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n\t\t\t\tfillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\n\t\tvar ctx = scale.ctx;\n\t\tctx.strokeStyle = helpers.valueAtIndexOrDefault(gridLineOpts.color, index - 1);\n\t\tctx.lineWidth = helpers.valueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);\n\n\t\tif (scale.options.gridLines.circular) {\n\t\t\t// Draw circular arcs between the points\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t} else {\n\t\t\t// Draw straight lines connecting each index\n\t\t\tvar valueCount = getValueCount(scale);\n\n\t\t\tif (valueCount === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\t\t\tvar pointPosition = scale.getPointPosition(0, radius);\n\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\n\t\t\tfor (var i = 1; i < valueCount; i++) {\n\t\t\t\tpointPosition = scale.getPointPosition(i, radius);\n\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t}\n\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t}\n\t}\n\n\tfunction numberOrZero(param) {\n\t\treturn helpers.isNumber(param) ? param : 0;\n\t}\n\n\tvar LinearRadialScale = Chart.LinearScaleBase.extend({\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.height = me.maxHeight;\n\t\t\tme.xCenter = Math.round(me.width / 2);\n\t\t\tme.yCenter = Math.round(me.height / 2);\n\n\t\t\tvar minSize = helpers.min([me.height, me.width]);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tme.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);\n\t\t},\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar min = Number.POSITIVE_INFINITY;\n\t\t\tvar max = Number.NEGATIVE_INFINITY;\n\n\t\t\thelpers.each(chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmin = Math.min(value, min);\n\t\t\t\t\t\tmax = Math.max(value, max);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\n\t\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tme.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar tickOpts = this.options.ticks;\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\treturn Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\n\t\t\tChart.LinearScaleBase.prototype.convertTicksToLabels.call(me);\n\n\t\t\t// Point labels\n\t\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tfit: function() {\n\t\t\tif (this.options.pointLabels.display) {\n\t\t\t\tfitWithPointLabels(this);\n\t\t\t} else {\n\t\t\t\tfit(this);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set radius reductions and determine new radius and center point\n\t\t * @private\n\t\t */\n\t\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\n\t\t\tvar me = this;\n\t\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n\t\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n\t\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n\t\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);\n\n\t\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\n\t\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\n\t\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\n\t\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n\t\t\tme.drawingArea = Math.min(\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n\t\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\n\t\t\tvar me = this;\n\t\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\n\t\t\tvar maxLeft = leftMovement + me.drawingArea;\n\t\t\tvar maxTop = topMovement + me.drawingArea;\n\t\t\tvar maxBottom = me.height - bottomMovement - me.drawingArea;\n\n\t\t\tme.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);\n\t\t\tme.yCenter = Math.round(((maxTop + maxBottom) / 2) + me.top);\n\t\t},\n\n\t\tgetIndexAngle: function(index) {\n\t\t\tvar angleMultiplier = (Math.PI * 2) / getValueCount(this);\n\t\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ?\n\t\t\t\tthis.chart.options.startAngle :\n\t\t\t\t0;\n\n\t\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\t\treturn index * angleMultiplier + startAngleRadians;\n\t\t},\n\t\tgetDistanceFromCenterForValue: function(value) {\n\t\t\tvar me = this;\n\n\t\t\tif (value === null) {\n\t\t\t\treturn 0; // null always in center\n\t\t\t}\n\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\t\tif (me.options.ticks.reverse) {\n\t\t\t\treturn (me.max - value) * scalingFactor;\n\t\t\t}\n\t\t\treturn (value - me.min) * scalingFactor;\n\t\t},\n\t\tgetPointPosition: function(index, distanceFromCenter) {\n\t\t\tvar me = this;\n\t\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\n\t\t\treturn {\n\t\t\t\tx: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,\n\t\t\t\ty: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter\n\t\t\t};\n\t\t},\n\t\tgetPointPositionForValue: function(index, value) {\n\t\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t\t},\n\n\t\tgetBasePosition: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.getPointPositionForValue(0,\n\t\t\t\tme.beginAtZero ? 0 :\n\t\t\t\tmin < 0 && max < 0 ? max :\n\t\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t\t0);\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx;\n\t\t\t\tvar startAngle = this.getIndexAngle(0);\n\n\t\t\t\t// Tick Font\n\t\t\t\tvar tickFontSize = valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar tickFontStyle = valueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar tickFontFamily = valueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\t\thelpers.each(me.ticks, function(label, index) {\n\t\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\t\tif (index > 0 || tickOpts.reverse) {\n\t\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\t\tvar tickFontColor = valueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\tctx.font = tickLabelFont;\n\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(me.xCenter, me.yCenter);\n\t\t\t\t\t\t\tctx.rotate(startAngle);\n\n\t\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\t-labelWidth / 2 - tickOpts.backdropPaddingX,\n\t\t\t\t\t\t\t\t\t-yCenterOffset - tickFontSize / 2 - tickOpts.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + tickOpts.backdropPaddingX * 2,\n\t\t\t\t\t\t\t\t\ttickFontSize + tickOpts.backdropPaddingY * 2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\t\tctx.fillText(label, 0, -yCenterOffset);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (opts.angleLines.display || opts.pointLabels.display) {\n\t\t\t\t\tdrawPointLabels(me);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);\n\n};\n","/* global window: false */\n'use strict';\n\nvar moment = require('moment');\nmoment = typeof moment === 'function' ? moment : window.moment;\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\n\n// Integer constants are from the ES6 spec.\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nvar INTERVALS = {\n\tmillisecond: {\n\t\tcommon: true,\n\t\tsize: 1,\n\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t},\n\tsecond: {\n\t\tcommon: true,\n\t\tsize: 1000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\tminute: {\n\t\tcommon: true,\n\t\tsize: 60000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\thour: {\n\t\tcommon: true,\n\t\tsize: 3600000,\n\t\tsteps: [1, 2, 3, 6, 12]\n\t},\n\tday: {\n\t\tcommon: true,\n\t\tsize: 86400000,\n\t\tsteps: [1, 2, 5]\n\t},\n\tweek: {\n\t\tcommon: false,\n\t\tsize: 604800000,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tmonth: {\n\t\tcommon: true,\n\t\tsize: 2.628e9,\n\t\tsteps: [1, 2, 3]\n\t},\n\tquarter: {\n\t\tcommon: false,\n\t\tsize: 7.884e9,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tyear: {\n\t\tcommon: true,\n\t\tsize: 3.154e10\n\t}\n};\n\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n\treturn a - b;\n}\n\nfunction arrayUnique(items) {\n\tvar hash = {};\n\tvar out = [];\n\tvar i, ilen, item;\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\titem = items[i];\n\t\tif (!hash[item]) {\n\t\t\thash[item] = true;\n\t\t\tout.push(item);\n\t\t}\n\t}\n\n\treturn out;\n}\n\n/**\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n * extremity (left + width or top + height). Note that it would be more optimized to directly\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n *\n * @param {Number[]} timestamps - timestamps sorted from lowest to highest.\n * @param {String} distribution - If 'linear', timestamps will be spread linearly along the min\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n * If 'series', timestamps will be positioned at the same distance from each other. In this\n * case, only timestamps that break the time linearity are registered, meaning that in the\n * best case, all timestamps are linear, the table contains only min and max.\n */\nfunction buildLookupTable(timestamps, min, max, distribution) {\n\tif (distribution === 'linear' || !timestamps.length) {\n\t\treturn [\n\t\t\t{time: min, pos: 0},\n\t\t\t{time: max, pos: 1}\n\t\t];\n\t}\n\n\tvar table = [];\n\tvar items = [min];\n\tvar i, ilen, prev, curr, next;\n\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\tcurr = timestamps[i];\n\t\tif (curr > min && curr < max) {\n\t\t\titems.push(curr);\n\t\t}\n\t}\n\n\titems.push(max);\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\tnext = items[i + 1];\n\t\tprev = items[i - 1];\n\t\tcurr = items[i];\n\n\t\t// only add points that breaks the scale linearity\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\n\t\t}\n\t}\n\n\treturn table;\n}\n\n// @see adapted from http://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\nfunction lookup(table, key, value) {\n\tvar lo = 0;\n\tvar hi = table.length - 1;\n\tvar mid, i0, i1;\n\n\twhile (lo >= 0 && lo <= hi) {\n\t\tmid = (lo + hi) >> 1;\n\t\ti0 = table[mid - 1] || null;\n\t\ti1 = table[mid];\n\n\t\tif (!i0) {\n\t\t\t// given value is outside table (before first item)\n\t\t\treturn {lo: null, hi: i1};\n\t\t} else if (i1[key] < value) {\n\t\t\tlo = mid + 1;\n\t\t} else if (i0[key] > value) {\n\t\t\thi = mid - 1;\n\t\t} else {\n\t\t\treturn {lo: i0, hi: i1};\n\t\t}\n\t}\n\n\t// given value is outside table (after last item)\n\treturn {lo: i1, hi: null};\n}\n\n/**\n * Linearly interpolates the given source `value` using the table items `skey` values and\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n * index [0, 1] or [n - 1, n] are used for the interpolation.\n */\nfunction interpolate(table, skey, sval, tkey) {\n\tvar range = lookup(table, skey, sval);\n\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n\tvar span = next[skey] - prev[skey];\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\n\n\treturn prev[tkey] + offset;\n}\n\n/**\n * Convert the given value to a moment object using the given time options.\n * @see http://momentjs.com/docs/#/parsing/\n */\nfunction momentify(value, options) {\n\tvar parser = options.parser;\n\tvar format = options.parser || options.format;\n\n\tif (typeof parser === 'function') {\n\t\treturn parser(value);\n\t}\n\n\tif (typeof value === 'string' && typeof format === 'string') {\n\t\treturn moment(value, format);\n\t}\n\n\tif (!(value instanceof moment)) {\n\t\tvalue = moment(value);\n\t}\n\n\tif (value.isValid()) {\n\t\treturn value;\n\t}\n\n\t// Labels are in an incompatible moment format and no `parser` has been provided.\n\t// The user might still use the deprecated `format` option to convert his inputs.\n\tif (typeof format === 'function') {\n\t\treturn format(value);\n\t}\n\n\treturn value;\n}\n\nfunction parse(input, scale) {\n\tif (helpers.isNullOrUndef(input)) {\n\t\treturn null;\n\t}\n\n\tvar options = scale.options.time;\n\tvar value = momentify(scale.getRightValue(input), options);\n\tif (!value.isValid()) {\n\t\treturn null;\n\t}\n\n\tif (options.round) {\n\t\tvalue.startOf(options.round);\n\t}\n\n\treturn value.valueOf();\n}\n\n/**\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n */\nfunction determineStepSize(min, max, unit, capacity) {\n\tvar range = max - min;\n\tvar interval = INTERVALS[unit];\n\tvar milliseconds = interval.size;\n\tvar steps = interval.steps;\n\tvar i, ilen, factor;\n\n\tif (!steps) {\n\t\treturn Math.ceil(range / ((capacity || 1) * milliseconds));\n\t}\n\n\tfor (i = 0, ilen = steps.length; i < ilen; ++i) {\n\t\tfactor = steps[i];\n\t\tif (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn factor;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n\tvar ilen = UNITS.length;\n\tvar i, interval, factor;\n\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n\t\tinterval = INTERVALS[UNITS[i]];\n\t\tfactor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n\n\treturn UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n */\nfunction determineUnitForFormatting(ticks, minUnit, min, max) {\n\tvar duration = moment.duration(moment(max).diff(moment(min)));\n\tvar ilen = UNITS.length;\n\tvar i, unit;\n\n\tfor (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n\t\tunit = UNITS[i];\n\t\tif (INTERVALS[unit].common && duration.as(unit) >= ticks.length) {\n\t\t\treturn unit;\n\t\t}\n\t}\n\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n\t\tif (INTERVALS[UNITS[i]].common) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n}\n\n/**\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n */\nfunction generate(min, max, capacity, options) {\n\tvar timeOpts = options.time;\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n\tvar major = determineMajorUnit(minor);\n\tvar stepSize = helpers.valueOrDefault(timeOpts.stepSize, timeOpts.unitStepSize);\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n\tvar majorTicksEnabled = options.ticks.major.enabled;\n\tvar interval = INTERVALS[minor];\n\tvar first = moment(min);\n\tvar last = moment(max);\n\tvar ticks = [];\n\tvar time;\n\n\tif (!stepSize) {\n\t\tstepSize = determineStepSize(min, max, minor, capacity);\n\t}\n\n\t// For 'week' unit, handle the first day of week option\n\tif (weekday) {\n\t\tfirst = first.isoWeekday(weekday);\n\t\tlast = last.isoWeekday(weekday);\n\t}\n\n\t// Align first/last ticks on unit\n\tfirst = first.startOf(weekday ? 'day' : minor);\n\tlast = last.startOf(weekday ? 'day' : minor);\n\n\t// Make sure that the last tick include max\n\tif (last < max) {\n\t\tlast.add(1, minor);\n\t}\n\n\ttime = moment(first);\n\n\tif (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n\t\t// Align the first tick on the previous `minor` unit aligned on the `major` unit:\n\t\t// we first aligned time on the previous `major` unit then add the number of full\n\t\t// stepSize there is between first and the previous major time.\n\t\ttime.startOf(major);\n\t\ttime.add(~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n\t}\n\n\tfor (; time < last; time.add(stepSize, minor)) {\n\t\tticks.push(+time);\n\t}\n\n\tticks.push(+time);\n\n\treturn ticks;\n}\n\n/**\n * Returns the right and left offsets from edges in the form of {left, right}.\n * Offsets are added when the `offset` option is true.\n */\nfunction computeOffsets(table, ticks, min, max, options) {\n\tvar left = 0;\n\tvar right = 0;\n\tvar upper, lower;\n\n\tif (options.offset && ticks.length) {\n\t\tif (!options.time.min) {\n\t\t\tupper = ticks.length > 1 ? ticks[1] : max;\n\t\t\tlower = ticks[0];\n\t\t\tleft = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t\tif (!options.time.max) {\n\t\t\tupper = ticks[ticks.length - 1];\n\t\t\tlower = ticks.length > 1 ? ticks[ticks.length - 2] : min;\n\t\t\tright = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t}\n\n\treturn {left: left, right: right};\n}\n\nfunction ticksFromTimestamps(values, majorUnit) {\n\tvar ticks = [];\n\tvar i, ilen, value, major;\n\n\tfor (i = 0, ilen = values.length; i < ilen; ++i) {\n\t\tvalue = values[i];\n\t\tmajor = majorUnit ? value === +moment(value).startOf(majorUnit) : false;\n\n\t\tticks.push({\n\t\t\tvalue: value,\n\t\t\tmajor: major\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'bottom',\n\n\t\t/**\n\t\t * Data distribution along the scale:\n\t\t * - 'linear': data are spread according to their time (distances can vary),\n\t\t * - 'series': data are spread at the same distance from each other.\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t * @since 2.7.0\n\t\t */\n\t\tdistribution: 'linear',\n\n\t\t/**\n\t\t * Scale boundary strategy (bypassed by min/max time options)\n\t\t * - `data`: make sure data are fully visible, ticks outside are removed\n\t\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4556\n\t\t * @since 2.7.0\n\t\t */\n\t\tbounds: 'data',\n\n\t\ttime: {\n\t\t\tparser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/\n\t\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\t\tround: false, // none, or override with week, month, year, etc.\n\t\t\tdisplayFormat: false, // DEPRECATED\n\t\t\tisoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/\n\t\t\tminUnit: 'millisecond',\n\n\t\t\t// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/\n\t\t\tdisplayFormats: {\n\t\t\t\tmillisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,\n\t\t\t\tsecond: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\tminute: 'h:mm a', // 11:20 AM\n\t\t\t\thour: 'hA', // 5PM\n\t\t\t\tday: 'MMM D', // Sep 4\n\t\t\t\tweek: 'll', // Week 46, or maybe \"[W]WW - YYYY\" ?\n\t\t\t\tmonth: 'MMM YYYY', // Sept 2015\n\t\t\t\tquarter: '[Q]Q - YYYY', // Q3\n\t\t\t\tyear: 'YYYY' // 2015\n\t\t\t},\n\t\t},\n\t\tticks: {\n\t\t\tautoSkip: false,\n\n\t\t\t/**\n\t\t\t * Ticks generation input values:\n\t\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n\t\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n\t\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\n\t\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t\t * @since 2.7.0\n\t\t\t */\n\t\t\tsource: 'auto',\n\n\t\t\tmajor: {\n\t\t\t\tenabled: false\n\t\t\t}\n\t\t}\n\t};\n\n\tvar TimeScale = Chart.Scale.extend({\n\t\tinitialize: function() {\n\t\t\tif (!moment) {\n\t\t\t\tthrow new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');\n\t\t\t}\n\n\t\t\tthis.mergeTicksOptions();\n\n\t\t\tChart.Scale.prototype.initialize.call(this);\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\n\t\t\t// DEPRECATIONS: output a message only one time per update\n\t\t\tif (options.time && options.time.format) {\n\t\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser.');\n\t\t\t}\n\n\t\t\treturn Chart.Scale.prototype.update.apply(me, arguments);\n\t\t},\n\n\t\t/**\n\t\t * Allows data to be referenced via 't' attribute\n\t\t */\n\t\tgetRightValue: function(rawValue) {\n\t\t\tif (rawValue && rawValue.t !== undefined) {\n\t\t\t\trawValue = rawValue.t;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, rawValue);\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar min = MAX_INTEGER;\n\t\t\tvar max = MIN_INTEGER;\n\t\t\tvar timestamps = [];\n\t\t\tvar datasets = [];\n\t\t\tvar labels = [];\n\t\t\tvar i, j, ilen, jlen, data, timestamp;\n\n\t\t\t// Convert labels to timestamps\n\t\t\tfor (i = 0, ilen = chart.data.labels.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(parse(chart.data.labels[i], me));\n\t\t\t}\n\n\t\t\t// Convert data to timestamps\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\t\tdata = chart.data.datasets[i].data;\n\n\t\t\t\t\t// Let's consider that all data have the same format.\n\t\t\t\t\tif (helpers.isObject(data[0])) {\n\t\t\t\t\t\tdatasets[i] = [];\n\n\t\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\n\t\t\t\t\t\t\ttimestamp = parse(data[j], me);\n\t\t\t\t\t\t\ttimestamps.push(timestamp);\n\t\t\t\t\t\t\tdatasets[i][j] = timestamp;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimestamps.push.apply(timestamps, labels);\n\t\t\t\t\t\tdatasets[i] = labels.slice(0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatasets[i] = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (labels.length) {\n\t\t\t\t// Sort labels **after** data have been converted\n\t\t\t\tlabels = arrayUnique(labels).sort(sorter);\n\t\t\t\tmin = Math.min(min, labels[0]);\n\t\t\t\tmax = Math.max(max, labels[labels.length - 1]);\n\t\t\t}\n\n\t\t\tif (timestamps.length) {\n\t\t\t\ttimestamps = arrayUnique(timestamps).sort(sorter);\n\t\t\t\tmin = Math.min(min, timestamps[0]);\n\t\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\n\t\t\t}\n\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// In case there is no valid min/max, let's use today limits\n\t\t\tmin = min === MAX_INTEGER ? +moment().startOf('day') : min;\n\t\t\tmax = max === MIN_INTEGER ? +moment().endOf('day') + 1 : max;\n\n\t\t\t// Make sure that max is strictly higher than min (required by the lookup table)\n\t\t\tme.min = Math.min(min, max);\n\t\t\tme.max = Math.max(min + 1, max);\n\n\t\t\t// PRIVATE\n\t\t\tme._horizontal = me.isHorizontal();\n\t\t\tme._table = [];\n\t\t\tme._timestamps = {\n\t\t\t\tdata: timestamps,\n\t\t\t\tdatasets: datasets,\n\t\t\t\tlabels: labels\n\t\t\t};\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\t\t\tvar options = me.options;\n\t\t\tvar timeOpts = options.time;\n\t\t\tvar timestamps = [];\n\t\t\tvar ticks = [];\n\t\t\tvar i, ilen, timestamp;\n\n\t\t\tswitch (options.ticks.source) {\n\t\t\tcase 'data':\n\t\t\t\ttimestamps = me._timestamps.data;\n\t\t\t\tbreak;\n\t\t\tcase 'labels':\n\t\t\t\ttimestamps = me._timestamps.labels;\n\t\t\t\tbreak;\n\t\t\tcase 'auto':\n\t\t\tdefault:\n\t\t\t\ttimestamps = generate(min, max, me.getLabelCapacity(min), options);\n\t\t\t}\n\n\t\t\tif (options.bounds === 'ticks' && timestamps.length) {\n\t\t\t\tmin = timestamps[0];\n\t\t\t\tmax = timestamps[timestamps.length - 1];\n\t\t\t}\n\n\t\t\t// Enforce limits with user min/max options\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// Remove ticks outside the min/max range\n\t\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\t\ttimestamp = timestamps[i];\n\t\t\t\tif (timestamp >= min && timestamp <= max) {\n\t\t\t\t\tticks.push(timestamp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.min = min;\n\t\t\tme.max = max;\n\n\t\t\t// PRIVATE\n\t\t\tme._unit = timeOpts.unit || determineUnitForFormatting(ticks, timeOpts.minUnit, me.min, me.max);\n\t\t\tme._majorUnit = determineMajorUnit(me._unit);\n\t\t\tme._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n\t\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\n\n\t\t\treturn ticksFromTimestamps(ticks, me._majorUnit);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\n\t\t\tvar value = data.datasets[datasetIndex].data[index];\n\n\t\t\tif (helpers.isObject(value)) {\n\t\t\t\tlabel = me.getRightValue(value);\n\t\t\t}\n\t\t\tif (timeOpts.tooltipFormat) {\n\t\t\t\tlabel = momentify(label, timeOpts).format(timeOpts.tooltipFormat);\n\t\t\t}\n\n\t\t\treturn label;\n\t\t},\n\n\t\t/**\n\t\t * Function to format an individual tick mark\n\t\t * @private\n\t\t */\n\t\ttickFormatFunction: function(tick, index, ticks, formatOverride) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar time = tick.valueOf();\n\t\t\tvar formats = options.time.displayFormats;\n\t\t\tvar minorFormat = formats[me._unit];\n\t\t\tvar majorUnit = me._majorUnit;\n\t\t\tvar majorFormat = formats[majorUnit];\n\t\t\tvar majorTime = tick.clone().startOf(majorUnit).valueOf();\n\t\t\tvar majorTickOpts = options.ticks.major;\n\t\t\tvar major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n\t\t\tvar label = tick.format(formatOverride ? formatOverride : major ? majorFormat : minorFormat);\n\t\t\tvar tickOpts = major ? majorTickOpts : options.ticks.minor;\n\t\t\tvar formatter = helpers.valueOrDefault(tickOpts.callback, tickOpts.userCallback);\n\n\t\t\treturn formatter ? formatter(label, index, ticks) : label;\n\t\t},\n\n\t\tconvertTicksToLabels: function(ticks) {\n\t\t\tvar labels = [];\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(this.tickFormatFunction(moment(ticks[i].value), i, ticks));\n\t\t\t}\n\n\t\t\treturn labels;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetPixelForOffset: function(time) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = interpolate(me._table, 'time', time, 'pos');\n\n\t\t\treturn start + size * (me._offsets.left + pos) / (me._offsets.left + 1 + me._offsets.right);\n\t\t},\n\n\t\tgetPixelForValue: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar time = null;\n\n\t\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\n\t\t\t}\n\n\t\t\tif (time === null) {\n\t\t\t\ttime = parse(value, me);\n\t\t\t}\n\n\t\t\tif (time !== null) {\n\t\t\t\treturn me.getPixelForOffset(time);\n\t\t\t}\n\t\t},\n\n\t\tgetPixelForTick: function(index) {\n\t\t\tvar ticks = this.getTicks();\n\t\t\treturn index >= 0 && index < ticks.length ?\n\t\t\t\tthis.getPixelForOffset(ticks[index].value) :\n\t\t\t\tnull;\n\t\t},\n\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = (size ? (pixel - start) / size : 0) * (me._offsets.left + 1 + me._offsets.left) - me._offsets.right;\n\t\t\tvar time = interpolate(me._table, 'pos', pos, 'time');\n\n\t\t\treturn moment(time);\n\t\t},\n\n\t\t/**\n\t\t * Crude approximation of what the label width might be\n\t\t * @private\n\t\t */\n\t\tgetLabelWidth: function(label) {\n\t\t\tvar me = this;\n\t\t\tvar ticksOpts = me.options.ticks;\n\t\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\n\t\t\tvar angle = helpers.toRadians(ticksOpts.maxRotation);\n\t\t\tvar cosRotation = Math.cos(angle);\n\t\t\tvar sinRotation = Math.sin(angle);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);\n\n\t\t\treturn (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetLabelCapacity: function(exampleTime) {\n\t\t\tvar me = this;\n\n\t\t\tvar formatOverride = me.options.time.displayFormats.millisecond;\t// Pick the longest format for guestimation\n\n\t\t\tvar exampleLabel = me.tickFormatFunction(moment(exampleTime), 0, [], formatOverride);\n\t\t\tvar tickLabelWidth = me.getLabelWidth(exampleLabel);\n\t\t\tvar innerWidth = me.isHorizontal() ? me.width : me.height;\n\n\t\t\treturn Math.floor(innerWidth / tickLabelWidth);\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('time', TimeScale, defaultConfig);\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('bar', {\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\n\t\t\t// Specific to Bar Controller\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\n\t\t\t// offset settings\n\t\t\toffset: true,\n\n\t\t\t// grid line settings\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\ttype: 'linear'\n\t\t}]\n\t}\n});\n\ndefaults._set('horizontalBar', {\n\thover: {\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'bottom'\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\tposition: 'left',\n\t\t\ttype: 'category',\n\n\t\t\t// Specific to Horizontal Bar Controller\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\n\t\t\t// offset settings\n\t\t\toffset: true,\n\n\t\t\t// grid line settings\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}]\n\t},\n\n\telements: {\n\t\trectangle: {\n\t\t\tborderSkipped: 'left'\n\t\t}\n\t},\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function(item, data) {\n\t\t\t\t// Pick first xLabel for now\n\t\t\t\tvar title = '';\n\n\t\t\t\tif (item.length > 0) {\n\t\t\t\t\tif (item[0].yLabel) {\n\t\t\t\t\t\ttitle = item[0].yLabel;\n\t\t\t\t\t} else if (data.labels.length > 0 && item[0].index < data.labels.length) {\n\t\t\t\t\t\ttitle = data.labels[item[0].index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\n\t\t\tlabel: function(item, data) {\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\treturn datasetLabel + ': ' + item.xLabel;\n\t\t\t}\n\t\t},\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.bar = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Rectangle,\n\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta;\n\n\t\t\tChart.DatasetController.prototype.initialize.apply(me, arguments);\n\n\t\t\tmeta = me.getMeta();\n\t\t\tmeta.stack = me.getDataset().stack;\n\t\t\tmeta.bar = true;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar rects = me.getMeta().data;\n\t\t\tvar i, ilen;\n\n\t\t\tme._ruler = me.getRuler();\n\n\t\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\n\t\t\t\tme.updateElement(rects[i], i, reset);\n\t\t\t}\n\t\t},\n\n\t\tupdateElement: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar rectangleOptions = chart.options.elements.rectangle;\n\n\t\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\n\t\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\n\t\t\trectangle._datasetIndex = me.index;\n\t\t\trectangle._index = index;\n\n\t\t\trectangle._model = {\n\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\tlabel: chart.data.labels[index],\n\t\t\t\tborderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleOptions.borderSkipped,\n\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.backgroundColor, index, rectangleOptions.backgroundColor),\n\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.borderColor, index, rectangleOptions.borderColor),\n\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.borderWidth, index, rectangleOptions.borderWidth)\n\t\t\t};\n\n\t\t\tme.updateElementGeometry(rectangle, index, reset);\n\n\t\t\trectangle.pivot();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tupdateElementGeometry: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar model = rectangle._model;\n\t\t\tvar vscale = me.getValueScale();\n\t\t\tvar base = vscale.getBasePixel();\n\t\t\tvar horizontal = vscale.isHorizontal();\n\t\t\tvar ruler = me._ruler || me.getRuler();\n\t\t\tvar vpixels = me.calculateBarValuePixels(me.index, index);\n\t\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n\n\t\t\tmodel.horizontal = horizontal;\n\t\t\tmodel.base = reset ? base : vpixels.base;\n\t\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n\t\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n\t\t\tmodel.height = horizontal ? ipixels.size : undefined;\n\t\t\tmodel.width = horizontal ? undefined : ipixels.size;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScaleId: function() {\n\t\t\treturn this.getMeta().yAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScaleId: function() {\n\t\t\treturn this.getMeta().xAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScale: function() {\n\t\t\treturn this.getScaleForId(this.getValueScaleId());\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScale: function() {\n\t\t\treturn this.getScaleForId(this.getIndexScaleId());\n\t\t},\n\n\t\t/**\n\t\t * Returns the effective number of stacks based on groups and bar visibility.\n\t\t * @private\n\t\t */\n\t\tgetStackCount: function(last) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar scale = me.getIndexScale();\n\t\t\tvar stacked = scale.options.stacked;\n\t\t\tvar ilen = last === undefined ? chart.data.datasets.length : last + 1;\n\t\t\tvar stacks = [];\n\t\t\tvar i, meta;\n\n\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tif (meta.bar && chart.isDatasetVisible(i) &&\n\t\t\t\t\t(stacked === false ||\n\t\t\t\t\t(stacked === true && stacks.indexOf(meta.stack) === -1) ||\n\t\t\t\t\t(stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1)))) {\n\t\t\t\t\tstacks.push(meta.stack);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn stacks.length;\n\t\t},\n\n\t\t/**\n\t\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t\t * @private\n\t\t */\n\t\tgetStackIndex: function(datasetIndex) {\n\t\t\treturn this.getStackCount(datasetIndex) - 1;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetRuler: function() {\n\t\t\tvar me = this;\n\t\t\tvar scale = me.getIndexScale();\n\t\t\tvar stackCount = me.getStackCount();\n\t\t\tvar datasetIndex = me.index;\n\t\t\tvar pixels = [];\n\t\t\tvar isHorizontal = scale.isHorizontal();\n\t\t\tvar start = isHorizontal ? scale.left : scale.top;\n\t\t\tvar end = start + (isHorizontal ? scale.width : scale.height);\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n\t\t\t\tpixels.push(scale.getPixelForValue(null, i, datasetIndex));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tpixels: pixels,\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tstackCount: stackCount,\n\t\t\t\tscale: scale\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Note: pixel values are not clamped to the scale area.\n\t\t * @private\n\t\t */\n\t\tcalculateBarValuePixels: function(datasetIndex, index) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar scale = me.getValueScale();\n\t\t\tvar datasets = chart.data.datasets;\n\t\t\tvar value = scale.getRightValue(datasets[datasetIndex].data[index]);\n\t\t\tvar stacked = scale.options.stacked;\n\t\t\tvar stack = meta.stack;\n\t\t\tvar start = 0;\n\t\t\tvar i, imeta, ivalue, base, head, size;\n\n\t\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\n\t\t\t\tfor (i = 0; i < datasetIndex; ++i) {\n\t\t\t\t\timeta = chart.getDatasetMeta(i);\n\n\t\t\t\t\tif (imeta.bar &&\n\t\t\t\t\t\timeta.stack === stack &&\n\t\t\t\t\t\timeta.controller.getValueScaleId() === scale.id &&\n\t\t\t\t\t\tchart.isDatasetVisible(i)) {\n\n\t\t\t\t\t\tivalue = scale.getRightValue(datasets[i].data[index]);\n\t\t\t\t\t\tif ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) {\n\t\t\t\t\t\t\tstart += ivalue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbase = scale.getPixelForValue(start);\n\t\t\thead = scale.getPixelForValue(start + value);\n\t\t\tsize = (head - base) / 2;\n\n\t\t\treturn {\n\t\t\t\tsize: size,\n\t\t\t\tbase: base,\n\t\t\t\thead: head,\n\t\t\t\tcenter: head + size / 2\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tcalculateBarIndexPixels: function(datasetIndex, index, ruler) {\n\t\t\tvar me = this;\n\t\t\tvar options = ruler.scale.options;\n\t\t\tvar stackIndex = me.getStackIndex(datasetIndex);\n\t\t\tvar pixels = ruler.pixels;\n\t\t\tvar base = pixels[index];\n\t\t\tvar length = pixels.length;\n\t\t\tvar start = ruler.start;\n\t\t\tvar end = ruler.end;\n\t\t\tvar leftSampleSize, rightSampleSize, leftCategorySize, rightCategorySize, fullBarSize, size;\n\n\t\t\tif (length === 1) {\n\t\t\t\tleftSampleSize = base > start ? base - start : end - base;\n\t\t\t\trightSampleSize = base < end ? end - base : base - start;\n\t\t\t} else {\n\t\t\t\tif (index > 0) {\n\t\t\t\t\tleftSampleSize = (base - pixels[index - 1]) / 2;\n\t\t\t\t\tif (index === length - 1) {\n\t\t\t\t\t\trightSampleSize = leftSampleSize;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (index < length - 1) {\n\t\t\t\t\trightSampleSize = (pixels[index + 1] - base) / 2;\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tleftSampleSize = rightSampleSize;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tleftCategorySize = leftSampleSize * options.categoryPercentage;\n\t\t\trightCategorySize = rightSampleSize * options.categoryPercentage;\n\t\t\tfullBarSize = (leftCategorySize + rightCategorySize) / ruler.stackCount;\n\t\t\tsize = fullBarSize * options.barPercentage;\n\n\t\t\tsize = Math.min(\n\t\t\t\thelpers.valueOrDefault(options.barThickness, size),\n\t\t\t\thelpers.valueOrDefault(options.maxBarThickness, Infinity));\n\n\t\t\tbase -= leftCategorySize;\n\t\t\tbase += fullBarSize * stackIndex;\n\t\t\tbase += (fullBarSize - size) / 2;\n\n\t\t\treturn {\n\t\t\t\tsize: size,\n\t\t\t\tbase: base,\n\t\t\t\thead: base + size,\n\t\t\t\tcenter: base + size / 2\n\t\t\t};\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar scale = me.getValueScale();\n\t\t\tvar rects = me.getMeta().data;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar ilen = rects.length;\n\t\t\tvar i = 0;\n\n\t\t\thelpers.canvas.clipArea(chart.ctx, chart.chartArea);\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\tif (!isNaN(scale.getRightValue(dataset.data[i]))) {\n\t\t\t\t\trects[i].draw();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\t\t},\n\n\t\tsetHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.valueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.valueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.valueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\t\t\tvar rectangleElementOptions = this.chart.options.elements.rectangle;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth);\n\t\t}\n\t});\n\n\tChart.controllers.horizontalBar = Chart.controllers.bar.extend({\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScaleId: function() {\n\t\t\treturn this.getMeta().xAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScaleId: function() {\n\t\t\treturn this.getMeta().yAxisID;\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('bubble', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\n\t\t\tposition: 'bottom',\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t},\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.bubble = Chart.DatasetController.extend({\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tdataElementType: elements.Point,\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data;\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar options = me._resolveElementOptions(point, index);\n\t\t\tvar data = me.getDataset().data[index];\n\t\t\tvar dsIndex = me.index;\n\n\t\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n\t\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n\n\t\t\tpoint._xScale = xScale;\n\t\t\tpoint._yScale = yScale;\n\t\t\tpoint._options = options;\n\t\t\tpoint._datasetIndex = dsIndex;\n\t\t\tpoint._index = index;\n\t\t\tpoint._model = {\n\t\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\t\tborderColor: options.borderColor,\n\t\t\t\tborderWidth: options.borderWidth,\n\t\t\t\thitRadius: options.hitRadius,\n\t\t\t\tpointStyle: options.pointStyle,\n\t\t\t\tradius: reset ? 0 : options.radius,\n\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t};\n\n\t\t\tpoint.pivot();\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tsetHoverStyle: function(point) {\n\t\t\tvar model = point._model;\n\t\t\tvar options = point._options;\n\n\t\t\tmodel.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor));\n\t\t\tmodel.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor));\n\t\t\tmodel.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n\t\t\tmodel.radius = options.radius + options.hoverRadius;\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar model = point._model;\n\t\t\tvar options = point._options;\n\n\t\t\tmodel.backgroundColor = options.backgroundColor;\n\t\t\tmodel.borderColor = options.borderColor;\n\t\t\tmodel.borderWidth = options.borderWidth;\n\t\t\tmodel.radius = options.radius;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_resolveElementOptions: function(point, index) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar datasets = chart.data.datasets;\n\t\t\tvar dataset = datasets[me.index];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar options = chart.options.elements.point;\n\t\t\tvar resolve = helpers.options.resolve;\n\t\t\tvar data = dataset.data[index];\n\t\t\tvar values = {};\n\t\t\tvar i, ilen, key;\n\n\t\t\t// Scriptable options\n\t\t\tvar context = {\n\t\t\t\tchart: chart,\n\t\t\t\tdataIndex: index,\n\t\t\t\tdataset: dataset,\n\t\t\t\tdatasetIndex: me.index\n\t\t\t};\n\n\t\t\tvar keys = [\n\t\t\t\t'backgroundColor',\n\t\t\t\t'borderColor',\n\t\t\t\t'borderWidth',\n\t\t\t\t'hoverBackgroundColor',\n\t\t\t\t'hoverBorderColor',\n\t\t\t\t'hoverBorderWidth',\n\t\t\t\t'hoverRadius',\n\t\t\t\t'hitRadius',\n\t\t\t\t'pointStyle'\n\t\t\t];\n\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\t\tkey = keys[i];\n\t\t\t\tvalues[key] = resolve([\n\t\t\t\t\tcustom[key],\n\t\t\t\t\tdataset[key],\n\t\t\t\t\toptions[key]\n\t\t\t\t], context, index);\n\t\t\t}\n\n\t\t\t// Custom radius resolution\n\t\t\tvalues.radius = resolve([\n\t\t\t\tcustom.radius,\n\t\t\t\tdata ? data.r : undefined,\n\t\t\t\tdataset.radius,\n\t\t\t\toptions.radius\n\t\t\t], context, index);\n\n\t\t\treturn values;\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('doughnut', {\n\tanimation: {\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate: true,\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale: false\n\t},\n\thover: {\n\t\tmode: 'single'\n\t},\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('
    ');\n\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar labels = data.labels;\n\n\t\tif (datasets.length) {\n\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\ttext.push('
  • ');\n\t\t\t\tif (labels[i]) {\n\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t}\n\t\t\t\ttext.push('
  • ');\n\t\t\t}\n\t\t}\n\n\t\ttext.push('
');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc && arc.custom || {};\n\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t// toggle visibility of index if exists\n\t\t\t\tif (meta.data[index]) {\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// The percentage of the chart that we cut out of the middle.\n\tcutoutPercentage: 50,\n\n\t// The rotation of the chart, where the first data arc begins.\n\trotation: Math.PI * -0.5,\n\n\t// The total circumference of the chart.\n\tcircumference: Math.PI * 2.0,\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n\t\t\t\tif (helpers.isArray(dataLabel)) {\n\t\t\t\t\t// show value on first line of multiline label\n\t\t\t\t\t// need to clone because we are changing the value\n\t\t\t\t\tdataLabel = dataLabel.slice();\n\t\t\t\t\tdataLabel[0] += value;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabel += value;\n\t\t\t\t}\n\n\t\t\t\treturn dataLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\ndefaults._set('pie', helpers.clone(defaults.doughnut));\ndefaults._set('pie', {\n\tcutoutPercentage: 0\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n\t\tgetRingIndex: function(datasetIndex) {\n\t\t\tvar ringIndex = 0;\n\n\t\t\tfor (var j = 0; j < datasetIndex; ++j) {\n\t\t\t\tif (this.chart.isDatasetVisible(j)) {\n\t\t\t\t\t++ringIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ringIndex;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar opts = chart.options;\n\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\tvar availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth;\n\t\t\tvar availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth;\n\t\t\tvar minSize = Math.min(availableWidth, availableHeight);\n\t\t\tvar offset = {x: 0, y: 0};\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar cutoutPercentage = opts.cutoutPercentage;\n\t\t\tvar circumference = opts.circumference;\n\n\t\t\t// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\t\t\tif (circumference < Math.PI * 2.0) {\n\t\t\t\tvar startAngle = opts.rotation % (Math.PI * 2.0);\n\t\t\t\tstartAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n\t\t\t\tvar endAngle = startAngle + circumference;\n\t\t\t\tvar start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};\n\t\t\t\tvar end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};\n\t\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);\n\t\t\t\tvar contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);\n\t\t\t\tvar contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);\n\t\t\t\tvar contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);\n\t\t\t\tvar cutout = cutoutPercentage / 100.0;\n\t\t\t\tvar min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};\n\t\t\t\tvar max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};\n\t\t\t\tvar size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};\n\t\t\t\tminSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n\t\t\t\toffset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};\n\t\t\t}\n\n\t\t\tchart.borderWidth = me.getMaxBorderWidth(meta.data);\n\t\t\tchart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\t\t\tchart.offsetX = offset.x * chart.outerRadius;\n\t\t\tchart.offsetY = offset.y * chart.outerRadius;\n\n\t\t\tmeta.total = me.calculateTotal();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));\n\t\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar opts = chart.options;\n\t\t\tvar animationOpts = opts.animation;\n\t\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\n\t\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\n\t\t\tvar startAngle = opts.rotation; // non reset case handled later\n\t\t\tvar endAngle = opts.rotation; // non reset case handled later\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n\t\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n\t\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX + chart.offsetX,\n\t\t\t\t\ty: centerY + chart.offsetY,\n\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\tcircumference: circumference,\n\t\t\t\t\touterRadius: outerRadius,\n\t\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\t\tlabel: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar model = arc._model;\n\t\t\t// Resets the visual styles\n\t\t\tthis.removeHoverStyle(arc);\n\n\t\t\t// Set correct angles if not resetting\n\t\t\tif (!reset || !animationOpts.animateRotate) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tmodel.startAngle = opts.rotation;\n\t\t\t\t} else {\n\t\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n\t\t\t\t}\n\n\t\t\t\tmodel.endAngle = model.startAngle + model.circumference;\n\t\t\t}\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcalculateTotal: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar total = 0;\n\t\t\tvar value;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tvalue = dataset.data[index];\n\t\t\t\tif (!isNaN(value) && !element.hidden) {\n\t\t\t\t\ttotal += Math.abs(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/* if (total === 0) {\n\t\t\t\ttotal = NaN;\n\t\t\t}*/\n\n\t\t\treturn total;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar total = this.getMeta().total;\n\t\t\tif (total > 0 && !isNaN(value)) {\n\t\t\t\treturn (Math.PI * 2.0) * (value / total);\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\t// gets the max border or hover width to properly scale pie charts\n\t\tgetMaxBorderWidth: function(arcs) {\n\t\t\tvar max = 0;\n\t\t\tvar index = this.index;\n\t\t\tvar length = arcs.length;\n\t\t\tvar borderWidth;\n\t\t\tvar hoverWidth;\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tborderWidth = arcs[i]._model ? arcs[i]._model.borderWidth : 0;\n\t\t\t\thoverWidth = arcs[i]._chart ? arcs[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;\n\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\n\t\t\t}\n\t\t\treturn max;\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('line', {\n\tshowLines: true,\n\tspanGaps: false,\n\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\t\t\tid: 'x-axis-0'\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tfunction lineEnabled(dataset, options) {\n\t\treturn helpers.valueOrDefault(dataset.showLine, options.showLines);\n\t}\n\n\tChart.controllers.line = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: elements.Line,\n\n\t\tdataElementType: elements.Point,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data || [];\n\t\t\tvar options = me.chart.options;\n\t\t\tvar lineElementOptions = options.elements.line;\n\t\t\tvar scale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar i, ilen, custom;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar showLine = lineEnabled(dataset, options);\n\n\t\t\t// Update Line\n\t\t\tif (showLine) {\n\t\t\t\tcustom = line.custom || {};\n\n\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t\t}\n\n\t\t\t\t// Utility\n\t\t\t\tline._scale = scale;\n\t\t\t\tline._datasetIndex = me.index;\n\t\t\t\t// Data\n\t\t\t\tline._children = points;\n\t\t\t\t// Model\n\t\t\t\tline._model = {\n\t\t\t\t\t// Appearance\n\t\t\t\t\t// The default behavior of lines is to break at null values, according\n\t\t\t\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n\t\t\t\t\t// This option gives lines the ability to span gaps\n\t\t\t\t\tspanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tsteppedLine: custom.steppedLine ? custom.steppedLine : helpers.valueOrDefault(dataset.steppedLine, lineElementOptions.stepped),\n\t\t\t\t\tcubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.valueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode),\n\t\t\t\t};\n\n\t\t\t\tline.pivot();\n\t\t\t}\n\n\t\t\t// Update Points\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tme.updateElement(points[i], i, reset);\n\t\t\t}\n\n\t\t\tif (showLine && line._model.tension !== 0) {\n\t\t\t\tme.updateBezierControlPoints();\n\t\t\t}\n\n\t\t\t// Now pivot the point for animation\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tpoints[i].pivot();\n\t\t\t}\n\t\t},\n\n\t\tgetPointBackgroundColor: function(point, index) {\n\t\t\tvar backgroundColor = this.chart.options.elements.point.backgroundColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.backgroundColor) {\n\t\t\t\tbackgroundColor = custom.backgroundColor;\n\t\t\t} else if (dataset.pointBackgroundColor) {\n\t\t\t\tbackgroundColor = helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);\n\t\t\t} else if (dataset.backgroundColor) {\n\t\t\t\tbackgroundColor = dataset.backgroundColor;\n\t\t\t}\n\n\t\t\treturn backgroundColor;\n\t\t},\n\n\t\tgetPointBorderColor: function(point, index) {\n\t\t\tvar borderColor = this.chart.options.elements.point.borderColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.borderColor) {\n\t\t\t\tborderColor = custom.borderColor;\n\t\t\t} else if (dataset.pointBorderColor) {\n\t\t\t\tborderColor = helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);\n\t\t\t} else if (dataset.borderColor) {\n\t\t\t\tborderColor = dataset.borderColor;\n\t\t\t}\n\n\t\t\treturn borderColor;\n\t\t},\n\n\t\tgetPointBorderWidth: function(point, index) {\n\t\t\tvar borderWidth = this.chart.options.elements.point.borderWidth;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (!isNaN(custom.borderWidth)) {\n\t\t\t\tborderWidth = custom.borderWidth;\n\t\t\t} else if (!isNaN(dataset.pointBorderWidth) || helpers.isArray(dataset.pointBorderWidth)) {\n\t\t\t\tborderWidth = helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);\n\t\t\t} else if (!isNaN(dataset.borderWidth)) {\n\t\t\t\tborderWidth = dataset.borderWidth;\n\t\t\t}\n\n\t\t\treturn borderWidth;\n\t\t},\n\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar datasetIndex = me.index;\n\t\t\tvar value = dataset.data[index];\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar pointOptions = me.chart.options.elements.point;\n\t\t\tvar x, y;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\t\t\tif ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {\n\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t}\n\n\t\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n\t\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n\t\t\t// Utility\n\t\t\tpoint._xScale = xScale;\n\t\t\tpoint._yScale = yScale;\n\t\t\tpoint._datasetIndex = datasetIndex;\n\t\t\tpoint._index = index;\n\n\t\t\t// Desired view properties\n\t\t\tpoint._model = {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\t// Appearance\n\t\t\t\tradius: custom.radius || helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),\n\t\t\t\tpointStyle: custom.pointStyle || helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),\n\t\t\t\tbackgroundColor: me.getPointBackgroundColor(point, index),\n\t\t\t\tborderColor: me.getPointBorderColor(point, index),\n\t\t\t\tborderWidth: me.getPointBorderWidth(point, index),\n\t\t\t\ttension: meta.dataset._model ? meta.dataset._model.tension : 0,\n\t\t\t\tsteppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,\n\t\t\t\t// Tooltip\n\t\t\t\thitRadius: custom.hitRadius || helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)\n\t\t\t};\n\t\t},\n\n\t\tcalculatePointY: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar sumPos = 0;\n\t\t\tvar sumNeg = 0;\n\t\t\tvar i, ds, dsMeta;\n\n\t\t\tif (yScale.options.stacked) {\n\t\t\t\tfor (i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tds = chart.data.datasets[i];\n\t\t\t\t\tdsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\t\t\t\t\t\tif (stackedRightValue < 0) {\n\t\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsumPos += stackedRightValue || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar rightValue = Number(yScale.getRightValue(value));\n\t\t\t\tif (rightValue < 0) {\n\t\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\n\t\t\t\t}\n\t\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\n\t\t\t}\n\n\t\t\treturn yScale.getPixelForValue(value);\n\t\t},\n\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar area = me.chart.chartArea;\n\t\t\tvar points = (meta.data || []);\n\t\t\tvar i, ilen, point, model, controlPoints;\n\n\t\t\t// Only consider points that are drawn in case the spanGaps option is used\n\t\t\tif (meta.dataset._model.spanGaps) {\n\t\t\t\tpoints = points.filter(function(pt) {\n\t\t\t\t\treturn !pt._model.skip;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction capControlPoint(pt, min, max) {\n\t\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t\t}\n\n\t\t\tif (meta.dataset._model.cubicInterpolationMode === 'monotone') {\n\t\t\t\thelpers.splineCurveMonotone(points);\n\t\t\t} else {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tpoint = points[i];\n\t\t\t\t\tmodel = point._model;\n\t\t\t\t\tcontrolPoints = helpers.splineCurve(\n\t\t\t\t\t\thelpers.previousItem(points, i)._model,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\thelpers.nextItem(points, i)._model,\n\t\t\t\t\t\tmeta.dataset._model.tension\n\t\t\t\t\t);\n\t\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\n\t\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\n\t\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\n\t\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.chart.options.elements.line.capBezierPoints) {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tmodel = points[i]._model;\n\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data || [];\n\t\t\tvar area = chart.chartArea;\n\t\t\tvar ilen = points.length;\n\t\t\tvar i = 0;\n\n\t\t\thelpers.canvas.clipArea(chart.ctx, area);\n\n\t\t\tif (lineEnabled(me.getDataset(), chart.options)) {\n\t\t\t\tmeta.dataset.draw();\n\t\t\t}\n\n\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\n\t\t\t// Draw the points\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\tpoints[i].draw(area);\n\t\t\t}\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius || helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\n\t\t\tmodel.radius = custom.radius || helpers.valueAtIndexOrDefault(dataset.pointRadius, index, me.chart.options.elements.point.radius);\n\t\t\tmodel.backgroundColor = me.getPointBackgroundColor(point, index);\n\t\t\tmodel.borderColor = me.getPointBorderColor(point, index);\n\t\t\tmodel.borderWidth = me.getPointBorderWidth(point, index);\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('polarArea', {\n\tscale: {\n\t\ttype: 'radialLinear',\n\t\tangleLines: {\n\t\t\tdisplay: false\n\t\t},\n\t\tgridLines: {\n\t\t\tcircular: true\n\t\t},\n\t\tpointLabels: {\n\t\t\tdisplay: false\n\t\t},\n\t\tticks: {\n\t\t\tbeginAtZero: true\n\t\t}\n\t},\n\n\t// Boolean - Whether to animate the rotation of the chart\n\tanimation: {\n\t\tanimateRotate: true,\n\t\tanimateScale: true\n\t},\n\n\tstartAngle: -0.5 * Math.PI,\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('
    ');\n\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar labels = data.labels;\n\n\t\tif (datasets.length) {\n\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\ttext.push('
  • ');\n\t\t\t\tif (labels[i]) {\n\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t}\n\t\t\t\ttext.push('
  • ');\n\t\t\t}\n\t\t}\n\n\t\ttext.push('
');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.polarArea = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar opts = chart.options;\n\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\t\t\tchart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\n\t\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\n\t\t\tmeta.count = me.countVisibleElements();\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar opts = chart.options;\n\t\t\tvar animationOpts = opts.animation;\n\t\t\tvar scale = chart.scale;\n\t\t\tvar labels = chart.data.labels;\n\n\t\t\tvar circumference = me.calculateCircumference(dataset.data[index]);\n\t\t\tvar centerX = scale.xCenter;\n\t\t\tvar centerY = scale.yCenter;\n\n\t\t\t// If there is NaN data before us, we need to calculate the starting angle correctly.\n\t\t\t// We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data\n\t\t\tvar visibleCount = 0;\n\t\t\tvar meta = me.getMeta();\n\t\t\tfor (var i = 0; i < index; ++i) {\n\t\t\t\tif (!isNaN(dataset.data[i]) && !meta.data[i].hidden) {\n\t\t\t\t\t++visibleCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// var negHalfPI = -0.5 * Math.PI;\n\t\t\tvar datasetStartAngle = opts.startAngle;\n\t\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\t\tvar startAngle = datasetStartAngle + (circumference * visibleCount);\n\t\t\tvar endAngle = startAngle + (arc.hidden ? 0 : circumference);\n\n\t\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX,\n\t\t\t\t\ty: centerY,\n\t\t\t\t\tinnerRadius: 0,\n\t\t\t\t\touterRadius: reset ? resetRadius : distance,\n\t\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n\t\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n\t\t\t\t\tlabel: helpers.valueAtIndexOrDefault(labels, index, labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply border and fill style\n\t\t\tme.removeHoverStyle(arc);\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcountVisibleElements: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar count = 0;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn count;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar count = this.getMeta().count;\n\t\t\tif (count > 0 && !isNaN(value)) {\n\t\t\t\treturn (2 * Math.PI) / count;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('radar', {\n\tscale: {\n\t\ttype: 'radialLinear'\n\t},\n\telements: {\n\t\tline: {\n\t\t\ttension: 0 // no bezier in radar\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.radar = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: elements.Line,\n\n\t\tdataElementType: elements.Point,\n\n\t\tlinkScales: helpers.noop,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data;\n\t\t\tvar custom = line.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar lineElementOptions = me.chart.options.elements.line;\n\t\t\tvar scale = me.chart.scale;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t}\n\n\t\t\thelpers.extend(meta.dataset, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_scale: scale,\n\t\t\t\t// Data\n\t\t\t\t_children: points,\n\t\t\t\t_loop: true,\n\t\t\t\t// Model\n\t\t\t\t_model: {\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeta.dataset.pivot();\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t}, me);\n\n\t\t\t// Update bezier control points\n\t\t\tme.updateBezierControlPoints();\n\t\t},\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar scale = me.chart.scale;\n\t\t\tvar pointElementOptions = me.chart.options.elements.point;\n\t\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\t\t\tif ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {\n\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t}\n\n\t\t\thelpers.extend(point, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales\n\t\t\t\t\ty: reset ? scale.yCenter : pointPosition.y,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, me.chart.options.elements.line.tension),\n\t\t\t\t\tradius: custom.radius ? custom.radius : helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),\n\t\t\t\t\tpointStyle: custom.pointStyle ? custom.pointStyle : helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\thitRadius: custom.hitRadius ? custom.hitRadius : helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointElementOptions.hitRadius)\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tpoint._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y));\n\t\t},\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar chartArea = this.chart.chartArea;\n\t\t\tvar meta = this.getMeta();\n\n\t\t\thelpers.each(meta.data, function(point, index) {\n\t\t\t\tvar model = point._model;\n\t\t\t\tvar controlPoints = helpers.splineCurve(\n\t\t\t\t\thelpers.previousItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel,\n\t\t\t\t\thelpers.nextItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel.tension\n\t\t\t\t);\n\n\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\t\t\t\tmodel.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\tmodel.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\t// Now pivot the point for animation\n\t\t\t\tpoint.pivot();\n\t\t\t});\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius ? custom.hoverRadius : helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\t\t\tvar pointElementOptions = this.chart.options.elements.point;\n\n\t\t\tmodel.radius = custom.radius ? custom.radius : helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius);\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth);\n\t\t}\n\t});\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\n\ndefaults._set('scatter', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\n\t\t\ttype: 'linear', // scatter should not use a category axis\n\t\t\tposition: 'bottom'\n\t\t}],\n\t\tyAxes: [{\n\t\t\tid: 'y-axis-1',\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left'\n\t\t}]\n\t},\n\n\tshowLines: false,\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\n\t\t\t},\n\t\t\tlabel: function(item) {\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\t// Scatter charts use line controllers\n\tChart.controllers.scatter = Chart.controllers.line;\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bar = function(context, config) {\n\t\tconfig.type = 'bar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bubble = function(context, config) {\n\t\tconfig.type = 'bubble';\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Doughnut = function(context, config) {\n\t\tconfig.type = 'doughnut';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Line = function(context, config) {\n\t\tconfig.type = 'line';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.PolarArea = function(context, config) {\n\t\tconfig.type = 'polarArea';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Radar = function(context, config) {\n\t\tconfig.type = 'radar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\tChart.Scatter = function(context, config) {\n\t\tconfig.type = 'scatter';\n\t\treturn new Chart(context, config);\n\t};\n};\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\n'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\tplugins: {\n\t\tfiller: {\n\t\t\tpropagate: true\n\t\t}\n\t}\n});\n\nmodule.exports = function() {\n\n\tvar mappers = {\n\t\tdataset: function(source) {\n\t\t\tvar index = source.fill;\n\t\t\tvar chart = source.chart;\n\t\t\tvar meta = chart.getDatasetMeta(index);\n\t\t\tvar visible = meta && chart.isDatasetVisible(index);\n\t\t\tvar points = (visible && meta.dataset._children) || [];\n\t\t\tvar length = points.length || 0;\n\n\t\t\treturn !length ? null : function(point, i) {\n\t\t\t\treturn (i < length && points[i]._view) || null;\n\t\t\t};\n\t\t},\n\n\t\tboundary: function(source) {\n\t\t\tvar boundary = source.boundary;\n\t\t\tvar x = boundary ? boundary.x : null;\n\t\t\tvar y = boundary ? boundary.y : null;\n\n\t\t\treturn function(point) {\n\t\t\t\treturn {\n\t\t\t\t\tx: x === null ? point.x : x,\n\t\t\t\t\ty: y === null ? point.y : y,\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t};\n\n\t// @todo if (fill[0] === '#')\n\tfunction decodeFill(el, index, count) {\n\t\tvar model = el._model || {};\n\t\tvar fill = model.fill;\n\t\tvar target;\n\n\t\tif (fill === undefined) {\n\t\t\tfill = !!model.backgroundColor;\n\t\t}\n\n\t\tif (fill === false || fill === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (fill === true) {\n\t\t\treturn 'origin';\n\t\t}\n\n\t\ttarget = parseFloat(fill, 10);\n\t\tif (isFinite(target) && Math.floor(target) === target) {\n\t\t\tif (fill[0] === '-' || fill[0] === '+') {\n\t\t\t\ttarget = index + target;\n\t\t\t}\n\n\t\t\tif (target === index || target < 0 || target >= count) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn target;\n\t\t}\n\n\t\tswitch (fill) {\n\t\t// compatibility\n\t\tcase 'bottom':\n\t\t\treturn 'start';\n\t\tcase 'top':\n\t\t\treturn 'end';\n\t\tcase 'zero':\n\t\t\treturn 'origin';\n\t\t// supported boundaries\n\t\tcase 'origin':\n\t\tcase 'start':\n\t\tcase 'end':\n\t\t\treturn fill;\n\t\t// invalid fill values\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfunction computeBoundary(source) {\n\t\tvar model = source.el._model || {};\n\t\tvar scale = source.el._scale || {};\n\t\tvar fill = source.fill;\n\t\tvar target = null;\n\t\tvar horizontal;\n\n\t\tif (isFinite(fill)) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Backward compatibility: until v3, we still need to support boundary values set on\n\t\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n\t\t// controllers might still use it (e.g. the Smith chart).\n\n\t\tif (fill === 'start') {\n\t\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n\t\t} else if (fill === 'end') {\n\t\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\n\t\t} else if (model.scaleZero !== undefined) {\n\t\t\ttarget = model.scaleZero;\n\t\t} else if (scale.getBasePosition) {\n\t\t\ttarget = scale.getBasePosition();\n\t\t} else if (scale.getBasePixel) {\n\t\t\ttarget = scale.getBasePixel();\n\t\t}\n\n\t\tif (target !== undefined && target !== null) {\n\t\t\tif (target.x !== undefined && target.y !== undefined) {\n\t\t\t\treturn target;\n\t\t\t}\n\n\t\t\tif (typeof target === 'number' && isFinite(target)) {\n\t\t\t\thorizontal = scale.isHorizontal();\n\t\t\t\treturn {\n\t\t\t\t\tx: horizontal ? target : null,\n\t\t\t\t\ty: horizontal ? null : target\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction resolveTarget(sources, index, propagate) {\n\t\tvar source = sources[index];\n\t\tvar fill = source.fill;\n\t\tvar visited = [index];\n\t\tvar target;\n\n\t\tif (!propagate) {\n\t\t\treturn fill;\n\t\t}\n\n\t\twhile (fill !== false && visited.indexOf(fill) === -1) {\n\t\t\tif (!isFinite(fill)) {\n\t\t\t\treturn fill;\n\t\t\t}\n\n\t\t\ttarget = sources[fill];\n\t\t\tif (!target) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (target.visible) {\n\t\t\t\treturn fill;\n\t\t\t}\n\n\t\t\tvisited.push(fill);\n\t\t\tfill = target.fill;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction createMapper(source) {\n\t\tvar fill = source.fill;\n\t\tvar type = 'dataset';\n\n\t\tif (fill === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!isFinite(fill)) {\n\t\t\ttype = 'boundary';\n\t\t}\n\n\t\treturn mappers[type](source);\n\t}\n\n\tfunction isDrawable(point) {\n\t\treturn point && !point.skip;\n\t}\n\n\tfunction drawArea(ctx, curve0, curve1, len0, len1) {\n\t\tvar i;\n\n\t\tif (!len0 || !len1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// building first area curve (normal)\n\t\tctx.moveTo(curve0[0].x, curve0[0].y);\n\t\tfor (i = 1; i < len0; ++i) {\n\t\t\thelpers.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n\t\t}\n\n\t\t// joining the two area curves\n\t\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n\t\t// building opposite area curve (reverse)\n\t\tfor (i = len1 - 1; i > 0; --i) {\n\t\t\thelpers.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n\t\t}\n\t}\n\n\tfunction doFill(ctx, points, mapper, view, color, loop) {\n\t\tvar count = points.length;\n\t\tvar span = view.spanGaps;\n\t\tvar curve0 = [];\n\t\tvar curve1 = [];\n\t\tvar len0 = 0;\n\t\tvar len1 = 0;\n\t\tvar i, ilen, index, p0, p1, d0, d1;\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0, ilen = (count + !!loop); i < ilen; ++i) {\n\t\t\tindex = i % count;\n\t\t\tp0 = points[index]._view;\n\t\t\tp1 = mapper(p0, index, view);\n\t\t\td0 = isDrawable(p0);\n\t\t\td1 = isDrawable(p1);\n\n\t\t\tif (d0 && d1) {\n\t\t\t\tlen0 = curve0.push(p0);\n\t\t\t\tlen1 = curve1.push(p1);\n\t\t\t} else if (len0 && len1) {\n\t\t\t\tif (!span) {\n\t\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\t\t\t\t\tlen0 = len1 = 0;\n\t\t\t\t\tcurve0 = [];\n\t\t\t\t\tcurve1 = [];\n\t\t\t\t} else {\n\t\t\t\t\tif (d0) {\n\t\t\t\t\t\tcurve0.push(p0);\n\t\t\t\t\t}\n\t\t\t\t\tif (d1) {\n\t\t\t\t\t\tcurve1.push(p1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\n\t\tctx.closePath();\n\t\tctx.fillStyle = color;\n\t\tctx.fill();\n\t}\n\n\treturn {\n\t\tid: 'filler',\n\n\t\tafterDatasetsUpdate: function(chart, options) {\n\t\t\tvar count = (chart.data.datasets || []).length;\n\t\t\tvar propagate = options.propagate;\n\t\t\tvar sources = [];\n\t\t\tvar meta, i, el, source;\n\n\t\t\tfor (i = 0; i < count; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tel = meta.dataset;\n\t\t\t\tsource = null;\n\n\t\t\t\tif (el && el._model && el instanceof elements.Line) {\n\t\t\t\t\tsource = {\n\t\t\t\t\t\tvisible: chart.isDatasetVisible(i),\n\t\t\t\t\t\tfill: decodeFill(el, i, count),\n\t\t\t\t\t\tchart: chart,\n\t\t\t\t\t\tel: el\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tmeta.$filler = source;\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < count; ++i) {\n\t\t\t\tsource = sources[i];\n\t\t\t\tif (!source) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tsource.fill = resolveTarget(sources, i, propagate);\n\t\t\t\tsource.boundary = computeBoundary(source);\n\t\t\t\tsource.mapper = createMapper(source);\n\t\t\t}\n\t\t},\n\n\t\tbeforeDatasetDraw: function(chart, args) {\n\t\t\tvar meta = args.meta.$filler;\n\t\t\tif (!meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ctx = chart.ctx;\n\t\t\tvar el = meta.el;\n\t\t\tvar view = el._view;\n\t\t\tvar points = el._children || [];\n\t\t\tvar mapper = meta.mapper;\n\t\t\tvar color = view.backgroundColor || defaults.global.defaultColor;\n\n\t\t\tif (mapper && color && points.length) {\n\t\t\t\thelpers.canvas.clipArea(ctx, chart.chartArea);\n\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\n\t\t\t\thelpers.canvas.unclipArea(ctx);\n\t\t\t}\n\t\t}\n\t};\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\tlegend: {\n\t\tdisplay: true,\n\t\tposition: 'top',\n\t\tfullWidth: true,\n\t\treverse: false,\n\t\tweight: 1000,\n\n\t\t// a callback that will handle\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.datasetIndex;\n\t\t\tvar ci = this.chart;\n\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t// See controller.isDatasetVisible comment\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n\t\t\t// We hid a dataset ... rerender the chart\n\t\t\tci.update();\n\t\t},\n\n\t\tonHover: null,\n\n\t\tlabels: {\n\t\t\tboxWidth: 40,\n\t\t\tpadding: 10,\n\t\t\t// Generates labels shown in the legend\n\t\t\t// Valid properties to return:\n\t\t\t// text : text to display\n\t\t\t// fillStyle : fill of coloured box\n\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t// lineCap : cap style for line\n\t\t\t// lineDash\n\t\t\t// lineDashOffset :\n\t\t\t// lineJoin :\n\t\t\t// lineWidth :\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\treturn helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\tfillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t};\n\t\t\t\t}, this) : [];\n\t\t\t}\n\t\t}\n\t},\n\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('
    ');\n\t\tfor (var i = 0; i < chart.data.datasets.length; i++) {\n\t\t\ttext.push('
  • ');\n\t\t\tif (chart.data.datasets[i].label) {\n\t\t\t\ttext.push(chart.data.datasets[i].label);\n\t\t\t}\n\t\t\ttext.push('
  • ');\n\t\t}\n\t\ttext.push('
');\n\t\treturn text.join('');\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tvar layout = Chart.layoutService;\n\tvar noop = helpers.noop;\n\n\t/**\n\t * Helper function to get the box width based on the usePointStyle option\n\t * @param labelopts {Object} the label options on the legend\n\t * @param fontSize {Number} the label font size\n\t * @return {Number} width of the color box area\n\t */\n\tfunction getBoxWidth(labelOpts, fontSize) {\n\t\treturn labelOpts.usePointStyle ?\n\t\t\tfontSize * Math.SQRT2 :\n\t\t\tlabelOpts.boxWidth;\n\t}\n\n\tChart.Legend = Element.extend({\n\n\t\tinitialize: function(config) {\n\t\t\thelpers.extend(this, config);\n\n\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\tthis.legendHitBoxes = [];\n\n\t\t\t// Are we in doughnut mode which has a different data type\n\t\t\tthis.doughnutMode = false;\n\t\t},\n\n\t\t// These methods are ordered by lifecycle. Utilities then follow.\n\t\t// Any function defined here is inherited by all legend types.\n\t\t// Any function can be extended by the legend type\n\n\t\tbeforeUpdate: noop,\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = margins;\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\t\t\t// Labels\n\t\t\tme.beforeBuildLabels();\n\t\t\tme.buildLabels();\n\t\t\tme.afterBuildLabels();\n\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\t\t},\n\t\tafterUpdate: noop,\n\n\t\t//\n\n\t\tbeforeSetDimensions: noop,\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\n\t\t\t// Reset minSize\n\t\t\tme.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\t\t},\n\t\tafterSetDimensions: noop,\n\n\t\t//\n\n\t\tbeforeBuildLabels: noop,\n\t\tbuildLabels: function() {\n\t\t\tvar me = this;\n\t\t\tvar labelOpts = me.options.labels || {};\n\t\t\tvar legendItems = helpers.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n\t\t\tif (labelOpts.filter) {\n\t\t\t\tlegendItems = legendItems.filter(function(item) {\n\t\t\t\t\treturn labelOpts.filter(item, me.chart.data);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (me.options.reverse) {\n\t\t\t\tlegendItems.reverse();\n\t\t\t}\n\n\t\t\tme.legendItems = legendItems;\n\t\t},\n\t\tafterBuildLabels: noop,\n\n\t\t//\n\n\t\tbeforeFit: noop,\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar labelOpts = opts.labels;\n\t\t\tvar display = opts.display;\n\n\t\t\tvar ctx = me.ctx;\n\n\t\t\tvar globalDefault = defaults.global;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t\t// Reset hit boxes\n\t\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\t\tvar minSize = me.minSize;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\tminSize.height = display ? 10 : 0;\n\t\t\t} else {\n\t\t\t\tminSize.width = display ? 10 : 0;\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\t// Increase sizes here\n\t\t\tif (display) {\n\t\t\t\tctx.font = labelFont;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// Labels\n\n\t\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\t\tvar totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;\n\n\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t\tif (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {\n\t\t\t\t\t\t\ttotalHeight += fontSize + (labelOpts.padding);\n\t\t\t\t\t\t\tlineWidths[lineWidths.length] = me.left;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t\t});\n\n\t\t\t\t\tminSize.height += totalHeight;\n\n\t\t\t\t} else {\n\t\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\t\tvar currentColWidth = 0;\n\t\t\t\t\tvar currentColHeight = 0;\n\t\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\t\tif (currentColHeight + itemHeight > minSize.height) {\n\t\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Get max width\n\t\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\t\tminSize.width += totalWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\t\t},\n\t\tafterFit: noop,\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t},\n\n\t\t// Actually draw the legend on the canvas\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar labelOpts = opts.labels;\n\t\t\tvar globalDefault = defaults.global;\n\t\t\tvar lineDefault = globalDefault.elements.line;\n\t\t\tvar legendWidth = me.width;\n\t\t\tvar lineWidths = me.lineWidths;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx;\n\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\tvar fontColor = valueOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor);\n\t\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\t\tvar cursor;\n\n\t\t\t\t// Canvas setup\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\tctx.lineWidth = 0.5;\n\t\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\t\tctx.font = labelFont;\n\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\tvar hitboxes = me.legendHitBoxes;\n\n\t\t\t\t// current position\n\t\t\t\tvar drawLegendBox = function(x, y, legendItem) {\n\t\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set the ctx for the box\n\t\t\t\t\tctx.save();\n\n\t\t\t\t\tctx.fillStyle = valueOrDefault(legendItem.fillStyle, globalDefault.defaultColor);\n\t\t\t\t\tctx.lineCap = valueOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\t\tctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\t\tctx.lineJoin = valueOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\t\tctx.lineWidth = valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\t\tctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);\n\t\t\t\t\tvar isLineWidthZero = (valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);\n\n\t\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\t\tctx.setLineDash(valueOrDefault(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\n\t\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\t\tvar radius = fontSize * Math.SQRT2 / 2;\n\t\t\t\t\t\tvar offSet = radius / Math.SQRT2;\n\t\t\t\t\t\tvar centerX = x + offSet;\n\t\t\t\t\t\tvar centerY = y + offSet;\n\n\t\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\t\thelpers.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\t\tif (!isLineWidthZero) {\n\t\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t};\n\t\t\t\tvar fillText = function(x, y, legendItem, textWidth) {\n\t\t\t\t\tvar halfFontSize = fontSize / 2;\n\t\t\t\t\tvar xLeft = boxWidth + halfFontSize + x;\n\t\t\t\t\tvar yMiddle = y + halfFontSize;\n\n\t\t\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\n\n\t\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\t\tctx.moveTo(xLeft, yMiddle);\n\t\t\t\t\t\tctx.lineTo(xLeft + textWidth, yMiddle);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Horizontal\n\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tcursor = {\n\t\t\t\t\t\tx: me.left + ((legendWidth - lineWidths[0]) / 2),\n\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\tline: 0\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tcursor = {\n\t\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\tline: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\n\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\n\t\t\t\t\tvar x = cursor.x;\n\t\t\t\t\tvar y = cursor.y;\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tif (x + width >= legendWidth) {\n\t\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\t\tx = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (y + itemHeight > me.bottom) {\n\t\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\t\ty = cursor.y = me.top + labelOpts.padding;\n\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t}\n\n\t\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\t\thitboxes[i].left = x;\n\t\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t\t// Fill the actual label\n\t\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tcursor.x += width + (labelOpts.padding);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle an event\n\t\t * @private\n\t\t * @param {IEvent} event - The event to handle\n\t\t * @return {Boolean} true if a change occured\n\t\t */\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\t\t\tvar changed = false;\n\n\t\t\tif (type === 'mousemove') {\n\t\t\t\tif (!opts.onHover) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (type === 'click') {\n\t\t\t\tif (!opts.onClick) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Chart event already has relative position in it\n\t\t\tvar x = e.x;\n\t\t\tvar y = e.y;\n\n\t\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t\t// See if we are touching one of the dataset boxes\n\t\t\t\tvar lh = me.legendHitBoxes;\n\t\t\t\tfor (var i = 0; i < lh.length; ++i) {\n\t\t\t\t\tvar hitBox = lh[i];\n\n\t\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t\t// Touching an element\n\t\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\t\topts.onClick.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (type === 'mousemove') {\n\t\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\t\topts.onHover.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn changed;\n\t\t}\n\t});\n\n\tfunction createNewLegendAndAttach(chart, legendOpts) {\n\t\tvar legend = new Chart.Legend({\n\t\t\tctx: chart.ctx,\n\t\t\toptions: legendOpts,\n\t\t\tchart: chart\n\t\t});\n\n\t\tlayout.configure(chart, legend, legendOpts);\n\t\tlayout.addBox(chart, legend);\n\t\tchart.legend = legend;\n\t}\n\n\treturn {\n\t\tid: 'legend',\n\n\t\tbeforeInit: function(chart) {\n\t\t\tvar legendOpts = chart.options.legend;\n\n\t\t\tif (legendOpts) {\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t}\n\t\t},\n\n\t\tbeforeUpdate: function(chart) {\n\t\t\tvar legendOpts = chart.options.legend;\n\t\t\tvar legend = chart.legend;\n\n\t\t\tif (legendOpts) {\n\t\t\t\thelpers.mergeIf(legendOpts, defaults.global.legend);\n\n\t\t\t\tif (legend) {\n\t\t\t\t\tlayout.configure(chart, legend, legendOpts);\n\t\t\t\t\tlegend.options = legendOpts;\n\t\t\t\t} else {\n\t\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t\t}\n\t\t\t} else if (legend) {\n\t\t\t\tlayout.removeBox(chart, legend);\n\t\t\t\tdelete chart.legend;\n\t\t\t}\n\t\t},\n\n\t\tafterEvent: function(chart, e) {\n\t\t\tvar legend = chart.legend;\n\t\t\tif (legend) {\n\t\t\t\tlegend.handleEvent(e);\n\t\t\t}\n\t\t}\n\t};\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\ttitle: {\n\t\tdisplay: false,\n\t\tfontStyle: 'bold',\n\t\tfullWidth: true,\n\t\tlineHeight: 1.2,\n\t\tpadding: 10,\n\t\tposition: 'top',\n\t\ttext: '',\n\t\tweight: 2000 // by default greater than legend (1000) to be above\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tvar layout = Chart.layoutService;\n\tvar noop = helpers.noop;\n\n\tChart.Title = Element.extend({\n\t\tinitialize: function(config) {\n\t\t\tvar me = this;\n\t\t\thelpers.extend(me, config);\n\n\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\tme.legendHitBoxes = [];\n\t\t},\n\n\t\t// These methods are ordered by lifecycle. Utilities then follow.\n\n\t\tbeforeUpdate: noop,\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = margins;\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\t\t\t// Labels\n\t\t\tme.beforeBuildLabels();\n\t\t\tme.buildLabels();\n\t\t\tme.afterBuildLabels();\n\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\n\t\t},\n\t\tafterUpdate: noop,\n\n\t\t//\n\n\t\tbeforeSetDimensions: noop,\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\n\t\t\t// Reset minSize\n\t\t\tme.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\t\t},\n\t\tafterSetDimensions: noop,\n\n\t\t//\n\n\t\tbeforeBuildLabels: noop,\n\t\tbuildLabels: noop,\n\t\tafterBuildLabels: noop,\n\n\t\t//\n\n\t\tbeforeFit: noop,\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar opts = me.options;\n\t\t\tvar display = opts.display;\n\t\t\tvar fontSize = valueOrDefault(opts.fontSize, defaults.global.defaultFontSize);\n\t\t\tvar minSize = me.minSize;\n\t\t\tvar lineCount = helpers.isArray(opts.text) ? opts.text.length : 1;\n\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\tvar textSize = display ? (lineCount * lineHeight) + (opts.padding * 2) : 0;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\tminSize.height = textSize;\n\t\t\t} else {\n\t\t\t\tminSize.width = textSize;\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\n\t\t},\n\t\tafterFit: noop,\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\tvar pos = this.options.position;\n\t\t\treturn pos === 'top' || pos === 'bottom';\n\t\t},\n\n\t\t// Actually draw the title block on the canvas\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar ctx = me.ctx;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar opts = me.options;\n\t\t\tvar globalDefaults = defaults.global;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\tvar titleFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\t\tvar offset = lineHeight / 2 + opts.padding;\n\t\t\t\tvar rotation = 0;\n\t\t\t\tvar top = me.top;\n\t\t\t\tvar left = me.left;\n\t\t\t\tvar bottom = me.bottom;\n\t\t\t\tvar right = me.right;\n\t\t\t\tvar maxWidth, titleX, titleY;\n\n\t\t\t\tctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour\n\t\t\t\tctx.font = titleFont;\n\n\t\t\t\t// Horizontal\n\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\n\t\t\t\t\ttitleY = top + offset;\n\t\t\t\t\tmaxWidth = right - left;\n\t\t\t\t} else {\n\t\t\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\n\t\t\t\t\ttitleY = top + ((bottom - top) / 2);\n\t\t\t\t\tmaxWidth = bottom - top;\n\t\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(titleX, titleY);\n\t\t\t\tctx.rotate(rotation);\n\t\t\t\tctx.textAlign = 'center';\n\t\t\t\tctx.textBaseline = 'middle';\n\n\t\t\t\tvar text = opts.text;\n\t\t\t\tif (helpers.isArray(text)) {\n\t\t\t\t\tvar y = 0;\n\t\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\n\t\t\t\t\t\ty += lineHeight;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tctx.fillText(text, 0, 0, maxWidth);\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction createNewTitleBlockAndAttach(chart, titleOpts) {\n\t\tvar title = new Chart.Title({\n\t\t\tctx: chart.ctx,\n\t\t\toptions: titleOpts,\n\t\t\tchart: chart\n\t\t});\n\n\t\tlayout.configure(chart, title, titleOpts);\n\t\tlayout.addBox(chart, title);\n\t\tchart.titleBlock = title;\n\t}\n\n\treturn {\n\t\tid: 'title',\n\n\t\tbeforeInit: function(chart) {\n\t\t\tvar titleOpts = chart.options.title;\n\n\t\t\tif (titleOpts) {\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t}\n\t\t},\n\n\t\tbeforeUpdate: function(chart) {\n\t\t\tvar titleOpts = chart.options.title;\n\t\t\tvar titleBlock = chart.titleBlock;\n\n\t\t\tif (titleOpts) {\n\t\t\t\thelpers.mergeIf(titleOpts, defaults.global.title);\n\n\t\t\t\tif (titleBlock) {\n\t\t\t\t\tlayout.configure(chart, titleBlock, titleOpts);\n\t\t\t\t\ttitleBlock.options = titleOpts;\n\t\t\t\t} else {\n\t\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t\t}\n\t\t\t} else if (titleBlock) {\n\t\t\t\tChart.layoutService.removeBox(chart, titleBlock);\n\t\t\t\tdelete chart.titleBlock;\n\t\t\t}\n\t\t}\n\t};\n};\n"],"sourceRoot":""}