{"version":3,"sources":["../node_modules/react-chartjs-2/es/index.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/keyBy.js","../node_modules/lodash/_createAggregator.js","../node_modules/lodash/_arrayAggregator.js","../node_modules/lodash/_baseAggregator.js","../node_modules/react-bootstrap/es/Col.js","../node_modules/react-bootstrap/es/Row.js","../node_modules/chart.js/dist/Chart.js","../node_modules/process/browser.js"],"names":["process","__webpack_require__","d","__webpack_exports__","Doughnut","Pie","Line","Bar","HorizontalBar","Radar","react__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_0___default","n","prop_types__WEBPACK_IMPORTED_MODULE_1__","prop_types__WEBPACK_IMPORTED_MODULE_1___default","chart_js__WEBPACK_IMPORTED_MODULE_2__","chart_js__WEBPACK_IMPORTED_MODULE_2___default","lodash_isEqual__WEBPACK_IMPORTED_MODULE_3__","lodash_isEqual__WEBPACK_IMPORTED_MODULE_3___default","lodash_keyBy__WEBPACK_IMPORTED_MODULE_4__","lodash_keyBy__WEBPACK_IMPORTED_MODULE_4___default","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_objectWithoutProperties","obj","keys","indexOf","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","NODE_ENV","PUBLIC_URL","ChartComponent","_React$Component","_temp","_this","this","_len","args","Array","_key","apply","concat","handleOnClick","event","chartInstance","_this$props","props","getDatasetAtEvent","getElementAtEvent","getElementsAtEvent","onElementsClick","ref","element","componentWillMount","undefined","componentDidMount","renderChart","componentDidUpdate","redraw","destroyChart","updateChart","shouldComponentUpdate","nextProps","_props","type","options","plugins","legend","height","width","nextData","transformDataProp","shadowDataProp","componentWillUnmount","data","memoizeDataProps","datasets","map","set","saveCurrentDatasets","checkDatasets","isDev","usingCustomKeyProvider","datasetKeyProvider","getLabelAsKey","multipleDatasets","shouldWarn","forEach","dataset","label","console","error","getCurrentDatasets","config","_this2","_this3","a","helpers","configMerge","currentDatasets","nextDatasets","currentDatasetsIndexed","next","current","splice","point","pid","otherProps","rest","update","_props2","node","defaultProps","values","destroy","render","_props3","id","createElement","onClick","Component","propTypes","oneOfType","object","func","isRequired","number","arrayOf","bool","propName","componentName","controllers","Error","display","position","_React$Component2","_this5","_ref","_React$Component3","_this7","_ref2","_React$Component4","_this9","_ref3","_React$Component5","_this11","_ref4","_React$Component6","_this13","_ref5","_React$Component7","_this15","_ref6","_React$Component8","Polar","_this17","_ref7","_React$Component9","Bubble","_this19","_ref8","_React$Component10","Scatter","_this21","_ref9","defaults","baseIsEqual","module","exports","other","baseAssignValue","keyBy","createAggregator","result","arrayAggregator","baseAggregator","baseIteratee","isArray","setter","initializer","collection","iteratee","accumulator","array","index","baseEach","_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__","_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__","classnames__WEBPACK_IMPORTED_MODULE_2__","classnames__WEBPACK_IMPORTED_MODULE_2___default","react__WEBPACK_IMPORTED_MODULE_3__","react__WEBPACK_IMPORTED_MODULE_3___default","_ThemeProvider__WEBPACK_IMPORTED_MODULE_4__","DEVICE_SIZES","Col","forwardRef","bsPrefix","className","_ref$as","as","prefix","spans","classes","brkPoint","span","offset","order","propValue","_propValue$span","infix","push","displayName","_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__","classnames__WEBPACK_IMPORTED_MODULE_3__","classnames__WEBPACK_IMPORTED_MODULE_3___default","react__WEBPACK_IMPORTED_MODULE_4__","react__WEBPACK_IMPORTED_MODULE_4___default","_ThemeProvider__WEBPACK_IMPORTED_MODULE_5__","Row","noGutters","_this$props$as","moment","conversions","rgb2hsl","rgb2hsv","rgb2hwb","rgb2cmyk","rgb2keyword","rgb2xyz","rgb2lab","rgb2lch","lab2lch","hsl2rgb","hsl2hsv","hsl","h","s","l","hsl2hwb","hsl2cmyk","hsl2keyword","hsv2rgb","hsv2hsl","hsv","sl","v","hsv2hwb","hsv2cmyk","hsv2keyword","hwb2rgb","hwb2hsl","hwb2hsv","hwb2cmyk","hwb2keyword","cmyk2rgb","cmyk2hsl","cmyk2hsv","cmyk2hwb","cmyk2keyword","keyword2rgb","keyword2hsl","keyword2hsv","keyword2hwb","keyword2cmyk","keyword2lab","keyword2xyz","xyz2rgb","xyz2lab","xyz2lch","lab2xyz","lab2rgb","lch2lab","lch2xyz","lch2rgb","rgb","r","g","b","min","Math","max","delta","w","k","reverseKeywords","JSON","stringify","pow","x","y","z","xyz","t1","t2","t3","val","hi","floor","f","p","q","t","hwb","wh","bl","ratio","cmyk","c","m","lab","y2","hr","atan2","PI","sqrt","lch","cos","sin","keyword","cssKeywords","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","convert","Converter","arg","slice","pair","exec","from","to","round","convs","routeSpace","space","getValues","setValues","vals","fspace","colorConvert","colorName","colorString","getRgba","getHsla","getRgb","string","rgba","getHsl","hsla","getHwb","getAlpha","hexString","hexDouble","rgbString","alpha","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","reverseNames","match","hexAlpha","parseInt","parseFloat","scale","isNaN","num","str","toString","toUpperCase","name","Color","valid","lightness","whiteness","isValid","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","hue","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","level","contrastRatio","dark","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","w1","w2","toJSON","clone","prop","spaces","maxes","charAt","capped","chans","sname","svalues","window","chartjsColor","noop","uid","isNullOrUndef","substr","isObject","isFinite","_isFinite","_x","Number","valueOrDefault","defaultValue","valueAtIndexOrDefault","callback","fn","thisArg","each","loopable","reverse","len","arrayEquals","a0","a1","ilen","v0","v1","klen","_merger","tval","sval","merge","_mergerIf","mergeIf","sources","merger","extend","setFn","inherits","extensions","me","ChartElement","Surrogate","__super__","helpers_core","callCallback","item","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","clear","chart","ctx","clearRect","roundedRect","radius","left","top","right","bottom","moveTo","arc","closePath","rect","drawPoint","style","rotation","xOffset","yOffset","size","cornerRadius","rad","beginPath","lineTo","SQRT1_2","fill","stroke","drawImage","_isPointInArea","area","clipArea","save","clip","unclipArea","restore","previous","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","scope","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","helpers_options","toLineHeight","matches","toPadding","_parseFont","globalDefaults","global","fontSize","font","family","fontFamily","lineHeight","fontStyle","toFontString","resolve","inputs","context","helpers$1","easing","canvas","Element","configuration","initialize","hidden","pivot","_view","_model","_start","transition","ease","model","start","view","actual","origin","c0","c1","interpolate","tooltipPosition","hasValue","isNumber","core_element","exports$2","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","defineProperty","get","animation","duration","onProgress","onComplete","core_animations","animations","request","addAnimation","lazy","startTime","Date","now","animating","requestAnimationFrame","cancelAnimation","findIndex","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","DatasetController","datasetIndex","datasetElementType","dataElementType","linkScales","addElements","updateIndex","meta","getMeta","getDataset","xAxisID","scales","xAxes","yAxisID","yAxes","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","reset","_data","createMetaDataset","_chart","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","updateElement","buildOrUpdateElements","isExtensible","method","base","res","resyncElements","easingValue","elements","draw","removeHoverStyle","$previousStyle","setHoverStyle","custom","getHoverColor","backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","numMeta","numData","insertElements","count","onDataPush","onDataPop","pop","onDataShift","shift","onDataSplice","onDataUnshift","core_datasetController","borderAlign","element_arc","inLabelRange","mouseX","vm","hoverRadius","inRange","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","distance","startAngle","endAngle","betweenAngles","withinRadius","innerRadius","outerRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","angleMargin","sA","eA","pixelMargin","fillStyle","lineWidth","lineJoin","strokeStyle","valueOrDefault$1","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","lineCap","setLineDash","lineDashOffset","previousItem","skip","valueOrDefault$2","defaultColor$1","xRange","abs","hitRadius","pointStyle","element_point","mouseY","inXRange","inYRange","padding","chartArea","defaultColor$2","isVertical","getBarBounds","x1","x2","y1","half","swap","orig","v2","parseBorderWidth","maxW","maxH","edge","borderSkipped","horizontal","parseBorderSkipped","_inRange","skipX","skipY","bounds","rectangle","element_rectangle","rects","border","outer","inner","boundingRects","fillRect","Arc","Point","Rectangle","resolve$1","hover","mode","categoryPercentage","barPercentage","gridLines","offsetGridLines","controller_bar","stack","bar","_ruler","getRuler","_resolveElementOptions","_xScale","_yScale","datasetLabel","labels","_updateElementGeometry","vscale","getBasePixel","isHorizontal","ruler","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","head","center","_getStacks","last","stacked","stacks","isDatasetVisible","getStackCount","getStackIndex","stackCount","end","pixels","getPixelForValue","barThickness","prev","curr","ticks","getTicks","getPixelForTick","computeMinSampleSize","imeta","ivalue","getRightValue","minBarLength","controller","range","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","maxBarThickness","Infinity","dataIndex","valueOrDefault$3","resolve$2","tooltips","callbacks","title","dataPoint","xLabel","yLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","NaN","_options","resolve$3","valueOrDefault$4","animateRotate","animateScale","legendCallback","text","join","generateLabels","ds","arcOpts","bw","e","legendItem","cutoutPercentage","circumference","tooltipItem","dataLabel","controller_doughnut","getRingIndex","ringIndex","j","opts","availableWidth","availableHeight","minSize","arcs","chartWeight","_getRingWeight","contains0","contains90","contains180","contains270","cutout","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","offsetX","offsetY","total","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","axis","controller_horizontalBar","valueOrDefault$5","resolve$4","isPointInArea","lineEnabled","showLine","controller_line","lineTension","_scale","_resolveLineOptions","updateBezierControlPoints","lineModel","_resolvePointOptions","calculatePointY","ELEMENT_OPTIONS","elementOptions","dsMeta","sumPos","sumNeg","stackedRightValue","rightValue","controlPoints","capControlPoint","pt","filter","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","halfBorderWidth","resolve$5","angleLines","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$6","resolve$6","controller_radar","pointPosition","getPointPositionForValue","bubble","horizontalBar","polarArea","pie","radar","scatter","getRelativePosition","native","parseVisibleItems","handler","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","items","core_interaction","modes","single","x-axis","nearest","intersectsItem","filterByPosition","where","sortByWeight","_tmpIndex_","sort","addSizeByPosition","boxes","box","layout","core_layouts","addBox","fullWidth","removeBox","layoutItem","configure","layoutOptions","leftPadding","rightPadding","topPadding","bottomPadding","leftBoxes","rightBoxes","topBoxes","bottomBoxes","chartAreaBoxes","maxPadding","verticalBoxes","horizontalBoxes","outerBoxes","chartWidth","chartHeight","chartAreaWidth","verticalBoxWidth","maxChartAreaWidth","maxChartAreaHeight","outerBoxSizes","minBoxSizes","getPadding","boxPadding","findMaxPadding","fitBox","minBoxSize","findNextWhere","scaleMargin","leftPaddingAddition","topPaddingAddition","newMaxChartAreaHeight","newMaxChartAreaWidth","placeBox","minBox","stylesheet","freeze","default","EXPANDO_KEY","CSS_SIZE_MONITOR","CSS_PREFIX","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","property","getStyle","eventListenerOptions","supports","addEventListener","passive","addListener","removeListener","removeEventListener","createEvent","nativeEvent","createDiv","cls","el","document","addResizeListener","expando","resizer","expand","shrink","appendChild","_reset","scrollLeft","scrollTop","onScroll","bind","createResizer","ticking","throttled","container","maintainAspectRatio","parentNode","clientWidth","proxy","renderProxy","animationName","reflow","offsetParent","classList","add","watchForRender","insertBefore","firstChild","removeResizeListener","remove","unwatchForRender","removeChild","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","_loaded","platform","css","_style","setAttribute","getElementsByTagName","createTextNode","injectCSS","acquireContext","getElementById","getContext","renderHeight","getAttribute","renderWidth","initial","displayWidth","aspectRatio","displayHeight","initCanvas","releaseContext","removeAttribute","proxies","pos","fromNativeEvent","addEvent","removeEvent","implementation","core_plugins","_plugins","_cacheId","register","plugin","unregister","idx","getAll","notify","hook","descriptor","params","descriptors","cache","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$7","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","activeElement","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","positioners","average","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","String","split","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getAlignedX","align","getBeforeAfterBodyLines","exports$3","_lastActive","getTitle","lines","getBeforeBody","getBody","bodyItems","bodyItem","before","after","getAfterBody","getFooter","changed","existingModel","active","_active","alignment","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","body","dataPoints","tooltip","combinedBodyLength","reduce","titleLineCount","footerLineCount","widthPadding","maxLineWidth","measureText","fontString","getTooltipSize","lf","rf","olf","orf","yf","midX","midY","determineAlignment","paddingAndSize","radiusAndPadding","getBackgroundPoint","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","tmp","drawTitle","textAlign","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","handleEvent","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$8","mergeScaleConfig","slen","mergeConfig","positionIsHorizontal","events","onHover","animationDuration","responsive","responsiveAnimationDuration","Chart","construct","initConfig","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","ensureScalesHaveIDs","buildOrUpdateScales","initToolTip","stop","silent","newWidth","getMaximumWidth","newHeight","getMaximumHeight","newSize","onResize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","updated","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","hasUpdated","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","newOptions","updateConfig","updateLayout","updateDatasets","lastActive","_bufferedRequest","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","drawDatasets","_drawTooltip","drawDataset","getElementsAtXAxis","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","hoverOptions","core_controller","abstract","DateAdapter","Controller","types","scaleMerge","formats","parse","format","diff","startOf","endOf","_create","override","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","log10","tickString","maxTick","logTick","toExponential","numDecimal","toFixed","logarithmic","remain","valueOrDefault$9","labelsFromTicks","computeTextSize","tick","longestText","color","drawBorder","drawOnChartArea","drawTicks","tickMarkLength","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","minor","major","core_scale","paddingLeft","paddingTop","paddingRight","paddingBottom","_ticks","beforeUpdate","maxWidth","maxHeight","margins","_maxLabelLines","longestLabelWidth","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","toRadians","scaleLabelOpts","gridLineOpts","_isVisible","parseFont","isFullWidth","scaleLabelFont","scaleLabelPadding","deltaHeight","largestTextWidth","tallestLabelHeightInLines","numberOfLabelLines","lineSpace","tickPadding","sinRotation","labelHeight","firstLabelWidth","lastLabelWidth","offsetLeft","offsetRight","handleMargins","rawValue","getValueForPixel","innerWidth","pixel","finalVal","innerHeight","decimal","valueOffset","getBaseValue","_autoSkip","optionTicks","tickCount","skipRatio","maxTicks","maxTicksLimit","ticksLength","_tickSize","axisLength","PaddingBottom","rot","borderValue","tickStart","tickEnd","optionMajorTicks","isRotated","isMirrored","tickFontColor","fontColor","majorTickFontColor","majorTickFont","tl","scaleLabelFontColor","labelRotationRadians","itemsToDraw","axisWidth","alignPixel","_alignPixel","lineColor","tx1","ty1","tx2","ty2","labelX","labelY","textOffset","zeroLineIndex","lineValue","getPixelForGridLine","labelYOffset","labelXOffset","glWidth","glColor","glBorderDash","glBorderDashOffset","itemToDraw","translate","scaleLabelX","scaleLabelY","halfLineHeight","isLeft","firstLineWidth","lastLineWidth","scale_category","getLabels","xLabels","yLabels","minIndex","maxIndex","valueCategory","offsetAmt","valueWidth","widthOffset","valueHeight","heightOffset","horz","valueDimension","_defaults","scale_linearbase","handleTickRangeOptions","minSign","sign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","stepSize","ceil","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","precision","fixedStepSize","generationOptions","dataRange","factor","niceMin","niceMax","numSpaces","unit","maxNumSpaces","rmin","rmax","spacing","niceNum","_decimalPlaces","almostWhole","almostEquals","generateTicks","ticksAsNumbers","defaultConfig$1","scale_linear","IDMatches","hasStacks","valuesPerStack","positiveValues","negativeValues","relativePoints","valuesForType","minVal","maxVal","innerDimension","_defaults$1","valueOrDefault$a","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","minNotZero","exp","significand","tickVal","endExp","endSignificand","lastTick","generateTicks$1","tickValues","_getFirstTickValue","firstTickValue","_defaults$2","valueOrDefault$b","valueAtIndexOrDefault$1","resolve$7","defaultConfig$3","animate","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getValueCount","getTickBackdropHeight","determineLimits","getTextAlignForAngle","adjustPointPositionForLabelHeight","textSize","numberOrZero","param","scale_radialLinear","drawingArea","NEGATIVE_INFINITY","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","getIndexAngle","toDegrees","hLimits","vLimits","setReductions","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","startAngleRadians","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","pointLabelOpts","tickBackdropHeight","outerDistance","outerPosition","extra","pointLabelPosition","pointLabelFontColor","drawPointLabels","yCenterOffset","drawRadiusLine","_defaults$3","valueOrDefault$c","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","interpolate$1","table","skey","tkey","mid","i0","i1","lo","lookup","toTimestamp","input","adapter","_adapter","time","parser","determineMajorUnit","generate","capacity","timeOpts","minUnit","interval","determineUnitForAutoTicks","unitStepSize","weekday","isoWeekday","majorTicksEnabled","first","milliseconds","determineStepSize","scale_time","adapters","date","warn","displayFormats","timestamp","timestamps","dataLabels","_horizontal","_table","_timestamps","getLabelCapacity","_unit","determineUnitForFormatting","_majorUnit","distribution","buildLookupTable","_offsets","computeOffsets","majorUnit","ticksFromTimestamps","tooltipFormat","datetime","tickFormatFunction","minorFormat","majorFormat","majorTime","majorTickOpts","formatter","getPixelForOffset","isReverse","getLabelWidth","ticksOpts","tickLabelWidth","tickFontSize","exampleTime","exampleLabel","_defaults$4","displayFormat","category","radialLinear","FORMATS","_id","valueOf","_format","amount","filler","propagate","mappers","visible","boundary","decodeFill","computeBoundary","scaleBottom","scaleTop","scaleZero","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","plugin_filler","afterDatasetsUpdate","$filler","mapper","beforeDatasetDraw","loop","p0","p1","d0","d1","doFill","noop$1","valueOrDefault$d","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","lineDefault","legendWidth","cursor","textWidth","SQRT2","drawLegendBox","halfFontSize","xLeft","yMiddle","_getLegendItemAt","hitBox","lh","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","lineCount","fontOpts","titleX","titleY","createNewTitleBlockAndAttach","titleOpts","titleBlock","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","defaultView","_getParentNode","constrainedNode","getComputedStyle","constrainedContainer","hasCNode","hasCContainer","infinity","filterCallback","filtered","arrayToSearch","startIndex","currentItem","findPreviousWhere","epsilon","rounded","exponent","log","LOG10E","powerOf10","isPowerOf10","radians","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","evt","originalEvent","srcElement","boundingRect","getBoundingClientRect","touches","clientX","clientY","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","parent","host","cw","clientHeight","ch","currentStyle","getPropertyValue","forceRatio","pixelRatio","pixelSize","arrayOfThings","gc","garbageCollect","longest","thing","nestedThing","gcLen","numberOfLines","CanvasGradient","colorValue","CanvasPattern","core_helpers","_adapters","Animation","animationService","Interaction","layouts","Scale","scaleService","Ticks","Tooltip","src","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","toLowerCase","factory","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","nextTick","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask"],"mappings":"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","file":"static/js/50.c035070f.chunk.js","sourcesContent":["var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Chart from 'chart.js';\nimport isEqual from 'lodash/isEqual';\nimport keyBy from 'lodash/keyBy';\nvar NODE_ENV = typeof process !== 'undefined' && process.env && process.env.NODE_ENV;\n\nvar ChartComponent = function (_React$Component) {\n  _inherits(ChartComponent, _React$Component);\n\n  function ChartComponent() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ChartComponent);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleOnClick = function (event) {\n      var instance = _this.chartInstance;\n      var _this$props = _this.props,\n          getDatasetAtEvent = _this$props.getDatasetAtEvent,\n          getElementAtEvent = _this$props.getElementAtEvent,\n          getElementsAtEvent = _this$props.getElementsAtEvent,\n          onElementsClick = _this$props.onElementsClick;\n      getDatasetAtEvent && getDatasetAtEvent(instance.getDatasetAtEvent(event), event);\n      getElementAtEvent && getElementAtEvent(instance.getElementAtEvent(event), event);\n      getElementsAtEvent && getElementsAtEvent(instance.getElementsAtEvent(event), event);\n      onElementsClick && onElementsClick(instance.getElementsAtEvent(event), event); // Backward compatibility\n    }, _this.ref = function (element) {\n      _this.element = element;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  ChartComponent.prototype.componentWillMount = function componentWillMount() {\n    this.chartInstance = undefined;\n  };\n\n  ChartComponent.prototype.componentDidMount = function componentDidMount() {\n    this.renderChart();\n  };\n\n  ChartComponent.prototype.componentDidUpdate = function componentDidUpdate() {\n    if (this.props.redraw) {\n      this.destroyChart();\n      this.renderChart();\n      return;\n    }\n\n    this.updateChart();\n  };\n\n  ChartComponent.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n    var _props = this.props,\n        redraw = _props.redraw,\n        type = _props.type,\n        options = _props.options,\n        plugins = _props.plugins,\n        legend = _props.legend,\n        height = _props.height,\n        width = _props.width;\n\n    if (nextProps.redraw === true) {\n      return true;\n    }\n\n    if (height !== nextProps.height || width !== nextProps.width) {\n      return true;\n    }\n\n    if (type !== nextProps.type) {\n      return true;\n    }\n\n    if (!isEqual(legend, nextProps.legend)) {\n      return true;\n    }\n\n    if (!isEqual(options, nextProps.options)) {\n      return true;\n    }\n\n    var nextData = this.transformDataProp(nextProps);\n\n    if (!isEqual(this.shadowDataProp, nextData)) {\n      return true;\n    }\n\n    return !isEqual(plugins, nextProps.plugins);\n  };\n\n  ChartComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.destroyChart();\n  };\n\n  ChartComponent.prototype.transformDataProp = function transformDataProp(props) {\n    var data = props.data;\n\n    if (typeof data == 'function') {\n      var node = this.element;\n      return data(node);\n    } else {\n      return data;\n    }\n  }; // Chart.js directly mutates the data.dataset objects by adding _meta proprerty\n  // this makes impossible to compare the current and next data changes\n  // therefore we memoize the data prop while sending a fake to Chart.js for mutation.\n  // see https://github.com/chartjs/Chart.js/blob/master/src/core/core.controller.js#L615-L617\n\n\n  ChartComponent.prototype.memoizeDataProps = function memoizeDataProps() {\n    if (!this.props.data) {\n      return;\n    }\n\n    var data = this.transformDataProp(this.props);\n    this.shadowDataProp = _extends({}, data, {\n      datasets: data.datasets && data.datasets.map(function (set) {\n        return _extends({}, set);\n      })\n    });\n    this.saveCurrentDatasets(); // to remove the dataset metadata from this chart when the chart is destroyed\n\n    return data;\n  };\n\n  ChartComponent.prototype.checkDatasets = function checkDatasets(datasets) {\n    var isDev = NODE_ENV !== 'production' && NODE_ENV !== 'prod';\n    var usingCustomKeyProvider = this.props.datasetKeyProvider !== ChartComponent.getLabelAsKey;\n    var multipleDatasets = datasets.length > 1;\n\n    if (isDev && multipleDatasets && !usingCustomKeyProvider) {\n      var shouldWarn = false;\n      datasets.forEach(function (dataset) {\n        if (!dataset.label) {\n          shouldWarn = true;\n        }\n      });\n\n      if (shouldWarn) {\n        console.error('[react-chartjs-2] Warning: Each dataset needs a unique key. By default, the \"label\" property on each dataset is used. Alternatively, you may provide a \"datasetKeyProvider\" as a prop that returns a unique key.');\n      }\n    }\n  };\n\n  ChartComponent.prototype.getCurrentDatasets = function getCurrentDatasets() {\n    return this.chartInstance && this.chartInstance.config.data && this.chartInstance.config.data.datasets || [];\n  };\n\n  ChartComponent.prototype.saveCurrentDatasets = function saveCurrentDatasets() {\n    var _this2 = this;\n\n    this.datasets = this.datasets || {};\n    var currentDatasets = this.getCurrentDatasets();\n    currentDatasets.forEach(function (d) {\n      _this2.datasets[_this2.props.datasetKeyProvider(d)] = d;\n    });\n  };\n\n  ChartComponent.prototype.updateChart = function updateChart() {\n    var _this3 = this;\n\n    var options = this.props.options;\n    var data = this.memoizeDataProps(this.props);\n    if (!this.chartInstance) return;\n\n    if (options) {\n      this.chartInstance.options = Chart.helpers.configMerge(this.chartInstance.options, options);\n    } // Pipe datasets to chart instance datasets enabling\n    // seamless transitions\n\n\n    var currentDatasets = this.getCurrentDatasets();\n    var nextDatasets = data.datasets || [];\n    this.checkDatasets(currentDatasets);\n    var currentDatasetsIndexed = keyBy(currentDatasets, this.props.datasetKeyProvider); // We can safely replace the dataset array, as long as we retain the _meta property\n    // on each dataset.\n\n    this.chartInstance.config.data.datasets = nextDatasets.map(function (next) {\n      var current = currentDatasetsIndexed[_this3.props.datasetKeyProvider(next)];\n\n      if (current && current.type === next.type) {\n        // The data array must be edited in place. As chart.js adds listeners to it.\n        current.data.splice(next.data.length);\n        next.data.forEach(function (point, pid) {\n          current.data[pid] = next.data[pid];\n        });\n\n        var _data = next.data,\n            otherProps = _objectWithoutProperties(next, ['data']); // Merge properties. Notice a weakness here. If a property is removed\n        // from next, it will be retained by current and never disappears.\n        // Workaround is to set value to null or undefined in next.\n\n\n        return _extends({}, current, otherProps);\n      } else {\n        return next;\n      }\n    });\n\n    var datasets = data.datasets,\n        rest = _objectWithoutProperties(data, ['datasets']);\n\n    this.chartInstance.config.data = _extends({}, this.chartInstance.config.data, rest);\n    this.chartInstance.update();\n  };\n\n  ChartComponent.prototype.renderChart = function renderChart() {\n    var _props2 = this.props,\n        options = _props2.options,\n        legend = _props2.legend,\n        type = _props2.type,\n        plugins = _props2.plugins;\n    var node = this.element;\n    var data = this.memoizeDataProps();\n\n    if (typeof legend !== 'undefined' && !isEqual(ChartComponent.defaultProps.legend, legend)) {\n      options.legend = legend;\n    }\n\n    this.chartInstance = new Chart(node, {\n      type: type,\n      data: data,\n      options: options,\n      plugins: plugins\n    });\n  };\n\n  ChartComponent.prototype.destroyChart = function destroyChart() {\n    // Put all of the datasets that have existed in the chart back on the chart\n    // so that the metadata associated with this chart get destroyed.\n    // This allows the datasets to be used in another chart. This can happen,\n    // for example, in a tabbed UI where the chart gets created each time the\n    // tab gets switched to the chart and uses the same data).\n    this.saveCurrentDatasets();\n    var datasets = Object.values(this.datasets);\n    this.chartInstance.config.data.datasets = datasets;\n    this.chartInstance.destroy();\n  };\n\n  ChartComponent.prototype.render = function render() {\n    var _props3 = this.props,\n        height = _props3.height,\n        width = _props3.width,\n        id = _props3.id;\n    return React.createElement('canvas', {\n      ref: this.ref,\n      height: height,\n      width: width,\n      id: id,\n      onClick: this.handleOnClick\n    });\n  };\n\n  return ChartComponent;\n}(React.Component);\n\nChartComponent.getLabelAsKey = function (d) {\n  return d.label;\n};\n\nChartComponent.propTypes = {\n  data: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired,\n  getDatasetAtEvent: PropTypes.func,\n  getElementAtEvent: PropTypes.func,\n  getElementsAtEvent: PropTypes.func,\n  height: PropTypes.number,\n  legend: PropTypes.object,\n  onElementsClick: PropTypes.func,\n  options: PropTypes.object,\n  plugins: PropTypes.arrayOf(PropTypes.object),\n  redraw: PropTypes.bool,\n  type: function type(props, propName, componentName) {\n    if (!Chart.controllers[props[propName]]) {\n      return new Error('Invalid chart type `' + props[propName] + '` supplied to' + ' `' + componentName + '`.');\n    }\n  },\n  width: PropTypes.number,\n  datasetKeyProvider: PropTypes.func\n};\nChartComponent.defaultProps = {\n  legend: {\n    display: true,\n    position: 'bottom'\n  },\n  type: 'doughnut',\n  height: 150,\n  width: 300,\n  redraw: false,\n  options: {},\n  datasetKeyProvider: ChartComponent.getLabelAsKey\n};\nexport default ChartComponent;\nexport var Doughnut = function (_React$Component2) {\n  _inherits(Doughnut, _React$Component2);\n\n  function Doughnut() {\n    _classCallCheck(this, Doughnut);\n\n    return _possibleConstructorReturn(this, _React$Component2.apply(this, arguments));\n  }\n\n  Doughnut.prototype.render = function render() {\n    var _this5 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref) {\n        return _this5.chartInstance = _ref && _ref.chartInstance;\n      },\n      type: 'doughnut'\n    }));\n  };\n\n  return Doughnut;\n}(React.Component);\nexport var Pie = function (_React$Component3) {\n  _inherits(Pie, _React$Component3);\n\n  function Pie() {\n    _classCallCheck(this, Pie);\n\n    return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n  }\n\n  Pie.prototype.render = function render() {\n    var _this7 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref2) {\n        return _this7.chartInstance = _ref2 && _ref2.chartInstance;\n      },\n      type: 'pie'\n    }));\n  };\n\n  return Pie;\n}(React.Component);\nexport var Line = function (_React$Component4) {\n  _inherits(Line, _React$Component4);\n\n  function Line() {\n    _classCallCheck(this, Line);\n\n    return _possibleConstructorReturn(this, _React$Component4.apply(this, arguments));\n  }\n\n  Line.prototype.render = function render() {\n    var _this9 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref3) {\n        return _this9.chartInstance = _ref3 && _ref3.chartInstance;\n      },\n      type: 'line'\n    }));\n  };\n\n  return Line;\n}(React.Component);\nexport var Bar = function (_React$Component5) {\n  _inherits(Bar, _React$Component5);\n\n  function Bar() {\n    _classCallCheck(this, Bar);\n\n    return _possibleConstructorReturn(this, _React$Component5.apply(this, arguments));\n  }\n\n  Bar.prototype.render = function render() {\n    var _this11 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref4) {\n        return _this11.chartInstance = _ref4 && _ref4.chartInstance;\n      },\n      type: 'bar'\n    }));\n  };\n\n  return Bar;\n}(React.Component);\nexport var HorizontalBar = function (_React$Component6) {\n  _inherits(HorizontalBar, _React$Component6);\n\n  function HorizontalBar() {\n    _classCallCheck(this, HorizontalBar);\n\n    return _possibleConstructorReturn(this, _React$Component6.apply(this, arguments));\n  }\n\n  HorizontalBar.prototype.render = function render() {\n    var _this13 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref5) {\n        return _this13.chartInstance = _ref5 && _ref5.chartInstance;\n      },\n      type: 'horizontalBar'\n    }));\n  };\n\n  return HorizontalBar;\n}(React.Component);\nexport var Radar = function (_React$Component7) {\n  _inherits(Radar, _React$Component7);\n\n  function Radar() {\n    _classCallCheck(this, Radar);\n\n    return _possibleConstructorReturn(this, _React$Component7.apply(this, arguments));\n  }\n\n  Radar.prototype.render = function render() {\n    var _this15 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref6) {\n        return _this15.chartInstance = _ref6 && _ref6.chartInstance;\n      },\n      type: 'radar'\n    }));\n  };\n\n  return Radar;\n}(React.Component);\nexport var Polar = function (_React$Component8) {\n  _inherits(Polar, _React$Component8);\n\n  function Polar() {\n    _classCallCheck(this, Polar);\n\n    return _possibleConstructorReturn(this, _React$Component8.apply(this, arguments));\n  }\n\n  Polar.prototype.render = function render() {\n    var _this17 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref7) {\n        return _this17.chartInstance = _ref7 && _ref7.chartInstance;\n      },\n      type: 'polarArea'\n    }));\n  };\n\n  return Polar;\n}(React.Component);\nexport var Bubble = function (_React$Component9) {\n  _inherits(Bubble, _React$Component9);\n\n  function Bubble() {\n    _classCallCheck(this, Bubble);\n\n    return _possibleConstructorReturn(this, _React$Component9.apply(this, arguments));\n  }\n\n  Bubble.prototype.render = function render() {\n    var _this19 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref8) {\n        return _this19.chartInstance = _ref8 && _ref8.chartInstance;\n      },\n      type: 'bubble'\n    }));\n  };\n\n  return Bubble;\n}(React.Component);\nexport var Scatter = function (_React$Component10) {\n  _inherits(Scatter, _React$Component10);\n\n  function Scatter() {\n    _classCallCheck(this, Scatter);\n\n    return _possibleConstructorReturn(this, _React$Component10.apply(this, arguments));\n  }\n\n  Scatter.prototype.render = function render() {\n    var _this21 = this;\n\n    return React.createElement(ChartComponent, _extends({}, this.props, {\n      ref: function ref(_ref9) {\n        return _this21.chartInstance = _ref9 && _ref9.chartInstance;\n      },\n      type: 'scatter'\n    }));\n  };\n\n  return Scatter;\n}(React.Component);\nexport var defaults = Chart.defaults;\nexport { Chart };","var baseIsEqual = require('./_baseIsEqual');\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\n\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;","var baseAssignValue = require('./_baseAssignValue'),\n    createAggregator = require('./_createAggregator');\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n *   { 'dir': 'left', 'code': 97 },\n *   { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n *   return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n\n\nvar keyBy = createAggregator(function (result, value, key) {\n  baseAssignValue(result, key, value);\n});\nmodule.exports = keyBy;","var arrayAggregator = require('./_arrayAggregator'),\n    baseAggregator = require('./_baseAggregator'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n\n\nfunction createAggregator(setter, initializer) {\n  return function (collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nmodule.exports = createAggregator;","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n\n  return accumulator;\n}\n\nmodule.exports = arrayAggregator;","var baseEach = require('./_baseEach');\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function (value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseAggregator;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport classNames from 'classnames';\nimport React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nvar DEVICE_SIZES = ['xl', 'lg', 'md', 'sm', 'xs'];\nvar Col = React.forwardRef( // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\nfunction (_ref, ref) {\n  var bsPrefix = _ref.bsPrefix,\n      className = _ref.className,\n      _ref$as = _ref.as,\n      Component = _ref$as === void 0 ? 'div' : _ref$as,\n      props = _objectWithoutPropertiesLoose(_ref, [\"bsPrefix\", \"className\", \"as\"]);\n\n  var prefix = useBootstrapPrefix(bsPrefix, 'col');\n  var spans = [];\n  var classes = [];\n  DEVICE_SIZES.forEach(function (brkPoint) {\n    var propValue = props[brkPoint];\n    delete props[brkPoint];\n    var span, offset, order;\n\n    if (propValue != null && typeof propValue === 'object') {\n      var _propValue$span = propValue.span;\n      span = _propValue$span === void 0 ? true : _propValue$span;\n      offset = propValue.offset;\n      order = propValue.order;\n    } else {\n      span = propValue;\n    }\n\n    var infix = brkPoint !== 'xs' ? \"-\" + brkPoint : '';\n    if (span != null) spans.push(span === true ? \"\" + prefix + infix : \"\" + prefix + infix + \"-\" + span);\n    if (order != null) classes.push(\"order\" + infix + \"-\" + order);\n    if (offset != null) classes.push(\"offset\" + infix + \"-\" + offset);\n  });\n\n  if (!spans.length) {\n    spans.push(prefix); // plain 'col'\n  }\n\n  return React.createElement(Component, _extends({}, props, {\n    ref: ref,\n    className: classNames.apply(void 0, [className].concat(spans, classes))\n  }));\n});\nCol.displayName = 'Col';\nexport default Col;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport classNames from 'classnames';\nimport React from 'react';\nimport { createBootstrapComponent } from './ThemeProvider';\n\nvar Row =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Row, _React$Component);\n\n  function Row() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Row.prototype;\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        bsPrefix = _this$props.bsPrefix,\n        noGutters = _this$props.noGutters,\n        _this$props$as = _this$props.as,\n        Component = _this$props$as === void 0 ? 'div' : _this$props$as,\n        className = _this$props.className,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"bsPrefix\", \"noGutters\", \"as\", \"className\"]);\n\n    return React.createElement(Component, _extends({}, props, {\n      className: classNames(className, bsPrefix, noGutters && 'no-gutters')\n    }));\n  };\n\n  return Row;\n}(React.Component);\n\nRow.defaultProps = {\n  noGutters: false\n};\nexport default createBootstrapComponent(Row, 'row');","/*!\n * Chart.js v2.8.0\n * https://www.chartjs.org\n * (c) 2019 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function () {\n    try {\n      return require('moment');\n    } catch (e) {}\n  }()) : typeof define === 'function' && define.amd ? define(['require'], function (require) {\n    return factory(function () {\n      try {\n        return require('moment');\n      } catch (e) {}\n    }());\n  }) : global.Chart = factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n  /* MIT license */\n\n  var conversions = {\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    hsl2rgb: hsl2rgb,\n    hsl2hsv: hsl2hsv,\n    hsl2hwb: hsl2hwb,\n    hsl2cmyk: hsl2cmyk,\n    hsl2keyword: hsl2keyword,\n    hsv2rgb: hsv2rgb,\n    hsv2hsl: hsv2hsl,\n    hsv2hwb: hsv2hwb,\n    hsv2cmyk: hsv2cmyk,\n    hsv2keyword: hsv2keyword,\n    hwb2rgb: hwb2rgb,\n    hwb2hsl: hwb2hsl,\n    hwb2hsv: hwb2hsv,\n    hwb2cmyk: hwb2cmyk,\n    hwb2keyword: hwb2keyword,\n    cmyk2rgb: cmyk2rgb,\n    cmyk2hsl: cmyk2hsl,\n    cmyk2hsv: cmyk2hsv,\n    cmyk2hwb: cmyk2hwb,\n    cmyk2keyword: cmyk2keyword,\n    keyword2rgb: keyword2rgb,\n    keyword2hsl: keyword2hsl,\n    keyword2hsv: keyword2hsv,\n    keyword2hwb: keyword2hwb,\n    keyword2cmyk: keyword2cmyk,\n    keyword2lab: keyword2lab,\n    keyword2xyz: keyword2xyz,\n    xyz2rgb: xyz2rgb,\n    xyz2lab: xyz2lab,\n    xyz2lch: xyz2lch,\n    lab2xyz: lab2xyz,\n    lab2rgb: lab2rgb,\n    lab2lch: lab2lch,\n    lch2lab: lch2lab,\n    lch2xyz: lch2xyz,\n    lch2rgb: lch2rgb\n  };\n\n  function 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,\n        s,\n        l;\n    if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n    h = Math.min(h * 60, 360);\n    if (h < 0) h += 360;\n    l = (min + max) / 2;\n    if (max == min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);\n    return [h, s * 100, l * 100];\n  }\n\n  function 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,\n        s,\n        v;\n    if (max == 0) s = 0;else s = delta / max * 1000 / 10;\n    if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n    h = Math.min(h * 60, 360);\n    if (h < 0) h += 360;\n    v = max / 255 * 1000 / 10;\n    return [h, s, v];\n  }\n\n  function 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    return [h, w * 100, b * 100];\n  }\n\n  function rgb2cmyk(rgb) {\n    var r = rgb[0] / 255,\n        g = rgb[1] / 255,\n        b = rgb[2] / 255,\n        c,\n        m,\n        y,\n        k;\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\n  function rgb2keyword(rgb) {\n    return reverseKeywords[JSON.stringify(rgb)];\n  }\n\n  function rgb2xyz(rgb) {\n    var r = rgb[0] / 255,\n        g = rgb[1] / 255,\n        b = rgb[2] / 255; // assume sRGB\n\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    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    return [x * 100, y * 100, z * 100];\n  }\n\n  function rgb2lab(rgb) {\n    var xyz = rgb2xyz(rgb),\n        x = xyz[0],\n        y = xyz[1],\n        z = xyz[2],\n        l,\n        a,\n        b;\n    x /= 95.047;\n    y /= 100;\n    z /= 108.883;\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    l = 116 * y - 16;\n    a = 500 * (x - y);\n    b = 200 * (y - z);\n    return [l, a, b];\n  }\n\n  function rgb2lch(args) {\n    return lab2lch(rgb2lab(args));\n  }\n\n  function hsl2rgb(hsl) {\n    var h = hsl[0] / 360,\n        s = hsl[1] / 100,\n        l = hsl[2] / 100,\n        t1,\n        t2,\n        t3,\n        rgb,\n        val;\n\n    if (s == 0) {\n      val = l * 255;\n      return [val, val, val];\n    }\n\n    if (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;\n    t1 = 2 * l - t2;\n    rgb = [0, 0, 0];\n\n    for (var i = 0; i < 3; i++) {\n      t3 = h + 1 / 3 * -(i - 1);\n      t3 < 0 && t3++;\n      t3 > 1 && t3--;\n      if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;\n      rgb[i] = val * 255;\n    }\n\n    return rgb;\n  }\n\n  function hsl2hsv(hsl) {\n    var h = hsl[0],\n        s = hsl[1] / 100,\n        l = hsl[2] / 100,\n        sv,\n        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\n  function hsl2hwb(args) {\n    return rgb2hwb(hsl2rgb(args));\n  }\n\n  function hsl2cmyk(args) {\n    return rgb2cmyk(hsl2rgb(args));\n  }\n\n  function hsl2keyword(args) {\n    return rgb2keyword(hsl2rgb(args));\n  }\n\n  function 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    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\n      case 1:\n        return [q, v, p];\n\n      case 2:\n        return [p, v, t];\n\n      case 3:\n        return [p, q, v];\n\n      case 4:\n        return [t, p, v];\n\n      case 5:\n        return [v, p, q];\n    }\n  }\n\n  function hsv2hsl(hsv) {\n    var h = hsv[0],\n        s = hsv[1] / 100,\n        v = hsv[2] / 100,\n        sl,\n        l;\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\n  function hsv2hwb(args) {\n    return rgb2hwb(hsv2rgb(args));\n  }\n\n  function hsv2cmyk(args) {\n    return rgb2cmyk(hsv2rgb(args));\n  }\n\n  function hsv2keyword(args) {\n    return rgb2keyword(hsv2rgb(args));\n  } // http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n\n\n  function hwb2rgb(hwb) {\n    var h = hwb[0] / 360,\n        wh = hwb[1] / 100,\n        bl = hwb[2] / 100,\n        ratio = wh + bl,\n        i,\n        v,\n        f,\n        n; // wh + bl cant be > 1\n\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\n    if ((i & 0x01) != 0) {\n      f = 1 - f;\n    }\n\n    n = wh + f * (v - wh); // linear interpolation\n\n    switch (i) {\n      default:\n      case 6:\n      case 0:\n        r = v;\n        g = n;\n        b = wh;\n        break;\n\n      case 1:\n        r = n;\n        g = v;\n        b = wh;\n        break;\n\n      case 2:\n        r = wh;\n        g = v;\n        b = n;\n        break;\n\n      case 3:\n        r = wh;\n        g = n;\n        b = v;\n        break;\n\n      case 4:\n        r = n;\n        g = wh;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = wh;\n        b = n;\n        break;\n    }\n\n    return [r * 255, g * 255, b * 255];\n  }\n\n  function hwb2hsl(args) {\n    return rgb2hsl(hwb2rgb(args));\n  }\n\n  function hwb2hsv(args) {\n    return rgb2hsv(hwb2rgb(args));\n  }\n\n  function hwb2cmyk(args) {\n    return rgb2cmyk(hwb2rgb(args));\n  }\n\n  function hwb2keyword(args) {\n    return rgb2keyword(hwb2rgb(args));\n  }\n\n  function 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,\n        g,\n        b;\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\n  function cmyk2hsl(args) {\n    return rgb2hsl(cmyk2rgb(args));\n  }\n\n  function cmyk2hsv(args) {\n    return rgb2hsv(cmyk2rgb(args));\n  }\n\n  function cmyk2hwb(args) {\n    return rgb2hwb(cmyk2rgb(args));\n  }\n\n  function cmyk2keyword(args) {\n    return rgb2keyword(cmyk2rgb(args));\n  }\n\n  function xyz2rgb(xyz) {\n    var x = xyz[0] / 100,\n        y = xyz[1] / 100,\n        z = xyz[2] / 100,\n        r,\n        g,\n        b;\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; // assume sRGB\n\n    r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;\n    g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;\n    b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;\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    return [r * 255, g * 255, b * 255];\n  }\n\n  function xyz2lab(xyz) {\n    var x = xyz[0],\n        y = xyz[1],\n        z = xyz[2],\n        l,\n        a,\n        b;\n    x /= 95.047;\n    y /= 100;\n    z /= 108.883;\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    l = 116 * y - 16;\n    a = 500 * (x - y);\n    b = 200 * (y - z);\n    return [l, a, b];\n  }\n\n  function xyz2lch(args) {\n    return lab2lch(xyz2lab(args));\n  }\n\n  function lab2xyz(lab) {\n    var l = lab[0],\n        a = lab[1],\n        b = lab[2],\n        x,\n        y,\n        z,\n        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    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    return [x, y, z];\n  }\n\n  function lab2lch(lab) {\n    var l = lab[0],\n        a = lab[1],\n        b = lab[2],\n        hr,\n        h,\n        c;\n    hr = Math.atan2(b, a);\n    h = hr * 360 / 2 / Math.PI;\n\n    if (h < 0) {\n      h += 360;\n    }\n\n    c = Math.sqrt(a * a + b * b);\n    return [l, c, h];\n  }\n\n  function lab2rgb(args) {\n    return xyz2rgb(lab2xyz(args));\n  }\n\n  function lch2lab(lch) {\n    var l = lch[0],\n        c = lch[1],\n        h = lch[2],\n        a,\n        b,\n        hr;\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\n  function lch2xyz(args) {\n    return lab2xyz(lch2lab(args));\n  }\n\n  function lch2rgb(args) {\n    return lab2rgb(lch2lab(args));\n  }\n\n  function keyword2rgb(keyword) {\n    return cssKeywords[keyword];\n  }\n\n  function keyword2hsl(args) {\n    return rgb2hsl(keyword2rgb(args));\n  }\n\n  function keyword2hsv(args) {\n    return rgb2hsv(keyword2rgb(args));\n  }\n\n  function keyword2hwb(args) {\n    return rgb2hwb(keyword2rgb(args));\n  }\n\n  function keyword2cmyk(args) {\n    return rgb2cmyk(keyword2rgb(args));\n  }\n\n  function keyword2lab(args) {\n    return rgb2lab(keyword2rgb(args));\n  }\n\n  function keyword2xyz(args) {\n    return rgb2xyz(keyword2rgb(args));\n  }\n\n  var 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  var reverseKeywords = {};\n\n  for (var key in cssKeywords) {\n    reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n  }\n\n  var convert = function convert() {\n    return new Converter();\n  };\n\n  for (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\") 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]; // export rgb2hsl and [\"rgb\"][\"hsl\"]\n\n    convert[from] = convert[from] || {};\n\n    convert[from][to] = convert[func] = function (func) {\n      return function (arg) {\n        if (typeof arg == \"number\") arg = Array.prototype.slice.call(arguments);\n        var val = conversions[func](arg);\n        if (typeof val == \"string\" || val === undefined) return val; // keyword\n\n        for (var i = 0; i < val.length; i++) {\n          val[i] = Math.round(val[i]);\n        }\n\n        return val;\n      };\n    }(func);\n  }\n  /* Converter does lazy conversion and caching */\n\n\n  var Converter = function Converter() {\n    this.convs = {};\n  };\n  /* Either get the values for a space or\n    set the values for a space, depending on args */\n\n\n  Converter.prototype.routeSpace = function (space, args) {\n    var values = args[0];\n\n    if (values === undefined) {\n      // color.rgb()\n      return this.getValues(space);\n    } // color.rgb(10, 10, 10)\n\n\n    if (typeof values == \"number\") {\n      values = Array.prototype.slice.call(args);\n    }\n\n    return this.setValues(space, values);\n  };\n  /* Set the values for a space, invalidating cache */\n\n\n  Converter.prototype.setValues = function (space, values) {\n    this.space = space;\n    this.convs = {};\n    this.convs[space] = values;\n    return this;\n  };\n  /* Get the values for a space. If there's already\n    a conversion for the space, fetch it, otherwise\n    compute it */\n\n\n  Converter.prototype.getValues = function (space) {\n    var vals = this.convs[space];\n\n    if (!vals) {\n      var fspace = this.space,\n          from = this.convs[fspace];\n      vals = convert[fspace][space](from);\n      this.convs[space] = vals;\n    }\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  var colorConvert = convert;\n  var colorName = {\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  /* MIT license */\n\n  var colorString = {\n    getRgba: getRgba,\n    getHsla: getHsla,\n    getRgb: getRgb,\n    getHsl: getHsl,\n    getHwb: getHwb,\n    getAlpha: getAlpha,\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\n  function getRgba(string) {\n    if (!string) {\n      return;\n    }\n\n    var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n        hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/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    var rgb = [0, 0, 0],\n        a = 1,\n        match = string.match(abbr),\n        hexAlpha = \"\";\n\n    if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n\n      if (hexAlpha) {\n        a = Math.round(parseInt(hexAlpha + hexAlpha, 16) / 255 * 100) / 100;\n      }\n    } else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n\n      if (hexAlpha) {\n        a = Math.round(parseInt(hexAlpha, 16) / 255 * 100) / 100;\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\n      a = parseFloat(match[4]);\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\n      a = parseFloat(match[4]);\n    } else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n        return [0, 0, 0, 0];\n      }\n\n      rgb = colorName[match[1]];\n\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\n    if (!a && a != 0) {\n      a = 1;\n    } else {\n      a = scale(a, 0, 1);\n    }\n\n    rgb[3] = a;\n    return rgb;\n  }\n\n  function getHsla(string) {\n    if (!string) {\n      return;\n    }\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\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\n  function getHwb(string) {\n    if (!string) {\n      return;\n    }\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\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\n  function getRgb(string) {\n    var rgba = getRgba(string);\n    return rgba && rgba.slice(0, 3);\n  }\n\n  function getHsl(string) {\n    var hsla = getHsla(string);\n    return hsla && hsla.slice(0, 3);\n  }\n\n  function getAlpha(string) {\n    var vals = getRgba(string);\n\n    if (vals) {\n      return vals[3];\n    } else if (vals = getHsla(string)) {\n      return vals[3];\n    } else if (vals = getHwb(string)) {\n      return vals[3];\n    }\n  } // generators\n\n\n  function hexString(rgba, a) {\n    var a = a !== undefined && rgba.length === 3 ? a : rgba[3];\n    return \"#\" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (a >= 0 && a < 1 ? hexDouble(Math.round(a * 255)) : \"\");\n  }\n\n  function rgbString(rgba, alpha) {\n    if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n      return rgbaString(rgba, alpha);\n    }\n\n    return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n  }\n\n  function rgbaString(rgba, alpha) {\n    if (alpha === undefined) {\n      alpha = rgba[3] !== undefined ? rgba[3] : 1;\n    }\n\n    return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \", \" + alpha + \")\";\n  }\n\n  function percentString(rgba, alpha) {\n    if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n      return percentaString(rgba, alpha);\n    }\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    return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n  }\n\n  function 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\n  function hslString(hsla, alpha) {\n    if (alpha < 1 || hsla[3] && hsla[3] < 1) {\n      return hslaString(hsla, alpha);\n    }\n\n    return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n  }\n\n  function hslaString(hsla, alpha) {\n    if (alpha === undefined) {\n      alpha = hsla[3] !== undefined ? hsla[3] : 1;\n    }\n\n    return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + alpha + \")\";\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)\n\n\n  function hwbString(hwb, alpha) {\n    if (alpha === undefined) {\n      alpha = hwb[3] !== undefined ? hwb[3] : 1;\n    }\n\n    return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\" + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n  }\n\n  function keyword(rgb) {\n    return reverseNames[rgb.slice(0, 3)];\n  } // helpers\n\n\n  function scale(num, min, max) {\n    return Math.min(Math.max(min, num), max);\n  }\n\n  function hexDouble(num) {\n    var str = num.toString(16).toUpperCase();\n    return str.length < 2 ? \"0\" + str : str;\n  } //create a list of reverse color names\n\n\n  var reverseNames = {};\n\n  for (var name in colorName) {\n    reverseNames[colorName[name]] = name;\n  }\n  /* MIT license */\n\n\n  var Color = function Color(obj) {\n    if (obj instanceof Color) {\n      return obj;\n    }\n\n    if (!(this instanceof Color)) {\n      return new Color(obj);\n    }\n\n    this.valid = false;\n    this.values = {\n      rgb: [0, 0, 0],\n      hsl: [0, 0, 0],\n      hsv: [0, 0, 0],\n      hwb: [0, 0, 0],\n      cmyk: [0, 0, 0, 0],\n      alpha: 1\n    }; // parse Color() argument\n\n    var vals;\n\n    if (typeof obj === 'string') {\n      vals = colorString.getRgba(obj);\n\n      if (vals) {\n        this.setValues('rgb', vals);\n      } else if (vals = colorString.getHsla(obj)) {\n        this.setValues('hsl', vals);\n      } else if (vals = colorString.getHwb(obj)) {\n        this.setValues('hwb', vals);\n      }\n    } else if (typeof obj === 'object') {\n      vals = obj;\n\n      if (vals.r !== undefined || vals.red !== undefined) {\n        this.setValues('rgb', vals);\n      } else if (vals.l !== undefined || vals.lightness !== undefined) {\n        this.setValues('hsl', vals);\n      } else if (vals.v !== undefined || vals.value !== undefined) {\n        this.setValues('hsv', vals);\n      } else if (vals.w !== undefined || vals.whiteness !== undefined) {\n        this.setValues('hwb', vals);\n      } else if (vals.c !== undefined || vals.cyan !== undefined) {\n        this.setValues('cmyk', vals);\n      }\n    }\n  };\n\n  Color.prototype = {\n    isValid: function isValid() {\n      return this.valid;\n    },\n    rgb: function rgb() {\n      return this.setSpace('rgb', arguments);\n    },\n    hsl: function hsl() {\n      return this.setSpace('hsl', arguments);\n    },\n    hsv: function hsv() {\n      return this.setSpace('hsv', arguments);\n    },\n    hwb: function hwb() {\n      return this.setSpace('hwb', arguments);\n    },\n    cmyk: function cmyk() {\n      return this.setSpace('cmyk', arguments);\n    },\n    rgbArray: function rgbArray() {\n      return this.values.rgb;\n    },\n    hslArray: function hslArray() {\n      return this.values.hsl;\n    },\n    hsvArray: function hsvArray() {\n      return this.values.hsv;\n    },\n    hwbArray: function hwbArray() {\n      var values = this.values;\n\n      if (values.alpha !== 1) {\n        return values.hwb.concat([values.alpha]);\n      }\n\n      return values.hwb;\n    },\n    cmykArray: function cmykArray() {\n      return this.values.cmyk;\n    },\n    rgbaArray: function rgbaArray() {\n      var values = this.values;\n      return values.rgb.concat([values.alpha]);\n    },\n    hslaArray: function hslaArray() {\n      var values = this.values;\n      return values.hsl.concat([values.alpha]);\n    },\n    alpha: function alpha(val) {\n      if (val === undefined) {\n        return this.values.alpha;\n      }\n\n      this.setValues('alpha', val);\n      return this;\n    },\n    red: function red(val) {\n      return this.setChannel('rgb', 0, val);\n    },\n    green: function green(val) {\n      return this.setChannel('rgb', 1, val);\n    },\n    blue: function blue(val) {\n      return this.setChannel('rgb', 2, val);\n    },\n    hue: function hue(val) {\n      if (val) {\n        val %= 360;\n        val = val < 0 ? 360 + val : val;\n      }\n\n      return this.setChannel('hsl', 0, val);\n    },\n    saturation: function saturation(val) {\n      return this.setChannel('hsl', 1, val);\n    },\n    lightness: function lightness(val) {\n      return this.setChannel('hsl', 2, val);\n    },\n    saturationv: function saturationv(val) {\n      return this.setChannel('hsv', 1, val);\n    },\n    whiteness: function whiteness(val) {\n      return this.setChannel('hwb', 1, val);\n    },\n    blackness: function blackness(val) {\n      return this.setChannel('hwb', 2, val);\n    },\n    value: function value(val) {\n      return this.setChannel('hsv', 2, val);\n    },\n    cyan: function cyan(val) {\n      return this.setChannel('cmyk', 0, val);\n    },\n    magenta: function magenta(val) {\n      return this.setChannel('cmyk', 1, val);\n    },\n    yellow: function yellow(val) {\n      return this.setChannel('cmyk', 2, val);\n    },\n    black: function black(val) {\n      return this.setChannel('cmyk', 3, val);\n    },\n    hexString: function hexString() {\n      return colorString.hexString(this.values.rgb);\n    },\n    rgbString: function rgbString() {\n      return colorString.rgbString(this.values.rgb, this.values.alpha);\n    },\n    rgbaString: function rgbaString() {\n      return colorString.rgbaString(this.values.rgb, this.values.alpha);\n    },\n    percentString: function percentString() {\n      return colorString.percentString(this.values.rgb, this.values.alpha);\n    },\n    hslString: function hslString() {\n      return colorString.hslString(this.values.hsl, this.values.alpha);\n    },\n    hslaString: function hslaString() {\n      return colorString.hslaString(this.values.hsl, this.values.alpha);\n    },\n    hwbString: function hwbString() {\n      return colorString.hwbString(this.values.hwb, this.values.alpha);\n    },\n    keyword: function keyword() {\n      return colorString.keyword(this.values.rgb, this.values.alpha);\n    },\n    rgbNumber: function rgbNumber() {\n      var rgb = this.values.rgb;\n      return rgb[0] << 16 | rgb[1] << 8 | rgb[2];\n    },\n    luminosity: function luminosity() {\n      // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n      var rgb = this.values.rgb;\n      var lum = [];\n\n      for (var i = 0; i < rgb.length; i++) {\n        var chan = rgb[i] / 255;\n        lum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);\n      }\n\n      return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n    },\n    contrast: function contrast(color2) {\n      // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n      var lum1 = this.luminosity();\n      var lum2 = color2.luminosity();\n\n      if (lum1 > lum2) {\n        return (lum1 + 0.05) / (lum2 + 0.05);\n      }\n\n      return (lum2 + 0.05) / (lum1 + 0.05);\n    },\n    level: function level(color2) {\n      var contrastRatio = this.contrast(color2);\n\n      if (contrastRatio >= 7.1) {\n        return 'AAA';\n      }\n\n      return contrastRatio >= 4.5 ? 'AA' : '';\n    },\n    dark: function dark() {\n      // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n      var rgb = this.values.rgb;\n      var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n      return yiq < 128;\n    },\n    light: function light() {\n      return !this.dark();\n    },\n    negate: function negate() {\n      var rgb = [];\n\n      for (var i = 0; i < 3; i++) {\n        rgb[i] = 255 - this.values.rgb[i];\n      }\n\n      this.setValues('rgb', rgb);\n      return this;\n    },\n    lighten: function lighten(ratio) {\n      var hsl = this.values.hsl;\n      hsl[2] += hsl[2] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    darken: function darken(ratio) {\n      var hsl = this.values.hsl;\n      hsl[2] -= hsl[2] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    saturate: function saturate(ratio) {\n      var hsl = this.values.hsl;\n      hsl[1] += hsl[1] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    desaturate: function desaturate(ratio) {\n      var hsl = this.values.hsl;\n      hsl[1] -= hsl[1] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    whiten: function whiten(ratio) {\n      var hwb = this.values.hwb;\n      hwb[1] += hwb[1] * ratio;\n      this.setValues('hwb', hwb);\n      return this;\n    },\n    blacken: function blacken(ratio) {\n      var hwb = this.values.hwb;\n      hwb[2] += hwb[2] * ratio;\n      this.setValues('hwb', hwb);\n      return this;\n    },\n    greyscale: function greyscale() {\n      var rgb = this.values.rgb; // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\n      var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n      this.setValues('rgb', [val, val, val]);\n      return this;\n    },\n    clearer: function clearer(ratio) {\n      var alpha = this.values.alpha;\n      this.setValues('alpha', alpha - alpha * ratio);\n      return this;\n    },\n    opaquer: function opaquer(ratio) {\n      var alpha = this.values.alpha;\n      this.setValues('alpha', alpha + alpha * ratio);\n      return this;\n    },\n    rotate: function rotate(degrees) {\n      var hsl = this.values.hsl;\n      var hue = (hsl[0] + degrees) % 360;\n      hsl[0] = hue < 0 ? 360 + hue : hue;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n\n    /**\n     * Ported from sass implementation in C\n     * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n     */\n    mix: function mix(mixinColor, weight) {\n      var color1 = this;\n      var color2 = mixinColor;\n      var p = weight === undefined ? 0.5 : weight;\n      var w = 2 * p - 1;\n      var a = color1.alpha() - color2.alpha();\n      var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      var w2 = 1 - w1;\n      return this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n    },\n    toJSON: function toJSON() {\n      return this.rgb();\n    },\n    clone: function clone() {\n      // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n      // making the final build way to big to embed in Chart.js. So let's do it manually,\n      // assuming that values to clone are 1 dimension arrays containing only numbers,\n      // except 'alpha' which is a number.\n      var result = new Color();\n      var source = this.values;\n      var target = result.values;\n      var value, type;\n\n      for (var prop in source) {\n        if (source.hasOwnProperty(prop)) {\n          value = source[prop];\n          type = {}.toString.call(value);\n\n          if (type === '[object Array]') {\n            target[prop] = value.slice(0);\n          } else if (type === '[object Number]') {\n            target[prop] = value;\n          } else {\n            console.error('unexpected color value:', value);\n          }\n        }\n      }\n\n      return result;\n    }\n  };\n  Color.prototype.spaces = {\n    rgb: ['red', 'green', 'blue'],\n    hsl: ['hue', 'saturation', 'lightness'],\n    hsv: ['hue', 'saturation', 'value'],\n    hwb: ['hue', 'whiteness', 'blackness'],\n    cmyk: ['cyan', 'magenta', 'yellow', 'black']\n  };\n  Color.prototype.maxes = {\n    rgb: [255, 255, 255],\n    hsl: [360, 100, 100],\n    hsv: [360, 100, 100],\n    hwb: [360, 100, 100],\n    cmyk: [100, 100, 100, 100]\n  };\n\n  Color.prototype.getValues = function (space) {\n    var values = this.values;\n    var vals = {};\n\n    for (var i = 0; i < space.length; i++) {\n      vals[space.charAt(i)] = values[space][i];\n    }\n\n    if (values.alpha !== 1) {\n      vals.a = values.alpha;\n    } // {r: 255, g: 255, b: 255, a: 0.4}\n\n\n    return vals;\n  };\n\n  Color.prototype.setValues = function (space, vals) {\n    var values = this.values;\n    var spaces = this.spaces;\n    var maxes = this.maxes;\n    var alpha = 1;\n    var i;\n    this.valid = true;\n\n    if (space === 'alpha') {\n      alpha = vals;\n    } else if (vals.length) {\n      // [10, 10, 10]\n      values[space] = vals.slice(0, space.length);\n      alpha = vals[space.length];\n    } else if (vals[space.charAt(0)] !== undefined) {\n      // {r: 10, g: 10, b: 10}\n      for (i = 0; i < space.length; i++) {\n        values[space][i] = vals[space.charAt(i)];\n      }\n\n      alpha = vals.a;\n    } else if (vals[spaces[space][0]] !== undefined) {\n      // {red: 10, green: 10, blue: 10}\n      var chans = spaces[space];\n\n      for (i = 0; i < space.length; i++) {\n        values[space][i] = vals[chans[i]];\n      }\n\n      alpha = vals.alpha;\n    }\n\n    values.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));\n\n    if (space === 'alpha') {\n      return false;\n    }\n\n    var capped; // cap values of the space prior converting all values\n\n    for (i = 0; i < space.length; i++) {\n      capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n      values[space][i] = Math.round(capped);\n    } // convert to all the other color spaces\n\n\n    for (var sname in spaces) {\n      if (sname !== space) {\n        values[sname] = colorConvert[space][sname](values[space]);\n      }\n    }\n\n    return true;\n  };\n\n  Color.prototype.setSpace = function (space, args) {\n    var vals = args[0];\n\n    if (vals === undefined) {\n      // color.rgb()\n      return this.getValues(space);\n    } // color.rgb(10, 10, 10)\n\n\n    if (typeof vals === 'number') {\n      vals = Array.prototype.slice.call(args);\n    }\n\n    this.setValues(space, vals);\n    return this;\n  };\n\n  Color.prototype.setChannel = function (space, index, val) {\n    var svalues = this.values[space];\n\n    if (val === undefined) {\n      // color.red()\n      return svalues[index];\n    } else if (val === svalues[index]) {\n      // color.red(color.red())\n      return this;\n    } // color.red(100)\n\n\n    svalues[index] = val;\n    this.setValues(space, svalues);\n    return this;\n  };\n\n  if (typeof window !== 'undefined') {\n    window.Color = Color;\n  }\n\n  var chartjsColor = Color;\n  /**\n   * @namespace Chart.helpers\n   */\n\n  var helpers = {\n    /**\n     * An empty function that can be used, for example, for optional callback.\n     */\n    noop: function noop() {},\n\n    /**\n     * Returns a unique id, sequentially generated from a global variable.\n     * @returns {number}\n     * @function\n     */\n    uid: function () {\n      var id = 0;\n      return function () {\n        return id++;\n      };\n    }(),\n\n    /**\n     * Returns true if `value` is neither null nor undefined, else returns false.\n     * @param {*} value - The value to test.\n     * @returns {boolean}\n     * @since 2.7.0\n     */\n    isNullOrUndef: function isNullOrUndef(value) {\n      return value === null || typeof value === 'undefined';\n    },\n\n    /**\n     * Returns true if `value` is an array (including typed arrays), else returns false.\n     * @param {*} value - The value to test.\n     * @returns {boolean}\n     * @function\n     */\n    isArray: function isArray(value) {\n      if (Array.isArray && Array.isArray(value)) {\n        return true;\n      }\n\n      var type = Object.prototype.toString.call(value);\n\n      if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Returns true if `value` is an object (excluding null), else returns false.\n     * @param {*} value - The value to test.\n     * @returns {boolean}\n     * @since 2.7.0\n     */\n    isObject: function isObject(value) {\n      return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n    },\n\n    /**\n     * Returns true if `value` is a finite number, else returns false\n     * @param {*} value  - The value to test.\n     * @returns {boolean}\n     */\n    isFinite: function (_isFinite) {\n      function isFinite(_x) {\n        return _isFinite.apply(this, arguments);\n      }\n\n      isFinite.toString = function () {\n        return _isFinite.toString();\n      };\n\n      return isFinite;\n    }(function (value) {\n      return (typeof value === 'number' || value instanceof Number) && isFinite(value);\n    }),\n\n    /**\n     * Returns `value` if defined, else returns `defaultValue`.\n     * @param {*} value - The value to return if defined.\n     * @param {*} defaultValue - The value to return if `value` is undefined.\n     * @returns {*}\n     */\n    valueOrDefault: function valueOrDefault(value, defaultValue) {\n      return typeof value === 'undefined' ? defaultValue : value;\n    },\n\n    /**\n     * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n     * @param {Array} value - The array to lookup for value at `index`.\n     * @param {number} index - The index in `value` to lookup for value.\n     * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n     * @returns {*}\n     */\n    valueAtIndexOrDefault: function valueAtIndexOrDefault(value, index, defaultValue) {\n      return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n    },\n\n    /**\n     * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n     * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n     * @param {function} fn - The function to call.\n     * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n     * @returns {*}\n     */\n    callback: function callback(fn, args, thisArg) {\n      if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n      }\n    },\n\n    /**\n     * Note(SB) for performance sake, this method should only be used when loopable type\n     * is unknown or in none intensive code (not called often and small loopable). Else\n     * it's preferable to use a regular for() loop and save extra function calls.\n     * @param {object|Array} loopable - The object or array to be iterated.\n     * @param {function} fn - The function to call for each item.\n     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n     * @param {boolean} [reverse] - If true, iterates backward on the loopable.\n     */\n    each: function each(loopable, fn, thisArg, reverse) {\n      var i, len, keys;\n\n      if (helpers.isArray(loopable)) {\n        len = loopable.length;\n\n        if (reverse) {\n          for (i = len - 1; i >= 0; i--) {\n            fn.call(thisArg, loopable[i], i);\n          }\n        } else {\n          for (i = 0; i < len; i++) {\n            fn.call(thisArg, loopable[i], i);\n          }\n        }\n      } else if (helpers.isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n\n        for (i = 0; i < len; i++) {\n          fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n      }\n    },\n\n    /**\n     * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n     * @see https://stackoverflow.com/a/14853974\n     * @param {Array} a0 - The array to compare\n     * @param {Array} a1 - The array to compare\n     * @returns {boolean}\n     */\n    arrayEquals: function arrayEquals(a0, a1) {\n      var i, ilen, v0, v1;\n\n      if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n      }\n\n      for (i = 0, ilen = a0.length; i < ilen; ++i) {\n        v0 = a0[i];\n        v1 = a1[i];\n\n        if (v0 instanceof Array && v1 instanceof Array) {\n          if (!helpers.arrayEquals(v0, v1)) {\n            return false;\n          }\n        } else if (v0 !== v1) {\n          // NOTE: two different object instances will never be equal: {x:20} != {x:20}\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * Returns a deep copy of `source` without keeping references on objects and arrays.\n     * @param {*} source - The value to clone.\n     * @returns {*}\n     */\n    clone: function clone(source) {\n      if (helpers.isArray(source)) {\n        return source.map(helpers.clone);\n      }\n\n      if (helpers.isObject(source)) {\n        var target = {};\n        var keys = Object.keys(source);\n        var klen = keys.length;\n        var k = 0;\n\n        for (; k < klen; ++k) {\n          target[keys[k]] = helpers.clone(source[keys[k]]);\n        }\n\n        return target;\n      }\n\n      return source;\n    },\n\n    /**\n     * The default merger when Chart.helpers.merge is called without merger option.\n     * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n     * @private\n     */\n    _merger: function _merger(key, target, source, options) {\n      var tval = target[key];\n      var sval = source[key];\n\n      if (helpers.isObject(tval) && helpers.isObject(sval)) {\n        helpers.merge(tval, sval, options);\n      } else {\n        target[key] = helpers.clone(sval);\n      }\n    },\n\n    /**\n     * Merges source[key] in target[key] only if target[key] is undefined.\n     * @private\n     */\n    _mergerIf: function _mergerIf(key, target, source) {\n      var tval = target[key];\n      var sval = source[key];\n\n      if (helpers.isObject(tval) && helpers.isObject(sval)) {\n        helpers.mergeIf(tval, sval);\n      } else if (!target.hasOwnProperty(key)) {\n        target[key] = helpers.clone(sval);\n      }\n    },\n\n    /**\n     * Recursively deep copies `source` properties into `target` with the given `options`.\n     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n     * @param {object} target - The target object in which all sources are merged into.\n     * @param {object|object[]} source - Object(s) to merge into `target`.\n     * @param {object} [options] - Merging options:\n     * @param {function} [options.merger] - The merge method (key, target, source, options)\n     * @returns {object} The `target` object.\n     */\n    merge: function merge(target, source, options) {\n      var sources = helpers.isArray(source) ? source : [source];\n      var ilen = sources.length;\n      var merge, i, keys, klen, k;\n\n      if (!helpers.isObject(target)) {\n        return target;\n      }\n\n      options = options || {};\n      merge = options.merger || helpers._merger;\n\n      for (i = 0; i < ilen; ++i) {\n        source = sources[i];\n\n        if (!helpers.isObject(source)) {\n          continue;\n        }\n\n        keys = Object.keys(source);\n\n        for (k = 0, klen = keys.length; k < klen; ++k) {\n          merge(keys[k], target, source, options);\n        }\n      }\n\n      return target;\n    },\n\n    /**\n     * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n     * @param {object} target - The target object in which all sources are merged into.\n     * @param {object|object[]} source - Object(s) to merge into `target`.\n     * @returns {object} The `target` object.\n     */\n    mergeIf: function mergeIf(target, source) {\n      return helpers.merge(target, source, {\n        merger: helpers._mergerIf\n      });\n    },\n\n    /**\n     * Applies the contents of two or more objects together into the first object.\n     * @param {object} target - The target object in which all objects are merged into.\n     * @param {object} arg1 - Object containing additional properties to merge in target.\n     * @param {object} argN - Additional objects containing properties to merge in target.\n     * @returns {object} The `target` object.\n     */\n    extend: function extend(target) {\n      var setFn = function setFn(value, key) {\n        target[key] = value;\n      };\n\n      for (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n        helpers.each(arguments[i], setFn);\n      }\n\n      return target;\n    },\n\n    /**\n     * Basic javascript inheritance based on the model created in Backbone.js\n     */\n    inherits: function inherits(extensions) {\n      var me = this;\n      var ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {\n        return me.apply(this, arguments);\n      };\n\n      var Surrogate = function Surrogate() {\n        this.constructor = ChartElement;\n      };\n\n      Surrogate.prototype = me.prototype;\n      ChartElement.prototype = new Surrogate();\n      ChartElement.extend = helpers.inherits;\n\n      if (extensions) {\n        helpers.extend(ChartElement.prototype, extensions);\n      }\n\n      ChartElement.__super__ = me.prototype;\n      return ChartElement;\n    }\n  };\n  var helpers_core = helpers; // 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   */\n\n  helpers.callCallback = helpers.callback;\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   */\n\n  helpers.indexOf = function (array, item, fromIndex) {\n    return Array.prototype.indexOf.call(array, item, fromIndex);\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   */\n\n\n  helpers.getValueOrDefault = helpers.valueOrDefault;\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   */\n\n  helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n  /**\n   * Easing functions adapted from Robert Penner's easing equations.\n   * @namespace Chart.helpers.easingEffects\n   * @see http://www.robertpenner.com/easing/\n   */\n\n  var effects = {\n    linear: function linear(t) {\n      return t;\n    },\n    easeInQuad: function easeInQuad(t) {\n      return t * t;\n    },\n    easeOutQuad: function easeOutQuad(t) {\n      return -t * (t - 2);\n    },\n    easeInOutQuad: function easeInOutQuad(t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t;\n      }\n\n      return -0.5 * (--t * (t - 2) - 1);\n    },\n    easeInCubic: function easeInCubic(t) {\n      return t * t * t;\n    },\n    easeOutCubic: function easeOutCubic(t) {\n      return (t = t - 1) * t * t + 1;\n    },\n    easeInOutCubic: function easeInOutCubic(t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t;\n      }\n\n      return 0.5 * ((t -= 2) * t * t + 2);\n    },\n    easeInQuart: function easeInQuart(t) {\n      return t * t * t * t;\n    },\n    easeOutQuart: function easeOutQuart(t) {\n      return -((t = t - 1) * t * t * t - 1);\n    },\n    easeInOutQuart: function easeInOutQuart(t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t * t;\n      }\n\n      return -0.5 * ((t -= 2) * t * t * t - 2);\n    },\n    easeInQuint: function easeInQuint(t) {\n      return t * t * t * t * t;\n    },\n    easeOutQuint: function easeOutQuint(t) {\n      return (t = t - 1) * t * t * t * t + 1;\n    },\n    easeInOutQuint: function easeInOutQuint(t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t * t * t;\n      }\n\n      return 0.5 * ((t -= 2) * t * t * t * t + 2);\n    },\n    easeInSine: function easeInSine(t) {\n      return -Math.cos(t * (Math.PI / 2)) + 1;\n    },\n    easeOutSine: function easeOutSine(t) {\n      return Math.sin(t * (Math.PI / 2));\n    },\n    easeInOutSine: function easeInOutSine(t) {\n      return -0.5 * (Math.cos(Math.PI * t) - 1);\n    },\n    easeInExpo: function easeInExpo(t) {\n      return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n    },\n    easeOutExpo: function easeOutExpo(t) {\n      return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n    },\n    easeInOutExpo: function easeInOutExpo(t) {\n      if (t === 0) {\n        return 0;\n      }\n\n      if (t === 1) {\n        return 1;\n      }\n\n      if ((t /= 0.5) < 1) {\n        return 0.5 * Math.pow(2, 10 * (t - 1));\n      }\n\n      return 0.5 * (-Math.pow(2, -10 * --t) + 2);\n    },\n    easeInCirc: function easeInCirc(t) {\n      if (t >= 1) {\n        return t;\n      }\n\n      return -(Math.sqrt(1 - t * t) - 1);\n    },\n    easeOutCirc: function easeOutCirc(t) {\n      return Math.sqrt(1 - (t = t - 1) * t);\n    },\n    easeInOutCirc: function easeInOutCirc(t) {\n      if ((t /= 0.5) < 1) {\n        return -0.5 * (Math.sqrt(1 - t * t) - 1);\n      }\n\n      return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n    },\n    easeInElastic: function easeInElastic(t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n\n      if (t === 0) {\n        return 0;\n      }\n\n      if (t === 1) {\n        return 1;\n      }\n\n      if (!p) {\n        p = 0.3;\n      }\n\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n\n      return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n    },\n    easeOutElastic: function easeOutElastic(t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n\n      if (t === 0) {\n        return 0;\n      }\n\n      if (t === 1) {\n        return 1;\n      }\n\n      if (!p) {\n        p = 0.3;\n      }\n\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n\n      return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n    },\n    easeInOutElastic: function easeInOutElastic(t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n\n      if (t === 0) {\n        return 0;\n      }\n\n      if ((t /= 0.5) === 2) {\n        return 1;\n      }\n\n      if (!p) {\n        p = 0.45;\n      }\n\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n\n      if (t < 1) {\n        return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n      }\n\n      return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n    },\n    easeInBack: function easeInBack(t) {\n      var s = 1.70158;\n      return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack: function easeOutBack(t) {\n      var s = 1.70158;\n      return (t = t - 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack: function easeInOutBack(t) {\n      var s = 1.70158;\n\n      if ((t /= 0.5) < 1) {\n        return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n      }\n\n      return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: function easeInBounce(t) {\n      return 1 - effects.easeOutBounce(1 - t);\n    },\n    easeOutBounce: function easeOutBounce(t) {\n      if (t < 1 / 2.75) {\n        return 7.5625 * t * t;\n      }\n\n      if (t < 2 / 2.75) {\n        return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n      }\n\n      if (t < 2.5 / 2.75) {\n        return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n      }\n\n      return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n    },\n    easeInOutBounce: function easeInOutBounce(t) {\n      if (t < 0.5) {\n        return effects.easeInBounce(t * 2) * 0.5;\n      }\n\n      return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n    }\n  };\n  var helpers_easing = {\n    effects: effects\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   */\n\n  helpers_core.easingEffects = effects;\n  var PI = Math.PI;\n  var RAD_PER_DEG = PI / 180;\n  var DOUBLE_PI = PI * 2;\n  var HALF_PI = PI / 2;\n  var QUARTER_PI = PI / 4;\n  var TWO_THIRDS_PI = PI * 2 / 3;\n  /**\n   * @namespace Chart.helpers.canvas\n   */\n\n  var exports$1 = {\n    /**\n     * Clears the entire canvas associated to the given `chart`.\n     * @param {Chart} chart - The chart for which to clear the canvas.\n     */\n    clear: function clear(chart) {\n      chart.ctx.clearRect(0, 0, chart.width, chart.height);\n    },\n\n    /**\n     * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n     * given size (width, height) and the same `radius` for all corners.\n     * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n     * @param {number} x - The x axis of the coordinate for the rectangle starting point.\n     * @param {number} y - The y axis of the coordinate for the rectangle starting point.\n     * @param {number} width - The rectangle's width.\n     * @param {number} height - The rectangle's height.\n     * @param {number} radius - The rounded amount (in pixels) for the four corners.\n     * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n     */\n    roundedRect: function roundedRect(ctx, x, y, width, height, radius) {\n      if (radius) {\n        var r = Math.min(radius, height / 2, width / 2);\n        var left = x + r;\n        var top = y + r;\n        var right = x + width - r;\n        var bottom = y + height - r;\n        ctx.moveTo(x, top);\n\n        if (left < right && top < bottom) {\n          ctx.arc(left, top, r, -PI, -HALF_PI);\n          ctx.arc(right, top, r, -HALF_PI, 0);\n          ctx.arc(right, bottom, r, 0, HALF_PI);\n          ctx.arc(left, bottom, r, HALF_PI, PI);\n        } else if (left < right) {\n          ctx.moveTo(left, y);\n          ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n          ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n        } else if (top < bottom) {\n          ctx.arc(left, top, r, -PI, 0);\n          ctx.arc(left, bottom, r, 0, PI);\n        } else {\n          ctx.arc(left, top, r, -PI, PI);\n        }\n\n        ctx.closePath();\n        ctx.moveTo(x, y);\n      } else {\n        ctx.rect(x, y, width, height);\n      }\n    },\n    drawPoint: function drawPoint(ctx, style, radius, x, y, rotation) {\n      var type, xOffset, yOffset, size, cornerRadius;\n      var rad = (rotation || 0) * RAD_PER_DEG;\n\n      if (style && typeof style === 'object') {\n        type = style.toString();\n\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n          ctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n          return;\n        }\n      }\n\n      if (isNaN(radius) || radius <= 0) {\n        return;\n      }\n\n      ctx.beginPath();\n\n      switch (style) {\n        // Default includes circle\n        default:\n          ctx.arc(x, y, radius, 0, DOUBLE_PI);\n          ctx.closePath();\n          break;\n\n        case 'triangle':\n          ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          rad += TWO_THIRDS_PI;\n          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          rad += TWO_THIRDS_PI;\n          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          ctx.closePath();\n          break;\n\n        case 'rectRounded':\n          // NOTE: the rounded rect implementation changed to use `arc` instead of\n          // `quadraticCurveTo` since it generates better results when rect is\n          // almost a circle. 0.516 (instead of 0.5) produces results with visually\n          // closer proportion to the previous impl and it is inscribed in the\n          // circle with `radius`. For more details, see the following PRs:\n          // https://github.com/chartjs/Chart.js/issues/5597\n          // https://github.com/chartjs/Chart.js/issues/5858\n          cornerRadius = radius * 0.516;\n          size = radius - cornerRadius;\n          xOffset = Math.cos(rad + QUARTER_PI) * size;\n          yOffset = Math.sin(rad + QUARTER_PI) * size;\n          ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n          ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n          ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n          ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n          ctx.closePath();\n          break;\n\n        case 'rect':\n          if (!rotation) {\n            size = Math.SQRT1_2 * radius;\n            ctx.rect(x - size, y - size, 2 * size, 2 * size);\n            break;\n          }\n\n          rad += QUARTER_PI;\n\n        /* falls through */\n\n        case 'rectRot':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          ctx.closePath();\n          break;\n\n        case 'crossRot':\n          rad += QUARTER_PI;\n\n        /* falls through */\n\n        case 'cross':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          break;\n\n        case 'star':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          rad += QUARTER_PI;\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          break;\n\n        case 'line':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          break;\n\n        case 'dash':\n          ctx.moveTo(x, y);\n          ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n          break;\n      }\n\n      ctx.fill();\n      ctx.stroke();\n    },\n\n    /**\n     * Returns true if the point is inside the rectangle\n     * @param {object} point - The point to test\n     * @param {object} area - The rectangle\n     * @returns {boolean}\n     * @private\n     */\n    _isPointInArea: function _isPointInArea(point, area) {\n      var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n      return point.x > area.left - epsilon && point.x < area.right + epsilon && point.y > area.top - epsilon && point.y < area.bottom + epsilon;\n    },\n    clipArea: function clipArea(ctx, area) {\n      ctx.save();\n      ctx.beginPath();\n      ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n      ctx.clip();\n    },\n    unclipArea: function unclipArea(ctx) {\n      ctx.restore();\n    },\n    lineTo: function lineTo(ctx, previous, target, flip) {\n      var stepped = target.steppedLine;\n\n      if (stepped) {\n        if (stepped === 'middle') {\n          var midpoint = (previous.x + target.x) / 2.0;\n          ctx.lineTo(midpoint, flip ? target.y : previous.y);\n          ctx.lineTo(midpoint, flip ? previous.y : target.y);\n        } else if (stepped === 'after' && !flip || stepped !== 'after' && flip) {\n          ctx.lineTo(previous.x, target.y);\n        } else {\n          ctx.lineTo(target.x, previous.y);\n        }\n\n        ctx.lineTo(target.x, target.y);\n        return;\n      }\n\n      if (!target.tension) {\n        ctx.lineTo(target.x, target.y);\n        return;\n      }\n\n      ctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);\n    }\n  };\n  var helpers_canvas = exports$1; // 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   */\n\n  helpers_core.clear = exports$1.clear;\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   */\n\n  helpers_core.drawRoundedRectangle = function (ctx) {\n    ctx.beginPath();\n    exports$1.roundedRect.apply(exports$1, arguments);\n  };\n\n  var defaults = {\n    /**\n     * @private\n     */\n    _set: function _set(scope, values) {\n      return helpers_core.merge(this[scope] || (this[scope] = {}), values);\n    }\n  };\n\n  defaults._set('global', {\n    defaultColor: 'rgba(0,0,0,0.1)',\n    defaultFontColor: '#666',\n    defaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n    defaultFontSize: 12,\n    defaultFontStyle: 'normal',\n    defaultLineHeight: 1.2,\n    showLines: true\n  });\n\n  var core_defaults = defaults;\n  var valueOrDefault = helpers_core.valueOrDefault;\n  /**\n   * Converts the given font object into a CSS font string.\n   * @param {object} font - A font object.\n   * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n   * @private\n   */\n\n  function toFontString(font) {\n    if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n      return null;\n    }\n\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n  }\n  /**\n   * @alias Chart.helpers.options\n   * @namespace\n   */\n\n\n  var helpers_options = {\n    /**\n     * Converts the given line height `value` in pixels for a specific font `size`.\n     * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n     * @param {number} size - The font size (in pixels) used to resolve relative `value`.\n     * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\n     * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n     * @since 2.7.0\n     */\n    toLineHeight: function toLineHeight(value, size) {\n      var matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\n      if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n      }\n\n      value = +matches[2];\n\n      switch (matches[3]) {\n        case 'px':\n          return value;\n\n        case '%':\n          value /= 100;\n          break;\n\n        default:\n          break;\n      }\n\n      return size * value;\n    },\n\n    /**\n     * Converts the given value into a padding object with pre-computed width/height.\n     * @param {number|object} value - If a number, set the value to all TRBL component,\n     *  else, if and object, use defined properties and sets undefined ones to 0.\n     * @returns {object} The padding values (top, right, bottom, left, width, height)\n     * @since 2.7.0\n     */\n    toPadding: function toPadding(value) {\n      var t, r, b, l;\n\n      if (helpers_core.isObject(value)) {\n        t = +value.top || 0;\n        r = +value.right || 0;\n        b = +value.bottom || 0;\n        l = +value.left || 0;\n      } else {\n        t = r = b = l = +value || 0;\n      }\n\n      return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        height: t + b,\n        width: l + r\n      };\n    },\n\n    /**\n     * Parses font options and returns the font object.\n     * @param {object} options - A object that contains font options to be parsed.\n     * @return {object} The font object.\n     * @todo Support font.* options and renamed to toFont().\n     * @private\n     */\n    _parseFont: function _parseFont(options) {\n      var globalDefaults = core_defaults.global;\n      var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n      var font = {\n        family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n        lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n        size: size,\n        style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n        weight: null,\n        string: ''\n      };\n      font.string = toFontString(font);\n      return font;\n    },\n\n    /**\n     * Evaluates the given `inputs` sequentially and returns the first defined value.\n     * @param {Array} inputs - An array of values, falling back to the last value.\n     * @param {object} [context] - If defined and the current value is a function, the value\n     * is called with `context` as first argument and the result becomes the new input.\n     * @param {number} [index] - If defined and the current value is an array, the value\n     * at `index` become the new input.\n     * @since 2.7.0\n     */\n    resolve: function resolve(inputs, context, index) {\n      var i, ilen, value;\n\n      for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n        value = inputs[i];\n\n        if (value === undefined) {\n          continue;\n        }\n\n        if (context !== undefined && typeof value === 'function') {\n          value = value(context);\n        }\n\n        if (index !== undefined && helpers_core.isArray(value)) {\n          value = value[index];\n        }\n\n        if (value !== undefined) {\n          return value;\n        }\n      }\n    }\n  };\n  var helpers$1 = helpers_core;\n  var easing = helpers_easing;\n  var canvas = helpers_canvas;\n  var options = helpers_options;\n  helpers$1.easing = easing;\n  helpers$1.canvas = canvas;\n  helpers$1.options = options;\n\n  function interpolate(start, view, model, ease) {\n    var keys = Object.keys(model);\n    var i, ilen, key, actual, origin, target, type, c0, c1;\n\n    for (i = 0, ilen = keys.length; i < ilen; ++i) {\n      key = keys[i];\n      target = model[key]; // if a value is added to the model after pivot() has been called, the view\n      // doesn't contain it, so let's initialize the view to the target value.\n\n      if (!view.hasOwnProperty(key)) {\n        view[key] = target;\n      }\n\n      actual = view[key];\n\n      if (actual === target || key[0] === '_') {\n        continue;\n      }\n\n      if (!start.hasOwnProperty(key)) {\n        start[key] = actual;\n      }\n\n      origin = start[key];\n      type = typeof target;\n\n      if (type === typeof origin) {\n        if (type === 'string') {\n          c0 = chartjsColor(origin);\n\n          if (c0.valid) {\n            c1 = chartjsColor(target);\n\n            if (c1.valid) {\n              view[key] = c1.mix(c0, ease).rgbString();\n              continue;\n            }\n          }\n        } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n          view[key] = origin + (target - origin) * ease;\n          continue;\n        }\n      }\n\n      view[key] = target;\n    }\n  }\n\n  var Element = function Element(configuration) {\n    helpers$1.extend(this, configuration);\n    this.initialize.apply(this, arguments);\n  };\n\n  helpers$1.extend(Element.prototype, {\n    initialize: function initialize() {\n      this.hidden = false;\n    },\n    pivot: function pivot() {\n      var me = this;\n\n      if (!me._view) {\n        me._view = helpers$1.clone(me._model);\n      }\n\n      me._start = {};\n      return me;\n    },\n    transition: function transition(ease) {\n      var me = this;\n      var model = me._model;\n      var start = me._start;\n      var view = me._view; // No animation -> No Transition\n\n      if (!model || ease === 1) {\n        me._view = model;\n        me._start = null;\n        return me;\n      }\n\n      if (!view) {\n        view = me._view = {};\n      }\n\n      if (!start) {\n        start = me._start = {};\n      }\n\n      interpolate(start, view, model, ease);\n      return me;\n    },\n    tooltipPosition: function tooltipPosition() {\n      return {\n        x: this._model.x,\n        y: this._model.y\n      };\n    },\n    hasValue: function hasValue() {\n      return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n    }\n  });\n  Element.extend = helpers$1.inherits;\n  var core_element = Element;\n  var exports$2 = core_element.extend({\n    chart: null,\n    // the animation associated chart instance\n    currentStep: 0,\n    // the current animation step\n    numSteps: 60,\n    // default number of steps\n    easing: '',\n    // the easing to use for this animation\n    render: null,\n    // render function used by the animation service\n    onAnimationProgress: null,\n    // user specified callback to fire on each step of the animation\n    onAnimationComplete: null // user specified callback to fire when the animation finishes\n\n  });\n  var core_animation = exports$2; // DEPRECATIONS\n\n  /**\n   * Provided for backward compatibility, use Chart.Animation instead\n   * @prop Chart.Animation#animationObject\n   * @deprecated since version 2.6.0\n   * @todo remove at version 3\n   */\n\n  Object.defineProperty(exports$2.prototype, 'animationObject', {\n    get: function get() {\n      return this;\n    }\n  });\n  /**\n   * Provided for backward compatibility, use Chart.Animation#chart instead\n   * @prop Chart.Animation#chartInstance\n   * @deprecated since version 2.6.0\n   * @todo remove at version 3\n   */\n\n  Object.defineProperty(exports$2.prototype, 'chartInstance', {\n    get: function get() {\n      return this.chart;\n    },\n    set: function set(value) {\n      this.chart = value;\n    }\n  });\n\n  core_defaults._set('global', {\n    animation: {\n      duration: 1000,\n      easing: 'easeOutQuart',\n      onProgress: helpers$1.noop,\n      onComplete: helpers$1.noop\n    }\n  });\n\n  var core_animations = {\n    animations: [],\n    request: null,\n\n    /**\n     * @param {Chart} chart - The chart to animate.\n     * @param {Chart.Animation} animation - The animation that we will animate.\n     * @param {number} duration - The animation duration in ms.\n     * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n     */\n    addAnimation: function addAnimation(chart, animation, duration, lazy) {\n      var animations = this.animations;\n      var i, ilen;\n      animation.chart = chart;\n      animation.startTime = Date.now();\n      animation.duration = duration;\n\n      if (!lazy) {\n        chart.animating = true;\n      }\n\n      for (i = 0, ilen = animations.length; i < ilen; ++i) {\n        if (animations[i].chart === chart) {\n          animations[i] = animation;\n          return;\n        }\n      }\n\n      animations.push(animation); // If there are no animations queued, manually kickstart a digest, for lack of a better word\n\n      if (animations.length === 1) {\n        this.requestAnimationFrame();\n      }\n    },\n    cancelAnimation: function cancelAnimation(chart) {\n      var index = helpers$1.findIndex(this.animations, function (animation) {\n        return animation.chart === chart;\n      });\n\n      if (index !== -1) {\n        this.animations.splice(index, 1);\n        chart.animating = false;\n      }\n    },\n    requestAnimationFrame: function requestAnimationFrame() {\n      var me = this;\n\n      if (me.request === null) {\n        // Skip animation frame requests until the active one is executed.\n        // This can happen when processing mouse events, e.g. 'mousemove'\n        // and 'mouseout' events will trigger multiple renders.\n        me.request = helpers$1.requestAnimFrame.call(window, function () {\n          me.request = null;\n          me.startDigest();\n        });\n      }\n    },\n\n    /**\n     * @private\n     */\n    startDigest: function startDigest() {\n      var me = this;\n      me.advance(); // Do we have more stuff to animate?\n\n      if (me.animations.length > 0) {\n        me.requestAnimationFrame();\n      }\n    },\n\n    /**\n     * @private\n     */\n    advance: function advance() {\n      var animations = this.animations;\n      var animation, chart, numSteps, nextStep;\n      var i = 0; // 1 animation per chart, so we are looping charts here\n\n      while (i < animations.length) {\n        animation = animations[i];\n        chart = animation.chart;\n        numSteps = animation.numSteps; // Make sure that currentStep starts at 1\n        // https://github.com/chartjs/Chart.js/issues/6104\n\n        nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n        animation.currentStep = Math.min(nextStep, numSteps);\n        helpers$1.callback(animation.render, [chart, animation], chart);\n        helpers$1.callback(animation.onAnimationProgress, [animation], chart);\n\n        if (animation.currentStep >= numSteps) {\n          helpers$1.callback(animation.onAnimationComplete, [animation], chart);\n          chart.animating = false;\n          animations.splice(i, 1);\n        } else {\n          ++i;\n        }\n      }\n    }\n  };\n  var resolve = helpers$1.options.resolve;\n  var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n  /**\n   * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n   * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n   * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n   */\n\n  function listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n      array._chartjs.listeners.push(listener);\n\n      return;\n    }\n\n    Object.defineProperty(array, '_chartjs', {\n      configurable: true,\n      enumerable: false,\n      value: {\n        listeners: [listener]\n      }\n    });\n    arrayEvents.forEach(function (key) {\n      var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n      var base = array[key];\n      Object.defineProperty(array, key, {\n        configurable: true,\n        enumerable: false,\n        value: function value() {\n          var args = Array.prototype.slice.call(arguments);\n          var res = base.apply(this, args);\n          helpers$1.each(array._chartjs.listeners, function (object) {\n            if (typeof object[method] === 'function') {\n              object[method].apply(object, args);\n            }\n          });\n          return res;\n        }\n      });\n    });\n  }\n  /**\n   * Removes the given array event listener and cleanup extra attached properties (such as\n   * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n   */\n\n\n  function unlistenArrayEvents(array, listener) {\n    var stub = array._chartjs;\n\n    if (!stub) {\n      return;\n    }\n\n    var listeners = stub.listeners;\n    var index = listeners.indexOf(listener);\n\n    if (index !== -1) {\n      listeners.splice(index, 1);\n    }\n\n    if (listeners.length > 0) {\n      return;\n    }\n\n    arrayEvents.forEach(function (key) {\n      delete array[key];\n    });\n    delete array._chartjs;\n  } // Base class for all dataset controllers (line, bar, etc)\n\n\n  var DatasetController = function DatasetController(chart, datasetIndex) {\n    this.initialize(chart, datasetIndex);\n  };\n\n  helpers$1.extend(DatasetController.prototype, {\n    /**\n     * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n     * @type {Chart.core.element}\n     */\n    datasetElementType: null,\n\n    /**\n     * Element type used to generate a meta data (e.g. Chart.element.Point).\n     * @type {Chart.core.element}\n     */\n    dataElementType: null,\n    initialize: function initialize(chart, datasetIndex) {\n      var me = this;\n      me.chart = chart;\n      me.index = datasetIndex;\n      me.linkScales();\n      me.addElements();\n    },\n    updateIndex: function updateIndex(datasetIndex) {\n      this.index = datasetIndex;\n    },\n    linkScales: function linkScales() {\n      var me = this;\n      var meta = me.getMeta();\n      var dataset = me.getDataset();\n\n      if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n        meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n      }\n\n      if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n        meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n      }\n    },\n    getDataset: function getDataset() {\n      return this.chart.data.datasets[this.index];\n    },\n    getMeta: function getMeta() {\n      return this.chart.getDatasetMeta(this.index);\n    },\n    getScaleForId: function getScaleForId(scaleID) {\n      return this.chart.scales[scaleID];\n    },\n\n    /**\n     * @private\n     */\n    _getValueScaleId: function _getValueScaleId() {\n      return this.getMeta().yAxisID;\n    },\n\n    /**\n     * @private\n     */\n    _getIndexScaleId: function _getIndexScaleId() {\n      return this.getMeta().xAxisID;\n    },\n\n    /**\n     * @private\n     */\n    _getValueScale: function _getValueScale() {\n      return this.getScaleForId(this._getValueScaleId());\n    },\n\n    /**\n     * @private\n     */\n    _getIndexScale: function _getIndexScale() {\n      return this.getScaleForId(this._getIndexScaleId());\n    },\n    reset: function reset() {\n      this.update(true);\n    },\n\n    /**\n     * @private\n     */\n    destroy: function destroy() {\n      if (this._data) {\n        unlistenArrayEvents(this._data, this);\n      }\n    },\n    createMetaDataset: function createMetaDataset() {\n      var me = this;\n      var type = me.datasetElementType;\n      return type && new type({\n        _chart: me.chart,\n        _datasetIndex: me.index\n      });\n    },\n    createMetaData: function createMetaData(index) {\n      var me = this;\n      var type = me.dataElementType;\n      return type && new type({\n        _chart: me.chart,\n        _datasetIndex: me.index,\n        _index: index\n      });\n    },\n    addElements: function addElements() {\n      var me = this;\n      var meta = me.getMeta();\n      var data = me.getDataset().data || [];\n      var metaData = meta.data;\n      var i, ilen;\n\n      for (i = 0, ilen = data.length; i < ilen; ++i) {\n        metaData[i] = metaData[i] || me.createMetaData(i);\n      }\n\n      meta.dataset = meta.dataset || me.createMetaDataset();\n    },\n    addElementAndReset: function addElementAndReset(index) {\n      var element = this.createMetaData(index);\n      this.getMeta().data.splice(index, 0, element);\n      this.updateElement(element, index, true);\n    },\n    buildOrUpdateElements: function buildOrUpdateElements() {\n      var me = this;\n      var dataset = me.getDataset();\n      var data = dataset.data || (dataset.data = []); // In order to correctly handle data addition/deletion animation (an thus simulate\n      // real-time charts), we need to monitor these data modifications and synchronize\n      // the internal meta data accordingly.\n\n      if (me._data !== data) {\n        if (me._data) {\n          // This case happens when the user replaced the data array instance.\n          unlistenArrayEvents(me._data, me);\n        }\n\n        if (data && Object.isExtensible(data)) {\n          listenArrayEvents(data, me);\n        }\n\n        me._data = data;\n      } // Re-sync meta data in case the user replaced the data array or if we missed\n      // any updates and so make sure that we handle number of datapoints changing.\n\n\n      me.resyncElements();\n    },\n    update: helpers$1.noop,\n    transition: function transition(easingValue) {\n      var meta = this.getMeta();\n      var elements = meta.data || [];\n      var ilen = elements.length;\n      var i = 0;\n\n      for (; i < ilen; ++i) {\n        elements[i].transition(easingValue);\n      }\n\n      if (meta.dataset) {\n        meta.dataset.transition(easingValue);\n      }\n    },\n    draw: function draw() {\n      var meta = this.getMeta();\n      var elements = meta.data || [];\n      var ilen = elements.length;\n      var i = 0;\n\n      if (meta.dataset) {\n        meta.dataset.draw();\n      }\n\n      for (; i < ilen; ++i) {\n        elements[i].draw();\n      }\n    },\n    removeHoverStyle: function removeHoverStyle(element) {\n      helpers$1.merge(element._model, element.$previousStyle || {});\n      delete element.$previousStyle;\n    },\n    setHoverStyle: function setHoverStyle(element) {\n      var dataset = this.chart.data.datasets[element._datasetIndex];\n      var index = element._index;\n      var custom = element.custom || {};\n      var model = element._model;\n      var getHoverColor = helpers$1.getHoverColor;\n      element.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n      model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n      model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n    },\n\n    /**\n     * @private\n     */\n    resyncElements: function resyncElements() {\n      var me = this;\n      var meta = me.getMeta();\n      var data = me.getDataset().data;\n      var numMeta = meta.data.length;\n      var numData = data.length;\n\n      if (numData < numMeta) {\n        meta.data.splice(numData, numMeta - numData);\n      } else if (numData > numMeta) {\n        me.insertElements(numMeta, numData - numMeta);\n      }\n    },\n\n    /**\n     * @private\n     */\n    insertElements: function insertElements(start, count) {\n      for (var i = 0; i < count; ++i) {\n        this.addElementAndReset(start + i);\n      }\n    },\n\n    /**\n     * @private\n     */\n    onDataPush: function onDataPush() {\n      var count = arguments.length;\n      this.insertElements(this.getDataset().data.length - count, count);\n    },\n\n    /**\n     * @private\n     */\n    onDataPop: function onDataPop() {\n      this.getMeta().data.pop();\n    },\n\n    /**\n     * @private\n     */\n    onDataShift: function onDataShift() {\n      this.getMeta().data.shift();\n    },\n\n    /**\n     * @private\n     */\n    onDataSplice: function onDataSplice(start, count) {\n      this.getMeta().data.splice(start, count);\n      this.insertElements(start, arguments.length - 2);\n    },\n\n    /**\n     * @private\n     */\n    onDataUnshift: function onDataUnshift() {\n      this.insertElements(0, arguments.length);\n    }\n  });\n  DatasetController.extend = helpers$1.inherits;\n  var core_datasetController = DatasetController;\n\n  core_defaults._set('global', {\n    elements: {\n      arc: {\n        backgroundColor: core_defaults.global.defaultColor,\n        borderColor: '#fff',\n        borderWidth: 2,\n        borderAlign: 'center'\n      }\n    }\n  });\n\n  var element_arc = core_element.extend({\n    inLabelRange: function inLabelRange(mouseX) {\n      var vm = this._view;\n\n      if (vm) {\n        return Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);\n      }\n\n      return false;\n    },\n    inRange: function inRange(chartX, chartY) {\n      var vm = this._view;\n\n      if (vm) {\n        var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {\n          x: chartX,\n          y: chartY\n        });\n        var angle = pointRelativePosition.angle;\n        var distance = pointRelativePosition.distance; // Sanitise angle range\n\n        var startAngle = vm.startAngle;\n        var endAngle = vm.endAngle;\n\n        while (endAngle < startAngle) {\n          endAngle += 2.0 * Math.PI;\n        }\n\n        while (angle > endAngle) {\n          angle -= 2.0 * Math.PI;\n        }\n\n        while (angle < startAngle) {\n          angle += 2.0 * Math.PI;\n        } // Check if within the range of the open/close angle\n\n\n        var betweenAngles = angle >= startAngle && angle <= endAngle;\n        var withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;\n        return betweenAngles && withinRadius;\n      }\n\n      return false;\n    },\n    getCenterPoint: function getCenterPoint() {\n      var vm = this._view;\n      var halfAngle = (vm.startAngle + vm.endAngle) / 2;\n      var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n      return {\n        x: vm.x + Math.cos(halfAngle) * halfRadius,\n        y: vm.y + Math.sin(halfAngle) * halfRadius\n      };\n    },\n    getArea: function getArea() {\n      var vm = this._view;\n      return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n    },\n    tooltipPosition: function tooltipPosition() {\n      var vm = this._view;\n      var centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;\n      var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n      return {\n        x: vm.x + Math.cos(centreAngle) * rangeFromCentre,\n        y: vm.y + Math.sin(centreAngle) * rangeFromCentre\n      };\n    },\n    draw: function draw() {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var sA = vm.startAngle;\n      var eA = vm.endAngle;\n      var pixelMargin = vm.borderAlign === 'inner' ? 0.33 : 0;\n      var angleMargin;\n      ctx.save();\n      ctx.beginPath();\n      ctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA);\n      ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n      ctx.closePath();\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.fill();\n\n      if (vm.borderWidth) {\n        if (vm.borderAlign === 'inner') {\n          // Draw an inner border by cliping the arc and drawing a double-width border\n          // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n          ctx.beginPath();\n          angleMargin = pixelMargin / vm.outerRadius;\n          ctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin);\n\n          if (vm.innerRadius > pixelMargin) {\n            angleMargin = pixelMargin / vm.innerRadius;\n            ctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true);\n          } else {\n            ctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2);\n          }\n\n          ctx.closePath();\n          ctx.clip();\n          ctx.beginPath();\n          ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n          ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n          ctx.closePath();\n          ctx.lineWidth = vm.borderWidth * 2;\n          ctx.lineJoin = 'round';\n        } else {\n          ctx.lineWidth = vm.borderWidth;\n          ctx.lineJoin = 'bevel';\n        }\n\n        ctx.strokeStyle = vm.borderColor;\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  });\n  var valueOrDefault$1 = helpers$1.valueOrDefault;\n  var defaultColor = core_defaults.global.defaultColor;\n\n  core_defaults._set('global', {\n    elements: {\n      line: {\n        tension: 0.4,\n        backgroundColor: defaultColor,\n        borderWidth: 3,\n        borderColor: defaultColor,\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0.0,\n        borderJoinStyle: 'miter',\n        capBezierPoints: true,\n        fill: true // do we fill in the area between the line and its base axis\n\n      }\n    }\n  });\n\n  var element_line = core_element.extend({\n    draw: function draw() {\n      var me = this;\n      var vm = me._view;\n      var ctx = me._chart.ctx;\n      var spanGaps = vm.spanGaps;\n\n      var points = me._children.slice(); // clone array\n\n\n      var globalDefaults = core_defaults.global;\n      var globalOptionLineElements = globalDefaults.elements.line;\n      var lastDrawnIndex = -1;\n      var index, current, previous, currentVM; // If we are looping, adding the first point again\n\n      if (me._loop && points.length) {\n        points.push(points[0]);\n      }\n\n      ctx.save(); // Stroke Line Options\n\n      ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; // IE 9 and 10 do not support line dash\n\n      if (ctx.setLineDash) {\n        ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n      }\n\n      ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n      ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n      ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n      ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; // Stroke Line\n\n      ctx.beginPath();\n      lastDrawnIndex = -1;\n\n      for (index = 0; index < points.length; ++index) {\n        current = points[index];\n        previous = helpers$1.previousItem(points, index);\n        currentVM = current._view; // First point moves to it's starting position no matter what\n\n        if (index === 0) {\n          if (!currentVM.skip) {\n            ctx.moveTo(currentVM.x, currentVM.y);\n            lastDrawnIndex = index;\n          }\n        } else {\n          previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n          if (!currentVM.skip) {\n            if (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {\n              // There was a gap and this is the first point after the gap\n              ctx.moveTo(currentVM.x, currentVM.y);\n            } else {\n              // Line to next point\n              helpers$1.canvas.lineTo(ctx, previous._view, current._view);\n            }\n\n            lastDrawnIndex = index;\n          }\n        }\n      }\n\n      ctx.stroke();\n      ctx.restore();\n    }\n  });\n  var valueOrDefault$2 = helpers$1.valueOrDefault;\n  var defaultColor$1 = core_defaults.global.defaultColor;\n\n  core_defaults._set('global', {\n    elements: {\n      point: {\n        radius: 3,\n        pointStyle: 'circle',\n        backgroundColor: defaultColor$1,\n        borderColor: defaultColor$1,\n        borderWidth: 1,\n        // Hover\n        hitRadius: 1,\n        hoverRadius: 4,\n        hoverBorderWidth: 1\n      }\n    }\n  });\n\n  function xRange(mouseX) {\n    var vm = this._view;\n    return vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;\n  }\n\n  function yRange(mouseY) {\n    var vm = this._view;\n    return vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;\n  }\n\n  var element_point = core_element.extend({\n    inRange: function inRange(mouseX, mouseY) {\n      var vm = this._view;\n      return vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;\n    },\n    inLabelRange: xRange,\n    inXRange: xRange,\n    inYRange: yRange,\n    getCenterPoint: function getCenterPoint() {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y\n      };\n    },\n    getArea: function getArea() {\n      return Math.PI * Math.pow(this._view.radius, 2);\n    },\n    tooltipPosition: function tooltipPosition() {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y,\n        padding: vm.radius + vm.borderWidth\n      };\n    },\n    draw: function draw(chartArea) {\n      var vm = this._view;\n      var ctx = this._chart.ctx;\n      var pointStyle = vm.pointStyle;\n      var rotation = vm.rotation;\n      var radius = vm.radius;\n      var x = vm.x;\n      var y = vm.y;\n      var globalDefaults = core_defaults.global;\n      var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n      if (vm.skip) {\n        return;\n      } // Clipping for Points.\n\n\n      if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n        ctx.strokeStyle = vm.borderColor || defaultColor;\n        ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n        ctx.fillStyle = vm.backgroundColor || defaultColor;\n        helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n      }\n    }\n  });\n  var defaultColor$2 = core_defaults.global.defaultColor;\n\n  core_defaults._set('global', {\n    elements: {\n      rectangle: {\n        backgroundColor: defaultColor$2,\n        borderColor: defaultColor$2,\n        borderSkipped: 'bottom',\n        borderWidth: 0\n      }\n    }\n  });\n\n  function isVertical(vm) {\n    return vm && vm.width !== undefined;\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   */\n\n\n  function getBarBounds(vm) {\n    var x1, x2, y1, y2, half;\n\n    if (isVertical(vm)) {\n      half = vm.width / 2;\n      x1 = vm.x - half;\n      x2 = vm.x + half;\n      y1 = Math.min(vm.y, vm.base);\n      y2 = Math.max(vm.y, vm.base);\n    } else {\n      half = vm.height / 2;\n      x1 = Math.min(vm.x, vm.base);\n      x2 = Math.max(vm.x, vm.base);\n      y1 = vm.y - half;\n      y2 = vm.y + half;\n    }\n\n    return {\n      left: x1,\n      top: y1,\n      right: x2,\n      bottom: y2\n    };\n  }\n\n  function swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n  }\n\n  function parseBorderSkipped(vm) {\n    var edge = vm.borderSkipped;\n    var res = {};\n\n    if (!edge) {\n      return res;\n    }\n\n    if (vm.horizontal) {\n      if (vm.base > vm.x) {\n        edge = swap(edge, 'left', 'right');\n      }\n    } else if (vm.base < vm.y) {\n      edge = swap(edge, 'bottom', 'top');\n    }\n\n    res[edge] = true;\n    return res;\n  }\n\n  function parseBorderWidth(vm, maxW, maxH) {\n    var value = vm.borderWidth;\n    var skip = parseBorderSkipped(vm);\n    var t, r, b, l;\n\n    if (helpers$1.isObject(value)) {\n      t = +value.top || 0;\n      r = +value.right || 0;\n      b = +value.bottom || 0;\n      l = +value.left || 0;\n    } else {\n      t = r = b = l = +value || 0;\n    }\n\n    return {\n      t: skip.top || t < 0 ? 0 : t > maxH ? maxH : t,\n      r: skip.right || r < 0 ? 0 : r > maxW ? maxW : r,\n      b: skip.bottom || b < 0 ? 0 : b > maxH ? maxH : b,\n      l: skip.left || l < 0 ? 0 : l > maxW ? maxW : l\n    };\n  }\n\n  function boundingRects(vm) {\n    var bounds = getBarBounds(vm);\n    var width = bounds.right - bounds.left;\n    var height = bounds.bottom - bounds.top;\n    var border = parseBorderWidth(vm, width / 2, height / 2);\n    return {\n      outer: {\n        x: bounds.left,\n        y: bounds.top,\n        w: width,\n        h: height\n      },\n      inner: {\n        x: bounds.left + border.l,\n        y: bounds.top + border.t,\n        w: width - border.l - border.r,\n        h: height - border.t - border.b\n      }\n    };\n  }\n\n  function _inRange(vm, x, y) {\n    var skipX = x === null;\n    var skipY = y === null;\n    var bounds = !vm || skipX && skipY ? false : getBarBounds(vm);\n    return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n  }\n\n  var element_rectangle = core_element.extend({\n    draw: function draw() {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var rects = boundingRects(vm);\n      var outer = rects.outer;\n      var inner = rects.inner;\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n\n      if (outer.w === inner.w && outer.h === inner.h) {\n        return;\n      }\n\n      ctx.save();\n      ctx.beginPath();\n      ctx.rect(outer.x, outer.y, outer.w, outer.h);\n      ctx.clip();\n      ctx.fillStyle = vm.borderColor;\n      ctx.rect(inner.x, inner.y, inner.w, inner.h);\n      ctx.fill('evenodd');\n      ctx.restore();\n    },\n    height: function height() {\n      var vm = this._view;\n      return vm.base - vm.y;\n    },\n    inRange: function inRange(mouseX, mouseY) {\n      return _inRange(this._view, mouseX, mouseY);\n    },\n    inLabelRange: function inLabelRange(mouseX, mouseY) {\n      var vm = this._view;\n      return isVertical(vm) ? _inRange(vm, mouseX, null) : _inRange(vm, null, mouseY);\n    },\n    inXRange: function inXRange(mouseX) {\n      return _inRange(this._view, mouseX, null);\n    },\n    inYRange: function inYRange(mouseY) {\n      return _inRange(this._view, null, mouseY);\n    },\n    getCenterPoint: function getCenterPoint() {\n      var vm = this._view;\n      var x, y;\n\n      if (isVertical(vm)) {\n        x = vm.x;\n        y = (vm.y + vm.base) / 2;\n      } else {\n        x = (vm.x + vm.base) / 2;\n        y = vm.y;\n      }\n\n      return {\n        x: x,\n        y: y\n      };\n    },\n    getArea: function getArea() {\n      var vm = this._view;\n      return isVertical(vm) ? vm.width * Math.abs(vm.y - vm.base) : vm.height * Math.abs(vm.x - vm.base);\n    },\n    tooltipPosition: function tooltipPosition() {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y\n      };\n    }\n  });\n  var elements = {};\n  var Arc = element_arc;\n  var Line = element_line;\n  var Point = element_point;\n  var Rectangle = element_rectangle;\n  elements.Arc = Arc;\n  elements.Line = Line;\n  elements.Point = Point;\n  elements.Rectangle = Rectangle;\n  var resolve$1 = helpers$1.options.resolve;\n\n  core_defaults._set('bar', {\n    hover: {\n      mode: 'label'\n    },\n    scales: {\n      xAxes: [{\n        type: 'category',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        offset: true,\n        gridLines: {\n          offsetGridLines: true\n        }\n      }],\n      yAxes: [{\n        type: 'linear'\n      }]\n    }\n  });\n  /**\n   * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n   * @private\n   */\n\n\n  function computeMinSampleSize(scale, pixels) {\n    var min = scale.isHorizontal() ? scale.width : scale.height;\n    var ticks = scale.getTicks();\n    var prev, curr, i, ilen;\n\n    for (i = 1, ilen = pixels.length; i < ilen; ++i) {\n      min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n    }\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      curr = scale.getPixelForTick(i);\n      min = i > 0 ? Math.min(min, curr - prev) : min;\n      prev = curr;\n    }\n\n    return min;\n  }\n  /**\n   * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n   * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n   * mode currently always generates bars equally sized (until we introduce scriptable options?).\n   * @private\n   */\n\n\n  function computeFitCategoryTraits(index, ruler, options) {\n    var thickness = options.barThickness;\n    var count = ruler.stackCount;\n    var curr = ruler.pixels[index];\n    var size, ratio;\n\n    if (helpers$1.isNullOrUndef(thickness)) {\n      size = ruler.min * options.categoryPercentage;\n      ratio = options.barPercentage;\n    } else {\n      // When bar thickness is enforced, category and bar percentages are ignored.\n      // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n      // and deprecate barPercentage since this value is ignored when thickness is absolute.\n      size = thickness * count;\n      ratio = 1;\n    }\n\n    return {\n      chunk: size / count,\n      ratio: ratio,\n      start: curr - size / 2\n    };\n  }\n  /**\n   * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n   * percentage options are 1), based on the previous and following categories. This mode\n   * generates bars with different widths when data are not evenly spaced.\n   * @private\n   */\n\n\n  function computeFlexCategoryTraits(index, ruler, options) {\n    var pixels = ruler.pixels;\n    var curr = pixels[index];\n    var prev = index > 0 ? pixels[index - 1] : null;\n    var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    var percent = options.categoryPercentage;\n    var start, size;\n\n    if (prev === null) {\n      // first data: its size is double based on the next point or,\n      // if it's also the last data, we use the scale size.\n      prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n\n    if (next === null) {\n      // last data: its size is also double based on the previous point.\n      next = curr + curr - prev;\n    }\n\n    start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    size = Math.abs(next - prev) / 2 * percent;\n    return {\n      chunk: size / ruler.stackCount,\n      ratio: options.barPercentage,\n      start: start\n    };\n  }\n\n  var controller_bar = core_datasetController.extend({\n    dataElementType: elements.Rectangle,\n    initialize: function initialize() {\n      var me = this;\n      var meta;\n      core_datasetController.prototype.initialize.apply(me, arguments);\n      meta = me.getMeta();\n      meta.stack = me.getDataset().stack;\n      meta.bar = true;\n    },\n    update: function update(reset) {\n      var me = this;\n      var rects = me.getMeta().data;\n      var i, ilen;\n      me._ruler = me.getRuler();\n\n      for (i = 0, ilen = rects.length; i < ilen; ++i) {\n        me.updateElement(rects[i], i, reset);\n      }\n    },\n    updateElement: function updateElement(rectangle, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var dataset = me.getDataset();\n\n      var options = me._resolveElementOptions(rectangle, index);\n\n      rectangle._xScale = me.getScaleForId(meta.xAxisID);\n      rectangle._yScale = me.getScaleForId(meta.yAxisID);\n      rectangle._datasetIndex = me.index;\n      rectangle._index = index;\n      rectangle._model = {\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderSkipped: options.borderSkipped,\n        borderWidth: options.borderWidth,\n        datasetLabel: dataset.label,\n        label: me.chart.data.labels[index]\n      };\n\n      me._updateElementGeometry(rectangle, index, reset);\n\n      rectangle.pivot();\n    },\n\n    /**\n     * @private\n     */\n    _updateElementGeometry: function _updateElementGeometry(rectangle, index, reset) {\n      var me = this;\n      var model = rectangle._model;\n\n      var vscale = me._getValueScale();\n\n      var base = vscale.getBasePixel();\n      var horizontal = vscale.isHorizontal();\n      var ruler = me._ruler || me.getRuler();\n      var vpixels = me.calculateBarValuePixels(me.index, index);\n      var ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n      model.horizontal = horizontal;\n      model.base = reset ? base : vpixels.base;\n      model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n      model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n      model.height = horizontal ? ipixels.size : undefined;\n      model.width = horizontal ? undefined : ipixels.size;\n    },\n\n    /**\n     * Returns the stacks based on groups and bar visibility.\n     * @param {number} [last] - The dataset index\n     * @returns {string[]} The list of stack IDs\n     * @private\n     */\n    _getStacks: function _getStacks(last) {\n      var me = this;\n      var chart = me.chart;\n\n      var scale = me._getIndexScale();\n\n      var stacked = scale.options.stacked;\n      var ilen = last === undefined ? chart.data.datasets.length : last + 1;\n      var stacks = [];\n      var i, meta;\n\n      for (i = 0; i < ilen; ++i) {\n        meta = chart.getDatasetMeta(i);\n\n        if (meta.bar && chart.isDatasetVisible(i) && (stacked === false || stacked === true && stacks.indexOf(meta.stack) === -1 || stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1))) {\n          stacks.push(meta.stack);\n        }\n      }\n\n      return stacks;\n    },\n\n    /**\n     * Returns the effective number of stacks based on groups and bar visibility.\n     * @private\n     */\n    getStackCount: function getStackCount() {\n      return this._getStacks().length;\n    },\n\n    /**\n     * Returns the stack index for the given dataset based on groups and bar visibility.\n     * @param {number} [datasetIndex] - The dataset index\n     * @param {string} [name] - The stack name to find\n     * @returns {number} The stack index\n     * @private\n     */\n    getStackIndex: function getStackIndex(datasetIndex, name) {\n      var stacks = this._getStacks(datasetIndex);\n\n      var index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present\n\n      return index === -1 ? stacks.length - 1 : index;\n    },\n\n    /**\n     * @private\n     */\n    getRuler: function getRuler() {\n      var me = this;\n\n      var scale = me._getIndexScale();\n\n      var stackCount = me.getStackCount();\n      var datasetIndex = me.index;\n      var isHorizontal = scale.isHorizontal();\n      var start = isHorizontal ? scale.left : scale.top;\n      var end = start + (isHorizontal ? scale.width : scale.height);\n      var pixels = [];\n      var i, ilen, min;\n\n      for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n        pixels.push(scale.getPixelForValue(null, i, datasetIndex));\n      }\n\n      min = helpers$1.isNullOrUndef(scale.options.barThickness) ? computeMinSampleSize(scale, pixels) : -1;\n      return {\n        min: min,\n        pixels: pixels,\n        start: start,\n        end: end,\n        stackCount: stackCount,\n        scale: scale\n      };\n    },\n\n    /**\n     * Note: pixel values are not clamped to the scale area.\n     * @private\n     */\n    calculateBarValuePixels: function calculateBarValuePixels(datasetIndex, index) {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n\n      var scale = me._getValueScale();\n\n      var isHorizontal = scale.isHorizontal();\n      var datasets = chart.data.datasets;\n      var value = +scale.getRightValue(datasets[datasetIndex].data[index]);\n      var minBarLength = scale.options.minBarLength;\n      var stacked = scale.options.stacked;\n      var stack = meta.stack;\n      var start = 0;\n      var i, imeta, ivalue, base, head, size;\n\n      if (stacked || stacked === undefined && stack !== undefined) {\n        for (i = 0; i < datasetIndex; ++i) {\n          imeta = chart.getDatasetMeta(i);\n\n          if (imeta.bar && imeta.stack === stack && imeta.controller._getValueScaleId() === scale.id && chart.isDatasetVisible(i)) {\n            ivalue = +scale.getRightValue(datasets[i].data[index]);\n\n            if (value < 0 && ivalue < 0 || value >= 0 && ivalue > 0) {\n              start += ivalue;\n            }\n          }\n        }\n      }\n\n      base = scale.getPixelForValue(start);\n      head = scale.getPixelForValue(start + value);\n      size = head - base;\n\n      if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n        size = minBarLength;\n\n        if (value >= 0 && !isHorizontal || value < 0 && isHorizontal) {\n          head = base - minBarLength;\n        } else {\n          head = base + minBarLength;\n        }\n      }\n\n      return {\n        size: size,\n        base: base,\n        head: head,\n        center: head + size / 2\n      };\n    },\n\n    /**\n     * @private\n     */\n    calculateBarIndexPixels: function calculateBarIndexPixels(datasetIndex, index, ruler) {\n      var me = this;\n      var options = ruler.scale.options;\n      var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);\n      var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n      var center = range.start + range.chunk * stackIndex + range.chunk / 2;\n      var size = Math.min(helpers$1.valueOrDefault(options.maxBarThickness, Infinity), range.chunk * range.ratio);\n      return {\n        base: center - size / 2,\n        head: center + size / 2,\n        center: center,\n        size: size\n      };\n    },\n    draw: function draw() {\n      var me = this;\n      var chart = me.chart;\n\n      var scale = me._getValueScale();\n\n      var rects = me.getMeta().data;\n      var dataset = me.getDataset();\n      var ilen = rects.length;\n      var i = 0;\n      helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n\n      for (; i < ilen; ++i) {\n        if (!isNaN(scale.getRightValue(dataset.data[i]))) {\n          rects[i].draw();\n        }\n      }\n\n      helpers$1.canvas.unclipArea(chart.ctx);\n    },\n\n    /**\n     * @private\n     */\n    _resolveElementOptions: function _resolveElementOptions(rectangle, index) {\n      var me = this;\n      var chart = me.chart;\n      var datasets = chart.data.datasets;\n      var dataset = datasets[me.index];\n      var custom = rectangle.custom || {};\n      var options = chart.options.elements.rectangle;\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var keys = ['backgroundColor', 'borderColor', 'borderSkipped', 'borderWidth'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$1([custom[key], dataset[key], options[key]], context, index);\n      }\n\n      return values;\n    }\n  });\n  var valueOrDefault$3 = helpers$1.valueOrDefault;\n  var resolve$2 = helpers$1.options.resolve;\n\n  core_defaults._set('bubble', {\n    hover: {\n      mode: 'single'\n    },\n    scales: {\n      xAxes: [{\n        type: 'linear',\n        // bubble should probably use a linear scale by default\n        position: 'bottom',\n        id: 'x-axis-0' // need an ID so datasets can reference the scale\n\n      }],\n      yAxes: [{\n        type: 'linear',\n        position: 'left',\n        id: 'y-axis-0'\n      }]\n    },\n    tooltips: {\n      callbacks: {\n        title: function title() {\n          // Title doesn't make sense for scatter since we format the data as a point\n          return '';\n        },\n        label: function label(item, data) {\n          var datasetLabel = data.datasets[item.datasetIndex].label || '';\n          var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n          return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n        }\n      }\n    }\n  });\n\n  var controller_bubble = core_datasetController.extend({\n    /**\n     * @protected\n     */\n    dataElementType: elements.Point,\n\n    /**\n     * @protected\n     */\n    update: function update(reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var points = meta.data; // Update Points\n\n      helpers$1.each(points, function (point, index) {\n        me.updateElement(point, index, reset);\n      });\n    },\n\n    /**\n     * @protected\n     */\n    updateElement: function updateElement(point, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var custom = point.custom || {};\n      var xScale = me.getScaleForId(meta.xAxisID);\n      var yScale = me.getScaleForId(meta.yAxisID);\n\n      var options = me._resolveElementOptions(point, index);\n\n      var data = me.getDataset().data[index];\n      var dsIndex = me.index;\n      var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n      var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n      point._xScale = xScale;\n      point._yScale = yScale;\n      point._options = options;\n      point._datasetIndex = dsIndex;\n      point._index = index;\n      point._model = {\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        hitRadius: options.hitRadius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        radius: reset ? 0 : options.radius,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        x: x,\n        y: y\n      };\n      point.pivot();\n    },\n\n    /**\n     * @protected\n     */\n    setHoverStyle: function setHoverStyle(point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth);\n      model.radius = options.radius + options.hoverRadius;\n    },\n\n    /**\n     * @private\n     */\n    _resolveElementOptions: function _resolveElementOptions(point, index) {\n      var me = this;\n      var chart = me.chart;\n      var datasets = chart.data.datasets;\n      var dataset = datasets[me.index];\n      var custom = point.custom || {};\n      var options = chart.options.elements.point;\n      var data = dataset.data[index];\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$2([custom[key], dataset[key], options[key]], context, index);\n      } // Custom radius resolution\n\n\n      values.radius = resolve$2([custom.radius, data ? data.r : undefined, dataset.radius, options.radius], context, index);\n      return values;\n    }\n  });\n  var resolve$3 = helpers$1.options.resolve;\n  var valueOrDefault$4 = helpers$1.valueOrDefault;\n\n  core_defaults._set('doughnut', {\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    hover: {\n      mode: 'single'\n    },\n    legendCallback: function legendCallback(chart) {\n      var text = [];\n      text.push('<ul class=\"' + chart.id + '-legend\">');\n      var data = chart.data;\n      var datasets = data.datasets;\n      var labels = data.labels;\n\n      if (datasets.length) {\n        for (var i = 0; i < datasets[0].data.length; ++i) {\n          text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\n          if (labels[i]) {\n            text.push(labels[i]);\n          }\n\n          text.push('</li>');\n        }\n      }\n\n      text.push('</ul>');\n      return text.join('');\n    },\n    legend: {\n      labels: {\n        generateLabels: function generateLabels(chart) {\n          var data = chart.data;\n\n          if (data.labels.length && data.datasets.length) {\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var ds = data.datasets[0];\n              var arc = meta.data[i];\n              var custom = arc && arc.custom || {};\n              var arcOpts = chart.options.elements.arc;\n              var fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n              var stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n              var bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n              return {\n                text: label,\n                fillStyle: fill,\n                strokeStyle: stroke,\n                lineWidth: bw,\n                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n                // Extra data used for toggling the correct item\n                index: i\n              };\n            });\n          }\n\n          return [];\n        }\n      },\n      onClick: function onClick(e, legendItem) {\n        var index = legendItem.index;\n        var chart = this.chart;\n        var i, ilen, meta;\n\n        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n          meta = chart.getDatasetMeta(i); // toggle visibility of index if exists\n\n          if (meta.data[index]) {\n            meta.data[index].hidden = !meta.data[index].hidden;\n          }\n        }\n\n        chart.update();\n      }\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutoutPercentage: 50,\n    // The rotation of the chart, where the first data arc begins.\n    rotation: Math.PI * -0.5,\n    // The total circumference of the chart.\n    circumference: Math.PI * 2.0,\n    // Need to override these to give a nice default\n    tooltips: {\n      callbacks: {\n        title: function title() {\n          return '';\n        },\n        label: function label(tooltipItem, data) {\n          var dataLabel = data.labels[tooltipItem.index];\n          var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n          if (helpers$1.isArray(dataLabel)) {\n            // show value on first line of multiline label\n            // need to clone because we are changing the value\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n\n          return dataLabel;\n        }\n      }\n    }\n  });\n\n  var controller_doughnut = core_datasetController.extend({\n    dataElementType: elements.Arc,\n    linkScales: helpers$1.noop,\n    // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n    getRingIndex: function getRingIndex(datasetIndex) {\n      var ringIndex = 0;\n\n      for (var j = 0; j < datasetIndex; ++j) {\n        if (this.chart.isDatasetVisible(j)) {\n          ++ringIndex;\n        }\n      }\n\n      return ringIndex;\n    },\n    update: function update(reset) {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var availableWidth = chartArea.right - chartArea.left;\n      var availableHeight = chartArea.bottom - chartArea.top;\n      var minSize = Math.min(availableWidth, availableHeight);\n      var offset = {\n        x: 0,\n        y: 0\n      };\n      var meta = me.getMeta();\n      var arcs = meta.data;\n      var cutoutPercentage = opts.cutoutPercentage;\n      var circumference = opts.circumference;\n\n      var chartWeight = me._getRingWeight(me.index);\n\n      var i, ilen; // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\n      if (circumference < Math.PI * 2.0) {\n        var startAngle = opts.rotation % (Math.PI * 2.0);\n        startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n        var endAngle = startAngle + circumference;\n        var start = {\n          x: Math.cos(startAngle),\n          y: Math.sin(startAngle)\n        };\n        var end = {\n          x: Math.cos(endAngle),\n          y: Math.sin(endAngle)\n        };\n        var contains0 = startAngle <= 0 && endAngle >= 0 || startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle;\n        var contains90 = startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle;\n        var contains180 = startAngle <= -Math.PI && -Math.PI <= endAngle || startAngle <= Math.PI && Math.PI <= endAngle;\n        var contains270 = startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle;\n        var cutout = cutoutPercentage / 100.0;\n        var min = {\n          x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)),\n          y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))\n        };\n        var max = {\n          x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)),\n          y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))\n        };\n        var size = {\n          width: (max.x - min.x) * 0.5,\n          height: (max.y - min.y) * 0.5\n        };\n        minSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n        offset = {\n          x: (max.x + min.x) * -0.5,\n          y: (max.y + min.y) * -0.5\n        };\n      }\n\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n      }\n\n      chart.borderWidth = me.getMaxBorderWidth();\n      chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n      chart.innerRadius = Math.max(cutoutPercentage ? chart.outerRadius / 100 * cutoutPercentage : 0, 0);\n      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n      chart.offsetX = offset.x * chart.outerRadius;\n      chart.offsetY = offset.y * chart.outerRadius;\n      meta.total = me.calculateTotal();\n      me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n      me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        me.updateElement(arcs[i], i, reset);\n      }\n    },\n    updateElement: function updateElement(arc, index, reset) {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var centerX = (chartArea.left + chartArea.right) / 2;\n      var centerY = (chartArea.top + chartArea.bottom) / 2;\n      var startAngle = opts.rotation; // non reset case handled later\n\n      var endAngle = opts.rotation; // non reset case handled later\n\n      var dataset = me.getDataset();\n      var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n      var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n      var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n      var options = arc._options || {};\n      helpers$1.extend(arc, {\n        // Utility\n        _datasetIndex: me.index,\n        _index: index,\n        // Desired view properties\n        _model: {\n          backgroundColor: options.backgroundColor,\n          borderColor: options.borderColor,\n          borderWidth: options.borderWidth,\n          borderAlign: options.borderAlign,\n          x: centerX + chart.offsetX,\n          y: centerY + chart.offsetY,\n          startAngle: startAngle,\n          endAngle: endAngle,\n          circumference: circumference,\n          outerRadius: outerRadius,\n          innerRadius: innerRadius,\n          label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n        }\n      });\n      var model = arc._model; // Set correct angles if not resetting\n\n      if (!reset || !animationOpts.animateRotate) {\n        if (index === 0) {\n          model.startAngle = opts.rotation;\n        } else {\n          model.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n        }\n\n        model.endAngle = model.startAngle + model.circumference;\n      }\n\n      arc.pivot();\n    },\n    calculateTotal: function calculateTotal() {\n      var dataset = this.getDataset();\n      var meta = this.getMeta();\n      var total = 0;\n      var value;\n      helpers$1.each(meta.data, function (element, index) {\n        value = dataset.data[index];\n\n        if (!isNaN(value) && !element.hidden) {\n          total += Math.abs(value);\n        }\n      });\n      /* if (total === 0) {\n      \ttotal = NaN;\n      }*/\n\n      return total;\n    },\n    calculateCircumference: function calculateCircumference(value) {\n      var total = this.getMeta().total;\n\n      if (total > 0 && !isNaN(value)) {\n        return Math.PI * 2.0 * (Math.abs(value) / total);\n      }\n\n      return 0;\n    },\n    // gets the max border or hover width to properly scale pie charts\n    getMaxBorderWidth: function getMaxBorderWidth(arcs) {\n      var me = this;\n      var max = 0;\n      var chart = me.chart;\n      var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n\n      if (!arcs) {\n        // Find the outmost visible dataset\n        for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n          if (chart.isDatasetVisible(i)) {\n            meta = chart.getDatasetMeta(i);\n            arcs = meta.data;\n\n            if (i !== me.index) {\n              controller = meta.controller;\n            }\n\n            break;\n          }\n        }\n      }\n\n      if (!arcs) {\n        return 0;\n      }\n\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arc = arcs[i];\n        options = controller ? controller._resolveElementOptions(arc, i) : arc._options;\n\n        if (options.borderAlign !== 'inner') {\n          borderWidth = options.borderWidth;\n          hoverWidth = options.hoverBorderWidth;\n          max = borderWidth > max ? borderWidth : max;\n          max = hoverWidth > max ? hoverWidth : max;\n        }\n      }\n\n      return max;\n    },\n\n    /**\n     * @protected\n     */\n    setHoverStyle: function setHoverStyle(arc) {\n      var model = arc._model;\n      var options = arc._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      arc.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n    },\n\n    /**\n     * @private\n     */\n    _resolveElementOptions: function _resolveElementOptions(arc, index) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = me.getDataset();\n      var custom = arc.custom || {};\n      var options = chart.options.elements.arc;\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$3([custom[key], dataset[key], options[key]], context, index);\n      }\n\n      return values;\n    },\n\n    /**\n     * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n     * @private\n     */\n    _getRingWeightOffset: function _getRingWeightOffset(datasetIndex) {\n      var ringWeightOffset = 0;\n\n      for (var i = 0; i < datasetIndex; ++i) {\n        if (this.chart.isDatasetVisible(i)) {\n          ringWeightOffset += this._getRingWeight(i);\n        }\n      }\n\n      return ringWeightOffset;\n    },\n\n    /**\n     * @private\n     */\n    _getRingWeight: function _getRingWeight(dataSetIndex) {\n      return Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n    },\n\n    /**\n     * Returns the sum of all visibile data set weights.  This value can be 0.\n     * @private\n     */\n    _getVisibleDatasetWeightTotal: function _getVisibleDatasetWeightTotal() {\n      return this._getRingWeightOffset(this.chart.data.datasets.length);\n    }\n  });\n\n  core_defaults._set('horizontalBar', {\n    hover: {\n      mode: 'index',\n      axis: 'y'\n    },\n    scales: {\n      xAxes: [{\n        type: 'linear',\n        position: 'bottom'\n      }],\n      yAxes: [{\n        type: 'category',\n        position: 'left',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        offset: true,\n        gridLines: {\n          offsetGridLines: true\n        }\n      }]\n    },\n    elements: {\n      rectangle: {\n        borderSkipped: 'left'\n      }\n    },\n    tooltips: {\n      mode: 'index',\n      axis: 'y'\n    }\n  });\n\n  var controller_horizontalBar = controller_bar.extend({\n    /**\n     * @private\n     */\n    _getValueScaleId: function _getValueScaleId() {\n      return this.getMeta().xAxisID;\n    },\n\n    /**\n     * @private\n     */\n    _getIndexScaleId: function _getIndexScaleId() {\n      return this.getMeta().yAxisID;\n    }\n  });\n  var valueOrDefault$5 = helpers$1.valueOrDefault;\n  var resolve$4 = helpers$1.options.resolve;\n  var isPointInArea = helpers$1.canvas._isPointInArea;\n\n  core_defaults._set('line', {\n    showLines: true,\n    spanGaps: false,\n    hover: {\n      mode: 'label'\n    },\n    scales: {\n      xAxes: [{\n        type: 'category',\n        id: 'x-axis-0'\n      }],\n      yAxes: [{\n        type: 'linear',\n        id: 'y-axis-0'\n      }]\n    }\n  });\n\n  function lineEnabled(dataset, options) {\n    return valueOrDefault$5(dataset.showLine, options.showLines);\n  }\n\n  var controller_line = core_datasetController.extend({\n    datasetElementType: elements.Line,\n    dataElementType: elements.Point,\n    update: function update(reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var line = meta.dataset;\n      var points = meta.data || [];\n      var scale = me.getScaleForId(meta.yAxisID);\n      var dataset = me.getDataset();\n      var showLine = lineEnabled(dataset, me.chart.options);\n      var i, ilen; // Update Line\n\n      if (showLine) {\n        // Compatibility: If the properties are defined with only the old name, use those values\n        if (dataset.tension !== undefined && dataset.lineTension === undefined) {\n          dataset.lineTension = dataset.tension;\n        } // Utility\n\n\n        line._scale = scale;\n        line._datasetIndex = me.index; // Data\n\n        line._children = points; // Model\n\n        line._model = me._resolveLineOptions(line);\n        line.pivot();\n      } // Update Points\n\n\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        me.updateElement(points[i], i, reset);\n      }\n\n      if (showLine && line._model.tension !== 0) {\n        me.updateBezierControlPoints();\n      } // Now pivot the point for animation\n\n\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        points[i].pivot();\n      }\n    },\n    updateElement: function updateElement(point, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var custom = point.custom || {};\n      var dataset = me.getDataset();\n      var datasetIndex = me.index;\n      var value = dataset.data[index];\n      var yScale = me.getScaleForId(meta.yAxisID);\n      var xScale = me.getScaleForId(meta.xAxisID);\n      var lineModel = meta.dataset._model;\n      var x, y;\n\n      var options = me._resolvePointOptions(point, index);\n\n      x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n      y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); // Utility\n\n      point._xScale = xScale;\n      point._yScale = yScale;\n      point._options = options;\n      point._datasetIndex = datasetIndex;\n      point._index = index; // Desired view properties\n\n      point._model = {\n        x: x,\n        y: y,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        // Appearance\n        radius: options.radius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        tension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0),\n        steppedLine: lineModel ? lineModel.steppedLine : false,\n        // Tooltip\n        hitRadius: options.hitRadius\n      };\n    },\n\n    /**\n     * @private\n     */\n    _resolvePointOptions: function _resolvePointOptions(element, index) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = chart.data.datasets[me.index];\n      var custom = element.custom || {};\n      var options = chart.options.elements.point;\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var ELEMENT_OPTIONS = {\n        backgroundColor: 'pointBackgroundColor',\n        borderColor: 'pointBorderColor',\n        borderWidth: 'pointBorderWidth',\n        hitRadius: 'pointHitRadius',\n        hoverBackgroundColor: 'pointHoverBackgroundColor',\n        hoverBorderColor: 'pointHoverBorderColor',\n        hoverBorderWidth: 'pointHoverBorderWidth',\n        hoverRadius: 'pointHoverRadius',\n        pointStyle: 'pointStyle',\n        radius: 'pointRadius',\n        rotation: 'pointRotation'\n      };\n      var keys = Object.keys(ELEMENT_OPTIONS);\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$4([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);\n      }\n\n      return values;\n    },\n\n    /**\n     * @private\n     */\n    _resolveLineOptions: function _resolveLineOptions(element) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = chart.data.datasets[me.index];\n      var custom = element.custom || {};\n      var options = chart.options;\n      var elementOptions = options.elements.line;\n      var values = {};\n      var i, ilen, key;\n      var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill', 'cubicInterpolationMode'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$4([custom[key], dataset[key], elementOptions[key]]);\n      } // The default behavior of lines is to break at null values, according\n      // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n      // This option gives lines the ability to span gaps\n\n\n      values.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps);\n      values.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension);\n      values.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]);\n      return values;\n    },\n    calculatePointY: function calculatePointY(value, index, datasetIndex) {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n      var yScale = me.getScaleForId(meta.yAxisID);\n      var sumPos = 0;\n      var sumNeg = 0;\n      var i, ds, dsMeta;\n\n      if (yScale.options.stacked) {\n        for (i = 0; i < datasetIndex; i++) {\n          ds = chart.data.datasets[i];\n          dsMeta = chart.getDatasetMeta(i);\n\n          if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n            var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\n            if (stackedRightValue < 0) {\n              sumNeg += stackedRightValue || 0;\n            } else {\n              sumPos += stackedRightValue || 0;\n            }\n          }\n        }\n\n        var rightValue = Number(yScale.getRightValue(value));\n\n        if (rightValue < 0) {\n          return yScale.getPixelForValue(sumNeg + rightValue);\n        }\n\n        return yScale.getPixelForValue(sumPos + rightValue);\n      }\n\n      return yScale.getPixelForValue(value);\n    },\n    updateBezierControlPoints: function updateBezierControlPoints() {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n      var lineModel = meta.dataset._model;\n      var area = chart.chartArea;\n      var points = meta.data || [];\n      var i, ilen, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used\n\n      if (lineModel.spanGaps) {\n        points = points.filter(function (pt) {\n          return !pt._model.skip;\n        });\n      }\n\n      function capControlPoint(pt, min, max) {\n        return Math.max(Math.min(pt, max), min);\n      }\n\n      if (lineModel.cubicInterpolationMode === 'monotone') {\n        helpers$1.splineCurveMonotone(points);\n      } else {\n        for (i = 0, ilen = points.length; i < ilen; ++i) {\n          model = points[i]._model;\n          controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i)._model, model, helpers$1.nextItem(points, i)._model, lineModel.tension);\n          model.controlPointPreviousX = controlPoints.previous.x;\n          model.controlPointPreviousY = controlPoints.previous.y;\n          model.controlPointNextX = controlPoints.next.x;\n          model.controlPointNextY = controlPoints.next.y;\n        }\n      }\n\n      if (chart.options.elements.line.capBezierPoints) {\n        for (i = 0, ilen = points.length; i < ilen; ++i) {\n          model = points[i]._model;\n\n          if (isPointInArea(model, area)) {\n            if (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n              model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n              model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n            }\n\n            if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n              model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n              model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n            }\n          }\n        }\n      }\n    },\n    draw: function draw() {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n      var points = meta.data || [];\n      var area = chart.chartArea;\n      var ilen = points.length;\n      var halfBorderWidth;\n      var i = 0;\n\n      if (lineEnabled(me.getDataset(), chart.options)) {\n        halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;\n        helpers$1.canvas.clipArea(chart.ctx, {\n          left: area.left,\n          right: area.right,\n          top: area.top - halfBorderWidth,\n          bottom: area.bottom + halfBorderWidth\n        });\n        meta.dataset.draw();\n        helpers$1.canvas.unclipArea(chart.ctx);\n      } // Draw the points\n\n\n      for (; i < ilen; ++i) {\n        points[i].draw(area);\n      }\n    },\n\n    /**\n     * @protected\n     */\n    setHoverStyle: function setHoverStyle(point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n      model.radius = valueOrDefault$5(options.hoverRadius, options.radius);\n    }\n  });\n  var resolve$5 = helpers$1.options.resolve;\n\n  core_defaults._set('polarArea', {\n    scale: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      gridLines: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      ticks: {\n        beginAtZero: true\n      }\n    },\n    // Boolean - Whether to animate the rotation of the chart\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    startAngle: -0.5 * Math.PI,\n    legendCallback: function legendCallback(chart) {\n      var text = [];\n      text.push('<ul class=\"' + chart.id + '-legend\">');\n      var data = chart.data;\n      var datasets = data.datasets;\n      var labels = data.labels;\n\n      if (datasets.length) {\n        for (var i = 0; i < datasets[0].data.length; ++i) {\n          text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\n          if (labels[i]) {\n            text.push(labels[i]);\n          }\n\n          text.push('</li>');\n        }\n      }\n\n      text.push('</ul>');\n      return text.join('');\n    },\n    legend: {\n      labels: {\n        generateLabels: function generateLabels(chart) {\n          var data = chart.data;\n\n          if (data.labels.length && data.datasets.length) {\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var ds = data.datasets[0];\n              var arc = meta.data[i];\n              var custom = arc.custom || {};\n              var arcOpts = chart.options.elements.arc;\n              var fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n              var stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n              var bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n              return {\n                text: label,\n                fillStyle: fill,\n                strokeStyle: stroke,\n                lineWidth: bw,\n                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n                // Extra data used for toggling the correct item\n                index: i\n              };\n            });\n          }\n\n          return [];\n        }\n      },\n      onClick: function onClick(e, legendItem) {\n        var index = legendItem.index;\n        var chart = this.chart;\n        var i, ilen, meta;\n\n        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n          meta = chart.getDatasetMeta(i);\n          meta.data[index].hidden = !meta.data[index].hidden;\n        }\n\n        chart.update();\n      }\n    },\n    // Need to override these to give a nice default\n    tooltips: {\n      callbacks: {\n        title: function title() {\n          return '';\n        },\n        label: function label(item, data) {\n          return data.labels[item.index] + ': ' + item.yLabel;\n        }\n      }\n    }\n  });\n\n  var controller_polarArea = core_datasetController.extend({\n    dataElementType: elements.Arc,\n    linkScales: helpers$1.noop,\n    update: function update(reset) {\n      var me = this;\n      var dataset = me.getDataset();\n      var meta = me.getMeta();\n      var start = me.chart.options.startAngle || 0;\n      var starts = me._starts = [];\n      var angles = me._angles = [];\n      var arcs = meta.data;\n      var i, ilen, angle;\n\n      me._updateRadius();\n\n      meta.count = me.countVisibleElements();\n\n      for (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n        starts[i] = start;\n        angle = me._computeAngle(i);\n        angles[i] = angle;\n        start += angle;\n      }\n\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n        me.updateElement(arcs[i], i, reset);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _updateRadius: function _updateRadius() {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n      chart.outerRadius = Math.max(minSize / 2, 0);\n      chart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n      me.outerRadius = chart.outerRadius - chart.radiusLength * me.index;\n      me.innerRadius = me.outerRadius - chart.radiusLength;\n    },\n    updateElement: function updateElement(arc, index, reset) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = me.getDataset();\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var scale = chart.scale;\n      var labels = chart.data.labels;\n      var centerX = scale.xCenter;\n      var centerY = scale.yCenter; // var negHalfPI = -0.5 * Math.PI;\n\n      var datasetStartAngle = opts.startAngle;\n      var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n      var startAngle = me._starts[index];\n      var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n      var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n      var options = arc._options || {};\n      helpers$1.extend(arc, {\n        // Utility\n        _datasetIndex: me.index,\n        _index: index,\n        _scale: scale,\n        // Desired view properties\n        _model: {\n          backgroundColor: options.backgroundColor,\n          borderColor: options.borderColor,\n          borderWidth: options.borderWidth,\n          borderAlign: options.borderAlign,\n          x: centerX,\n          y: centerY,\n          innerRadius: 0,\n          outerRadius: reset ? resetRadius : distance,\n          startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n          endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n          label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n        }\n      });\n      arc.pivot();\n    },\n    countVisibleElements: function countVisibleElements() {\n      var dataset = this.getDataset();\n      var meta = this.getMeta();\n      var count = 0;\n      helpers$1.each(meta.data, function (element, index) {\n        if (!isNaN(dataset.data[index]) && !element.hidden) {\n          count++;\n        }\n      });\n      return count;\n    },\n\n    /**\n     * @protected\n     */\n    setHoverStyle: function setHoverStyle(arc) {\n      var model = arc._model;\n      var options = arc._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      var valueOrDefault = helpers$1.valueOrDefault;\n      arc.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n    },\n\n    /**\n     * @private\n     */\n    _resolveElementOptions: function _resolveElementOptions(arc, index) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = me.getDataset();\n      var custom = arc.custom || {};\n      var options = chart.options.elements.arc;\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$5([custom[key], dataset[key], options[key]], context, index);\n      }\n\n      return values;\n    },\n\n    /**\n     * @private\n     */\n    _computeAngle: function _computeAngle(index) {\n      var me = this;\n      var count = this.getMeta().count;\n      var dataset = me.getDataset();\n      var meta = me.getMeta();\n\n      if (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n        return 0;\n      } // Scriptable options\n\n\n      var context = {\n        chart: me.chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      return resolve$5([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);\n    }\n  });\n\n  core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\n\n  core_defaults._set('pie', {\n    cutoutPercentage: 0\n  }); // Pie charts are Doughnut chart with different defaults\n\n\n  var controller_pie = controller_doughnut;\n  var valueOrDefault$6 = helpers$1.valueOrDefault;\n  var resolve$6 = helpers$1.options.resolve;\n\n  core_defaults._set('radar', {\n    scale: {\n      type: 'radialLinear'\n    },\n    elements: {\n      line: {\n        tension: 0 // no bezier in radar\n\n      }\n    }\n  });\n\n  var controller_radar = core_datasetController.extend({\n    datasetElementType: elements.Line,\n    dataElementType: elements.Point,\n    linkScales: helpers$1.noop,\n    update: function update(reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var line = meta.dataset;\n      var points = meta.data || [];\n      var scale = me.chart.scale;\n      var dataset = me.getDataset();\n      var i, ilen; // Compatibility: If the properties are defined with only the old name, use those values\n\n      if (dataset.tension !== undefined && dataset.lineTension === undefined) {\n        dataset.lineTension = dataset.tension;\n      } // Utility\n\n\n      line._scale = scale;\n      line._datasetIndex = me.index; // Data\n\n      line._children = points;\n      line._loop = true; // Model\n\n      line._model = me._resolveLineOptions(line);\n      line.pivot(); // Update Points\n\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        me.updateElement(points[i], i, reset);\n      } // Update bezier control points\n\n\n      me.updateBezierControlPoints(); // Now pivot the point for animation\n\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        points[i].pivot();\n      }\n    },\n    updateElement: function updateElement(point, index, reset) {\n      var me = this;\n      var custom = point.custom || {};\n      var dataset = me.getDataset();\n      var scale = me.chart.scale;\n      var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n      var options = me._resolvePointOptions(point, index);\n\n      var lineModel = me.getMeta().dataset._model;\n\n      var x = reset ? scale.xCenter : pointPosition.x;\n      var y = reset ? scale.yCenter : pointPosition.y; // Utility\n\n      point._scale = scale;\n      point._options = options;\n      point._datasetIndex = me.index;\n      point._index = index; // Desired view properties\n\n      point._model = {\n        x: x,\n        // value not used in dataset scale, but we want a consistent API between scales\n        y: y,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        // Appearance\n        radius: options.radius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n        // Tooltip\n        hitRadius: options.hitRadius\n      };\n    },\n\n    /**\n     * @private\n     */\n    _resolvePointOptions: function _resolvePointOptions(element, index) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = chart.data.datasets[me.index];\n      var custom = element.custom || {};\n      var options = chart.options.elements.point;\n      var values = {};\n      var i, ilen, key; // Scriptable options\n\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      var ELEMENT_OPTIONS = {\n        backgroundColor: 'pointBackgroundColor',\n        borderColor: 'pointBorderColor',\n        borderWidth: 'pointBorderWidth',\n        hitRadius: 'pointHitRadius',\n        hoverBackgroundColor: 'pointHoverBackgroundColor',\n        hoverBorderColor: 'pointHoverBorderColor',\n        hoverBorderWidth: 'pointHoverBorderWidth',\n        hoverRadius: 'pointHoverRadius',\n        pointStyle: 'pointStyle',\n        radius: 'pointRadius',\n        rotation: 'pointRotation'\n      };\n      var keys = Object.keys(ELEMENT_OPTIONS);\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$6([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);\n      }\n\n      return values;\n    },\n\n    /**\n     * @private\n     */\n    _resolveLineOptions: function _resolveLineOptions(element) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = chart.data.datasets[me.index];\n      var custom = element.custom || {};\n      var options = chart.options.elements.line;\n      var values = {};\n      var i, ilen, key;\n      var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill'];\n\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        values[key] = resolve$6([custom[key], dataset[key], options[key]]);\n      }\n\n      values.tension = valueOrDefault$6(dataset.lineTension, options.tension);\n      return values;\n    },\n    updateBezierControlPoints: function updateBezierControlPoints() {\n      var me = this;\n      var meta = me.getMeta();\n      var area = me.chart.chartArea;\n      var points = meta.data || [];\n      var i, ilen, model, controlPoints;\n\n      function capControlPoint(pt, min, max) {\n        return Math.max(Math.min(pt, max), min);\n      }\n\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        model = points[i]._model;\n        controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i, true)._model, model, helpers$1.nextItem(points, i, true)._model, model.tension); // Prevent the bezier going outside of the bounds of the graph\n\n        model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n        model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n        model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n        model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n      }\n    },\n    setHoverStyle: function setHoverStyle(point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n      model.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n    }\n  });\n\n  core_defaults._set('scatter', {\n    hover: {\n      mode: 'single'\n    },\n    scales: {\n      xAxes: [{\n        id: 'x-axis-1',\n        // need an ID so datasets can reference the scale\n        type: 'linear',\n        // scatter should not use a category axis\n        position: 'bottom'\n      }],\n      yAxes: [{\n        id: 'y-axis-1',\n        type: 'linear',\n        position: 'left'\n      }]\n    },\n    showLines: false,\n    tooltips: {\n      callbacks: {\n        title: function title() {\n          return ''; // doesn't make sense for scatter since data are formatted as a point\n        },\n        label: function label(item) {\n          return '(' + item.xLabel + ', ' + item.yLabel + ')';\n        }\n      }\n    }\n  }); // Scatter charts use line controllers\n\n\n  var controller_scatter = controller_line; // NOTE export a map in which the key represents the controller type, not\n  // the class, and so must be CamelCase in order to be correctly retrieved\n  // by the controller in core.controller.js (`controllers[meta.type]`).\n\n  var controllers = {\n    bar: controller_bar,\n    bubble: controller_bubble,\n    doughnut: controller_doughnut,\n    horizontalBar: controller_horizontalBar,\n    line: controller_line,\n    polarArea: controller_polarArea,\n    pie: controller_pie,\n    radar: controller_radar,\n    scatter: controller_scatter\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 {object} the event position\n   */\n\n  function getRelativePosition(e, chart) {\n    if (e.native) {\n      return {\n        x: e.x,\n        y: e.y\n      };\n    }\n\n    return helpers$1.getRelativePosition(e, chart);\n  }\n  /**\n   * Helper function to traverse all of the visible elements in the chart\n   * @param {Chart} chart - the chart\n   * @param {function} handler - the callback to execute for each visible item\n   */\n\n\n  function parseVisibleItems(chart, handler) {\n    var datasets = chart.data.datasets;\n    var meta, i, j, ilen, jlen;\n\n    for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n      if (!chart.isDatasetVisible(i)) {\n        continue;\n      }\n\n      meta = chart.getDatasetMeta(i);\n\n      for (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n        var element = meta.data[j];\n\n        if (!element._view.skip) {\n          handler(element);\n        }\n      }\n    }\n  }\n  /**\n   * Helper function to get the items that intersect the event position\n   * @param {ChartElement[]} items - elements to filter\n   * @param {object} position - the point to be nearest to\n   * @return {ChartElement[]} the nearest items\n   */\n\n\n  function getIntersectItems(chart, position) {\n    var elements = [];\n    parseVisibleItems(chart, function (element) {\n      if (element.inRange(position.x, position.y)) {\n        elements.push(element);\n      }\n    });\n    return elements;\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 {object} position - the point to be nearest to\n   * @param {boolean} intersect - if true, only consider items that intersect the position\n   * @param {function} distanceMetric - function to provide the distance between points\n   * @return {ChartElement[]} the nearest items\n   */\n\n\n  function getNearestItems(chart, position, intersect, distanceMetric) {\n    var minDistance = Number.POSITIVE_INFINITY;\n    var nearestItems = [];\n    parseVisibleItems(chart, function (element) {\n      if (intersect && !element.inRange(position.x, position.y)) {\n        return;\n      }\n\n      var center = element.getCenterPoint();\n      var distance = distanceMetric(position, center);\n\n      if (distance < minDistance) {\n        nearestItems = [element];\n        minDistance = distance;\n      } else if (distance === minDistance) {\n        // Can have multiple items at the same distance in which case we sort by size\n        nearestItems.push(element);\n      }\n    });\n    return nearestItems;\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   */\n\n\n  function getDistanceMetricForAxis(axis) {\n    var useX = axis.indexOf('x') !== -1;\n    var useY = axis.indexOf('y') !== -1;\n    return function (pt1, pt2) {\n      var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n      var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n      return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n  }\n\n  function indexMode(chart, e, options) {\n    var position = getRelativePosition(e, chart); // Default axis for index mode is 'x' to match old behaviour\n\n    options.axis = options.axis || 'x';\n    var distanceMetric = getDistanceMetricForAxis(options.axis);\n    var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n    var elements = [];\n\n    if (!items.length) {\n      return [];\n    }\n\n    chart.data.datasets.forEach(function (dataset, datasetIndex) {\n      if (chart.isDatasetVisible(datasetIndex)) {\n        var meta = chart.getDatasetMeta(datasetIndex);\n        var element = meta.data[items[0]._index]; // don't count items that are skipped (null data)\n\n        if (element && !element._view.skip) {\n          elements.push(element);\n        }\n      }\n    });\n    return elements;\n  }\n  /**\n   * @interface IInteractionOptions\n   */\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   */\n\n\n  var core_interaction = {\n    // Helper function for different modes\n    modes: {\n      single: function single(chart, e) {\n        var position = getRelativePosition(e, chart);\n        var elements = [];\n        parseVisibleItems(chart, function (element) {\n          if (element.inRange(position.x, position.y)) {\n            elements.push(element);\n            return elements;\n          }\n        });\n        return elements.slice(0, 1);\n      },\n\n      /**\n       * @function Chart.Interaction.modes.label\n       * @deprecated since version 2.4.0\n       * @todo remove at version 3\n       * @private\n       */\n      label: indexMode,\n\n      /**\n       * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n       * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n       * @function Chart.Interaction.modes.index\n       * @since v2.4.0\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @param {IInteractionOptions} options - options to use during interaction\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      index: indexMode,\n\n      /**\n       * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n       * If the options.intersect is false, we find the nearest item and return the items in that dataset\n       * @function Chart.Interaction.modes.dataset\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @param {IInteractionOptions} options - options to use during interaction\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      dataset: function dataset(chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        options.axis = options.axis || 'xy';\n        var distanceMetric = getDistanceMetricForAxis(options.axis);\n        var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n        if (items.length > 0) {\n          items = chart.getDatasetMeta(items[0]._datasetIndex).data;\n        }\n\n        return items;\n      },\n\n      /**\n       * @function Chart.Interaction.modes.x-axis\n       * @deprecated since version 2.4.0. Use index mode and intersect == true\n       * @todo remove at version 3\n       * @private\n       */\n      'x-axis': function xAxis(chart, e) {\n        return indexMode(chart, e, {\n          intersect: false\n        });\n      },\n\n      /**\n       * Point mode returns all elements that hit test based on the event position\n       * of the event\n       * @function Chart.Interaction.modes.intersect\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      point: function point(chart, e) {\n        var position = getRelativePosition(e, chart);\n        return getIntersectItems(chart, position);\n      },\n\n      /**\n       * nearest mode returns the element closest to the point\n       * @function Chart.Interaction.modes.intersect\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @param {IInteractionOptions} options - options to use\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      nearest: function nearest(chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        options.axis = options.axis || 'xy';\n        var distanceMetric = getDistanceMetricForAxis(options.axis);\n        return getNearestItems(chart, position, options.intersect, distanceMetric);\n      },\n\n      /**\n       * x mode returns the elements that hit-test at the current x coordinate\n       * @function Chart.Interaction.modes.x\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @param {IInteractionOptions} options - options to use\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      x: function x(chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        var items = [];\n        var intersectsItem = false;\n        parseVisibleItems(chart, function (element) {\n          if (element.inXRange(position.x)) {\n            items.push(element);\n          }\n\n          if (element.inRange(position.x, position.y)) {\n            intersectsItem = true;\n          }\n        }); // If we want to trigger on an intersect and we don't have any items\n        // that intersect the position, return nothing\n\n        if (options.intersect && !intersectsItem) {\n          items = [];\n        }\n\n        return items;\n      },\n\n      /**\n       * y mode returns the elements that hit-test at the current y coordinate\n       * @function Chart.Interaction.modes.y\n       * @param {Chart} chart - the chart we are returning items from\n       * @param {Event} e - the event we are find things at\n       * @param {IInteractionOptions} options - options to use\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n       */\n      y: function y(chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        var items = [];\n        var intersectsItem = false;\n        parseVisibleItems(chart, function (element) {\n          if (element.inYRange(position.y)) {\n            items.push(element);\n          }\n\n          if (element.inRange(position.x, position.y)) {\n            intersectsItem = true;\n          }\n        }); // If we want to trigger on an intersect and we don't have any items\n        // that intersect the position, return nothing\n\n        if (options.intersect && !intersectsItem) {\n          items = [];\n        }\n\n        return items;\n      }\n    }\n  };\n\n  function filterByPosition(array, position) {\n    return helpers$1.where(array, function (v) {\n      return v.position === position;\n    });\n  }\n\n  function sortByWeight(array, reverse) {\n    array.forEach(function (v, i) {\n      v._tmpIndex_ = i;\n      return v;\n    });\n    array.sort(function (a, b) {\n      var v0 = reverse ? b : a;\n      var v1 = reverse ? a : b;\n      return v0.weight === v1.weight ? v0._tmpIndex_ - v1._tmpIndex_ : v0.weight - v1.weight;\n    });\n    array.forEach(function (v) {\n      delete v._tmpIndex_;\n    });\n  }\n\n  function findMaxPadding(boxes) {\n    var top = 0;\n    var left = 0;\n    var bottom = 0;\n    var right = 0;\n    helpers$1.each(boxes, function (box) {\n      if (box.getPadding) {\n        var boxPadding = box.getPadding();\n        top = Math.max(top, boxPadding.top);\n        left = Math.max(left, boxPadding.left);\n        bottom = Math.max(bottom, boxPadding.bottom);\n        right = Math.max(right, boxPadding.right);\n      }\n    });\n    return {\n      top: top,\n      left: left,\n      bottom: bottom,\n      right: right\n    };\n  }\n\n  function addSizeByPosition(boxes, size) {\n    helpers$1.each(boxes, function (box) {\n      size[box.position] += box.isHorizontal() ? box.height : box.width;\n    });\n  }\n\n  core_defaults._set('global', {\n    layout: {\n      padding: {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0\n      }\n    }\n  });\n  /**\n   * @interface ILayoutItem\n   * @prop {string} position - The position of the item in the chart layout. Possible values are\n   * 'left', 'top', 'right', 'bottom', and 'chartArea'\n   * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n   * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n   * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n   * @prop {function} update - Takes two parameters: width and height. Returns size of item\n   * @prop {function} getPadding -  Returns an object with padding on the edges\n   * @prop {number} width - Width of item. Must be valid after update()\n   * @prop {number} height - Height of item. Must be valid after update()\n   * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n   * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n   * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n   * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n   */\n  // The layout service is very self explanatory.  It's responsible for the layout within a chart.\n  // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n  // It is this service's responsibility of carrying out that layout.\n\n\n  var core_layouts = {\n    defaults: {},\n\n    /**\n     * Register a box to a chart.\n     * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n     * @param {Chart} chart - the chart to use\n     * @param {ILayoutItem} item - the item to add to be layed out\n     */\n    addBox: function addBox(chart, item) {\n      if (!chart.boxes) {\n        chart.boxes = [];\n      } // initialize item with default values\n\n\n      item.fullWidth = item.fullWidth || false;\n      item.position = item.position || 'top';\n      item.weight = item.weight || 0;\n      chart.boxes.push(item);\n    },\n\n    /**\n     * Remove a layoutItem from a chart\n     * @param {Chart} chart - the chart to remove the box from\n     * @param {ILayoutItem} layoutItem - the item to remove from the layout\n     */\n    removeBox: function removeBox(chart, layoutItem) {\n      var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n      if (index !== -1) {\n        chart.boxes.splice(index, 1);\n      }\n    },\n\n    /**\n     * Sets (or updates) options on the given `item`.\n     * @param {Chart} chart - the chart in which the item lives (or will be added to)\n     * @param {ILayoutItem} item - the item to configure with the given options\n     * @param {object} options - the new item options.\n     */\n    configure: function configure(chart, item, options) {\n      var props = ['fullWidth', 'position', 'weight'];\n      var ilen = props.length;\n      var i = 0;\n      var prop;\n\n      for (; i < ilen; ++i) {\n        prop = props[i];\n\n        if (options.hasOwnProperty(prop)) {\n          item[prop] = options[prop];\n        }\n      }\n    },\n\n    /**\n     * Fits boxes of the given chart into the given size by having each box measure itself\n     * then running a fitting algorithm\n     * @param {Chart} chart - the chart\n     * @param {number} width - the width to fit into\n     * @param {number} height - the height to fit into\n     */\n    update: function update(chart, width, height) {\n      if (!chart) {\n        return;\n      }\n\n      var layoutOptions = chart.options.layout || {};\n      var padding = helpers$1.options.toPadding(layoutOptions.padding);\n      var leftPadding = padding.left;\n      var rightPadding = padding.right;\n      var topPadding = padding.top;\n      var bottomPadding = padding.bottom;\n      var leftBoxes = filterByPosition(chart.boxes, 'left');\n      var rightBoxes = filterByPosition(chart.boxes, 'right');\n      var topBoxes = filterByPosition(chart.boxes, 'top');\n      var bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n      var chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea'); // Sort boxes by weight. A higher weight is further away from the chart area\n\n      sortByWeight(leftBoxes, true);\n      sortByWeight(rightBoxes, false);\n      sortByWeight(topBoxes, true);\n      sortByWeight(bottomBoxes, false);\n      var verticalBoxes = leftBoxes.concat(rightBoxes);\n      var horizontalBoxes = topBoxes.concat(bottomBoxes);\n      var outerBoxes = verticalBoxes.concat(horizontalBoxes); // Essentially we now have any number of boxes on each of the 4 sides.\n      // Our canvas looks like the following.\n      // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n      // B1 is the bottom axis\n      // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n      // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n      // an error will be thrown.\n      //\n      // |----------------------------------------------------|\n      // |                  T1 (Full Width)                   |\n      // |----------------------------------------------------|\n      // |    |    |                 T2                  |    |\n      // |    |----|-------------------------------------|----|\n      // |    |    | C1 |                           | C2 |    |\n      // |    |    |----|                           |----|    |\n      // |    |    |                                     |    |\n      // | L1 | L2 |           ChartArea (C0)            | R1 |\n      // |    |    |                                     |    |\n      // |    |    |----|                           |----|    |\n      // |    |    | C3 |                           | C4 |    |\n      // |    |----|-------------------------------------|----|\n      // |    |    |                 B1                  |    |\n      // |----------------------------------------------------|\n      // |                  B2 (Full Width)                   |\n      // |----------------------------------------------------|\n      //\n      // What we do to find the best sizing, we do the following\n      // 1. Determine the minimum size of the chart area.\n      // 2. Split the remaining width equally between each vertical axis\n      // 3. Split the remaining height equally between each horizontal axis\n      // 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n      // 5. Adjust the sizes of each axis based on it's minimum reported size.\n      // 6. Refit each axis\n      // 7. Position each axis in the final location\n      // 8. Tell the chart the final location of the chart area\n      // 9. Tell any axes that overlay the chart area the positions of the chart area\n      // Step 1\n\n      var chartWidth = width - leftPadding - rightPadding;\n      var chartHeight = height - topPadding - bottomPadding;\n      var chartAreaWidth = chartWidth / 2; // min 50%\n      // Step 2\n\n      var verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length; // Step 3\n      // TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837)\n      // var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length;\n      // Step 4\n\n      var maxChartAreaWidth = chartWidth;\n      var maxChartAreaHeight = chartHeight;\n      var outerBoxSizes = {\n        top: topPadding,\n        left: leftPadding,\n        bottom: bottomPadding,\n        right: rightPadding\n      };\n      var minBoxSizes = [];\n      var maxPadding;\n\n      function getMinimumBoxSize(box) {\n        var minSize;\n        var isHorizontal = box.isHorizontal();\n\n        if (isHorizontal) {\n          minSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2);\n          maxChartAreaHeight -= minSize.height;\n        } else {\n          minSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n          maxChartAreaWidth -= minSize.width;\n        }\n\n        minBoxSizes.push({\n          horizontal: isHorizontal,\n          width: minSize.width,\n          box: box\n        });\n      }\n\n      helpers$1.each(outerBoxes, getMinimumBoxSize); // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\n      maxPadding = findMaxPadding(outerBoxes); // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n      // be if the axes are drawn at their minimum sizes.\n      // Steps 5 & 6\n      // Function to fit a box\n\n      function fitBox(box) {\n        var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minBox) {\n          return minBox.box === box;\n        });\n\n        if (minBoxSize) {\n          if (minBoxSize.horizontal) {\n            var scaleMargin = {\n              left: Math.max(outerBoxSizes.left, maxPadding.left),\n              right: Math.max(outerBoxSizes.right, maxPadding.right),\n              top: 0,\n              bottom: 0\n            }; // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n            // on the margin. Sometimes they need to increase in size slightly\n\n            box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n          } else {\n            box.update(minBoxSize.width, maxChartAreaHeight);\n          }\n        }\n      } // Update, and calculate the left and right margins for the horizontal boxes\n\n\n      helpers$1.each(verticalBoxes, fitBox);\n      addSizeByPosition(verticalBoxes, outerBoxSizes); // Set the Left and Right margins for the horizontal boxes\n\n      helpers$1.each(horizontalBoxes, fitBox);\n      addSizeByPosition(horizontalBoxes, outerBoxSizes);\n\n      function finalFitVerticalBox(box) {\n        var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minSize) {\n          return minSize.box === box;\n        });\n        var scaleMargin = {\n          left: 0,\n          right: 0,\n          top: outerBoxSizes.top,\n          bottom: outerBoxSizes.bottom\n        };\n\n        if (minBoxSize) {\n          box.update(minBoxSize.width, maxChartAreaHeight, scaleMargin);\n        }\n      } // Let the left layout know the final margin\n\n\n      helpers$1.each(verticalBoxes, finalFitVerticalBox); // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\n      outerBoxSizes = {\n        top: topPadding,\n        left: leftPadding,\n        bottom: bottomPadding,\n        right: rightPadding\n      };\n      addSizeByPosition(outerBoxes, outerBoxSizes); // We may be adding some padding to account for rotated x axis labels\n\n      var leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0);\n      outerBoxSizes.left += leftPaddingAddition;\n      outerBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0);\n      var topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0);\n      outerBoxSizes.top += topPaddingAddition;\n      outerBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0); // Figure out if our chart area changed. This would occur if the dataset layout label rotation\n      // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n      // without calling `fit` again\n\n      var newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom;\n      var newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right;\n\n      if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n        helpers$1.each(verticalBoxes, function (box) {\n          box.height = newMaxChartAreaHeight;\n        });\n        helpers$1.each(horizontalBoxes, function (box) {\n          if (!box.fullWidth) {\n            box.width = newMaxChartAreaWidth;\n          }\n        });\n        maxChartAreaHeight = newMaxChartAreaHeight;\n        maxChartAreaWidth = newMaxChartAreaWidth;\n      } // Step 7 - Position the boxes\n\n\n      var left = leftPadding + leftPaddingAddition;\n      var top = topPadding + topPaddingAddition;\n\n      function placeBox(box) {\n        if (box.isHorizontal()) {\n          box.left = box.fullWidth ? leftPadding : outerBoxSizes.left;\n          box.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth;\n          box.top = top;\n          box.bottom = top + box.height; // Move to next point\n\n          top = box.bottom;\n        } else {\n          box.left = left;\n          box.right = left + box.width;\n          box.top = outerBoxSizes.top;\n          box.bottom = outerBoxSizes.top + maxChartAreaHeight; // Move to next point\n\n          left = box.right;\n        }\n      }\n\n      helpers$1.each(leftBoxes.concat(topBoxes), placeBox); // Account for chart width and height\n\n      left += maxChartAreaWidth;\n      top += maxChartAreaHeight;\n      helpers$1.each(rightBoxes, placeBox);\n      helpers$1.each(bottomBoxes, placeBox); // Step 8\n\n      chart.chartArea = {\n        left: outerBoxSizes.left,\n        top: outerBoxSizes.top,\n        right: outerBoxSizes.left + maxChartAreaWidth,\n        bottom: outerBoxSizes.top + maxChartAreaHeight\n      }; // Step 9\n\n      helpers$1.each(chartAreaBoxes, function (box) {\n        box.left = chart.chartArea.left;\n        box.top = chart.chartArea.top;\n        box.right = chart.chartArea.right;\n        box.bottom = chart.chartArea.bottom;\n        box.update(maxChartAreaWidth, maxChartAreaHeight);\n      });\n    }\n  };\n  /**\n   * Platform fallback implementation (minimal).\n   * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n   */\n\n  var platform_basic = {\n    acquireContext: function acquireContext(item) {\n      if (item && item.canvas) {\n        // Support for any object associated to a canvas (including a context2d)\n        item = item.canvas;\n      }\n\n      return item && item.getContext('2d') || null;\n    }\n  };\n  var platform_dom = \"/*\\n * DOM element rendering detection\\n * https://davidwalsh.name/detect-node-insertion\\n */\\n@keyframes chartjs-render-animation {\\n\\tfrom { opacity: 0.99; }\\n\\tto { opacity: 1; }\\n}\\n\\n.chartjs-render-monitor {\\n\\tanimation: chartjs-render-animation 0.001s;\\n}\\n\\n/*\\n * DOM element resizing detection\\n * https://github.com/marcj/css-element-queries\\n */\\n.chartjs-size-monitor,\\n.chartjs-size-monitor-expand,\\n.chartjs-size-monitor-shrink {\\n\\tposition: absolute;\\n\\tdirection: ltr;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\toverflow: hidden;\\n\\tpointer-events: none;\\n\\tvisibility: hidden;\\n\\tz-index: -1;\\n}\\n\\n.chartjs-size-monitor-expand > div {\\n\\tposition: absolute;\\n\\twidth: 1000000px;\\n\\theight: 1000000px;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\\n.chartjs-size-monitor-shrink > div {\\n\\tposition: absolute;\\n\\twidth: 200%;\\n\\theight: 200%;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\";\n  var platform_dom$1 =\n  /*#__PURE__*/\n  Object.freeze({\n    default: platform_dom\n  });\n\n  function getCjsExportFromNamespace(n) {\n    return n && n.default || n;\n  }\n\n  var stylesheet = getCjsExportFromNamespace(platform_dom$1);\n  var EXPANDO_KEY = '$chartjs';\n  var CSS_PREFIX = 'chartjs-';\n  var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\n  var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n  var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n  var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\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   */\n\n  var EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\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   */\n\n  function readUsedSize(element, property) {\n    var value = helpers$1.getStyle(element, property);\n    var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? Number(matches[1]) : undefined;\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   */\n\n\n  function initCanvas(canvas, config) {\n    var style = canvas.style; // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n    // returns null or '' if no explicit value has been set to the canvas attribute.\n\n    var renderHeight = canvas.getAttribute('height');\n    var renderWidth = canvas.getAttribute('width'); // Chart.js modifies some canvas values that we want to restore on destroy\n\n    canvas[EXPANDO_KEY] = {\n      initial: {\n        height: renderHeight,\n        width: renderWidth,\n        style: {\n          display: style.display,\n          height: style.height,\n          width: style.width\n        }\n      }\n    }; // Force canvas to display as block to avoid extra space caused by inline\n    // elements, which would interfere with the responsive resize process.\n    // https://github.com/chartjs/Chart.js/issues/2538\n\n    style.display = style.display || 'block';\n\n    if (renderWidth === null || renderWidth === '') {\n      var displayWidth = readUsedSize(canvas, 'width');\n\n      if (displayWidth !== undefined) {\n        canvas.width = displayWidth;\n      }\n    }\n\n    if (renderHeight === null || renderHeight === '') {\n      if (canvas.style.height === '') {\n        // If no explicit render height and style height, let's apply the aspect ratio,\n        // which one can be specified by the user but also by charts as default option\n        // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n        canvas.height = canvas.width / (config.options.aspectRatio || 2);\n      } else {\n        var displayHeight = readUsedSize(canvas, 'height');\n\n        if (displayWidth !== undefined) {\n          canvas.height = displayHeight;\n        }\n      }\n    }\n\n    return canvas;\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   */\n\n\n  var supportsEventListenerOptions = function () {\n    var supports = false;\n\n    try {\n      var options = Object.defineProperty({}, 'passive', {\n        // eslint-disable-next-line getter-return\n        get: function get() {\n          supports = true;\n        }\n      });\n      window.addEventListener('e', null, options);\n    } catch (e) {// continue regardless of error\n    }\n\n    return supports;\n  }(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n  // https://github.com/chartjs/Chart.js/issues/4287\n\n\n  var eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n  } : false;\n\n  function addListener(node, type, listener) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n\n  function removeListener(node, type, listener) {\n    node.removeEventListener(type, listener, eventListenerOptions);\n  }\n\n  function createEvent(type, chart, x, y, nativeEvent) {\n    return {\n      type: type,\n      chart: chart,\n      native: nativeEvent || null,\n      x: x !== undefined ? x : null,\n      y: y !== undefined ? y : null\n    };\n  }\n\n  function fromNativeEvent(event, chart) {\n    var type = EVENT_TYPES[event.type] || event.type;\n    var pos = helpers$1.getRelativePosition(event, chart);\n    return createEvent(type, chart, pos.x, pos.y, event);\n  }\n\n  function throttled(fn, thisArg) {\n    var ticking = false;\n    var args = [];\n    return function () {\n      args = Array.prototype.slice.call(arguments);\n      thisArg = thisArg || this;\n\n      if (!ticking) {\n        ticking = true;\n        helpers$1.requestAnimFrame.call(window, function () {\n          ticking = false;\n          fn.apply(thisArg, args);\n        });\n      }\n    };\n  }\n\n  function createDiv(cls) {\n    var el = document.createElement('div');\n    el.className = cls || '';\n    return el;\n  } // Implementation based on https://github.com/marcj/css-element-queries\n\n\n  function createResizer(handler) {\n    var maxSize = 1000000; // NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n    // https://github.com/chartjs/Chart.js/issues/5902\n\n    var resizer = createDiv(CSS_SIZE_MONITOR);\n    var expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n    var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n    expand.appendChild(createDiv());\n    shrink.appendChild(createDiv());\n    resizer.appendChild(expand);\n    resizer.appendChild(shrink);\n\n    resizer._reset = function () {\n      expand.scrollLeft = maxSize;\n      expand.scrollTop = maxSize;\n      shrink.scrollLeft = maxSize;\n      shrink.scrollTop = maxSize;\n    };\n\n    var onScroll = function onScroll() {\n      resizer._reset();\n\n      handler();\n    };\n\n    addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n    addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n    return resizer;\n  } // https://davidwalsh.name/detect-node-insertion\n\n\n  function watchForRender(node, handler) {\n    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n    var proxy = expando.renderProxy = function (e) {\n      if (e.animationName === CSS_RENDER_ANIMATION) {\n        handler();\n      }\n    };\n\n    helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n      addListener(node, type, proxy);\n    }); // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n    // is removed then added back immediately (same animation frame?). Accessing the\n    // `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n    // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n    // https://github.com/chartjs/Chart.js/issues/4737\n\n    expando.reflow = !!node.offsetParent;\n    node.classList.add(CSS_RENDER_MONITOR);\n  }\n\n  function unwatchForRender(node) {\n    var expando = node[EXPANDO_KEY] || {};\n    var proxy = expando.renderProxy;\n\n    if (proxy) {\n      helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n        removeListener(node, type, proxy);\n      });\n      delete expando.renderProxy;\n    }\n\n    node.classList.remove(CSS_RENDER_MONITOR);\n  }\n\n  function addResizeListener(node, listener, chart) {\n    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); // Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\n    var resizer = expando.resizer = createResizer(throttled(function () {\n      if (expando.resizer) {\n        var container = chart.options.maintainAspectRatio && node.parentNode;\n        var w = container ? container.clientWidth : 0;\n        listener(createEvent('resize', chart));\n\n        if (container && container.clientWidth < w && chart.canvas) {\n          // If the container size shrank during chart resize, let's assume\n          // scrollbar appeared. So we resize again with the scrollbar visible -\n          // effectively making chart smaller and the scrollbar hidden again.\n          // Because we are inside `throttled`, and currently `ticking`, scroll\n          // events are ignored during this whole 2 resize process.\n          // If we assumed wrong and something else happened, we are resizing\n          // twice in a frame (potential performance issue)\n          listener(createEvent('resize', chart));\n        }\n      }\n    })); // The resizer needs to be attached to the node parent, so we first need to be\n    // sure that `node` is attached to the DOM before injecting the resizer element.\n\n    watchForRender(node, function () {\n      if (expando.resizer) {\n        var container = node.parentNode;\n\n        if (container && container !== resizer.parentNode) {\n          container.insertBefore(resizer, container.firstChild);\n        } // The container size might have changed, let's reset the resizer state.\n\n\n        resizer._reset();\n      }\n    });\n  }\n\n  function removeResizeListener(node) {\n    var expando = node[EXPANDO_KEY] || {};\n    var resizer = expando.resizer;\n    delete expando.resizer;\n    unwatchForRender(node);\n\n    if (resizer && resizer.parentNode) {\n      resizer.parentNode.removeChild(resizer);\n    }\n  }\n\n  function injectCSS(platform, css) {\n    // https://stackoverflow.com/q/3922139\n    var style = platform._style || document.createElement('style');\n\n    if (!platform._style) {\n      platform._style = style;\n      css = '/* Chart.js */\\n' + css;\n      style.setAttribute('type', 'text/css');\n      document.getElementsByTagName('head')[0].appendChild(style);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n\n  var platform_dom$2 = {\n    /**\n     * When `true`, prevents the automatic injection of the stylesheet required to\n     * correctly detect when the chart is added to the DOM and then resized. This\n     * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\n     * to be manually imported to make this library compatible with any CSP.\n     * See https://github.com/chartjs/Chart.js/issues/5208\n     */\n    disableCSSInjection: false,\n\n    /**\n     * This property holds whether this platform is enabled for the current environment.\n     * Currently used by platform.js to select the proper implementation.\n     * @private\n     */\n    _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n    /**\n     * @private\n     */\n    _ensureLoaded: function _ensureLoaded() {\n      if (this._loaded) {\n        return;\n      }\n\n      this._loaded = true; // https://github.com/chartjs/Chart.js/issues/5208\n\n      if (!this.disableCSSInjection) {\n        injectCSS(this, stylesheet);\n      }\n    },\n    acquireContext: function acquireContext(item, config) {\n      if (typeof item === 'string') {\n        item = document.getElementById(item);\n      } else if (item.length) {\n        // Support for array based queries (such as jQuery)\n        item = item[0];\n      }\n\n      if (item && item.canvas) {\n        // Support for any object associated to a canvas (including a context2d)\n        item = item.canvas;\n      } // To prevent canvas fingerprinting, some add-ons undefine the getContext\n      // method, for example: https://github.com/kkapsner/CanvasBlocker\n      // https://github.com/chartjs/Chart.js/issues/2807\n\n\n      var context = item && item.getContext && item.getContext('2d'); // Load platform resources on first chart creation, to make possible to change\n      // platform options after importing the library (e.g. `disableCSSInjection`).\n\n      this._ensureLoaded(); // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n      // inside an iframe or when running in a protected environment. We could guess the\n      // types from their toString() value but let's keep things flexible and assume it's\n      // a sufficient condition if the item has a context2D which has item as `canvas`.\n      // https://github.com/chartjs/Chart.js/issues/3887\n      // https://github.com/chartjs/Chart.js/issues/4102\n      // https://github.com/chartjs/Chart.js/issues/4152\n\n\n      if (context && context.canvas === item) {\n        initCanvas(item, config);\n        return context;\n      }\n\n      return null;\n    },\n    releaseContext: function releaseContext(context) {\n      var canvas = context.canvas;\n\n      if (!canvas[EXPANDO_KEY]) {\n        return;\n      }\n\n      var initial = canvas[EXPANDO_KEY].initial;\n      ['height', 'width'].forEach(function (prop) {\n        var value = initial[prop];\n\n        if (helpers$1.isNullOrUndef(value)) {\n          canvas.removeAttribute(prop);\n        } else {\n          canvas.setAttribute(prop, value);\n        }\n      });\n      helpers$1.each(initial.style || {}, function (value, key) {\n        canvas.style[key] = value;\n      }); // The canvas render size might have been changed (and thus the state stack discarded),\n      // we can't use save() and restore() to restore the initial state. So make sure that at\n      // least the canvas context is reset to the default state by setting the canvas width.\n      // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n      // eslint-disable-next-line no-self-assign\n\n      canvas.width = canvas.width;\n      delete canvas[EXPANDO_KEY];\n    },\n    addEventListener: function addEventListener(chart, type, listener) {\n      var canvas = chart.canvas;\n\n      if (type === 'resize') {\n        // Note: the resize event is not supported on all browsers.\n        addResizeListener(canvas, listener, chart);\n        return;\n      }\n\n      var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n      var proxies = expando.proxies || (expando.proxies = {});\n\n      var proxy = proxies[chart.id + '_' + type] = function (event) {\n        listener(fromNativeEvent(event, chart));\n      };\n\n      addListener(canvas, type, proxy);\n    },\n    removeEventListener: function removeEventListener(chart, type, listener) {\n      var canvas = chart.canvas;\n\n      if (type === 'resize') {\n        // Note: the resize event is not supported on all browsers.\n        removeResizeListener(canvas);\n        return;\n      }\n\n      var expando = listener[EXPANDO_KEY] || {};\n      var proxies = expando.proxies || {};\n      var proxy = proxies[chart.id + '_' + type];\n\n      if (!proxy) {\n        return;\n      }\n\n      removeListener(canvas, type, proxy);\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   */\n\n  helpers$1.addEvent = addListener;\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   */\n\n  helpers$1.removeEvent = removeListener; // @TODO Make possible to select another platform at build time.\n\n  var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\n  /**\n   * @namespace Chart.platform\n   * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n   * @since 2.4.0\n   */\n\n  var platform = helpers$1.extend({\n    /**\n     * @since 2.7.0\n     */\n    initialize: function initialize() {},\n\n    /**\n     * Called at chart construction time, returns a context2d instance implementing\n     * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n     * @param {*} item - The native item from which to acquire context (platform specific)\n     * @param {object} options - The chart options\n     * @returns {CanvasRenderingContext2D} context2d instance\n     */\n    acquireContext: function acquireContext() {},\n\n    /**\n     * Called at chart destruction time, releases any resources associated to the context\n     * previously returned by the acquireContext() method.\n     * @param {CanvasRenderingContext2D} context - The context2d instance\n     * @returns {boolean} true if the method succeeded, else false\n     */\n    releaseContext: function releaseContext() {},\n\n    /**\n     * Registers the specified listener on the given chart.\n     * @param {Chart} chart - Chart from which to listen for event\n     * @param {string} type - The ({@link IEvent}) type to listen for\n     * @param {function} listener - Receives a notification (an object that implements\n     * the {@link IEvent} interface) when an event of the specified type occurs.\n     */\n    addEventListener: function addEventListener() {},\n\n    /**\n     * Removes the specified listener previously registered with addEventListener.\n     * @param {Chart} chart - Chart from which to remove the listener\n     * @param {string} type - The ({@link IEvent}) type to remove\n     * @param {function} listener - The listener function to remove from the event target.\n     */\n    removeEventListener: function removeEventListener() {}\n  }, implementation);\n\n  core_defaults._set('global', {\n    plugins: {}\n  });\n  /**\n   * The plugin service singleton\n   * @namespace Chart.plugins\n   * @since 2.1.0\n   */\n\n\n  var core_plugins = {\n    /**\n     * Globally registered plugins.\n     * @private\n     */\n    _plugins: [],\n\n    /**\n     * This identifier is used to invalidate the descriptors cache attached to each chart\n     * when a global plugin is registered or unregistered. In this case, the cache ID is\n     * incremented and descriptors are regenerated during following API calls.\n     * @private\n     */\n    _cacheId: 0,\n\n    /**\n     * Registers the given plugin(s) if not already registered.\n     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n     */\n    register: function register(plugins) {\n      var p = this._plugins;\n      [].concat(plugins).forEach(function (plugin) {\n        if (p.indexOf(plugin) === -1) {\n          p.push(plugin);\n        }\n      });\n      this._cacheId++;\n    },\n\n    /**\n     * Unregisters the given plugin(s) only if registered.\n     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n     */\n    unregister: function unregister(plugins) {\n      var p = this._plugins;\n      [].concat(plugins).forEach(function (plugin) {\n        var idx = p.indexOf(plugin);\n\n        if (idx !== -1) {\n          p.splice(idx, 1);\n        }\n      });\n      this._cacheId++;\n    },\n\n    /**\n     * Remove all registered plugins.\n     * @since 2.1.5\n     */\n    clear: function clear() {\n      this._plugins = [];\n      this._cacheId++;\n    },\n\n    /**\n     * Returns the number of registered plugins?\n     * @returns {number}\n     * @since 2.1.5\n     */\n    count: function count() {\n      return this._plugins.length;\n    },\n\n    /**\n     * Returns all registered plugin instances.\n     * @returns {IPlugin[]} array of plugin objects.\n     * @since 2.1.5\n     */\n    getAll: function getAll() {\n      return this._plugins;\n    },\n\n    /**\n     * Calls enabled plugins for `chart` on the specified hook and with the given args.\n     * This method immediately returns as soon as a plugin explicitly returns false. The\n     * returned value can be used, for instance, to interrupt the current action.\n     * @param {Chart} chart - The chart instance for which plugins should be called.\n     * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n     * @param {Array} [args] - Extra arguments to apply to the hook call.\n     * @returns {boolean} false if any of the plugins return false, else returns true.\n     */\n    notify: function notify(chart, hook, args) {\n      var descriptors = this.descriptors(chart);\n      var ilen = descriptors.length;\n      var i, descriptor, plugin, params, method;\n\n      for (i = 0; i < ilen; ++i) {\n        descriptor = descriptors[i];\n        plugin = descriptor.plugin;\n        method = plugin[hook];\n\n        if (typeof method === 'function') {\n          params = [chart].concat(args || []);\n          params.push(descriptor.options);\n\n          if (method.apply(plugin, params) === false) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * Returns descriptors of enabled plugins for the given chart.\n     * @returns {object[]} [{ plugin, options }]\n     * @private\n     */\n    descriptors: function descriptors(chart) {\n      var cache = chart.$plugins || (chart.$plugins = {});\n\n      if (cache.id === this._cacheId) {\n        return cache.descriptors;\n      }\n\n      var plugins = [];\n      var descriptors = [];\n      var config = chart && chart.config || {};\n      var options = config.options && config.options.plugins || {};\n\n      this._plugins.concat(config.plugins || []).forEach(function (plugin) {\n        var idx = plugins.indexOf(plugin);\n\n        if (idx !== -1) {\n          return;\n        }\n\n        var id = plugin.id;\n        var opts = options[id];\n\n        if (opts === false) {\n          return;\n        }\n\n        if (opts === true) {\n          opts = helpers$1.clone(core_defaults.global.plugins[id]);\n        }\n\n        plugins.push(plugin);\n        descriptors.push({\n          plugin: plugin,\n          options: opts || {}\n        });\n      });\n\n      cache.descriptors = descriptors;\n      cache.id = this._cacheId;\n      return descriptors;\n    },\n\n    /**\n     * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\n     * but in some cases, this reference can be changed by the user when updating options.\n     * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n     * @private\n     */\n    _invalidate: function _invalidate(chart) {\n      delete chart.$plugins;\n    }\n  };\n  var core_scaleService = {\n    // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n    // use the new chart options to grab the correct scale\n    constructors: {},\n    // Use a registration function so that we can move to an ES6 map when we no longer need to support\n    // old browsers\n    // Scale config defaults\n    defaults: {},\n    registerScaleType: function registerScaleType(type, scaleConstructor, scaleDefaults) {\n      this.constructors[type] = scaleConstructor;\n      this.defaults[type] = helpers$1.clone(scaleDefaults);\n    },\n    getScaleConstructor: function getScaleConstructor(type) {\n      return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n    },\n    getScaleDefaults: function getScaleDefaults(type) {\n      // Return the scale defaults merged with the global settings so that we always use the latest ones\n      return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};\n    },\n    updateScaleDefaults: function updateScaleDefaults(type, additions) {\n      var me = this;\n\n      if (me.defaults.hasOwnProperty(type)) {\n        me.defaults[type] = helpers$1.extend(me.defaults[type], additions);\n      }\n    },\n    addScalesToLayout: function addScalesToLayout(chart) {\n      // Adds each scale to the chart.boxes array to be sized accordingly\n      helpers$1.each(chart.scales, function (scale) {\n        // Set ILayoutItem parameters for backwards compatibility\n        scale.fullWidth = scale.options.fullWidth;\n        scale.position = scale.options.position;\n        scale.weight = scale.options.weight;\n        core_layouts.addBox(chart, scale);\n      });\n    }\n  };\n  var valueOrDefault$7 = helpers$1.valueOrDefault;\n\n  core_defaults._set('global', {\n    tooltips: {\n      enabled: true,\n      custom: null,\n      mode: 'nearest',\n      position: 'average',\n      intersect: true,\n      backgroundColor: 'rgba(0,0,0,0.8)',\n      titleFontStyle: 'bold',\n      titleSpacing: 2,\n      titleMarginBottom: 6,\n      titleFontColor: '#fff',\n      titleAlign: 'left',\n      bodySpacing: 2,\n      bodyFontColor: '#fff',\n      bodyAlign: 'left',\n      footerFontStyle: 'bold',\n      footerSpacing: 2,\n      footerMarginTop: 6,\n      footerFontColor: '#fff',\n      footerAlign: 'left',\n      yPadding: 6,\n      xPadding: 6,\n      caretPadding: 2,\n      caretSize: 5,\n      cornerRadius: 6,\n      multiKeyBackground: '#fff',\n      displayColors: true,\n      borderColor: 'rgba(0,0,0,0)',\n      borderWidth: 0,\n      callbacks: {\n        // Args are: (tooltipItems, data)\n        beforeTitle: helpers$1.noop,\n        title: function title(tooltipItems, data) {\n          var title = '';\n          var labels = data.labels;\n          var labelCount = labels ? labels.length : 0;\n\n          if (tooltipItems.length > 0) {\n            var item = tooltipItems[0];\n\n            if (item.label) {\n              title = item.label;\n            } else if (item.xLabel) {\n              title = item.xLabel;\n            } else if (labelCount > 0 && item.index < labelCount) {\n              title = labels[item.index];\n            }\n          }\n\n          return title;\n        },\n        afterTitle: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        beforeBody: helpers$1.noop,\n        // Args are: (tooltipItem, data)\n        beforeLabel: helpers$1.noop,\n        label: function label(tooltipItem, data) {\n          var label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n          if (label) {\n            label += ': ';\n          }\n\n          if (!helpers$1.isNullOrUndef(tooltipItem.value)) {\n            label += tooltipItem.value;\n          } else {\n            label += tooltipItem.yLabel;\n          }\n\n          return label;\n        },\n        labelColor: function labelColor(tooltipItem, chart) {\n          var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n          var activeElement = meta.data[tooltipItem.index];\n          var view = activeElement._view;\n          return {\n            borderColor: view.borderColor,\n            backgroundColor: view.backgroundColor\n          };\n        },\n        labelTextColor: function labelTextColor() {\n          return this._options.bodyFontColor;\n        },\n        afterLabel: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        afterBody: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        beforeFooter: helpers$1.noop,\n        footer: helpers$1.noop,\n        afterFooter: helpers$1.noop\n      }\n    }\n  });\n\n  var positioners = {\n    /**\n     * Average mode places the tooltip at the average position of the elements shown\n     * @function Chart.Tooltip.positioners.average\n     * @param elements {ChartElement[]} the elements being displayed in the tooltip\n     * @returns {object} tooltip position\n     */\n    average: function average(elements) {\n      if (!elements.length) {\n        return false;\n      }\n\n      var i, len;\n      var x = 0;\n      var y = 0;\n      var count = 0;\n\n      for (i = 0, len = elements.length; i < len; ++i) {\n        var el = elements[i];\n\n        if (el && el.hasValue()) {\n          var pos = el.tooltipPosition();\n          x += pos.x;\n          y += pos.y;\n          ++count;\n        }\n      }\n\n      return {\n        x: x / count,\n        y: y / count\n      };\n    },\n\n    /**\n     * Gets the tooltip position nearest of the item nearest to the event position\n     * @function Chart.Tooltip.positioners.nearest\n     * @param elements {Chart.Element[]} the tooltip elements\n     * @param eventPosition {object} the position of the event in canvas coordinates\n     * @returns {object} the tooltip position\n     */\n    nearest: function nearest(elements, eventPosition) {\n      var x = eventPosition.x;\n      var y = eventPosition.y;\n      var minDistance = Number.POSITIVE_INFINITY;\n      var i, len, nearestElement;\n\n      for (i = 0, len = elements.length; i < len; ++i) {\n        var el = elements[i];\n\n        if (el && el.hasValue()) {\n          var center = el.getCenterPoint();\n          var d = helpers$1.distanceBetweenPoints(eventPosition, center);\n\n          if (d < minDistance) {\n            minDistance = d;\n            nearestElement = el;\n          }\n        }\n      }\n\n      if (nearestElement) {\n        var tp = nearestElement.tooltipPosition();\n        x = tp.x;\n        y = tp.y;\n      }\n\n      return {\n        x: x,\n        y: y\n      };\n    }\n  }; // Helper to push or concat based on if the 2nd parameter is an array or not\n\n  function pushOrConcat(base, toPush) {\n    if (toPush) {\n      if (helpers$1.isArray(toPush)) {\n        // base = base.concat(toPush);\n        Array.prototype.push.apply(base, toPush);\n      } else {\n        base.push(toPush);\n      }\n    }\n\n    return base;\n  }\n  /**\n   * Returns array of strings split by newline\n   * @param {string} value - The value to split by newline.\n   * @returns {string[]} value if newline present - Returned from String split() method\n   * @function\n   */\n\n\n  function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n      return str.split('\\n');\n    }\n\n    return str;\n  }\n  /**\n   * Private helper to create a tooltip item model\n   * @param element - the chart element (point, arc, bar) to create the tooltip item for\n   * @return new tooltip item\n   */\n\n\n  function createTooltipItem(element) {\n    var xScale = element._xScale;\n    var yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\n    var index = element._index;\n    var datasetIndex = element._datasetIndex;\n\n    var controller = element._chart.getDatasetMeta(datasetIndex).controller;\n\n    var indexScale = controller._getIndexScale();\n\n    var valueScale = controller._getValueScale();\n\n    return {\n      xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n      yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n      label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\n      value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\n      index: index,\n      datasetIndex: datasetIndex,\n      x: element._model.x,\n      y: element._model.y\n    };\n  }\n  /**\n   * Helper to get the reset model for the tooltip\n   * @param tooltipOpts {object} the tooltip options\n   */\n\n\n  function getBaseModel(tooltipOpts) {\n    var globalDefaults = core_defaults.global;\n    return {\n      // Positioning\n      xPadding: tooltipOpts.xPadding,\n      yPadding: tooltipOpts.yPadding,\n      xAlign: tooltipOpts.xAlign,\n      yAlign: tooltipOpts.yAlign,\n      // Body\n      bodyFontColor: tooltipOpts.bodyFontColor,\n      _bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n      _bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n      _bodyAlign: tooltipOpts.bodyAlign,\n      bodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n      bodySpacing: tooltipOpts.bodySpacing,\n      // Title\n      titleFontColor: tooltipOpts.titleFontColor,\n      _titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n      _titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n      titleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n      _titleAlign: tooltipOpts.titleAlign,\n      titleSpacing: tooltipOpts.titleSpacing,\n      titleMarginBottom: tooltipOpts.titleMarginBottom,\n      // Footer\n      footerFontColor: tooltipOpts.footerFontColor,\n      _footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n      _footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n      footerFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n      _footerAlign: tooltipOpts.footerAlign,\n      footerSpacing: tooltipOpts.footerSpacing,\n      footerMarginTop: tooltipOpts.footerMarginTop,\n      // Appearance\n      caretSize: tooltipOpts.caretSize,\n      cornerRadius: tooltipOpts.cornerRadius,\n      backgroundColor: tooltipOpts.backgroundColor,\n      opacity: 0,\n      legendColorBackground: tooltipOpts.multiKeyBackground,\n      displayColors: tooltipOpts.displayColors,\n      borderColor: tooltipOpts.borderColor,\n      borderWidth: tooltipOpts.borderWidth\n    };\n  }\n  /**\n   * Get the size of the tooltip\n   */\n\n\n  function getTooltipSize(tooltip, model) {\n    var ctx = tooltip._chart.ctx;\n    var height = model.yPadding * 2; // Tooltip Padding\n\n    var width = 0; // Count of all lines in the body\n\n    var body = model.body;\n    var combinedBodyLength = body.reduce(function (count, bodyItem) {\n      return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n    }, 0);\n    combinedBodyLength += model.beforeBody.length + model.afterBody.length;\n    var titleLineCount = model.title.length;\n    var footerLineCount = model.footer.length;\n    var titleFontSize = model.titleFontSize;\n    var bodyFontSize = model.bodyFontSize;\n    var footerFontSize = model.footerFontSize;\n    height += titleLineCount * titleFontSize; // Title Lines\n\n    height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\n    height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\n    height += combinedBodyLength * bodyFontSize; // Body Lines\n\n    height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\n    height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\n    height += footerLineCount * footerFontSize; // Footer Lines\n\n    height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n    // Title width\n\n    var widthPadding = 0;\n\n    var maxLineWidth = function maxLineWidth(line) {\n      width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n\n    ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n    helpers$1.each(model.title, maxLineWidth); // Body width\n\n    ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n    helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth); // Body lines may include some extra width due to the color box\n\n    widthPadding = model.displayColors ? bodyFontSize + 2 : 0;\n    helpers$1.each(body, function (bodyItem) {\n      helpers$1.each(bodyItem.before, maxLineWidth);\n      helpers$1.each(bodyItem.lines, maxLineWidth);\n      helpers$1.each(bodyItem.after, maxLineWidth);\n    }); // Reset back to 0\n\n    widthPadding = 0; // Footer width\n\n    ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n    helpers$1.each(model.footer, maxLineWidth); // Add padding\n\n    width += 2 * model.xPadding;\n    return {\n      width: width,\n      height: height\n    };\n  }\n  /**\n   * Helper to get the alignment of a tooltip given the size\n   */\n\n\n  function determineAlignment(tooltip, size) {\n    var model = tooltip._model;\n    var chart = tooltip._chart;\n    var chartArea = tooltip._chart.chartArea;\n    var xAlign = 'center';\n    var yAlign = 'center';\n\n    if (model.y < size.height) {\n      yAlign = 'top';\n    } else if (model.y > chart.height - size.height) {\n      yAlign = 'bottom';\n    }\n\n    var lf, rf; // functions to determine left, right alignment\n\n    var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\n    var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\n    var midX = (chartArea.left + chartArea.right) / 2;\n    var midY = (chartArea.top + chartArea.bottom) / 2;\n\n    if (yAlign === 'center') {\n      lf = function lf(x) {\n        return x <= midX;\n      };\n\n      rf = function rf(x) {\n        return x > midX;\n      };\n    } else {\n      lf = function lf(x) {\n        return x <= size.width / 2;\n      };\n\n      rf = function rf(x) {\n        return x >= chart.width - size.width / 2;\n      };\n    }\n\n    olf = function olf(x) {\n      return x + size.width + model.caretSize + model.caretPadding > chart.width;\n    };\n\n    orf = function orf(x) {\n      return x - size.width - model.caretSize - model.caretPadding < 0;\n    };\n\n    yf = function yf(y) {\n      return y <= midY ? 'top' : 'bottom';\n    };\n\n    if (lf(model.x)) {\n      xAlign = 'left'; // Is tooltip too wide and goes over the right side of the chart.?\n\n      if (olf(model.x)) {\n        xAlign = 'center';\n        yAlign = yf(model.y);\n      }\n    } else if (rf(model.x)) {\n      xAlign = 'right'; // Is tooltip too wide and goes outside left edge of canvas?\n\n      if (orf(model.x)) {\n        xAlign = 'center';\n        yAlign = yf(model.y);\n      }\n    }\n\n    var opts = tooltip._options;\n    return {\n      xAlign: opts.xAlign ? opts.xAlign : xAlign,\n      yAlign: opts.yAlign ? opts.yAlign : yAlign\n    };\n  }\n  /**\n   * 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   */\n\n\n  function getBackgroundPoint(vm, size, alignment, chart) {\n    // Background Position\n    var x = vm.x;\n    var y = vm.y;\n    var caretSize = vm.caretSize;\n    var caretPadding = vm.caretPadding;\n    var cornerRadius = vm.cornerRadius;\n    var xAlign = alignment.xAlign;\n    var yAlign = alignment.yAlign;\n    var paddingAndSize = caretSize + caretPadding;\n    var radiusAndPadding = cornerRadius + caretPadding;\n\n    if (xAlign === 'right') {\n      x -= size.width;\n    } else if (xAlign === 'center') {\n      x -= size.width / 2;\n\n      if (x + size.width > chart.width) {\n        x = chart.width - size.width;\n      }\n\n      if (x < 0) {\n        x = 0;\n      }\n    }\n\n    if (yAlign === 'top') {\n      y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n      y -= size.height + paddingAndSize;\n    } else {\n      y -= size.height / 2;\n    }\n\n    if (yAlign === 'center') {\n      if (xAlign === 'left') {\n        x += paddingAndSize;\n      } else if (xAlign === 'right') {\n        x -= paddingAndSize;\n      }\n    } else if (xAlign === 'left') {\n      x -= radiusAndPadding;\n    } else if (xAlign === 'right') {\n      x += radiusAndPadding;\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  }\n\n  function getAlignedX(vm, align) {\n    return align === 'center' ? vm.x + vm.width / 2 : align === 'right' ? vm.x + vm.width - vm.xPadding : vm.x + vm.xPadding;\n  }\n  /**\n   * Helper to build before and after body lines\n   */\n\n\n  function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n  }\n\n  var exports$3 = core_element.extend({\n    initialize: function initialize() {\n      this._model = getBaseModel(this._options);\n      this._lastActive = [];\n    },\n    // Get the title\n    // Args are: (tooltipItem, data)\n    getTitle: function getTitle() {\n      var me = this;\n      var opts = me._options;\n      var callbacks = opts.callbacks;\n      var beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n      var title = callbacks.title.apply(me, arguments);\n      var afterTitle = callbacks.afterTitle.apply(me, arguments);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n      lines = pushOrConcat(lines, splitNewlines(title));\n      lines = pushOrConcat(lines, splitNewlines(afterTitle));\n      return lines;\n    },\n    // Args are: (tooltipItem, data)\n    getBeforeBody: function getBeforeBody() {\n      return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n    },\n    // Args are: (tooltipItem, data)\n    getBody: function getBody(tooltipItems, data) {\n      var me = this;\n      var callbacks = me._options.callbacks;\n      var bodyItems = [];\n      helpers$1.each(tooltipItems, function (tooltipItem) {\n        var bodyItem = {\n          before: [],\n          lines: [],\n          after: []\n        };\n        pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n        pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n        pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n        bodyItems.push(bodyItem);\n      });\n      return bodyItems;\n    },\n    // Args are: (tooltipItem, data)\n    getAfterBody: function getAfterBody() {\n      return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n    },\n    // Get the footer and beforeFooter and afterFooter lines\n    // Args are: (tooltipItem, data)\n    getFooter: function getFooter() {\n      var me = this;\n      var callbacks = me._options.callbacks;\n      var beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n      var footer = callbacks.footer.apply(me, arguments);\n      var afterFooter = callbacks.afterFooter.apply(me, arguments);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n      lines = pushOrConcat(lines, splitNewlines(footer));\n      lines = pushOrConcat(lines, splitNewlines(afterFooter));\n      return lines;\n    },\n    update: function update(changed) {\n      var me = this;\n      var opts = me._options; // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n      // 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      // which breaks any animations.\n\n      var existingModel = me._model;\n      var model = me._model = getBaseModel(opts);\n      var active = me._active;\n      var data = me._data; // In the case where active.length === 0 we need to keep these at existing values for good animations\n\n      var alignment = {\n        xAlign: existingModel.xAlign,\n        yAlign: existingModel.yAlign\n      };\n      var backgroundPoint = {\n        x: existingModel.x,\n        y: existingModel.y\n      };\n      var tooltipSize = {\n        width: existingModel.width,\n        height: existingModel.height\n      };\n      var tooltipPosition = {\n        x: existingModel.caretX,\n        y: existingModel.caretY\n      };\n      var i, len;\n\n      if (active.length) {\n        model.opacity = 1;\n        var labelColors = [];\n        var labelTextColors = [];\n        tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n        var tooltipItems = [];\n\n        for (i = 0, len = active.length; i < len; ++i) {\n          tooltipItems.push(createTooltipItem(active[i]));\n        } // If the user provided a filter function, use it to modify the tooltip items\n\n\n        if (opts.filter) {\n          tooltipItems = tooltipItems.filter(function (a) {\n            return opts.filter(a, data);\n          });\n        } // If the user provided a sorting function, use it to modify the tooltip items\n\n\n        if (opts.itemSort) {\n          tooltipItems = tooltipItems.sort(function (a, b) {\n            return opts.itemSort(a, b, data);\n          });\n        } // Determine colors for boxes\n\n\n        helpers$1.each(tooltipItems, function (tooltipItem) {\n          labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n          labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n        }); // Build the Text Lines\n\n        model.title = me.getTitle(tooltipItems, data);\n        model.beforeBody = me.getBeforeBody(tooltipItems, data);\n        model.body = me.getBody(tooltipItems, data);\n        model.afterBody = me.getAfterBody(tooltipItems, data);\n        model.footer = me.getFooter(tooltipItems, data); // Initial positioning and colors\n\n        model.x = tooltipPosition.x;\n        model.y = tooltipPosition.y;\n        model.caretPadding = opts.caretPadding;\n        model.labelColors = labelColors;\n        model.labelTextColors = labelTextColors; // data points\n\n        model.dataPoints = tooltipItems; // We need to determine alignment of the tooltip\n\n        tooltipSize = getTooltipSize(this, model);\n        alignment = determineAlignment(this, tooltipSize); // Final Size and Position\n\n        backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n      } else {\n        model.opacity = 0;\n      }\n\n      model.xAlign = alignment.xAlign;\n      model.yAlign = alignment.yAlign;\n      model.x = backgroundPoint.x;\n      model.y = backgroundPoint.y;\n      model.width = tooltipSize.width;\n      model.height = tooltipSize.height; // Point where the caret on the tooltip points to\n\n      model.caretX = tooltipPosition.x;\n      model.caretY = tooltipPosition.y;\n      me._model = model;\n\n      if (changed && opts.custom) {\n        opts.custom.call(me, model);\n      }\n\n      return me;\n    },\n    drawCaret: function drawCaret(tooltipPoint, size) {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n      ctx.lineTo(caretPosition.x1, caretPosition.y1);\n      ctx.lineTo(caretPosition.x2, caretPosition.y2);\n      ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    },\n    getCaretPosition: function getCaretPosition(tooltipPoint, size, vm) {\n      var x1, x2, x3, y1, y2, y3;\n      var caretSize = vm.caretSize;\n      var cornerRadius = vm.cornerRadius;\n      var xAlign = vm.xAlign;\n      var yAlign = vm.yAlign;\n      var ptX = tooltipPoint.x;\n      var ptY = tooltipPoint.y;\n      var width = size.width;\n      var height = size.height;\n\n      if (yAlign === 'center') {\n        y2 = ptY + height / 2;\n\n        if (xAlign === 'left') {\n          x1 = ptX;\n          x2 = x1 - caretSize;\n          x3 = x1;\n          y1 = y2 + caretSize;\n          y3 = y2 - caretSize;\n        } else {\n          x1 = ptX + width;\n          x2 = x1 + caretSize;\n          x3 = x1;\n          y1 = y2 - caretSize;\n          y3 = y2 + caretSize;\n        }\n      } else {\n        if (xAlign === 'left') {\n          x2 = ptX + cornerRadius + caretSize;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        } else if (xAlign === 'right') {\n          x2 = ptX + width - cornerRadius - caretSize;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        } else {\n          x2 = vm.caretX;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        }\n\n        if (yAlign === 'top') {\n          y1 = ptY;\n          y2 = y1 - caretSize;\n          y3 = y1;\n        } else {\n          y1 = ptY + height;\n          y2 = y1 + caretSize;\n          y3 = y1; // invert drawing order\n\n          var tmp = x3;\n          x3 = x1;\n          x1 = tmp;\n        }\n      }\n\n      return {\n        x1: x1,\n        x2: x2,\n        x3: x3,\n        y1: y1,\n        y2: y2,\n        y3: y3\n      };\n    },\n    drawTitle: function drawTitle(pt, vm, ctx) {\n      var title = vm.title;\n\n      if (title.length) {\n        pt.x = getAlignedX(vm, vm._titleAlign);\n        ctx.textAlign = vm._titleAlign;\n        ctx.textBaseline = 'top';\n        var titleFontSize = vm.titleFontSize;\n        var titleSpacing = vm.titleSpacing;\n        ctx.fillStyle = vm.titleFontColor;\n        ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n        var i, len;\n\n        for (i = 0, len = title.length; i < len; ++i) {\n          ctx.fillText(title[i], pt.x, pt.y);\n          pt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n          if (i + 1 === title.length) {\n            pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n          }\n        }\n      }\n    },\n    drawBody: function drawBody(pt, vm, ctx) {\n      var bodyFontSize = vm.bodyFontSize;\n      var bodySpacing = vm.bodySpacing;\n      var bodyAlign = vm._bodyAlign;\n      var body = vm.body;\n      var drawColorBoxes = vm.displayColors;\n      var labelColors = vm.labelColors;\n      var xLinePadding = 0;\n      var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\n      var textColor;\n      ctx.textAlign = bodyAlign;\n      ctx.textBaseline = 'top';\n      ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n      pt.x = getAlignedX(vm, bodyAlign); // Before Body\n\n      var fillLineOfText = function fillLineOfText(line) {\n        ctx.fillText(line, pt.x + xLinePadding, pt.y);\n        pt.y += bodyFontSize + bodySpacing;\n      }; // Before body lines\n\n\n      ctx.fillStyle = vm.bodyFontColor;\n      helpers$1.each(vm.beforeBody, fillLineOfText);\n      xLinePadding = drawColorBoxes && bodyAlign !== 'right' ? bodyAlign === 'center' ? bodyFontSize / 2 + 1 : bodyFontSize + 2 : 0; // Draw body lines now\n\n      helpers$1.each(body, function (bodyItem, i) {\n        textColor = vm.labelTextColors[i];\n        ctx.fillStyle = textColor;\n        helpers$1.each(bodyItem.before, fillLineOfText);\n        helpers$1.each(bodyItem.lines, function (line) {\n          // Draw Legend-like boxes if needed\n          if (drawColorBoxes) {\n            // Fill a white rect so that colours merge nicely if the opacity is < 1\n            ctx.fillStyle = vm.legendColorBackground;\n            ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Border\n\n            ctx.lineWidth = 1;\n            ctx.strokeStyle = labelColors[i].borderColor;\n            ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Inner square\n\n            ctx.fillStyle = labelColors[i].backgroundColor;\n            ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n            ctx.fillStyle = textColor;\n          }\n\n          fillLineOfText(line);\n        });\n        helpers$1.each(bodyItem.after, fillLineOfText);\n      }); // Reset back to 0 for after body\n\n      xLinePadding = 0; // After body lines\n\n      helpers$1.each(vm.afterBody, fillLineOfText);\n      pt.y -= bodySpacing; // Remove last body spacing\n    },\n    drawFooter: function drawFooter(pt, vm, ctx) {\n      var footer = vm.footer;\n\n      if (footer.length) {\n        pt.x = getAlignedX(vm, vm._footerAlign);\n        pt.y += vm.footerMarginTop;\n        ctx.textAlign = vm._footerAlign;\n        ctx.textBaseline = 'top';\n        ctx.fillStyle = vm.footerFontColor;\n        ctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n        helpers$1.each(footer, function (line) {\n          ctx.fillText(line, pt.x, pt.y);\n          pt.y += vm.footerFontSize + vm.footerSpacing;\n        });\n      }\n    },\n    drawBackground: function drawBackground(pt, vm, ctx, tooltipSize) {\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.strokeStyle = vm.borderColor;\n      ctx.lineWidth = vm.borderWidth;\n      var xAlign = vm.xAlign;\n      var yAlign = vm.yAlign;\n      var x = pt.x;\n      var y = pt.y;\n      var width = tooltipSize.width;\n      var height = tooltipSize.height;\n      var radius = vm.cornerRadius;\n      ctx.beginPath();\n      ctx.moveTo(x + radius, y);\n\n      if (yAlign === 'top') {\n        this.drawCaret(pt, tooltipSize);\n      }\n\n      ctx.lineTo(x + width - radius, y);\n      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\n      if (yAlign === 'center' && xAlign === 'right') {\n        this.drawCaret(pt, tooltipSize);\n      }\n\n      ctx.lineTo(x + width, y + height - radius);\n      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\n      if (yAlign === 'bottom') {\n        this.drawCaret(pt, tooltipSize);\n      }\n\n      ctx.lineTo(x + radius, y + height);\n      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\n      if (yAlign === 'center' && xAlign === 'left') {\n        this.drawCaret(pt, tooltipSize);\n      }\n\n      ctx.lineTo(x, y + radius);\n      ctx.quadraticCurveTo(x, y, x + radius, y);\n      ctx.closePath();\n      ctx.fill();\n\n      if (vm.borderWidth > 0) {\n        ctx.stroke();\n      }\n    },\n    draw: function draw() {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n\n      if (vm.opacity === 0) {\n        return;\n      }\n\n      var tooltipSize = {\n        width: vm.width,\n        height: vm.height\n      };\n      var pt = {\n        x: vm.x,\n        y: vm.y\n      }; // IE11/Edge does not like very small opacities, so snap to 0\n\n      var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity; // Truthy/falsey value for empty tooltip\n\n      var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n      if (this._options.enabled && hasTooltipContent) {\n        ctx.save();\n        ctx.globalAlpha = opacity; // Draw Background\n\n        this.drawBackground(pt, vm, ctx, tooltipSize); // Draw Title, Body, and Footer\n\n        pt.y += vm.yPadding; // Titles\n\n        this.drawTitle(pt, vm, ctx); // Body\n\n        this.drawBody(pt, vm, ctx); // Footer\n\n        this.drawFooter(pt, vm, ctx);\n        ctx.restore();\n      }\n    },\n\n    /**\n     * Handle an event\n     * @private\n     * @param {IEvent} event - The event to handle\n     * @returns {boolean} true if the tooltip changed\n     */\n    handleEvent: function handleEvent(e) {\n      var me = this;\n      var options = me._options;\n      var changed = false;\n      me._lastActive = me._lastActive || []; // Find Active Elements for tooltips\n\n      if (e.type === 'mouseout') {\n        me._active = [];\n      } else {\n        me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n      } // Remember Last Actives\n\n\n      changed = !helpers$1.arrayEquals(me._active, me._lastActive); // Only handle target event on tooltip change\n\n      if (changed) {\n        me._lastActive = me._active;\n\n        if (options.enabled || options.custom) {\n          me._eventPosition = {\n            x: e.x,\n            y: e.y\n          };\n          me.update(true);\n          me.pivot();\n        }\n      }\n\n      return changed;\n    }\n  });\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n\n  var positioners_1 = positioners;\n  var core_tooltip = exports$3;\n  core_tooltip.positioners = positioners_1;\n  var valueOrDefault$8 = helpers$1.valueOrDefault;\n\n  core_defaults._set('global', {\n    elements: {},\n    events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n    hover: {\n      onHover: null,\n      mode: 'nearest',\n      intersect: true,\n      animationDuration: 400\n    },\n    onClick: null,\n    maintainAspectRatio: true,\n    responsive: true,\n    responsiveAnimationDuration: 0\n  });\n  /**\n   * Recursively merge the given config objects representing the `scales` option\n   * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\n   * returns a deep copy of the result, thus doesn't alter inputs.\n   */\n\n\n  function mergeScaleConfig()\n  /* config objects ... */\n  {\n    return helpers$1.merge({}, [].slice.call(arguments), {\n      merger: function merger(key, target, source, options) {\n        if (key === 'xAxes' || key === 'yAxes') {\n          var slen = source[key].length;\n          var i, type, scale;\n\n          if (!target[key]) {\n            target[key] = [];\n          }\n\n          for (i = 0; i < slen; ++i) {\n            scale = source[key][i];\n            type = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n            if (i >= target[key].length) {\n              target[key].push({});\n            }\n\n            if (!target[key][i].type || scale.type && scale.type !== target[key][i].type) {\n              // new/untyped scale or type changed: let's apply the new defaults\n              // then merge source scale to correctly overwrite the defaults.\n              helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\n            } else {\n              // scales type are the same\n              helpers$1.merge(target[key][i], scale);\n            }\n          }\n        } else {\n          helpers$1._merger(key, target, source, options);\n        }\n      }\n    });\n  }\n  /**\n   * Recursively merge the given config objects as the root options by handling\n   * default scale options for the `scales` and `scale` properties, then returns\n   * a deep copy of the result, thus doesn't alter inputs.\n   */\n\n\n  function mergeConfig()\n  /* config objects ... */\n  {\n    return helpers$1.merge({}, [].slice.call(arguments), {\n      merger: function merger(key, target, source, options) {\n        var tval = target[key] || {};\n        var sval = source[key];\n\n        if (key === 'scales') {\n          // scale config merging is complex. Add our own function here for that\n          target[key] = mergeScaleConfig(tval, sval);\n        } else if (key === 'scale') {\n          // used in polar area & radar charts since there is only one scale\n          target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\n        } else {\n          helpers$1._merger(key, target, source, options);\n        }\n      }\n    });\n  }\n\n  function initConfig(config) {\n    config = config || {}; // Do NOT use mergeConfig for the data object because this method merges arrays\n    // and so would change references to labels and datasets, preventing data updates.\n\n    var data = config.data = config.data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    config.options = mergeConfig(core_defaults.global, core_defaults[config.type], config.options || {});\n    return config;\n  }\n\n  function updateConfig(chart) {\n    var newOptions = chart.options;\n    helpers$1.each(chart.scales, function (scale) {\n      core_layouts.removeBox(chart, scale);\n    });\n    newOptions = mergeConfig(core_defaults.global, core_defaults[chart.config.type], newOptions);\n    chart.options = chart.config.options = newOptions;\n    chart.ensureScalesHaveIDs();\n    chart.buildOrUpdateScales(); // Tooltip\n\n    chart.tooltip._options = newOptions.tooltips;\n    chart.tooltip.initialize();\n  }\n\n  function positionIsHorizontal(position) {\n    return position === 'top' || position === 'bottom';\n  }\n\n  var Chart = function Chart(item, config) {\n    this.construct(item, config);\n    return this;\n  };\n\n  helpers$1.extend(Chart.prototype,\n  /** @lends Chart */\n  {\n    /**\n     * @private\n     */\n    construct: function construct(item, config) {\n      var me = this;\n      config = initConfig(config);\n      var context = platform.acquireContext(item, config);\n      var canvas = context && context.canvas;\n      var height = canvas && canvas.height;\n      var width = canvas && canvas.width;\n      me.id = helpers$1.uid();\n      me.ctx = context;\n      me.canvas = canvas;\n      me.config = config;\n      me.width = width;\n      me.height = height;\n      me.aspectRatio = height ? width / height : null;\n      me.options = config.options;\n      me._bufferedRender = false;\n      /**\n       * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n       * the \"instance\" still need to be defined since it might be called from plugins.\n       * @prop Chart#chart\n       * @deprecated since version 2.6.0\n       * @todo remove at version 3\n       * @private\n       */\n\n      me.chart = me;\n      me.controller = me; // chart.chart.controller #inception\n      // Add the chart instance to the global namespace\n\n      Chart.instances[me.id] = me; // Define alias to the config data: `chart.data === chart.config.data`\n\n      Object.defineProperty(me, 'data', {\n        get: function get() {\n          return me.config.data;\n        },\n        set: function set(value) {\n          me.config.data = value;\n        }\n      });\n\n      if (!context || !canvas) {\n        // The given item is not a compatible context2d element, let's return before finalizing\n        // the chart initialization but after setting basic chart / controller properties that\n        // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n        // https://github.com/chartjs/Chart.js/issues/2807\n        console.error(\"Failed to create chart: can't acquire context from the given item\");\n        return;\n      }\n\n      me.initialize();\n      me.update();\n    },\n\n    /**\n     * @private\n     */\n    initialize: function initialize() {\n      var me = this; // Before init plugin notification\n\n      core_plugins.notify(me, 'beforeInit');\n      helpers$1.retinaScale(me, me.options.devicePixelRatio);\n      me.bindEvents();\n\n      if (me.options.responsive) {\n        // Initial resize before chart draws (must be silent to preserve initial animations).\n        me.resize(true);\n      } // Make sure scales have IDs and are built before we build any controllers.\n\n\n      me.ensureScalesHaveIDs();\n      me.buildOrUpdateScales();\n      me.initToolTip(); // After init plugin notification\n\n      core_plugins.notify(me, 'afterInit');\n      return me;\n    },\n    clear: function clear() {\n      helpers$1.canvas.clear(this);\n      return this;\n    },\n    stop: function stop() {\n      // Stops any current animation loop occurring\n      core_animations.cancelAnimation(this);\n      return this;\n    },\n    resize: function resize(silent) {\n      var me = this;\n      var options = me.options;\n      var canvas = me.canvas;\n      var aspectRatio = options.maintainAspectRatio && me.aspectRatio || null; // the canvas render width and height will be casted to integers so make sure that\n      // the canvas display style uses the same integer values to avoid blurring effect.\n      // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n\n      var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\n      var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\n\n      if (me.width === newWidth && me.height === newHeight) {\n        return;\n      }\n\n      canvas.width = me.width = newWidth;\n      canvas.height = me.height = newHeight;\n      canvas.style.width = newWidth + 'px';\n      canvas.style.height = newHeight + 'px';\n      helpers$1.retinaScale(me, options.devicePixelRatio);\n\n      if (!silent) {\n        // Notify any plugins about the resize\n        var newSize = {\n          width: newWidth,\n          height: newHeight\n        };\n        core_plugins.notify(me, 'resize', [newSize]); // Notify of resize\n\n        if (options.onResize) {\n          options.onResize(me, newSize);\n        }\n\n        me.stop();\n        me.update({\n          duration: options.responsiveAnimationDuration\n        });\n      }\n    },\n    ensureScalesHaveIDs: function ensureScalesHaveIDs() {\n      var options = this.options;\n      var scalesOptions = options.scales || {};\n      var scaleOptions = options.scale;\n      helpers$1.each(scalesOptions.xAxes, function (xAxisOptions, index) {\n        xAxisOptions.id = xAxisOptions.id || 'x-axis-' + index;\n      });\n      helpers$1.each(scalesOptions.yAxes, function (yAxisOptions, index) {\n        yAxisOptions.id = yAxisOptions.id || 'y-axis-' + index;\n      });\n\n      if (scaleOptions) {\n        scaleOptions.id = scaleOptions.id || 'scale';\n      }\n    },\n\n    /**\n     * Builds a map of scale ID to scale object for future lookup.\n     */\n    buildOrUpdateScales: function buildOrUpdateScales() {\n      var me = this;\n      var options = me.options;\n      var scales = me.scales || {};\n      var items = [];\n      var updated = Object.keys(scales).reduce(function (obj, id) {\n        obj[id] = false;\n        return obj;\n      }, {});\n\n      if (options.scales) {\n        items = items.concat((options.scales.xAxes || []).map(function (xAxisOptions) {\n          return {\n            options: xAxisOptions,\n            dtype: 'category',\n            dposition: 'bottom'\n          };\n        }), (options.scales.yAxes || []).map(function (yAxisOptions) {\n          return {\n            options: yAxisOptions,\n            dtype: 'linear',\n            dposition: 'left'\n          };\n        }));\n      }\n\n      if (options.scale) {\n        items.push({\n          options: options.scale,\n          dtype: 'radialLinear',\n          isDefault: true,\n          dposition: 'chartArea'\n        });\n      }\n\n      helpers$1.each(items, function (item) {\n        var scaleOptions = item.options;\n        var id = scaleOptions.id;\n        var scaleType = valueOrDefault$8(scaleOptions.type, item.dtype);\n\n        if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n          scaleOptions.position = item.dposition;\n        }\n\n        updated[id] = true;\n        var scale = null;\n\n        if (id in scales && scales[id].type === scaleType) {\n          scale = scales[id];\n          scale.options = scaleOptions;\n          scale.ctx = me.ctx;\n          scale.chart = me;\n        } else {\n          var scaleClass = core_scaleService.getScaleConstructor(scaleType);\n\n          if (!scaleClass) {\n            return;\n          }\n\n          scale = new scaleClass({\n            id: id,\n            type: scaleType,\n            options: scaleOptions,\n            ctx: me.ctx,\n            chart: me\n          });\n          scales[scale.id] = scale;\n        }\n\n        scale.mergeTicksOptions(); // TODO(SB): I think we should be able to remove this custom case (options.scale)\n        // and consider it as a regular scale part of the \"scales\"\" map only! This would\n        // make the logic easier and remove some useless? custom code.\n\n        if (item.isDefault) {\n          me.scale = scale;\n        }\n      }); // clear up discarded scales\n\n      helpers$1.each(updated, function (hasUpdated, id) {\n        if (!hasUpdated) {\n          delete scales[id];\n        }\n      });\n      me.scales = scales;\n      core_scaleService.addScalesToLayout(this);\n    },\n    buildOrUpdateControllers: function buildOrUpdateControllers() {\n      var me = this;\n      var newControllers = [];\n      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n        var meta = me.getDatasetMeta(datasetIndex);\n        var type = dataset.type || me.config.type;\n\n        if (meta.type && meta.type !== type) {\n          me.destroyDatasetMeta(datasetIndex);\n          meta = me.getDatasetMeta(datasetIndex);\n        }\n\n        meta.type = type;\n\n        if (meta.controller) {\n          meta.controller.updateIndex(datasetIndex);\n          meta.controller.linkScales();\n        } else {\n          var ControllerClass = controllers[meta.type];\n\n          if (ControllerClass === undefined) {\n            throw new Error('\"' + meta.type + '\" is not a chart type.');\n          }\n\n          meta.controller = new ControllerClass(me, datasetIndex);\n          newControllers.push(meta.controller);\n        }\n      }, me);\n      return newControllers;\n    },\n\n    /**\n     * Reset the elements of all datasets\n     * @private\n     */\n    resetElements: function resetElements() {\n      var me = this;\n      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n        me.getDatasetMeta(datasetIndex).controller.reset();\n      }, me);\n    },\n\n    /**\n    * Resets the chart back to it's state before the initial animation\n    */\n    reset: function reset() {\n      this.resetElements();\n      this.tooltip.initialize();\n    },\n    update: function update(config) {\n      var me = this;\n\n      if (!config || typeof config !== 'object') {\n        // backwards compatibility\n        config = {\n          duration: config,\n          lazy: arguments[1]\n        };\n      }\n\n      updateConfig(me); // plugins options references might have change, let's invalidate the cache\n      // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\n      core_plugins._invalidate(me);\n\n      if (core_plugins.notify(me, 'beforeUpdate') === false) {\n        return;\n      } // In case the entire data object changed\n\n\n      me.tooltip._data = me.data; // Make sure dataset controllers are updated and new controllers are reset\n\n      var newControllers = me.buildOrUpdateControllers(); // Make sure all dataset controllers have correct meta data counts\n\n      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n        me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n      }, me);\n      me.updateLayout(); // Can only reset the new controllers after the scales have been updated\n\n      if (me.options.animation && me.options.animation.duration) {\n        helpers$1.each(newControllers, function (controller) {\n          controller.reset();\n        });\n      }\n\n      me.updateDatasets(); // Need to reset tooltip in case it is displayed with elements that are removed\n      // after update.\n\n      me.tooltip.initialize(); // Last active contains items that were previously in the tooltip.\n      // When we reset the tooltip, we need to clear it\n\n      me.lastActive = []; // Do this before render so that any plugins that need final scale updates can use it\n\n      core_plugins.notify(me, 'afterUpdate');\n\n      if (me._bufferedRender) {\n        me._bufferedRequest = {\n          duration: config.duration,\n          easing: config.easing,\n          lazy: config.lazy\n        };\n      } else {\n        me.render(config);\n      }\n    },\n\n    /**\n     * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n     * hook, in which case, plugins will not be called on `afterLayout`.\n     * @private\n     */\n    updateLayout: function updateLayout() {\n      var me = this;\n\n      if (core_plugins.notify(me, 'beforeLayout') === false) {\n        return;\n      }\n\n      core_layouts.update(this, this.width, this.height);\n      /**\n       * Provided for backward compatibility, use `afterLayout` instead.\n       * @method IPlugin#afterScaleUpdate\n       * @deprecated since version 2.5.0\n       * @todo remove at version 3\n       * @private\n       */\n\n      core_plugins.notify(me, 'afterScaleUpdate');\n      core_plugins.notify(me, 'afterLayout');\n    },\n\n    /**\n     * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n     * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n     * @private\n     */\n    updateDatasets: function updateDatasets() {\n      var me = this;\n\n      if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n        return;\n      }\n\n      for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n        me.updateDataset(i);\n      }\n\n      core_plugins.notify(me, 'afterDatasetsUpdate');\n    },\n\n    /**\n     * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n     * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n     * @private\n     */\n    updateDataset: function updateDataset(index) {\n      var me = this;\n      var meta = me.getDatasetMeta(index);\n      var args = {\n        meta: meta,\n        index: index\n      };\n\n      if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n        return;\n      }\n\n      meta.controller.update();\n      core_plugins.notify(me, 'afterDatasetUpdate', [args]);\n    },\n    render: function render(config) {\n      var me = this;\n\n      if (!config || typeof config !== 'object') {\n        // backwards compatibility\n        config = {\n          duration: config,\n          lazy: arguments[1]\n        };\n      }\n\n      var animationOptions = me.options.animation;\n      var duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration);\n      var lazy = config.lazy;\n\n      if (core_plugins.notify(me, 'beforeRender') === false) {\n        return;\n      }\n\n      var onComplete = function onComplete(animation) {\n        core_plugins.notify(me, 'afterRender');\n        helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\n      };\n\n      if (animationOptions && duration) {\n        var animation = new core_animation({\n          numSteps: duration / 16.66,\n          // 60 fps\n          easing: config.easing || animationOptions.easing,\n          render: function render(chart, animationObject) {\n            var easingFunction = helpers$1.easing.effects[animationObject.easing];\n            var currentStep = animationObject.currentStep;\n            var stepDecimal = currentStep / animationObject.numSteps;\n            chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n          },\n          onAnimationProgress: animationOptions.onProgress,\n          onAnimationComplete: onComplete\n        });\n        core_animations.addAnimation(me, animation, duration, lazy);\n      } else {\n        me.draw(); // See https://github.com/chartjs/Chart.js/issues/3781\n\n        onComplete(new core_animation({\n          numSteps: 0,\n          chart: me\n        }));\n      }\n\n      return me;\n    },\n    draw: function draw(easingValue) {\n      var me = this;\n      me.clear();\n\n      if (helpers$1.isNullOrUndef(easingValue)) {\n        easingValue = 1;\n      }\n\n      me.transition(easingValue);\n\n      if (me.width <= 0 || me.height <= 0) {\n        return;\n      }\n\n      if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n        return;\n      } // Draw all the scales\n\n\n      helpers$1.each(me.boxes, function (box) {\n        box.draw(me.chartArea);\n      }, me);\n      me.drawDatasets(easingValue);\n\n      me._drawTooltip(easingValue);\n\n      core_plugins.notify(me, 'afterDraw', [easingValue]);\n    },\n\n    /**\n     * @private\n     */\n    transition: function transition(easingValue) {\n      var me = this;\n\n      for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n        if (me.isDatasetVisible(i)) {\n          me.getDatasetMeta(i).controller.transition(easingValue);\n        }\n      }\n\n      me.tooltip.transition(easingValue);\n    },\n\n    /**\n     * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n     * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n     * @private\n     */\n    drawDatasets: function drawDatasets(easingValue) {\n      var me = this;\n\n      if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n        return;\n      } // Draw datasets reversed to support proper line stacking\n\n\n      for (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n        if (me.isDatasetVisible(i)) {\n          me.drawDataset(i, easingValue);\n        }\n      }\n\n      core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n    },\n\n    /**\n     * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n     * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n     * @private\n     */\n    drawDataset: function drawDataset(index, easingValue) {\n      var me = this;\n      var meta = me.getDatasetMeta(index);\n      var args = {\n        meta: meta,\n        index: index,\n        easingValue: easingValue\n      };\n\n      if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n        return;\n      }\n\n      meta.controller.draw(easingValue);\n      core_plugins.notify(me, 'afterDatasetDraw', [args]);\n    },\n\n    /**\n     * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n     * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n     * @private\n     */\n    _drawTooltip: function _drawTooltip(easingValue) {\n      var me = this;\n      var tooltip = me.tooltip;\n      var args = {\n        tooltip: tooltip,\n        easingValue: easingValue\n      };\n\n      if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n        return;\n      }\n\n      tooltip.draw();\n      core_plugins.notify(me, 'afterTooltipDraw', [args]);\n    },\n\n    /**\n     * Get the single element that was clicked on\n     * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n     */\n    getElementAtEvent: function getElementAtEvent(e) {\n      return core_interaction.modes.single(this, e);\n    },\n    getElementsAtEvent: function getElementsAtEvent(e) {\n      return core_interaction.modes.label(this, e, {\n        intersect: true\n      });\n    },\n    getElementsAtXAxis: function getElementsAtXAxis(e) {\n      return core_interaction.modes['x-axis'](this, e, {\n        intersect: true\n      });\n    },\n    getElementsAtEventForMode: function getElementsAtEventForMode(e, mode, options) {\n      var method = core_interaction.modes[mode];\n\n      if (typeof method === 'function') {\n        return method(this, e, options);\n      }\n\n      return [];\n    },\n    getDatasetAtEvent: function getDatasetAtEvent(e) {\n      return core_interaction.modes.dataset(this, e, {\n        intersect: true\n      });\n    },\n    getDatasetMeta: function getDatasetMeta(datasetIndex) {\n      var me = this;\n      var dataset = me.data.datasets[datasetIndex];\n\n      if (!dataset._meta) {\n        dataset._meta = {};\n      }\n\n      var meta = dataset._meta[me.id];\n\n      if (!meta) {\n        meta = dataset._meta[me.id] = {\n          type: null,\n          data: [],\n          dataset: null,\n          controller: null,\n          hidden: null,\n          // See isDatasetVisible() comment\n          xAxisID: null,\n          yAxisID: null\n        };\n      }\n\n      return meta;\n    },\n    getVisibleDatasetCount: function getVisibleDatasetCount() {\n      var count = 0;\n\n      for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n        if (this.isDatasetVisible(i)) {\n          count++;\n        }\n      }\n\n      return count;\n    },\n    isDatasetVisible: function isDatasetVisible(datasetIndex) {\n      var meta = this.getDatasetMeta(datasetIndex); // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n      // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\n      return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n    },\n    generateLegend: function generateLegend() {\n      return this.options.legendCallback(this);\n    },\n\n    /**\n     * @private\n     */\n    destroyDatasetMeta: function destroyDatasetMeta(datasetIndex) {\n      var id = this.id;\n      var dataset = this.data.datasets[datasetIndex];\n      var meta = dataset._meta && dataset._meta[id];\n\n      if (meta) {\n        meta.controller.destroy();\n        delete dataset._meta[id];\n      }\n    },\n    destroy: function destroy() {\n      var me = this;\n      var canvas = me.canvas;\n      var i, ilen;\n      me.stop(); // dataset controllers need to cleanup associated data\n\n      for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n        me.destroyDatasetMeta(i);\n      }\n\n      if (canvas) {\n        me.unbindEvents();\n        helpers$1.canvas.clear(me);\n        platform.releaseContext(me.ctx);\n        me.canvas = null;\n        me.ctx = null;\n      }\n\n      core_plugins.notify(me, 'destroy');\n      delete Chart.instances[me.id];\n    },\n    toBase64Image: function toBase64Image() {\n      return this.canvas.toDataURL.apply(this.canvas, arguments);\n    },\n    initToolTip: function initToolTip() {\n      var me = this;\n      me.tooltip = new core_tooltip({\n        _chart: me,\n        _chartInstance: me,\n        // deprecated, backward compatibility\n        _data: me.data,\n        _options: me.options.tooltips\n      }, me);\n    },\n\n    /**\n     * @private\n     */\n    bindEvents: function bindEvents() {\n      var me = this;\n      var listeners = me._listeners = {};\n\n      var listener = function listener() {\n        me.eventHandler.apply(me, arguments);\n      };\n\n      helpers$1.each(me.options.events, function (type) {\n        platform.addEventListener(me, type, listener);\n        listeners[type] = listener;\n      }); // Elements used to detect size change should not be injected for non responsive charts.\n      // See https://github.com/chartjs/Chart.js/issues/2210\n\n      if (me.options.responsive) {\n        listener = function listener() {\n          me.resize();\n        };\n\n        platform.addEventListener(me, 'resize', listener);\n        listeners.resize = listener;\n      }\n    },\n\n    /**\n     * @private\n     */\n    unbindEvents: function unbindEvents() {\n      var me = this;\n      var listeners = me._listeners;\n\n      if (!listeners) {\n        return;\n      }\n\n      delete me._listeners;\n      helpers$1.each(listeners, function (listener, type) {\n        platform.removeEventListener(me, type, listener);\n      });\n    },\n    updateHoverStyle: function updateHoverStyle(elements, mode, enabled) {\n      var method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n      var element, i, ilen;\n\n      for (i = 0, ilen = elements.length; i < ilen; ++i) {\n        element = elements[i];\n\n        if (element) {\n          this.getDatasetMeta(element._datasetIndex).controller[method](element);\n        }\n      }\n    },\n\n    /**\n     * @private\n     */\n    eventHandler: function eventHandler(e) {\n      var me = this;\n      var tooltip = me.tooltip;\n\n      if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\n        return;\n      } // Buffer any update calls so that renders do not occur\n\n\n      me._bufferedRender = true;\n      me._bufferedRequest = null;\n      var changed = me.handleEvent(e); // for smooth tooltip animations issue #4989\n      // the tooltip should be the source of change\n      // Animation check workaround:\n      // tooltip._start will be null when tooltip isn't animating\n\n      if (tooltip) {\n        changed = tooltip._start ? tooltip.handleEvent(e) : changed | tooltip.handleEvent(e);\n      }\n\n      core_plugins.notify(me, 'afterEvent', [e]);\n      var bufferedRequest = me._bufferedRequest;\n\n      if (bufferedRequest) {\n        // If we have an update that was triggered, we need to do a normal render\n        me.render(bufferedRequest);\n      } else if (changed && !me.animating) {\n        // If entering, leaving, or changing elements, animate the change via pivot\n        me.stop(); // We only need to render at this point. Updating will cause scales to be\n        // recomputed generating flicker & using more memory than necessary.\n\n        me.render({\n          duration: me.options.hover.animationDuration,\n          lazy: true\n        });\n      }\n\n      me._bufferedRender = false;\n      me._bufferedRequest = null;\n      return me;\n    },\n\n    /**\n     * Handle an event\n     * @private\n     * @param {IEvent} event the event to handle\n     * @return {boolean} true if the chart needs to re-render\n     */\n    handleEvent: function handleEvent(e) {\n      var me = this;\n      var options = me.options || {};\n      var hoverOptions = options.hover;\n      var changed = false;\n      me.lastActive = me.lastActive || []; // Find Active Elements for hover and tooltips\n\n      if (e.type === 'mouseout') {\n        me.active = [];\n      } else {\n        me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n      } // Invoke onHover hook\n      // Need to call with native event here to not break backwards compatibility\n\n\n      helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n      if (e.type === 'mouseup' || e.type === 'click') {\n        if (options.onClick) {\n          // Use e.native here for backwards compatibility\n          options.onClick.call(me, e.native, me.active);\n        }\n      } // Remove styling for last active (even if it may still be active)\n\n\n      if (me.lastActive.length) {\n        me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n      } // Built in hover styling\n\n\n      if (me.active.length && hoverOptions.mode) {\n        me.updateHoverStyle(me.active, hoverOptions.mode, true);\n      }\n\n      changed = !helpers$1.arrayEquals(me.active, me.lastActive); // Remember Last Actives\n\n      me.lastActive = me.active;\n      return changed;\n    }\n  });\n  /**\n   * NOTE(SB) We actually don't use this container anymore but we need to keep it\n   * for backward compatibility. Though, it can still be useful for plugins that\n   * would need to work on multiple charts?!\n   */\n\n  Chart.instances = {};\n  var core_controller = Chart; // DEPRECATIONS\n\n  /**\n   * Provided for backward compatibility, use Chart instead.\n   * @class Chart.Controller\n   * @deprecated since version 2.6\n   * @todo remove at version 3\n   * @private\n   */\n\n  Chart.Controller = Chart;\n  /**\n   * Provided for backward compatibility, not available anymore.\n   * @namespace Chart\n   * @deprecated since version 2.8\n   * @todo remove at version 3\n   * @private\n   */\n\n  Chart.types = {};\n  /**\n   * Provided for backward compatibility, not available anymore.\n   * @namespace Chart.helpers.configMerge\n   * @deprecated since version 2.8.0\n   * @todo remove at version 3\n   * @private\n   */\n\n  helpers$1.configMerge = mergeConfig;\n  /**\n   * Provided for backward compatibility, not available anymore.\n   * @namespace Chart.helpers.scaleMerge\n   * @deprecated since version 2.8.0\n   * @todo remove at version 3\n   * @private\n   */\n\n  helpers$1.scaleMerge = mergeScaleConfig;\n\n  var core_helpers = function core_helpers() {\n    // -- Basic js utility methods\n    helpers$1.where = function (collection, filterCallback) {\n      if (helpers$1.isArray(collection) && Array.prototype.filter) {\n        return collection.filter(filterCallback);\n      }\n\n      var filtered = [];\n      helpers$1.each(collection, function (item) {\n        if (filterCallback(item)) {\n          filtered.push(item);\n        }\n      });\n      return filtered;\n    };\n\n    helpers$1.findIndex = Array.prototype.findIndex ? function (array, callback, scope) {\n      return array.findIndex(callback, scope);\n    } : function (array, callback, scope) {\n      scope = scope === undefined ? array : scope;\n\n      for (var i = 0, ilen = array.length; i < ilen; ++i) {\n        if (callback.call(scope, array[i], i, array)) {\n          return i;\n        }\n      }\n\n      return -1;\n    };\n\n    helpers$1.findNextWhere = function (arrayToSearch, filterCallback, startIndex) {\n      // Default to start of the array\n      if (helpers$1.isNullOrUndef(startIndex)) {\n        startIndex = -1;\n      }\n\n      for (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n        var currentItem = arrayToSearch[i];\n\n        if (filterCallback(currentItem)) {\n          return currentItem;\n        }\n      }\n    };\n\n    helpers$1.findPreviousWhere = function (arrayToSearch, filterCallback, startIndex) {\n      // Default to end of the array\n      if (helpers$1.isNullOrUndef(startIndex)) {\n        startIndex = arrayToSearch.length;\n      }\n\n      for (var i = startIndex - 1; i >= 0; i--) {\n        var currentItem = arrayToSearch[i];\n\n        if (filterCallback(currentItem)) {\n          return currentItem;\n        }\n      }\n    }; // -- Math methods\n\n\n    helpers$1.isNumber = function (n) {\n      return !isNaN(parseFloat(n)) && isFinite(n);\n    };\n\n    helpers$1.almostEquals = function (x, y, epsilon) {\n      return Math.abs(x - y) < epsilon;\n    };\n\n    helpers$1.almostWhole = function (x, epsilon) {\n      var rounded = Math.round(x);\n      return rounded - epsilon < x && rounded + epsilon > x;\n    };\n\n    helpers$1.max = function (array) {\n      return array.reduce(function (max, value) {\n        if (!isNaN(value)) {\n          return Math.max(max, value);\n        }\n\n        return max;\n      }, Number.NEGATIVE_INFINITY);\n    };\n\n    helpers$1.min = function (array) {\n      return array.reduce(function (min, value) {\n        if (!isNaN(value)) {\n          return Math.min(min, value);\n        }\n\n        return min;\n      }, Number.POSITIVE_INFINITY);\n    };\n\n    helpers$1.sign = Math.sign ? function (x) {\n      return Math.sign(x);\n    } : function (x) {\n      x = +x; // convert to a number\n\n      if (x === 0 || isNaN(x)) {\n        return x;\n      }\n\n      return x > 0 ? 1 : -1;\n    };\n    helpers$1.log10 = Math.log10 ? function (x) {\n      return Math.log10(x);\n    } : function (x) {\n      var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n      // Check for whole powers of 10,\n      // which due to floating point rounding error should be corrected.\n\n      var powerOf10 = Math.round(exponent);\n      var isPowerOf10 = x === Math.pow(10, powerOf10);\n      return isPowerOf10 ? powerOf10 : exponent;\n    };\n\n    helpers$1.toRadians = function (degrees) {\n      return degrees * (Math.PI / 180);\n    };\n\n    helpers$1.toDegrees = function (radians) {\n      return radians * (180 / Math.PI);\n    };\n    /**\n     * Returns the number of decimal places\n     * i.e. the number of digits after the decimal point, of the value of this Number.\n     * @param {number} x - A number.\n     * @returns {number} The number of decimal places.\n     * @private\n     */\n\n\n    helpers$1._decimalPlaces = function (x) {\n      if (!helpers$1.isFinite(x)) {\n        return;\n      }\n\n      var e = 1;\n      var p = 0;\n\n      while (Math.round(x * e) / e !== x) {\n        e *= 10;\n        p++;\n      }\n\n      return p;\n    }; // Gets the angle from vertical upright to the point about a centre.\n\n\n    helpers$1.getAngleFromPoint = function (centrePoint, anglePoint) {\n      var distanceFromXCenter = anglePoint.x - centrePoint.x;\n      var distanceFromYCenter = anglePoint.y - centrePoint.y;\n      var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n      var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n      if (angle < -0.5 * Math.PI) {\n        angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n      }\n\n      return {\n        angle: angle,\n        distance: radialDistanceFromCenter\n      };\n    };\n\n    helpers$1.distanceBetweenPoints = function (pt1, pt2) {\n      return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n    };\n    /**\n     * Provided for backward compatibility, not available anymore\n     * @function Chart.helpers.aliasPixel\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     */\n\n\n    helpers$1.aliasPixel = function (pixelWidth) {\n      return pixelWidth % 2 === 0 ? 0 : 0.5;\n    };\n    /**\n     * Returns the aligned pixel value to avoid anti-aliasing blur\n     * @param {Chart} chart - The chart instance.\n     * @param {number} pixel - A pixel value.\n     * @param {number} width - The width of the element.\n     * @returns {number} The aligned pixel value.\n     * @private\n     */\n\n\n    helpers$1._alignPixel = function (chart, pixel, width) {\n      var devicePixelRatio = chart.currentDevicePixelRatio;\n      var halfWidth = width / 2;\n      return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n    };\n\n    helpers$1.splineCurve = function (firstPoint, middlePoint, afterPoint, t) {\n      // Props to Rob Spencer at scaled innovation for his post on splining between points\n      // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n      // This function must also respect \"skipped\" points\n      var previous = firstPoint.skip ? middlePoint : firstPoint;\n      var current = middlePoint;\n      var next = afterPoint.skip ? middlePoint : afterPoint;\n      var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n      var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n      var s01 = d01 / (d01 + d12);\n      var s12 = d12 / (d01 + d12); // If all points are the same, s01 & s02 will be inf\n\n      s01 = isNaN(s01) ? 0 : s01;\n      s12 = isNaN(s12) ? 0 : s12;\n      var fa = t * s01; // scaling factor for triangle Ta\n\n      var fb = t * s12;\n      return {\n        previous: {\n          x: current.x - fa * (next.x - previous.x),\n          y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n          x: current.x + fb * (next.x - previous.x),\n          y: current.y + fb * (next.y - previous.y)\n        }\n      };\n    };\n\n    helpers$1.EPSILON = Number.EPSILON || 1e-14;\n\n    helpers$1.splineCurveMonotone = function (points) {\n      // This function calculates Bézier control points in a similar way than |splineCurve|,\n      // but preserves monotonicity of the provided data and ensures no local extremums are added\n      // between the dataset discrete points due to the interpolation.\n      // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n      var pointsWithTangents = (points || []).map(function (point) {\n        return {\n          model: point._model,\n          deltaK: 0,\n          mK: 0\n        };\n      }); // Calculate slopes (deltaK) and initialize tangents (mK)\n\n      var pointsLen = pointsWithTangents.length;\n      var i, pointBefore, pointCurrent, pointAfter;\n\n      for (i = 0; i < pointsLen; ++i) {\n        pointCurrent = pointsWithTangents[i];\n\n        if (pointCurrent.model.skip) {\n          continue;\n        }\n\n        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\n        if (pointAfter && !pointAfter.model.skip) {\n          var slopeDeltaX = pointAfter.model.x - pointCurrent.model.x; // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\n          pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n        }\n\n        if (!pointBefore || pointBefore.model.skip) {\n          pointCurrent.mK = pointCurrent.deltaK;\n        } else if (!pointAfter || pointAfter.model.skip) {\n          pointCurrent.mK = pointBefore.deltaK;\n        } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n          pointCurrent.mK = 0;\n        } else {\n          pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n        }\n      } // Adjust tangents to ensure monotonic properties\n\n\n      var alphaK, betaK, tauK, squaredMagnitude;\n\n      for (i = 0; i < pointsLen - 1; ++i) {\n        pointCurrent = pointsWithTangents[i];\n        pointAfter = pointsWithTangents[i + 1];\n\n        if (pointCurrent.model.skip || pointAfter.model.skip) {\n          continue;\n        }\n\n        if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n          pointCurrent.mK = pointAfter.mK = 0;\n          continue;\n        }\n\n        alphaK = pointCurrent.mK / pointCurrent.deltaK;\n        betaK = pointAfter.mK / pointCurrent.deltaK;\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\n        if (squaredMagnitude <= 9) {\n          continue;\n        }\n\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n        pointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n      } // Compute control points\n\n\n      var deltaX;\n\n      for (i = 0; i < pointsLen; ++i) {\n        pointCurrent = pointsWithTangents[i];\n\n        if (pointCurrent.model.skip) {\n          continue;\n        }\n\n        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\n        if (pointBefore && !pointBefore.model.skip) {\n          deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n          pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n          pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n        }\n\n        if (pointAfter && !pointAfter.model.skip) {\n          deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n          pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n          pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n        }\n      }\n    };\n\n    helpers$1.nextItem = function (collection, index, loop) {\n      if (loop) {\n        return index >= collection.length - 1 ? collection[0] : collection[index + 1];\n      }\n\n      return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n    };\n\n    helpers$1.previousItem = function (collection, index, loop) {\n      if (loop) {\n        return index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n      }\n\n      return index <= 0 ? collection[0] : collection[index - 1];\n    }; // Implementation of the nice number algorithm used in determining where axis labels will go\n\n\n    helpers$1.niceNum = function (range, round) {\n      var exponent = Math.floor(helpers$1.log10(range));\n      var fraction = range / Math.pow(10, exponent);\n      var niceFraction;\n\n      if (round) {\n        if (fraction < 1.5) {\n          niceFraction = 1;\n        } else if (fraction < 3) {\n          niceFraction = 2;\n        } else if (fraction < 7) {\n          niceFraction = 5;\n        } else {\n          niceFraction = 10;\n        }\n      } else if (fraction <= 1.0) {\n        niceFraction = 1;\n      } else if (fraction <= 2) {\n        niceFraction = 2;\n      } else if (fraction <= 5) {\n        niceFraction = 5;\n      } else {\n        niceFraction = 10;\n      }\n\n      return niceFraction * Math.pow(10, exponent);\n    }; // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\n\n    helpers$1.requestAnimFrame = function () {\n      if (typeof window === 'undefined') {\n        return function (callback) {\n          callback();\n        };\n      }\n\n      return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n        return window.setTimeout(callback, 1000 / 60);\n      };\n    }(); // -- DOM methods\n\n\n    helpers$1.getRelativePosition = function (evt, chart) {\n      var mouseX, mouseY;\n      var e = evt.originalEvent || evt;\n      var canvas = evt.target || evt.srcElement;\n      var boundingRect = canvas.getBoundingClientRect();\n      var touches = e.touches;\n\n      if (touches && touches.length > 0) {\n        mouseX = touches[0].clientX;\n        mouseY = touches[0].clientY;\n      } else {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n      } // Scale mouse coordinates into canvas coordinates\n      // by following the pattern laid out by 'jerryj' in the comments of\n      // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\n\n      var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\n      var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\n      var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\n      var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\n      var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n      var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom; // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n      // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\n      mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / width * canvas.width / chart.currentDevicePixelRatio);\n      mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / height * canvas.height / chart.currentDevicePixelRatio);\n      return {\n        x: mouseX,\n        y: mouseY\n      };\n    }; // Private helper function to convert max-width/max-height values that may be percentages into a number\n\n\n    function parseMaxStyle(styleValue, node, parentProperty) {\n      var valueInPixels;\n\n      if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n\n        if (styleValue.indexOf('%') !== -1) {\n          // percentage * size in dimension\n          valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n      } else {\n        valueInPixels = styleValue;\n      }\n\n      return valueInPixels;\n    }\n    /**\n     * Returns if the given value contains an effective constraint.\n     * @private\n     */\n\n\n    function isConstrainedValue(value) {\n      return value !== undefined && value !== null && value !== 'none';\n    }\n    /**\n     * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\n     * @param {HTMLElement} domNode - the node to check the constraint on\n     * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\n     * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\n     * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\n     */\n\n\n    function getConstraintDimension(domNode, maxStyle, percentageProperty) {\n      var view = document.defaultView;\n\n      var parentNode = helpers$1._getParentNode(domNode);\n\n      var constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n      var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n      var hasCNode = isConstrainedValue(constrainedNode);\n      var hasCContainer = isConstrainedValue(constrainedContainer);\n      var infinity = Number.POSITIVE_INFINITY;\n\n      if (hasCNode || hasCContainer) {\n        return Math.min(hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n      }\n\n      return 'none';\n    } // returns Number or undefined if no constraint\n\n\n    helpers$1.getConstraintWidth = function (domNode) {\n      return getConstraintDimension(domNode, 'max-width', 'clientWidth');\n    }; // returns Number or undefined if no constraint\n\n\n    helpers$1.getConstraintHeight = function (domNode) {\n      return getConstraintDimension(domNode, 'max-height', 'clientHeight');\n    };\n    /**\n     * @private\n    \t */\n\n\n    helpers$1._calculatePadding = function (container, padding, parentDimension) {\n      padding = helpers$1.getStyle(container, padding);\n      return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\n    };\n    /**\n     * @private\n     */\n\n\n    helpers$1._getParentNode = function (domNode) {\n      var parent = domNode.parentNode;\n\n      if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n      }\n\n      return parent;\n    };\n\n    helpers$1.getMaximumWidth = function (domNode) {\n      var container = helpers$1._getParentNode(domNode);\n\n      if (!container) {\n        return domNode.clientWidth;\n      }\n\n      var clientWidth = container.clientWidth;\n\n      var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\n\n      var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\n\n      var w = clientWidth - paddingLeft - paddingRight;\n      var cw = helpers$1.getConstraintWidth(domNode);\n      return isNaN(cw) ? w : Math.min(w, cw);\n    };\n\n    helpers$1.getMaximumHeight = function (domNode) {\n      var container = helpers$1._getParentNode(domNode);\n\n      if (!container) {\n        return domNode.clientHeight;\n      }\n\n      var clientHeight = container.clientHeight;\n\n      var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\n\n      var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\n\n      var h = clientHeight - paddingTop - paddingBottom;\n      var ch = helpers$1.getConstraintHeight(domNode);\n      return isNaN(ch) ? h : Math.min(h, ch);\n    };\n\n    helpers$1.getStyle = function (el, property) {\n      return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n    };\n\n    helpers$1.retinaScale = function (chart, forceRatio) {\n      var pixelRatio = chart.currentDevicePixelRatio = forceRatio || typeof window !== 'undefined' && window.devicePixelRatio || 1;\n\n      if (pixelRatio === 1) {\n        return;\n      }\n\n      var canvas = chart.canvas;\n      var height = chart.height;\n      var width = chart.width;\n      canvas.height = height * pixelRatio;\n      canvas.width = width * pixelRatio;\n      chart.ctx.scale(pixelRatio, pixelRatio); // If no style has been set on the canvas, the render size is used as display size,\n      // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n      // See https://github.com/chartjs/Chart.js/issues/3575\n\n      if (!canvas.style.height && !canvas.style.width) {\n        canvas.style.height = height + 'px';\n        canvas.style.width = width + 'px';\n      }\n    }; // -- Canvas methods\n\n\n    helpers$1.fontString = function (pixelSize, fontStyle, fontFamily) {\n      return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n    };\n\n    helpers$1.longestText = function (ctx, font, arrayOfThings, cache) {\n      cache = cache || {};\n      var data = cache.data = cache.data || {};\n      var gc = cache.garbageCollect = cache.garbageCollect || [];\n\n      if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n      }\n\n      ctx.font = font;\n      var longest = 0;\n      helpers$1.each(arrayOfThings, function (thing) {\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\n          longest = helpers$1.measureText(ctx, data, gc, longest, thing);\n        } else if (helpers$1.isArray(thing)) {\n          // if it is an array lets measure each element\n          // to do maybe simplify this function a bit so we can do this more recursively?\n          helpers$1.each(thing, function (nestedThing) {\n            // Undefined strings and arrays should not be measured\n            if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\n              longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\n            }\n          });\n        }\n      });\n      var gcLen = gc.length / 2;\n\n      if (gcLen > arrayOfThings.length) {\n        for (var i = 0; i < gcLen; i++) {\n          delete data[gc[i]];\n        }\n\n        gc.splice(0, gcLen);\n      }\n\n      return longest;\n    };\n\n    helpers$1.measureText = function (ctx, data, gc, longest, string) {\n      var textWidth = data[string];\n\n      if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n      }\n\n      if (textWidth > longest) {\n        longest = textWidth;\n      }\n\n      return longest;\n    };\n\n    helpers$1.numberOfLabelLines = function (arrayOfThings) {\n      var numberOfLines = 1;\n      helpers$1.each(arrayOfThings, function (thing) {\n        if (helpers$1.isArray(thing)) {\n          if (thing.length > numberOfLines) {\n            numberOfLines = thing.length;\n          }\n        }\n      });\n      return numberOfLines;\n    };\n\n    helpers$1.color = !chartjsColor ? function (value) {\n      console.error('Color.js not found!');\n      return value;\n    } : function (value) {\n      /* global CanvasGradient */\n      if (value instanceof CanvasGradient) {\n        value = core_defaults.global.defaultColor;\n      }\n\n      return chartjsColor(value);\n    };\n\n    helpers$1.getHoverColor = function (colorValue) {\n      /* global CanvasPattern */\n      return colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient ? colorValue : helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n    };\n  };\n\n  function abstract() {\n    throw new Error('This method is not implemented: either no adapter can ' + 'be found or an incomplete integration was provided.');\n  }\n  /**\n   * Date adapter (current used by the time scale)\n   * @namespace Chart._adapters._date\n   * @memberof Chart._adapters\n   * @private\n   */\n\n  /**\n   * Currently supported unit string values.\n   * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\n   * @memberof Chart._adapters._date\n   * @name Unit\n   */\n\n  /**\n   * @class\n   */\n\n\n  function DateAdapter(options) {\n    this.options = options || {};\n  }\n\n  helpers$1.extend(DateAdapter.prototype,\n  /** @lends DateAdapter */\n  {\n    /**\n     * Returns a map of time formats for the supported formatting units defined\n     * in Unit as well as 'datetime' representing a detailed date/time string.\n     * @returns {{string: string}}\n     */\n    formats: abstract,\n\n    /**\n     * Parses the given `value` and return the associated timestamp.\n     * @param {any} value - the value to parse (usually comes from the data)\n     * @param {string} [format] - the expected data format\n     * @returns {(number|null)}\n     * @function\n     */\n    parse: abstract,\n\n    /**\n     * Returns the formatted date in the specified `format` for a given `timestamp`.\n     * @param {number} timestamp - the timestamp to format\n     * @param {string} format - the date/time token\n     * @return {string}\n     * @function\n     */\n    format: abstract,\n\n    /**\n     * Adds the specified `amount` of `unit` to the given `timestamp`.\n     * @param {number} timestamp - the input timestamp\n     * @param {number} amount - the amount to add\n     * @param {Unit} unit - the unit as string\n     * @return {number}\n     * @function\n     */\n    add: abstract,\n\n    /**\n     * Returns the number of `unit` between the given timestamps.\n     * @param {number} max - the input timestamp (reference)\n     * @param {number} min - the timestamp to substract\n     * @param {Unit} unit - the unit as string\n     * @return {number}\n     * @function\n     */\n    diff: abstract,\n\n    /**\n     * Returns start of `unit` for the given `timestamp`.\n     * @param {number} timestamp - the input timestamp\n     * @param {Unit} unit - the unit as string\n     * @param {number} [weekday] - the ISO day of the week with 1 being Monday\n     * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n     * @function\n     */\n    startOf: abstract,\n\n    /**\n     * Returns end of `unit` for the given `timestamp`.\n     * @param {number} timestamp - the input timestamp\n     * @param {Unit} unit - the unit as string\n     * @function\n     */\n    endOf: abstract,\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility for scale.getValueForPixel(),\n     * this method should be overridden only by the moment adapter.\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     * @private\n     */\n    _create: function _create(value) {\n      return value;\n    }\n  });\n\n  DateAdapter.override = function (members) {\n    helpers$1.extend(DateAdapter.prototype, members);\n  };\n\n  var _date = DateAdapter;\n  var core_adapters = {\n    _date: _date\n  };\n  /**\n   * Namespace to hold static tick generation functions\n   * @namespace Chart.Ticks\n   */\n\n  var core_ticks = {\n    /**\n     * Namespace to hold formatters for different types of ticks\n     * @namespace Chart.Ticks.formatters\n     */\n    formatters: {\n      /**\n       * Formatter for value labels\n       * @method Chart.Ticks.formatters.values\n       * @param value the value to display\n       * @return {string|string[]} the label to display\n       */\n      values: function values(value) {\n        return helpers$1.isArray(value) ? value : '' + value;\n      },\n\n      /**\n       * Formatter for linear numeric ticks\n       * @method Chart.Ticks.formatters.linear\n       * @param tickValue {number} the value to be formatted\n       * @param index {number} the position of the tickValue parameter in the ticks array\n       * @param ticks {number[]} the list of ticks being converted\n       * @return {string} string representation of the tickValue parameter\n       */\n      linear: function linear(tickValue, index, ticks) {\n        // If we have lots of ticks, don't use the ones\n        var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0]; // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\n        if (Math.abs(delta) > 1) {\n          if (tickValue !== Math.floor(tickValue)) {\n            // not an integer\n            delta = tickValue - Math.floor(tickValue);\n          }\n        }\n\n        var logDelta = helpers$1.log10(Math.abs(delta));\n        var tickString = '';\n\n        if (tickValue !== 0) {\n          var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n\n          if (maxTick < 1e-4) {\n            // all ticks are small numbers; use scientific notation\n            var logTick = helpers$1.log10(Math.abs(tickValue));\n            tickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));\n          } else {\n            var numDecimal = -1 * Math.floor(logDelta);\n            numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\n            tickString = tickValue.toFixed(numDecimal);\n          }\n        } else {\n          tickString = '0'; // never show decimal places for 0\n        }\n\n        return tickString;\n      },\n      logarithmic: function logarithmic(tickValue, index, ticks) {\n        var remain = tickValue / Math.pow(10, Math.floor(helpers$1.log10(tickValue)));\n\n        if (tickValue === 0) {\n          return '0';\n        } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n          return tickValue.toExponential();\n        }\n\n        return '';\n      }\n    }\n  };\n  var valueOrDefault$9 = helpers$1.valueOrDefault;\n  var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\n\n  core_defaults._set('scale', {\n    display: true,\n    position: 'left',\n    offset: false,\n    // grid line settings\n    gridLines: {\n      display: true,\n      color: 'rgba(0, 0, 0, 0.1)',\n      lineWidth: 1,\n      drawBorder: true,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickMarkLength: 10,\n      zeroLineWidth: 1,\n      zeroLineColor: 'rgba(0,0,0,0.25)',\n      zeroLineBorderDash: [],\n      zeroLineBorderDashOffset: 0.0,\n      offsetGridLines: false,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n    // scale label\n    scaleLabel: {\n      // display property\n      display: false,\n      // actual label\n      labelString: '',\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n    // label settings\n    ticks: {\n      beginAtZero: false,\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      padding: 0,\n      reverse: false,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 0,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: core_ticks.formatters.values,\n      minor: {},\n      major: {}\n    }\n  });\n\n  function labelsFromTicks(ticks) {\n    var labels = [];\n    var i, ilen;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      labels.push(ticks[i].label);\n    }\n\n    return labels;\n  }\n\n  function getPixelForGridLine(scale, index, offsetGridLines) {\n    var lineValue = scale.getPixelForTick(index);\n\n    if (offsetGridLines) {\n      if (scale.getTicks().length === 1) {\n        lineValue -= scale.isHorizontal() ? Math.max(lineValue - scale.left, scale.right - lineValue) : Math.max(lineValue - scale.top, scale.bottom - lineValue);\n      } else if (index === 0) {\n        lineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n      } else {\n        lineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n      }\n    }\n\n    return lineValue;\n  }\n\n  function computeTextSize(context, tick, font) {\n    return helpers$1.isArray(tick) ? helpers$1.longestText(context, font, tick) : context.measureText(tick).width;\n  }\n\n  var core_scale = core_element.extend({\n    /**\n     * Get the padding needed for the scale\n     * @method getPadding\n     * @private\n     * @returns {Padding} the necessary padding\n     */\n    getPadding: function getPadding() {\n      var me = this;\n      return {\n        left: me.paddingLeft || 0,\n        top: me.paddingTop || 0,\n        right: me.paddingRight || 0,\n        bottom: me.paddingBottom || 0\n      };\n    },\n\n    /**\n     * Returns the scale tick objects ({label, major})\n     * @since 2.7\n     */\n    getTicks: function getTicks() {\n      return this._ticks;\n    },\n    // These methods are ordered by lifecyle. Utilities then follow.\n    // Any function defined here is inherited by all scale types.\n    // Any function can be extended by the scale type\n    mergeTicksOptions: function mergeTicksOptions() {\n      var ticks = this.options.ticks;\n\n      if (ticks.minor === false) {\n        ticks.minor = {\n          display: false\n        };\n      }\n\n      if (ticks.major === false) {\n        ticks.major = {\n          display: false\n        };\n      }\n\n      for (var key in ticks) {\n        if (key !== 'major' && key !== 'minor') {\n          if (typeof ticks.minor[key] === 'undefined') {\n            ticks.minor[key] = ticks[key];\n          }\n\n          if (typeof ticks.major[key] === 'undefined') {\n            ticks.major[key] = ticks[key];\n          }\n        }\n      }\n    },\n    beforeUpdate: function beforeUpdate() {\n      helpers$1.callback(this.options.beforeUpdate, [this]);\n    },\n    update: function update(maxWidth, maxHeight, margins) {\n      var me = this;\n      var i, ilen, labels, label, ticks, tick; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n      me.beforeUpdate(); // Absorb the master measurements\n\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = helpers$1.extend({\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0\n      }, margins);\n      me._maxLabelLines = 0;\n      me.longestLabelWidth = 0;\n      me.longestTextCache = me.longestTextCache || {}; // Dimensions\n\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions(); // Data min/max\n\n      me.beforeDataLimits();\n      me.determineDataLimits();\n      me.afterDataLimits(); // Ticks - `this.ticks` is now DEPRECATED!\n      // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n      // and must not be accessed directly from outside this class. `this.ticks` being\n      // around for long time and not marked as private, we can't change its structure\n      // without unexpected breaking changes. If you need to access the scale ticks,\n      // use scale.getTicks() instead.\n\n      me.beforeBuildTicks(); // New implementations should return an array of objects but for BACKWARD COMPAT,\n      // we still support no return (`this.ticks` internally set by calling this method).\n\n      ticks = me.buildTicks() || []; // Allow modification of ticks in callback.\n\n      ticks = me.afterBuildTicks(ticks) || ticks;\n      me.beforeTickToLabelConversion(); // New implementations should return the formatted tick labels but for BACKWARD\n      // COMPAT, we still support no return (`this.ticks` internally changed by calling\n      // this method and supposed to contain only string values).\n\n      labels = me.convertTicksToLabels(ticks) || me.ticks;\n      me.afterTickToLabelConversion();\n      me.ticks = labels; // BACKWARD COMPATIBILITY\n      // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n      // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\n      for (i = 0, ilen = labels.length; i < ilen; ++i) {\n        label = labels[i];\n        tick = ticks[i];\n\n        if (!tick) {\n          ticks.push(tick = {\n            label: label,\n            major: false\n          });\n        } else {\n          tick.label = label;\n        }\n      }\n\n      me._ticks = ticks; // Tick Rotation\n\n      me.beforeCalculateTickRotation();\n      me.calculateTickRotation();\n      me.afterCalculateTickRotation(); // Fit\n\n      me.beforeFit();\n      me.fit();\n      me.afterFit(); //\n\n      me.afterUpdate();\n      return me.minSize;\n    },\n    afterUpdate: function afterUpdate() {\n      helpers$1.callback(this.options.afterUpdate, [this]);\n    },\n    //\n    beforeSetDimensions: function beforeSetDimensions() {\n      helpers$1.callback(this.options.beforeSetDimensions, [this]);\n    },\n    setDimensions: function setDimensions() {\n      var me = this; // Set the unconstrained dimension before label rotation\n\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight; // Reset position before calculating rotation\n\n        me.top = 0;\n        me.bottom = me.height;\n      } // Reset padding\n\n\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0;\n    },\n    afterSetDimensions: function afterSetDimensions() {\n      helpers$1.callback(this.options.afterSetDimensions, [this]);\n    },\n    // Data limits\n    beforeDataLimits: function beforeDataLimits() {\n      helpers$1.callback(this.options.beforeDataLimits, [this]);\n    },\n    determineDataLimits: helpers$1.noop,\n    afterDataLimits: function afterDataLimits() {\n      helpers$1.callback(this.options.afterDataLimits, [this]);\n    },\n    //\n    beforeBuildTicks: function beforeBuildTicks() {\n      helpers$1.callback(this.options.beforeBuildTicks, [this]);\n    },\n    buildTicks: helpers$1.noop,\n    afterBuildTicks: function afterBuildTicks(ticks) {\n      var me = this; // ticks is empty for old axis implementations here\n\n      if (helpers$1.isArray(ticks) && ticks.length) {\n        return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\n      } // Support old implementations (that modified `this.ticks` directly in buildTicks)\n\n\n      me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\n      return ticks;\n    },\n    beforeTickToLabelConversion: function beforeTickToLabelConversion() {\n      helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\n    },\n    convertTicksToLabels: function convertTicksToLabels() {\n      var me = this; // Convert ticks to strings\n\n      var tickOpts = me.options.ticks;\n      me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n    },\n    afterTickToLabelConversion: function afterTickToLabelConversion() {\n      helpers$1.callback(this.options.afterTickToLabelConversion, [this]);\n    },\n    //\n    beforeCalculateTickRotation: function beforeCalculateTickRotation() {\n      helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\n    },\n    calculateTickRotation: function calculateTickRotation() {\n      var me = this;\n      var context = me.ctx;\n      var tickOpts = me.options.ticks;\n      var labels = labelsFromTicks(me._ticks); // Get the width of each grid by calculating the difference\n      // between x offsets between 0 and 1.\n\n      var tickFont = helpers$1.options._parseFont(tickOpts);\n\n      context.font = tickFont.string;\n      var labelRotation = tickOpts.minRotation || 0;\n\n      if (labels.length && me.options.display && me.isHorizontal()) {\n        var originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache);\n        var labelWidth = originalLabelWidth;\n        var cosRotation, sinRotation; // Allow 3 pixels x2 padding either side for label readability\n\n        var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6; // Max label rotation can be set or default to 90 - also act as a loop counter\n\n        while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n          var angleRadians = helpers$1.toRadians(labelRotation);\n          cosRotation = Math.cos(angleRadians);\n          sinRotation = Math.sin(angleRadians);\n\n          if (sinRotation * originalLabelWidth > me.maxHeight) {\n            // go back one step\n            labelRotation--;\n            break;\n          }\n\n          labelRotation++;\n          labelWidth = cosRotation * originalLabelWidth;\n        }\n      }\n\n      me.labelRotation = labelRotation;\n    },\n    afterCalculateTickRotation: function afterCalculateTickRotation() {\n      helpers$1.callback(this.options.afterCalculateTickRotation, [this]);\n    },\n    //\n    beforeFit: function beforeFit() {\n      helpers$1.callback(this.options.beforeFit, [this]);\n    },\n    fit: function fit() {\n      var me = this; // Reset\n\n      var minSize = me.minSize = {\n        width: 0,\n        height: 0\n      };\n      var labels = labelsFromTicks(me._ticks);\n      var opts = me.options;\n      var tickOpts = opts.ticks;\n      var scaleLabelOpts = opts.scaleLabel;\n      var gridLineOpts = opts.gridLines;\n\n      var display = me._isVisible();\n\n      var position = opts.position;\n      var isHorizontal = me.isHorizontal();\n      var parseFont = helpers$1.options._parseFont;\n      var tickFont = parseFont(tickOpts);\n      var tickMarkLength = opts.gridLines.tickMarkLength; // Width\n\n      if (isHorizontal) {\n        // subtract the margins to line up with the chartArea if we are a full width scale\n        minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n      } else {\n        minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n      } // height\n\n\n      if (isHorizontal) {\n        minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n      } else {\n        minSize.height = me.maxHeight; // fill all the height\n      } // Are we showing a title for the scale?\n\n\n      if (scaleLabelOpts.display && display) {\n        var scaleLabelFont = parseFont(scaleLabelOpts);\n        var scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding);\n        var deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height;\n\n        if (isHorizontal) {\n          minSize.height += deltaHeight;\n        } else {\n          minSize.width += deltaHeight;\n        }\n      } // Don't bother fitting the ticks if we are not showing the labels\n\n\n      if (tickOpts.display && display) {\n        var largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache);\n        var tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels);\n        var lineSpace = tickFont.size * 0.5;\n        var tickPadding = me.options.ticks.padding; // Store max number of lines and widest label for _autoSkip\n\n        me._maxLabelLines = tallestLabelHeightInLines;\n        me.longestLabelWidth = largestTextWidth;\n\n        if (isHorizontal) {\n          var angleRadians = helpers$1.toRadians(me.labelRotation);\n          var cosRotation = Math.cos(angleRadians);\n          var sinRotation = Math.sin(angleRadians); // TODO - improve this calculation\n\n          var labelHeight = sinRotation * largestTextWidth + tickFont.lineHeight * tallestLabelHeightInLines + lineSpace; // padding\n\n          minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n          me.ctx.font = tickFont.string;\n          var firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string);\n          var lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string);\n          var offsetLeft = me.getPixelForTick(0) - me.left;\n          var offsetRight = me.right - me.getPixelForTick(labels.length - 1);\n          var paddingLeft, paddingRight; // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n          // which means that the right padding is dominated by the font height\n\n          if (me.labelRotation !== 0) {\n            paddingLeft = position === 'bottom' ? cosRotation * firstLabelWidth : cosRotation * lineSpace;\n            paddingRight = position === 'bottom' ? cosRotation * lineSpace : cosRotation * lastLabelWidth;\n          } else {\n            paddingLeft = firstLabelWidth / 2;\n            paddingRight = lastLabelWidth / 2;\n          }\n\n          me.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges\n\n          me.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3;\n        } else {\n          // A vertical axis is more constrained by the width. Labels are the\n          // dominant factor here, so get that length first and account for padding\n          if (tickOpts.mirror) {\n            largestTextWidth = 0;\n          } else {\n            // use lineSpace for consistency with horizontal axis\n            // tickPadding is not implemented for horizontal\n            largestTextWidth += tickPadding + lineSpace;\n          }\n\n          minSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n          me.paddingTop = tickFont.size / 2;\n          me.paddingBottom = tickFont.size / 2;\n        }\n      }\n\n      me.handleMargins();\n      me.width = minSize.width;\n      me.height = minSize.height;\n    },\n\n    /**\n     * Handle margins and padding interactions\n     * @private\n     */\n    handleMargins: function handleMargins() {\n      var me = this;\n\n      if (me.margins) {\n        me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n        me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n        me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n        me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n      }\n    },\n    afterFit: function afterFit() {\n      helpers$1.callback(this.options.afterFit, [this]);\n    },\n    // Shared Methods\n    isHorizontal: function isHorizontal() {\n      return this.options.position === 'top' || this.options.position === 'bottom';\n    },\n    isFullWidth: function isFullWidth() {\n      return this.options.fullWidth;\n    },\n    // 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    getRightValue: function getRightValue(rawValue) {\n      // Null and undefined values first\n      if (helpers$1.isNullOrUndef(rawValue)) {\n        return NaN;\n      } // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\n\n      if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\n        return NaN;\n      } // If it is in fact an object, dive in one more level\n\n\n      if (rawValue) {\n        if (this.isHorizontal()) {\n          if (rawValue.x !== undefined) {\n            return this.getRightValue(rawValue.x);\n          }\n        } else if (rawValue.y !== undefined) {\n          return this.getRightValue(rawValue.y);\n        }\n      } // Value is good, return it\n\n\n      return rawValue;\n    },\n\n    /**\n     * Used to get the value to display in the tooltip for the data at the given index\n     * @param index\n     * @param datasetIndex\n     */\n    getLabelForIndex: helpers$1.noop,\n\n    /**\n     * Returns the location of the given data point. Value can either be an index or a numerical value\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\n     * @param value\n     * @param index\n     * @param datasetIndex\n     */\n    getPixelForValue: helpers$1.noop,\n\n    /**\n     * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\n     * @param pixel\n     */\n    getValueForPixel: helpers$1.noop,\n\n    /**\n     * Returns the location of the tick at the given index\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\n     */\n    getPixelForTick: function getPixelForTick(index) {\n      var me = this;\n      var offset = me.options.offset;\n\n      if (me.isHorizontal()) {\n        var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n        var tickWidth = innerWidth / Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n        var pixel = tickWidth * index + me.paddingLeft;\n\n        if (offset) {\n          pixel += tickWidth / 2;\n        }\n\n        var finalVal = me.left + pixel;\n        finalVal += me.isFullWidth() ? me.margins.left : 0;\n        return finalVal;\n      }\n\n      var innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n      return me.top + index * (innerHeight / (me._ticks.length - 1));\n    },\n\n    /**\n     * Utility for getting the pixel location of a percentage of scale\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\n     */\n    getPixelForDecimal: function getPixelForDecimal(decimal) {\n      var me = this;\n\n      if (me.isHorizontal()) {\n        var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n        var valueOffset = innerWidth * decimal + me.paddingLeft;\n        var finalVal = me.left + valueOffset;\n        finalVal += me.isFullWidth() ? me.margins.left : 0;\n        return finalVal;\n      }\n\n      return me.top + decimal * me.height;\n    },\n\n    /**\n     * Returns the pixel for the minimum chart value\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\n     */\n    getBasePixel: function getBasePixel() {\n      return this.getPixelForValue(this.getBaseValue());\n    },\n    getBaseValue: function getBaseValue() {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      return me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    },\n\n    /**\n     * Returns a subset of ticks to be plotted to avoid overlapping labels.\n     * @private\n     */\n    _autoSkip: function _autoSkip(ticks) {\n      var me = this;\n      var isHorizontal = me.isHorizontal();\n      var optionTicks = me.options.ticks.minor;\n      var tickCount = ticks.length;\n      var skipRatio = false;\n      var maxTicks = optionTicks.maxTicksLimit; // Total space needed to display all ticks. First and last ticks are\n      // drawn as their center at end of axis, so tickCount-1\n\n      var ticksLength = me._tickSize() * (tickCount - 1); // Axis length\n\n      var axisLength = isHorizontal ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.PaddingBottom);\n      var result = [];\n      var i, tick;\n\n      if (ticksLength > axisLength) {\n        skipRatio = 1 + Math.floor(ticksLength / axisLength);\n      } // if they defined a max number of optionTicks,\n      // increase skipRatio until that number is met\n\n\n      if (tickCount > maxTicks) {\n        skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));\n      }\n\n      for (i = 0; i < tickCount; i++) {\n        tick = ticks[i];\n\n        if (skipRatio > 1 && i % skipRatio > 0) {\n          // leave tick in place but make sure it's not displayed (#4635)\n          delete tick.label;\n        }\n\n        result.push(tick);\n      }\n\n      return result;\n    },\n\n    /**\n     * @private\n     */\n    _tickSize: function _tickSize() {\n      var me = this;\n      var isHorizontal = me.isHorizontal();\n      var optionTicks = me.options.ticks.minor; // Calculate space needed by label in axis direction.\n\n      var rot = helpers$1.toRadians(me.labelRotation);\n      var cos = Math.abs(Math.cos(rot));\n      var sin = Math.abs(Math.sin(rot));\n      var padding = optionTicks.autoSkipPadding || 0;\n      var w = me.longestLabelWidth + padding || 0;\n\n      var tickFont = helpers$1.options._parseFont(optionTicks);\n\n      var h = me._maxLabelLines * tickFont.lineHeight + padding || 0; // Calculate space needed for 1 tick in axis direction.\n\n      return isHorizontal ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    },\n\n    /**\n     * @private\n     */\n    _isVisible: function _isVisible() {\n      var me = this;\n      var chart = me.chart;\n      var display = me.options.display;\n      var i, ilen, meta;\n\n      if (display !== 'auto') {\n        return !!display;\n      } // When 'auto', the scale is visible if at least one associated dataset is visible.\n\n\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n\n          if (meta.xAxisID === me.id || meta.yAxisID === me.id) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    },\n\n    /**\n     * Actually draw the scale on the canvas\n     * @param {object} chartArea - the area of the chart to draw full grid lines on\n     */\n    draw: function draw(chartArea) {\n      var me = this;\n      var options = me.options;\n\n      if (!me._isVisible()) {\n        return;\n      }\n\n      var chart = me.chart;\n      var context = me.ctx;\n      var globalDefaults = core_defaults.global;\n      var defaultFontColor = globalDefaults.defaultFontColor;\n      var optionTicks = options.ticks.minor;\n      var optionMajorTicks = options.ticks.major || optionTicks;\n      var gridLines = options.gridLines;\n      var scaleLabel = options.scaleLabel;\n      var position = options.position;\n      var isRotated = me.labelRotation !== 0;\n      var isMirrored = optionTicks.mirror;\n      var isHorizontal = me.isHorizontal();\n      var parseFont = helpers$1.options._parseFont;\n      var ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n      var tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor);\n      var tickFont = parseFont(optionTicks);\n      var lineHeight = tickFont.lineHeight;\n      var majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor);\n      var majorTickFont = parseFont(optionMajorTicks);\n      var tickPadding = optionTicks.padding;\n      var labelOffset = optionTicks.labelOffset;\n      var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n      var scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor);\n      var scaleLabelFont = parseFont(scaleLabel);\n      var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\n      var labelRotationRadians = helpers$1.toRadians(me.labelRotation);\n      var itemsToDraw = [];\n      var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n      var alignPixel = helpers$1._alignPixel;\n      var borderValue, tickStart, tickEnd;\n\n      if (position === 'top') {\n        borderValue = alignPixel(chart, me.bottom, axisWidth);\n        tickStart = me.bottom - tl;\n        tickEnd = borderValue - axisWidth / 2;\n      } else if (position === 'bottom') {\n        borderValue = alignPixel(chart, me.top, axisWidth);\n        tickStart = borderValue + axisWidth / 2;\n        tickEnd = me.top + tl;\n      } else if (position === 'left') {\n        borderValue = alignPixel(chart, me.right, axisWidth);\n        tickStart = me.right - tl;\n        tickEnd = borderValue - axisWidth / 2;\n      } else {\n        borderValue = alignPixel(chart, me.left, axisWidth);\n        tickStart = borderValue + axisWidth / 2;\n        tickEnd = me.left + tl;\n      }\n\n      var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error.\n\n      helpers$1.each(ticks, function (tick, index) {\n        // autoskipper skipped this tick (#4635)\n        if (helpers$1.isNullOrUndef(tick.label)) {\n          return;\n        }\n\n        var label = tick.label;\n        var lineWidth, lineColor, borderDash, borderDashOffset;\n\n        if (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n          // Draw the first index specially\n          lineWidth = gridLines.zeroLineWidth;\n          lineColor = gridLines.zeroLineColor;\n          borderDash = gridLines.zeroLineBorderDash || [];\n          borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\n        } else {\n          lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index);\n          lineColor = valueAtIndexOrDefault(gridLines.color, index);\n          borderDash = gridLines.borderDash || [];\n          borderDashOffset = gridLines.borderDashOffset || 0.0;\n        } // Common properties\n\n\n        var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign;\n        var labelCount = helpers$1.isArray(label) ? label.length : 1;\n        var lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines);\n\n        if (isHorizontal) {\n          var labelYOffset = tl + tickPadding;\n\n          if (lineValue < me.left - epsilon) {\n            lineColor = 'rgba(0,0,0,0)';\n          }\n\n          tx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth);\n          ty1 = tickStart;\n          ty2 = tickEnd;\n          labelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n          if (position === 'top') {\n            y1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2;\n            y2 = chartArea.bottom;\n            textOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight;\n            textAlign = !isRotated ? 'center' : 'left';\n            labelY = me.bottom - labelYOffset;\n          } else {\n            y1 = chartArea.top;\n            y2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2;\n            textOffset = (!isRotated ? 0.5 : 0) * lineHeight;\n            textAlign = !isRotated ? 'center' : 'right';\n            labelY = me.top + labelYOffset;\n          }\n        } else {\n          var labelXOffset = (isMirrored ? 0 : tl) + tickPadding;\n\n          if (lineValue < me.top - epsilon) {\n            lineColor = 'rgba(0,0,0,0)';\n          }\n\n          tx1 = tickStart;\n          tx2 = tickEnd;\n          ty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth);\n          labelY = me.getPixelForTick(index) + labelOffset;\n          textOffset = (1 - labelCount) * lineHeight / 2;\n\n          if (position === 'left') {\n            x1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2;\n            x2 = chartArea.right;\n            textAlign = isMirrored ? 'left' : 'right';\n            labelX = me.right - labelXOffset;\n          } else {\n            x1 = chartArea.left;\n            x2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2;\n            textAlign = isMirrored ? 'right' : 'left';\n            labelX = me.left + labelXOffset;\n          }\n        }\n\n        itemsToDraw.push({\n          tx1: tx1,\n          ty1: ty1,\n          tx2: tx2,\n          ty2: ty2,\n          x1: x1,\n          y1: y1,\n          x2: x2,\n          y2: y2,\n          labelX: labelX,\n          labelY: labelY,\n          glWidth: lineWidth,\n          glColor: lineColor,\n          glBorderDash: borderDash,\n          glBorderDashOffset: borderDashOffset,\n          rotation: -1 * labelRotationRadians,\n          label: label,\n          major: tick.major,\n          textOffset: textOffset,\n          textAlign: textAlign\n        });\n      }); // Draw all of the tick labels, tick marks, and grid lines at the correct places\n\n      helpers$1.each(itemsToDraw, function (itemToDraw) {\n        var glWidth = itemToDraw.glWidth;\n        var glColor = itemToDraw.glColor;\n\n        if (gridLines.display && glWidth && glColor) {\n          context.save();\n          context.lineWidth = glWidth;\n          context.strokeStyle = glColor;\n\n          if (context.setLineDash) {\n            context.setLineDash(itemToDraw.glBorderDash);\n            context.lineDashOffset = itemToDraw.glBorderDashOffset;\n          }\n\n          context.beginPath();\n\n          if (gridLines.drawTicks) {\n            context.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n            context.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n          }\n\n          if (gridLines.drawOnChartArea) {\n            context.moveTo(itemToDraw.x1, itemToDraw.y1);\n            context.lineTo(itemToDraw.x2, itemToDraw.y2);\n          }\n\n          context.stroke();\n          context.restore();\n        }\n\n        if (optionTicks.display) {\n          // Make sure we draw text in the correct color and font\n          context.save();\n          context.translate(itemToDraw.labelX, itemToDraw.labelY);\n          context.rotate(itemToDraw.rotation);\n          context.font = itemToDraw.major ? majorTickFont.string : tickFont.string;\n          context.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n          context.textBaseline = 'middle';\n          context.textAlign = itemToDraw.textAlign;\n          var label = itemToDraw.label;\n          var y = itemToDraw.textOffset;\n\n          if (helpers$1.isArray(label)) {\n            for (var i = 0; i < label.length; ++i) {\n              // We just make sure the multiline element is a string here..\n              context.fillText('' + label[i], 0, y);\n              y += lineHeight;\n            }\n          } else {\n            context.fillText(label, 0, y);\n          }\n\n          context.restore();\n        }\n      });\n\n      if (scaleLabel.display) {\n        // Draw the scale label\n        var scaleLabelX;\n        var scaleLabelY;\n        var rotation = 0;\n        var halfLineHeight = scaleLabelFont.lineHeight / 2;\n\n        if (isHorizontal) {\n          scaleLabelX = me.left + (me.right - me.left) / 2; // midpoint of the width\n\n          scaleLabelY = position === 'bottom' ? me.bottom - halfLineHeight - scaleLabelPadding.bottom : me.top + halfLineHeight + scaleLabelPadding.top;\n        } else {\n          var isLeft = position === 'left';\n          scaleLabelX = isLeft ? me.left + halfLineHeight + scaleLabelPadding.top : me.right - halfLineHeight - scaleLabelPadding.top;\n          scaleLabelY = me.top + (me.bottom - me.top) / 2;\n          rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n        }\n\n        context.save();\n        context.translate(scaleLabelX, scaleLabelY);\n        context.rotate(rotation);\n        context.textAlign = 'center';\n        context.textBaseline = 'middle';\n        context.fillStyle = scaleLabelFontColor; // render in correct colour\n\n        context.font = scaleLabelFont.string;\n        context.fillText(scaleLabel.labelString, 0, 0);\n        context.restore();\n      }\n\n      if (axisWidth) {\n        // Draw the line at the edge of the axis\n        var firstLineWidth = axisWidth;\n        var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0);\n        var x1, x2, y1, y2;\n\n        if (isHorizontal) {\n          x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\n          x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n          y1 = y2 = borderValue;\n        } else {\n          y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\n          y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n          x1 = x2 = borderValue;\n        }\n\n        context.lineWidth = axisWidth;\n        context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\n        context.beginPath();\n        context.moveTo(x1, y1);\n        context.lineTo(x2, y2);\n        context.stroke();\n      }\n    }\n  });\n  var defaultConfig = {\n    position: 'bottom'\n  };\n  var scale_category = core_scale.extend({\n    /**\n    * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n    * else fall back to data.labels\n    * @private\n    */\n    getLabels: function getLabels() {\n      var data = this.chart.data;\n      return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n    },\n    determineDataLimits: function determineDataLimits() {\n      var me = this;\n      var labels = me.getLabels();\n      me.minIndex = 0;\n      me.maxIndex = labels.length - 1;\n      var findIndex;\n\n      if (me.options.ticks.min !== undefined) {\n        // user specified min value\n        findIndex = labels.indexOf(me.options.ticks.min);\n        me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n      }\n\n      if (me.options.ticks.max !== undefined) {\n        // user specified max value\n        findIndex = labels.indexOf(me.options.ticks.max);\n        me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n      }\n\n      me.min = labels[me.minIndex];\n      me.max = labels[me.maxIndex];\n    },\n    buildTicks: function buildTicks() {\n      var me = this;\n      var labels = me.getLabels(); // If we are viewing some subset of labels, slice the original array\n\n      me.ticks = me.minIndex === 0 && me.maxIndex === labels.length - 1 ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n    },\n    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n      var me = this;\n      var chart = me.chart;\n\n      if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\n        return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\n      }\n\n      return me.ticks[index - me.minIndex];\n    },\n    // Used to get data value locations.  Value can either be an index or a numerical value\n    getPixelForValue: function getPixelForValue(value, index) {\n      var me = this;\n      var offset = me.options.offset; // 1 is added because we need the length but we have the indexes\n\n      var offsetAmt = Math.max(me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1), 1); // If value is a data object, then index is the index in the data array,\n      // not the index of the scale. We need to change that.\n\n      var valueCategory;\n\n      if (value !== undefined && value !== null) {\n        valueCategory = me.isHorizontal() ? value.x : value.y;\n      }\n\n      if (valueCategory !== undefined || value !== undefined && isNaN(index)) {\n        var labels = me.getLabels();\n        value = valueCategory || value;\n        var idx = labels.indexOf(value);\n        index = idx !== -1 ? idx : index;\n      }\n\n      if (me.isHorizontal()) {\n        var valueWidth = me.width / offsetAmt;\n        var widthOffset = valueWidth * (index - me.minIndex);\n\n        if (offset) {\n          widthOffset += valueWidth / 2;\n        }\n\n        return me.left + widthOffset;\n      }\n\n      var valueHeight = me.height / offsetAmt;\n      var heightOffset = valueHeight * (index - me.minIndex);\n\n      if (offset) {\n        heightOffset += valueHeight / 2;\n      }\n\n      return me.top + heightOffset;\n    },\n    getPixelForTick: function getPixelForTick(index) {\n      return this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n    },\n    getValueForPixel: function getValueForPixel(pixel) {\n      var me = this;\n      var offset = me.options.offset;\n      var value;\n      var offsetAmt = Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n      var horz = me.isHorizontal();\n      var valueDimension = (horz ? me.width : me.height) / offsetAmt;\n      pixel -= horz ? me.left : me.top;\n\n      if (offset) {\n        pixel -= valueDimension / 2;\n      }\n\n      if (pixel <= 0) {\n        value = 0;\n      } else {\n        value = Math.round(pixel / valueDimension);\n      }\n\n      return value + me.minIndex;\n    },\n    getBasePixel: function getBasePixel() {\n      return this.bottom;\n    }\n  }); // INTERNAL: static default options, registered in src/index.js\n\n  var _defaults = defaultConfig;\n  scale_category._defaults = _defaults;\n  var noop = helpers$1.noop;\n  var isNullOrUndef = helpers$1.isNullOrUndef;\n  /**\n   * Generate a set of linear ticks\n   * @param generationOptions the options used to generate the ticks\n   * @param dataRange the range of the data\n   * @returns {number[]} array of tick values\n   */\n\n  function generateTicks(generationOptions, dataRange) {\n    var ticks = []; // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n    // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n    // for details.\n\n    var MIN_SPACING = 1e-14;\n    var stepSize = generationOptions.stepSize;\n    var unit = stepSize || 1;\n    var maxNumSpaces = generationOptions.maxTicks - 1;\n    var min = generationOptions.min;\n    var max = generationOptions.max;\n    var precision = generationOptions.precision;\n    var rmin = dataRange.min;\n    var rmax = dataRange.max;\n    var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\n    var factor, niceMin, niceMax, numSpaces; // Beyond MIN_SPACING floating point numbers being to lose precision\n    // such that we can't do the math necessary to generate ticks\n\n    if (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) {\n      return [rmin, rmax];\n    }\n\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n    if (numSpaces > maxNumSpaces) {\n      // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n      spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\n    }\n\n    if (stepSize || isNullOrUndef(precision)) {\n      // If a precision is not specified, calculate factor based on spacing\n      factor = Math.pow(10, helpers$1._decimalPlaces(spacing));\n    } else {\n      // If the user specified a precision, round to that number of decimal places\n      factor = Math.pow(10, precision);\n      spacing = Math.ceil(spacing * factor) / factor;\n    }\n\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing; // If min, max and stepSize is set and they make an evenly spaced scale use it.\n\n    if (stepSize) {\n      // If very close to our whole number, use it.\n      if (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\n        niceMin = min;\n      }\n\n      if (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\n        niceMax = max;\n      }\n    }\n\n    numSpaces = (niceMax - niceMin) / spacing; // If very close to our rounded value, use it.\n\n    if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    ticks.push(isNullOrUndef(min) ? niceMin : min);\n\n    for (var j = 1; j < numSpaces; ++j) {\n      ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\n    }\n\n    ticks.push(isNullOrUndef(max) ? niceMax : max);\n    return ticks;\n  }\n\n  var scale_linearbase = core_scale.extend({\n    getRightValue: function getRightValue(value) {\n      if (typeof value === 'string') {\n        return +value;\n      }\n\n      return core_scale.prototype.getRightValue.call(this, value);\n    },\n    handleTickRangeOptions: function handleTickRangeOptions() {\n      var me = this;\n      var opts = me.options;\n      var tickOpts = opts.ticks; // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n      // do nothing since that would make the chart weird. If the user really wants a weird chart\n      // axis, they can manually override it\n\n      if (tickOpts.beginAtZero) {\n        var minSign = helpers$1.sign(me.min);\n        var maxSign = helpers$1.sign(me.max);\n\n        if (minSign < 0 && maxSign < 0) {\n          // move the top up to 0\n          me.max = 0;\n        } else if (minSign > 0 && maxSign > 0) {\n          // move the bottom down to 0\n          me.min = 0;\n        }\n      }\n\n      var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n      var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n      if (tickOpts.min !== undefined) {\n        me.min = tickOpts.min;\n      } else if (tickOpts.suggestedMin !== undefined) {\n        if (me.min === null) {\n          me.min = tickOpts.suggestedMin;\n        } else {\n          me.min = Math.min(me.min, tickOpts.suggestedMin);\n        }\n      }\n\n      if (tickOpts.max !== undefined) {\n        me.max = tickOpts.max;\n      } else if (tickOpts.suggestedMax !== undefined) {\n        if (me.max === null) {\n          me.max = tickOpts.suggestedMax;\n        } else {\n          me.max = Math.max(me.max, tickOpts.suggestedMax);\n        }\n      }\n\n      if (setMin !== setMax) {\n        // We set the min or the max but not both.\n        // So ensure that our range is good\n        // Inverted or 0 length range can happen when\n        // ticks.min is set, and no datasets are visible\n        if (me.min >= me.max) {\n          if (setMin) {\n            me.max = me.min + 1;\n          } else {\n            me.min = me.max - 1;\n          }\n        }\n      }\n\n      if (me.min === me.max) {\n        me.max++;\n\n        if (!tickOpts.beginAtZero) {\n          me.min--;\n        }\n      }\n    },\n    getTickLimit: function getTickLimit() {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var stepSize = tickOpts.stepSize;\n      var maxTicksLimit = tickOpts.maxTicksLimit;\n      var maxTicks;\n\n      if (stepSize) {\n        maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n      } else {\n        maxTicks = me._computeTickLimit();\n        maxTicksLimit = maxTicksLimit || 11;\n      }\n\n      if (maxTicksLimit) {\n        maxTicks = Math.min(maxTicksLimit, maxTicks);\n      }\n\n      return maxTicks;\n    },\n    _computeTickLimit: function _computeTickLimit() {\n      return Number.POSITIVE_INFINITY;\n    },\n    handleDirectionalChanges: noop,\n    buildTicks: function buildTicks() {\n      var me = this;\n      var opts = me.options;\n      var tickOpts = opts.ticks; // Figure out what the max number of ticks we can support it is based on the size of\n      // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n      // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n      // the graph. Make sure we always have at least 2 ticks\n\n      var maxTicks = me.getTickLimit();\n      maxTicks = Math.max(2, maxTicks);\n      var numericGeneratorOptions = {\n        maxTicks: maxTicks,\n        min: tickOpts.min,\n        max: tickOpts.max,\n        precision: tickOpts.precision,\n        stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n      };\n      var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n      me.handleDirectionalChanges(); // At this point, we need to update our max and min given the tick values since we have expanded the\n      // range of the scale\n\n      me.max = helpers$1.max(ticks);\n      me.min = helpers$1.min(ticks);\n\n      if (tickOpts.reverse) {\n        ticks.reverse();\n        me.start = me.max;\n        me.end = me.min;\n      } else {\n        me.start = me.min;\n        me.end = me.max;\n      }\n    },\n    convertTicksToLabels: function convertTicksToLabels() {\n      var me = this;\n      me.ticksAsNumbers = me.ticks.slice();\n      me.zeroLineIndex = me.ticks.indexOf(0);\n      core_scale.prototype.convertTicksToLabels.call(me);\n    }\n  });\n  var defaultConfig$1 = {\n    position: 'left',\n    ticks: {\n      callback: core_ticks.formatters.linear\n    }\n  };\n  var scale_linear = scale_linearbase.extend({\n    determineDataLimits: function determineDataLimits() {\n      var me = this;\n      var opts = me.options;\n      var chart = me.chart;\n      var data = chart.data;\n      var datasets = data.datasets;\n      var isHorizontal = me.isHorizontal();\n      var DEFAULT_MIN = 0;\n      var DEFAULT_MAX = 1;\n\n      function IDMatches(meta) {\n        return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n      } // First Calculate the range\n\n\n      me.min = null;\n      me.max = null;\n      var hasStacks = opts.stacked;\n\n      if (hasStacks === undefined) {\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          if (hasStacks) {\n            return;\n          }\n\n          var meta = chart.getDatasetMeta(datasetIndex);\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n            hasStacks = true;\n          }\n        });\n      }\n\n      if (opts.stacked || hasStacks) {\n        var valuesPerStack = {};\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n          var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n          opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n          if (valuesPerStack[key] === undefined) {\n            valuesPerStack[key] = {\n              positiveValues: [],\n              negativeValues: []\n            };\n          } // Store these per type\n\n\n          var positiveValues = valuesPerStack[key].positiveValues;\n          var negativeValues = valuesPerStack[key].negativeValues;\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            helpers$1.each(dataset.data, function (rawValue, index) {\n              var value = +me.getRightValue(rawValue);\n\n              if (isNaN(value) || meta.data[index].hidden) {\n                return;\n              }\n\n              positiveValues[index] = positiveValues[index] || 0;\n              negativeValues[index] = negativeValues[index] || 0;\n\n              if (opts.relativePoints) {\n                positiveValues[index] = 100;\n              } else if (value < 0) {\n                negativeValues[index] += value;\n              } else {\n                positiveValues[index] += value;\n              }\n            });\n          }\n        });\n        helpers$1.each(valuesPerStack, function (valuesForType) {\n          var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n          var minVal = helpers$1.min(values);\n          var maxVal = helpers$1.max(values);\n          me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n          me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n        });\n      } else {\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            helpers$1.each(dataset.data, function (rawValue, index) {\n              var value = +me.getRightValue(rawValue);\n\n              if (isNaN(value) || meta.data[index].hidden) {\n                return;\n              }\n\n              if (me.min === null) {\n                me.min = value;\n              } else if (value < me.min) {\n                me.min = value;\n              }\n\n              if (me.max === null) {\n                me.max = value;\n              } else if (value > me.max) {\n                me.max = value;\n              }\n            });\n          }\n        });\n      }\n\n      me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n      me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\n      this.handleTickRangeOptions();\n    },\n    // Returns the maximum number of ticks based on the scale dimension\n    _computeTickLimit: function _computeTickLimit() {\n      var me = this;\n      var tickFont;\n\n      if (me.isHorizontal()) {\n        return Math.ceil(me.width / 40);\n      }\n\n      tickFont = helpers$1.options._parseFont(me.options.ticks);\n      return Math.ceil(me.height / tickFont.lineHeight);\n    },\n    // Called after the ticks are built. We need\n    handleDirectionalChanges: function handleDirectionalChanges() {\n      if (!this.isHorizontal()) {\n        // We are in a vertical orientation. The top value is the highest. So reverse the array\n        this.ticks.reverse();\n      }\n    },\n    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    // Utils\n    getPixelForValue: function getPixelForValue(value) {\n      // This must be called after fit has been run so that\n      // this.left, this.top, this.right, and this.bottom have been defined\n      var me = this;\n      var start = me.start;\n      var rightValue = +me.getRightValue(value);\n      var pixel;\n      var range = me.end - start;\n\n      if (me.isHorizontal()) {\n        pixel = me.left + me.width / range * (rightValue - start);\n      } else {\n        pixel = me.bottom - me.height / range * (rightValue - start);\n      }\n\n      return pixel;\n    },\n    getValueForPixel: function getValueForPixel(pixel) {\n      var me = this;\n      var isHorizontal = me.isHorizontal();\n      var innerDimension = isHorizontal ? me.width : me.height;\n      var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n      return me.start + (me.end - me.start) * offset;\n    },\n    getPixelForTick: function getPixelForTick(index) {\n      return this.getPixelForValue(this.ticksAsNumbers[index]);\n    }\n  }); // INTERNAL: static default options, registered in src/index.js\n\n  var _defaults$1 = defaultConfig$1;\n  scale_linear._defaults = _defaults$1;\n  var valueOrDefault$a = helpers$1.valueOrDefault;\n  /**\n   * Generate a set of logarithmic ticks\n   * @param generationOptions the options used to generate the ticks\n   * @param dataRange the range of the data\n   * @returns {number[]} array of tick values\n   */\n\n  function generateTicks$1(generationOptions, dataRange) {\n    var ticks = [];\n    var tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min))));\n    var endExp = Math.floor(helpers$1.log10(dataRange.max));\n    var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n    var exp, significand;\n\n    if (tickVal === 0) {\n      exp = Math.floor(helpers$1.log10(dataRange.minNotZero));\n      significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n      ticks.push(tickVal);\n      tickVal = significand * Math.pow(10, exp);\n    } else {\n      exp = Math.floor(helpers$1.log10(tickVal));\n      significand = Math.floor(tickVal / Math.pow(10, exp));\n    }\n\n    var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n    do {\n      ticks.push(tickVal);\n      ++significand;\n\n      if (significand === 10) {\n        significand = 1;\n        ++exp;\n        precision = exp >= 0 ? 1 : precision;\n      }\n\n      tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n    } while (exp < endExp || exp === endExp && significand < endSignificand);\n\n    var lastTick = valueOrDefault$a(generationOptions.max, tickVal);\n    ticks.push(lastTick);\n    return ticks;\n  }\n\n  var defaultConfig$2 = {\n    position: 'left',\n    // label settings\n    ticks: {\n      callback: core_ticks.formatters.logarithmic\n    }\n  }; // TODO(v3): change this to positiveOrDefault\n\n  function nonNegativeOrDefault(value, defaultValue) {\n    return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\n  }\n\n  var scale_logarithmic = core_scale.extend({\n    determineDataLimits: function determineDataLimits() {\n      var me = this;\n      var opts = me.options;\n      var chart = me.chart;\n      var data = chart.data;\n      var datasets = data.datasets;\n      var isHorizontal = me.isHorizontal();\n\n      function IDMatches(meta) {\n        return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n      } // Calculate Range\n\n\n      me.min = null;\n      me.max = null;\n      me.minNotZero = null;\n      var hasStacks = opts.stacked;\n\n      if (hasStacks === undefined) {\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          if (hasStacks) {\n            return;\n          }\n\n          var meta = chart.getDatasetMeta(datasetIndex);\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n            hasStacks = true;\n          }\n        });\n      }\n\n      if (opts.stacked || hasStacks) {\n        var valuesPerStack = {};\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n          var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n          opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            if (valuesPerStack[key] === undefined) {\n              valuesPerStack[key] = [];\n            }\n\n            helpers$1.each(dataset.data, function (rawValue, index) {\n              var values = valuesPerStack[key];\n              var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored\n\n              if (isNaN(value) || meta.data[index].hidden || value < 0) {\n                return;\n              }\n\n              values[index] = values[index] || 0;\n              values[index] += value;\n            });\n          }\n        });\n        helpers$1.each(valuesPerStack, function (valuesForType) {\n          if (valuesForType.length > 0) {\n            var minVal = helpers$1.min(valuesForType);\n            var maxVal = helpers$1.max(valuesForType);\n            me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n            me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n          }\n        });\n      } else {\n        helpers$1.each(datasets, function (dataset, datasetIndex) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            helpers$1.each(dataset.data, function (rawValue, index) {\n              var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored\n\n              if (isNaN(value) || meta.data[index].hidden || value < 0) {\n                return;\n              }\n\n              if (me.min === null) {\n                me.min = value;\n              } else if (value < me.min) {\n                me.min = value;\n              }\n\n              if (me.max === null) {\n                me.max = value;\n              } else if (value > me.max) {\n                me.max = value;\n              }\n\n              if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n                me.minNotZero = value;\n              }\n            });\n          }\n        });\n      } // Common base implementation to handle ticks.min, ticks.max\n\n\n      this.handleTickRangeOptions();\n    },\n    handleTickRangeOptions: function handleTickRangeOptions() {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var DEFAULT_MIN = 1;\n      var DEFAULT_MAX = 10;\n      me.min = nonNegativeOrDefault(tickOpts.min, me.min);\n      me.max = nonNegativeOrDefault(tickOpts.max, me.max);\n\n      if (me.min === me.max) {\n        if (me.min !== 0 && me.min !== null) {\n          me.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1);\n          me.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1);\n        } else {\n          me.min = DEFAULT_MIN;\n          me.max = DEFAULT_MAX;\n        }\n      }\n\n      if (me.min === null) {\n        me.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1);\n      }\n\n      if (me.max === null) {\n        me.max = me.min !== 0 ? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1) : DEFAULT_MAX;\n      }\n\n      if (me.minNotZero === null) {\n        if (me.min > 0) {\n          me.minNotZero = me.min;\n        } else if (me.max < 1) {\n          me.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max)));\n        } else {\n          me.minNotZero = DEFAULT_MIN;\n        }\n      }\n    },\n    buildTicks: function buildTicks() {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var reverse = !me.isHorizontal();\n      var generationOptions = {\n        min: nonNegativeOrDefault(tickOpts.min),\n        max: nonNegativeOrDefault(tickOpts.max)\n      };\n      var ticks = me.ticks = generateTicks$1(generationOptions, me); // At this point, we need to update our max and min given the tick values since we have expanded the\n      // range of the scale\n\n      me.max = helpers$1.max(ticks);\n      me.min = helpers$1.min(ticks);\n\n      if (tickOpts.reverse) {\n        reverse = !reverse;\n        me.start = me.max;\n        me.end = me.min;\n      } else {\n        me.start = me.min;\n        me.end = me.max;\n      }\n\n      if (reverse) {\n        ticks.reverse();\n      }\n    },\n    convertTicksToLabels: function convertTicksToLabels() {\n      this.tickValues = this.ticks.slice();\n      core_scale.prototype.convertTicksToLabels.call(this);\n    },\n    // Get the correct tooltip label\n    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    getPixelForTick: function getPixelForTick(index) {\n      return this.getPixelForValue(this.tickValues[index]);\n    },\n\n    /**\n     * Returns the value of the first tick.\n     * @param {number} value - The minimum not zero value.\n     * @return {number} The first tick value.\n     * @private\n     */\n    _getFirstTickValue: function _getFirstTickValue(value) {\n      var exp = Math.floor(helpers$1.log10(value));\n      var significand = Math.floor(value / Math.pow(10, exp));\n      return significand * Math.pow(10, exp);\n    },\n    getPixelForValue: function getPixelForValue(value) {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var reverse = tickOpts.reverse;\n      var log10 = helpers$1.log10;\n\n      var firstTickValue = me._getFirstTickValue(me.minNotZero);\n\n      var offset = 0;\n      var innerDimension, pixel, start, end, sign;\n      value = +me.getRightValue(value);\n\n      if (reverse) {\n        start = me.end;\n        end = me.start;\n        sign = -1;\n      } else {\n        start = me.start;\n        end = me.end;\n        sign = 1;\n      }\n\n      if (me.isHorizontal()) {\n        innerDimension = me.width;\n        pixel = reverse ? me.right : me.left;\n      } else {\n        innerDimension = me.height;\n        sign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\n        pixel = reverse ? me.top : me.bottom;\n      }\n\n      if (value !== start) {\n        if (start === 0) {\n          // include zero tick\n          offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n          innerDimension -= offset;\n          start = firstTickValue;\n        }\n\n        if (value !== 0) {\n          offset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n        }\n\n        pixel += sign * offset;\n      }\n\n      return pixel;\n    },\n    getValueForPixel: function getValueForPixel(pixel) {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var reverse = tickOpts.reverse;\n      var log10 = helpers$1.log10;\n\n      var firstTickValue = me._getFirstTickValue(me.minNotZero);\n\n      var innerDimension, start, end, value;\n\n      if (reverse) {\n        start = me.end;\n        end = me.start;\n      } else {\n        start = me.start;\n        end = me.end;\n      }\n\n      if (me.isHorizontal()) {\n        innerDimension = me.width;\n        value = reverse ? me.right - pixel : pixel - me.left;\n      } else {\n        innerDimension = me.height;\n        value = reverse ? pixel - me.top : me.bottom - pixel;\n      }\n\n      if (value !== start) {\n        if (start === 0) {\n          // include zero tick\n          var offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n          value -= offset;\n          innerDimension -= offset;\n          start = firstTickValue;\n        }\n\n        value *= log10(end) - log10(start);\n        value /= innerDimension;\n        value = Math.pow(10, log10(start) + value);\n      }\n\n      return value;\n    }\n  }); // INTERNAL: static default options, registered in src/index.js\n\n  var _defaults$2 = defaultConfig$2;\n  scale_logarithmic._defaults = _defaults$2;\n  var valueOrDefault$b = helpers$1.valueOrDefault;\n  var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\n  var resolve$7 = helpers$1.options.resolve;\n  var defaultConfig$3 = {\n    display: true,\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n    angleLines: {\n      display: true,\n      color: 'rgba(0, 0, 0, 0.1)',\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n    gridLines: {\n      circular: false\n    },\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n      // String - The colour of the label backdrop\n      backdropColor: 'rgba(255,255,255,0.75)',\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPaddingY: 2,\n      // Number - The backdrop padding to the side of the label in pixels\n      backdropPaddingX: 2,\n      callback: core_ticks.formatters.linear\n    },\n    pointLabels: {\n      // Boolean - if true, show point labels\n      display: true,\n      // Number - Point label font size in pixels\n      fontSize: 10,\n      // Function - Used to convert point labels\n      callback: function callback(label) {\n        return label;\n      }\n    }\n  };\n\n  function getValueCount(scale) {\n    var opts = scale.options;\n    return opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n  }\n\n  function getTickBackdropHeight(opts) {\n    var tickOpts = opts.ticks;\n\n    if (tickOpts.display && opts.display) {\n      return valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\n    }\n\n    return 0;\n  }\n\n  function measureLabelSize(ctx, lineHeight, label) {\n    if (helpers$1.isArray(label)) {\n      return {\n        w: helpers$1.longestText(ctx, ctx.font, label),\n        h: label.length * lineHeight\n      };\n    }\n\n    return {\n      w: ctx.measureText(label).width,\n      h: lineHeight\n    };\n  }\n\n  function determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n      return {\n        start: pos - size / 2,\n        end: pos + size / 2\n      };\n    } else if (angle < min || angle > max) {\n      return {\n        start: pos - size,\n        end: pos\n      };\n    }\n\n    return {\n      start: pos,\n      end: pos + size\n    };\n  }\n  /**\n   * Helper function to fit a radial linear scale with point labels\n   */\n\n\n  function fitWithPointLabels(scale) {\n    // Right, this is really confusing and there is a lot of maths going on here\n    // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n    //\n    // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n    //\n    // Solution:\n    //\n    // We assume the radius of the polygon is half the size of the canvas at first\n    // at each index we check if the text overlaps.\n    //\n    // Where it does, we store that angle and that index.\n    //\n    // After finding the largest index and angle we calculate how much we need to remove\n    // from the shape radius to move the point inwards by that x.\n    //\n    // We average the left and right distances to get the maximum shape radius that can fit in the box\n    // along with labels.\n    //\n    // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n    // on each side, removing that from the size, halving it and adding the left x protrusion width.\n    //\n    // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n    // and position it in the most space efficient manner\n    //\n    // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n    var plFont = helpers$1.options._parseFont(scale.options.pointLabels); // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n    // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\n\n    var furthestLimits = {\n      l: 0,\n      r: scale.width,\n      t: 0,\n      b: scale.height - scale.paddingTop\n    };\n    var furthestAngles = {};\n    var i, textSize, pointPosition;\n    scale.ctx.font = plFont.string;\n    scale._pointLabelSizes = [];\n    var valueCount = getValueCount(scale);\n\n    for (i = 0; i < valueCount; i++) {\n      pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\n      textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');\n      scale._pointLabelSizes[i] = textSize; // Add quarter circle to make degree 0 mean top of circle\n\n      var angleRadians = scale.getIndexAngle(i);\n      var angle = helpers$1.toDegrees(angleRadians) % 360;\n      var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n      var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n      if (hLimits.start < furthestLimits.l) {\n        furthestLimits.l = hLimits.start;\n        furthestAngles.l = angleRadians;\n      }\n\n      if (hLimits.end > furthestLimits.r) {\n        furthestLimits.r = hLimits.end;\n        furthestAngles.r = angleRadians;\n      }\n\n      if (vLimits.start < furthestLimits.t) {\n        furthestLimits.t = vLimits.start;\n        furthestAngles.t = angleRadians;\n      }\n\n      if (vLimits.end > furthestLimits.b) {\n        furthestLimits.b = vLimits.end;\n        furthestAngles.b = angleRadians;\n      }\n    }\n\n    scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n  }\n\n  function getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n      return 'center';\n    } else if (angle < 180) {\n      return 'left';\n    }\n\n    return 'right';\n  }\n\n  function fillText(ctx, text, position, lineHeight) {\n    var y = position.y + lineHeight / 2;\n    var i, ilen;\n\n    if (helpers$1.isArray(text)) {\n      for (i = 0, ilen = text.length; i < ilen; ++i) {\n        ctx.fillText(text[i], position.x, y);\n        y += lineHeight;\n      }\n    } else {\n      ctx.fillText(text, position.x, y);\n    }\n  }\n\n  function adjustPointPositionForLabelHeight(angle, textSize, position) {\n    if (angle === 90 || angle === 270) {\n      position.y -= textSize.h / 2;\n    } else if (angle > 270 || angle < 90) {\n      position.y -= textSize.h;\n    }\n  }\n\n  function drawPointLabels(scale) {\n    var ctx = scale.ctx;\n    var opts = scale.options;\n    var angleLineOpts = opts.angleLines;\n    var gridLineOpts = opts.gridLines;\n    var pointLabelOpts = opts.pointLabels;\n    var lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\n    var lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color);\n    var tickBackdropHeight = getTickBackdropHeight(opts);\n    ctx.save();\n    ctx.lineWidth = lineWidth;\n    ctx.strokeStyle = lineColor;\n\n    if (ctx.setLineDash) {\n      ctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\n      ctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\n    }\n\n    var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); // Point Label Font\n\n    var plFont = helpers$1.options._parseFont(pointLabelOpts);\n\n    ctx.font = plFont.string;\n    ctx.textBaseline = 'middle';\n\n    for (var i = getValueCount(scale) - 1; i >= 0; i--) {\n      if (angleLineOpts.display && lineWidth && lineColor) {\n        var outerPosition = scale.getPointPosition(i, outerDistance);\n        ctx.beginPath();\n        ctx.moveTo(scale.xCenter, scale.yCenter);\n        ctx.lineTo(outerPosition.x, outerPosition.y);\n        ctx.stroke();\n      }\n\n      if (pointLabelOpts.display) {\n        // Extra pixels out for some label spacing\n        var extra = i === 0 ? tickBackdropHeight / 2 : 0;\n        var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); // Keep this in loop since we may support array properties here\n\n        var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\n        ctx.fillStyle = pointLabelFontColor;\n        var angleRadians = scale.getIndexAngle(i);\n        var angle = helpers$1.toDegrees(angleRadians);\n        ctx.textAlign = getTextAlignForAngle(angle);\n        adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n        fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight);\n      }\n    }\n\n    ctx.restore();\n  }\n\n  function drawRadiusLine(scale, gridLineOpts, radius, index) {\n    var ctx = scale.ctx;\n    var circular = gridLineOpts.circular;\n    var valueCount = getValueCount(scale);\n    var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\n    var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\n    var pointPosition;\n\n    if (!circular && !valueCount || !lineColor || !lineWidth) {\n      return;\n    }\n\n    ctx.save();\n    ctx.strokeStyle = lineColor;\n    ctx.lineWidth = lineWidth;\n\n    if (ctx.setLineDash) {\n      ctx.setLineDash(gridLineOpts.borderDash || []);\n      ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\n    }\n\n    ctx.beginPath();\n\n    if (circular) {\n      // Draw circular arcs between the points\n      ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n    } else {\n      // Draw straight lines connecting each index\n      pointPosition = scale.getPointPosition(0, radius);\n      ctx.moveTo(pointPosition.x, pointPosition.y);\n\n      for (var i = 1; i < valueCount; i++) {\n        pointPosition = scale.getPointPosition(i, radius);\n        ctx.lineTo(pointPosition.x, pointPosition.y);\n      }\n    }\n\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  function numberOrZero(param) {\n    return helpers$1.isNumber(param) ? param : 0;\n  }\n\n  var scale_radialLinear = scale_linearbase.extend({\n    setDimensions: function setDimensions() {\n      var me = this; // Set the unconstrained dimension before label rotation\n\n      me.width = me.maxWidth;\n      me.height = me.maxHeight;\n      me.paddingTop = getTickBackdropHeight(me.options) / 2;\n      me.xCenter = Math.floor(me.width / 2);\n      me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n      me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n    },\n    determineDataLimits: function determineDataLimits() {\n      var me = this;\n      var chart = me.chart;\n      var min = Number.POSITIVE_INFINITY;\n      var max = Number.NEGATIVE_INFINITY;\n      helpers$1.each(chart.data.datasets, function (dataset, datasetIndex) {\n        if (chart.isDatasetVisible(datasetIndex)) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n          helpers$1.each(dataset.data, function (rawValue, index) {\n            var value = +me.getRightValue(rawValue);\n\n            if (isNaN(value) || meta.data[index].hidden) {\n              return;\n            }\n\n            min = Math.min(value, min);\n            max = Math.max(value, max);\n          });\n        }\n      });\n      me.min = min === Number.POSITIVE_INFINITY ? 0 : min;\n      me.max = max === Number.NEGATIVE_INFINITY ? 0 : max; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\n      me.handleTickRangeOptions();\n    },\n    // Returns the maximum number of ticks based on the scale dimension\n    _computeTickLimit: function _computeTickLimit() {\n      return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    },\n    convertTicksToLabels: function convertTicksToLabels() {\n      var me = this;\n      scale_linearbase.prototype.convertTicksToLabels.call(me); // Point labels\n\n      me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n    },\n    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    fit: function fit() {\n      var me = this;\n      var opts = me.options;\n\n      if (opts.display && opts.pointLabels.display) {\n        fitWithPointLabels(me);\n      } else {\n        me.setCenterPoint(0, 0, 0, 0);\n      }\n    },\n\n    /**\n     * Set radius reductions and determine new radius and center point\n     * @private\n     */\n    setReductions: function setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n      var me = this;\n      var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n      var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n      var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n      var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n      radiusReductionLeft = numberOrZero(radiusReductionLeft);\n      radiusReductionRight = numberOrZero(radiusReductionRight);\n      radiusReductionTop = numberOrZero(radiusReductionTop);\n      radiusReductionBottom = numberOrZero(radiusReductionBottom);\n      me.drawingArea = Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n      me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n    },\n    setCenterPoint: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n      var me = this;\n      var maxRight = me.width - rightMovement - me.drawingArea;\n      var maxLeft = leftMovement + me.drawingArea;\n      var maxTop = topMovement + me.drawingArea;\n      var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;\n      me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);\n      me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);\n    },\n    getIndexAngle: function getIndexAngle(index) {\n      var angleMultiplier = Math.PI * 2 / getValueCount(this);\n      var startAngle = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0;\n      var startAngleRadians = startAngle * Math.PI * 2 / 360; // Start from the top instead of right, so remove a quarter of the circle\n\n      return index * angleMultiplier + startAngleRadians;\n    },\n    getDistanceFromCenterForValue: function getDistanceFromCenterForValue(value) {\n      var me = this;\n\n      if (value === null) {\n        return 0; // null always in center\n      } // Take into account half font size + the yPadding of the top value\n\n\n      var scalingFactor = me.drawingArea / (me.max - me.min);\n\n      if (me.options.ticks.reverse) {\n        return (me.max - value) * scalingFactor;\n      }\n\n      return (value - me.min) * scalingFactor;\n    },\n    getPointPosition: function getPointPosition(index, distanceFromCenter) {\n      var me = this;\n      var thisAngle = me.getIndexAngle(index) - Math.PI / 2;\n      return {\n        x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\n        y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\n      };\n    },\n    getPointPositionForValue: function getPointPositionForValue(index, value) {\n      return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    },\n    getBasePosition: function getBasePosition() {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      return me.getPointPositionForValue(0, me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0);\n    },\n    draw: function draw() {\n      var me = this;\n      var opts = me.options;\n      var gridLineOpts = opts.gridLines;\n      var tickOpts = opts.ticks;\n\n      if (opts.display) {\n        var ctx = me.ctx;\n        var startAngle = this.getIndexAngle(0);\n\n        var tickFont = helpers$1.options._parseFont(tickOpts);\n\n        if (opts.angleLines.display || opts.pointLabels.display) {\n          drawPointLabels(me);\n        }\n\n        helpers$1.each(me.ticks, function (label, index) {\n          // Don't draw a centre value (if it is minimum)\n          if (index > 0 || tickOpts.reverse) {\n            var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); // Draw circular lines around the scale\n\n            if (gridLineOpts.display && index !== 0) {\n              drawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n            }\n\n            if (tickOpts.display) {\n              var tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor);\n              ctx.font = tickFont.string;\n              ctx.save();\n              ctx.translate(me.xCenter, me.yCenter);\n              ctx.rotate(startAngle);\n\n              if (tickOpts.showLabelBackdrop) {\n                var labelWidth = ctx.measureText(label).width;\n                ctx.fillStyle = tickOpts.backdropColor;\n                ctx.fillRect(-labelWidth / 2 - tickOpts.backdropPaddingX, -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY, labelWidth + tickOpts.backdropPaddingX * 2, tickFont.size + tickOpts.backdropPaddingY * 2);\n              }\n\n              ctx.textAlign = 'center';\n              ctx.textBaseline = 'middle';\n              ctx.fillStyle = tickFontColor;\n              ctx.fillText(label, 0, -yCenterOffset);\n              ctx.restore();\n            }\n          }\n        });\n      }\n    }\n  }); // INTERNAL: static default options, registered in src/index.js\n\n  var _defaults$3 = defaultConfig$3;\n  scale_radialLinear._defaults = _defaults$3;\n  var valueOrDefault$c = helpers$1.valueOrDefault; // Integer constants are from the ES6 spec.\n\n  var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n  var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n  var INTERVALS = {\n    millisecond: {\n      common: true,\n      size: 1,\n      steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n    },\n    second: {\n      common: true,\n      size: 1000,\n      steps: [1, 2, 5, 10, 15, 30]\n    },\n    minute: {\n      common: true,\n      size: 60000,\n      steps: [1, 2, 5, 10, 15, 30]\n    },\n    hour: {\n      common: true,\n      size: 3600000,\n      steps: [1, 2, 3, 6, 12]\n    },\n    day: {\n      common: true,\n      size: 86400000,\n      steps: [1, 2, 5]\n    },\n    week: {\n      common: false,\n      size: 604800000,\n      steps: [1, 2, 3, 4]\n    },\n    month: {\n      common: true,\n      size: 2.628e9,\n      steps: [1, 2, 3]\n    },\n    quarter: {\n      common: false,\n      size: 7.884e9,\n      steps: [1, 2, 3, 4]\n    },\n    year: {\n      common: true,\n      size: 3.154e10\n    }\n  };\n  var UNITS = Object.keys(INTERVALS);\n\n  function sorter(a, b) {\n    return a - b;\n  }\n\n  function arrayUnique(items) {\n    var hash = {};\n    var out = [];\n    var i, ilen, item;\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n\n      if (!hash[item]) {\n        hash[item] = true;\n        out.push(item);\n      }\n    }\n\n    return out;\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   */\n\n\n  function buildLookupTable(timestamps, min, max, distribution) {\n    if (distribution === 'linear' || !timestamps.length) {\n      return [{\n        time: min,\n        pos: 0\n      }, {\n        time: max,\n        pos: 1\n      }];\n    }\n\n    var table = [];\n    var items = [min];\n    var i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n\n      if (curr > min && curr < max) {\n        items.push(curr);\n      }\n    }\n\n    items.push(max);\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i]; // only add points that breaks the scale linearity\n\n      if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n        table.push({\n          time: curr,\n          pos: i / (ilen - 1)\n        });\n      }\n    }\n\n    return table;\n  } // @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\n\n\n  function lookup(table, key, value) {\n    var lo = 0;\n    var hi = table.length - 1;\n    var mid, i0, i1;\n\n    while (lo >= 0 && lo <= hi) {\n      mid = lo + hi >> 1;\n      i0 = table[mid - 1] || null;\n      i1 = table[mid];\n\n      if (!i0) {\n        // given value is outside table (before first item)\n        return {\n          lo: null,\n          hi: i1\n        };\n      } else if (i1[key] < value) {\n        lo = mid + 1;\n      } else if (i0[key] > value) {\n        hi = mid - 1;\n      } else {\n        return {\n          lo: i0,\n          hi: i1\n        };\n      }\n    } // given value is outside table (after last item)\n\n\n    return {\n      lo: i1,\n      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   */\n\n\n  function interpolate$1(table, skey, sval, tkey) {\n    var range = lookup(table, skey, sval); // Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\n    var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n    var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n    var span = next[skey] - prev[skey];\n    var ratio = span ? (sval - prev[skey]) / span : 0;\n    var offset = (next[tkey] - prev[tkey]) * ratio;\n    return prev[tkey] + offset;\n  }\n\n  function toTimestamp(scale, input) {\n    var adapter = scale._adapter;\n    var options = scale.options.time;\n    var parser = options.parser;\n    var format = parser || options.format;\n    var value = input;\n\n    if (typeof parser === 'function') {\n      value = parser(value);\n    } // Only parse if its not a timestamp already\n\n\n    if (!helpers$1.isFinite(value)) {\n      value = typeof format === 'string' ? adapter.parse(value, format) : adapter.parse(value);\n    }\n\n    if (value !== null) {\n      return +value;\n    } // Labels are in an incompatible format and no `parser` has been provided.\n    // The user might still use the deprecated `format` option for parsing.\n\n\n    if (!parser && typeof format === 'function') {\n      value = format(input); // `format` could return something else than a timestamp, if so, parse it\n\n      if (!helpers$1.isFinite(value)) {\n        value = adapter.parse(value);\n      }\n    }\n\n    return value;\n  }\n\n  function parse(scale, input) {\n    if (helpers$1.isNullOrUndef(input)) {\n      return null;\n    }\n\n    var options = scale.options.time;\n    var value = toTimestamp(scale, scale.getRightValue(input));\n\n    if (value === null) {\n      return value;\n    }\n\n    if (options.round) {\n      value = +scale._adapter.startOf(value, options.round);\n    }\n\n    return value;\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   */\n\n\n  function determineStepSize(min, max, unit, capacity) {\n    var range = max - min;\n    var interval = INTERVALS[unit];\n    var milliseconds = interval.size;\n    var steps = interval.steps;\n    var i, ilen, factor;\n\n    if (!steps) {\n      return Math.ceil(range / (capacity * milliseconds));\n    }\n\n    for (i = 0, ilen = steps.length; i < ilen; ++i) {\n      factor = steps[i];\n\n      if (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n        break;\n      }\n    }\n\n    return factor;\n  }\n  /**\n   * Figures out what unit results in an appropriate number of auto-generated ticks\n   */\n\n\n  function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    var ilen = UNITS.length;\n    var i, interval, factor;\n\n    for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n      interval = INTERVALS[UNITS[i]];\n      factor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n      if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n        return UNITS[i];\n      }\n    }\n\n    return UNITS[ilen - 1];\n  }\n  /**\n   * Figures out what unit to format a set of ticks with\n   */\n\n\n  function determineUnitForFormatting(scale, ticks, minUnit, min, max) {\n    var ilen = UNITS.length;\n    var i, unit;\n\n    for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n      unit = UNITS[i];\n\n      if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {\n        return unit;\n      }\n    }\n\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n  }\n\n  function determineMajorUnit(unit) {\n    for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n      if (INTERVALS[UNITS[i]].common) {\n        return UNITS[i];\n      }\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   */\n\n\n  function generate(scale, min, max, capacity) {\n    var adapter = scale._adapter;\n    var options = scale.options;\n    var timeOpts = options.time;\n    var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n    var major = determineMajorUnit(minor);\n    var stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize);\n    var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    var majorTicksEnabled = options.ticks.major.enabled;\n    var interval = INTERVALS[minor];\n    var first = min;\n    var last = max;\n    var ticks = [];\n    var time;\n\n    if (!stepSize) {\n      stepSize = determineStepSize(min, max, minor, capacity);\n    } // For 'week' unit, handle the first day of week option\n\n\n    if (weekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n      last = +adapter.startOf(last, 'isoWeek', weekday);\n    } // Align first/last ticks on unit\n\n\n    first = +adapter.startOf(first, weekday ? 'day' : minor);\n    last = +adapter.startOf(last, weekday ? 'day' : minor); // Make sure that the last tick include max\n\n    if (last < max) {\n      last = +adapter.add(last, 1, minor);\n    }\n\n    time = first;\n\n    if (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n      // Align the first tick on the previous `minor` unit aligned on the `major` unit:\n      // we first aligned time on the previous `major` unit then add the number of full\n      // stepSize there is between first and the previous major time.\n      time = +adapter.startOf(time, major);\n      time = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n    }\n\n    for (; time < last; time = +adapter.add(time, stepSize, minor)) {\n      ticks.push(+time);\n    }\n\n    ticks.push(+time);\n    return ticks;\n  }\n  /**\n   * Returns the start and end offsets from edges in the form of {start, end}\n   * where each value is a relative width to the scale and ranges between 0 and 1.\n   * They add extra margins on the both sides by scaling down the original scale.\n   * Offsets are added when the `offset` option is true.\n   */\n\n\n  function computeOffsets(table, ticks, min, max, options) {\n    var start = 0;\n    var end = 0;\n    var first, last;\n\n    if (options.offset && ticks.length) {\n      if (!options.time.min) {\n        first = interpolate$1(table, 'time', ticks[0], 'pos');\n\n        if (ticks.length === 1) {\n          start = 1 - first;\n        } else {\n          start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\n        }\n      }\n\n      if (!options.time.max) {\n        last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\n\n        if (ticks.length === 1) {\n          end = last;\n        } else {\n          end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\n        }\n      }\n    }\n\n    return {\n      start: start,\n      end: end\n    };\n  }\n\n  function ticksFromTimestamps(scale, values, majorUnit) {\n    var ticks = [];\n    var i, ilen, value, major;\n\n    for (i = 0, ilen = values.length; i < ilen; ++i) {\n      value = values[i];\n      major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;\n      ticks.push({\n        value: value,\n        major: major\n      });\n    }\n\n    return ticks;\n  }\n\n  var defaultConfig$4 = {\n    position: 'bottom',\n\n    /**\n     * Data distribution along the scale:\n     * - 'linear': data are spread according to their time (distances can vary),\n     * - 'series': data are spread at the same distance from each other.\n     * @see https://github.com/chartjs/Chart.js/pull/4507\n     * @since 2.7.0\n     */\n    distribution: 'linear',\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n    adapters: {},\n    time: {\n      parser: false,\n      // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n      format: false,\n      // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/\n      unit: false,\n      // false == automatic or override with week, month, year, etc.\n      round: false,\n      // none, or override with week, month, year, etc.\n      displayFormat: false,\n      // DEPRECATED\n      isoWeekday: false,\n      // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      autoSkip: false,\n\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n      major: {\n        enabled: false\n      }\n    }\n  };\n  var scale_time = core_scale.extend({\n    initialize: function initialize() {\n      this.mergeTicksOptions();\n      core_scale.prototype.initialize.call(this);\n    },\n    update: function update() {\n      var me = this;\n      var options = me.options;\n      var time = options.time || (options.time = {});\n      var adapter = me._adapter = new core_adapters._date(options.adapters.date); // DEPRECATIONS: output a message only one time per update\n\n      if (time.format) {\n        console.warn('options.time.format is deprecated and replaced by options.time.parser.');\n      } // Backward compatibility: before introducing adapter, `displayFormats` was\n      // supposed to contain *all* unit/string pairs but this can't be resolved\n      // when loading the scale (adapters are loaded afterward), so let's populate\n      // missing formats on update\n\n\n      helpers$1.mergeIf(time.displayFormats, adapter.formats());\n      return core_scale.prototype.update.apply(me, arguments);\n    },\n\n    /**\n     * Allows data to be referenced via 't' attribute\n     */\n    getRightValue: function getRightValue(rawValue) {\n      if (rawValue && rawValue.t !== undefined) {\n        rawValue = rawValue.t;\n      }\n\n      return core_scale.prototype.getRightValue.call(this, rawValue);\n    },\n    determineDataLimits: function determineDataLimits() {\n      var me = this;\n      var chart = me.chart;\n      var adapter = me._adapter;\n      var timeOpts = me.options.time;\n      var unit = timeOpts.unit || 'day';\n      var min = MAX_INTEGER;\n      var max = MIN_INTEGER;\n      var timestamps = [];\n      var datasets = [];\n      var labels = [];\n      var i, j, ilen, jlen, data, timestamp;\n      var dataLabels = chart.data.labels || []; // Convert labels to timestamps\n\n      for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\n        labels.push(parse(me, dataLabels[i]));\n      } // Convert data to timestamps\n\n\n      for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          data = chart.data.datasets[i].data; // Let's consider that all data have the same format.\n\n          if (helpers$1.isObject(data[0])) {\n            datasets[i] = [];\n\n            for (j = 0, jlen = data.length; j < jlen; ++j) {\n              timestamp = parse(me, data[j]);\n              timestamps.push(timestamp);\n              datasets[i][j] = timestamp;\n            }\n          } else {\n            for (j = 0, jlen = labels.length; j < jlen; ++j) {\n              timestamps.push(labels[j]);\n            }\n\n            datasets[i] = labels.slice(0);\n          }\n        } else {\n          datasets[i] = [];\n        }\n      }\n\n      if (labels.length) {\n        // Sort labels **after** data have been converted\n        labels = arrayUnique(labels).sort(sorter);\n        min = Math.min(min, labels[0]);\n        max = Math.max(max, labels[labels.length - 1]);\n      }\n\n      if (timestamps.length) {\n        timestamps = arrayUnique(timestamps).sort(sorter);\n        min = Math.min(min, timestamps[0]);\n        max = Math.max(max, timestamps[timestamps.length - 1]);\n      }\n\n      min = parse(me, timeOpts.min) || min;\n      max = parse(me, timeOpts.max) || max; // In case there is no valid min/max, set limits based on unit time option\n\n      min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\n      max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max; // Make sure that max is strictly higher than min (required by the lookup table)\n\n      me.min = Math.min(min, max);\n      me.max = Math.max(min + 1, max); // PRIVATE\n\n      me._horizontal = me.isHorizontal();\n      me._table = [];\n      me._timestamps = {\n        data: timestamps,\n        datasets: datasets,\n        labels: labels\n      };\n    },\n    buildTicks: function buildTicks() {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      var options = me.options;\n      var timeOpts = options.time;\n      var timestamps = [];\n      var ticks = [];\n      var i, ilen, timestamp;\n\n      switch (options.ticks.source) {\n        case 'data':\n          timestamps = me._timestamps.data;\n          break;\n\n        case 'labels':\n          timestamps = me._timestamps.labels;\n          break;\n\n        case 'auto':\n        default:\n          timestamps = generate(me, min, max, me.getLabelCapacity(min), options);\n      }\n\n      if (options.bounds === 'ticks' && timestamps.length) {\n        min = timestamps[0];\n        max = timestamps[timestamps.length - 1];\n      } // Enforce limits with user min/max options\n\n\n      min = parse(me, timeOpts.min) || min;\n      max = parse(me, timeOpts.max) || max; // Remove ticks outside the min/max range\n\n      for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n        timestamp = timestamps[i];\n\n        if (timestamp >= min && timestamp <= max) {\n          ticks.push(timestamp);\n        }\n      }\n\n      me.min = min;\n      me.max = max; // PRIVATE\n\n      me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);\n      me._majorUnit = determineMajorUnit(me._unit);\n      me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n      me._offsets = computeOffsets(me._table, ticks, min, max, options);\n\n      if (options.ticks.reverse) {\n        ticks.reverse();\n      }\n\n      return ticksFromTimestamps(me, ticks, me._majorUnit);\n    },\n    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n      var me = this;\n      var adapter = me._adapter;\n      var data = me.chart.data;\n      var timeOpts = me.options.time;\n      var label = data.labels && index < data.labels.length ? data.labels[index] : '';\n      var value = data.datasets[datasetIndex].data[index];\n\n      if (helpers$1.isObject(value)) {\n        label = me.getRightValue(value);\n      }\n\n      if (timeOpts.tooltipFormat) {\n        return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\n      }\n\n      if (typeof label === 'string') {\n        return label;\n      }\n\n      return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\n    },\n\n    /**\n     * Function to format an individual tick mark\n     * @private\n     */\n    tickFormatFunction: function tickFormatFunction(time, index, ticks, format) {\n      var me = this;\n      var adapter = me._adapter;\n      var options = me.options;\n      var formats = options.time.displayFormats;\n      var minorFormat = formats[me._unit];\n      var majorUnit = me._majorUnit;\n      var majorFormat = formats[majorUnit];\n      var majorTime = +adapter.startOf(time, majorUnit);\n      var majorTickOpts = options.ticks.major;\n      var major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n      var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\n      var tickOpts = major ? majorTickOpts : options.ticks.minor;\n      var formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback);\n      return formatter ? formatter(label, index, ticks) : label;\n    },\n    convertTicksToLabels: function convertTicksToLabels(ticks) {\n      var labels = [];\n      var i, ilen;\n\n      for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n        labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\n      }\n\n      return labels;\n    },\n\n    /**\n     * @private\n     */\n    getPixelForOffset: function getPixelForOffset(time) {\n      var me = this;\n      var isReverse = me.options.ticks.reverse;\n      var size = me._horizontal ? me.width : me.height;\n      var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top;\n      var pos = interpolate$1(me._table, 'time', time, 'pos');\n      var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end);\n      return isReverse ? start - offset : start + offset;\n    },\n    getPixelForValue: function getPixelForValue(value, index, datasetIndex) {\n      var me = this;\n      var time = null;\n\n      if (index !== undefined && datasetIndex !== undefined) {\n        time = me._timestamps.datasets[datasetIndex][index];\n      }\n\n      if (time === null) {\n        time = parse(me, value);\n      }\n\n      if (time !== null) {\n        return me.getPixelForOffset(time);\n      }\n    },\n    getPixelForTick: function getPixelForTick(index) {\n      var ticks = this.getTicks();\n      return index >= 0 && index < ticks.length ? this.getPixelForOffset(ticks[index].value) : null;\n    },\n    getValueForPixel: function getValueForPixel(pixel) {\n      var me = this;\n      var size = me._horizontal ? me.width : me.height;\n      var start = me._horizontal ? me.left : me.top;\n      var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end;\n      var time = interpolate$1(me._table, 'pos', pos, 'time'); // DEPRECATION, we should return time directly\n\n      return me._adapter._create(time);\n    },\n\n    /**\n     * Crude approximation of what the label width might be\n     * @private\n     */\n    getLabelWidth: function getLabelWidth(label) {\n      var me = this;\n      var ticksOpts = me.options.ticks;\n      var tickLabelWidth = me.ctx.measureText(label).width;\n      var angle = helpers$1.toRadians(ticksOpts.maxRotation);\n      var cosRotation = Math.cos(angle);\n      var sinRotation = Math.sin(angle);\n      var tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\n      return tickLabelWidth * cosRotation + tickFontSize * sinRotation;\n    },\n\n    /**\n     * @private\n     */\n    getLabelCapacity: function getLabelCapacity(exampleTime) {\n      var me = this; // pick the longest format (milliseconds) for guestimation\n\n      var format = me.options.time.displayFormats.millisecond;\n      var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);\n      var tickLabelWidth = me.getLabelWidth(exampleLabel);\n      var innerWidth = me.isHorizontal() ? me.width : me.height;\n      var capacity = Math.floor(innerWidth / tickLabelWidth);\n      return capacity > 0 ? capacity : 1;\n    }\n  }); // INTERNAL: static default options, registered in src/index.js\n\n  var _defaults$4 = defaultConfig$4;\n  scale_time._defaults = _defaults$4;\n  var scales = {\n    category: scale_category,\n    linear: scale_linear,\n    logarithmic: scale_logarithmic,\n    radialLinear: scale_radialLinear,\n    time: scale_time\n  };\n  var FORMATS = {\n    datetime: 'MMM D, YYYY, h:mm:ss a',\n    millisecond: 'h:mm:ss.SSS a',\n    second: 'h:mm:ss a',\n    minute: 'h:mm a',\n    hour: 'hA',\n    day: 'MMM D',\n    week: 'll',\n    month: 'MMM YYYY',\n    quarter: '[Q]Q - YYYY',\n    year: 'YYYY'\n  };\n\n  core_adapters._date.override(typeof moment === 'function' ? {\n    _id: 'moment',\n    // DEBUG ONLY\n    formats: function formats() {\n      return FORMATS;\n    },\n    parse: function parse(value, format) {\n      if (typeof value === 'string' && typeof format === 'string') {\n        value = moment(value, format);\n      } else if (!(value instanceof moment)) {\n        value = moment(value);\n      }\n\n      return value.isValid() ? value.valueOf() : null;\n    },\n    format: function format(time, _format) {\n      return moment(time).format(_format);\n    },\n    add: function add(time, amount, unit) {\n      return moment(time).add(amount, unit).valueOf();\n    },\n    diff: function diff(max, min, unit) {\n      return moment.duration(moment(max).diff(moment(min))).as(unit);\n    },\n    startOf: function startOf(time, unit, weekday) {\n      time = moment(time);\n\n      if (unit === 'isoWeek') {\n        return time.isoWeekday(weekday).valueOf();\n      }\n\n      return time.startOf(unit).valueOf();\n    },\n    endOf: function endOf(time, unit) {\n      return moment(time).endOf(unit).valueOf();\n    },\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility with scale.getValueForPixel().\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     * @private\n     */\n    _create: function _create(time) {\n      return moment(time);\n    }\n  } : {});\n\n  core_defaults._set('global', {\n    plugins: {\n      filler: {\n        propagate: true\n      }\n    }\n  });\n\n  var mappers = {\n    dataset: function dataset(source) {\n      var index = source.fill;\n      var chart = source.chart;\n      var meta = chart.getDatasetMeta(index);\n      var visible = meta && chart.isDatasetVisible(index);\n      var points = visible && meta.dataset._children || [];\n      var length = points.length || 0;\n      return !length ? null : function (point, i) {\n        return i < length && points[i]._view || null;\n      };\n    },\n    boundary: function boundary(source) {\n      var boundary = source.boundary;\n      var x = boundary ? boundary.x : null;\n      var y = boundary ? boundary.y : null;\n      return function (point) {\n        return {\n          x: x === null ? point.x : x,\n          y: y === null ? point.y : y\n        };\n      };\n    }\n  }; // @todo if (fill[0] === '#')\n\n  function decodeFill(el, index, count) {\n    var model = el._model || {};\n    var fill = model.fill;\n    var target;\n\n    if (fill === undefined) {\n      fill = !!model.backgroundColor;\n    }\n\n    if (fill === false || fill === null) {\n      return false;\n    }\n\n    if (fill === true) {\n      return 'origin';\n    }\n\n    target = parseFloat(fill, 10);\n\n    if (isFinite(target) && Math.floor(target) === target) {\n      if (fill[0] === '-' || fill[0] === '+') {\n        target = index + target;\n      }\n\n      if (target === index || target < 0 || target >= count) {\n        return false;\n      }\n\n      return target;\n    }\n\n    switch (fill) {\n      // compatibility\n      case 'bottom':\n        return 'start';\n\n      case 'top':\n        return 'end';\n\n      case 'zero':\n        return 'origin';\n      // supported boundaries\n\n      case 'origin':\n      case 'start':\n      case 'end':\n        return fill;\n      // invalid fill values\n\n      default:\n        return false;\n    }\n  }\n\n  function computeBoundary(source) {\n    var model = source.el._model || {};\n    var scale = source.el._scale || {};\n    var fill = source.fill;\n    var target = null;\n    var horizontal;\n\n    if (isFinite(fill)) {\n      return null;\n    } // Backward compatibility: until v3, we still need to support boundary values set on\n    // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n    // controllers might still use it (e.g. the Smith chart).\n\n\n    if (fill === 'start') {\n      target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n    } else if (fill === 'end') {\n      target = model.scaleTop === undefined ? scale.top : model.scaleTop;\n    } else if (model.scaleZero !== undefined) {\n      target = model.scaleZero;\n    } else if (scale.getBasePosition) {\n      target = scale.getBasePosition();\n    } else if (scale.getBasePixel) {\n      target = scale.getBasePixel();\n    }\n\n    if (target !== undefined && target !== null) {\n      if (target.x !== undefined && target.y !== undefined) {\n        return target;\n      }\n\n      if (helpers$1.isFinite(target)) {\n        horizontal = scale.isHorizontal();\n        return {\n          x: horizontal ? target : null,\n          y: horizontal ? null : target\n        };\n      }\n    }\n\n    return null;\n  }\n\n  function resolveTarget(sources, index, propagate) {\n    var source = sources[index];\n    var fill = source.fill;\n    var visited = [index];\n    var target;\n\n    if (!propagate) {\n      return fill;\n    }\n\n    while (fill !== false && visited.indexOf(fill) === -1) {\n      if (!isFinite(fill)) {\n        return fill;\n      }\n\n      target = sources[fill];\n\n      if (!target) {\n        return false;\n      }\n\n      if (target.visible) {\n        return fill;\n      }\n\n      visited.push(fill);\n      fill = target.fill;\n    }\n\n    return false;\n  }\n\n  function createMapper(source) {\n    var fill = source.fill;\n    var type = 'dataset';\n\n    if (fill === false) {\n      return null;\n    }\n\n    if (!isFinite(fill)) {\n      type = 'boundary';\n    }\n\n    return mappers[type](source);\n  }\n\n  function isDrawable(point) {\n    return point && !point.skip;\n  }\n\n  function drawArea(ctx, curve0, curve1, len0, len1) {\n    var i;\n\n    if (!len0 || !len1) {\n      return;\n    } // building first area curve (normal)\n\n\n    ctx.moveTo(curve0[0].x, curve0[0].y);\n\n    for (i = 1; i < len0; ++i) {\n      helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n    } // joining the two area curves\n\n\n    ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y); // building opposite area curve (reverse)\n\n    for (i = len1 - 1; i > 0; --i) {\n      helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n    }\n  }\n\n  function doFill(ctx, points, mapper, view, color, loop) {\n    var count = points.length;\n    var span = view.spanGaps;\n    var curve0 = [];\n    var curve1 = [];\n    var len0 = 0;\n    var len1 = 0;\n    var i, ilen, index, p0, p1, d0, d1;\n    ctx.beginPath();\n\n    for (i = 0, ilen = count + !!loop; i < ilen; ++i) {\n      index = i % count;\n      p0 = points[index]._view;\n      p1 = mapper(p0, index, view);\n      d0 = isDrawable(p0);\n      d1 = isDrawable(p1);\n\n      if (d0 && d1) {\n        len0 = curve0.push(p0);\n        len1 = curve1.push(p1);\n      } else if (len0 && len1) {\n        if (!span) {\n          drawArea(ctx, curve0, curve1, len0, len1);\n          len0 = len1 = 0;\n          curve0 = [];\n          curve1 = [];\n        } else {\n          if (d0) {\n            curve0.push(p0);\n          }\n\n          if (d1) {\n            curve1.push(p1);\n          }\n        }\n      }\n    }\n\n    drawArea(ctx, curve0, curve1, len0, len1);\n    ctx.closePath();\n    ctx.fillStyle = color;\n    ctx.fill();\n  }\n\n  var plugin_filler = {\n    id: 'filler',\n    afterDatasetsUpdate: function afterDatasetsUpdate(chart, options) {\n      var count = (chart.data.datasets || []).length;\n      var propagate = options.propagate;\n      var sources = [];\n      var meta, i, el, source;\n\n      for (i = 0; i < count; ++i) {\n        meta = chart.getDatasetMeta(i);\n        el = meta.dataset;\n        source = null;\n\n        if (el && el._model && el instanceof elements.Line) {\n          source = {\n            visible: chart.isDatasetVisible(i),\n            fill: decodeFill(el, i, count),\n            chart: chart,\n            el: el\n          };\n        }\n\n        meta.$filler = source;\n        sources.push(source);\n      }\n\n      for (i = 0; i < count; ++i) {\n        source = sources[i];\n\n        if (!source) {\n          continue;\n        }\n\n        source.fill = resolveTarget(sources, i, propagate);\n        source.boundary = computeBoundary(source);\n        source.mapper = createMapper(source);\n      }\n    },\n    beforeDatasetDraw: function beforeDatasetDraw(chart, args) {\n      var meta = args.meta.$filler;\n\n      if (!meta) {\n        return;\n      }\n\n      var ctx = chart.ctx;\n      var el = meta.el;\n      var view = el._view;\n      var points = el._children || [];\n      var mapper = meta.mapper;\n      var color = view.backgroundColor || core_defaults.global.defaultColor;\n\n      if (mapper && color && points.length) {\n        helpers$1.canvas.clipArea(ctx, chart.chartArea);\n        doFill(ctx, points, mapper, view, color, el._loop);\n        helpers$1.canvas.unclipArea(ctx);\n      }\n    }\n  };\n  var noop$1 = helpers$1.noop;\n  var valueOrDefault$d = helpers$1.valueOrDefault;\n\n  core_defaults._set('global', {\n    legend: {\n      display: true,\n      position: 'top',\n      fullWidth: true,\n      reverse: false,\n      weight: 1000,\n      // a callback that will handle\n      onClick: function onClick(e, legendItem) {\n        var index = legendItem.datasetIndex;\n        var ci = this.chart;\n        var meta = ci.getDatasetMeta(index); // See controller.isDatasetVisible comment\n\n        meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; // We hid a dataset ... rerender the chart\n\n        ci.update();\n      },\n      onHover: null,\n      onLeave: null,\n      labels: {\n        boxWidth: 40,\n        padding: 10,\n        // Generates labels shown in the legend\n        // Valid properties to return:\n        // text : text to display\n        // fillStyle : fill of coloured box\n        // strokeStyle: stroke of coloured box\n        // hidden : if this legend item refers to a hidden item\n        // lineCap : cap style for line\n        // lineDash\n        // lineDashOffset :\n        // lineJoin :\n        // lineWidth :\n        generateLabels: function generateLabels(chart) {\n          var data = chart.data;\n          return helpers$1.isArray(data.datasets) ? data.datasets.map(function (dataset, i) {\n            return {\n              text: dataset.label,\n              fillStyle: !helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0],\n              hidden: !chart.isDatasetVisible(i),\n              lineCap: dataset.borderCapStyle,\n              lineDash: dataset.borderDash,\n              lineDashOffset: dataset.borderDashOffset,\n              lineJoin: dataset.borderJoinStyle,\n              lineWidth: dataset.borderWidth,\n              strokeStyle: dataset.borderColor,\n              pointStyle: dataset.pointStyle,\n              // Below is extra data used for toggling the datasets\n              datasetIndex: i\n            };\n          }, this) : [];\n        }\n      }\n    },\n    legendCallback: function legendCallback(chart) {\n      var text = [];\n      text.push('<ul class=\"' + chart.id + '-legend\">');\n\n      for (var i = 0; i < chart.data.datasets.length; i++) {\n        text.push('<li><span style=\"background-color:' + chart.data.datasets[i].backgroundColor + '\"></span>');\n\n        if (chart.data.datasets[i].label) {\n          text.push(chart.data.datasets[i].label);\n        }\n\n        text.push('</li>');\n      }\n\n      text.push('</ul>');\n      return text.join('');\n    }\n  });\n  /**\n   * Helper function to get the box width based on the usePointStyle option\n   * @param {object} labelopts - the label options on the legend\n   * @param {number} fontSize - the label font size\n   * @return {number} width of the color box area\n   */\n\n\n  function getBoxWidth(labelOpts, fontSize) {\n    return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ? fontSize : labelOpts.boxWidth;\n  }\n  /**\n   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n   */\n\n\n  var Legend = core_element.extend({\n    initialize: function initialize(config) {\n      helpers$1.extend(this, config); // Contains hit boxes for each dataset (in dataset order)\n\n      this.legendHitBoxes = [];\n      /**\n      \t * @private\n      \t */\n\n      this._hoveredItem = null; // Are we in doughnut mode which has a different data type\n\n      this.doughnutMode = false;\n    },\n    // These methods are ordered by lifecycle. Utilities then follow.\n    // Any function defined here is inherited by all legend types.\n    // Any function can be extended by the legend type\n    beforeUpdate: noop$1,\n    update: function update(maxWidth, maxHeight, margins) {\n      var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n      me.beforeUpdate(); // Absorb the master measurements\n\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = margins; // Dimensions\n\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions(); // Labels\n\n      me.beforeBuildLabels();\n      me.buildLabels();\n      me.afterBuildLabels(); // Fit\n\n      me.beforeFit();\n      me.fit();\n      me.afterFit(); //\n\n      me.afterUpdate();\n      return me.minSize;\n    },\n    afterUpdate: noop$1,\n    //\n    beforeSetDimensions: noop$1,\n    setDimensions: function setDimensions() {\n      var me = this; // Set the unconstrained dimension before label rotation\n\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight; // Reset position before calculating rotation\n\n        me.top = 0;\n        me.bottom = me.height;\n      } // Reset padding\n\n\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0; // Reset minSize\n\n      me.minSize = {\n        width: 0,\n        height: 0\n      };\n    },\n    afterSetDimensions: noop$1,\n    //\n    beforeBuildLabels: noop$1,\n    buildLabels: function buildLabels() {\n      var me = this;\n      var labelOpts = me.options.labels || {};\n      var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n      if (labelOpts.filter) {\n        legendItems = legendItems.filter(function (item) {\n          return labelOpts.filter(item, me.chart.data);\n        });\n      }\n\n      if (me.options.reverse) {\n        legendItems.reverse();\n      }\n\n      me.legendItems = legendItems;\n    },\n    afterBuildLabels: noop$1,\n    //\n    beforeFit: noop$1,\n    fit: function fit() {\n      var me = this;\n      var opts = me.options;\n      var labelOpts = opts.labels;\n      var display = opts.display;\n      var ctx = me.ctx;\n\n      var labelFont = helpers$1.options._parseFont(labelOpts);\n\n      var fontSize = labelFont.size; // Reset hit boxes\n\n      var hitboxes = me.legendHitBoxes = [];\n      var minSize = me.minSize;\n      var isHorizontal = me.isHorizontal();\n\n      if (isHorizontal) {\n        minSize.width = me.maxWidth; // fill all the width\n\n        minSize.height = display ? 10 : 0;\n      } else {\n        minSize.width = display ? 10 : 0;\n        minSize.height = me.maxHeight; // fill all the height\n      } // Increase sizes here\n\n\n      if (display) {\n        ctx.font = labelFont.string;\n\n        if (isHorizontal) {\n          // Labels\n          // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n          var lineWidths = me.lineWidths = [0];\n          var totalHeight = 0;\n          ctx.textAlign = 'left';\n          ctx.textBaseline = 'top';\n          helpers$1.each(me.legendItems, function (legendItem, i) {\n            var boxWidth = getBoxWidth(labelOpts, fontSize);\n            var width = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n            if (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) {\n              totalHeight += fontSize + labelOpts.padding;\n              lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding;\n            } // Store the hitbox width and height here. Final position will be updated in `draw`\n\n\n            hitboxes[i] = {\n              left: 0,\n              top: 0,\n              width: width,\n              height: fontSize\n            };\n            lineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n          });\n          minSize.height += totalHeight;\n        } else {\n          var vPadding = labelOpts.padding;\n          var columnWidths = me.columnWidths = [];\n          var totalWidth = labelOpts.padding;\n          var currentColWidth = 0;\n          var currentColHeight = 0;\n          var itemHeight = fontSize + vPadding;\n          helpers$1.each(me.legendItems, function (legendItem, i) {\n            var boxWidth = getBoxWidth(labelOpts, fontSize);\n            var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; // If too tall, go to new column\n\n            if (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) {\n              totalWidth += currentColWidth + labelOpts.padding;\n              columnWidths.push(currentColWidth); // previous column width\n\n              currentColWidth = 0;\n              currentColHeight = 0;\n            } // Get max width\n\n\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight; // Store the hitbox width and height here. Final position will be updated in `draw`\n\n            hitboxes[i] = {\n              left: 0,\n              top: 0,\n              width: itemWidth,\n              height: fontSize\n            };\n          });\n          totalWidth += currentColWidth;\n          columnWidths.push(currentColWidth);\n          minSize.width += totalWidth;\n        }\n      }\n\n      me.width = minSize.width;\n      me.height = minSize.height;\n    },\n    afterFit: noop$1,\n    // Shared Methods\n    isHorizontal: function isHorizontal() {\n      return this.options.position === 'top' || this.options.position === 'bottom';\n    },\n    // Actually draw the legend on the canvas\n    draw: function draw() {\n      var me = this;\n      var opts = me.options;\n      var labelOpts = opts.labels;\n      var globalDefaults = core_defaults.global;\n      var defaultColor = globalDefaults.defaultColor;\n      var lineDefault = globalDefaults.elements.line;\n      var legendWidth = me.width;\n      var lineWidths = me.lineWidths;\n\n      if (opts.display) {\n        var ctx = me.ctx;\n        var fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor);\n\n        var labelFont = helpers$1.options._parseFont(labelOpts);\n\n        var fontSize = labelFont.size;\n        var cursor; // Canvas setup\n\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.strokeStyle = fontColor; // for strikethrough effect\n\n        ctx.fillStyle = fontColor; // render in correct colour\n\n        ctx.font = labelFont.string;\n        var boxWidth = getBoxWidth(labelOpts, fontSize);\n        var hitboxes = me.legendHitBoxes; // current position\n\n        var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n          if (isNaN(boxWidth) || boxWidth <= 0) {\n            return;\n          } // Set the ctx for the box\n\n\n          ctx.save();\n          var lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth);\n          ctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor);\n          ctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle);\n          ctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n          ctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle);\n          ctx.lineWidth = lineWidth;\n          ctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor);\n\n          if (ctx.setLineDash) {\n            // IE 9 and 10 do not support line dash\n            ctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash));\n          }\n\n          if (opts.labels && opts.labels.usePointStyle) {\n            // Recalculate x and y for drawPoint() because its expecting\n            // x and y to be center of figure (instead of top left)\n            var radius = boxWidth * Math.SQRT2 / 2;\n            var centerX = x + boxWidth / 2;\n            var centerY = y + fontSize / 2; // Draw pointStyle as legend symbol\n\n            helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n          } else {\n            // Draw box as legend symbol\n            if (lineWidth !== 0) {\n              ctx.strokeRect(x, y, boxWidth, fontSize);\n            }\n\n            ctx.fillRect(x, y, boxWidth, fontSize);\n          }\n\n          ctx.restore();\n        };\n\n        var fillText = function fillText(x, y, legendItem, textWidth) {\n          var halfFontSize = fontSize / 2;\n          var xLeft = boxWidth + halfFontSize + x;\n          var yMiddle = y + halfFontSize;\n          ctx.fillText(legendItem.text, xLeft, yMiddle);\n\n          if (legendItem.hidden) {\n            // Strikethrough the text if hidden\n            ctx.beginPath();\n            ctx.lineWidth = 2;\n            ctx.moveTo(xLeft, yMiddle);\n            ctx.lineTo(xLeft + textWidth, yMiddle);\n            ctx.stroke();\n          }\n        }; // Horizontal\n\n\n        var isHorizontal = me.isHorizontal();\n\n        if (isHorizontal) {\n          cursor = {\n            x: me.left + (legendWidth - lineWidths[0]) / 2 + labelOpts.padding,\n            y: me.top + labelOpts.padding,\n            line: 0\n          };\n        } else {\n          cursor = {\n            x: me.left + labelOpts.padding,\n            y: me.top + labelOpts.padding,\n            line: 0\n          };\n        }\n\n        var itemHeight = fontSize + labelOpts.padding;\n        helpers$1.each(me.legendItems, function (legendItem, i) {\n          var textWidth = ctx.measureText(legendItem.text).width;\n          var width = boxWidth + fontSize / 2 + textWidth;\n          var x = cursor.x;\n          var y = cursor.y; // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\n          // instead of me.right and me.bottom because me.width and me.height\n          // may have been changed since me.minSize was calculated\n\n          if (isHorizontal) {\n            if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\n              y = cursor.y += itemHeight;\n              cursor.line++;\n              x = cursor.x = me.left + (legendWidth - lineWidths[cursor.line]) / 2 + labelOpts.padding;\n            }\n          } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\n            x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n            y = cursor.y = me.top + labelOpts.padding;\n            cursor.line++;\n          }\n\n          drawLegendBox(x, y, legendItem);\n          hitboxes[i].left = x;\n          hitboxes[i].top = y; // Fill the actual label\n\n          fillText(x, y, legendItem, textWidth);\n\n          if (isHorizontal) {\n            cursor.x += width + labelOpts.padding;\n          } else {\n            cursor.y += itemHeight;\n          }\n        });\n      }\n    },\n\n    /**\n     * @private\n     */\n    _getLegendItemAt: function _getLegendItemAt(x, y) {\n      var me = this;\n      var i, hitBox, lh;\n\n      if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n        // See if we are touching one of the dataset boxes\n        lh = me.legendHitBoxes;\n\n        for (i = 0; i < lh.length; ++i) {\n          hitBox = lh[i];\n\n          if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n            // Touching an element\n            return me.legendItems[i];\n          }\n        }\n      }\n\n      return null;\n    },\n\n    /**\n     * Handle an event\n     * @private\n     * @param {IEvent} event - The event to handle\n     */\n    handleEvent: function handleEvent(e) {\n      var me = this;\n      var opts = me.options;\n      var type = e.type === 'mouseup' ? 'click' : e.type;\n      var hoveredItem;\n\n      if (type === 'mousemove') {\n        if (!opts.onHover && !opts.onLeave) {\n          return;\n        }\n      } else if (type === 'click') {\n        if (!opts.onClick) {\n          return;\n        }\n      } else {\n        return;\n      } // Chart event already has relative position in it\n\n\n      hoveredItem = me._getLegendItemAt(e.x, e.y);\n\n      if (type === 'click') {\n        if (hoveredItem && opts.onClick) {\n          // use e.native for backwards compatibility\n          opts.onClick.call(me, e.native, hoveredItem);\n        }\n      } else {\n        if (opts.onLeave && hoveredItem !== me._hoveredItem) {\n          if (me._hoveredItem) {\n            opts.onLeave.call(me, e.native, me._hoveredItem);\n          }\n\n          me._hoveredItem = hoveredItem;\n        }\n\n        if (opts.onHover && hoveredItem) {\n          // use e.native for backwards compatibility\n          opts.onHover.call(me, e.native, hoveredItem);\n        }\n      }\n    }\n  });\n\n  function createNewLegendAndAttach(chart, legendOpts) {\n    var legend = new Legend({\n      ctx: chart.ctx,\n      options: legendOpts,\n      chart: chart\n    });\n    core_layouts.configure(chart, legend, legendOpts);\n    core_layouts.addBox(chart, legend);\n    chart.legend = legend;\n  }\n\n  var plugin_legend = {\n    id: 'legend',\n\n    /**\n     * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n     * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n     * the plugin, which one will be re-exposed in the chart.js file.\n     * https://github.com/chartjs/Chart.js/pull/2640\n     * @private\n     */\n    _element: Legend,\n    beforeInit: function beforeInit(chart) {\n      var legendOpts = chart.options.legend;\n\n      if (legendOpts) {\n        createNewLegendAndAttach(chart, legendOpts);\n      }\n    },\n    beforeUpdate: function beforeUpdate(chart) {\n      var legendOpts = chart.options.legend;\n      var legend = chart.legend;\n\n      if (legendOpts) {\n        helpers$1.mergeIf(legendOpts, core_defaults.global.legend);\n\n        if (legend) {\n          core_layouts.configure(chart, legend, legendOpts);\n          legend.options = legendOpts;\n        } else {\n          createNewLegendAndAttach(chart, legendOpts);\n        }\n      } else if (legend) {\n        core_layouts.removeBox(chart, legend);\n        delete chart.legend;\n      }\n    },\n    afterEvent: function afterEvent(chart, e) {\n      var legend = chart.legend;\n\n      if (legend) {\n        legend.handleEvent(e);\n      }\n    }\n  };\n  var noop$2 = helpers$1.noop;\n\n  core_defaults._set('global', {\n    title: {\n      display: false,\n      fontStyle: 'bold',\n      fullWidth: true,\n      padding: 10,\n      position: 'top',\n      text: '',\n      weight: 2000 // by default greater than legend (1000) to be above\n\n    }\n  });\n  /**\n   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n   */\n\n\n  var Title = core_element.extend({\n    initialize: function initialize(config) {\n      var me = this;\n      helpers$1.extend(me, config); // Contains hit boxes for each dataset (in dataset order)\n\n      me.legendHitBoxes = [];\n    },\n    // These methods are ordered by lifecycle. Utilities then follow.\n    beforeUpdate: noop$2,\n    update: function update(maxWidth, maxHeight, margins) {\n      var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n      me.beforeUpdate(); // Absorb the master measurements\n\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = margins; // Dimensions\n\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions(); // Labels\n\n      me.beforeBuildLabels();\n      me.buildLabels();\n      me.afterBuildLabels(); // Fit\n\n      me.beforeFit();\n      me.fit();\n      me.afterFit(); //\n\n      me.afterUpdate();\n      return me.minSize;\n    },\n    afterUpdate: noop$2,\n    //\n    beforeSetDimensions: noop$2,\n    setDimensions: function setDimensions() {\n      var me = this; // Set the unconstrained dimension before label rotation\n\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight; // Reset position before calculating rotation\n\n        me.top = 0;\n        me.bottom = me.height;\n      } // Reset padding\n\n\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0; // Reset minSize\n\n      me.minSize = {\n        width: 0,\n        height: 0\n      };\n    },\n    afterSetDimensions: noop$2,\n    //\n    beforeBuildLabels: noop$2,\n    buildLabels: noop$2,\n    afterBuildLabels: noop$2,\n    //\n    beforeFit: noop$2,\n    fit: function fit() {\n      var me = this;\n      var opts = me.options;\n      var display = opts.display;\n      var minSize = me.minSize;\n      var lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\n\n      var fontOpts = helpers$1.options._parseFont(opts);\n\n      var textSize = display ? lineCount * fontOpts.lineHeight + opts.padding * 2 : 0;\n\n      if (me.isHorizontal()) {\n        minSize.width = me.maxWidth; // fill all the width\n\n        minSize.height = textSize;\n      } else {\n        minSize.width = textSize;\n        minSize.height = me.maxHeight; // fill all the height\n      }\n\n      me.width = minSize.width;\n      me.height = minSize.height;\n    },\n    afterFit: noop$2,\n    // Shared Methods\n    isHorizontal: function isHorizontal() {\n      var pos = this.options.position;\n      return pos === 'top' || pos === 'bottom';\n    },\n    // Actually draw the title block on the canvas\n    draw: function draw() {\n      var me = this;\n      var ctx = me.ctx;\n      var opts = me.options;\n\n      if (opts.display) {\n        var fontOpts = helpers$1.options._parseFont(opts);\n\n        var lineHeight = fontOpts.lineHeight;\n        var offset = lineHeight / 2 + opts.padding;\n        var rotation = 0;\n        var top = me.top;\n        var left = me.left;\n        var bottom = me.bottom;\n        var right = me.right;\n        var maxWidth, titleX, titleY;\n        ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\n\n        ctx.font = fontOpts.string; // Horizontal\n\n        if (me.isHorizontal()) {\n          titleX = left + (right - left) / 2; // midpoint of the width\n\n          titleY = top + offset;\n          maxWidth = right - left;\n        } else {\n          titleX = opts.position === 'left' ? left + offset : right - offset;\n          titleY = top + (bottom - top) / 2;\n          maxWidth = bottom - top;\n          rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n        }\n\n        ctx.save();\n        ctx.translate(titleX, titleY);\n        ctx.rotate(rotation);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        var text = opts.text;\n\n        if (helpers$1.isArray(text)) {\n          var y = 0;\n\n          for (var i = 0; i < text.length; ++i) {\n            ctx.fillText(text[i], 0, y, maxWidth);\n            y += lineHeight;\n          }\n        } else {\n          ctx.fillText(text, 0, 0, maxWidth);\n        }\n\n        ctx.restore();\n      }\n    }\n  });\n\n  function createNewTitleBlockAndAttach(chart, titleOpts) {\n    var title = new Title({\n      ctx: chart.ctx,\n      options: titleOpts,\n      chart: chart\n    });\n    core_layouts.configure(chart, title, titleOpts);\n    core_layouts.addBox(chart, title);\n    chart.titleBlock = title;\n  }\n\n  var plugin_title = {\n    id: 'title',\n\n    /**\n     * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n     * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n     * the plugin, which one will be re-exposed in the chart.js file.\n     * https://github.com/chartjs/Chart.js/pull/2640\n     * @private\n     */\n    _element: Title,\n    beforeInit: function beforeInit(chart) {\n      var titleOpts = chart.options.title;\n\n      if (titleOpts) {\n        createNewTitleBlockAndAttach(chart, titleOpts);\n      }\n    },\n    beforeUpdate: function beforeUpdate(chart) {\n      var titleOpts = chart.options.title;\n      var titleBlock = chart.titleBlock;\n\n      if (titleOpts) {\n        helpers$1.mergeIf(titleOpts, core_defaults.global.title);\n\n        if (titleBlock) {\n          core_layouts.configure(chart, titleBlock, titleOpts);\n          titleBlock.options = titleOpts;\n        } else {\n          createNewTitleBlockAndAttach(chart, titleOpts);\n        }\n      } else if (titleBlock) {\n        core_layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n      }\n    }\n  };\n  var plugins = {};\n  var filler = plugin_filler;\n  var legend = plugin_legend;\n  var title = plugin_title;\n  plugins.filler = filler;\n  plugins.legend = legend;\n  plugins.title = title;\n  /**\n   * @namespace Chart\n   */\n\n  core_controller.helpers = helpers$1; // @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\n\n  core_helpers(core_controller);\n  core_controller._adapters = core_adapters;\n  core_controller.Animation = core_animation;\n  core_controller.animationService = core_animations;\n  core_controller.controllers = controllers;\n  core_controller.DatasetController = core_datasetController;\n  core_controller.defaults = core_defaults;\n  core_controller.Element = core_element;\n  core_controller.elements = elements;\n  core_controller.Interaction = core_interaction;\n  core_controller.layouts = core_layouts;\n  core_controller.platform = platform;\n  core_controller.plugins = core_plugins;\n  core_controller.Scale = core_scale;\n  core_controller.scaleService = core_scaleService;\n  core_controller.Ticks = core_ticks;\n  core_controller.Tooltip = core_tooltip; // Register built-in scales\n\n  core_controller.helpers.each(scales, function (scale, type) {\n    core_controller.scaleService.registerScaleType(type, scale, scale._defaults);\n  }); // Load to register built-in adapters (as side effects)\n  // Loading built-in plugins\n\n  for (var k in plugins) {\n    if (plugins.hasOwnProperty(k)) {\n      core_controller.plugins.register(plugins[k]);\n    }\n  }\n\n  core_controller.platform.initialize();\n  var src = core_controller;\n\n  if (typeof window !== 'undefined') {\n    window.Chart = core_controller;\n  } // DEPRECATIONS\n\n  /**\n   * Provided for backward compatibility, not available anymore\n   * @namespace Chart.Chart\n   * @deprecated since version 2.8.0\n   * @todo remove at version 3\n   * @private\n   */\n\n\n  core_controller.Chart = core_controller;\n  /**\n   * Provided for backward compatibility, not available anymore\n   * @namespace Chart.Legend\n   * @deprecated since version 2.1.5\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.Legend = plugins.legend._element;\n  /**\n   * Provided for backward compatibility, not available anymore\n   * @namespace Chart.Title\n   * @deprecated since version 2.1.5\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.Title = plugins.title._element;\n  /**\n   * Provided for backward compatibility, use Chart.plugins instead\n   * @namespace Chart.pluginService\n   * @deprecated since version 2.1.5\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.pluginService = core_controller.plugins;\n  /**\n   * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n   * effect, instead simply create/register plugins via plain JavaScript objects.\n   * @interface Chart.PluginBase\n   * @deprecated since version 2.5.0\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.PluginBase = core_controller.Element.extend({});\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   */\n\n  core_controller.canvasHelpers = core_controller.helpers.canvas;\n  /**\n   * Provided for backward compatibility, use Chart.layouts instead.\n   * @namespace Chart.layoutService\n   * @deprecated since version 2.7.3\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.layoutService = core_controller.layouts;\n  /**\n   * Provided for backward compatibility, not available anymore.\n   * @namespace Chart.LinearScaleBase\n   * @deprecated since version 2.8\n   * @todo remove at version 3\n   * @private\n   */\n\n  core_controller.LinearScaleBase = scale_linearbase;\n  /**\n   * Provided for backward compatibility, instead we should create a new Chart\n   * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\n   * @deprecated since version 2.8.0\n   * @todo remove at version 3\n   */\n\n  core_controller.helpers.each(['Bar', 'Bubble', 'Doughnut', 'Line', 'PolarArea', 'Radar', 'Scatter'], function (klass) {\n    core_controller[klass] = function (ctx, cfg) {\n      return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\n        type: klass.charAt(0).toLowerCase() + klass.slice(1)\n      }));\n    };\n  });\n  return src;\n});","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\n\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  } // if setTimeout wasn't available but was latter defined\n\n\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\n\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  } // if clearTimeout wasn't available but was latter defined\n\n\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n\n  draining = false;\n\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n\n  if (queue.length) {\n    drainQueue();\n  }\n}\n\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n\n    queueIndex = -1;\n    len = queue.length;\n  }\n\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n\n  queue.push(new Item(fun, args));\n\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\n\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n  return [];\n};\n\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n  return '/';\n};\n\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n  return 0;\n};"],"sourceRoot":""}