{"version":3,"sources":["webpack:///./node_modules/chart.js/src/plugins/plugin.legend.js","webpack:///./node_modules/chart.js/src/platforms/platform.basic.js","webpack:///./node_modules/chart.js/src/scales/scale.time.js","webpack:///./node_modules/chart.js/src/scales/scale.linear.js","webpack:///./node_modules/chart.js/src/scales/scale.logarithmic.js","webpack:///./node_modules/chart.js/src/platforms/platform.js","webpack:///./node_modules/chart.js/src/plugins/index.js","webpack:///./node_modules/chart.js/src/plugins/plugin.title.js","webpack:///./node_modules/chart.js/src/scales/scale.linearbase.js","webpack:///./node_modules/chart.js/src/platforms/platform.dom.js","webpack:///./node_modules/chart.js/src/plugins/plugin.filler.js","webpack:///./node_modules/chart.js/src/scales/scale.category.js","webpack:///./node_modules/chart.js/src/scales/scale.radialLinear.js"],"names":["defaults","__webpack_require__","Element","helpers","layouts","noop","getBoxWidth","labelOpts","fontSize","usePointStyle","Math","SQRT2","boxWidth","_set","legend","display","position","fullWidth","reverse","weight","onClick","e","legendItem","index","datasetIndex","ci","this","chart","meta","getDatasetMeta","hidden","data","datasets","update","onHover","labels","padding","generateLabels","isArray","map","dataset","i","text","label","fillStyle","backgroundColor","isDatasetVisible","lineCap","borderCapStyle","lineDash","borderDash","lineDashOffset","borderDashOffset","lineJoin","borderJoinStyle","lineWidth","borderWidth","strokeStyle","borderColor","pointStyle","legendCallback","push","id","length","join","Legend","extend","initialize","config","legendHitBoxes","doughnutMode","beforeUpdate","maxWidth","maxHeight","margins","me","beforeSetDimensions","setDimensions","afterSetDimensions","beforeBuildLabels","buildLabels","afterBuildLabels","beforeFit","fit","afterFit","afterUpdate","minSize","isHorizontal","width","left","right","height","top","bottom","paddingLeft","paddingTop","paddingRight","paddingBottom","options","legendItems","callback","filter","item","opts","ctx","globalDefault","global","valueOrDefault","defaultFontSize","fontStyle","defaultFontStyle","fontFamily","defaultFontFamily","labelFont","fontString","hitboxes","font","lineWidths","totalHeight","textAlign","textBaseline","each","measureText","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","max","draw","lineDefault","elements","line","legendWidth","cursor","fontColor","defaultFontColor","drawLegendBox","x","y","isNaN","save","defaultColor","isLineWidthZero","setLineDash","radius","offSet","centerX","centerY","canvas","drawPoint","strokeRect","fillRect","restore","fillText","textWidth","halfFontSize","xLeft","yMiddle","beginPath","moveTo","lineTo","stroke","handleEvent","type","changed","lh","hitBox","call","native","createNewLegendAndAttach","legendOpts","configure","addBox","module","exports","_element","beforeInit","mergeIf","removeBox","afterEvent","acquireContext","getContext","moment","window","MIN_INTEGER","Number","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","millisecond","common","size","steps","second","minute","hour","day","week","month","quarter","year","UNITS","Object","keys","sorter","a","b","arrayUnique","items","ilen","hash","out","buildLookupTable","timestamps","min","distribution","time","pos","prev","curr","next","table","undefined","round","lookup","key","value","mid","i0","i1","lo","hi","interpolate","skey","sval","tkey","range","span","ratio","offset","momentify","parser","format","isValid","parse","input","scale","isNullOrUndef","getRightValue","startOf","valueOf","determineStepSize","unit","capacity","factor","interval","milliseconds","ceil","determineUnitForAutoTicks","minUnit","indexOf","determineUnitForFormatting","ticks","duration","diff","as","determineMajorUnit","generate","timeOpts","minor","major","stepSize","unitStepSize","weekday","isoWeekday","majorTicksEnabled","enabled","first","last","add","computeOffsets","upper","lower","ticksFromTimestamps","values","majorUnit","determineLabelFormat","momentDate","hasTime","Chart","defaultConfig","bounds","displayFormat","displayFormats","autoSkip","source","TimeScale","Scale","Error","mergeTicksOptions","prototype","console","warn","apply","arguments","rawValue","t","determineDataLimits","j","jlen","timestamp","isObject","slice","sort","endOf","_horizontal","_table","_timestamps","buildTicks","getLabelCapacity","_unit","_majorUnit","_offsets","_labelFormat","getLabelForIndex","tooltipFormat","tickFormatFunction","tick","formatOverride","formats","minorFormat","majorFormat","majorTime","clone","majorTickOpts","tickOpts","formatter","userCallback","convertTicksToLabels","getPixelForOffset","start","getPixelForValue","getPixelForTick","getTicks","getValueForPixel","pixel","getLabelWidth","ticksOpts","tickLabelWidth","angle","toRadians","maxRotation","cosRotation","cos","sinRotation","sin","tickFontSize","exampleTime","exampleLabel","innerWidth","floor","scaleService","registerScaleType","Ticks","formatters","linear","LinearScale","LinearScaleBase","DEFAULT_MIN","DEFAULT_MAX","IDMatches","xAxisID","yAxisID","hasStacks","stacked","stack","valuesPerStack","positiveValues","negativeValues","relativePoints","valuesForType","concat","minVal","maxVal","isFinite","handleTickRangeOptions","getTickLimit","maxTicks","maxTicksLimit","handleDirectionalChanges","rightValue","end","innerDimension","ticksAsNumbers","generateTicks","generationOptions","dataRange","exp","significand","tickVal","pow","log10","endExp","endSignificand","minNotZero","precision","abs","lastTick","logarithmic","LogarithmicScale","tickValues","_getFirstTickValue","sign","firstTickValue","getValueOrDefault","basic","dom","implementation","_enabled","releaseContext","addEventListener","removeEventListener","filler","title","lineHeight","Title","lineCount","toLineHeight","textSize","globalDefaults","titleX","titleY","titleFont","rotation","PI","translate","rotate","createNewTitleBlockAndAttach","titleOpts","titleBlock","spacing","niceRange","niceNum","niceMin","niceMax","almostWhole","numSpaces","almostEquals","toString","beginAtZero","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","numericGeneratorOptions","fixedStepSize","zeroLineIndex","EXPANDO_KEY","CSS_PREFIX","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","element","property","getStyle","matches","match","initCanvas","style","renderHeight","getAttribute","renderWidth","initial","displayWidth","aspectRatio","displayHeight","supportsEventListenerOptions","supports","defineProperty","get","eventListenerOptions","passive","node","listener","createEvent","nativeEvent","fromNativeEvent","event","getRelativePosition","throttled","fn","thisArg","ticking","args","Array","requestAnimFrame","createResizer","handler","resizer","document","createElement","cls","maxSize","cssText","className","innerHTML","expand","childNodes","shrink","_reset","scrollLeft","scrollTop","onScroll","bind","watchForRender","expando","proxy","renderProxy","animationName","reflow","offsetParent","classList","unwatchForRender","remove","addResizeListener","container","parentNode","insertBefore","firstChild","removeResizeListener","removeChild","injectCSS","platform","css","_style","setAttribute","getElementsByTagName","appendChild","createTextNode","keyframes","getElementById","context","forEach","prop","removeAttribute","proxies","addEvent","removeEvent","plugins","propagate","mappers","fill","visible","points","_children","point","_view","boundary","decodeFill","el","count","target","model","_model","parseFloat","computeBoundary","horizontal","_scale","scaleBottom","scaleTop","scaleZero","getBasePosition","getBasePixel","resolveTarget","sources","visited","createMapper","isDrawable","skip","drawArea","curve0","curve1","len0","len1","doFill","mapper","view","color","loop","p0","p1","d0","d1","spanGaps","closePath","afterDatasetsUpdate","Line","$filler","beforeDatasetDraw","clipArea","chartArea","_loop","unclipArea","DatasetScale","getLabels","xLabels","yLabels","findIndex","minIndex","maxIndex","valueCategory","offsetAmt","idx","valueWidth","widthOffset","valueHeight","heightOffset","_ticks","horz","valueDimension","animate","angleLines","gridLines","circular","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","pointLabels","getValueCount","getPointLabelFontOptions","pointLabelOptions","family","measureLabelSize","w","longestText","h","determineLimits","fitWithPointLabels","pointPosition","plFont","largestPossibleRadius","furthestLimits","r","l","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","angleRadians","getIndexAngle","toDegrees","hLimits","vLimits","setReductions","drawingArea","setCenterPoint","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","angleLineOpts","pointLabelOpts","outerDistance","getDistanceFromCenterForValue","outerPosition","xCenter","yCenter","pointLabelPosition","pointLabelFontColor","valueAtIndexOrDefault","drawRadiusLine","gridLineOpts","arc","numberOrZero","param","isNumber","LinearRadialScale","POSITIVE_INFINITY","NEGATIVE_INFINITY","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","startAngle","startAngleRadians","scalingFactor","distanceFromCenter","thisAngle","getPointPositionForValue","tickFontStyle","tickFontFamily","tickLabelFont","yCenterOffset","tickFontColor","labelWidth"],"mappings":"0HAEA,IAAAA,EAAeC,EAAQ,QACvBC,EAAcD,EAAQ,QACtBE,EAAcF,EAAQ,QACtBG,EAAcH,EAAQ,QAEtBI,EAAAF,EAAAE,KAmFA,SAAAC,EAAAC,EAAAC,GACA,OAAAD,EAAAE,cACAD,EAAAE,KAAAC,MACAJ,EAAAK,SApFAZ,EAAAa,KAAA,UACAC,QACAC,SAAA,EACAC,SAAA,MACAC,WAAA,EACAC,SAAA,EACAC,OAAA,IAGAC,QAAA,SAAAC,EAAAC,GACA,IAAAC,EAAAD,EAAAE,aACAC,EAAAC,KAAAC,MACAC,EAAAH,EAAAI,eAAAN,GAGAK,EAAAE,OAAA,OAAAF,EAAAE,QAAAL,EAAAM,KAAAC,SAAAT,GAAAO,OAAA,KAGAL,EAAAQ,UAGAC,QAAA,KAEAC,QACAvB,SAAA,GACAwB,QAAA,GAYAC,eAAA,SAAAV,GACA,IAAAI,EAAAJ,EAAAI,KACA,OAAA5B,EAAAmC,QAAAP,EAAAC,UAAAD,EAAAC,SAAAO,IAAA,SAAAC,EAAAC,GACA,OACAC,KAAAF,EAAAG,MACAC,UAAAzC,EAAAmC,QAAAE,EAAAK,iBAAAL,EAAAK,gBAAA,GAAAL,EAAAK,gBACAf,QAAAH,EAAAmB,iBAAAL,GACAM,QAAAP,EAAAQ,eACAC,SAAAT,EAAAU,WACAC,eAAAX,EAAAY,iBACAC,SAAAb,EAAAc,gBACAC,UAAAf,EAAAgB,YACAC,YAAAjB,EAAAkB,YACAC,WAAAnB,EAAAmB,WAGAnC,aAAAiB,IAEKf,YAKLkC,eAAA,SAAAjC,GACA,IAAAe,KACAA,EAAAmB,KAAA,cAAAlC,EAAAmC,GAAA,aACA,QAAArB,EAAA,EAAiBA,EAAAd,EAAAI,KAAAC,SAAA+B,OAAgCtB,IACjDC,EAAAmB,KAAA,qCAAAlC,EAAAI,KAAAC,SAAAS,GAAAI,gBAAA,aACAlB,EAAAI,KAAAC,SAAAS,GAAAE,OACAD,EAAAmB,KAAAlC,EAAAI,KAAAC,SAAAS,GAAAE,OAEAD,EAAAmB,KAAA,SAGA,OADAnB,EAAAmB,KAAA,SACAnB,EAAAsB,KAAA,OAmBA,IAAAC,EAAA/D,EAAAgE,QAEAC,WAAA,SAAAC,GACAjE,EAAA+D,OAAAxC,KAAA0C,GAGA1C,KAAA2C,kBAGA3C,KAAA4C,cAAA,GAOAC,aAAAlE,EACA4B,OAAA,SAAAuC,EAAAC,EAAAC,GACA,IAAAC,EAAAjD,KA0BA,OAvBAiD,EAAAJ,eAGAI,EAAAH,WACAG,EAAAF,YACAE,EAAAD,UAGAC,EAAAC,sBACAD,EAAAE,gBACAF,EAAAG,qBAEAH,EAAAI,oBACAJ,EAAAK,cACAL,EAAAM,mBAGAN,EAAAO,YACAP,EAAAQ,MACAR,EAAAS,WAEAT,EAAAU,cAEAV,EAAAW,SAEAD,YAAAhF,EAIAuE,oBAAAvE,EACAwE,cAAA,WACA,IAAAF,EAAAjD,KAEAiD,EAAAY,gBAEAZ,EAAAa,MAAAb,EAAAH,SACAG,EAAAc,KAAA,EACAd,EAAAe,MAAAf,EAAAa,QAEAb,EAAAgB,OAAAhB,EAAAF,UAGAE,EAAAiB,IAAA,EACAjB,EAAAkB,OAAAlB,EAAAgB,QAIAhB,EAAAmB,YAAA,EACAnB,EAAAoB,WAAA,EACApB,EAAAqB,aAAA,EACArB,EAAAsB,cAAA,EAGAtB,EAAAW,SACAE,MAAA,EACAG,OAAA,IAGAb,mBAAAzE,EAIA0E,kBAAA1E,EACA2E,YAAA,WACA,IAAAL,EAAAjD,KACAnB,EAAAoE,EAAAuB,QAAA/D,WACAgE,EAAAhG,EAAAiG,SAAA7F,EAAA8B,gBAAAsC,EAAAhD,OAAAgD,OAEApE,EAAA8F,SACAF,IAAAE,OAAA,SAAAC,GACA,OAAA/F,EAAA8F,OAAAC,EAAA3B,EAAAhD,MAAAI,SAIA4C,EAAAuB,QAAAhF,SACAiF,EAAAjF,UAGAyD,EAAAwB,eAEAlB,iBAAA5E,EAIA6E,UAAA7E,EACA8E,IAAA,WACA,IAAAR,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACA3F,EAAAgG,EAAApE,OACApB,EAAAwF,EAAAxF,QAEAyF,EAAA7B,EAAA6B,IAEAC,EAAAzG,EAAA0G,OACAC,EAAAxG,EAAAwG,eACAnG,EAAAmG,EAAApG,EAAAC,SAAAiG,EAAAG,iBACAC,EAAAF,EAAApG,EAAAsG,UAAAJ,EAAAK,kBACAC,EAAAJ,EAAApG,EAAAwG,WAAAN,EAAAO,mBACAC,EAAA9G,EAAA+G,WAAA1G,EAAAqG,EAAAE,GAGAI,EAAAxC,EAAAN,kBAEAiB,EAAAX,EAAAW,QACAC,EAAAZ,EAAAY,eAWA,GATAA,GACAD,EAAAE,MAAAb,EAAAH,SACAc,EAAAK,OAAA5E,EAAA,OAEAuE,EAAAE,MAAAzE,EAAA,KACAuE,EAAAK,OAAAhB,EAAAF,WAIA1D,EAGA,GAFAyF,EAAAY,KAAAH,EAEA1B,EAAA,CAIA,IAAA8B,EAAA1C,EAAA0C,YAAA,GACAC,EAAA3C,EAAAwB,YAAApC,OAAAvD,EAAAD,EAAA,UAEAiG,EAAAe,UAAA,OACAf,EAAAgB,aAAA,MAEArH,EAAAsH,KAAA9C,EAAAwB,YAAA,SAAA7E,EAAAmB,GACA,IAAA7B,EAAAN,EAAAC,EAAAC,GACAgF,EAAA5E,EAAAJ,EAAA,EAAAgG,EAAAkB,YAAApG,EAAAoB,MAAA8C,MAEA6B,IAAAtD,OAAA,GAAAyB,EAAAjF,EAAA6B,SAAAuC,EAAAa,QACA8B,GAAA9G,EAAAD,EAAA,QACA8G,IAAAtD,QAAAY,EAAAc,MAIA0B,EAAA1E,IACAgD,KAAA,EACAG,IAAA,EACAJ,QACAG,OAAAnF,GAGA6G,IAAAtD,OAAA,IAAAyB,EAAAjF,EAAA6B,UAGAkD,EAAAK,QAAA2B,MAEI,CACJ,IAAAK,EAAApH,EAAA6B,QACAwF,EAAAjD,EAAAiD,gBACAC,EAAAtH,EAAA6B,QACA0F,EAAA,EACAC,EAAA,EACAC,EAAAxH,EAAAmH,EAEAxH,EAAAsH,KAAA9C,EAAAwB,YAAA,SAAA7E,EAAAmB,GACA,IAAA7B,EAAAN,EAAAC,EAAAC,GACAyH,EAAArH,EAAAJ,EAAA,EAAAgG,EAAAkB,YAAApG,EAAAoB,MAAA8C,MAGAuC,EAAAC,EAAA1C,EAAAK,SACAkC,GAAAC,EAAAvH,EAAA6B,QACAwF,EAAA/D,KAAAiE,GAEAA,EAAA,EACAC,EAAA,GAIAD,EAAApH,KAAAwH,IAAAJ,EAAAG,GACAF,GAAAC,EAGAb,EAAA1E,IACAgD,KAAA,EACAG,IAAA,EACAJ,MAAAyC,EACAtC,OAAAnF,KAIAqH,GAAAC,EACAF,EAAA/D,KAAAiE,GACAxC,EAAAE,OAAAqC,EAIAlD,EAAAa,MAAAF,EAAAE,MACAb,EAAAgB,OAAAL,EAAAK,QAEAP,SAAA/E,EAGAkF,aAAA,WACA,cAAA7D,KAAAwE,QAAAlF,UAAA,WAAAU,KAAAwE,QAAAlF,UAIAmH,KAAA,WACA,IAAAxD,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACA3F,EAAAgG,EAAApE,OACAsE,EAAAzG,EAAA0G,OACA0B,EAAA3B,EAAA4B,SAAAC,KACAC,EAAA5D,EAAAa,MACA6B,EAAA1C,EAAA0C,WAEA,GAAAd,EAAAxF,QAAA,CACA,IAOAyH,EAPAhC,EAAA7B,EAAA6B,IACAG,EAAAxG,EAAAwG,eACA8B,EAAA9B,EAAApG,EAAAkI,UAAAhC,EAAAiC,kBACAlI,EAAAmG,EAAApG,EAAAC,SAAAiG,EAAAG,iBACAC,EAAAF,EAAApG,EAAAsG,UAAAJ,EAAAK,kBACAC,EAAAJ,EAAApG,EAAAwG,WAAAN,EAAAO,mBACAC,EAAA9G,EAAA+G,WAAA1G,EAAAqG,EAAAE,GAIAP,EAAAe,UAAA,OACAf,EAAAgB,aAAA,SACAhB,EAAAjD,UAAA,GACAiD,EAAA/C,YAAAgF,EACAjC,EAAA5D,UAAA6F,EACAjC,EAAAY,KAAAH,EAEA,IAAArG,EAAAN,EAAAC,EAAAC,GACA2G,EAAAxC,EAAAN,eAGAsE,EAAA,SAAAC,EAAAC,EAAAvH,GACA,KAAAwH,MAAAlI,OAAA,IAKA4F,EAAAuC,OAEAvC,EAAA5D,UAAA+D,EAAArF,EAAAsB,UAAA6D,EAAAuC,cACAxC,EAAAzD,QAAA4D,EAAArF,EAAAyB,QAAAqF,EAAApF,gBACAwD,EAAArD,eAAAwD,EAAArF,EAAA6B,eAAAiF,EAAAhF,kBACAoD,EAAAnD,SAAAsD,EAAArF,EAAA+B,SAAA+E,EAAA9E,iBACAkD,EAAAjD,UAAAoD,EAAArF,EAAAiC,UAAA6E,EAAA5E,aACAgD,EAAA/C,YAAAkD,EAAArF,EAAAmC,YAAAgD,EAAAuC,cACA,IAAAC,EAAA,IAAAtC,EAAArF,EAAAiC,UAAA6E,EAAA5E,aAOA,GALAgD,EAAA0C,aAEA1C,EAAA0C,YAAAvC,EAAArF,EAAA2B,SAAAmF,EAAAlF,aAGAqD,EAAApE,QAAAoE,EAAApE,OAAA1B,cAAA,CAGA,IAAA0I,EAAA3I,EAAAE,KAAAC,MAAA,EACAyI,EAAAD,EAAAzI,KAAAC,MACA0I,EAAAT,EAAAQ,EACAE,EAAAT,EAAAO,EAGAjJ,EAAAoJ,OAAAC,UAAAhD,EAAAlF,EAAAqC,WAAAwF,EAAAE,EAAAC,QAGAL,GACAzC,EAAAiD,WAAAb,EAAAC,EAAAjI,EAAAJ,GAEAgG,EAAAkD,SAAAd,EAAAC,EAAAjI,EAAAJ,GAGAgG,EAAAmD,YAEAC,EAAA,SAAAhB,EAAAC,EAAAvH,EAAAuI,GACA,IAAAC,EAAAtJ,EAAA,EACAuJ,EAAAnJ,EAAAkJ,EAAAlB,EACAoB,EAAAnB,EAAAiB,EAEAtD,EAAAoD,SAAAtI,EAAAoB,KAAAqH,EAAAC,GAEA1I,EAAAQ,SAEA0E,EAAAyD,YACAzD,EAAAjD,UAAA,EACAiD,EAAA0D,OAAAH,EAAAC,GACAxD,EAAA2D,OAAAJ,EAAAF,EAAAG,GACAxD,EAAA4D,WAKA7E,EAAAZ,EAAAY,eAEAiD,EADAjD,GAEAqD,EAAAjE,EAAAc,MAAA8C,EAAAlB,EAAA,MACAwB,EAAAlE,EAAAiB,IAAArF,EAAA6B,QACAkG,KAAA,IAIAM,EAAAjE,EAAAc,KAAAlF,EAAA6B,QACAyG,EAAAlE,EAAAiB,IAAArF,EAAA6B,QACAkG,KAAA,GAIA,IAAAN,EAAAxH,EAAAD,EAAA6B,QACAjC,EAAAsH,KAAA9C,EAAAwB,YAAA,SAAA7E,EAAAmB,GACA,IAAAoH,EAAArD,EAAAkB,YAAApG,EAAAoB,MAAA8C,MACAA,EAAA5E,EAAAJ,EAAA,EAAAqJ,EACAjB,EAAAJ,EAAAI,EACAC,EAAAL,EAAAK,EAEAtD,EACAqD,EAAApD,GAAA+C,IACAM,EAAAL,EAAAK,GAAAb,EACAQ,EAAAF,OACAM,EAAAJ,EAAAI,EAAAjE,EAAAc,MAAA8C,EAAAlB,EAAAmB,EAAAF,OAAA,GAEKO,EAAAb,EAAArD,EAAAkB,SACL+C,EAAAJ,EAAAI,IAAAjE,EAAAiD,aAAAY,EAAAF,MAAA/H,EAAA6B,QACAyG,EAAAL,EAAAK,EAAAlE,EAAAiB,IAAArF,EAAA6B,QACAoG,EAAAF,QAGAK,EAAAC,EAAAC,EAAAvH,GAEA6F,EAAA1E,GAAAgD,KAAAmD,EACAzB,EAAA1E,GAAAmD,IAAAiD,EAGAe,EAAAhB,EAAAC,EAAAvH,EAAAuI,GAEAtE,EACAiD,EAAAI,GAAApD,EAAAjF,EAAA,QAEAiI,EAAAK,GAAAb,MAaAqC,YAAA,SAAAhJ,GACA,IAAAsD,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAoE,EAAA,YAAAjJ,EAAAiJ,KAAA,QAAAjJ,EAAAiJ,KACAC,GAAA,EAEA,iBAAAD,GACA,IAAA/D,EAAArE,QACA,WAEG,cAAAoI,EAKH,OAJA,IAAA/D,EAAAnF,QACA,OAOA,IAAAwH,EAAAvH,EAAAuH,EACAC,EAAAxH,EAAAwH,EAEA,GAAAD,GAAAjE,EAAAc,MAAAmD,GAAAjE,EAAAe,OAAAmD,GAAAlE,EAAAiB,KAAAiD,GAAAlE,EAAAkB,OAGA,IADA,IAAA2E,EAAA7F,EAAAN,eACA5B,EAAA,EAAkBA,EAAA+H,EAAAzG,SAAetB,EAAA,CACjC,IAAAgI,EAAAD,EAAA/H,GAEA,GAAAmG,GAAA6B,EAAAhF,MAAAmD,GAAA6B,EAAAhF,KAAAgF,EAAAjF,OAAAqD,GAAA4B,EAAA7E,KAAAiD,GAAA4B,EAAA7E,IAAA6E,EAAA9E,OAAA,CAEA,aAAA2E,EAAA,CAEA/D,EAAAnF,QAAAsJ,KAAA/F,EAAAtD,EAAAsJ,OAAAhG,EAAAwB,YAAA1D,IACA8H,GAAA,EACA,MACM,iBAAAD,EAAA,CAEN/D,EAAArE,QAAAwI,KAAA/F,EAAAtD,EAAAsJ,OAAAhG,EAAAwB,YAAA1D,IACA8H,GAAA,EACA,QAMA,OAAAA,KAIA,SAAAK,EAAAjJ,EAAAkJ,GACA,IAAA/J,EAAA,IAAAmD,GACAuC,IAAA7E,EAAA6E,IACAN,QAAA2E,EACAlJ,UAGAvB,EAAA0K,UAAAnJ,EAAAb,EAAA+J,GACAzK,EAAA2K,OAAApJ,EAAAb,GACAa,EAAAb,SAGAkK,EAAAC,SACAnH,GAAA,SASAoH,SAAAjH,EAEAkH,WAAA,SAAAxJ,GACA,IAAAkJ,EAAAlJ,EAAAuE,QAAApF,OAEA+J,GACAD,EAAAjJ,EAAAkJ,IAIAtG,aAAA,SAAA5C,GACA,IAAAkJ,EAAAlJ,EAAAuE,QAAApF,OACAA,EAAAa,EAAAb,OAEA+J,GACA1K,EAAAiL,QAAAP,EAAA7K,EAAA0G,OAAA5F,QAEAA,GACAV,EAAA0K,UAAAnJ,EAAAb,EAAA+J,GACA/J,EAAAoF,QAAA2E,GAEAD,EAAAjJ,EAAAkJ,IAEG/J,IACHV,EAAAiL,UAAA1J,EAAAb,UACAa,EAAAb,SAIAwK,WAAA,SAAA3J,EAAAN,GACA,IAAAP,EAAAa,EAAAb,OACAA,GACAA,EAAAuJ,YAAAhJ,2BCvjBA2J,EAAAC,SACAM,eAAA,SAAAjF,GAMA,OALAA,KAAAiD,SAEAjD,IAAAiD,QAGAjD,KAAAkF,WAAA,iDCTA,IAAAC,EAAaxL,EAAQ,QACrBwL,EAAA,oBAAAA,IAAAC,OAAAD,OAEA,IAAAzL,EAAeC,EAAQ,QACvBE,EAAcF,EAAQ,QAGtB0L,EAAAC,OAAAC,mBAAA,iBACAC,EAAAF,OAAAG,kBAAA,iBAEAC,GACAC,aACAC,QAAA,EACAC,KAAA,EACAC,OAAA,6BAEAC,QACAH,QAAA,EACAC,KAAA,IACAC,OAAA,cAEAE,QACAJ,QAAA,EACAC,KAAA,IACAC,OAAA,cAEAG,MACAL,QAAA,EACAC,KAAA,KACAC,OAAA,aAEAI,KACAN,QAAA,EACAC,KAAA,MACAC,OAAA,QAEAK,MACAP,QAAA,EACAC,KAAA,OACAC,OAAA,UAEAM,OACAR,QAAA,EACAC,KAAA,OACAC,OAAA,QAEAO,SACAT,QAAA,EACAC,KAAA,OACAC,OAAA,UAEAQ,MACAV,QAAA,EACAC,KAAA,SAIAU,EAAAC,OAAAC,KAAAf,GAEA,SAAAgB,EAAAC,EAAAC,GACA,OAAAD,EAAAC,EAGA,SAAAC,EAAAC,GACA,IAEA3K,EAAA4K,EAAA/G,EAFAgH,KACAC,KAGA,IAAA9K,EAAA,EAAA4K,EAAAD,EAAArJ,OAAiCtB,EAAA4K,IAAU5K,EAC3C6D,EAAA8G,EAAA3K,GACA6K,EAAAhH,KACAgH,EAAAhH,IAAA,EACAiH,EAAA1J,KAAAyC,IAIA,OAAAiH,EAkBA,SAAAC,EAAAC,EAAAC,EAAAxF,EAAAyF,GACA,cAAAA,IAAAF,EAAA1J,OACA,QACI6J,KAAAF,EAAAG,IAAA,IACAD,KAAA1F,EAAA2F,IAAA,IAIJ,IAEApL,EAAA4K,EAAAS,EAAAC,EAAAC,EAFAC,KACAb,GAAAM,GAGA,IAAAjL,EAAA,EAAA4K,EAAAI,EAAA1J,OAAsCtB,EAAA4K,IAAU5K,EAChDsL,EAAAN,EAAAhL,GACAsL,EAAAL,GAAAK,EAAA7F,GACAkF,EAAAvJ,KAAAkK,GAMA,IAFAX,EAAAvJ,KAAAqE,GAEAzF,EAAA,EAAA4K,EAAAD,EAAArJ,OAAiCtB,EAAA4K,IAAU5K,EAC3CuL,EAAAZ,EAAA3K,EAAA,GACAqL,EAAAV,EAAA3K,EAAA,GACAsL,EAAAX,EAAA3K,QAGAyL,IAAAJ,QAAAI,IAAAF,GAAAtN,KAAAyN,OAAAH,EAAAF,GAAA,KAAAC,GACAE,EAAApK,MAAe+J,KAAAG,EAAAF,IAAApL,GAAA4K,EAAA,KAIf,OAAAY,EAIA,SAAAG,EAAAH,EAAAI,EAAAC,GACA,IAEAC,EAAAC,EAAAC,EAFAC,EAAA,EACAC,EAAAV,EAAAlK,OAAA,EAGA,MAAA2K,GAAA,GAAAA,GAAAC,EAAA,CAKA,GAJAJ,EAAAG,EAAAC,GAAA,EACAH,EAAAP,EAAAM,EAAA,SACAE,EAAAR,EAAAM,IAEAC,EAEA,OAAWE,GAAA,KAAAC,GAAAF,GACR,GAAAA,EAAAJ,GAAAC,EACHI,EAAAH,EAAA,MACG,MAAAC,EAAAH,GAAAC,GAGH,OAAWI,GAAAF,EAAAG,GAAAF,GAFXE,EAAAJ,EAAA,GAOA,OAASG,GAAAD,EAAAE,GAAA,MAST,SAAAC,EAAAX,EAAAY,EAAAC,EAAAC,GACA,IAAAC,EAAAZ,EAAAH,EAAAY,EAAAC,GAGAhB,EAAAkB,EAAAN,GAAAM,EAAAL,GAAAK,EAAAN,GAAAT,IAAAlK,OAAA,GAAAkK,EAAA,GACAD,EAAAgB,EAAAN,GAAAM,EAAAL,GAAAK,EAAAL,GAAAV,IAAAlK,OAAA,GAAAkK,EAAA,GAEAgB,EAAAjB,EAAAa,GAAAf,EAAAe,GACAK,EAAAD,GAAAH,EAAAhB,EAAAe,IAAAI,EAAA,EACAE,GAAAnB,EAAAe,GAAAjB,EAAAiB,IAAAG,EAEA,OAAApB,EAAAiB,GAAAI,EAOA,SAAAC,EAAAd,EAAApI,GACA,IAAAmJ,EAAAnJ,EAAAmJ,OACAC,EAAApJ,EAAAmJ,QAAAnJ,EAAAoJ,OAEA,0BAAAD,EACAA,EAAAf,GAGA,kBAAAA,GAAA,kBAAAgB,EACA7D,EAAA6C,EAAAgB,IAGAhB,aAAA7C,IACA6C,EAAA7C,EAAA6C,IAGAA,EAAAiB,UACAjB,EAKA,oBAAAgB,EACAA,EAAAhB,GAGAA,GAGA,SAAAkB,EAAAC,EAAAC,GACA,GAAAvP,EAAAwP,cAAAF,GACA,YAGA,IAAAvJ,EAAAwJ,EAAAxJ,QAAA0H,KACAU,EAAAc,EAAAM,EAAAE,cAAAH,GAAAvJ,GACA,OAAAoI,EAAAiB,WAIArJ,EAAAiI,OACAG,EAAAuB,QAAA3J,EAAAiI,OAGAG,EAAAwB,WAPA,KAcA,SAAAC,EAAArC,EAAAxF,EAAA8H,EAAAC,GACA,IAIAxN,EAAA4K,EAAA6C,EAJAlB,EAAA9G,EAAAwF,EACAyC,EAAAnE,EAAAgE,GACAI,EAAAD,EAAAhE,KACAC,EAAA+D,EAAA/D,MAGA,IAAAA,EACA,OAAA1L,KAAA2P,KAAArB,GAAAiB,EAAAG,IAGA,IAAA3N,EAAA,EAAA4K,EAAAjB,EAAArI,OAAiCtB,EAAA4K,IAAU5K,EAE3C,GADAyN,EAAA9D,EAAA3J,GACA/B,KAAA2P,KAAArB,GAAAoB,EAAAF,KAAAD,EACA,MAIA,OAAAC,EAMA,SAAAI,EAAAC,EAAA7C,EAAAxF,EAAA+H,GACA,IACAxN,EAAA0N,EAAAD,EADA7C,EAAAR,EAAA9I,OAGA,IAAAtB,EAAAoK,EAAA2D,QAAAD,GAAiC9N,EAAA4K,EAAA,IAAc5K,EAI/C,GAHA0N,EAAAnE,EAAAa,EAAApK,IACAyN,EAAAC,EAAA/D,MAAA+D,EAAA/D,MAAA+D,EAAA/D,MAAArI,OAAA,GAAA+H,EAEAqE,EAAAjE,QAAAxL,KAAA2P,MAAAnI,EAAAwF,IAAAwC,EAAAC,EAAAhE,QAAA8D,EACA,OAAApD,EAAApK,GAIA,OAAAoK,EAAAQ,EAAA,GAMA,SAAAoD,EAAAC,EAAAH,EAAA7C,EAAAxF,GACA,IAEAzF,EAAAuN,EAFAW,EAAAlF,EAAAkF,SAAAlF,EAAAvD,GAAA0I,KAAAnF,EAAAiC,KACAL,EAAAR,EAAA9I,OAGA,IAAAtB,EAAA4K,EAAA,EAAmB5K,GAAAoK,EAAA2D,QAAAD,GAA6B9N,IAEhD,GADAuN,EAAAnD,EAAApK,GACAuJ,EAAAgE,GAAA9D,QAAAyE,EAAAE,GAAAb,IAAAU,EAAA3M,OACA,OAAAiM,EAIA,OAAAnD,EAAA0D,EAAA1D,EAAA2D,QAAAD,GAAA,GAGA,SAAAO,EAAAd,GACA,QAAAvN,EAAAoK,EAAA2D,QAAAR,GAAA,EAAA3C,EAAAR,EAAA9I,OAA2DtB,EAAA4K,IAAU5K,EACrE,GAAAuJ,EAAAa,EAAApK,IAAAyJ,OACA,OAAAW,EAAApK,GAWA,SAAAsO,EAAArD,EAAAxF,EAAA+H,EAAA/J,GACA,IAUA0H,EAVAoD,EAAA9K,EAAA0H,KACAqD,EAAAD,EAAAhB,MAAAM,EAAAU,EAAAT,QAAA7C,EAAAxF,EAAA+H,GACAiB,EAAAJ,EAAAG,GACAE,EAAAhR,EAAAwG,eAAAqK,EAAAG,SAAAH,EAAAI,cACAC,EAAA,SAAAJ,GAAAD,EAAAM,WACAC,EAAArL,EAAAwK,MAAAQ,MAAAM,QACArB,EAAAnE,EAAAiF,GACAQ,EAAAhG,EAAAiC,GACAgE,EAAAjG,EAAAvD,GACAwI,KAgCA,IA7BAS,IACAA,EAAApB,EAAArC,EAAAxF,EAAA+I,EAAAhB,IAIAoB,IACAI,IAAAH,WAAAD,GACAK,IAAAJ,WAAAD,IAIAI,IAAA5B,QAAAwB,EAAA,MAAAJ,GACAS,IAAA7B,QAAAwB,EAAA,MAAAJ,GAGAS,EAAAxJ,GACAwJ,EAAAC,IAAA,EAAAV,GAGArD,EAAAnC,EAAAgG,GAEAF,GAAAL,IAAAG,IAAAL,EAAA7C,QAIAP,EAAAiC,QAAAqB,GACAtD,EAAA+D,QAAAF,EAAA7D,IAAAuC,EAAAhE,KAAAgF,MAAAF,IAGOrD,EAAA8D,EAAa9D,EAAA+D,IAAAR,EAAAF,GACpBP,EAAA7M,MAAA+J,GAKA,OAFA8C,EAAA7M,MAAA+J,GAEA8C,EAOA,SAAAkB,EAAA3D,EAAAyC,EAAAhD,EAAAxF,EAAAhC,GACA,IAEA2L,EAAAC,EAFArM,EAAA,EACAC,EAAA,EAsBA,OAnBAQ,EAAAiJ,QAAAuB,EAAA3M,SACAmC,EAAA0H,KAAAF,MACAmE,EAAAnB,EAAA3M,OAAA,EAAA2M,EAAA,GAAAxI,EACA4J,EAAApB,EAAA,GACAjL,GACAmJ,EAAAX,EAAA,OAAA4D,EAAA,OACAjD,EAAAX,EAAA,OAAA6D,EAAA,QACA,GAEA5L,EAAA0H,KAAA1F,MACA2J,EAAAnB,IAAA3M,OAAA,GACA+N,EAAApB,EAAA3M,OAAA,EAAA2M,IAAA3M,OAAA,GAAA2J,EACAhI,GACAkJ,EAAAX,EAAA,OAAA4D,EAAA,OACAjD,EAAAX,EAAA,OAAA6D,EAAA,QACA,KAISrM,OAAAC,SAGT,SAAAqM,EAAAC,EAAAC,GACA,IACAxP,EAAA4K,EAAAiB,EAAA4C,EADAR,KAGA,IAAAjO,EAAA,EAAA4K,EAAA2E,EAAAjO,OAAkCtB,EAAA4K,IAAU5K,EAC5C6L,EAAA0D,EAAAvP,GACAyO,IAAAe,GAAA3D,KAAA7C,EAAA6C,GAAAuB,QAAAoC,GAEAvB,EAAA7M,MACAyK,QACA4C,UAIA,OAAAR,EAGA,SAAAwB,EAAAnQ,EAAAiP,GACA,IAAAvO,EAAA0P,EAAAC,EACA/E,EAAAtL,EAAAgC,OAIA,IAAAtB,EAAA,EAAYA,EAAA4K,EAAU5K,IAAA,CAEtB,GADA0P,EAAA/C,EAAArN,EAAAU,GAAAuO,GACA,IAAAmB,EAAAlG,cACA,kCAEA,IAAAkG,EAAA9F,UAAA,IAAA8F,EAAA7F,UAAA,IAAA6F,EAAA5F,SACA6F,GAAA,GAGA,OAAAA,EACA,wBAEA,cAGApH,EAAAC,QAAA,SAAAoH,GAEA,IAAAC,GACAtR,SAAA,SASA2M,aAAA,SASA4E,OAAA,OAEA3E,MACAyB,QAAA,EACAC,QAAA,EACAU,MAAA,EACA7B,OAAA,EACAqE,eAAA,EACAlB,YAAA,EACAf,QAAA,cAGAkC,gBACAxG,YAAA,gBACAI,OAAA,YACAC,OAAA,SACAC,KAAA,KACAC,IAAA,QACAC,KAAA,KACAC,MAAA,WACAC,QAAA,cACAC,KAAA,SAGA8D,OACAgC,UAAA,EAUAC,OAAA,OAEAzB,OACAM,SAAA,KAKAoB,EAAAP,EAAAQ,MAAA3O,QACAC,WAAA,WACA,IAAAsH,EACA,UAAAqH,MAAA,wIAGApR,KAAAqR,oBAEAV,EAAAQ,MAAAG,UAAA7O,WAAAuG,KAAAhJ,OAGAO,OAAA,WACA,IAAA0C,EAAAjD,KACAwE,EAAAvB,EAAAuB,QAOA,OAJAA,EAAA0H,MAAA1H,EAAA0H,KAAA0B,QACA2D,QAAAC,KAAA,0EAGAb,EAAAQ,MAAAG,UAAA/Q,OAAAkR,MAAAxO,EAAAyO,YAMAxD,cAAA,SAAAyD,GAIA,OAHAA,QAAAnF,IAAAmF,EAAAC,IACAD,IAAAC,GAEAjB,EAAAQ,MAAAG,UAAApD,cAAAlF,KAAAhJ,KAAA2R,IAGAE,oBAAA,WACA,IASA9Q,EAAA+Q,EAAAnG,EAAAoG,EAAA1R,EAAA2R,EATA/O,EAAAjD,KACAC,EAAAgD,EAAAhD,MACAqP,EAAArM,EAAAuB,QAAA0H,KACAoC,EAAAgB,EAAAhB,MAAA,MACAtC,EAAA5B,EACA5D,EAAAyD,EACA8B,KACAzL,KACAG,KAIA,IAAAM,EAAA,EAAA4K,EAAA1L,EAAAI,KAAAI,OAAA4B,OAA+CtB,EAAA4K,IAAU5K,EACzDN,EAAA0B,KAAA2L,EAAA7N,EAAAI,KAAAI,OAAAM,GAAAkC,IAIA,IAAAlC,EAAA,EAAA4K,GAAA1L,EAAAI,KAAAC,cAAA+B,OAAyDtB,EAAA4K,IAAU5K,EACnE,GAAAd,EAAAmB,iBAAAL,GAIA,GAHAV,EAAAJ,EAAAI,KAAAC,SAAAS,GAAAV,KAGA5B,EAAAwT,SAAA5R,EAAA,IAGA,IAFAC,EAAAS,MAEA+Q,EAAA,EAAAC,EAAA1R,EAAAgC,OAAqCyP,EAAAC,IAAUD,EAC/CE,EAAAlE,EAAAzN,EAAAyR,GAAA7O,GACA8I,EAAA5J,KAAA6P,GACA1R,EAAAS,GAAA+Q,GAAAE,OAGAjG,EAAA5J,KAAAsP,MAAA1F,EAAAtL,GACAH,EAAAS,GAAAN,EAAAyR,MAAA,QAGA5R,EAAAS,MAIAN,EAAA4B,SAEA5B,EAAAgL,EAAAhL,GAAA0R,KAAA7G,GACAU,EAAAhN,KAAAgN,MAAAvL,EAAA,IACA+F,EAAAxH,KAAAwH,MAAA/F,IAAA4B,OAAA,KAGA0J,EAAA1J,SACA0J,EAAAN,EAAAM,GAAAoG,KAAA7G,GACAU,EAAAhN,KAAAgN,MAAAD,EAAA,IACAvF,EAAAxH,KAAAwH,MAAAuF,IAAA1J,OAAA,KAGA2J,EAAA8B,EAAAwB,EAAAtD,IAAA/I,IAAA+I,EACAxF,EAAAsH,EAAAwB,EAAA9I,IAAAvD,IAAAuD,EAGAwF,MAAA5B,GAAAL,IAAAoE,QAAAG,GAAAtC,EACAxF,MAAAyD,GAAAF,IAAAqI,MAAA9D,GAAA,EAAA9H,EAGAvD,EAAA+I,IAAAhN,KAAAgN,MAAAxF,GACAvD,EAAAuD,IAAAxH,KAAAwH,IAAAwF,EAAA,EAAAxF,GAGAvD,EAAAoP,YAAApP,EAAAY,eACAZ,EAAAqP,UACArP,EAAAsP,aACAlS,KAAA0L,EACAzL,WACAG,WAIA+R,WAAA,WACA,IAOAzR,EAAA4K,EAAAqG,EAPA/O,EAAAjD,KACAgM,EAAA/I,EAAA+I,IACAxF,EAAAvD,EAAAuD,IACAhC,EAAAvB,EAAAuB,QACA8K,EAAA9K,EAAA0H,KACAH,KACAiD,KAGA,OAAAxK,EAAAwK,MAAAiC,QACA,WACAlF,EAAA9I,EAAAsP,YAAAlS,KACA,MACA,aACA0L,EAAA9I,EAAAsP,YAAA9R,OACA,MACA,WACA,QACAsL,EAAAsD,EAAArD,EAAAxF,EAAAvD,EAAAwP,iBAAAzG,GAAAxH,GAaA,IAVA,UAAAA,EAAAqM,QAAA9E,EAAA1J,SACA2J,EAAAD,EAAA,GACAvF,EAAAuF,IAAA1J,OAAA,IAIA2J,EAAA8B,EAAAwB,EAAAtD,IAAA/I,IAAA+I,EACAxF,EAAAsH,EAAAwB,EAAA9I,IAAAvD,IAAAuD,EAGAzF,EAAA,EAAA4K,EAAAI,EAAA1J,OAAwCtB,EAAA4K,IAAU5K,EAClDiR,EAAAjG,EAAAhL,GACAiR,GAAAhG,GAAAgG,GAAAxL,GACAwI,EAAA7M,KAAA6P,GAcA,OAVA/O,EAAA+I,MACA/I,EAAAuD,MAGAvD,EAAAyP,MAAApD,EAAAhB,MAAAS,EAAAC,EAAAM,EAAAT,QAAA5L,EAAA+I,IAAA/I,EAAAuD,KACAvD,EAAA0P,WAAAvD,EAAAnM,EAAAyP,OACAzP,EAAAqP,OAAAxG,EAAA7I,EAAAsP,YAAAlS,KAAA2L,EAAAxF,EAAAhC,EAAAyH,cACAhJ,EAAA2P,SAAA1C,EAAAjN,EAAAqP,OAAAtD,EAAAhD,EAAAxF,EAAAhC,GACAvB,EAAA4P,aAAArC,EAAAvN,EAAAsP,YAAAlS,KAAAiP,GAEAe,EAAArB,EAAA/L,EAAA0P,aAGAG,iBAAA,SAAAjT,EAAAC,GACA,IAAAmD,EAAAjD,KACAK,EAAA4C,EAAAhD,MAAAI,KACAiP,EAAArM,EAAAuB,QAAA0H,KACAjL,EAAAZ,EAAAI,QAAAZ,EAAAQ,EAAAI,OAAA4B,OAAAhC,EAAAI,OAAAZ,GAAA,GACA+M,EAAAvM,EAAAC,SAAAR,GAAAO,KAAAR,GAKA,OAHApB,EAAAwT,SAAArF,KACA3L,EAAAgC,EAAAiL,cAAAtB,IAEA0C,EAAAyD,cACArF,EAAAzM,EAAAqO,GAAA1B,OAAA0B,EAAAyD,eAEA,kBAAA9R,EACAA,EAGAyM,EAAAzM,EAAAqO,GAAA1B,OAAA3K,EAAA4P,eAOAG,mBAAA,SAAAC,EAAApT,EAAAmP,EAAAkE,GACA,IAAAjQ,EAAAjD,KACAwE,EAAAvB,EAAAuB,QACA0H,EAAA+G,EAAA7E,UACA+E,EAAA3O,EAAA0H,KAAA6E,eACAqC,EAAAD,EAAAlQ,EAAAyP,OACAnC,EAAAtN,EAAA0P,WACAU,EAAAF,EAAA5C,GACA+C,EAAAL,EAAAM,QAAApF,QAAAoC,GAAAnC,UACAoF,EAAAhP,EAAAwK,MAAAQ,MACAA,EAAAgE,EAAA1D,SAAAS,GAAA8C,GAAAnH,IAAAoH,EACArS,EAAAgS,EAAArF,OAAAsF,IAAA1D,EAAA6D,EAAAD,IACAK,EAAAjE,EAAAgE,EAAAhP,EAAAwK,MAAAO,MACAmE,EAAAjV,EAAAwG,eAAAwO,EAAA/O,SAAA+O,EAAAE,cAEA,OAAAD,IAAAzS,EAAApB,EAAAmP,GAAA/N,GAGA2S,qBAAA,SAAA5E,GACA,IACAjO,EAAA4K,EADAlL,KAGA,IAAAM,EAAA,EAAA4K,EAAAqD,EAAA3M,OAAmCtB,EAAA4K,IAAU5K,EAC7CN,EAAA0B,KAAAnC,KAAAgT,mBAAAjJ,EAAAiF,EAAAjO,GAAA6L,OAAA7L,EAAAiO,IAGA,OAAAvO,GAMAoT,kBAAA,SAAA3H,GACA,IAAAjJ,EAAAjD,KACAyK,EAAAxH,EAAAoP,YAAApP,EAAAa,MAAAb,EAAAgB,OACA6P,EAAA7Q,EAAAoP,YAAApP,EAAAc,KAAAd,EAAAiB,IACAiI,EAAAe,EAAAjK,EAAAqP,OAAA,OAAApG,EAAA,OAEA,OAAA4H,EAAArJ,GAAAxH,EAAA2P,SAAA7O,KAAAoI,IAAAlJ,EAAA2P,SAAA7O,KAAA,EAAAd,EAAA2P,SAAA5O,QAGA+P,iBAAA,SAAAnH,EAAA/M,EAAAC,GACA,IAAAmD,EAAAjD,KACAkM,EAAA,KAUA,QARAM,IAAA3M,QAAA2M,IAAA1M,IACAoM,EAAAjJ,EAAAsP,YAAAjS,SAAAR,GAAAD,IAGA,OAAAqM,IACAA,EAAA4B,EAAAlB,EAAA3J,IAGA,OAAAiJ,EACA,OAAAjJ,EAAA4Q,kBAAA3H,IAIA8H,gBAAA,SAAAnU,GACA,IAAAmP,EAAAhP,KAAAiU,WACA,OAAApU,GAAA,GAAAA,EAAAmP,EAAA3M,OACArC,KAAA6T,kBAAA7E,EAAAnP,GAAA+M,OACA,MAGAsH,iBAAA,SAAAC,GACA,IAAAlR,EAAAjD,KACAyK,EAAAxH,EAAAoP,YAAApP,EAAAa,MAAAb,EAAAgB,OACA6P,EAAA7Q,EAAAoP,YAAApP,EAAAc,KAAAd,EAAAiB,IACAiI,GAAA1B,GAAA0J,EAAAL,GAAArJ,EAAA,IAAAxH,EAAA2P,SAAA7O,KAAA,EAAAd,EAAA2P,SAAA7O,MAAAd,EAAA2P,SAAA5O,MACAkI,EAAAgB,EAAAjK,EAAAqP,OAAA,MAAAnG,EAAA,QAEA,OAAApC,EAAAmC,IAOAkI,cAAA,SAAAnT,GACA,IAAAgC,EAAAjD,KACAqU,EAAApR,EAAAuB,QAAAwK,MACAsF,EAAArR,EAAA6B,IAAAkB,YAAA/E,GAAA6C,MACAyQ,EAAA9V,EAAA+V,UAAAH,EAAAI,aACAC,EAAA1V,KAAA2V,IAAAJ,GACAK,EAAA5V,KAAA6V,IAAAN,GACAO,EAAArW,EAAAwG,eAAAoP,EAAAvV,SAAAR,EAAA0G,OAAAE,iBAEA,OAAAoP,EAAAI,EAAAI,EAAAF,GAMAnC,iBAAA,SAAAsC,GACA,IAAA9R,EAAAjD,KAEAkT,EAAAjQ,EAAAuB,QAAA0H,KAAA6E,eAAAxG,YAEAyK,EAAA/R,EAAA+P,mBAAAjJ,EAAAgL,GAAA,KAAA7B,GACAoB,EAAArR,EAAAmR,cAAAY,GACAC,EAAAhS,EAAAY,eAAAZ,EAAAa,MAAAb,EAAAgB,OAEAsK,EAAAvP,KAAAkW,MAAAD,EAAAX,GACA,OAAA/F,EAAA,EAAAA,EAAA,KAIAoC,EAAAwE,aAAAC,kBAAA,OAAAlE,EAAAN,yCC3wBA,IAAAtS,EAAeC,EAAQ,QACvBE,EAAcF,EAAQ,QACtB8W,EAAY9W,EAAQ,QAEpB+K,EAAAC,QAAA,SAAAoH,GAEA,IAAAC,GACAtR,SAAA,OACA0P,OACAtK,SAAA2Q,EAAAC,WAAAC,SAIAC,EAAA7E,EAAA8E,gBAAAjT,QAEAqP,oBAAA,WACA,IAAA5O,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAvE,EAAAgD,EAAAhD,MACAI,EAAAJ,EAAAI,KACAC,EAAAD,EAAAC,SACAuD,EAAAZ,EAAAY,eACA6R,EAAA,EACAC,EAAA,EAEA,SAAAC,EAAA1V,GACA,OAAA2D,EAAA3D,EAAA2V,UAAA5S,EAAAb,GAAAlC,EAAA4V,UAAA7S,EAAAb,GAIAa,EAAA+I,IAAA,KACA/I,EAAAuD,IAAA,KAEA,IAAAuP,EAAAlR,EAAAmR,QAeA,QAdAxJ,IAAAuJ,GACAtX,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAiW,EAAA,CAIA,IAAA7V,EAAAD,EAAAE,eAAAL,GACAG,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,SACAsM,IAAAtM,EAAA+V,QACAF,GAAA,MAKAlR,EAAAmR,SAAAD,EAAA,CACA,IAAAG,KAEAzX,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAI,EAAAD,EAAAE,eAAAL,GACA6M,GACAzM,EAAA0I,UAEA4D,IAAA3H,EAAAmR,cAAAxJ,IAAAtM,EAAA+V,MAAAnW,EAAA,GACAI,EAAA+V,OACA3T,KAAA,UAEAkK,IAAA0J,EAAAvJ,KACAuJ,EAAAvJ,IACAwJ,kBACAC,oBAKA,IAAAD,EAAAD,EAAAvJ,GAAAwJ,eACAC,EAAAF,EAAAvJ,GAAAyJ,eAEAnW,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,IACAzB,EAAAsH,KAAAjF,EAAAT,KAAA,SAAAsR,EAAA9R,GACA,IAAA+M,GAAA3J,EAAAiL,cAAAyD,GACAvK,MAAAwF,IAAA1M,EAAAG,KAAAR,GAAAO,SAIA+V,EAAAtW,GAAAsW,EAAAtW,IAAA,EACAuW,EAAAvW,GAAAuW,EAAAvW,IAAA,EAEAgF,EAAAwR,eACAF,EAAAtW,GAAA,IACQ+M,EAAA,EACRwJ,EAAAvW,IAAA+M,EAEAuJ,EAAAtW,IAAA+M,OAMAnO,EAAAsH,KAAAmQ,EAAA,SAAAI,GACA,IAAAhG,EAAAgG,EAAAH,eAAAI,OAAAD,EAAAF,gBACAI,EAAA/X,EAAAuN,IAAAsE,GACAmG,EAAAhY,EAAA+H,IAAA8J,GACArN,EAAA+I,IAAA,OAAA/I,EAAA+I,IAAAwK,EAAAxX,KAAAgN,IAAA/I,EAAA+I,IAAAwK,GACAvT,EAAAuD,IAAA,OAAAvD,EAAAuD,IAAAiQ,EAAAzX,KAAAwH,IAAAvD,EAAAuD,IAAAiQ,UAIAhY,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAI,EAAAD,EAAAE,eAAAL,GACAG,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,IACAzB,EAAAsH,KAAAjF,EAAAT,KAAA,SAAAsR,EAAA9R,GACA,IAAA+M,GAAA3J,EAAAiL,cAAAyD,GACAvK,MAAAwF,IAAA1M,EAAAG,KAAAR,GAAAO,SAIA,OAAA6C,EAAA+I,IACA/I,EAAA+I,IAAAY,EACQA,EAAA3J,EAAA+I,MACR/I,EAAA+I,IAAAY,GAGA,OAAA3J,EAAAuD,IACAvD,EAAAuD,IAAAoG,EACQA,EAAA3J,EAAAuD,MACRvD,EAAAuD,IAAAoG,QAOA3J,EAAA+I,IAAA0K,SAAAzT,EAAA+I,OAAA5E,MAAAnE,EAAA+I,KAAA/I,EAAA+I,IAAA0J,EACAzS,EAAAuD,IAAAkQ,SAAAzT,EAAAuD,OAAAY,MAAAnE,EAAAuD,KAAAvD,EAAAuD,IAAAmP,EAGA3V,KAAA2W,0BAEAC,aAAA,WACA,IAAAC,EACA5T,EAAAjD,KACAyT,EAAAxQ,EAAAuB,QAAAwK,MAEA,GAAA/L,EAAAY,eACAgT,EAAA7X,KAAAgN,IAAAyH,EAAAqD,cAAArD,EAAAqD,cAAA,GAAA9X,KAAA2P,KAAA1L,EAAAa,MAAA,SACI,CAEJ,IAAAgR,EAAArW,EAAAwG,eAAAwO,EAAA3U,SAAAR,EAAA0G,OAAAE,iBACA2R,EAAA7X,KAAAgN,IAAAyH,EAAAqD,cAAArD,EAAAqD,cAAA,GAAA9X,KAAA2P,KAAA1L,EAAAgB,QAAA,EAAA6Q,KAGA,OAAA+B,GAGAE,yBAAA,WACA/W,KAAA6D,gBAEA7D,KAAAgP,MAAAxP,WAGAsT,iBAAA,SAAAjT,EAAAC,GACA,OAAAE,KAAAkO,cAAAlO,KAAAC,MAAAI,KAAAC,SAAAR,GAAAO,KAAAR,KAGAkU,iBAAA,SAAAnH,GAGA,IAIAuH,EAJAlR,EAAAjD,KACA8T,EAAA7Q,EAAA6Q,MAEAkD,GAAA/T,EAAAiL,cAAAtB,GAEAU,EAAArK,EAAAgU,IAAAnD,EAOA,OAJAK,EADAlR,EAAAY,eACAZ,EAAAc,KAAAd,EAAAa,MAAAwJ,GAAA0J,EAAAlD,GAEA7Q,EAAAkB,OAAAlB,EAAAgB,OAAAqJ,GAAA0J,EAAAlD,GAEAK,GAEAD,iBAAA,SAAAC,GACA,IAAAlR,EAAAjD,KACA6D,EAAAZ,EAAAY,eACAqT,EAAArT,EAAAZ,EAAAa,MAAAb,EAAAgB,OACAwJ,GAAA5J,EAAAsQ,EAAAlR,EAAAc,KAAAd,EAAAkB,OAAAgQ,GAAA+C,EACA,OAAAjU,EAAA6Q,OAAA7Q,EAAAgU,IAAAhU,EAAA6Q,OAAArG,GAEAuG,gBAAA,SAAAnU,GACA,OAAAG,KAAA+T,iBAAA/T,KAAAmX,eAAAtX,OAGA8Q,EAAAwE,aAAAC,kBAAA,SAAAI,EAAA5E,uCC1LA,IAAAnS,EAAcF,EAAQ,QACtB8W,EAAY9W,EAAQ,QAQpB,SAAA6Y,EAAAC,EAAAC,GACA,IAWAC,EAAAC,EAXAxI,KACA/J,EAAAxG,EAAAwG,eAMAwS,EAAAxS,EAAAoS,EAAArL,IAAAhN,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAAL,EAAAtL,QAEA4L,EAAA5Y,KAAAkW,MAAAzW,EAAAkZ,MAAAL,EAAA9Q,MACAqR,EAAA7Y,KAAA2P,KAAA2I,EAAA9Q,IAAAxH,KAAA0Y,IAAA,GAAAE,IAGA,IAAAH,GACAF,EAAAvY,KAAAkW,MAAAzW,EAAAkZ,MAAAL,EAAAQ,aACAN,EAAAxY,KAAAkW,MAAAoC,EAAAQ,WAAA9Y,KAAA0Y,IAAA,GAAAH,IAEAvI,EAAA7M,KAAAsV,GACAA,EAAAD,EAAAxY,KAAA0Y,IAAA,GAAAH,KAEAA,EAAAvY,KAAAkW,MAAAzW,EAAAkZ,MAAAF,IACAD,EAAAxY,KAAAkW,MAAAuC,EAAAzY,KAAA0Y,IAAA,GAAAH,KAEA,IAAAQ,EAAAR,EAAA,EAAAvY,KAAA0Y,IAAA,GAAA1Y,KAAAgZ,IAAAT,IAAA,EAEA,GACAvI,EAAA7M,KAAAsV,KAEAD,EACA,KAAAA,IACAA,EAAA,IACAD,EACAQ,EAAAR,GAAA,IAAAQ,GAGAN,EAAAzY,KAAAyN,MAAA+K,EAAAxY,KAAA0Y,IAAA,GAAAH,GAAAQ,WACER,EAAAK,GAAAL,IAAAK,GAAAJ,EAAAK,GAEF,IAAAI,EAAAhT,EAAAoS,EAAA7Q,IAAAiR,GAGA,OAFAzI,EAAA7M,KAAA8V,GAEAjJ,EAIA1F,EAAAC,QAAA,SAAAoH,GAEA,IAAAC,GACAtR,SAAA,OAGA0P,OACAtK,SAAA2Q,EAAAC,WAAA4C,cAIAC,EAAAxH,EAAAQ,MAAA3O,QACAqP,oBAAA,WACA,IAAA5O,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAvE,EAAAgD,EAAAhD,MACAI,EAAAJ,EAAAI,KACAC,EAAAD,EAAAC,SACAuD,EAAAZ,EAAAY,eACA,SAAA+R,EAAA1V,GACA,OAAA2D,EAAA3D,EAAA2V,UAAA5S,EAAAb,GAAAlC,EAAA4V,UAAA7S,EAAAb,GAIAa,EAAA+I,IAAA,KACA/I,EAAAuD,IAAA,KACAvD,EAAA6U,WAAA,KAEA,IAAA/B,EAAAlR,EAAAmR,QAeA,QAdAxJ,IAAAuJ,GACAtX,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAiW,EAAA,CAIA,IAAA7V,EAAAD,EAAAE,eAAAL,GACAG,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,SACAsM,IAAAtM,EAAA+V,QACAF,GAAA,MAKAlR,EAAAmR,SAAAD,EAAA,CACA,IAAAG,KAEAzX,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAI,EAAAD,EAAAE,eAAAL,GACA6M,GACAzM,EAAA0I,UAEA4D,IAAA3H,EAAAmR,cAAAxJ,IAAAtM,EAAA+V,MAAAnW,EAAA,GACAI,EAAA+V,OACA3T,KAAA,KAEArC,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,UACAsM,IAAA0J,EAAAvJ,KACAuJ,EAAAvJ,OAGAlO,EAAAsH,KAAAjF,EAAAT,KAAA,SAAAsR,EAAA9R,GACA,IAAAyQ,EAAA4F,EAAAvJ,GACAC,GAAA3J,EAAAiL,cAAAyD,GAEAvK,MAAAwF,IAAA1M,EAAAG,KAAAR,GAAAO,QAAAwM,EAAA,IAGA0D,EAAAzQ,GAAAyQ,EAAAzQ,IAAA,EACAyQ,EAAAzQ,IAAA+M,QAKAnO,EAAAsH,KAAAmQ,EAAA,SAAAI,GACA,GAAAA,EAAAjU,OAAA,GACA,IAAAmU,EAAA/X,EAAAuN,IAAAsK,GACAG,EAAAhY,EAAA+H,IAAA8P,GACArT,EAAA+I,IAAA,OAAA/I,EAAA+I,IAAAwK,EAAAxX,KAAAgN,IAAA/I,EAAA+I,IAAAwK,GACAvT,EAAAuD,IAAA,OAAAvD,EAAAuD,IAAAiQ,EAAAzX,KAAAwH,IAAAvD,EAAAuD,IAAAiQ,WAKAhY,EAAAsH,KAAAzF,EAAA,SAAAQ,EAAAhB,GACA,IAAAI,EAAAD,EAAAE,eAAAL,GACAG,EAAAmB,iBAAAtB,IAAA8V,EAAA1V,IACAzB,EAAAsH,KAAAjF,EAAAT,KAAA,SAAAsR,EAAA9R,GACA,IAAA+M,GAAA3J,EAAAiL,cAAAyD,GAEAvK,MAAAwF,IAAA1M,EAAAG,KAAAR,GAAAO,QAAAwM,EAAA,IAIA,OAAA3J,EAAA+I,IACA/I,EAAA+I,IAAAY,EACQA,EAAA3J,EAAA+I,MACR/I,EAAA+I,IAAAY,GAGA,OAAA3J,EAAAuD,IACAvD,EAAAuD,IAAAoG,EACQA,EAAA3J,EAAAuD,MACRvD,EAAAuD,IAAAoG,GAGA,IAAAA,IAAA,OAAA3J,EAAA6U,YAAAlL,EAAA3J,EAAA6U,cACA7U,EAAA6U,WAAAlL,QAQA5M,KAAA2W,0BAEAA,uBAAA,WACA,IAAA1T,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAiP,EAAA5O,EAAAmK,MACA/J,EAAAxG,EAAAwG,eACAyQ,EAAA,EACAC,EAAA,GAEA1S,EAAA+I,IAAA/G,EAAAwO,EAAAzH,IAAA/I,EAAA+I,KACA/I,EAAAuD,IAAAvB,EAAAwO,EAAAjN,IAAAvD,EAAAuD,KAEAvD,EAAA+I,MAAA/I,EAAAuD,MACA,IAAAvD,EAAA+I,KAAA,OAAA/I,EAAA+I,KACA/I,EAAA+I,IAAAhN,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAA1U,EAAA+I,MAAA,GACA/I,EAAAuD,IAAAxH,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAA1U,EAAAuD,MAAA,KAEAvD,EAAA+I,IAAA0J,EACAzS,EAAAuD,IAAAmP,IAGA,OAAA1S,EAAA+I,MACA/I,EAAA+I,IAAAhN,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAA1U,EAAAuD,MAAA,IAEA,OAAAvD,EAAAuD,MACAvD,EAAAuD,IAAA,IAAAvD,EAAA+I,IACAhN,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAA1U,EAAA+I,MAAA,GACA2J,GAEA,OAAA1S,EAAA6U,aACA7U,EAAA+I,IAAA,EACA/I,EAAA6U,WAAA7U,EAAA+I,IACK/I,EAAAuD,IAAA,EACLvD,EAAA6U,WAAA9Y,KAAA0Y,IAAA,GAAA1Y,KAAAkW,MAAAzW,EAAAkZ,MAAA1U,EAAAuD,OAEAvD,EAAA6U,WAAApC,IAIAlD,WAAA,WACA,IAAAvP,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAiP,EAAA5O,EAAAmK,MACAxP,GAAAyD,EAAAY,eAEAwT,GACArL,IAAAyH,EAAAzH,IACAxF,IAAAiN,EAAAjN,KAEAwI,EAAA/L,EAAA+L,MAAAoI,EAAAC,EAAApU,GAIAA,EAAAuD,IAAA/H,EAAA+H,IAAAwI,GACA/L,EAAA+I,IAAAvN,EAAAuN,IAAAgD,GAEAyE,EAAAjU,SACAA,KACAyD,EAAA6Q,MAAA7Q,EAAAuD,IACAvD,EAAAgU,IAAAhU,EAAA+I,MAEA/I,EAAA6Q,MAAA7Q,EAAA+I,IACA/I,EAAAgU,IAAAhU,EAAAuD,KAEAhH,GACAwP,EAAAxP,WAGAoU,qBAAA,WACA5T,KAAAoY,WAAApY,KAAAgP,MAAAkD,QAEAvB,EAAAQ,MAAAG,UAAAsC,qBAAA5K,KAAAhJ,OAGA8S,iBAAA,SAAAjT,EAAAC,GACA,OAAAE,KAAAkO,cAAAlO,KAAAC,MAAAI,KAAAC,SAAAR,GAAAO,KAAAR,KAEAmU,gBAAA,SAAAnU,GACA,OAAAG,KAAA+T,iBAAA/T,KAAAoY,WAAAvY,KAQAwY,mBAAA,SAAAzL,GACA,IAAA2K,EAAAvY,KAAAkW,MAAAzW,EAAAkZ,MAAA/K,IACA4K,EAAAxY,KAAAkW,MAAAtI,EAAA5N,KAAA0Y,IAAA,GAAAH,IAEA,OAAAC,EAAAxY,KAAA0Y,IAAA,GAAAH,IAEAxD,iBAAA,SAAAnH,GACA,IAKAsK,EAAA/C,EAAAL,EAAAmD,EAAAqB,EALArV,EAAAjD,KACAR,EAAAyD,EAAAuB,QAAAwK,MAAAxP,QACAmY,EAAAlZ,EAAAkZ,MACAY,EAAAtV,EAAAoV,mBAAApV,EAAA6U,YACArK,EAAA,EAmCA,OAhCAb,GAAA3J,EAAAiL,cAAAtB,GACApN,GACAsU,EAAA7Q,EAAAgU,IACAA,EAAAhU,EAAA6Q,MACAwE,GAAA,IAEAxE,EAAA7Q,EAAA6Q,MACAmD,EAAAhU,EAAAgU,IACAqB,EAAA,GAEArV,EAAAY,gBACAqT,EAAAjU,EAAAa,MACAqQ,EAAA3U,EAAAyD,EAAAe,MAAAf,EAAAc,OAEAmT,EAAAjU,EAAAgB,OACAqU,IAAA,EACAnE,EAAA3U,EAAAyD,EAAAiB,IAAAjB,EAAAkB,QAEAyI,IAAAkH,IACA,IAAAA,IACArG,EAAAhP,EAAA+Z,kBACAvV,EAAAuB,QAAAwK,MAAAlQ,SACA6R,EAAArS,SAAA0G,OAAAE,iBAEAgS,GAAAzJ,EACAqG,EAAAyE,GAEA,IAAA3L,IACAa,GAAAyJ,GAAAS,EAAAV,GAAAU,EAAA7D,KAAA6D,EAAA/K,GAAA+K,EAAA7D,KAEAK,GAAAmE,EAAA7K,GAEA0G,GAEAD,iBAAA,SAAAC,GACA,IAIA+C,EAAApD,EAAAmD,EAAArK,EAJA3J,EAAAjD,KACAR,EAAAyD,EAAAuB,QAAAwK,MAAAxP,QACAmY,EAAAlZ,EAAAkZ,MACAY,EAAAtV,EAAAoV,mBAAApV,EAAA6U,YAiBA,GAdAtY,GACAsU,EAAA7Q,EAAAgU,IACAA,EAAAhU,EAAA6Q,QAEAA,EAAA7Q,EAAA6Q,MACAmD,EAAAhU,EAAAgU,KAEAhU,EAAAY,gBACAqT,EAAAjU,EAAAa,MACA8I,EAAApN,EAAAyD,EAAAe,MAAAmQ,IAAAlR,EAAAc,OAEAmT,EAAAjU,EAAAgB,OACA2I,EAAApN,EAAA2U,EAAAlR,EAAAiB,IAAAjB,EAAAkB,OAAAgQ,GAEAvH,IAAAkH,EAAA,CACA,OAAAA,EAAA,CACA,IAAArG,EAAAhP,EAAA+Z,kBACAvV,EAAAuB,QAAAwK,MAAAlQ,SACA6R,EAAArS,SAAA0G,OAAAE,iBAEA0H,GAAAa,EACAyJ,GAAAzJ,EACAqG,EAAAyE,EAEA3L,GAAA+K,EAAAV,GAAAU,EAAA7D,GACAlH,GAAAsK,EACAtK,EAAA5N,KAAA0Y,IAAA,GAAAC,EAAA7D,GAAAlH,GAEA,OAAAA,KAGA+D,EAAAwE,aAAAC,kBAAA,cAAA+C,EAAAvH,yCCtVA,IAAAnS,EAAcF,EAAQ,QACtBka,EAAYla,EAAQ,QACpBma,EAAUna,EAAQ,QAGlBoa,EAAAD,EAAAE,SAAAF,EAAAD,EAOAnP,EAAAC,QAAA9K,EAAA+D,QAIAC,WAAA,aASAoH,eAAA,aAQAgP,eAAA,aASAC,iBAAA,aAQAC,oBAAA,cAECJ,wCCpDDrP,EAAAC,WACAD,EAAAC,QAAAyP,OAAwBza,EAAQ,QAChC+K,EAAAC,QAAAnK,OAAwBb,EAAQ,QAChC+K,EAAAC,QAAA0P,MAAuB1a,EAAQ,6CCH/B,IAAAD,EAAeC,EAAQ,QACvBC,EAAcD,EAAQ,QACtBE,EAAcF,EAAQ,QACtBG,EAAcH,EAAQ,QAEtBI,EAAAF,EAAAE,KAEAL,EAAAa,KAAA,UACA8Z,OACA5Z,SAAA,EACA8F,UAAA,OACA5F,WAAA,EACA2Z,WAAA,IACAxY,QAAA,GACApB,SAAA,MACA0B,KAAA,GACAvB,OAAA,OAOA,IAAA0Z,EAAA3a,EAAAgE,QACAC,WAAA,SAAAC,GACA,IAAAO,EAAAjD,KACAvB,EAAA+D,OAAAS,EAAAP,GAGAO,EAAAN,mBAKAE,aAAAlE,EACA4B,OAAA,SAAAuC,EAAAC,EAAAC,GACA,IAAAC,EAAAjD,KA0BA,OAvBAiD,EAAAJ,eAGAI,EAAAH,WACAG,EAAAF,YACAE,EAAAD,UAGAC,EAAAC,sBACAD,EAAAE,gBACAF,EAAAG,qBAEAH,EAAAI,oBACAJ,EAAAK,cACAL,EAAAM,mBAGAN,EAAAO,YACAP,EAAAQ,MACAR,EAAAS,WAEAT,EAAAU,cAEAV,EAAAW,SAGAD,YAAAhF,EAIAuE,oBAAAvE,EACAwE,cAAA,WACA,IAAAF,EAAAjD,KAEAiD,EAAAY,gBAEAZ,EAAAa,MAAAb,EAAAH,SACAG,EAAAc,KAAA,EACAd,EAAAe,MAAAf,EAAAa,QAEAb,EAAAgB,OAAAhB,EAAAF,UAGAE,EAAAiB,IAAA,EACAjB,EAAAkB,OAAAlB,EAAAgB,QAIAhB,EAAAmB,YAAA,EACAnB,EAAAoB,WAAA,EACApB,EAAAqB,aAAA,EACArB,EAAAsB,cAAA,EAGAtB,EAAAW,SACAE,MAAA,EACAG,OAAA,IAGAb,mBAAAzE,EAIA0E,kBAAA1E,EACA2E,YAAA3E,EACA4E,iBAAA5E,EAIA6E,UAAA7E,EACA8E,IAAA,WACA,IAAAR,EAAAjD,KACAiF,EAAAxG,EAAAwG,eACAJ,EAAA5B,EAAAuB,QACAnF,EAAAwF,EAAAxF,QACAP,EAAAmG,EAAAJ,EAAA/F,SAAAR,EAAA0G,OAAAE,iBACAtB,EAAAX,EAAAW,QACAwV,EAAA3a,EAAAmC,QAAAiE,EAAA7D,MAAA6D,EAAA7D,KAAAqB,OAAA,EACA6W,EAAAza,EAAA+F,QAAA6U,aAAAxU,EAAAqU,WAAApa,GACAwa,EAAAja,EAAA+Z,EAAAF,EAAA,EAAArU,EAAAnE,QAAA,EAEAuC,EAAAY,gBACAD,EAAAE,MAAAb,EAAAH,SACAc,EAAAK,OAAAqV,IAEA1V,EAAAE,MAAAwV,EACA1V,EAAAK,OAAAhB,EAAAF,WAGAE,EAAAa,MAAAF,EAAAE,MACAb,EAAAgB,OAAAL,EAAAK,QAGAP,SAAA/E,EAGAkF,aAAA,WACA,IAAAsI,EAAAnM,KAAAwE,QAAAlF,SACA,cAAA6M,GAAA,WAAAA,GAIA1F,KAAA,WACA,IAAAxD,EAAAjD,KACA8E,EAAA7B,EAAA6B,IACAG,EAAAxG,EAAAwG,eACAJ,EAAA5B,EAAAuB,QACA+U,EAAAjb,EAAA0G,OAEA,GAAAH,EAAAxF,QAAA,CACA,IAWAyD,EAAA0W,EAAAC,EAXA3a,EAAAmG,EAAAJ,EAAA/F,SAAAya,EAAArU,iBACAC,EAAAF,EAAAJ,EAAAM,UAAAoU,EAAAnU,kBACAC,EAAAJ,EAAAJ,EAAAQ,WAAAkU,EAAAjU,mBACAoU,EAAAjb,EAAA+G,WAAA1G,EAAAqG,EAAAE,GACA6T,EAAAza,EAAA+F,QAAA6U,aAAAxU,EAAAqU,WAAApa,GACA2O,EAAAyL,EAAA,EAAArU,EAAAnE,QACAiZ,EAAA,EACAzV,EAAAjB,EAAAiB,IACAH,EAAAd,EAAAc,KACAI,EAAAlB,EAAAkB,OACAH,EAAAf,EAAAe,MAGAc,EAAA5D,UAAA+D,EAAAJ,EAAAkC,UAAAwS,EAAAvS,kBACAlC,EAAAY,KAAAgU,EAGAzW,EAAAY,gBACA2V,EAAAzV,GAAAC,EAAAD,GAAA,EACA0V,EAAAvV,EAAAuJ,EACA3K,EAAAkB,EAAAD,IAEAyV,EAAA,SAAA3U,EAAAvF,SAAAyE,EAAA0J,EAAAzJ,EAAAyJ,EACAgM,EAAAvV,GAAAC,EAAAD,GAAA,EACApB,EAAAqB,EAAAD,EACAyV,EAAA3a,KAAA4a,IAAA,SAAA/U,EAAAvF,UAAA,QAGAwF,EAAAuC,OACAvC,EAAA+U,UAAAL,EAAAC,GACA3U,EAAAgV,OAAAH,GACA7U,EAAAe,UAAA,SACAf,EAAAgB,aAAA,SAEA,IAAA9E,EAAA6D,EAAA7D,KACA,GAAAvC,EAAAmC,QAAAI,GAEA,IADA,IAAAmG,EAAA,EACApG,EAAA,EAAmBA,EAAAC,EAAAqB,SAAiBtB,EACpC+D,EAAAoD,SAAAlH,EAAAD,GAAA,EAAAoG,EAAArE,GACAqE,GAAA+R,OAGApU,EAAAoD,SAAAlH,EAAA,IAAA8B,GAGAgC,EAAAmD,cAKA,SAAA8R,EAAA9Z,EAAA+Z,GACA,IAAAf,EAAA,IAAAE,GACArU,IAAA7E,EAAA6E,IACAN,QAAAwV,EACA/Z,UAGAvB,EAAA0K,UAAAnJ,EAAAgZ,EAAAe,GACAtb,EAAA2K,OAAApJ,EAAAgZ,GACAhZ,EAAAga,WAAAhB,EAGA3P,EAAAC,SACAnH,GAAA,QASAoH,SAAA2P,EAEA1P,WAAA,SAAAxJ,GACA,IAAA+Z,EAAA/Z,EAAAuE,QAAAyU,MAEAe,GACAD,EAAA9Z,EAAA+Z,IAIAnX,aAAA,SAAA5C,GACA,IAAA+Z,EAAA/Z,EAAAuE,QAAAyU,MACAgB,EAAAha,EAAAga,WAEAD,GACAvb,EAAAiL,QAAAsQ,EAAA1b,EAAA0G,OAAAiU,OAEAgB,GACAvb,EAAA0K,UAAAnJ,EAAAga,EAAAD,GACAC,EAAAzV,QAAAwV,GAEAD,EAAA9Z,EAAA+Z,IAEGC,IACHvb,EAAAiL,UAAA1J,EAAAga,UACAha,EAAAga,iDCtPA,IAAAxb,EAAcF,EAAQ,QAQtB,SAAA6Y,EAAAC,EAAAC,GACA,IAKA4C,EALAlL,KAMA,GAAAqI,EAAA5H,UAAA4H,EAAA5H,SAAA,EACAyK,EAAA7C,EAAA5H,aACE,CACF,IAAA0K,EAAA1b,EAAA2b,QAAA9C,EAAA9Q,IAAA8Q,EAAAtL,KAAA,GACAkO,EAAAzb,EAAA2b,QAAAD,GAAA9C,EAAAR,SAAA,OAEA,IAAAwD,EAAArb,KAAAkW,MAAAoC,EAAAtL,IAAAkO,KACAI,EAAAtb,KAAA2P,KAAA2I,EAAA9Q,IAAA0T,KAGA7C,EAAArL,KAAAqL,EAAA7Q,KAAA6Q,EAAA5H,UAEAhR,EAAA8b,aAAAlD,EAAA7Q,IAAA6Q,EAAArL,KAAAqL,EAAA5H,SAAAyK,EAAA,OACAG,EAAAhD,EAAArL,IACAsO,EAAAjD,EAAA7Q,KAIA,IAAAgU,GAAAF,EAAAD,GAAAH,EAGAM,EADA/b,EAAAgc,aAAAD,EAAAxb,KAAAyN,MAAA+N,GAAAN,EAAA,KACAlb,KAAAyN,MAAA+N,GAEAxb,KAAA2P,KAAA6L,GAGA,IAAAzC,EAAA,EACAmC,EAAA,IACAnC,EAAA/Y,KAAA0Y,IAAA,GAAAwC,EAAAQ,WAAArY,OAAA,GACAgY,EAAArb,KAAAyN,MAAA4N,EAAAtC,KACAuC,EAAAtb,KAAAyN,MAAA6N,EAAAvC,MAEA/I,EAAA7M,UAAAqK,IAAA6K,EAAArL,IAAAqL,EAAArL,IAAAqO,GACA,QAAAvI,EAAA,EAAgBA,EAAA0I,IAAe1I,EAC/B9C,EAAA7M,KAAAnD,KAAAyN,OAAA4N,EAAAvI,EAAAoI,GAAAnC,MAIA,OAFA/I,EAAA7M,UAAAqK,IAAA6K,EAAA7Q,IAAA6Q,EAAA7Q,IAAA8T,GAEAtL,EAIA1F,EAAAC,QAAA,SAAAoH,GAEA,IAAAhS,EAAAF,EAAAE,KAEAgS,EAAA8E,gBAAA9E,EAAAQ,MAAA3O,QACA0L,cAAA,SAAAtB,GACA,wBAAAA,GACAA,EAEA+D,EAAAQ,MAAAG,UAAApD,cAAAlF,KAAAhJ,KAAA4M,IAGA+J,uBAAA,WACA,IAAA1T,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAiP,EAAA5O,EAAAmK,MAKA,GAAAyE,EAAAkH,YAAA,CACA,IAAAC,EAAAnc,EAAA6Z,KAAArV,EAAA+I,KACA6O,EAAApc,EAAA6Z,KAAArV,EAAAuD,KAEAoU,EAAA,GAAAC,EAAA,EAEA5X,EAAAuD,IAAA,EACKoU,EAAA,GAAAC,EAAA,IAEL5X,EAAA+I,IAAA,GAIA,IAAA8O,OAAAtO,IAAAiH,EAAAzH,UAAAQ,IAAAiH,EAAAsH,aACAC,OAAAxO,IAAAiH,EAAAjN,UAAAgG,IAAAiH,EAAAwH,kBAEAzO,IAAAiH,EAAAzH,IACA/I,EAAA+I,IAAAyH,EAAAzH,SACIQ,IAAAiH,EAAAsH,eACJ,OAAA9X,EAAA+I,IACA/I,EAAA+I,IAAAyH,EAAAsH,aAEA9X,EAAA+I,IAAAhN,KAAAgN,IAAA/I,EAAA+I,IAAAyH,EAAAsH,oBAIAvO,IAAAiH,EAAAjN,IACAvD,EAAAuD,IAAAiN,EAAAjN,SACIgG,IAAAiH,EAAAwH,eACJ,OAAAhY,EAAAuD,IACAvD,EAAAuD,IAAAiN,EAAAwH,aAEAhY,EAAAuD,IAAAxH,KAAAwH,IAAAvD,EAAAuD,IAAAiN,EAAAwH,eAIAH,IAAAE,GAKA/X,EAAA+I,KAAA/I,EAAAuD,MACAsU,EACA7X,EAAAuD,IAAAvD,EAAA+I,IAAA,EAEA/I,EAAA+I,IAAA/I,EAAAuD,IAAA,GAKAvD,EAAA+I,MAAA/I,EAAAuD,MACAvD,EAAAuD,MAEAiN,EAAAkH,aACA1X,EAAA+I,QAIA4K,aAAAjY,EACAoY,yBAAApY,EAEA6T,WAAA,WACA,IAAAvP,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAiP,EAAA5O,EAAAmK,MAMA6H,EAAA5T,EAAA2T,eACAC,EAAA7X,KAAAwH,IAAA,EAAAqQ,GAEA,IAAAqE,GACArE,WACA7K,IAAAyH,EAAAzH,IACAxF,IAAAiN,EAAAjN,IACAiJ,SAAAhR,EAAAwG,eAAAwO,EAAA0H,cAAA1H,EAAAhE,WAEAT,EAAA/L,EAAA+L,MAAAoI,EAAA8D,EAAAjY,GAEAA,EAAA8T,2BAIA9T,EAAAuD,IAAA/H,EAAA+H,IAAAwI,GACA/L,EAAA+I,IAAAvN,EAAAuN,IAAAgD,GAEAyE,EAAAjU,SACAwP,EAAAxP,UAEAyD,EAAA6Q,MAAA7Q,EAAAuD,IACAvD,EAAAgU,IAAAhU,EAAA+I,MAEA/I,EAAA6Q,MAAA7Q,EAAA+I,IACA/I,EAAAgU,IAAAhU,EAAAuD,MAGAoN,qBAAA,WACA,IAAA3Q,EAAAjD,KACAiD,EAAAkU,eAAAlU,EAAA+L,MAAAkD,QACAjP,EAAAmY,cAAAnY,EAAA+L,MAAAF,QAAA,GAEA6B,EAAAQ,MAAAG,UAAAsC,qBAAA5K,KAAA/F,0CChLA,IAAAxE,EAAcF,EAAQ,QAEtB8c,EAAA,WACAC,EAAA,WACAC,EAAAD,EAAA,iBACAE,EAAAF,EAAA,mBACAG,GAAA,yCAOAC,GACAC,WAAA,YACAC,UAAA,YACAC,SAAA,UACAC,aAAA,aACAC,YAAA,YACAC,YAAA,YACAC,UAAA,UACAC,aAAA,WACAC,WAAA,YAYA,SAAAC,EAAAC,EAAAC,GACA,IAAA1P,EAAAnO,EAAA8d,SAAAF,EAAAC,GACAE,EAAA5P,KAAA6P,MAAA,qBACA,OAAAD,EAAAtS,OAAAsS,EAAA,SAAAhQ,EAQA,SAAAkQ,EAAA7U,EAAAnF,GACA,IAAAia,EAAA9U,EAAA8U,MAIAC,EAAA/U,EAAAgV,aAAA,UACAC,EAAAjV,EAAAgV,aAAA,SAoBA,GAjBAhV,EAAAwT,IACA0B,SACA9Y,OAAA2Y,EACA9Y,MAAAgZ,EACAH,OACAtd,QAAAsd,EAAAtd,QACA4E,OAAA0Y,EAAA1Y,OACAH,MAAA6Y,EAAA7Y,SAQA6Y,EAAAtd,QAAAsd,EAAAtd,SAAA,QAEA,OAAAyd,GAAA,KAAAA,EAAA,CACA,IAAAE,EAAAZ,EAAAvU,EAAA,cACA2E,IAAAwQ,IACAnV,EAAA/D,MAAAkZ,GAIA,UAAAJ,GAAA,KAAAA,EACA,QAAA/U,EAAA8U,MAAA1Y,OAIA4D,EAAA5D,OAAA4D,EAAA/D,OAAApB,EAAA8B,QAAAyY,aAAA,OACG,CACH,IAAAC,EAAAd,EAAAvU,EAAA,eACA2E,IAAAwQ,IACAnV,EAAA5D,OAAAiZ,GAKA,OAAArV,EAQA,IAAAsV,EAAA,WACA,IAAAC,GAAA,EACA,IACA,IAAA5Y,EAAA4G,OAAAiS,kBAAwC,WACxCC,IAAA,WACAF,GAAA,KAGApT,OAAA8O,iBAAA,SAAAtU,GACE,MAAA7E,IAGF,OAAAyd,EAZA,GAiBAG,IAAAJ,IAA2DK,SAAA,GAE3D,SAAA1E,EAAA2E,EAAA7U,EAAA8U,GACAD,EAAA3E,iBAAAlQ,EAAA8U,EAAAH,GAGA,SAAAxE,EAAA0E,EAAA7U,EAAA8U,GACAD,EAAA1E,oBAAAnQ,EAAA8U,EAAAH,GAGA,SAAAI,EAAA/U,EAAA3I,EAAAiH,EAAAC,EAAAyW,GACA,OACAhV,OACA3I,QACAgJ,OAAA2U,GAAA,KACA1W,OAAAsF,IAAAtF,IAAA,KACAC,OAAAqF,IAAArF,IAAA,MAIA,SAAA0W,EAAAC,EAAA7d,GACA,IAAA2I,EAAA8S,EAAAoC,EAAAlV,OAAAkV,EAAAlV,KACAuD,EAAA1N,EAAAsf,oBAAAD,EAAA7d,GACA,OAAA0d,EAAA/U,EAAA3I,EAAAkM,EAAAjF,EAAAiF,EAAAhF,EAAA2W,GAGA,SAAAE,EAAAC,EAAAC,GACA,IAAAC,GAAA,EACAC,KAEA,kBACAA,EAAAC,MAAA/M,UAAAY,MAAAlJ,KAAA0I,WACAwM,KAAAle,KAEAme,IACAA,GAAA,EACA1f,EAAA6f,iBAAAtV,KAAAgB,OAAA,WACAmU,GAAA,EACAF,EAAAxM,MAAAyM,EAAAE,OAOA,SAAAG,EAAAC,GACA,IAAAC,EAAAC,SAAAC,cAAA,OACAC,EAAAtD,EAAA,eACAuD,EAAA,IACAlC,EACA,oHAUA8B,EAAA9B,MAAAmC,QAAAnC,EACA8B,EAAAM,UAAAH,EACAH,EAAAO,UACA,eAAAJ,EAAA,mBAAAjC,EAAA,yCAGAkC,EAAA,aACAA,EAAA,4CAKAD,EAAA,mBAAAjC,EAAA,qFAUA,IAAAsC,EAAAR,EAAAS,WAAA,GACAC,EAAAV,EAAAS,WAAA,GAEAT,EAAAW,OAAA,WACAH,EAAAI,WAAAR,EACAI,EAAAK,UAAAT,EACAM,EAAAE,WAAAR,EACAM,EAAAG,UAAAT,GAEA,IAAAU,EAAA,WACAd,EAAAW,SACAZ,KAMA,OAHA1F,EAAAmG,EAAA,SAAAM,EAAAC,KAAAP,EAAA,WACAnG,EAAAqG,EAAA,SAAAI,EAAAC,KAAAL,EAAA,WAEAV,EAIA,SAAAgB,EAAAhC,EAAAe,GACA,IAAAkB,EAAAjC,EAAApC,KAAAoC,EAAApC,OACAsE,EAAAD,EAAAE,YAAA,SAAAjgB,GACAA,EAAAkgB,gBAAArE,GACAgD,KAIA/f,EAAAsH,KAAA0V,EAAA,SAAA7S,GACAkQ,EAAA2E,EAAA7U,EAAA+W,KAQAD,EAAAI,SAAArC,EAAAsC,aAEAtC,EAAAuC,UAAA/P,IAAAsL,GAGA,SAAA0E,EAAAxC,GACA,IAAAiC,EAAAjC,EAAApC,OACAsE,EAAAD,EAAAE,YAEAD,IACAlhB,EAAAsH,KAAA0V,EAAA,SAAA7S,GACAmQ,EAAA0E,EAAA7U,EAAA+W,YAGAD,EAAAE,aAGAnC,EAAAuC,UAAAE,OAAA3E,GAGA,SAAA4E,EAAA1C,EAAAC,EAAAzd,GACA,IAAAyf,EAAAjC,EAAApC,KAAAoC,EAAApC,OAGAoD,EAAAiB,EAAAjB,QAAAF,EAAAP,EAAA,WACA,GAAA0B,EAAAjB,QACA,OAAAf,EAAAC,EAAA,SAAA1d,OAMAwf,EAAAhC,EAAA,WACA,GAAAiC,EAAAjB,QAAA,CACA,IAAA2B,EAAA3C,EAAA4C,WACAD,OAAA3B,EAAA4B,YACAD,EAAAE,aAAA7B,EAAA2B,EAAAG,YAIA9B,EAAAW,YAKA,SAAAoB,EAAA/C,GACA,IAAAiC,EAAAjC,EAAApC,OACAoD,EAAAiB,EAAAjB,eAEAiB,EAAAjB,QACAwB,EAAAxC,GAEAgB,KAAA4B,YACA5B,EAAA4B,WAAAI,YAAAhC,GAIA,SAAAiC,EAAAC,EAAAC,GAEA,IAAAjE,EAAAgE,EAAAE,QAAAnC,SAAAC,cAAA,SACAgC,EAAAE,SACAF,EAAAE,OAAAlE,EACAiE,EAAA,mBAAAA,EACAjE,EAAAmE,aAAA,mBACApC,SAAAqC,qBAAA,WAAAC,YAAArE,IAGAA,EAAAqE,YAAAtC,SAAAuC,eAAAL,IAGAtX,EAAAC,SAMAqP,SAAA,qBAAA5O,QAAA,qBAAA0U,SAEAjc,WAAA,WACA,IAAAye,EAAA,kCAEAR,EAAA1gB,KAGA,sBAAAwb,EAAA,IAAoD0F,EAAA,eACpD1F,EAAA,IAA4C0F,EAAA,KAC5C3F,EAAA,sBACAC,EAAA,qBACAA,EAAA,cAKA3R,eAAA,SAAAjF,EAAAlC,GACA,kBAAAkC,EACAA,EAAA8Z,SAAAyC,eAAAvc,GACGA,EAAAvC,SAEHuC,IAAA,IAGAA,KAAAiD,SAEAjD,IAAAiD,QAMA,IAAAuZ,EAAAxc,KAAAkF,YAAAlF,EAAAkF,WAAA,MASA,OAAAsX,KAAAvZ,SAAAjD,GACA8X,EAAA9X,EAAAlC,GACA0e,GAGA,MAGAvI,eAAA,SAAAuI,GACA,IAAAvZ,EAAAuZ,EAAAvZ,OACA,GAAAA,EAAAwT,GAAA,CAIA,IAAA0B,EAAAlV,EAAAwT,GAAA0B,SACA,kBAAAsE,QAAA,SAAAC,GACA,IAAA1U,EAAAmQ,EAAAuE,GACA7iB,EAAAwP,cAAArB,GACA/E,EAAA0Z,gBAAAD,GAEAzZ,EAAAiZ,aAAAQ,EAAA1U,KAIAnO,EAAAsH,KAAAgX,EAAAJ,UAAkC,SAAA/P,EAAAD,GAClC9E,EAAA8U,MAAAhQ,GAAAC,IAOA/E,EAAA/D,MAAA+D,EAAA/D,aAEA+D,EAAAwT,KAGAvC,iBAAA,SAAA7Y,EAAA2I,EAAA8U,GACA,IAAA7V,EAAA5H,EAAA4H,OACA,cAAAe,EAAA,CAMA,IAAA8W,EAAAhC,EAAArC,KAAAqC,EAAArC,OACAmG,EAAA9B,EAAA8B,UAAA9B,EAAA8B,YACA7B,EAAA6B,EAAAvhB,EAAAmC,GAAA,IAAAwG,GAAA,SAAAkV,GACAJ,EAAAG,EAAAC,EAAA7d,KAGA6Y,EAAAjR,EAAAe,EAAA+W,QAVAQ,EAAAtY,EAAA6V,EAAAzd,IAaA8Y,oBAAA,SAAA9Y,EAAA2I,EAAA8U,GACA,IAAA7V,EAAA5H,EAAA4H,OACA,cAAAe,EAAA,CAMA,IAAA8W,EAAAhC,EAAArC,OACAmG,EAAA9B,EAAA8B,YACA7B,EAAA6B,EAAAvhB,EAAAmC,GAAA,IAAAwG,GACA+W,GAIA5G,EAAAlR,EAAAe,EAAA+W,QAXAa,EAAA3Y,EAAA6V,KA0BAjf,EAAAgjB,SAAA3I,EAWAra,EAAAijB,YAAA3I,qCChcA,IAAAza,EAAeC,EAAQ,QACvBoI,EAAepI,EAAQ,QACvBE,EAAcF,EAAQ,QAEtBD,EAAAa,KAAA,UACAwiB,SACA3I,QACA4I,WAAA,MAKA,IAAAC,GACA/gB,QAAA,SAAAmQ,GACA,IAAApR,EAAAoR,EAAA6Q,KACA7hB,EAAAgR,EAAAhR,MACAC,EAAAD,EAAAE,eAAAN,GACAkiB,EAAA7hB,GAAAD,EAAAmB,iBAAAvB,GACAmiB,EAAAD,GAAA7hB,EAAAY,QAAAmhB,cACA5f,EAAA2f,EAAA3f,QAAA,EAEA,OAAAA,EAAA,SAAA6f,EAAAnhB,GACA,OAAAA,EAAAsB,GAAA2f,EAAAjhB,GAAAohB,OAAA,MADA,MAKAC,SAAA,SAAAnR,GACA,IAAAmR,EAAAnR,EAAAmR,SACAlb,EAAAkb,IAAAlb,EAAA,KACAC,EAAAib,IAAAjb,EAAA,KAEA,gBAAA+a,GACA,OACAhb,EAAA,OAAAA,EAAAgb,EAAAhb,IACAC,EAAA,OAAAA,EAAA+a,EAAA/a,QAOA,SAAAkb,EAAAC,EAAAziB,EAAA0iB,GACA,IAEAC,EAFAC,EAAAH,EAAAI,WACAZ,EAAAW,EAAAX,KAOA,QAJAtV,IAAAsV,IACAA,IAAAW,EAAAthB,kBAGA,IAAA2gB,GAAA,OAAAA,EACA,SAGA,QAAAA,EACA,eAIA,GADAU,EAAAG,WAAAb,EAAA,IACApL,SAAA8L,IAAAxjB,KAAAkW,MAAAsN,OAKA,MAJA,MAAAV,EAAA,UAAAA,EAAA,KACAU,EAAA3iB,EAAA2iB,KAGAA,IAAA3iB,GAAA2iB,EAAA,GAAAA,GAAAD,IAIAC,EAGA,OAAAV,GAEA,aACA,cACA,UACA,YACA,WACA,eAEA,aACA,YACA,UACA,OAAAA,EAEA,QACA,UAIA,SAAAc,EAAA3R,GACA,IAIA4R,EAJAJ,EAAAxR,EAAAqR,GAAAI,WACA1U,EAAAiD,EAAAqR,GAAAQ,WACAhB,EAAA7Q,EAAA6Q,KACAU,EAAA,KAGA,GAAA9L,SAAAoL,GACA,YAmBA,GAZA,UAAAA,EACAU,OAAAhW,IAAAiW,EAAAM,YAAA/U,EAAA7J,OAAAse,EAAAM,YACE,QAAAjB,EACFU,OAAAhW,IAAAiW,EAAAO,SAAAhV,EAAA9J,IAAAue,EAAAO,cACExW,IAAAiW,EAAAQ,UACFT,EAAAC,EAAAQ,UACEjV,EAAAkV,gBACFV,EAAAxU,EAAAkV,kBACElV,EAAAmV,eACFX,EAAAxU,EAAAmV,qBAGA3W,IAAAgW,GAAA,OAAAA,EAAA,CACA,QAAAhW,IAAAgW,EAAAtb,QAAAsF,IAAAgW,EAAArb,EACA,OAAAqb,EAGA,qBAAAA,GAAA9L,SAAA8L,GAEA,OADAK,EAAA7U,EAAAnK,gBAEAqD,EAAA2b,EAAAL,EAAA,KACArb,EAAA0b,EAAA,KAAAL,GAKA,YAGA,SAAAY,EAAAC,EAAAxjB,EAAA+hB,GACA,IAGAY,EAHAvR,EAAAoS,EAAAxjB,GACAiiB,EAAA7Q,EAAA6Q,KACAwB,GAAAzjB,GAGA,IAAA+hB,EACA,OAAAE,EAGA,WAAAA,IAAA,IAAAwB,EAAAxU,QAAAgT,GAAA,CACA,IAAApL,SAAAoL,GACA,OAAAA,EAIA,GADAU,EAAAa,EAAAvB,IACAU,EACA,SAGA,GAAAA,EAAAT,QACA,OAAAD,EAGAwB,EAAAnhB,KAAA2f,GACAA,EAAAU,EAAAV,KAGA,SAGA,SAAAyB,EAAAtS,GACA,IAAA6Q,EAAA7Q,EAAA6Q,KACAlZ,EAAA,UAEA,WAAAkZ,EACA,MAGApL,SAAAoL,KACAlZ,EAAA,YAGAiZ,EAAAjZ,GAAAqI,IAGA,SAAAuS,EAAAtB,GACA,OAAAA,MAAAuB,KAGA,SAAAC,EAAA5e,EAAA6e,EAAAC,EAAAC,EAAAC,GACA,IAAA/iB,EAEA,GAAA8iB,GAAAC,EAAA,CAMA,IADAhf,EAAA0D,OAAAmb,EAAA,GAAAzc,EAAAyc,EAAA,GAAAxc,GACApG,EAAA,EAAYA,EAAA8iB,IAAU9iB,EACtBtC,EAAAoJ,OAAAY,OAAA3D,EAAA6e,EAAA5iB,EAAA,GAAA4iB,EAAA5iB,IAOA,IAHA+D,EAAA2D,OAAAmb,EAAAE,EAAA,GAAA5c,EAAA0c,EAAAE,EAAA,GAAA3c,GAGApG,EAAA+iB,EAAA,EAAmB/iB,EAAA,IAAOA,EAC1BtC,EAAAoJ,OAAAY,OAAA3D,EAAA8e,EAAA7iB,GAAA6iB,EAAA7iB,EAAA,QAIA,SAAAgjB,EAAAjf,EAAAkd,EAAAgC,EAAAC,EAAAC,EAAAC,GACA,IAMApjB,EAAA4K,EAAA9L,EAAAukB,EAAAC,EAAAC,EAAAC,EANAhC,EAAAP,EAAA3f,OACAkL,EAAA0W,EAAAO,SACAb,KACAC,KACAC,EAAA,EACAC,EAAA,EAKA,IAFAhf,EAAAyD,YAEAxH,EAAA,EAAA4K,EAAA4W,IAAA4B,EAAqCpjB,EAAA4K,IAAU5K,EAC/ClB,EAAAkB,EAAAwhB,EACA6B,EAAApC,EAAAniB,GAAAsiB,MACAkC,EAAAL,EAAAI,EAAAvkB,EAAAokB,GACAK,EAAAd,EAAAY,GACAG,EAAAf,EAAAa,GAEAC,GAAAC,GACAV,EAAAF,EAAAxhB,KAAAiiB,GACAN,EAAAF,EAAAzhB,KAAAkiB,IACGR,GAAAC,IACHvW,GAMA+W,GACAX,EAAAxhB,KAAAiiB,GAEAG,GACAX,EAAAzhB,KAAAkiB,KATAX,EAAA5e,EAAA6e,EAAAC,EAAAC,EAAAC,GACAD,EAAAC,EAAA,EACAH,KACAC,OAYAF,EAAA5e,EAAA6e,EAAAC,EAAAC,EAAAC,GAEAhf,EAAA2f,YACA3f,EAAA5D,UAAAgjB,EACApf,EAAAgd,OAGAxY,EAAAC,SACAnH,GAAA,SAEAsiB,oBAAA,SAAAzkB,EAAAuE,GACA,IAGAtE,EAAAa,EAAAuhB,EAAArR,EAHAsR,GAAAtiB,EAAAI,KAAAC,cAAA+B,OACAuf,EAAApd,EAAAod,UACAyB,KAGA,IAAAtiB,EAAA,EAAaA,EAAAwhB,IAAWxhB,EACxBb,EAAAD,EAAAE,eAAAY,GACAuhB,EAAApiB,EAAAY,QACAmQ,EAAA,KAEAqR,KAAAI,QAAAJ,aAAA3b,EAAAge,OACA1T,GACA8Q,QAAA9hB,EAAAmB,iBAAAL,GACA+gB,KAAAO,EAAAC,EAAAvhB,EAAAwhB,GACAtiB,QACAqiB,OAIApiB,EAAA0kB,QAAA3T,EACAoS,EAAAlhB,KAAA8O,GAGA,IAAAlQ,EAAA,EAAaA,EAAAwhB,IAAWxhB,EACxBkQ,EAAAoS,EAAAtiB,GACAkQ,IAIAA,EAAA6Q,KAAAsB,EAAAC,EAAAtiB,EAAA6gB,GACA3Q,EAAAmR,SAAAQ,EAAA3R,GACAA,EAAA+S,OAAAT,EAAAtS,KAIA4T,kBAAA,SAAA5kB,EAAAme,GACA,IAAAle,EAAAke,EAAAle,KAAA0kB,QACA,GAAA1kB,EAAA,CAIA,IAAA4E,EAAA7E,EAAA6E,IACAwd,EAAApiB,EAAAoiB,GACA2B,EAAA3B,EAAAH,MACAH,EAAAM,EAAAL,cACA+B,EAAA9jB,EAAA8jB,OACAE,EAAAD,EAAA9iB,iBAAA7C,EAAA0G,OAAAsC,aAEA0c,GAAAE,GAAAlC,EAAA3f,SACA5D,EAAAoJ,OAAAid,SAAAhgB,EAAA7E,EAAA8kB,WACAhB,EAAAjf,EAAAkd,EAAAgC,EAAAC,EAAAC,EAAA5B,EAAA0C,OACAvmB,EAAAoJ,OAAAod,WAAAngB,0CCxTAwE,EAAAC,QAAA,SAAAoH,GAGA,IAAAC,GACAtR,SAAA,UAGA4lB,EAAAvU,EAAAQ,MAAA3O,QAMA2iB,UAAA,WACA,IAAA9kB,EAAAL,KAAAC,MAAAI,KACA,OAAAL,KAAAwE,QAAA/D,SAAAT,KAAA6D,eAAAxD,EAAA+kB,QAAA/kB,EAAAglB,UAAAhlB,EAAAI,QAGAoR,oBAAA,WACA,IAIAyT,EAJAriB,EAAAjD,KACAS,EAAAwC,EAAAkiB,YACAliB,EAAAsiB,SAAA,EACAtiB,EAAAuiB,SAAA/kB,EAAA4B,OAAA,OAGAmK,IAAAvJ,EAAAuB,QAAAwK,MAAAhD,MAEAsZ,EAAA7kB,EAAAqO,QAAA7L,EAAAuB,QAAAwK,MAAAhD,KACA/I,EAAAsiB,UAAA,IAAAD,IAAAriB,EAAAsiB,eAGA/Y,IAAAvJ,EAAAuB,QAAAwK,MAAAxI,MAEA8e,EAAA7kB,EAAAqO,QAAA7L,EAAAuB,QAAAwK,MAAAxI,KACAvD,EAAAuiB,UAAA,IAAAF,IAAAriB,EAAAuiB,UAGAviB,EAAA+I,IAAAvL,EAAAwC,EAAAsiB,UACAtiB,EAAAuD,IAAA/F,EAAAwC,EAAAuiB,WAGAhT,WAAA,WACA,IAAAvP,EAAAjD,KACAS,EAAAwC,EAAAkiB,YAEAliB,EAAA+L,MAAA,IAAA/L,EAAAsiB,UAAAtiB,EAAAuiB,WAAA/kB,EAAA4B,OAAA,EAAA5B,IAAAyR,MAAAjP,EAAAsiB,SAAAtiB,EAAAuiB,SAAA,IAGA1S,iBAAA,SAAAjT,EAAAC,GACA,IAAAmD,EAAAjD,KACAK,EAAA4C,EAAAhD,MAAAI,KACAwD,EAAAZ,EAAAY,eAEA,OAAAxD,EAAAglB,UAAAxhB,EACAZ,EAAAiL,cAAA7N,EAAAC,SAAAR,GAAAO,KAAAR,IAEAoD,EAAA+L,MAAAnP,EAAAoD,EAAAsiB,WAIAxR,iBAAA,SAAAnH,EAAA/M,GACA,IAOA4lB,EAPAxiB,EAAAjD,KACAyN,EAAAxK,EAAAuB,QAAAiJ,OAEAiY,EAAA1mB,KAAAwH,IAAAvD,EAAAuiB,SAAA,EAAAviB,EAAAsiB,UAAA9X,EAAA,QAQA,QAHAjB,IAAAI,GAAA,OAAAA,IACA6Y,EAAAxiB,EAAAY,eAAA+I,EAAA1F,EAAA0F,EAAAzF,QAEAqF,IAAAiZ,QAAAjZ,IAAAI,GAAAxF,MAAAvH,GAAA,CACA,IAAAY,EAAAwC,EAAAkiB,YACAvY,EAAA6Y,GAAA7Y,EACA,IAAA+Y,EAAAllB,EAAAqO,QAAAlC,GACA/M,GAAA,IAAA8lB,IAAA9lB,EAGA,GAAAoD,EAAAY,eAAA,CACA,IAAA+hB,EAAA3iB,EAAAa,MAAA4hB,EACAG,EAAAD,GAAA/lB,EAAAoD,EAAAsiB,UAMA,OAJA9X,IACAoY,GAAAD,EAAA,GAGA3iB,EAAAc,KAAA/E,KAAAyN,MAAAoZ,GAEA,IAAAC,EAAA7iB,EAAAgB,OAAAyhB,EACAK,EAAAD,GAAAjmB,EAAAoD,EAAAsiB,UAMA,OAJA9X,IACAsY,GAAAD,EAAA,GAGA7iB,EAAAiB,IAAAlF,KAAAyN,MAAAsZ,IAEA/R,gBAAA,SAAAnU,GACA,OAAAG,KAAA+T,iBAAA/T,KAAAgP,MAAAnP,KAAAG,KAAAulB,SAAA,OAEArR,iBAAA,SAAAC,GACA,IAEAvH,EAFA3J,EAAAjD,KACAyN,EAAAxK,EAAAuB,QAAAiJ,OAEAiY,EAAA1mB,KAAAwH,IAAAvD,EAAA+iB,OAAA3jB,QAAAoL,EAAA,QACAwY,EAAAhjB,EAAAY,eACAqiB,GAAAD,EAAAhjB,EAAAa,MAAAb,EAAAgB,QAAAyhB,EAcA,OAZAvR,GAAA8R,EAAAhjB,EAAAc,KAAAd,EAAAiB,IAEAuJ,IACA0G,GAAA+R,EAAA,GAIAtZ,EADAuH,GAAA,EACA,EAEAnV,KAAAyN,MAAA0H,EAAA+R,GAGAtZ,EAAA3J,EAAAsiB,UAEApC,aAAA,WACA,OAAAnjB,KAAAmE,UAIAwM,EAAAwE,aAAAC,kBAAA,WAAA8P,EAAAtU,wCChIA,IAAAtS,EAAeC,EAAQ,QACvBE,EAAcF,EAAQ,QACtB8W,EAAY9W,EAAQ,QAEpB+K,EAAAC,QAAA,SAAAoH,GAEA,IAAA4I,EAAAjb,EAAA0G,OAEA4L,GACAvR,SAAA,EAGA8mB,SAAA,EACA7mB,SAAA,YAEA8mB,YACA/mB,SAAA,EACA6kB,MAAA,qBACAriB,UAAA,GAGAwkB,WACAC,UAAA,GAIAtX,OAEAuX,mBAAA,EAGAC,cAAA,yBAGAC,iBAAA,EAGAC,iBAAA,EAEAhiB,SAAA2Q,EAAAC,WAAAC,QAGAoR,aAEAtnB,SAAA,EAGAP,SAAA,GAGA4F,SAAA,SAAAzD,GACA,OAAAA,KAKA,SAAA2lB,EAAA5Y,GACA,IAAAnJ,EAAAmJ,EAAAxJ,QACA,OAAAK,EAAAuhB,WAAA/mB,SAAAwF,EAAA8hB,YAAAtnB,QAAA2O,EAAA/N,MAAAI,KAAAI,OAAA4B,OAAA,EAGA,SAAAwkB,EAAA7Y,GACA,IAAA8Y,EAAA9Y,EAAAxJ,QAAAmiB,YACA7nB,EAAAL,EAAAwG,eAAA6hB,EAAAhoB,SAAAya,EAAArU,iBACAC,EAAA1G,EAAAwG,eAAA6hB,EAAA3hB,UAAAoU,EAAAnU,kBACAC,EAAA5G,EAAAwG,eAAA6hB,EAAAzhB,WAAAkU,EAAAjU,mBACAI,EAAAjH,EAAA+G,WAAA1G,EAAAqG,EAAAE,GAEA,OACAoF,KAAA3L,EACA6d,MAAAxX,EACA4hB,OAAA1hB,EACAK,QAIA,SAAAshB,EAAAliB,EAAAhG,EAAAmC,GACA,OAAAxC,EAAAmC,QAAAK,IAEAgmB,EAAAxoB,EAAAyoB,YAAApiB,IAAAY,KAAAzE,GACAkmB,EAAAlmB,EAAAoB,OAAAvD,EAAA,KAAAmC,EAAAoB,OAAA,GAAAvD,IAKAmoB,EAAAniB,EAAAkB,YAAA/E,GAAA6C,MACAqjB,EAAAroB,GAIA,SAAAsoB,EAAA7S,EAAApI,EAAA1B,EAAAuB,EAAAxF,GACA,OAAA+N,IAAAvI,GAAAuI,IAAA/N,GAEAsN,MAAA3H,EAAA1B,EAAA,EACAwM,IAAA9K,EAAA1B,EAAA,GAEG8J,EAAAvI,GAAAuI,EAAA/N,GAEHsN,MAAA3H,EAAA1B,EAAA,EACAwM,IAAA9K,IAKA2H,MAAA3H,EACA8K,IAAA9K,EAAA1B,EAAA,GAOA,SAAA4c,EAAArZ,GA6BA,IAYAjN,EAAAuY,EAAAgO,EAZAC,EAAAV,EAAA7Y,GAIAwZ,EAAAxoB,KAAAgN,IAAAgC,EAAA/J,OAAA,EAAA+J,EAAAlK,MAAA,GACA2jB,GACAC,EAAA1Z,EAAAlK,MACA6jB,EAAA,EACA/V,EAAA5D,EAAA/J,OACAuH,EAAA,GAEAoc,KAGA5Z,EAAAlJ,IAAAY,KAAA6hB,EAAA7hB,KACAsI,EAAA6Z,oBAEA,IAAAC,EAAAlB,EAAA5Y,GACA,IAAAjN,EAAA,EAAaA,EAAA+mB,EAAgB/mB,IAAA,CAC7BumB,EAAAtZ,EAAA+Z,iBAAAhnB,EAAAymB,GACAlO,EAAA0N,EAAAhZ,EAAAlJ,IAAAyiB,EAAA9c,KAAAuD,EAAA2Y,YAAA5lB,IAAA,IACAiN,EAAA6Z,iBAAA9mB,GAAAuY,EAGA,IAAA0O,EAAAha,EAAAia,cAAAlnB,GACAwT,EAAA9V,EAAAypB,UAAAF,GAAA,IACAG,EAAAf,EAAA7S,EAAA+S,EAAApgB,EAAAoS,EAAA2N,EAAA,OACAmB,EAAAhB,EAAA7S,EAAA+S,EAAAngB,EAAAmS,EAAA6N,EAAA,QAEAgB,EAAArU,MAAA2T,EAAAE,IACAF,EAAAE,EAAAQ,EAAArU,MACA8T,EAAAD,EAAAK,GAGAG,EAAAlR,IAAAwQ,EAAAC,IACAD,EAAAC,EAAAS,EAAAlR,IACA2Q,EAAAF,EAAAM,GAGAI,EAAAtU,MAAA2T,EAAA7V,IACA6V,EAAA7V,EAAAwW,EAAAtU,MACA8T,EAAAhW,EAAAoW,GAGAI,EAAAnR,IAAAwQ,EAAAjc,IACAic,EAAAjc,EAAA4c,EAAAnR,IACA2Q,EAAApc,EAAAwc,GAIAha,EAAAqa,cAAAb,EAAAC,EAAAG,GAMA,SAAAnkB,EAAAuK,GACA,IAAAwZ,EAAAxoB,KAAAgN,IAAAgC,EAAA/J,OAAA,EAAA+J,EAAAlK,MAAA,GACAkK,EAAAsa,YAAAtpB,KAAAyN,MAAA+a,GACAxZ,EAAAua,eAAA,SAGA,SAAAC,EAAAjU,GACA,WAAAA,GAAA,MAAAA,EACA,SACGA,EAAA,IACH,OAGA,QAGA,SAAArM,EAAApD,EAAA9D,EAAA1B,EAAAR,GACA,GAAAL,EAAAmC,QAAAI,GAIA,IAHA,IAAAmG,EAAA7H,EAAA6H,EACA+S,EAAA,IAAApb,EAEAiC,EAAA,EAAkBA,EAAAC,EAAAqB,SAAiBtB,EACnC+D,EAAAoD,SAAAlH,EAAAD,GAAAzB,EAAA4H,EAAAC,GACAA,GAAA+S,OAGApV,EAAAoD,SAAAlH,EAAA1B,EAAA4H,EAAA5H,EAAA6H,GAIA,SAAAshB,EAAAlU,EAAA+E,EAAAha,GACA,KAAAiV,GAAA,MAAAA,EACAjV,EAAA6H,GAAAmS,EAAA6N,EAAA,GACG5S,EAAA,KAAAA,EAAA,MACHjV,EAAA6H,GAAAmS,EAAA6N,GAIA,SAAAuB,EAAA1a,GACA,IAAAlJ,EAAAkJ,EAAAlJ,IACAD,EAAAmJ,EAAAxJ,QACAmkB,EAAA9jB,EAAAuhB,WACAwC,EAAA/jB,EAAA8hB,YAEA7hB,EAAAjD,UAAA8mB,EAAA9mB,UACAiD,EAAA/C,YAAA4mB,EAAAzE,MAEA,IAAA2E,EAAA7a,EAAA8a,8BAAAjkB,EAAAmK,MAAAxP,QAAAwO,EAAAhC,IAAAgC,EAAAxH,KAGA+gB,EAAAV,EAAA7Y,GAEAlJ,EAAAgB,aAAA,MAEA,QAAA/E,EAAA6lB,EAAA5Y,GAAA,EAAwCjN,GAAA,EAAQA,IAAA,CAChD,GAAA4nB,EAAAtpB,QAAA,CACA,IAAA0pB,EAAA/a,EAAA+Z,iBAAAhnB,EAAA8nB,GACA/jB,EAAAyD,YACAzD,EAAA0D,OAAAwF,EAAAgb,QAAAhb,EAAAib,SACAnkB,EAAA2D,OAAAsgB,EAAA7hB,EAAA6hB,EAAA5hB,GACArC,EAAA4D,SACA5D,EAAA2f,YAGA,GAAAmE,EAAAvpB,QAAA,CAEA,IAAA6pB,EAAAlb,EAAA+Z,iBAAAhnB,EAAA8nB,EAAA,GAGAM,EAAA1qB,EAAA2qB,sBAAAR,EAAA7hB,UAAAhG,EAAAwY,EAAAvS,kBACAlC,EAAAY,KAAA6hB,EAAA7hB,KACAZ,EAAA5D,UAAAioB,EAEA,IAAAnB,EAAAha,EAAAia,cAAAlnB,GACAwT,EAAA9V,EAAAypB,UAAAF,GACAljB,EAAAe,UAAA2iB,EAAAjU,GACAkU,EAAAlU,EAAAvG,EAAA6Z,iBAAA9mB,GAAAmoB,GACAhhB,EAAApD,EAAAkJ,EAAA2Y,YAAA5lB,IAAA,GAAAmoB,EAAA3B,EAAA9c,QAKA,SAAA4e,EAAArb,EAAAsb,EAAA7hB,EAAA5H,GACA,IAAAiF,EAAAkJ,EAAAlJ,IAIA,GAHAA,EAAA/C,YAAAtD,EAAA2qB,sBAAAE,EAAApF,MAAArkB,EAAA,GACAiF,EAAAjD,UAAApD,EAAA2qB,sBAAAE,EAAAznB,UAAAhC,EAAA,GAEAmO,EAAAxJ,QAAA6hB,UAAAC,SAEAxhB,EAAAyD,YACAzD,EAAAykB,IAAAvb,EAAAgb,QAAAhb,EAAAib,QAAAxhB,EAAA,IAAAzI,KAAA4a,IACA9U,EAAA2f,YACA3f,EAAA4D,aACG,CAEH,IAAAof,EAAAlB,EAAA5Y,GAEA,OAAA8Z,EACA,OAGAhjB,EAAAyD,YACA,IAAA+e,EAAAtZ,EAAA+Z,iBAAA,EAAAtgB,GACA3C,EAAA0D,OAAA8e,EAAApgB,EAAAogB,EAAAngB,GAEA,QAAApG,EAAA,EAAkBA,EAAA+mB,EAAgB/mB,IAClCumB,EAAAtZ,EAAA+Z,iBAAAhnB,EAAA0G,GACA3C,EAAA2D,OAAA6e,EAAApgB,EAAAogB,EAAAngB,GAGArC,EAAA2f,YACA3f,EAAA4D,UAIA,SAAA8gB,EAAAC,GACA,OAAAhrB,EAAAirB,SAAAD,KAAA,EAGA,IAAAE,EAAAhZ,EAAA8E,gBAAAjT,QACAW,cAAA,WACA,IAAAF,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACAiP,EAAA5O,EAAAmK,MAEA/L,EAAAa,MAAAb,EAAAH,SACAG,EAAAgB,OAAAhB,EAAAF,UACAE,EAAA+lB,QAAAhqB,KAAAyN,MAAAxJ,EAAAa,MAAA,GACAb,EAAAgmB,QAAAjqB,KAAAyN,MAAAxJ,EAAAgB,OAAA,GAEA,IAAAL,EAAAnF,EAAAuN,KAAA/I,EAAAgB,OAAAhB,EAAAa,QACAgR,EAAArW,EAAAwG,eAAAwO,EAAA3U,SAAAya,EAAArU,iBACAjC,EAAAqlB,YAAAzjB,EAAAxF,QAAAuE,EAAA,GAAAkR,EAAA,EAAArB,EAAAgT,kBAAA7iB,EAAA,GAEAiO,oBAAA,WACA,IAAA5O,EAAAjD,KACAC,EAAAgD,EAAAhD,MACA+L,EAAA9B,OAAA0f,kBACApjB,EAAA0D,OAAA2f,kBAEAprB,EAAAsH,KAAA9F,EAAAI,KAAAC,SAAA,SAAAQ,EAAAhB,GACA,GAAAG,EAAAmB,iBAAAtB,GAAA,CACA,IAAAI,EAAAD,EAAAE,eAAAL,GAEArB,EAAAsH,KAAAjF,EAAAT,KAAA,SAAAsR,EAAA9R,GACA,IAAA+M,GAAA3J,EAAAiL,cAAAyD,GACAvK,MAAAwF,IAAA1M,EAAAG,KAAAR,GAAAO,SAIA4L,EAAAhN,KAAAgN,IAAAY,EAAAZ,GACAxF,EAAAxH,KAAAwH,IAAAoG,EAAApG,SAKAvD,EAAA+I,QAAA9B,OAAA0f,kBAAA,EAAA5d,EACA/I,EAAAuD,QAAA0D,OAAA2f,kBAAA,EAAArjB,EAGAvD,EAAA0T,0BAEAC,aAAA,WACA,IAAAnD,EAAAzT,KAAAwE,QAAAwK,MACA8F,EAAArW,EAAAwG,eAAAwO,EAAA3U,SAAAya,EAAArU,iBACA,OAAAlG,KAAAgN,IAAAyH,EAAAqD,cAAArD,EAAAqD,cAAA,GAAA9X,KAAA2P,KAAA3O,KAAAsoB,aAAA,IAAAxT,MAEAlB,qBAAA,WACA,IAAA3Q,EAAAjD,KAEA2Q,EAAA8E,gBAAAnE,UAAAsC,qBAAA5K,KAAA/F,GAGAA,EAAA0jB,YAAA1jB,EAAAhD,MAAAI,KAAAI,OAAAI,IAAAoC,EAAAuB,QAAAmiB,YAAAjiB,SAAAzB,IAEA6P,iBAAA,SAAAjT,EAAAC,GACA,OAAAE,KAAAkO,cAAAlO,KAAAC,MAAAI,KAAAC,SAAAR,GAAAO,KAAAR,KAEA4D,IAAA,WACAzD,KAAAwE,QAAAmiB,YAAAtnB,QACAgoB,EAAArnB,MAEAyD,EAAAzD,OAOAqoB,cAAA,SAAAb,EAAAC,EAAAG,GACA,IAAA3kB,EAAAjD,KACA8pB,EAAArC,EAAAE,EAAA3oB,KAAA6V,IAAA+S,EAAAD,GACAoC,EAAA/qB,KAAAwH,IAAAihB,EAAAC,EAAAzkB,EAAAa,MAAA,GAAA9E,KAAA6V,IAAA+S,EAAAF,GACAsC,GAAAvC,EAAA7V,EAAA5S,KAAA2V,IAAAiT,EAAAhW,GACAqY,GAAAjrB,KAAAwH,IAAAihB,EAAAjc,EAAAvI,EAAAgB,OAAA,GAAAjF,KAAA2V,IAAAiT,EAAApc,GAEAse,EAAAN,EAAAM,GACAC,EAAAP,EAAAO,GACAC,EAAAR,EAAAQ,GACAC,EAAAT,EAAAS,GAEAhnB,EAAAqlB,YAAAtpB,KAAAgN,IACAhN,KAAAyN,MAAA+a,GAAAsC,EAAAC,GAAA,GACA/qB,KAAAyN,MAAA+a,GAAAwC,EAAAC,GAAA,IACAhnB,EAAAslB,eAAAuB,EAAAC,EAAAC,EAAAC,IAEA1B,eAAA,SAAA2B,EAAAC,EAAAC,EAAAC,GACA,IAAApnB,EAAAjD,KACAsqB,EAAArnB,EAAAa,MAAAqmB,EAAAlnB,EAAAqlB,YACAiC,EAAAL,EAAAjnB,EAAAqlB,YACAkC,EAAAJ,EAAAnnB,EAAAqlB,YACAmC,EAAAxnB,EAAAgB,OAAAomB,EAAApnB,EAAAqlB,YAEArlB,EAAA+lB,QAAAhqB,KAAAyN,OAAA8d,EAAAD,GAAA,EAAArnB,EAAAc,MACAd,EAAAgmB,QAAAjqB,KAAAyN,OAAA+d,EAAAC,GAAA,EAAAxnB,EAAAiB,MAGA+jB,cAAA,SAAApoB,GACA,IAAA6qB,EAAA,EAAA1rB,KAAA4a,GAAAgN,EAAA5mB,MACA2qB,EAAA3qB,KAAAC,MAAAuE,SAAAxE,KAAAC,MAAAuE,QAAAmmB,WACA3qB,KAAAC,MAAAuE,QAAAmmB,WACA,EAEAC,EAAAD,EAAA3rB,KAAA4a,GAAA,MAGA,OAAA/Z,EAAA6qB,EAAAE,GAEA9B,8BAAA,SAAAlc,GACA,IAAA3J,EAAAjD,KAEA,UAAA4M,EACA,SAIA,IAAAie,EAAA5nB,EAAAqlB,aAAArlB,EAAAuD,IAAAvD,EAAA+I,KACA,OAAA/I,EAAAuB,QAAAwK,MAAAxP,SACAyD,EAAAuD,IAAAoG,GAAAie,GAEAje,EAAA3J,EAAA+I,KAAA6e,GAEA9C,iBAAA,SAAAloB,EAAAirB,GACA,IAAA7nB,EAAAjD,KACA+qB,EAAA9nB,EAAAglB,cAAApoB,GAAAb,KAAA4a,GAAA,EACA,OACA1S,EAAAlI,KAAAyN,MAAAzN,KAAA2V,IAAAoW,GAAAD,GAAA7nB,EAAA+lB,QACA7hB,EAAAnI,KAAAyN,MAAAzN,KAAA6V,IAAAkW,GAAAD,GAAA7nB,EAAAgmB,UAGA+B,yBAAA,SAAAnrB,EAAA+M,GACA,OAAA5M,KAAA+nB,iBAAAloB,EAAAG,KAAA8oB,8BAAAlc,KAGAsW,gBAAA,WACA,IAAAjgB,EAAAjD,KACAgM,EAAA/I,EAAA+I,IACAxF,EAAAvD,EAAAuD,IAEA,OAAAvD,EAAA+nB,yBAAA,EACA/nB,EAAA0X,YAAA,EACA3O,EAAA,GAAAxF,EAAA,EAAAA,EACAwF,EAAA,GAAAxF,EAAA,EAAAwF,EACA,IAGAvF,KAAA,WACA,IAAAxD,EAAAjD,KACA6E,EAAA5B,EAAAuB,QACA8kB,EAAAzkB,EAAAwhB,UACA5S,EAAA5O,EAAAmK,MACA/J,EAAAxG,EAAAwG,eAEA,GAAAJ,EAAAxF,QAAA,CACA,IAAAyF,EAAA7B,EAAA6B,IACA6lB,EAAA3qB,KAAAioB,cAAA,GAGAnT,EAAA7P,EAAAwO,EAAA3U,SAAAya,EAAArU,iBACA+lB,EAAAhmB,EAAAwO,EAAAtO,UAAAoU,EAAAnU,kBACA8lB,EAAAjmB,EAAAwO,EAAApO,WAAAkU,EAAAjU,mBACA6lB,EAAA1sB,EAAA+G,WAAAsP,EAAAmW,EAAAC,GAEAzsB,EAAAsH,KAAA9C,EAAA+L,MAAA,SAAA/N,EAAApB,GAEA,GAAAA,EAAA,GAAA4T,EAAAjU,QAAA,CACA,IAAA4rB,EAAAnoB,EAAA6lB,8BAAA7lB,EAAAkU,eAAAtX,IAOA,GAJAypB,EAAAjqB,SAAA,IAAAQ,GACAwpB,EAAApmB,EAAAqmB,EAAA8B,EAAAvrB,GAGA4T,EAAApU,QAAA,CACA,IAAAgsB,EAAApmB,EAAAwO,EAAA1M,UAAAwS,EAAAvS,kBAOA,GANAlC,EAAAY,KAAAylB,EAEArmB,EAAAuC,OACAvC,EAAA+U,UAAA5W,EAAA+lB,QAAA/lB,EAAAgmB,SACAnkB,EAAAgV,OAAA6Q,GAEAlX,EAAA8S,kBAAA,CACA,IAAA+E,EAAAxmB,EAAAkB,YAAA/E,GAAA6C,MACAgB,EAAA5D,UAAAuS,EAAA+S,cACA1hB,EAAAkD,UACAsjB,EAAA,EAAA7X,EAAAiT,kBACA0E,EAAAtW,EAAA,EAAArB,EAAAgT,iBACA6E,EAAA,EAAA7X,EAAAiT,iBACA5R,EAAA,EAAArB,EAAAgT,kBAIA3hB,EAAAe,UAAA,SACAf,EAAAgB,aAAA,SACAhB,EAAA5D,UAAAmqB,EACAvmB,EAAAoD,SAAAjH,EAAA,GAAAmqB,GACAtmB,EAAAmD,eAKApD,EAAAuhB,WAAA/mB,SAAAwF,EAAA8hB,YAAAtnB,UACAqpB,EAAAzlB,OAKA0N,EAAAwE,aAAAC,kBAAA,eAAAuU,EAAA/Y","file":"js/chunk-vendors~1141f9d8.681b1d82.js","sourcesContent":["'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\nvar layouts = require('../core/core.layouts');\n\nvar noop = helpers.noop;\n\ndefaults._set('global', {\n\tlegend: {\n\t\tdisplay: true,\n\t\tposition: 'top',\n\t\tfullWidth: true,\n\t\treverse: false,\n\t\tweight: 1000,\n\n\t\t// a callback that will handle\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.datasetIndex;\n\t\t\tvar ci = this.chart;\n\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t// See controller.isDatasetVisible comment\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n\t\t\t// We hid a dataset ... rerender the chart\n\t\t\tci.update();\n\t\t},\n\n\t\tonHover: null,\n\n\t\tlabels: {\n\t\t\tboxWidth: 40,\n\t\t\tpadding: 10,\n\t\t\t// Generates labels shown in the legend\n\t\t\t// Valid properties to return:\n\t\t\t// text : text to display\n\t\t\t// fillStyle : fill of coloured box\n\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t// lineCap : cap style for line\n\t\t\t// lineDash\n\t\t\t// lineDashOffset :\n\t\t\t// lineJoin :\n\t\t\t// lineWidth :\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\treturn helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\tfillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t};\n\t\t\t\t}, this) : [];\n\t\t\t}\n\t\t}\n\t},\n\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('');\n\t\treturn text.join('');\n\t}\n});\n\n/**\n * Helper function to get the box width based on the usePointStyle option\n * @param labelopts {Object} the label options on the legend\n * @param fontSize {Number} the label font size\n * @return {Number} width of the color box area\n */\nfunction getBoxWidth(labelOpts, fontSize) {\n\treturn labelOpts.usePointStyle ?\n\t\tfontSize * Math.SQRT2 :\n\t\tlabelOpts.boxWidth;\n}\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Legend = Element.extend({\n\n\tinitialize: function(config) {\n\t\thelpers.extend(this, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tthis.legendHitBoxes = [];\n\n\t\t// Are we in doughnut mode which has a different data type\n\t\tthis.doughnutMode = false;\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\t// Any function defined here is inherited by all legend types.\n\t// Any function can be extended by the legend type\n\n\tbeforeUpdate: noop,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\t},\n\tafterUpdate: noop,\n\n\t//\n\n\tbeforeSetDimensions: noop,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop,\n\n\t//\n\n\tbeforeBuildLabels: noop,\n\tbuildLabels: function() {\n\t\tvar me = this;\n\t\tvar labelOpts = me.options.labels || {};\n\t\tvar legendItems = helpers.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n\t\tif (labelOpts.filter) {\n\t\t\tlegendItems = legendItems.filter(function(item) {\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\n\t\t\t});\n\t\t}\n\n\t\tif (me.options.reverse) {\n\t\t\tlegendItems.reverse();\n\t\t}\n\n\t\tme.legendItems = legendItems;\n\t},\n\tafterBuildLabels: noop,\n\n\t//\n\n\tbeforeFit: noop,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar display = opts.display;\n\n\t\tvar ctx = me.ctx;\n\n\t\tvar globalDefault = defaults.global;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t// Reset hit boxes\n\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\tvar minSize = me.minSize;\n\t\tvar isHorizontal = me.isHorizontal();\n\n\t\tif (isHorizontal) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = display ? 10 : 0;\n\t\t} else {\n\t\t\tminSize.width = display ? 10 : 0;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\t// Increase sizes here\n\t\tif (display) {\n\t\t\tctx.font = labelFont;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\t// Labels\n\n\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\tvar totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;\n\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\tif (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {\n\t\t\t\t\t\ttotalHeight += fontSize + (labelOpts.padding);\n\t\t\t\t\t\tlineWidths[lineWidths.length] = me.left;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\n\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t});\n\n\t\t\t\tminSize.height += totalHeight;\n\n\t\t\t} else {\n\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\tvar currentColWidth = 0;\n\t\t\t\tvar currentColHeight = 0;\n\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\tif (currentColHeight + itemHeight > minSize.height) {\n\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get max width\n\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\tminSize.width += totalWidth;\n\t\t\t}\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\t},\n\tafterFit: noop,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t},\n\n\t// Actually draw the legend on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar globalDefault = defaults.global;\n\t\tvar lineDefault = globalDefault.elements.line;\n\t\tvar legendWidth = me.width;\n\t\tvar lineWidths = me.lineWidths;\n\n\t\tif (opts.display) {\n\t\t\tvar ctx = me.ctx;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar fontColor = valueOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor);\n\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\tvar cursor;\n\n\t\t\t// Canvas setup\n\t\t\tctx.textAlign = 'left';\n\t\t\tctx.textBaseline = 'middle';\n\t\t\tctx.lineWidth = 0.5;\n\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\tctx.font = labelFont;\n\n\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\tvar hitboxes = me.legendHitBoxes;\n\n\t\t\t// current position\n\t\t\tvar drawLegendBox = function(x, y, legendItem) {\n\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the ctx for the box\n\t\t\t\tctx.save();\n\n\t\t\t\tctx.fillStyle = valueOrDefault(legendItem.fillStyle, globalDefault.defaultColor);\n\t\t\t\tctx.lineCap = valueOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\tctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\tctx.lineJoin = valueOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\tctx.lineWidth = valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\tctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);\n\t\t\t\tvar isLineWidthZero = (valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);\n\n\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\tctx.setLineDash(valueOrDefault(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t}\n\n\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\n\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\tvar radius = fontSize * Math.SQRT2 / 2;\n\t\t\t\t\tvar offSet = radius / Math.SQRT2;\n\t\t\t\t\tvar centerX = x + offSet;\n\t\t\t\t\tvar centerY = y + offSet;\n\n\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\thelpers.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t} else {\n\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\tif (!isLineWidthZero) {\n\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t};\n\t\t\tvar fillText = function(x, y, legendItem, textWidth) {\n\t\t\t\tvar halfFontSize = fontSize / 2;\n\t\t\t\tvar xLeft = boxWidth + halfFontSize + x;\n\t\t\t\tvar yMiddle = y + halfFontSize;\n\n\t\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\n\n\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\tctx.moveTo(xLeft, yMiddle);\n\t\t\t\t\tctx.lineTo(xLeft + textWidth, yMiddle);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Horizontal\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tif (isHorizontal) {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + ((legendWidth - lineWidths[0]) / 2),\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\n\t\t\t\tvar x = cursor.x;\n\t\t\t\tvar y = cursor.y;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tif (x + width >= legendWidth) {\n\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\tx = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);\n\t\t\t\t\t}\n\t\t\t\t} else if (y + itemHeight > me.bottom) {\n\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\ty = cursor.y = me.top + labelOpts.padding;\n\t\t\t\t\tcursor.line++;\n\t\t\t\t}\n\n\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\thitboxes[i].left = x;\n\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t// Fill the actual label\n\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tcursor.x += width + (labelOpts.padding);\n\t\t\t\t} else {\n\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Handle an event\n\t * @private\n\t * @param {IEvent} event - The event to handle\n\t * @return {Boolean} true if a change occured\n\t */\n\thandleEvent: function(e) {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\t\tvar changed = false;\n\n\t\tif (type === 'mousemove') {\n\t\t\tif (!opts.onHover) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (type === 'click') {\n\t\t\tif (!opts.onClick) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t// Chart event already has relative position in it\n\t\tvar x = e.x;\n\t\tvar y = e.y;\n\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t// See if we are touching one of the dataset boxes\n\t\t\tvar lh = me.legendHitBoxes;\n\t\t\tfor (var i = 0; i < lh.length; ++i) {\n\t\t\t\tvar hitBox = lh[i];\n\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t// Touching an element\n\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\topts.onClick.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (type === 'mousemove') {\n\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\topts.onHover.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changed;\n\t}\n});\n\nfunction createNewLegendAndAttach(chart, legendOpts) {\n\tvar legend = new Legend({\n\t\tctx: chart.ctx,\n\t\toptions: legendOpts,\n\t\tchart: chart\n\t});\n\n\tlayouts.configure(chart, legend, legendOpts);\n\tlayouts.addBox(chart, legend);\n\tchart.legend = legend;\n}\n\nmodule.exports = {\n\tid: 'legend',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Legend,\n\n\tbeforeInit: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\n\t\tif (legendOpts) {\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\t\tvar legend = chart.legend;\n\n\t\tif (legendOpts) {\n\t\t\thelpers.mergeIf(legendOpts, defaults.global.legend);\n\n\t\t\tif (legend) {\n\t\t\t\tlayouts.configure(chart, legend, legendOpts);\n\t\t\t\tlegend.options = legendOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t}\n\t\t} else if (legend) {\n\t\t\tlayouts.removeBox(chart, legend);\n\t\t\tdelete chart.legend;\n\t\t}\n\t},\n\n\tafterEvent: function(chart, e) {\n\t\tvar legend = chart.legend;\n\t\tif (legend) {\n\t\t\tlegend.handleEvent(e);\n\t\t}\n\t}\n};\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nmodule.exports = {\n\tacquireContext: function(item) {\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\treturn item && item.getContext('2d') || null;\n\t}\n};\n","/* global window: false */\n'use strict';\n\nvar moment = require('moment');\nmoment = typeof moment === 'function' ? moment : window.moment;\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\n\n// Integer constants are from the ES6 spec.\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nvar INTERVALS = {\n\tmillisecond: {\n\t\tcommon: true,\n\t\tsize: 1,\n\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t},\n\tsecond: {\n\t\tcommon: true,\n\t\tsize: 1000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\tminute: {\n\t\tcommon: true,\n\t\tsize: 60000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\thour: {\n\t\tcommon: true,\n\t\tsize: 3600000,\n\t\tsteps: [1, 2, 3, 6, 12]\n\t},\n\tday: {\n\t\tcommon: true,\n\t\tsize: 86400000,\n\t\tsteps: [1, 2, 5]\n\t},\n\tweek: {\n\t\tcommon: false,\n\t\tsize: 604800000,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tmonth: {\n\t\tcommon: true,\n\t\tsize: 2.628e9,\n\t\tsteps: [1, 2, 3]\n\t},\n\tquarter: {\n\t\tcommon: false,\n\t\tsize: 7.884e9,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tyear: {\n\t\tcommon: true,\n\t\tsize: 3.154e10\n\t}\n};\n\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n\treturn a - b;\n}\n\nfunction arrayUnique(items) {\n\tvar hash = {};\n\tvar out = [];\n\tvar i, ilen, item;\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\titem = items[i];\n\t\tif (!hash[item]) {\n\t\t\thash[item] = true;\n\t\t\tout.push(item);\n\t\t}\n\t}\n\n\treturn out;\n}\n\n/**\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n * extremity (left + width or top + height). Note that it would be more optimized to directly\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n *\n * @param {Number[]} timestamps - timestamps sorted from lowest to highest.\n * @param {String} distribution - If 'linear', timestamps will be spread linearly along the min\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n * If 'series', timestamps will be positioned at the same distance from each other. In this\n * case, only timestamps that break the time linearity are registered, meaning that in the\n * best case, all timestamps are linear, the table contains only min and max.\n */\nfunction buildLookupTable(timestamps, min, max, distribution) {\n\tif (distribution === 'linear' || !timestamps.length) {\n\t\treturn [\n\t\t\t{time: min, pos: 0},\n\t\t\t{time: max, pos: 1}\n\t\t];\n\t}\n\n\tvar table = [];\n\tvar items = [min];\n\tvar i, ilen, prev, curr, next;\n\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\tcurr = timestamps[i];\n\t\tif (curr > min && curr < max) {\n\t\t\titems.push(curr);\n\t\t}\n\t}\n\n\titems.push(max);\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\tnext = items[i + 1];\n\t\tprev = items[i - 1];\n\t\tcurr = items[i];\n\n\t\t// only add points that breaks the scale linearity\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\n\t\t}\n\t}\n\n\treturn table;\n}\n\n// @see adapted from http://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\nfunction lookup(table, key, value) {\n\tvar lo = 0;\n\tvar hi = table.length - 1;\n\tvar mid, i0, i1;\n\n\twhile (lo >= 0 && lo <= hi) {\n\t\tmid = (lo + hi) >> 1;\n\t\ti0 = table[mid - 1] || null;\n\t\ti1 = table[mid];\n\n\t\tif (!i0) {\n\t\t\t// given value is outside table (before first item)\n\t\t\treturn {lo: null, hi: i1};\n\t\t} else if (i1[key] < value) {\n\t\t\tlo = mid + 1;\n\t\t} else if (i0[key] > value) {\n\t\t\thi = mid - 1;\n\t\t} else {\n\t\t\treturn {lo: i0, hi: i1};\n\t\t}\n\t}\n\n\t// given value is outside table (after last item)\n\treturn {lo: i1, hi: null};\n}\n\n/**\n * Linearly interpolates the given source `value` using the table items `skey` values and\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n * index [0, 1] or [n - 1, n] are used for the interpolation.\n */\nfunction interpolate(table, skey, sval, tkey) {\n\tvar range = lookup(table, skey, sval);\n\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n\tvar span = next[skey] - prev[skey];\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\n\n\treturn prev[tkey] + offset;\n}\n\n/**\n * Convert the given value to a moment object using the given time options.\n * @see http://momentjs.com/docs/#/parsing/\n */\nfunction momentify(value, options) {\n\tvar parser = options.parser;\n\tvar format = options.parser || options.format;\n\n\tif (typeof parser === 'function') {\n\t\treturn parser(value);\n\t}\n\n\tif (typeof value === 'string' && typeof format === 'string') {\n\t\treturn moment(value, format);\n\t}\n\n\tif (!(value instanceof moment)) {\n\t\tvalue = moment(value);\n\t}\n\n\tif (value.isValid()) {\n\t\treturn value;\n\t}\n\n\t// Labels are in an incompatible moment format and no `parser` has been provided.\n\t// The user might still use the deprecated `format` option to convert his inputs.\n\tif (typeof format === 'function') {\n\t\treturn format(value);\n\t}\n\n\treturn value;\n}\n\nfunction parse(input, scale) {\n\tif (helpers.isNullOrUndef(input)) {\n\t\treturn null;\n\t}\n\n\tvar options = scale.options.time;\n\tvar value = momentify(scale.getRightValue(input), options);\n\tif (!value.isValid()) {\n\t\treturn null;\n\t}\n\n\tif (options.round) {\n\t\tvalue.startOf(options.round);\n\t}\n\n\treturn value.valueOf();\n}\n\n/**\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n */\nfunction determineStepSize(min, max, unit, capacity) {\n\tvar range = max - min;\n\tvar interval = INTERVALS[unit];\n\tvar milliseconds = interval.size;\n\tvar steps = interval.steps;\n\tvar i, ilen, factor;\n\n\tif (!steps) {\n\t\treturn Math.ceil(range / (capacity * milliseconds));\n\t}\n\n\tfor (i = 0, ilen = steps.length; i < ilen; ++i) {\n\t\tfactor = steps[i];\n\t\tif (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn factor;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n\tvar ilen = UNITS.length;\n\tvar i, interval, factor;\n\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n\t\tinterval = INTERVALS[UNITS[i]];\n\t\tfactor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n\n\treturn UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n */\nfunction determineUnitForFormatting(ticks, minUnit, min, max) {\n\tvar duration = moment.duration(moment(max).diff(moment(min)));\n\tvar ilen = UNITS.length;\n\tvar i, unit;\n\n\tfor (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n\t\tunit = UNITS[i];\n\t\tif (INTERVALS[unit].common && duration.as(unit) >= ticks.length) {\n\t\t\treturn unit;\n\t\t}\n\t}\n\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n\t\tif (INTERVALS[UNITS[i]].common) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n}\n\n/**\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n */\nfunction generate(min, max, capacity, options) {\n\tvar timeOpts = options.time;\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n\tvar major = determineMajorUnit(minor);\n\tvar stepSize = helpers.valueOrDefault(timeOpts.stepSize, timeOpts.unitStepSize);\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n\tvar majorTicksEnabled = options.ticks.major.enabled;\n\tvar interval = INTERVALS[minor];\n\tvar first = moment(min);\n\tvar last = moment(max);\n\tvar ticks = [];\n\tvar time;\n\n\tif (!stepSize) {\n\t\tstepSize = determineStepSize(min, max, minor, capacity);\n\t}\n\n\t// For 'week' unit, handle the first day of week option\n\tif (weekday) {\n\t\tfirst = first.isoWeekday(weekday);\n\t\tlast = last.isoWeekday(weekday);\n\t}\n\n\t// Align first/last ticks on unit\n\tfirst = first.startOf(weekday ? 'day' : minor);\n\tlast = last.startOf(weekday ? 'day' : minor);\n\n\t// Make sure that the last tick include max\n\tif (last < max) {\n\t\tlast.add(1, minor);\n\t}\n\n\ttime = moment(first);\n\n\tif (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n\t\t// Align the first tick on the previous `minor` unit aligned on the `major` unit:\n\t\t// we first aligned time on the previous `major` unit then add the number of full\n\t\t// stepSize there is between first and the previous major time.\n\t\ttime.startOf(major);\n\t\ttime.add(~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n\t}\n\n\tfor (; time < last; time.add(stepSize, minor)) {\n\t\tticks.push(+time);\n\t}\n\n\tticks.push(+time);\n\n\treturn ticks;\n}\n\n/**\n * Returns the right and left offsets from edges in the form of {left, right}.\n * Offsets are added when the `offset` option is true.\n */\nfunction computeOffsets(table, ticks, min, max, options) {\n\tvar left = 0;\n\tvar right = 0;\n\tvar upper, lower;\n\n\tif (options.offset && ticks.length) {\n\t\tif (!options.time.min) {\n\t\t\tupper = ticks.length > 1 ? ticks[1] : max;\n\t\t\tlower = ticks[0];\n\t\t\tleft = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t\tif (!options.time.max) {\n\t\t\tupper = ticks[ticks.length - 1];\n\t\t\tlower = ticks.length > 1 ? ticks[ticks.length - 2] : min;\n\t\t\tright = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t}\n\n\treturn {left: left, right: right};\n}\n\nfunction ticksFromTimestamps(values, majorUnit) {\n\tvar ticks = [];\n\tvar i, ilen, value, major;\n\n\tfor (i = 0, ilen = values.length; i < ilen; ++i) {\n\t\tvalue = values[i];\n\t\tmajor = majorUnit ? value === +moment(value).startOf(majorUnit) : false;\n\n\t\tticks.push({\n\t\t\tvalue: value,\n\t\t\tmajor: major\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nfunction determineLabelFormat(data, timeOpts) {\n\tvar i, momentDate, hasTime;\n\tvar ilen = data.length;\n\n\t// find the label with the most parts (milliseconds, minutes, etc.)\n\t// format all labels with the same level of detail as the most specific label\n\tfor (i = 0; i < ilen; i++) {\n\t\tmomentDate = momentify(data[i], timeOpts);\n\t\tif (momentDate.millisecond() !== 0) {\n\t\t\treturn 'MMM D, YYYY h:mm:ss.SSS a';\n\t\t}\n\t\tif (momentDate.second() !== 0 || momentDate.minute() !== 0 || momentDate.hour() !== 0) {\n\t\t\thasTime = true;\n\t\t}\n\t}\n\tif (hasTime) {\n\t\treturn 'MMM D, YYYY h:mm:ss a';\n\t}\n\treturn 'MMM D, YYYY';\n}\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'bottom',\n\n\t\t/**\n\t\t * Data distribution along the scale:\n\t\t * - 'linear': data are spread according to their time (distances can vary),\n\t\t * - 'series': data are spread at the same distance from each other.\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t * @since 2.7.0\n\t\t */\n\t\tdistribution: 'linear',\n\n\t\t/**\n\t\t * Scale boundary strategy (bypassed by min/max time options)\n\t\t * - `data`: make sure data are fully visible, ticks outside are removed\n\t\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4556\n\t\t * @since 2.7.0\n\t\t */\n\t\tbounds: 'data',\n\n\t\ttime: {\n\t\t\tparser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/\n\t\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\t\tround: false, // none, or override with week, month, year, etc.\n\t\t\tdisplayFormat: false, // DEPRECATED\n\t\t\tisoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/\n\t\t\tminUnit: 'millisecond',\n\n\t\t\t// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/\n\t\t\tdisplayFormats: {\n\t\t\t\tmillisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,\n\t\t\t\tsecond: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\tminute: 'h:mm a', // 11:20 AM\n\t\t\t\thour: 'hA', // 5PM\n\t\t\t\tday: 'MMM D', // Sep 4\n\t\t\t\tweek: 'll', // Week 46, or maybe \"[W]WW - YYYY\" ?\n\t\t\t\tmonth: 'MMM YYYY', // Sept 2015\n\t\t\t\tquarter: '[Q]Q - YYYY', // Q3\n\t\t\t\tyear: 'YYYY' // 2015\n\t\t\t},\n\t\t},\n\t\tticks: {\n\t\t\tautoSkip: false,\n\n\t\t\t/**\n\t\t\t * Ticks generation input values:\n\t\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n\t\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n\t\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\n\t\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t\t * @since 2.7.0\n\t\t\t */\n\t\t\tsource: 'auto',\n\n\t\t\tmajor: {\n\t\t\t\tenabled: false\n\t\t\t}\n\t\t}\n\t};\n\n\tvar TimeScale = Chart.Scale.extend({\n\t\tinitialize: function() {\n\t\t\tif (!moment) {\n\t\t\t\tthrow new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');\n\t\t\t}\n\n\t\t\tthis.mergeTicksOptions();\n\n\t\t\tChart.Scale.prototype.initialize.call(this);\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\n\t\t\t// DEPRECATIONS: output a message only one time per update\n\t\t\tif (options.time && options.time.format) {\n\t\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser.');\n\t\t\t}\n\n\t\t\treturn Chart.Scale.prototype.update.apply(me, arguments);\n\t\t},\n\n\t\t/**\n\t\t * Allows data to be referenced via 't' attribute\n\t\t */\n\t\tgetRightValue: function(rawValue) {\n\t\t\tif (rawValue && rawValue.t !== undefined) {\n\t\t\t\trawValue = rawValue.t;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, rawValue);\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar unit = timeOpts.unit || 'day';\n\t\t\tvar min = MAX_INTEGER;\n\t\t\tvar max = MIN_INTEGER;\n\t\t\tvar timestamps = [];\n\t\t\tvar datasets = [];\n\t\t\tvar labels = [];\n\t\t\tvar i, j, ilen, jlen, data, timestamp;\n\n\t\t\t// Convert labels to timestamps\n\t\t\tfor (i = 0, ilen = chart.data.labels.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(parse(chart.data.labels[i], me));\n\t\t\t}\n\n\t\t\t// Convert data to timestamps\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\t\tdata = chart.data.datasets[i].data;\n\n\t\t\t\t\t// Let's consider that all data have the same format.\n\t\t\t\t\tif (helpers.isObject(data[0])) {\n\t\t\t\t\t\tdatasets[i] = [];\n\n\t\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\n\t\t\t\t\t\t\ttimestamp = parse(data[j], me);\n\t\t\t\t\t\t\ttimestamps.push(timestamp);\n\t\t\t\t\t\t\tdatasets[i][j] = timestamp;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimestamps.push.apply(timestamps, labels);\n\t\t\t\t\t\tdatasets[i] = labels.slice(0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatasets[i] = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (labels.length) {\n\t\t\t\t// Sort labels **after** data have been converted\n\t\t\t\tlabels = arrayUnique(labels).sort(sorter);\n\t\t\t\tmin = Math.min(min, labels[0]);\n\t\t\t\tmax = Math.max(max, labels[labels.length - 1]);\n\t\t\t}\n\n\t\t\tif (timestamps.length) {\n\t\t\t\ttimestamps = arrayUnique(timestamps).sort(sorter);\n\t\t\t\tmin = Math.min(min, timestamps[0]);\n\t\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\n\t\t\t}\n\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// In case there is no valid min/max, set limits based on unit time option\n\t\t\tmin = min === MAX_INTEGER ? +moment().startOf(unit) : min;\n\t\t\tmax = max === MIN_INTEGER ? +moment().endOf(unit) + 1 : max;\n\n\t\t\t// Make sure that max is strictly higher than min (required by the lookup table)\n\t\t\tme.min = Math.min(min, max);\n\t\t\tme.max = Math.max(min + 1, max);\n\n\t\t\t// PRIVATE\n\t\t\tme._horizontal = me.isHorizontal();\n\t\t\tme._table = [];\n\t\t\tme._timestamps = {\n\t\t\t\tdata: timestamps,\n\t\t\t\tdatasets: datasets,\n\t\t\t\tlabels: labels\n\t\t\t};\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\t\t\tvar options = me.options;\n\t\t\tvar timeOpts = options.time;\n\t\t\tvar timestamps = [];\n\t\t\tvar ticks = [];\n\t\t\tvar i, ilen, timestamp;\n\n\t\t\tswitch (options.ticks.source) {\n\t\t\tcase 'data':\n\t\t\t\ttimestamps = me._timestamps.data;\n\t\t\t\tbreak;\n\t\t\tcase 'labels':\n\t\t\t\ttimestamps = me._timestamps.labels;\n\t\t\t\tbreak;\n\t\t\tcase 'auto':\n\t\t\tdefault:\n\t\t\t\ttimestamps = generate(min, max, me.getLabelCapacity(min), options);\n\t\t\t}\n\n\t\t\tif (options.bounds === 'ticks' && timestamps.length) {\n\t\t\t\tmin = timestamps[0];\n\t\t\t\tmax = timestamps[timestamps.length - 1];\n\t\t\t}\n\n\t\t\t// Enforce limits with user min/max options\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// Remove ticks outside the min/max range\n\t\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\t\ttimestamp = timestamps[i];\n\t\t\t\tif (timestamp >= min && timestamp <= max) {\n\t\t\t\t\tticks.push(timestamp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.min = min;\n\t\t\tme.max = max;\n\n\t\t\t// PRIVATE\n\t\t\tme._unit = timeOpts.unit || determineUnitForFormatting(ticks, timeOpts.minUnit, me.min, me.max);\n\t\t\tme._majorUnit = determineMajorUnit(me._unit);\n\t\t\tme._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n\t\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\n\t\t\tme._labelFormat = determineLabelFormat(me._timestamps.data, timeOpts);\n\n\t\t\treturn ticksFromTimestamps(ticks, me._majorUnit);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\n\t\t\tvar value = data.datasets[datasetIndex].data[index];\n\n\t\t\tif (helpers.isObject(value)) {\n\t\t\t\tlabel = me.getRightValue(value);\n\t\t\t}\n\t\t\tif (timeOpts.tooltipFormat) {\n\t\t\t\treturn momentify(label, timeOpts).format(timeOpts.tooltipFormat);\n\t\t\t}\n\t\t\tif (typeof label === 'string') {\n\t\t\t\treturn label;\n\t\t\t}\n\n\t\t\treturn momentify(label, timeOpts).format(me._labelFormat);\n\t\t},\n\n\t\t/**\n\t\t * Function to format an individual tick mark\n\t\t * @private\n\t\t */\n\t\ttickFormatFunction: function(tick, index, ticks, formatOverride) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar time = tick.valueOf();\n\t\t\tvar formats = options.time.displayFormats;\n\t\t\tvar minorFormat = formats[me._unit];\n\t\t\tvar majorUnit = me._majorUnit;\n\t\t\tvar majorFormat = formats[majorUnit];\n\t\t\tvar majorTime = tick.clone().startOf(majorUnit).valueOf();\n\t\t\tvar majorTickOpts = options.ticks.major;\n\t\t\tvar major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n\t\t\tvar label = tick.format(formatOverride ? formatOverride : major ? majorFormat : minorFormat);\n\t\t\tvar tickOpts = major ? majorTickOpts : options.ticks.minor;\n\t\t\tvar formatter = helpers.valueOrDefault(tickOpts.callback, tickOpts.userCallback);\n\n\t\t\treturn formatter ? formatter(label, index, ticks) : label;\n\t\t},\n\n\t\tconvertTicksToLabels: function(ticks) {\n\t\t\tvar labels = [];\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(this.tickFormatFunction(moment(ticks[i].value), i, ticks));\n\t\t\t}\n\n\t\t\treturn labels;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetPixelForOffset: function(time) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = interpolate(me._table, 'time', time, 'pos');\n\n\t\t\treturn start + size * (me._offsets.left + pos) / (me._offsets.left + 1 + me._offsets.right);\n\t\t},\n\n\t\tgetPixelForValue: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar time = null;\n\n\t\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\n\t\t\t}\n\n\t\t\tif (time === null) {\n\t\t\t\ttime = parse(value, me);\n\t\t\t}\n\n\t\t\tif (time !== null) {\n\t\t\t\treturn me.getPixelForOffset(time);\n\t\t\t}\n\t\t},\n\n\t\tgetPixelForTick: function(index) {\n\t\t\tvar ticks = this.getTicks();\n\t\t\treturn index >= 0 && index < ticks.length ?\n\t\t\t\tthis.getPixelForOffset(ticks[index].value) :\n\t\t\t\tnull;\n\t\t},\n\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = (size ? (pixel - start) / size : 0) * (me._offsets.left + 1 + me._offsets.left) - me._offsets.right;\n\t\t\tvar time = interpolate(me._table, 'pos', pos, 'time');\n\n\t\t\treturn moment(time);\n\t\t},\n\n\t\t/**\n\t\t * Crude approximation of what the label width might be\n\t\t * @private\n\t\t */\n\t\tgetLabelWidth: function(label) {\n\t\t\tvar me = this;\n\t\t\tvar ticksOpts = me.options.ticks;\n\t\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\n\t\t\tvar angle = helpers.toRadians(ticksOpts.maxRotation);\n\t\t\tvar cosRotation = Math.cos(angle);\n\t\t\tvar sinRotation = Math.sin(angle);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);\n\n\t\t\treturn (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetLabelCapacity: function(exampleTime) {\n\t\t\tvar me = this;\n\n\t\t\tvar formatOverride = me.options.time.displayFormats.millisecond;\t// Pick the longest format for guestimation\n\n\t\t\tvar exampleLabel = me.tickFormatFunction(moment(exampleTime), 0, [], formatOverride);\n\t\t\tvar tickLabelWidth = me.getLabelWidth(exampleLabel);\n\t\t\tvar innerWidth = me.isHorizontal() ? me.width : me.height;\n\n\t\t\tvar capacity = Math.floor(innerWidth / tickLabelWidth);\n\t\t\treturn capacity > 0 ? capacity : 1;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('time', TimeScale, defaultConfig);\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.linear\n\t\t}\n\t};\n\n\tvar LinearScale = Chart.LinearScaleBase.extend({\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar DEFAULT_MIN = 0;\n\t\t\tvar DEFAULT_MAX = 1;\n\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// First Calculate the range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\tvaluesPerStack[key] = {\n\t\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store these per type\n\t\t\t\t\tvar positiveValues = valuesPerStack[key].positiveValues;\n\t\t\t\t\tvar negativeValues = valuesPerStack[key].negativeValues;\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\t\tvar minVal = helpers.min(values);\n\t\t\t\t\tvar maxVal = helpers.max(values);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n\t\t\tme.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar maxTicks;\n\t\t\tvar me = this;\n\t\t\tvar tickOpts = me.options.ticks;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));\n\t\t\t} else {\n\t\t\t\t// The factor of 2 used to scale the font size has been experimentally determined.\n\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize);\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));\n\t\t\t}\n\n\t\t\treturn maxTicks;\n\t\t},\n\t\t// Called after the ticks are built. We need\n\t\thandleDirectionalChanges: function() {\n\t\t\tif (!this.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tthis.ticks.reverse();\n\t\t\t}\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\t// Utils\n\t\tgetPixelForValue: function(value) {\n\t\t\t// This must be called after fit has been run so that\n\t\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\t\tvar me = this;\n\t\t\tvar start = me.start;\n\n\t\t\tvar rightValue = +me.getRightValue(value);\n\t\t\tvar pixel;\n\t\t\tvar range = me.end - start;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tpixel = me.left + (me.width / range * (rightValue - start));\n\t\t\t} else {\n\t\t\t\tpixel = me.bottom - (me.height / range * (rightValue - start));\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar innerDimension = isHorizontal ? me.width : me.height;\n\t\t\tvar offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n\t\t\treturn me.start + ((me.end - me.start) * offset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);\n\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\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 {Array} array of tick values\n */\nfunction generateTicks(generationOptions, dataRange) {\n\tvar ticks = [];\n\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t// Figure out what the max number of ticks we can support it is based on the size of\n\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t// the graph\n\tvar tickVal = valueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));\n\n\tvar endExp = Math.floor(helpers.log10(dataRange.max));\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n\tvar exp, significand;\n\n\tif (tickVal === 0) {\n\t\texp = Math.floor(helpers.log10(dataRange.minNotZero));\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n\t\tticks.push(tickVal);\n\t\ttickVal = significand * Math.pow(10, exp);\n\t} else {\n\t\texp = Math.floor(helpers.log10(tickVal));\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\n\t}\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n\tdo {\n\t\tticks.push(tickVal);\n\n\t\t++significand;\n\t\tif (significand === 10) {\n\t\t\tsignificand = 1;\n\t\t\t++exp;\n\t\t\tprecision = exp >= 0 ? 1 : precision;\n\t\t}\n\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\n\n\tvar lastTick = valueOrDefault(generationOptions.max, tickVal);\n\tticks.push(lastTick);\n\n\treturn ticks;\n}\n\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\n\t\t// label settings\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.logarithmic\n\t\t}\n\t};\n\n\tvar LogarithmicScale = Chart.Scale.extend({\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// Calculate Range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\t\t\tme.minNotZero = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\t\tvaluesPerStack[key] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar values = valuesPerStack[key];\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\t\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tif (valuesForType.length > 0) {\n\t\t\t\t\t\tvar minVal = helpers.min(valuesForType);\n\t\t\t\t\t\tvar maxVal = helpers.max(valuesForType);\n\t\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar DEFAULT_MIN = 1;\n\t\t\tvar DEFAULT_MAX = 10;\n\n\t\t\tme.min = valueOrDefault(tickOpts.min, me.min);\n\t\t\tme.max = valueOrDefault(tickOpts.max, me.max);\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);\n\t\t\t\t\tme.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);\n\t\t\t\t} else {\n\t\t\t\t\tme.min = DEFAULT_MIN;\n\t\t\t\t\tme.max = DEFAULT_MAX;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (me.min === null) {\n\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.max)) - 1);\n\t\t\t}\n\t\t\tif (me.max === null) {\n\t\t\t\tme.max = me.min !== 0\n\t\t\t\t\t? Math.pow(10, Math.floor(helpers.log10(me.min)) + 1)\n\t\t\t\t\t: DEFAULT_MAX;\n\t\t\t}\n\t\t\tif (me.minNotZero === null) {\n\t\t\t\tif (me.min > 0) {\n\t\t\t\t\tme.minNotZero = me.min;\n\t\t\t\t} else if (me.max < 1) {\n\t\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(helpers.log10(me.max)));\n\t\t\t\t} else {\n\t\t\t\t\tme.minNotZero = DEFAULT_MIN;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar reverse = !me.isHorizontal();\n\n\t\t\tvar generationOptions = {\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max\n\t\t\t};\n\t\t\tvar ticks = me.ticks = generateTicks(generationOptions, me);\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\treverse = !reverse;\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t\tif (reverse) {\n\t\t\t\tticks.reverse();\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tthis.tickValues = this.ticks.slice();\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(this);\n\t\t},\n\t\t// Get the correct tooltip label\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t\t},\n\t\t/**\n\t\t * Returns the value of the first tick.\n\t\t * @param {Number} value - The minimum not zero value.\n\t\t * @return {Number} The first tick value.\n\t\t * @private\n\t\t */\n\t\t_getFirstTickValue: function(value) {\n\t\t\tvar exp = Math.floor(helpers.log10(value));\n\t\t\tvar significand = Math.floor(value / Math.pow(10, exp));\n\n\t\t\treturn significand * Math.pow(10, exp);\n\t\t},\n\t\tgetPixelForValue: function(value) {\n\t\t\tvar me = this;\n\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\tvar log10 = helpers.log10;\n\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\tvar offset = 0;\n\t\t\tvar innerDimension, pixel, start, end, sign;\n\n\t\t\tvalue = +me.getRightValue(value);\n\t\t\tif (reverse) {\n\t\t\t\tstart = me.end;\n\t\t\t\tend = me.start;\n\t\t\t\tsign = -1;\n\t\t\t} else {\n\t\t\t\tstart = me.start;\n\t\t\t\tend = me.end;\n\t\t\t\tsign = 1;\n\t\t\t}\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width;\n\t\t\t\tpixel = reverse ? me.right : me.left;\n\t\t\t} else {\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tsign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\t\t\t\tpixel = reverse ? me.top : me.bottom;\n\t\t\t}\n\t\t\tif (value !== start) {\n\t\t\t\tif (start === 0) { // include zero tick\n\t\t\t\t\toffset = helpers.getValueOrDefault(\n\t\t\t\t\t\tme.options.ticks.fontSize,\n\t\t\t\t\t\tChart.defaults.global.defaultFontSize\n\t\t\t\t\t);\n\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t}\n\t\t\t\tif (value !== 0) {\n\t\t\t\t\toffset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n\t\t\t\t}\n\t\t\t\tpixel += sign * offset;\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\tvar log10 = helpers.log10;\n\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\tvar innerDimension, start, end, value;\n\n\t\t\tif (reverse) {\n\t\t\t\tstart = me.end;\n\t\t\t\tend = me.start;\n\t\t\t} else {\n\t\t\t\tstart = me.start;\n\t\t\t\tend = me.end;\n\t\t\t}\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width;\n\t\t\t\tvalue = reverse ? me.right - pixel : pixel - me.left;\n\t\t\t} else {\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tvalue = reverse ? pixel - me.top : me.bottom - pixel;\n\t\t\t}\n\t\t\tif (value !== start) {\n\t\t\t\tif (start === 0) { // include zero tick\n\t\t\t\t\tvar offset = helpers.getValueOrDefault(\n\t\t\t\t\t\tme.options.ticks.fontSize,\n\t\t\t\t\t\tChart.defaults.global.defaultFontSize\n\t\t\t\t\t);\n\t\t\t\t\tvalue -= offset;\n\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t}\n\t\t\t\tvalue *= log10(end) - log10(start);\n\t\t\t\tvalue /= innerDimension;\n\t\t\t\tvalue = Math.pow(10, log10(start) + value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);\n\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\nvar basic = require('./platform.basic');\nvar dom = require('./platform.dom');\n\n// @TODO Make possible to select another platform at build time.\nvar implementation = dom._enabled ? dom : basic;\n\n/**\n * @namespace Chart.platform\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n * @since 2.4.0\n */\nmodule.exports = helpers.extend({\n\t/**\n\t * @since 2.7.0\n\t */\n\tinitialize: function() {},\n\n\t/**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {*} item - The native item from which to acquire context (platform specific)\n\t * @param {Object} options - The chart options\n\t * @returns {CanvasRenderingContext2D} context2d instance\n\t */\n\tacquireContext: function() {},\n\n\t/**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {Boolean} true if the method succeeded, else false\n\t */\n\treleaseContext: function() {},\n\n\t/**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {String} type - The ({@link IEvent}) type to listen for\n\t * @param {Function} listener - Receives a notification (an object that implements\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\n\t */\n\taddEventListener: function() {},\n\n\t/**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart -Chart from which to remove the listener\n\t * @param {String} type - The ({@link IEvent}) type to remove\n\t * @param {Function} listener - The listener function to remove from the event target.\n\t */\n\tremoveEventListener: function() {}\n\n}, implementation);\n\n/**\n * @interface IPlatform\n * Allows abstracting platform dependencies away from the chart\n * @borrows Chart.platform.acquireContext as acquireContext\n * @borrows Chart.platform.releaseContext as releaseContext\n * @borrows Chart.platform.addEventListener as addEventListener\n * @borrows Chart.platform.removeEventListener as removeEventListener\n */\n\n/**\n * @interface IEvent\n * @prop {String} type - The event type name, possible values are:\n * 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',\n * 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'\n * @prop {*} native - The original native event (null for emulated events, e.g. 'resize')\n * @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)\n * @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)\n */\n","'use strict';\n\nmodule.exports = {};\nmodule.exports.filler = require('./plugin.filler');\nmodule.exports.legend = require('./plugin.legend');\nmodule.exports.title = require('./plugin.title');\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\nvar layouts = require('../core/core.layouts');\n\nvar noop = helpers.noop;\n\ndefaults._set('global', {\n\ttitle: {\n\t\tdisplay: false,\n\t\tfontStyle: 'bold',\n\t\tfullWidth: true,\n\t\tlineHeight: 1.2,\n\t\tpadding: 10,\n\t\tposition: 'top',\n\t\ttext: '',\n\t\tweight: 2000 // by default greater than legend (1000) to be above\n\t}\n});\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Title = Element.extend({\n\tinitialize: function(config) {\n\t\tvar me = this;\n\t\thelpers.extend(me, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tme.legendHitBoxes = [];\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\n\tbeforeUpdate: noop,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\n\t},\n\tafterUpdate: noop,\n\n\t//\n\n\tbeforeSetDimensions: noop,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop,\n\n\t//\n\n\tbeforeBuildLabels: noop,\n\tbuildLabels: noop,\n\tafterBuildLabels: noop,\n\n\t//\n\n\tbeforeFit: noop,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar opts = me.options;\n\t\tvar display = opts.display;\n\t\tvar fontSize = valueOrDefault(opts.fontSize, defaults.global.defaultFontSize);\n\t\tvar minSize = me.minSize;\n\t\tvar lineCount = helpers.isArray(opts.text) ? opts.text.length : 1;\n\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\tvar textSize = display ? (lineCount * lineHeight) + (opts.padding * 2) : 0;\n\n\t\tif (me.isHorizontal()) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = textSize;\n\t\t} else {\n\t\t\tminSize.width = textSize;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\n\t},\n\tafterFit: noop,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\tvar pos = this.options.position;\n\t\treturn pos === 'top' || pos === 'bottom';\n\t},\n\n\t// Actually draw the title block on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar ctx = me.ctx;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar opts = me.options;\n\t\tvar globalDefaults = defaults.global;\n\n\t\tif (opts.display) {\n\t\t\tvar fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar titleFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\tvar offset = lineHeight / 2 + opts.padding;\n\t\t\tvar rotation = 0;\n\t\t\tvar top = me.top;\n\t\t\tvar left = me.left;\n\t\t\tvar bottom = me.bottom;\n\t\t\tvar right = me.right;\n\t\t\tvar maxWidth, titleX, titleY;\n\n\t\t\tctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour\n\t\t\tctx.font = titleFont;\n\n\t\t\t// Horizontal\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\n\t\t\t\ttitleY = top + offset;\n\t\t\t\tmaxWidth = right - left;\n\t\t\t} else {\n\t\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\n\t\t\t\ttitleY = top + ((bottom - top) / 2);\n\t\t\t\tmaxWidth = bottom - top;\n\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t}\n\n\t\t\tctx.save();\n\t\t\tctx.translate(titleX, titleY);\n\t\t\tctx.rotate(rotation);\n\t\t\tctx.textAlign = 'center';\n\t\t\tctx.textBaseline = 'middle';\n\n\t\t\tvar text = opts.text;\n\t\t\tif (helpers.isArray(text)) {\n\t\t\t\tvar y = 0;\n\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\n\t\t\t\t\ty += lineHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tctx.fillText(text, 0, 0, maxWidth);\n\t\t\t}\n\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\n\tvar title = new Title({\n\t\tctx: chart.ctx,\n\t\toptions: titleOpts,\n\t\tchart: chart\n\t});\n\n\tlayouts.configure(chart, title, titleOpts);\n\tlayouts.addBox(chart, title);\n\tchart.titleBlock = title;\n}\n\nmodule.exports = {\n\tid: 'title',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Title,\n\n\tbeforeInit: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\n\t\tif (titleOpts) {\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\t\tvar titleBlock = chart.titleBlock;\n\n\t\tif (titleOpts) {\n\t\t\thelpers.mergeIf(titleOpts, defaults.global.title);\n\n\t\t\tif (titleBlock) {\n\t\t\t\tlayouts.configure(chart, titleBlock, titleOpts);\n\t\t\t\ttitleBlock.options = titleOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t}\n\t\t} else if (titleBlock) {\n\t\t\tlayouts.removeBox(chart, titleBlock);\n\t\t\tdelete chart.titleBlock;\n\t\t}\n\t}\n};\n","'use strict';\n\nvar helpers = require('../helpers/index');\n\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 {Array} array of tick values\n */\nfunction generateTicks(generationOptions, dataRange) {\n\tvar ticks = [];\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t// \"nice number\" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t// for details.\n\n\tvar spacing;\n\tif (generationOptions.stepSize && generationOptions.stepSize > 0) {\n\t\tspacing = generationOptions.stepSize;\n\t} else {\n\t\tvar niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);\n\t\tspacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);\n\t}\n\tvar niceMin = Math.floor(dataRange.min / spacing) * spacing;\n\tvar niceMax = Math.ceil(dataRange.max / spacing) * spacing;\n\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\n\tif (generationOptions.min && generationOptions.max && generationOptions.stepSize) {\n\t\t// If very close to our whole number, use it.\n\t\tif (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {\n\t\t\tniceMin = generationOptions.min;\n\t\t\tniceMax = generationOptions.max;\n\t\t}\n\t}\n\n\tvar numSpaces = (niceMax - niceMin) / spacing;\n\t// If very close to our rounded value, use it.\n\tif (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\tnumSpaces = Math.round(numSpaces);\n\t} else {\n\t\tnumSpaces = Math.ceil(numSpaces);\n\t}\n\n\tvar precision = 1;\n\tif (spacing < 1) {\n\t\tprecision = Math.pow(10, spacing.toString().length - 2);\n\t\tniceMin = Math.round(niceMin * precision) / precision;\n\t\tniceMax = Math.round(niceMax * precision) / precision;\n\t}\n\tticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);\n\tfor (var j = 1; j < numSpaces; ++j) {\n\t\tticks.push(Math.round((niceMin + j * spacing) * precision) / precision);\n\t}\n\tticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);\n\n\treturn ticks;\n}\n\n\nmodule.exports = function(Chart) {\n\n\tvar noop = helpers.noop;\n\n\tChart.LinearScaleBase = Chart.Scale.extend({\n\t\tgetRightValue: function(value) {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\treturn +value;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, value);\n\t\t},\n\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t\t// axis, they can manually override it\n\t\t\tif (tickOpts.beginAtZero) {\n\t\t\t\tvar minSign = helpers.sign(me.min);\n\t\t\t\tvar maxSign = helpers.sign(me.max);\n\n\t\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t\t// move the top up to 0\n\t\t\t\t\tme.max = 0;\n\t\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t\t// move the bottom down to 0\n\t\t\t\t\tme.min = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n\t\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n\t\t\tif (tickOpts.min !== undefined) {\n\t\t\t\tme.min = tickOpts.min;\n\t\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\t\tif (me.min === null) {\n\t\t\t\t\tme.min = tickOpts.suggestedMin;\n\t\t\t\t} else {\n\t\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tickOpts.max !== undefined) {\n\t\t\t\tme.max = tickOpts.max;\n\t\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\t\tif (me.max === null) {\n\t\t\t\t\tme.max = tickOpts.suggestedMax;\n\t\t\t\t} else {\n\t\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (setMin !== setMax) {\n\t\t\t\t// We set the min or the max but not both.\n\t\t\t\t// So ensure that our range is good\n\t\t\t\t// Inverted or 0 length range can happen when\n\t\t\t\t// ticks.min is set, and no datasets are visible\n\t\t\t\tif (me.min >= me.max) {\n\t\t\t\t\tif (setMin) {\n\t\t\t\t\t\tme.max = me.min + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.min = me.max - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tme.max++;\n\n\t\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\t\tme.min--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTickLimit: noop,\n\t\thandleDirectionalChanges: noop,\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph. Make sure we always have at least 2 ticks\n\t\t\tvar maxTicks = me.getTickLimit();\n\t\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\t\tvar numericGeneratorOptions = {\n\t\t\t\tmaxTicks: maxTicks,\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max,\n\t\t\t\tstepSize: helpers.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n\t\t\t};\n\t\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n\n\t\t\tme.handleDirectionalChanges();\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(me);\n\t\t}\n\t});\n};\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\n'use strict';\n\nvar helpers = require('../helpers/index');\n\nvar EXPANDO_KEY = '$chartjs';\nvar CSS_PREFIX = 'chartjs-';\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nvar EVENT_TYPES = {\n\ttouchstart: 'mousedown',\n\ttouchmove: 'mousemove',\n\ttouchend: 'mouseup',\n\tpointerenter: 'mouseenter',\n\tpointerdown: 'mousedown',\n\tpointermove: 'mousemove',\n\tpointerup: 'mouseup',\n\tpointerleave: 'mouseout',\n\tpointerout: 'mouseout'\n};\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns {Number} Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n\tvar value = helpers.getStyle(element, property);\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n\treturn matches ? Number(matches[1]) : undefined;\n}\n\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n */\nfunction initCanvas(canvas, config) {\n\tvar style = canvas.style;\n\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\n\tvar renderHeight = canvas.getAttribute('height');\n\tvar renderWidth = canvas.getAttribute('width');\n\n\t// Chart.js modifies some canvas values that we want to restore on destroy\n\tcanvas[EXPANDO_KEY] = {\n\t\tinitial: {\n\t\t\theight: renderHeight,\n\t\t\twidth: renderWidth,\n\t\t\tstyle: {\n\t\t\t\tdisplay: style.display,\n\t\t\t\theight: style.height,\n\t\t\t\twidth: style.width\n\t\t\t}\n\t\t}\n\t};\n\n\t// Force canvas to display as block to avoid extra space caused by inline\n\t// elements, which would interfere with the responsive resize process.\n\t// https://github.com/chartjs/Chart.js/issues/2538\n\tstyle.display = style.display || 'block';\n\n\tif (renderWidth === null || renderWidth === '') {\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\n\t\tif (displayWidth !== undefined) {\n\t\t\tcanvas.width = displayWidth;\n\t\t}\n\t}\n\n\tif (renderHeight === null || renderHeight === '') {\n\t\tif (canvas.style.height === '') {\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\n\t\t\t// which one can be specified by the user but also by charts as default option\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\n\t\t} else {\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\n\t\t\tif (displayWidth !== undefined) {\n\t\t\t\tcanvas.height = displayHeight;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn canvas;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nvar supportsEventListenerOptions = (function() {\n\tvar supports = false;\n\ttry {\n\t\tvar options = Object.defineProperty({}, 'passive', {\n\t\t\tget: function() {\n\t\t\t\tsupports = true;\n\t\t\t}\n\t\t});\n\t\twindow.addEventListener('e', null, options);\n\t} catch (e) {\n\t\t// continue regardless of error\n\t}\n\treturn supports;\n}());\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addEventListener(node, type, listener) {\n\tnode.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeEventListener(node, type, listener) {\n\tnode.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction createEvent(type, chart, x, y, nativeEvent) {\n\treturn {\n\t\ttype: type,\n\t\tchart: chart,\n\t\tnative: nativeEvent || null,\n\t\tx: x !== undefined ? x : null,\n\t\ty: y !== undefined ? y : null,\n\t};\n}\n\nfunction fromNativeEvent(event, chart) {\n\tvar type = EVENT_TYPES[event.type] || event.type;\n\tvar pos = helpers.getRelativePosition(event, chart);\n\treturn createEvent(type, chart, pos.x, pos.y, event);\n}\n\nfunction throttled(fn, thisArg) {\n\tvar ticking = false;\n\tvar args = [];\n\n\treturn function() {\n\t\targs = Array.prototype.slice.call(arguments);\n\t\tthisArg = thisArg || this;\n\n\t\tif (!ticking) {\n\t\t\tticking = true;\n\t\t\thelpers.requestAnimFrame.call(window, function() {\n\t\t\t\tticking = false;\n\t\t\t\tfn.apply(thisArg, args);\n\t\t\t});\n\t\t}\n\t};\n}\n\n// Implementation based on https://github.com/marcj/css-element-queries\nfunction createResizer(handler) {\n\tvar resizer = document.createElement('div');\n\tvar cls = CSS_PREFIX + 'size-monitor';\n\tvar maxSize = 1000000;\n\tvar style =\n\t\t'position:absolute;' +\n\t\t'left:0;' +\n\t\t'top:0;' +\n\t\t'right:0;' +\n\t\t'bottom:0;' +\n\t\t'overflow:hidden;' +\n\t\t'pointer-events:none;' +\n\t\t'visibility:hidden;' +\n\t\t'z-index:-1;';\n\n\tresizer.style.cssText = style;\n\tresizer.className = cls;\n\tresizer.innerHTML =\n\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t'
' +\n\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t'
';\n\n\tvar expand = resizer.childNodes[0];\n\tvar shrink = resizer.childNodes[1];\n\n\tresizer._reset = function() {\n\t\texpand.scrollLeft = maxSize;\n\t\texpand.scrollTop = maxSize;\n\t\tshrink.scrollLeft = maxSize;\n\t\tshrink.scrollTop = maxSize;\n\t};\n\tvar onScroll = function() {\n\t\tresizer._reset();\n\t\thandler();\n\t};\n\n\taddEventListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n\taddEventListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n\treturn resizer;\n}\n\n// https://davidwalsh.name/detect-node-insertion\nfunction watchForRender(node, handler) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\tvar proxy = expando.renderProxy = function(e) {\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\n\t\t\thandler();\n\t\t}\n\t};\n\n\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\taddEventListener(node, type, proxy);\n\t});\n\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n\t// is removed then added back immediately (same animation frame?). Accessing the\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n\t// https://github.com/chartjs/Chart.js/issues/4737\n\texpando.reflow = !!node.offsetParent;\n\n\tnode.classList.add(CSS_RENDER_MONITOR);\n}\n\nfunction unwatchForRender(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar proxy = expando.renderProxy;\n\n\tif (proxy) {\n\t\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\t\tremoveEventListener(node, type, proxy);\n\t\t});\n\n\t\tdelete expando.renderProxy;\n\t}\n\n\tnode.classList.remove(CSS_RENDER_MONITOR);\n}\n\nfunction addResizeListener(node, listener, chart) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\n\t\tif (expando.resizer) {\n\t\t\treturn listener(createEvent('resize', chart));\n\t\t}\n\t}));\n\n\t// The resizer needs to be attached to the node parent, so we first need to be\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\n\twatchForRender(node, function() {\n\t\tif (expando.resizer) {\n\t\t\tvar container = node.parentNode;\n\t\t\tif (container && container !== resizer.parentNode) {\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\n\t\t\t}\n\n\t\t\t// The container size might have changed, let's reset the resizer state.\n\t\t\tresizer._reset();\n\t\t}\n\t});\n}\n\nfunction removeResizeListener(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar resizer = expando.resizer;\n\n\tdelete expando.resizer;\n\tunwatchForRender(node);\n\n\tif (resizer && resizer.parentNode) {\n\t\tresizer.parentNode.removeChild(resizer);\n\t}\n}\n\nfunction injectCSS(platform, css) {\n\t// http://stackoverflow.com/q/3922139\n\tvar style = platform._style || document.createElement('style');\n\tif (!platform._style) {\n\t\tplatform._style = style;\n\t\tcss = '/* Chart.js */\\n' + css;\n\t\tstyle.setAttribute('type', 'text/css');\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t}\n\n\tstyle.appendChild(document.createTextNode(css));\n}\n\nmodule.exports = {\n\t/**\n\t * This property holds whether this platform is enabled for the current environment.\n\t * Currently used by platform.js to select the proper implementation.\n\t * @private\n\t */\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n\tinitialize: function() {\n\t\tvar keyframes = 'from{opacity:0.99}to{opacity:1}';\n\n\t\tinjectCSS(this,\n\t\t\t// DOM rendering detection\n\t\t\t// https://davidwalsh.name/detect-node-insertion\n\t\t\t'@-webkit-keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'@keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'.' + CSS_RENDER_MONITOR + '{' +\n\t\t\t\t'-webkit-animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t\t'animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t'}'\n\t\t);\n\t},\n\n\tacquireContext: function(item, config) {\n\t\tif (typeof item === 'string') {\n\t\t\titem = document.getElementById(item);\n\t\t} else if (item.length) {\n\t\t\t// Support for array based queries (such as jQuery)\n\t\t\titem = item[0];\n\t\t}\n\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\tvar context = item && item.getContext && item.getContext('2d');\n\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n\t\t// inside an iframe or when running in a protected environment. We could guess the\n\t\t// types from their toString() value but let's keep things flexible and assume it's\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\n\t\tif (context && context.canvas === item) {\n\t\t\tinitCanvas(item, config);\n\t\t\treturn context;\n\t\t}\n\n\t\treturn null;\n\t},\n\n\treleaseContext: function(context) {\n\t\tvar canvas = context.canvas;\n\t\tif (!canvas[EXPANDO_KEY]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\n\t\t['height', 'width'].forEach(function(prop) {\n\t\t\tvar value = initial[prop];\n\t\t\tif (helpers.isNullOrUndef(value)) {\n\t\t\t\tcanvas.removeAttribute(prop);\n\t\t\t} else {\n\t\t\t\tcanvas.setAttribute(prop, value);\n\t\t\t}\n\t\t});\n\n\t\thelpers.each(initial.style || {}, function(value, key) {\n\t\t\tcanvas.style[key] = value;\n\t\t});\n\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n\t\tcanvas.width = canvas.width;\n\n\t\tdelete canvas[EXPANDO_KEY];\n\t},\n\n\taddEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\taddResizeListener(canvas, listener, chart);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\n\t\t\tlistener(fromNativeEvent(event, chart));\n\t\t};\n\n\t\taddEventListener(canvas, type, proxy);\n\t},\n\n\tremoveEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\tremoveResizeListener(canvas, listener);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || {};\n\t\tvar proxies = expando.proxies || {};\n\t\tvar proxy = proxies[chart.id + '_' + type];\n\t\tif (!proxy) {\n\t\t\treturn;\n\t\t}\n\n\t\tremoveEventListener(canvas, type, proxy);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n * @function Chart.helpers.addEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.addEvent = addEventListener;\n\n/**\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n * @function Chart.helpers.removeEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.removeEvent = removeEventListener;\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\n'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar elements = require('../elements/index');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\tplugins: {\n\t\tfiller: {\n\t\t\tpropagate: true\n\t\t}\n\t}\n});\n\nvar mappers = {\n\tdataset: function(source) {\n\t\tvar index = source.fill;\n\t\tvar chart = source.chart;\n\t\tvar meta = chart.getDatasetMeta(index);\n\t\tvar visible = meta && chart.isDatasetVisible(index);\n\t\tvar points = (visible && meta.dataset._children) || [];\n\t\tvar length = points.length || 0;\n\n\t\treturn !length ? null : function(point, i) {\n\t\t\treturn (i < length && points[i]._view) || null;\n\t\t};\n\t},\n\n\tboundary: function(source) {\n\t\tvar boundary = source.boundary;\n\t\tvar x = boundary ? boundary.x : null;\n\t\tvar y = boundary ? boundary.y : null;\n\n\t\treturn function(point) {\n\t\t\treturn {\n\t\t\t\tx: x === null ? point.x : x,\n\t\t\t\ty: y === null ? point.y : y,\n\t\t\t};\n\t\t};\n\t}\n};\n\n// @todo if (fill[0] === '#')\nfunction decodeFill(el, index, count) {\n\tvar model = el._model || {};\n\tvar fill = model.fill;\n\tvar target;\n\n\tif (fill === undefined) {\n\t\tfill = !!model.backgroundColor;\n\t}\n\n\tif (fill === false || fill === null) {\n\t\treturn false;\n\t}\n\n\tif (fill === true) {\n\t\treturn 'origin';\n\t}\n\n\ttarget = parseFloat(fill, 10);\n\tif (isFinite(target) && Math.floor(target) === target) {\n\t\tif (fill[0] === '-' || fill[0] === '+') {\n\t\t\ttarget = index + target;\n\t\t}\n\n\t\tif (target === index || target < 0 || target >= count) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn target;\n\t}\n\n\tswitch (fill) {\n\t// compatibility\n\tcase 'bottom':\n\t\treturn 'start';\n\tcase 'top':\n\t\treturn 'end';\n\tcase 'zero':\n\t\treturn 'origin';\n\t// supported boundaries\n\tcase 'origin':\n\tcase 'start':\n\tcase 'end':\n\t\treturn fill;\n\t// invalid fill values\n\tdefault:\n\t\treturn false;\n\t}\n}\n\nfunction computeBoundary(source) {\n\tvar model = source.el._model || {};\n\tvar scale = source.el._scale || {};\n\tvar fill = source.fill;\n\tvar target = null;\n\tvar horizontal;\n\n\tif (isFinite(fill)) {\n\t\treturn null;\n\t}\n\n\t// Backward compatibility: until v3, we still need to support boundary values set on\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n\t// controllers might still use it (e.g. the Smith chart).\n\n\tif (fill === 'start') {\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n\t} else if (fill === 'end') {\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\n\t} else if (model.scaleZero !== undefined) {\n\t\ttarget = model.scaleZero;\n\t} else if (scale.getBasePosition) {\n\t\ttarget = scale.getBasePosition();\n\t} else if (scale.getBasePixel) {\n\t\ttarget = scale.getBasePixel();\n\t}\n\n\tif (target !== undefined && target !== null) {\n\t\tif (target.x !== undefined && target.y !== undefined) {\n\t\t\treturn target;\n\t\t}\n\n\t\tif (typeof target === 'number' && isFinite(target)) {\n\t\t\thorizontal = scale.isHorizontal();\n\t\t\treturn {\n\t\t\t\tx: horizontal ? target : null,\n\t\t\t\ty: horizontal ? null : target\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction resolveTarget(sources, index, propagate) {\n\tvar source = sources[index];\n\tvar fill = source.fill;\n\tvar visited = [index];\n\tvar target;\n\n\tif (!propagate) {\n\t\treturn fill;\n\t}\n\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\n\t\tif (!isFinite(fill)) {\n\t\t\treturn fill;\n\t\t}\n\n\t\ttarget = sources[fill];\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (target.visible) {\n\t\t\treturn fill;\n\t\t}\n\n\t\tvisited.push(fill);\n\t\tfill = target.fill;\n\t}\n\n\treturn false;\n}\n\nfunction createMapper(source) {\n\tvar fill = source.fill;\n\tvar type = 'dataset';\n\n\tif (fill === false) {\n\t\treturn null;\n\t}\n\n\tif (!isFinite(fill)) {\n\t\ttype = 'boundary';\n\t}\n\n\treturn mappers[type](source);\n}\n\nfunction isDrawable(point) {\n\treturn point && !point.skip;\n}\n\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\n\tvar i;\n\n\tif (!len0 || !len1) {\n\t\treturn;\n\t}\n\n\t// building first area curve (normal)\n\tctx.moveTo(curve0[0].x, curve0[0].y);\n\tfor (i = 1; i < len0; ++i) {\n\t\thelpers.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n\t}\n\n\t// joining the two area curves\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n\t// building opposite area curve (reverse)\n\tfor (i = len1 - 1; i > 0; --i) {\n\t\thelpers.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n\t}\n}\n\nfunction doFill(ctx, points, mapper, view, color, loop) {\n\tvar count = points.length;\n\tvar span = view.spanGaps;\n\tvar curve0 = [];\n\tvar curve1 = [];\n\tvar len0 = 0;\n\tvar len1 = 0;\n\tvar i, ilen, index, p0, p1, d0, d1;\n\n\tctx.beginPath();\n\n\tfor (i = 0, ilen = (count + !!loop); i < ilen; ++i) {\n\t\tindex = i % count;\n\t\tp0 = points[index]._view;\n\t\tp1 = mapper(p0, index, view);\n\t\td0 = isDrawable(p0);\n\t\td1 = isDrawable(p1);\n\n\t\tif (d0 && d1) {\n\t\t\tlen0 = curve0.push(p0);\n\t\t\tlen1 = curve1.push(p1);\n\t\t} else if (len0 && len1) {\n\t\t\tif (!span) {\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\t\t\t\tlen0 = len1 = 0;\n\t\t\t\tcurve0 = [];\n\t\t\t\tcurve1 = [];\n\t\t\t} else {\n\t\t\t\tif (d0) {\n\t\t\t\t\tcurve0.push(p0);\n\t\t\t\t}\n\t\t\t\tif (d1) {\n\t\t\t\t\tcurve1.push(p1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdrawArea(ctx, curve0, curve1, len0, len1);\n\n\tctx.closePath();\n\tctx.fillStyle = color;\n\tctx.fill();\n}\n\nmodule.exports = {\n\tid: 'filler',\n\n\tafterDatasetsUpdate: function(chart, options) {\n\t\tvar count = (chart.data.datasets || []).length;\n\t\tvar propagate = options.propagate;\n\t\tvar sources = [];\n\t\tvar meta, i, el, source;\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\tel = meta.dataset;\n\t\t\tsource = null;\n\n\t\t\tif (el && el._model && el instanceof elements.Line) {\n\t\t\t\tsource = {\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\n\t\t\t\t\tfill: decodeFill(el, i, count),\n\t\t\t\t\tchart: chart,\n\t\t\t\t\tel: el\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tmeta.$filler = source;\n\t\t\tsources.push(source);\n\t\t}\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!source) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\n\t\t\tsource.boundary = computeBoundary(source);\n\t\t\tsource.mapper = createMapper(source);\n\t\t}\n\t},\n\n\tbeforeDatasetDraw: function(chart, args) {\n\t\tvar meta = args.meta.$filler;\n\t\tif (!meta) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar ctx = chart.ctx;\n\t\tvar el = meta.el;\n\t\tvar view = el._view;\n\t\tvar points = el._children || [];\n\t\tvar mapper = meta.mapper;\n\t\tvar color = view.backgroundColor || defaults.global.defaultColor;\n\n\t\tif (mapper && color && points.length) {\n\t\t\thelpers.canvas.clipArea(ctx, chart.chartArea);\n\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\n\t\t\thelpers.canvas.unclipArea(ctx);\n\t\t}\n\t}\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\t// Default config for a category scale\n\tvar defaultConfig = {\n\t\tposition: 'bottom'\n\t};\n\n\tvar DatasetScale = Chart.Scale.extend({\n\t\t/**\n\t\t* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n\t\t* else fall back to data.labels\n\t\t* @private\n\t\t*/\n\t\tgetLabels: function() {\n\t\t\tvar data = this.chart.data;\n\t\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\tme.minIndex = 0;\n\t\t\tme.maxIndex = labels.length - 1;\n\t\t\tvar findIndex;\n\n\t\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t\t// user specified min value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.min);\n\t\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t\t}\n\n\t\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t\t// user specified max value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.max);\n\t\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t\t}\n\n\t\t\tme.min = labels[me.minIndex];\n\t\t\tme.max = labels[me.maxIndex];\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\t// If we are viewing some subset of labels, slice the original array\n\t\t\tme.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif (data.yLabels && !isHorizontal) {\n\t\t\t\treturn me.getRightValue(data.datasets[datasetIndex].data[index]);\n\t\t\t}\n\t\t\treturn me.ticks[index - me.minIndex];\n\t\t},\n\n\t\t// Used to get data value locations. Value can either be an index or a numerical value\n\t\tgetPixelForValue: function(value, index) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\t// 1 is added because we need the length but we have the indexes\n\t\t\tvar offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1);\n\n\t\t\t// If value is a data object, then index is the index in the data array,\n\t\t\t// not the index of the scale. We need to change that.\n\t\t\tvar valueCategory;\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\n\t\t\t}\n\t\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\n\t\t\t\tvar labels = me.getLabels();\n\t\t\t\tvalue = valueCategory || value;\n\t\t\t\tvar idx = labels.indexOf(value);\n\t\t\t\tindex = idx !== -1 ? idx : index;\n\t\t\t}\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar valueWidth = me.width / offsetAmt;\n\t\t\t\tvar widthOffset = (valueWidth * (index - me.minIndex));\n\n\t\t\t\tif (offset) {\n\t\t\t\t\twidthOffset += (valueWidth / 2);\n\t\t\t\t}\n\n\t\t\t\treturn me.left + Math.round(widthOffset);\n\t\t\t}\n\t\t\tvar valueHeight = me.height / offsetAmt;\n\t\t\tvar heightOffset = (valueHeight * (index - me.minIndex));\n\n\t\t\tif (offset) {\n\t\t\t\theightOffset += (valueHeight / 2);\n\t\t\t}\n\n\t\t\treturn me.top + Math.round(heightOffset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\tvar value;\n\t\t\tvar offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\tvar horz = me.isHorizontal();\n\t\t\tvar valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n\t\t\tpixel -= horz ? me.left : me.top;\n\n\t\t\tif (offset) {\n\t\t\t\tpixel -= (valueDimension / 2);\n\t\t\t}\n\n\t\t\tif (pixel <= 0) {\n\t\t\t\tvalue = 0;\n\t\t\t} else {\n\t\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t\t}\n\n\t\t\treturn value + me.minIndex;\n\t\t},\n\t\tgetBasePixel: function() {\n\t\t\treturn this.bottom;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);\n\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar helpers = require('../helpers/index');\nvar Ticks = require('../core/core.ticks');\n\nmodule.exports = function(Chart) {\n\n\tvar globalDefaults = defaults.global;\n\n\tvar defaultConfig = {\n\t\tdisplay: true,\n\n\t\t// Boolean - Whether to animate scaling the chart from the centre\n\t\tanimate: true,\n\t\tposition: 'chartArea',\n\n\t\tangleLines: {\n\t\t\tdisplay: true,\n\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\tlineWidth: 1\n\t\t},\n\n\t\tgridLines: {\n\t\t\tcircular: false\n\t\t},\n\n\t\t// label settings\n\t\tticks: {\n\t\t\t// Boolean - Show a backdrop to the scale label\n\t\t\tshowLabelBackdrop: true,\n\n\t\t\t// String - The colour of the label backdrop\n\t\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t\t// Number - The backdrop padding above & below the label in pixels\n\t\t\tbackdropPaddingY: 2,\n\n\t\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\t\tbackdropPaddingX: 2,\n\n\t\t\tcallback: Ticks.formatters.linear\n\t\t},\n\n\t\tpointLabels: {\n\t\t\t// Boolean - if true, show point labels\n\t\t\tdisplay: true,\n\n\t\t\t// Number - Point label font size in pixels\n\t\t\tfontSize: 10,\n\n\t\t\t// Function - Used to convert point labels\n\t\t\tcallback: function(label) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction getValueCount(scale) {\n\t\tvar opts = scale.options;\n\t\treturn opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n\t}\n\n\tfunction getPointLabelFontOptions(scale) {\n\t\tvar pointLabelOptions = scale.options.pointLabels;\n\t\tvar fontSize = helpers.valueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);\n\t\tvar fontStyle = helpers.valueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);\n\t\tvar fontFamily = helpers.valueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);\n\t\tvar font = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\treturn {\n\t\t\tsize: fontSize,\n\t\t\tstyle: fontStyle,\n\t\t\tfamily: fontFamily,\n\t\t\tfont: font\n\t\t};\n\t}\n\n\tfunction measureLabelSize(ctx, fontSize, label) {\n\t\tif (helpers.isArray(label)) {\n\t\t\treturn {\n\t\t\t\tw: helpers.longestText(ctx, ctx.font, label),\n\t\t\t\th: (label.length * fontSize) + ((label.length - 1) * 1.5 * fontSize)\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tw: ctx.measureText(label).width,\n\t\t\th: fontSize\n\t\t};\n\t}\n\n\tfunction determineLimits(angle, pos, size, min, max) {\n\t\tif (angle === min || angle === max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - (size / 2),\n\t\t\t\tend: pos + (size / 2)\n\t\t\t};\n\t\t} else if (angle < min || angle > max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - size - 5,\n\t\t\t\tend: pos\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tstart: pos,\n\t\t\tend: pos + size + 5\n\t\t};\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with point labels\n\t */\n\tfunction fitWithPointLabels(scale) {\n\t\t/*\n\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t *\n\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t *\n\t\t * Solution:\n\t\t *\n\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t * at each index we check if the text overlaps.\n\t\t *\n\t\t * Where it does, we store that angle and that index.\n\t\t *\n\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t * from the shape radius to move the point inwards by that x.\n\t\t *\n\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t * along with labels.\n\t\t *\n\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t *\n\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t * and position it in the most space efficient manner\n\t\t *\n\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t */\n\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tvar furthestLimits = {\n\t\t\tr: scale.width,\n\t\t\tl: 0,\n\t\t\tt: scale.height,\n\t\t\tb: 0\n\t\t};\n\t\tvar furthestAngles = {};\n\t\tvar i, textSize, pointPosition;\n\n\t\tscale.ctx.font = plFont.font;\n\t\tscale._pointLabelSizes = [];\n\n\t\tvar valueCount = getValueCount(scale);\n\t\tfor (i = 0; i < valueCount; i++) {\n\t\t\tpointPosition = scale.getPointPosition(i, largestPossibleRadius);\n\t\t\ttextSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');\n\t\t\tscale._pointLabelSizes[i] = textSize;\n\n\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\tvar angle = helpers.toDegrees(angleRadians) % 360;\n\t\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n\t\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n\t\t\tif (hLimits.start < furthestLimits.l) {\n\t\t\t\tfurthestLimits.l = hLimits.start;\n\t\t\t\tfurthestAngles.l = angleRadians;\n\t\t\t}\n\n\t\t\tif (hLimits.end > furthestLimits.r) {\n\t\t\t\tfurthestLimits.r = hLimits.end;\n\t\t\t\tfurthestAngles.r = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.start < furthestLimits.t) {\n\t\t\t\tfurthestLimits.t = vLimits.start;\n\t\t\t\tfurthestAngles.t = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.end > furthestLimits.b) {\n\t\t\t\tfurthestLimits.b = vLimits.end;\n\t\t\t\tfurthestAngles.b = angleRadians;\n\t\t\t}\n\t\t}\n\n\t\tscale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with no point labels\n\t */\n\tfunction fit(scale) {\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tscale.drawingArea = Math.round(largestPossibleRadius);\n\t\tscale.setCenterPoint(0, 0, 0, 0);\n\t}\n\n\tfunction getTextAlignForAngle(angle) {\n\t\tif (angle === 0 || angle === 180) {\n\t\t\treturn 'center';\n\t\t} else if (angle < 180) {\n\t\t\treturn 'left';\n\t\t}\n\n\t\treturn 'right';\n\t}\n\n\tfunction fillText(ctx, text, position, fontSize) {\n\t\tif (helpers.isArray(text)) {\n\t\t\tvar y = position.y;\n\t\t\tvar spacing = 1.5 * fontSize;\n\n\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\tctx.fillText(text[i], position.x, y);\n\t\t\t\ty += spacing;\n\t\t\t}\n\t\t} else {\n\t\t\tctx.fillText(text, position.x, position.y);\n\t\t}\n\t}\n\n\tfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\n\t\tif (angle === 90 || angle === 270) {\n\t\t\tposition.y -= (textSize.h / 2);\n\t\t} else if (angle > 270 || angle < 90) {\n\t\t\tposition.y -= textSize.h;\n\t\t}\n\t}\n\n\tfunction drawPointLabels(scale) {\n\t\tvar ctx = scale.ctx;\n\t\tvar opts = scale.options;\n\t\tvar angleLineOpts = opts.angleLines;\n\t\tvar pointLabelOpts = opts.pointLabels;\n\n\t\tctx.lineWidth = angleLineOpts.lineWidth;\n\t\tctx.strokeStyle = angleLineOpts.color;\n\n\t\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n\t\t// Point Label Font\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\tctx.textBaseline = 'top';\n\n\t\tfor (var i = getValueCount(scale) - 1; i >= 0; i--) {\n\t\t\tif (angleLineOpts.display) {\n\t\t\t\tvar outerPosition = scale.getPointPosition(i, outerDistance);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(scale.xCenter, scale.yCenter);\n\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tif (pointLabelOpts.display) {\n\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);\n\n\t\t\t\t// Keep this in loop since we may support array properties here\n\t\t\t\tvar pointLabelFontColor = helpers.valueAtIndexOrDefault(pointLabelOpts.fontColor, i, globalDefaults.defaultFontColor);\n\t\t\t\tctx.font = plFont.font;\n\t\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\t\tvar angle = helpers.toDegrees(angleRadians);\n\t\t\t\tctx.textAlign = getTextAlignForAngle(angle);\n\t\t\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n\t\t\t\tfillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\n\t\tvar ctx = scale.ctx;\n\t\tctx.strokeStyle = helpers.valueAtIndexOrDefault(gridLineOpts.color, index - 1);\n\t\tctx.lineWidth = helpers.valueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);\n\n\t\tif (scale.options.gridLines.circular) {\n\t\t\t// Draw circular arcs between the points\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t} else {\n\t\t\t// Draw straight lines connecting each index\n\t\t\tvar valueCount = getValueCount(scale);\n\n\t\t\tif (valueCount === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\t\t\tvar pointPosition = scale.getPointPosition(0, radius);\n\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\n\t\t\tfor (var i = 1; i < valueCount; i++) {\n\t\t\t\tpointPosition = scale.getPointPosition(i, radius);\n\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t}\n\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t}\n\t}\n\n\tfunction numberOrZero(param) {\n\t\treturn helpers.isNumber(param) ? param : 0;\n\t}\n\n\tvar LinearRadialScale = Chart.LinearScaleBase.extend({\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.height = me.maxHeight;\n\t\t\tme.xCenter = Math.round(me.width / 2);\n\t\t\tme.yCenter = Math.round(me.height / 2);\n\n\t\t\tvar minSize = helpers.min([me.height, me.width]);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tme.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);\n\t\t},\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar min = Number.POSITIVE_INFINITY;\n\t\t\tvar max = Number.NEGATIVE_INFINITY;\n\n\t\t\thelpers.each(chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmin = Math.min(value, min);\n\t\t\t\t\t\tmax = Math.max(value, max);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\n\t\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tme.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar tickOpts = this.options.ticks;\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\treturn Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\n\t\t\tChart.LinearScaleBase.prototype.convertTicksToLabels.call(me);\n\n\t\t\t// Point labels\n\t\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tfit: function() {\n\t\t\tif (this.options.pointLabels.display) {\n\t\t\t\tfitWithPointLabels(this);\n\t\t\t} else {\n\t\t\t\tfit(this);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set radius reductions and determine new radius and center point\n\t\t * @private\n\t\t */\n\t\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\n\t\t\tvar me = this;\n\t\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n\t\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n\t\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n\t\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);\n\n\t\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\n\t\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\n\t\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\n\t\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n\t\t\tme.drawingArea = Math.min(\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n\t\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\n\t\t\tvar me = this;\n\t\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\n\t\t\tvar maxLeft = leftMovement + me.drawingArea;\n\t\t\tvar maxTop = topMovement + me.drawingArea;\n\t\t\tvar maxBottom = me.height - bottomMovement - me.drawingArea;\n\n\t\t\tme.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);\n\t\t\tme.yCenter = Math.round(((maxTop + maxBottom) / 2) + me.top);\n\t\t},\n\n\t\tgetIndexAngle: function(index) {\n\t\t\tvar angleMultiplier = (Math.PI * 2) / getValueCount(this);\n\t\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ?\n\t\t\t\tthis.chart.options.startAngle :\n\t\t\t\t0;\n\n\t\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\t\treturn index * angleMultiplier + startAngleRadians;\n\t\t},\n\t\tgetDistanceFromCenterForValue: function(value) {\n\t\t\tvar me = this;\n\n\t\t\tif (value === null) {\n\t\t\t\treturn 0; // null always in center\n\t\t\t}\n\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\t\tif (me.options.ticks.reverse) {\n\t\t\t\treturn (me.max - value) * scalingFactor;\n\t\t\t}\n\t\t\treturn (value - me.min) * scalingFactor;\n\t\t},\n\t\tgetPointPosition: function(index, distanceFromCenter) {\n\t\t\tvar me = this;\n\t\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\n\t\t\treturn {\n\t\t\t\tx: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,\n\t\t\t\ty: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter\n\t\t\t};\n\t\t},\n\t\tgetPointPositionForValue: function(index, value) {\n\t\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t\t},\n\n\t\tgetBasePosition: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.getPointPositionForValue(0,\n\t\t\t\tme.beginAtZero ? 0 :\n\t\t\t\tmin < 0 && max < 0 ? max :\n\t\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t\t0);\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx;\n\t\t\t\tvar startAngle = this.getIndexAngle(0);\n\n\t\t\t\t// Tick Font\n\t\t\t\tvar tickFontSize = valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar tickFontStyle = valueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar tickFontFamily = valueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\t\thelpers.each(me.ticks, function(label, index) {\n\t\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\t\tif (index > 0 || tickOpts.reverse) {\n\t\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\t\tvar tickFontColor = valueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\tctx.font = tickLabelFont;\n\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(me.xCenter, me.yCenter);\n\t\t\t\t\t\t\tctx.rotate(startAngle);\n\n\t\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\t-labelWidth / 2 - tickOpts.backdropPaddingX,\n\t\t\t\t\t\t\t\t\t-yCenterOffset - tickFontSize / 2 - tickOpts.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + tickOpts.backdropPaddingX * 2,\n\t\t\t\t\t\t\t\t\ttickFontSize + tickOpts.backdropPaddingY * 2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\t\tctx.fillText(label, 0, -yCenterOffset);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (opts.angleLines.display || opts.pointLabels.display) {\n\t\t\t\t\tdrawPointLabels(me);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);\n\n};\n"],"sourceRoot":""}