/*! * Chart.js v2.9.3 * https://www.chartjs.org * (c) 2019 Chart.js Contributors * Released under the MIT License */ !(function (t, e) { "object" == typeof exports && "undefined" != typeof module ? (module.exports = e( (function () { try { return require("moment"); } catch (t) {} })() )) : "function" == typeof define && define.amd ? define(["require"], function (t) { return e( (function () { try { return t("moment"); } catch (t) {} })() ); }) : ((t = t || self).Chart = e(t.moment)); })(this, function (t) { "use strict"; t = t && t.hasOwnProperty("default") ? t.default : t; var e = { aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], grey: [128, 128, 128], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], rebeccapurple: [102, 51, 153], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50], }, n = (function (t, e) { return t((e = { exports: {} }), e.exports), e.exports; })(function (t) { var n = {}; for (var i in e) e.hasOwnProperty(i) && (n[e[i]] = i); var a = (t.exports = { rgb: { channels: 3, labels: "rgb" }, hsl: { channels: 3, labels: "hsl" }, hsv: { channels: 3, labels: "hsv" }, hwb: { channels: 3, labels: "hwb" }, cmyk: { channels: 4, labels: "cmyk" }, xyz: { channels: 3, labels: "xyz" }, lab: { channels: 3, labels: "lab" }, lch: { channels: 3, labels: "lch" }, hex: { channels: 1, labels: ["hex"] }, keyword: { channels: 1, labels: ["keyword"] }, ansi16: { channels: 1, labels: ["ansi16"] }, ansi256: { channels: 1, labels: ["ansi256"] }, hcg: { channels: 3, labels: ["h", "c", "g"] }, apple: { channels: 3, labels: ["r16", "g16", "b16"] }, gray: { channels: 1, labels: ["gray"] }, }); for (var r in a) if (a.hasOwnProperty(r)) { if (!("channels" in a[r])) throw new Error("missing channels property: " + r); if (!("labels" in a[r])) throw new Error("missing channel labels property: " + r); if (a[r].labels.length !== a[r].channels) throw new Error("channel and label counts mismatch: " + r); var o = a[r].channels, s = a[r].labels; delete a[r].channels, delete a[r].labels, Object.defineProperty(a[r], "channels", { value: o }), Object.defineProperty(a[r], "labels", { value: s }); } (a.rgb.hsl = function (t) { var e, n, i = t[0] / 255, a = t[1] / 255, r = t[2] / 255, o = Math.min(i, a, r), s = Math.max(i, a, r), l = s - o; return ( s === o ? (e = 0) : i === s ? (e = (a - r) / l) : a === s ? (e = 2 + (r - i) / l) : r === s && (e = 4 + (i - a) / l), (e = Math.min(60 * e, 360)) < 0 && (e += 360), (n = (o + s) / 2), [ e, 100 * (s === o ? 0 : n <= 0.5 ? l / (s + o) : l / (2 - s - o)), 100 * n, ] ); }), (a.rgb.hsv = function (t) { var e, n, i, a, r, o = t[0] / 255, s = t[1] / 255, l = t[2] / 255, u = Math.max(o, s, l), d = u - Math.min(o, s, l), h = function (t) { return (u - t) / 6 / d + 0.5; }; return ( 0 === d ? (a = r = 0) : ((r = d / u), (e = h(o)), (n = h(s)), (i = h(l)), o === u ? (a = i - n) : s === u ? (a = 1 / 3 + e - i) : l === u && (a = 2 / 3 + n - e), a < 0 ? (a += 1) : a > 1 && (a -= 1)), [360 * a, 100 * r, 100 * u] ); }), (a.rgb.hwb = function (t) { var e = t[0], n = t[1], i = t[2]; return [ a.rgb.hsl(t)[0], 100 * ((1 / 255) * Math.min(e, Math.min(n, i))), 100 * (i = 1 - (1 / 255) * Math.max(e, Math.max(n, i))), ]; }), (a.rgb.cmyk = function (t) { var e, n = t[0] / 255, i = t[1] / 255, a = t[2] / 255; return [ 100 * ((1 - n - (e = Math.min(1 - n, 1 - i, 1 - a))) / (1 - e) || 0), 100 * ((1 - i - e) / (1 - e) || 0), 100 * ((1 - a - e) / (1 - e) || 0), 100 * e, ]; }), (a.rgb.keyword = function (t) { var i = n[t]; if (i) return i; var a, r, o, s = 1 / 0; for (var l in e) if (e.hasOwnProperty(l)) { var u = e[l], d = ((r = t), (o = u), Math.pow(r[0] - o[0], 2) + Math.pow(r[1] - o[1], 2) + Math.pow(r[2] - o[2], 2)); d < s && ((s = d), (a = l)); } return a; }), (a.keyword.rgb = function (t) { return e[t]; }), (a.rgb.xyz = function (t) { var e = t[0] / 255, n = t[1] / 255, i = t[2] / 255; return [ 100 * (0.4124 * (e = e > 0.04045 ? Math.pow((e + 0.055) / 1.055, 2.4) : e / 12.92) + 0.3576 * (n = n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92) + 0.1805 * (i = i > 0.04045 ? Math.pow((i + 0.055) / 1.055, 2.4) : i / 12.92)), 100 * (0.2126 * e + 0.7152 * n + 0.0722 * i), 100 * (0.0193 * e + 0.1192 * n + 0.9505 * i), ]; }), (a.rgb.lab = function (t) { var e = a.rgb.xyz(t), n = e[0], i = e[1], r = e[2]; return ( (i /= 100), (r /= 108.883), (n = (n /= 95.047) > 0.008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116), [ 116 * (i = i > 0.008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116) - 16, 500 * (n - i), 200 * (i - (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116)), ] ); }), (a.hsl.rgb = function (t) { var e, n, i, a, r, o = t[0] / 360, s = t[1] / 100, l = t[2] / 100; if (0 === s) return [(r = 255 * l), r, r]; (e = 2 * l - (n = l < 0.5 ? l * (1 + s) : l + s - l * s)), (a = [0, 0, 0]); for (var u = 0; u < 3; u++) (i = o + (1 / 3) * -(u - 1)) < 0 && i++, i > 1 && i--, (r = 6 * i < 1 ? e + 6 * (n - e) * i : 2 * i < 1 ? n : 3 * i < 2 ? e + (n - e) * (2 / 3 - i) * 6 : e), (a[u] = 255 * r); return a; }), (a.hsl.hsv = function (t) { var e = t[0], n = t[1] / 100, i = t[2] / 100, a = n, r = Math.max(i, 0.01); return ( (n *= (i *= 2) <= 1 ? i : 2 - i), (a *= r <= 1 ? r : 2 - r), [ e, 100 * (0 === i ? (2 * a) / (r + a) : (2 * n) / (i + n)), 100 * ((i + n) / 2), ] ); }), (a.hsv.rgb = function (t) { var e = t[0] / 60, n = t[1] / 100, i = t[2] / 100, a = Math.floor(e) % 6, r = e - Math.floor(e), o = 255 * i * (1 - n), s = 255 * i * (1 - n * r), l = 255 * i * (1 - n * (1 - r)); switch (((i *= 255), a)) { case 0: return [i, l, o]; case 1: return [s, i, o]; case 2: return [o, i, l]; case 3: return [o, s, i]; case 4: return [l, o, i]; case 5: return [i, o, s]; } }), (a.hsv.hsl = function (t) { var e, n, i, a = t[0], r = t[1] / 100, o = t[2] / 100, s = Math.max(o, 0.01); return ( (i = (2 - r) * o), (n = r * s), [ a, 100 * (n = (n /= (e = (2 - r) * s) <= 1 ? e : 2 - e) || 0), 100 * (i /= 2), ] ); }), (a.hwb.rgb = function (t) { var e, n, i, a, r, o, s, l = t[0] / 360, u = t[1] / 100, d = t[2] / 100, h = u + d; switch ( (h > 1 && ((u /= h), (d /= h)), (i = 6 * l - (e = Math.floor(6 * l))), 0 != (1 & e) && (i = 1 - i), (a = u + i * ((n = 1 - d) - u)), e) ) { default: case 6: case 0: (r = n), (o = a), (s = u); break; case 1: (r = a), (o = n), (s = u); break; case 2: (r = u), (o = n), (s = a); break; case 3: (r = u), (o = a), (s = n); break; case 4: (r = a), (o = u), (s = n); break; case 5: (r = n), (o = u), (s = a); } return [255 * r, 255 * o, 255 * s]; }), (a.cmyk.rgb = function (t) { var e = t[0] / 100, n = t[1] / 100, i = t[2] / 100, a = t[3] / 100; return [ 255 * (1 - Math.min(1, e * (1 - a) + a)), 255 * (1 - Math.min(1, n * (1 - a) + a)), 255 * (1 - Math.min(1, i * (1 - a) + a)), ]; }), (a.xyz.rgb = function (t) { var e, n, i, a = t[0] / 100, r = t[1] / 100, o = t[2] / 100; return ( (n = -0.9689 * a + 1.8758 * r + 0.0415 * o), (i = 0.0557 * a + -0.204 * r + 1.057 * o), (e = (e = 3.2406 * a + -1.5372 * r + -0.4986 * o) > 0.0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - 0.055 : 12.92 * e), (n = n > 0.0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - 0.055 : 12.92 * n), (i = i > 0.0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - 0.055 : 12.92 * i), [ 255 * (e = Math.min(Math.max(0, e), 1)), 255 * (n = Math.min(Math.max(0, n), 1)), 255 * (i = Math.min(Math.max(0, i), 1)), ] ); }), (a.xyz.lab = function (t) { var e = t[0], n = t[1], i = t[2]; return ( (n /= 100), (i /= 108.883), (e = (e /= 95.047) > 0.008856 ? Math.pow(e, 1 / 3) : 7.787 * e + 16 / 116), [ 116 * (n = n > 0.008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116) - 16, 500 * (e - n), 200 * (n - (i = i > 0.008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116)), ] ); }), (a.lab.xyz = function (t) { var e, n, i, a = t[0]; (e = t[1] / 500 + (n = (a + 16) / 116)), (i = n - t[2] / 200); var r = Math.pow(n, 3), o = Math.pow(e, 3), s = Math.pow(i, 3); return ( (n = r > 0.008856 ? r : (n - 16 / 116) / 7.787), (e = o > 0.008856 ? o : (e - 16 / 116) / 7.787), (i = s > 0.008856 ? s : (i - 16 / 116) / 7.787), [(e *= 95.047), (n *= 100), (i *= 108.883)] ); }), (a.lab.lch = function (t) { var e, n = t[0], i = t[1], a = t[2]; return ( (e = (360 * Math.atan2(a, i)) / 2 / Math.PI) < 0 && (e += 360), [n, Math.sqrt(i * i + a * a), e] ); }), (a.lch.lab = function (t) { var e, n = t[0], i = t[1]; return ( (e = (t[2] / 360) * 2 * Math.PI), [n, i * Math.cos(e), i * Math.sin(e)] ); }), (a.rgb.ansi16 = function (t) { var e = t[0], n = t[1], i = t[2], r = 1 in arguments ? arguments[1] : a.rgb.hsv(t)[2]; if (0 === (r = Math.round(r / 50))) return 30; var o = 30 + ((Math.round(i / 255) << 2) | (Math.round(n / 255) << 1) | Math.round(e / 255)); return 2 === r && (o += 60), o; }), (a.hsv.ansi16 = function (t) { return a.rgb.ansi16(a.hsv.rgb(t), t[2]); }), (a.rgb.ansi256 = function (t) { var e = t[0], n = t[1], i = t[2]; return e === n && n === i ? e < 8 ? 16 : e > 248 ? 231 : Math.round(((e - 8) / 247) * 24) + 232 : 16 + 36 * Math.round((e / 255) * 5) + 6 * Math.round((n / 255) * 5) + Math.round((i / 255) * 5); }), (a.ansi16.rgb = function (t) { var e = t % 10; if (0 === e || 7 === e) return t > 50 && (e += 3.5), [(e = (e / 10.5) * 255), e, e]; var n = 0.5 * (1 + ~~(t > 50)); return [ (1 & e) * n * 255, ((e >> 1) & 1) * n * 255, ((e >> 2) & 1) * n * 255, ]; }), (a.ansi256.rgb = function (t) { if (t >= 232) { var e = 10 * (t - 232) + 8; return [e, e, e]; } var n; return ( (t -= 16), [ (Math.floor(t / 36) / 5) * 255, (Math.floor((n = t % 36) / 6) / 5) * 255, ((n % 6) / 5) * 255, ] ); }), (a.rgb.hex = function (t) { var e = ( ((255 & Math.round(t[0])) << 16) + ((255 & Math.round(t[1])) << 8) + (255 & Math.round(t[2])) ) .toString(16) .toUpperCase(); return "000000".substring(e.length) + e; }), (a.hex.rgb = function (t) { var e = t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); if (!e) return [0, 0, 0]; var n = e[0]; 3 === e[0].length && (n = n .split("") .map(function (t) { return t + t; }) .join("")); var i = parseInt(n, 16); return [(i >> 16) & 255, (i >> 8) & 255, 255 & i]; }), (a.rgb.hcg = function (t) { var e, n = t[0] / 255, i = t[1] / 255, a = t[2] / 255, r = Math.max(Math.max(n, i), a), o = Math.min(Math.min(n, i), a), s = r - o; return ( (e = s <= 0 ? 0 : r === n ? ((i - a) / s) % 6 : r === i ? 2 + (a - n) / s : 4 + (n - i) / s + 4), (e /= 6), [360 * (e %= 1), 100 * s, 100 * (s < 1 ? o / (1 - s) : 0)] ); }), (a.hsl.hcg = function (t) { var e = t[1] / 100, n = t[2] / 100, i = 1, a = 0; return ( (i = n < 0.5 ? 2 * e * n : 2 * e * (1 - n)) < 1 && (a = (n - 0.5 * i) / (1 - i)), [t[0], 100 * i, 100 * a] ); }), (a.hsv.hcg = function (t) { var e = t[1] / 100, n = t[2] / 100, i = e * n, a = 0; return i < 1 && (a = (n - i) / (1 - i)), [t[0], 100 * i, 100 * a]; }), (a.hcg.rgb = function (t) { var e = t[0] / 360, n = t[1] / 100, i = t[2] / 100; if (0 === n) return [255 * i, 255 * i, 255 * i]; var a, r = [0, 0, 0], o = (e % 1) * 6, s = o % 1, l = 1 - s; switch (Math.floor(o)) { case 0: (r[0] = 1), (r[1] = s), (r[2] = 0); break; case 1: (r[0] = l), (r[1] = 1), (r[2] = 0); break; case 2: (r[0] = 0), (r[1] = 1), (r[2] = s); break; case 3: (r[0] = 0), (r[1] = l), (r[2] = 1); break; case 4: (r[0] = s), (r[1] = 0), (r[2] = 1); break; default: (r[0] = 1), (r[1] = 0), (r[2] = l); } return ( (a = (1 - n) * i), [255 * (n * r[0] + a), 255 * (n * r[1] + a), 255 * (n * r[2] + a)] ); }), (a.hcg.hsv = function (t) { var e = t[1] / 100, n = e + (t[2] / 100) * (1 - e), i = 0; return n > 0 && (i = e / n), [t[0], 100 * i, 100 * n]; }), (a.hcg.hsl = function (t) { var e = t[1] / 100, n = (t[2] / 100) * (1 - e) + 0.5 * e, i = 0; return ( n > 0 && n < 0.5 ? (i = e / (2 * n)) : n >= 0.5 && n < 1 && (i = e / (2 * (1 - n))), [t[0], 100 * i, 100 * n] ); }), (a.hcg.hwb = function (t) { var e = t[1] / 100, n = e + (t[2] / 100) * (1 - e); return [t[0], 100 * (n - e), 100 * (1 - n)]; }), (a.hwb.hcg = function (t) { var e = t[1] / 100, n = 1 - t[2] / 100, i = n - e, a = 0; return i < 1 && (a = (n - i) / (1 - i)), [t[0], 100 * i, 100 * a]; }), (a.apple.rgb = function (t) { return [ (t[0] / 65535) * 255, (t[1] / 65535) * 255, (t[2] / 65535) * 255, ]; }), (a.rgb.apple = function (t) { return [ (t[0] / 255) * 65535, (t[1] / 255) * 65535, (t[2] / 255) * 65535, ]; }), (a.gray.rgb = function (t) { return [(t[0] / 100) * 255, (t[0] / 100) * 255, (t[0] / 100) * 255]; }), (a.gray.hsl = a.gray.hsv = function (t) { return [0, 0, t[0]]; }), (a.gray.hwb = function (t) { return [0, 100, t[0]]; }), (a.gray.cmyk = function (t) { return [0, 0, 0, t[0]]; }), (a.gray.lab = function (t) { return [t[0], 0, 0]; }), (a.gray.hex = function (t) { var e = 255 & Math.round((t[0] / 100) * 255), n = ((e << 16) + (e << 8) + e).toString(16).toUpperCase(); return "000000".substring(n.length) + n; }), (a.rgb.gray = function (t) { return [((t[0] + t[1] + t[2]) / 3 / 255) * 100]; }); }); n.rgb, n.hsl, n.hsv, n.hwb, n.cmyk, n.xyz, n.lab, n.lch, n.hex, n.keyword, n.ansi16, n.ansi256, n.hcg, n.apple, n.gray; function i(t) { var e = (function () { for (var t = {}, e = Object.keys(n), i = e.length, a = 0; a < i; a++) t[e[a]] = { distance: -1, parent: null }; return t; })(), i = [t]; for (e[t].distance = 0; i.length; ) for ( var a = i.pop(), r = Object.keys(n[a]), o = r.length, s = 0; s < o; s++ ) { var l = r[s], u = e[l]; -1 === u.distance && ((u.distance = e[a].distance + 1), (u.parent = a), i.unshift(l)); } return e; } function a(t, e) { return function (n) { return e(t(n)); }; } function r(t, e) { for ( var i = [e[t].parent, t], r = n[e[t].parent][t], o = e[t].parent; e[o].parent; ) i.unshift(e[o].parent), (r = a(n[e[o].parent][o], r)), (o = e[o].parent); return (r.conversion = i), r; } var o = {}; Object.keys(n).forEach(function (t) { (o[t] = {}), Object.defineProperty(o[t], "channels", { value: n[t].channels }), Object.defineProperty(o[t], "labels", { value: n[t].labels }); var e = (function (t) { for ( var e = i(t), n = {}, a = Object.keys(e), o = a.length, s = 0; s < o; s++ ) { var l = a[s]; null !== e[l].parent && (n[l] = r(l, e)); } return n; })(t); Object.keys(e).forEach(function (n) { var i = e[n]; (o[t][n] = (function (t) { var e = function (e) { if (null == e) return e; arguments.length > 1 && (e = Array.prototype.slice.call(arguments)); var n = t(e); if ("object" == typeof n) for (var i = n.length, a = 0; a < i; a++) n[a] = Math.round(n[a]); return n; }; return "conversion" in t && (e.conversion = t.conversion), e; })(i)), (o[t][n].raw = (function (t) { var e = function (e) { return null == e ? e : (arguments.length > 1 && (e = Array.prototype.slice.call(arguments)), t(e)); }; return "conversion" in t && (e.conversion = t.conversion), e; })(i)); }); }); var s = o, l = { aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], grey: [128, 128, 128], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], rebeccapurple: [102, 51, 153], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50], }, u = { getRgba: d, getHsla: h, getRgb: function (t) { var e = d(t); return e && e.slice(0, 3); }, getHsl: function (t) { var e = h(t); return e && e.slice(0, 3); }, getHwb: c, getAlpha: function (t) { var e = d(t); if (e) return e[3]; if ((e = h(t))) return e[3]; if ((e = c(t))) return e[3]; }, hexString: function (t, e) { e = void 0 !== e && 3 === t.length ? e : t[3]; return ( "#" + v(t[0]) + v(t[1]) + v(t[2]) + (e >= 0 && e < 1 ? v(Math.round(255 * e)) : "") ); }, rgbString: function (t, e) { if (e < 1 || (t[3] && t[3] < 1)) return f(t, e); return "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")"; }, rgbaString: f, percentString: function (t, e) { if (e < 1 || (t[3] && t[3] < 1)) return g(t, e); var n = Math.round((t[0] / 255) * 100), i = Math.round((t[1] / 255) * 100), a = Math.round((t[2] / 255) * 100); return "rgb(" + n + "%, " + i + "%, " + a + "%)"; }, percentaString: g, hslString: function (t, e) { if (e < 1 || (t[3] && t[3] < 1)) return p(t, e); return "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)"; }, hslaString: p, hwbString: function (t, e) { void 0 === e && (e = void 0 !== t[3] ? t[3] : 1); return ( "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")" ); }, keyword: function (t) { return b[t.slice(0, 3)]; }, }; function d(t) { if (t) { var e = [0, 0, 0], n = 1, i = t.match(/^#([a-fA-F0-9]{3,4})$/i), a = ""; if (i) { a = (i = i[1])[3]; for (var r = 0; r < e.length; r++) e[r] = parseInt(i[r] + i[r], 16); a && (n = Math.round((parseInt(a + a, 16) / 255) * 100) / 100); } else if ((i = t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i))) { (a = i[2]), (i = i[1]); for (r = 0; r < e.length; r++) e[r] = parseInt(i.slice(2 * r, 2 * r + 2), 16); a && (n = Math.round((parseInt(a, 16) / 255) * 100) / 100); } else if ( (i = t.match( /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i )) ) { for (r = 0; r < e.length; r++) e[r] = parseInt(i[r + 1]); n = parseFloat(i[4]); } else if ( (i = t.match( /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i )) ) { for (r = 0; r < e.length; r++) e[r] = Math.round(2.55 * parseFloat(i[r + 1])); n = parseFloat(i[4]); } else if ((i = t.match(/(\w+)/))) { if ("transparent" == i[1]) return [0, 0, 0, 0]; if (!(e = l[i[1]])) return; } for (r = 0; r < e.length; r++) e[r] = m(e[r], 0, 255); return (n = n || 0 == n ? m(n, 0, 1) : 1), (e[3] = n), e; } } function h(t) { if (t) { var e = t.match( /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/ ); if (e) { var n = parseFloat(e[4]); return [ m(parseInt(e[1]), 0, 360), m(parseFloat(e[2]), 0, 100), m(parseFloat(e[3]), 0, 100), m(isNaN(n) ? 1 : n, 0, 1), ]; } } } function c(t) { if (t) { var e = t.match( /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/ ); if (e) { var n = parseFloat(e[4]); return [ m(parseInt(e[1]), 0, 360), m(parseFloat(e[2]), 0, 100), m(parseFloat(e[3]), 0, 100), m(isNaN(n) ? 1 : n, 0, 1), ]; } } } function f(t, e) { return ( void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")" ); } function g(t, e) { return ( "rgba(" + Math.round((t[0] / 255) * 100) + "%, " + Math.round((t[1] / 255) * 100) + "%, " + Math.round((t[2] / 255) * 100) + "%, " + (e || t[3] || 1) + ")" ); } function p(t, e) { return ( void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")" ); } function m(t, e, n) { return Math.min(Math.max(e, t), n); } function v(t) { var e = t.toString(16).toUpperCase(); return e.length < 2 ? "0" + e : e; } var b = {}; for (var x in l) b[l[x]] = x; var y = function (t) { return t instanceof y ? t : this instanceof y ? ((this.valid = !1), (this.values = { rgb: [0, 0, 0], hsl: [0, 0, 0], hsv: [0, 0, 0], hwb: [0, 0, 0], cmyk: [0, 0, 0, 0], alpha: 1, }), void ("string" == typeof t ? (e = u.getRgba(t)) ? this.setValues("rgb", e) : (e = u.getHsla(t)) ? this.setValues("hsl", e) : (e = u.getHwb(t)) && this.setValues("hwb", e) : "object" == typeof t && (void 0 !== (e = t).r || void 0 !== e.red ? this.setValues("rgb", e) : void 0 !== e.l || void 0 !== e.lightness ? this.setValues("hsl", e) : void 0 !== e.v || void 0 !== e.value ? this.setValues("hsv", e) : void 0 !== e.w || void 0 !== e.whiteness ? this.setValues("hwb", e) : (void 0 === e.c && void 0 === e.cyan) || this.setValues("cmyk", e)))) : new y(t); var e; }; (y.prototype = { isValid: function () { return this.valid; }, rgb: function () { return this.setSpace("rgb", arguments); }, hsl: function () { return this.setSpace("hsl", arguments); }, hsv: function () { return this.setSpace("hsv", arguments); }, hwb: function () { return this.setSpace("hwb", arguments); }, cmyk: function () { return this.setSpace("cmyk", arguments); }, rgbArray: function () { return this.values.rgb; }, hslArray: function () { return this.values.hsl; }, hsvArray: function () { return this.values.hsv; }, hwbArray: function () { var t = this.values; return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb; }, cmykArray: function () { return this.values.cmyk; }, rgbaArray: function () { var t = this.values; return t.rgb.concat([t.alpha]); }, hslaArray: function () { var t = this.values; return t.hsl.concat([t.alpha]); }, alpha: function (t) { return void 0 === t ? this.values.alpha : (this.setValues("alpha", t), this); }, red: function (t) { return this.setChannel("rgb", 0, t); }, green: function (t) { return this.setChannel("rgb", 1, t); }, blue: function (t) { return this.setChannel("rgb", 2, t); }, hue: function (t) { return ( t && (t = (t %= 360) < 0 ? 360 + t : t), this.setChannel("hsl", 0, t) ); }, saturation: function (t) { return this.setChannel("hsl", 1, t); }, lightness: function (t) { return this.setChannel("hsl", 2, t); }, saturationv: function (t) { return this.setChannel("hsv", 1, t); }, whiteness: function (t) { return this.setChannel("hwb", 1, t); }, blackness: function (t) { return this.setChannel("hwb", 2, t); }, value: function (t) { return this.setChannel("hsv", 2, t); }, cyan: function (t) { return this.setChannel("cmyk", 0, t); }, magenta: function (t) { return this.setChannel("cmyk", 1, t); }, yellow: function (t) { return this.setChannel("cmyk", 2, t); }, black: function (t) { return this.setChannel("cmyk", 3, t); }, hexString: function () { return u.hexString(this.values.rgb); }, rgbString: function () { return u.rgbString(this.values.rgb, this.values.alpha); }, rgbaString: function () { return u.rgbaString(this.values.rgb, this.values.alpha); }, percentString: function () { return u.percentString(this.values.rgb, this.values.alpha); }, hslString: function () { return u.hslString(this.values.hsl, this.values.alpha); }, hslaString: function () { return u.hslaString(this.values.hsl, this.values.alpha); }, hwbString: function () { return u.hwbString(this.values.hwb, this.values.alpha); }, keyword: function () { return u.keyword(this.values.rgb, this.values.alpha); }, rgbNumber: function () { var t = this.values.rgb; return (t[0] << 16) | (t[1] << 8) | t[2]; }, luminosity: function () { for (var t = this.values.rgb, e = [], n = 0; n < t.length; n++) { var i = t[n] / 255; e[n] = i <= 0.03928 ? i / 12.92 : Math.pow((i + 0.055) / 1.055, 2.4); } return 0.2126 * e[0] + 0.7152 * e[1] + 0.0722 * e[2]; }, contrast: function (t) { var e = this.luminosity(), n = t.luminosity(); return e > n ? (e + 0.05) / (n + 0.05) : (n + 0.05) / (e + 0.05); }, level: function (t) { var e = this.contrast(t); return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : ""; }, dark: function () { var t = this.values.rgb; return (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3 < 128; }, light: function () { return !this.dark(); }, negate: function () { for (var t = [], e = 0; e < 3; e++) t[e] = 255 - this.values.rgb[e]; return this.setValues("rgb", t), this; }, lighten: function (t) { var e = this.values.hsl; return (e[2] += e[2] * t), this.setValues("hsl", e), this; }, darken: function (t) { var e = this.values.hsl; return (e[2] -= e[2] * t), this.setValues("hsl", e), this; }, saturate: function (t) { var e = this.values.hsl; return (e[1] += e[1] * t), this.setValues("hsl", e), this; }, desaturate: function (t) { var e = this.values.hsl; return (e[1] -= e[1] * t), this.setValues("hsl", e), this; }, whiten: function (t) { var e = this.values.hwb; return (e[1] += e[1] * t), this.setValues("hwb", e), this; }, blacken: function (t) { var e = this.values.hwb; return (e[2] += e[2] * t), this.setValues("hwb", e), this; }, greyscale: function () { var t = this.values.rgb, e = 0.3 * t[0] + 0.59 * t[1] + 0.11 * t[2]; return this.setValues("rgb", [e, e, e]), this; }, clearer: function (t) { var e = this.values.alpha; return this.setValues("alpha", e - e * t), this; }, opaquer: function (t) { var e = this.values.alpha; return this.setValues("alpha", e + e * t), this; }, rotate: function (t) { var e = this.values.hsl, n = (e[0] + t) % 360; return (e[0] = n < 0 ? 360 + n : n), this.setValues("hsl", e), this; }, mix: function (t, e) { var n = t, i = void 0 === e ? 0.5 : e, a = 2 * i - 1, r = this.alpha() - n.alpha(), o = ((a * r == -1 ? a : (a + r) / (1 + a * r)) + 1) / 2, s = 1 - o; return this.rgb( o * this.red() + s * n.red(), o * this.green() + s * n.green(), o * this.blue() + s * n.blue() ).alpha(this.alpha() * i + n.alpha() * (1 - i)); }, toJSON: function () { return this.rgb(); }, clone: function () { var t, e, n = new y(), i = this.values, a = n.values; for (var r in i) i.hasOwnProperty(r) && ((t = i[r]), "[object Array]" === (e = {}.toString.call(t)) ? (a[r] = t.slice(0)) : "[object Number]" === e ? (a[r] = t) : console.error("unexpected color value:", t)); return n; }, }), (y.prototype.spaces = { rgb: ["red", "green", "blue"], hsl: ["hue", "saturation", "lightness"], hsv: ["hue", "saturation", "value"], hwb: ["hue", "whiteness", "blackness"], cmyk: ["cyan", "magenta", "yellow", "black"], }), (y.prototype.maxes = { rgb: [255, 255, 255], hsl: [360, 100, 100], hsv: [360, 100, 100], hwb: [360, 100, 100], cmyk: [100, 100, 100, 100], }), (y.prototype.getValues = function (t) { for (var e = this.values, n = {}, i = 0; i < t.length; i++) n[t.charAt(i)] = e[t][i]; return 1 !== e.alpha && (n.a = e.alpha), n; }), (y.prototype.setValues = function (t, e) { var n, i, a = this.values, r = this.spaces, o = this.maxes, l = 1; if (((this.valid = !0), "alpha" === t)) l = e; else if (e.length) (a[t] = e.slice(0, t.length)), (l = e[t.length]); else if (void 0 !== e[t.charAt(0)]) { for (n = 0; n < t.length; n++) a[t][n] = e[t.charAt(n)]; l = e.a; } else if (void 0 !== e[r[t][0]]) { var u = r[t]; for (n = 0; n < t.length; n++) a[t][n] = e[u[n]]; l = e.alpha; } if ( ((a.alpha = Math.max(0, Math.min(1, void 0 === l ? a.alpha : l))), "alpha" === t) ) return !1; for (n = 0; n < t.length; n++) (i = Math.max(0, Math.min(o[t][n], a[t][n]))), (a[t][n] = Math.round(i)); for (var d in r) d !== t && (a[d] = s[t][d](a[t])); return !0; }), (y.prototype.setSpace = function (t, e) { var n = e[0]; return void 0 === n ? this.getValues(t) : ("number" == typeof n && (n = Array.prototype.slice.call(e)), this.setValues(t, n), this); }), (y.prototype.setChannel = function (t, e, n) { var i = this.values[t]; return void 0 === n ? i[e] : n === i[e] ? this : ((i[e] = n), this.setValues(t, i), this); }), "undefined" != typeof window && (window.Color = y); var _, k = y, w = { noop: function () {}, uid: ((_ = 0), function () { return _++; }), isNullOrUndef: function (t) { return null == t; }, isArray: function (t) { if (Array.isArray && Array.isArray(t)) return !0; var e = Object.prototype.toString.call(t); return "[object" === e.substr(0, 7) && "Array]" === e.substr(-6); }, isObject: function (t) { return ( null !== t && "[object Object]" === Object.prototype.toString.call(t) ); }, isFinite: function (t) { return ("number" == typeof t || t instanceof Number) && isFinite(t); }, valueOrDefault: function (t, e) { return void 0 === t ? e : t; }, valueAtIndexOrDefault: function (t, e, n) { return w.valueOrDefault(w.isArray(t) ? t[e] : t, n); }, callback: function (t, e, n) { if (t && "function" == typeof t.call) return t.apply(n, e); }, each: function (t, e, n, i) { var a, r, o; if (w.isArray(t)) if (((r = t.length), i)) for (a = r - 1; a >= 0; a--) e.call(n, t[a], a); else for (a = 0; a < r; a++) e.call(n, t[a], a); else if (w.isObject(t)) for (r = (o = Object.keys(t)).length, a = 0; a < r; a++) e.call(n, t[o[a]], o[a]); }, arrayEquals: function (t, e) { var n, i, a, r; if (!t || !e || t.length !== e.length) return !1; for (n = 0, i = t.length; n < i; ++n) if ( ((a = t[n]), (r = e[n]), a instanceof Array && r instanceof Array) ) { if (!w.arrayEquals(a, r)) return !1; } else if (a !== r) return !1; return !0; }, clone: function (t) { if (w.isArray(t)) return t.map(w.clone); if (w.isObject(t)) { for (var e = {}, n = Object.keys(t), i = n.length, a = 0; a < i; ++a) e[n[a]] = w.clone(t[n[a]]); return e; } return t; }, _merger: function (t, e, n, i) { var a = e[t], r = n[t]; w.isObject(a) && w.isObject(r) ? w.merge(a, r, i) : (e[t] = w.clone(r)); }, _mergerIf: function (t, e, n) { var i = e[t], a = n[t]; w.isObject(i) && w.isObject(a) ? w.mergeIf(i, a) : e.hasOwnProperty(t) || (e[t] = w.clone(a)); }, merge: function (t, e, n) { var i, a, r, o, s, l = w.isArray(e) ? e : [e], u = l.length; if (!w.isObject(t)) return t; for (i = (n = n || {}).merger || w._merger, a = 0; a < u; ++a) if (((e = l[a]), w.isObject(e))) for (s = 0, o = (r = Object.keys(e)).length; s < o; ++s) i(r[s], t, e, n); return t; }, mergeIf: function (t, e) { return w.merge(t, e, { merger: w._mergerIf }); }, extend: Object.assign || function (t) { return w.merge(t, [].slice.call(arguments, 1), { merger: function (t, e, n) { e[t] = n[t]; }, }); }, inherits: function (t) { var e = this, n = t && t.hasOwnProperty("constructor") ? t.constructor : function () { return e.apply(this, arguments); }, i = function () { this.constructor = n; }; return ( (i.prototype = e.prototype), (n.prototype = new i()), (n.extend = w.inherits), t && w.extend(n.prototype, t), (n.__super__ = e.prototype), n ); }, _deprecated: function (t, e, n, i) { void 0 !== e && console.warn( t + ': "' + n + '" is deprecated. Please use "' + i + '" instead' ); }, }, M = w; (w.callCallback = w.callback), (w.indexOf = function (t, e, n) { return Array.prototype.indexOf.call(t, e, n); }), (w.getValueOrDefault = w.valueOrDefault), (w.getValueAtIndexOrDefault = w.valueAtIndexOrDefault); var S = { linear: function (t) { return t; }, easeInQuad: function (t) { return t * t; }, easeOutQuad: function (t) { return -t * (t - 2); }, easeInOutQuad: function (t) { return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1); }, easeInCubic: function (t) { return t * t * t; }, easeOutCubic: function (t) { return (t -= 1) * t * t + 1; }, easeInOutCubic: function (t) { return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2); }, easeInQuart: function (t) { return t * t * t * t; }, easeOutQuart: function (t) { return -((t -= 1) * t * t * t - 1); }, easeInOutQuart: function (t) { return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2); }, easeInQuint: function (t) { return t * t * t * t * t; }, easeOutQuint: function (t) { return (t -= 1) * t * t * t * t + 1; }, easeInOutQuint: function (t) { return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2); }, easeInSine: function (t) { return 1 - Math.cos(t * (Math.PI / 2)); }, easeOutSine: function (t) { return Math.sin(t * (Math.PI / 2)); }, easeInOutSine: function (t) { return -0.5 * (Math.cos(Math.PI * t) - 1); }, easeInExpo: function (t) { return 0 === t ? 0 : Math.pow(2, 10 * (t - 1)); }, easeOutExpo: function (t) { return 1 === t ? 1 : 1 - Math.pow(2, -10 * t); }, easeInOutExpo: function (t) { return 0 === t ? 0 : 1 === t ? 1 : (t /= 0.5) < 1 ? 0.5 * Math.pow(2, 10 * (t - 1)) : 0.5 * (2 - Math.pow(2, -10 * --t)); }, easeInCirc: function (t) { return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1); }, easeOutCirc: function (t) { return Math.sqrt(1 - (t -= 1) * t); }, easeInOutCirc: function (t) { return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); }, easeInElastic: function (t) { var e = 1.70158, n = 0, i = 1; return 0 === t ? 0 : 1 === t ? 1 : (n || (n = 0.3), i < 1 ? ((i = 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), -i * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / n)); }, easeOutElastic: function (t) { var e = 1.70158, n = 0, i = 1; return 0 === t ? 0 : 1 === t ? 1 : (n || (n = 0.3), i < 1 ? ((i = 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), i * Math.pow(2, -10 * t) * Math.sin(((t - e) * (2 * Math.PI)) / n) + 1); }, easeInOutElastic: function (t) { var e = 1.70158, n = 0, i = 1; return 0 === t ? 0 : 2 == (t /= 0.5) ? 1 : (n || (n = 0.45), i < 1 ? ((i = 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), t < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / n) * -0.5 : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / n) * 0.5 + 1); }, easeInBack: function (t) { var e = 1.70158; return t * t * ((e + 1) * t - e); }, easeOutBack: function (t) { var e = 1.70158; return (t -= 1) * t * ((e + 1) * t + e) + 1; }, easeInOutBack: function (t) { var e = 1.70158; return (t /= 0.5) < 1 ? t * t * ((1 + (e *= 1.525)) * t - e) * 0.5 : 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2); }, easeInBounce: function (t) { return 1 - S.easeOutBounce(1 - t); }, easeOutBounce: function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; }, easeInOutBounce: function (t) { return t < 0.5 ? 0.5 * S.easeInBounce(2 * t) : 0.5 * S.easeOutBounce(2 * t - 1) + 0.5; }, }, C = { effects: S }; M.easingEffects = S; var P = Math.PI, A = P / 180, D = 2 * P, T = P / 2, I = P / 4, F = (2 * P) / 3, L = { clear: function (t) { t.ctx.clearRect(0, 0, t.width, t.height); }, roundedRect: function (t, e, n, i, a, r) { if (r) { var o = Math.min(r, a / 2, i / 2), s = e + o, l = n + o, u = e + i - o, d = n + a - o; t.moveTo(e, l), s < u && l < d ? (t.arc(s, l, o, -P, -T), t.arc(u, l, o, -T, 0), t.arc(u, d, o, 0, T), t.arc(s, d, o, T, P)) : s < u ? (t.moveTo(s, n), t.arc(u, l, o, -T, T), t.arc(s, l, o, T, P + T)) : l < d ? (t.arc(s, l, o, -P, 0), t.arc(s, d, o, 0, P)) : t.arc(s, l, o, -P, P), t.closePath(), t.moveTo(e, n); } else t.rect(e, n, i, a); }, drawPoint: function (t, e, n, i, a, r) { var o, s, l, u, d, h = (r || 0) * A; if ( e && "object" == typeof e && ("[object HTMLImageElement]" === (o = e.toString()) || "[object HTMLCanvasElement]" === o) ) return ( t.save(), t.translate(i, a), t.rotate(h), t.drawImage(e, -e.width / 2, -e.height / 2, e.width, e.height), void t.restore() ); if (!(isNaN(n) || n <= 0)) { switch ((t.beginPath(), e)) { default: t.arc(i, a, n, 0, D), t.closePath(); break; case "triangle": t.moveTo(i + Math.sin(h) * n, a - Math.cos(h) * n), (h += F), t.lineTo(i + Math.sin(h) * n, a - Math.cos(h) * n), (h += F), t.lineTo(i + Math.sin(h) * n, a - Math.cos(h) * n), t.closePath(); break; case "rectRounded": (u = n - (d = 0.516 * n)), (s = Math.cos(h + I) * u), (l = Math.sin(h + I) * u), t.arc(i - s, a - l, d, h - P, h - T), t.arc(i + l, a - s, d, h - T, h), t.arc(i + s, a + l, d, h, h + T), t.arc(i - l, a + s, d, h + T, h + P), t.closePath(); break; case "rect": if (!r) { (u = Math.SQRT1_2 * n), t.rect(i - u, a - u, 2 * u, 2 * u); break; } h += I; case "rectRot": (s = Math.cos(h) * n), (l = Math.sin(h) * n), t.moveTo(i - s, a - l), t.lineTo(i + l, a - s), t.lineTo(i + s, a + l), t.lineTo(i - l, a + s), t.closePath(); break; case "crossRot": h += I; case "cross": (s = Math.cos(h) * n), (l = Math.sin(h) * n), t.moveTo(i - s, a - l), t.lineTo(i + s, a + l), t.moveTo(i + l, a - s), t.lineTo(i - l, a + s); break; case "star": (s = Math.cos(h) * n), (l = Math.sin(h) * n), t.moveTo(i - s, a - l), t.lineTo(i + s, a + l), t.moveTo(i + l, a - s), t.lineTo(i - l, a + s), (h += I), (s = Math.cos(h) * n), (l = Math.sin(h) * n), t.moveTo(i - s, a - l), t.lineTo(i + s, a + l), t.moveTo(i + l, a - s), t.lineTo(i - l, a + s); break; case "line": (s = Math.cos(h) * n), (l = Math.sin(h) * n), t.moveTo(i - s, a - l), t.lineTo(i + s, a + l); break; case "dash": t.moveTo(i, a), t.lineTo(i + Math.cos(h) * n, a + Math.sin(h) * n); } t.fill(), t.stroke(); } }, _isPointInArea: function (t, e) { return ( t.x > e.left - 1e-6 && t.x < e.right + 1e-6 && t.y > e.top - 1e-6 && t.y < e.bottom + 1e-6 ); }, clipArea: function (t, e) { t.save(), t.beginPath(), t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top), t.clip(); }, unclipArea: function (t) { t.restore(); }, lineTo: function (t, e, n, i) { var a = n.steppedLine; if (a) { if ("middle" === a) { var r = (e.x + n.x) / 2; t.lineTo(r, i ? n.y : e.y), t.lineTo(r, i ? e.y : n.y); } else ("after" === a && !i) || ("after" !== a && i) ? t.lineTo(e.x, n.y) : t.lineTo(n.x, e.y); t.lineTo(n.x, n.y); } else n.tension ? t.bezierCurveTo( i ? e.controlPointPreviousX : e.controlPointNextX, i ? e.controlPointPreviousY : e.controlPointNextY, i ? n.controlPointNextX : n.controlPointPreviousX, i ? n.controlPointNextY : n.controlPointPreviousY, n.x, n.y ) : t.lineTo(n.x, n.y); }, }, O = L; (M.clear = L.clear), (M.drawRoundedRectangle = function (t) { t.beginPath(), L.roundedRect.apply(L, arguments); }); var R = { _set: function (t, e) { return M.merge(this[t] || (this[t] = {}), e); }, }; R._set("global", { defaultColor: "rgba(0,0,0,0.1)", defaultFontColor: "#666", defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", defaultFontSize: 12, defaultFontStyle: "normal", defaultLineHeight: 1.2, showLines: !0, }); var z = R, N = M.valueOrDefault; var B = { toLineHeight: function (t, e) { var n = ("" + t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/); if (!n || "normal" === n[1]) return 1.2 * e; switch (((t = +n[2]), n[3])) { case "px": return t; case "%": t /= 100; } return e * t; }, toPadding: function (t) { var e, n, i, a; return ( M.isObject(t) ? ((e = +t.top || 0), (n = +t.right || 0), (i = +t.bottom || 0), (a = +t.left || 0)) : (e = n = i = a = +t || 0), { top: e, right: n, bottom: i, left: a, height: e + i, width: a + n } ); }, _parseFont: function (t) { var e = z.global, n = N(t.fontSize, e.defaultFontSize), i = { family: N(t.fontFamily, e.defaultFontFamily), lineHeight: M.options.toLineHeight( N(t.lineHeight, e.defaultLineHeight), n ), size: n, style: N(t.fontStyle, e.defaultFontStyle), weight: null, string: "", }; return ( (i.string = (function (t) { return !t || M.isNullOrUndef(t.size) || M.isNullOrUndef(t.family) ? null : (t.style ? t.style + " " : "") + (t.weight ? t.weight + " " : "") + t.size + "px " + t.family; })(i)), i ); }, resolve: function (t, e, n, i) { var a, r, o, s = !0; for (a = 0, r = t.length; a < r; ++a) if ( void 0 !== (o = t[a]) && (void 0 !== e && "function" == typeof o && ((o = o(e)), (s = !1)), void 0 !== n && M.isArray(o) && ((o = o[n]), (s = !1)), void 0 !== o) ) return i && !s && (i.cacheable = !1), o; }, }, E = { _factorize: function (t) { var e, n = [], i = Math.sqrt(t); for (e = 1; e < i; e++) t % e == 0 && (n.push(e), n.push(t / e)); return ( i === (0 | i) && n.push(i), n .sort(function (t, e) { return t - e; }) .pop(), n ); }, log10: Math.log10 || function (t) { var e = Math.log(t) * Math.LOG10E, n = Math.round(e); return t === Math.pow(10, n) ? n : e; }, }, W = E; M.log10 = E.log10; var V = M, H = C, j = O, q = B, U = W, Y = { getRtlAdapter: function (t, e, n) { return t ? (function (t, e) { return { x: function (n) { return t + t + e - n; }, setWidth: function (t) { e = t; }, textAlign: function (t) { return "center" === t ? t : "right" === t ? "left" : "right"; }, xPlus: function (t, e) { return t - e; }, leftForLtr: function (t, e) { return t - e; }, }; })(e, n) : { x: function (t) { return t; }, setWidth: function (t) {}, textAlign: function (t) { return t; }, xPlus: function (t, e) { return t + e; }, leftForLtr: function (t, e) { return t; }, }; }, overrideTextDirection: function (t, e) { var n, i; ("ltr" !== e && "rtl" !== e) || ((i = [ (n = t.canvas.style).getPropertyValue("direction"), n.getPropertyPriority("direction"), ]), n.setProperty("direction", e, "important"), (t.prevTextDirection = i)); }, restoreTextDirection: function (t) { var e = t.prevTextDirection; void 0 !== e && (delete t.prevTextDirection, t.canvas.style.setProperty("direction", e[0], e[1])); }, }; (V.easing = H), (V.canvas = j), (V.options = q), (V.math = U), (V.rtl = Y); var G = function (t) { V.extend(this, t), this.initialize.apply(this, arguments); }; V.extend(G.prototype, { _type: void 0, initialize: function () { this.hidden = !1; }, pivot: function () { var t = this; return t._view || (t._view = V.extend({}, t._model)), (t._start = {}), t; }, transition: function (t) { var e = this, n = e._model, i = e._start, a = e._view; return n && 1 !== t ? (a || (a = e._view = {}), i || (i = e._start = {}), (function (t, e, n, i) { var a, r, o, s, l, u, d, h, c, f = Object.keys(n); for (a = 0, r = f.length; a < r; ++a) if ( ((u = n[(o = f[a])]), e.hasOwnProperty(o) || (e[o] = u), (s = e[o]) !== u && "_" !== o[0]) ) { if ( (t.hasOwnProperty(o) || (t[o] = s), (d = typeof u) === typeof (l = t[o])) ) if ("string" === d) { if ((h = k(l)).valid && (c = k(u)).valid) { e[o] = c.mix(h, i).rgbString(); continue; } } else if (V.isFinite(l) && V.isFinite(u)) { e[o] = l + (u - l) * i; continue; } e[o] = u; } })(i, a, n, t), e) : ((e._view = V.extend({}, n)), (e._start = null), e); }, tooltipPosition: function () { return { x: this._model.x, y: this._model.y }; }, hasValue: function () { return V.isNumber(this._model.x) && V.isNumber(this._model.y); }, }), (G.extend = V.inherits); var X = G, K = X.extend({ chart: null, currentStep: 0, numSteps: 60, easing: "", render: null, onAnimationProgress: null, onAnimationComplete: null, }), Z = K; Object.defineProperty(K.prototype, "animationObject", { get: function () { return this; }, }), Object.defineProperty(K.prototype, "chartInstance", { get: function () { return this.chart; }, set: function (t) { this.chart = t; }, }), z._set("global", { animation: { duration: 1e3, easing: "easeOutQuart", onProgress: V.noop, onComplete: V.noop, }, }); var $ = { animations: [], request: null, addAnimation: function (t, e, n, i) { var a, r, o = this.animations; for ( e.chart = t, e.startTime = Date.now(), e.duration = n, i || (t.animating = !0), a = 0, r = o.length; a < r; ++a ) if (o[a].chart === t) return void (o[a] = e); o.push(e), 1 === o.length && this.requestAnimationFrame(); }, cancelAnimation: function (t) { var e = V.findIndex(this.animations, function (e) { return e.chart === t; }); -1 !== e && (this.animations.splice(e, 1), (t.animating = !1)); }, requestAnimationFrame: function () { var t = this; null === t.request && (t.request = V.requestAnimFrame.call(window, function () { (t.request = null), t.startDigest(); })); }, startDigest: function () { this.advance(), this.animations.length > 0 && this.requestAnimationFrame(); }, advance: function () { for (var t, e, n, i, a = this.animations, r = 0; r < a.length; ) (e = (t = a[r]).chart), (n = t.numSteps), (i = Math.floor(((Date.now() - t.startTime) / t.duration) * n) + 1), (t.currentStep = Math.min(i, n)), V.callback(t.render, [e, t], e), V.callback(t.onAnimationProgress, [t], e), t.currentStep >= n ? (V.callback(t.onAnimationComplete, [t], e), (e.animating = !1), a.splice(r, 1)) : ++r; }, }, J = V.options.resolve, Q = ["push", "pop", "shift", "splice", "unshift"]; function tt(t, e) { var n = t._chartjs; if (n) { var i = n.listeners, a = i.indexOf(e); -1 !== a && i.splice(a, 1), i.length > 0 || (Q.forEach(function (e) { delete t[e]; }), delete t._chartjs); } } var et = function (t, e) { this.initialize(t, e); }; V.extend(et.prototype, { datasetElementType: null, dataElementType: null, _datasetElementOptions: [ "backgroundColor", "borderCapStyle", "borderColor", "borderDash", "borderDashOffset", "borderJoinStyle", "borderWidth", ], _dataElementOptions: [ "backgroundColor", "borderColor", "borderWidth", "pointStyle", ], initialize: function (t, e) { var n = this; (n.chart = t), (n.index = e), n.linkScales(), n.addElements(), (n._type = n.getMeta().type); }, updateIndex: function (t) { this.index = t; }, linkScales: function () { var t = this.getMeta(), e = this.chart, n = e.scales, i = this.getDataset(), a = e.options.scales; (null !== t.xAxisID && t.xAxisID in n && !i.xAxisID) || (t.xAxisID = i.xAxisID || a.xAxes[0].id), (null !== t.yAxisID && t.yAxisID in n && !i.yAxisID) || (t.yAxisID = i.yAxisID || a.yAxes[0].id); }, getDataset: function () { return this.chart.data.datasets[this.index]; }, getMeta: function () { return this.chart.getDatasetMeta(this.index); }, getScaleForId: function (t) { return this.chart.scales[t]; }, _getValueScaleId: function () { return this.getMeta().yAxisID; }, _getIndexScaleId: function () { return this.getMeta().xAxisID; }, _getValueScale: function () { return this.getScaleForId(this._getValueScaleId()); }, _getIndexScale: function () { return this.getScaleForId(this._getIndexScaleId()); }, reset: function () { this._update(!0); }, destroy: function () { this._data && tt(this._data, this); }, createMetaDataset: function () { var t = this.datasetElementType; return t && new t({ _chart: this.chart, _datasetIndex: this.index }); }, createMetaData: function (t) { var e = this.dataElementType; return ( e && new e({ _chart: this.chart, _datasetIndex: this.index, _index: t }) ); }, addElements: function () { var t, e, n = this.getMeta(), i = this.getDataset().data || [], a = n.data; for (t = 0, e = i.length; t < e; ++t) a[t] = a[t] || this.createMetaData(t); n.dataset = n.dataset || this.createMetaDataset(); }, addElementAndReset: function (t) { var e = this.createMetaData(t); this.getMeta().data.splice(t, 0, e), this.updateElement(e, t, !0); }, buildOrUpdateElements: function () { var t, e, n = this, i = n.getDataset(), a = i.data || (i.data = []); n._data !== a && (n._data && tt(n._data, n), a && Object.isExtensible(a) && ((e = n), (t = a)._chartjs ? t._chartjs.listeners.push(e) : (Object.defineProperty(t, "_chartjs", { configurable: !0, enumerable: !1, value: { listeners: [e] }, }), Q.forEach(function (e) { var n = "onData" + e.charAt(0).toUpperCase() + e.slice(1), i = t[e]; Object.defineProperty(t, e, { configurable: !0, enumerable: !1, value: function () { var e = Array.prototype.slice.call(arguments), a = i.apply(this, e); return ( V.each(t._chartjs.listeners, function (t) { "function" == typeof t[n] && t[n].apply(t, e); }), a ); }, }); }))), (n._data = a)), n.resyncElements(); }, _configure: function () { this._config = V.merge( {}, [this.chart.options.datasets[this._type], this.getDataset()], { merger: function (t, e, n) { "_meta" !== t && "data" !== t && V._merger(t, e, n); }, } ); }, _update: function (t) { this._configure(), (this._cachedDataOpts = null), this.update(t); }, update: V.noop, transition: function (t) { for ( var e = this.getMeta(), n = e.data || [], i = n.length, a = 0; a < i; ++a ) n[a].transition(t); e.dataset && e.dataset.transition(t); }, draw: function () { var t = this.getMeta(), e = t.data || [], n = e.length, i = 0; for (t.dataset && t.dataset.draw(); i < n; ++i) e[i].draw(); }, getStyle: function (t) { var e, n = this.getMeta(), i = n.dataset; return ( this._configure(), i && void 0 === t ? (e = this._resolveDatasetElementOptions(i || {})) : ((t = t || 0), (e = this._resolveDataElementOptions(n.data[t] || {}, t))), (!1 !== e.fill && null !== e.fill) || (e.backgroundColor = e.borderColor), e ); }, _resolveDatasetElementOptions: function (t, e) { var n, i, a, r, o = this, s = o.chart, l = o._config, u = t.custom || {}, d = s.options.elements[o.datasetElementType.prototype._type] || {}, h = o._datasetElementOptions, c = {}, f = { chart: s, dataset: o.getDataset(), datasetIndex: o.index, hover: e, }; for (n = 0, i = h.length; n < i; ++n) (a = h[n]), (r = e ? "hover" + a.charAt(0).toUpperCase() + a.slice(1) : a), (c[a] = J([u[r], l[r], d[r]], f)); return c; }, _resolveDataElementOptions: function (t, e) { var n = this, i = t && t.custom, a = n._cachedDataOpts; if (a && !i) return a; var r, o, s, l, u = n.chart, d = n._config, h = u.options.elements[n.dataElementType.prototype._type] || {}, c = n._dataElementOptions, f = {}, g = { chart: u, dataIndex: e, dataset: n.getDataset(), datasetIndex: n.index, }, p = { cacheable: !i }; if (((i = i || {}), V.isArray(c))) for (o = 0, s = c.length; o < s; ++o) f[(l = c[o])] = J([i[l], d[l], h[l]], g, e, p); else for (o = 0, s = (r = Object.keys(c)).length; o < s; ++o) f[(l = r[o])] = J([i[l], d[c[l]], d[l], h[l]], g, e, p); return p.cacheable && (n._cachedDataOpts = Object.freeze(f)), f; }, removeHoverStyle: function (t) { V.merge(t._model, t.$previousStyle || {}), delete t.$previousStyle; }, setHoverStyle: function (t) { var e = this.chart.data.datasets[t._datasetIndex], n = t._index, i = t.custom || {}, a = t._model, r = V.getHoverColor; (t.$previousStyle = { backgroundColor: a.backgroundColor, borderColor: a.borderColor, borderWidth: a.borderWidth, }), (a.backgroundColor = J( [ i.hoverBackgroundColor, e.hoverBackgroundColor, r(a.backgroundColor), ], void 0, n )), (a.borderColor = J( [i.hoverBorderColor, e.hoverBorderColor, r(a.borderColor)], void 0, n )), (a.borderWidth = J( [i.hoverBorderWidth, e.hoverBorderWidth, a.borderWidth], void 0, n )); }, _removeDatasetHoverStyle: function () { var t = this.getMeta().dataset; t && this.removeHoverStyle(t); }, _setDatasetHoverStyle: function () { var t, e, n, i, a, r, o = this.getMeta().dataset, s = {}; if (o) { for ( r = o._model, a = this._resolveDatasetElementOptions(o, !0), t = 0, e = (i = Object.keys(a)).length; t < e; ++t ) (s[(n = i[t])] = r[n]), (r[n] = a[n]); o.$previousStyle = s; } }, resyncElements: function () { var t = this.getMeta(), e = this.getDataset().data, n = t.data.length, i = e.length; i < n ? t.data.splice(i, n - i) : i > n && this.insertElements(n, i - n); }, insertElements: function (t, e) { for (var n = 0; n < e; ++n) this.addElementAndReset(t + n); }, onDataPush: function () { var t = arguments.length; this.insertElements(this.getDataset().data.length - t, t); }, onDataPop: function () { this.getMeta().data.pop(); }, onDataShift: function () { this.getMeta().data.shift(); }, onDataSplice: function (t, e) { this.getMeta().data.splice(t, e), this.insertElements(t, arguments.length - 2); }, onDataUnshift: function () { this.insertElements(0, arguments.length); }, }), (et.extend = V.inherits); var nt = et, it = 2 * Math.PI; function at(t, e) { var n = e.startAngle, i = e.endAngle, a = e.pixelMargin, r = a / e.outerRadius, o = e.x, s = e.y; t.beginPath(), t.arc(o, s, e.outerRadius, n - r, i + r), e.innerRadius > a ? ((r = a / e.innerRadius), t.arc(o, s, e.innerRadius - a, i + r, n - r, !0)) : t.arc(o, s, a, i + Math.PI / 2, n - Math.PI / 2), t.closePath(), t.clip(); } function rt(t, e, n) { var i = "inner" === e.borderAlign; i ? ((t.lineWidth = 2 * e.borderWidth), (t.lineJoin = "round")) : ((t.lineWidth = e.borderWidth), (t.lineJoin = "bevel")), n.fullCircles && (function (t, e, n, i) { var a, r = n.endAngle; for ( i && ((n.endAngle = n.startAngle + it), at(t, n), (n.endAngle = r), n.endAngle === n.startAngle && n.fullCircles && ((n.endAngle += it), n.fullCircles--)), t.beginPath(), t.arc( n.x, n.y, n.innerRadius, n.startAngle + it, n.startAngle, !0 ), a = 0; a < n.fullCircles; ++a ) t.stroke(); for ( t.beginPath(), t.arc(n.x, n.y, e.outerRadius, n.startAngle, n.startAngle + it), a = 0; a < n.fullCircles; ++a ) t.stroke(); })(t, e, n, i), i && at(t, n), t.beginPath(), t.arc(n.x, n.y, e.outerRadius, n.startAngle, n.endAngle), t.arc(n.x, n.y, n.innerRadius, n.endAngle, n.startAngle, !0), t.closePath(), t.stroke(); } z._set("global", { elements: { arc: { backgroundColor: z.global.defaultColor, borderColor: "#fff", borderWidth: 2, borderAlign: "center", }, }, }); var ot = X.extend({ _type: "arc", inLabelRange: function (t) { var e = this._view; return ( !!e && Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) ); }, inRange: function (t, e) { var n = this._view; if (n) { for ( var i = V.getAngleFromPoint(n, { x: t, y: e }), a = i.angle, r = i.distance, o = n.startAngle, s = n.endAngle; s < o; ) s += it; for (; a > s; ) a -= it; for (; a < o; ) a += it; var l = a >= o && a <= s, u = r >= n.innerRadius && r <= n.outerRadius; return l && u; } return !1; }, getCenterPoint: function () { var t = this._view, e = (t.startAngle + t.endAngle) / 2, n = (t.innerRadius + t.outerRadius) / 2; return { x: t.x + Math.cos(e) * n, y: t.y + Math.sin(e) * n }; }, getArea: function () { var t = this._view; return ( Math.PI * ((t.endAngle - t.startAngle) / (2 * Math.PI)) * (Math.pow(t.outerRadius, 2) - Math.pow(t.innerRadius, 2)) ); }, tooltipPosition: function () { var t = this._view, e = t.startAngle + (t.endAngle - t.startAngle) / 2, n = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius; return { x: t.x + Math.cos(e) * n, y: t.y + Math.sin(e) * n }; }, draw: function () { var t, e = this._chart.ctx, n = this._view, i = "inner" === n.borderAlign ? 0.33 : 0, a = { x: n.x, y: n.y, innerRadius: n.innerRadius, outerRadius: Math.max(n.outerRadius - i, 0), pixelMargin: i, startAngle: n.startAngle, endAngle: n.endAngle, fullCircles: Math.floor(n.circumference / it), }; if ( (e.save(), (e.fillStyle = n.backgroundColor), (e.strokeStyle = n.borderColor), a.fullCircles) ) { for ( a.endAngle = a.startAngle + it, e.beginPath(), e.arc(a.x, a.y, a.outerRadius, a.startAngle, a.endAngle), e.arc(a.x, a.y, a.innerRadius, a.endAngle, a.startAngle, !0), e.closePath(), t = 0; t < a.fullCircles; ++t ) e.fill(); a.endAngle = a.startAngle + (n.circumference % it); } e.beginPath(), e.arc(a.x, a.y, a.outerRadius, a.startAngle, a.endAngle), e.arc(a.x, a.y, a.innerRadius, a.endAngle, a.startAngle, !0), e.closePath(), e.fill(), n.borderWidth && rt(e, n, a), e.restore(); }, }), st = V.valueOrDefault, lt = z.global.defaultColor; z._set("global", { elements: { line: { tension: 0.4, backgroundColor: lt, borderWidth: 3, borderColor: lt, borderCapStyle: "butt", borderDash: [], borderDashOffset: 0, borderJoinStyle: "miter", capBezierPoints: !0, fill: !0, }, }, }); var ut = X.extend({ _type: "line", draw: function () { var t, e, n, i = this, a = i._view, r = i._chart.ctx, o = a.spanGaps, s = i._children.slice(), l = z.global, u = l.elements.line, d = -1, h = i._loop; if (s.length) { if (i._loop) { for (t = 0; t < s.length; ++t) if ( ((e = V.previousItem(s, t)), !s[t]._view.skip && e._view.skip) ) { (s = s.slice(t).concat(s.slice(0, t))), (h = o); break; } h && s.push(s[0]); } for ( r.save(), r.lineCap = a.borderCapStyle || u.borderCapStyle, r.setLineDash && r.setLineDash(a.borderDash || u.borderDash), r.lineDashOffset = st(a.borderDashOffset, u.borderDashOffset), r.lineJoin = a.borderJoinStyle || u.borderJoinStyle, r.lineWidth = st(a.borderWidth, u.borderWidth), r.strokeStyle = a.borderColor || l.defaultColor, r.beginPath(), (n = s[0]._view).skip || (r.moveTo(n.x, n.y), (d = 0)), t = 1; t < s.length; ++t ) (n = s[t]._view), (e = -1 === d ? V.previousItem(s, t) : s[d]), n.skip || ((d !== t - 1 && !o) || -1 === d ? r.moveTo(n.x, n.y) : V.canvas.lineTo(r, e._view, n), (d = t)); h && r.closePath(), r.stroke(), r.restore(); } }, }), dt = V.valueOrDefault, ht = z.global.defaultColor; function ct(t) { var e = this._view; return !!e && Math.abs(t - e.x) < e.radius + e.hitRadius; } z._set("global", { elements: { point: { radius: 3, pointStyle: "circle", backgroundColor: ht, borderColor: ht, borderWidth: 1, hitRadius: 1, hoverRadius: 4, hoverBorderWidth: 1, }, }, }); var ft = X.extend({ _type: "point", inRange: function (t, e) { var n = this._view; return ( !!n && Math.pow(t - n.x, 2) + Math.pow(e - n.y, 2) < Math.pow(n.hitRadius + n.radius, 2) ); }, inLabelRange: ct, inXRange: ct, inYRange: function (t) { var e = this._view; return !!e && Math.abs(t - e.y) < e.radius + e.hitRadius; }, getCenterPoint: function () { var t = this._view; return { x: t.x, y: t.y }; }, getArea: function () { return Math.PI * Math.pow(this._view.radius, 2); }, tooltipPosition: function () { var t = this._view; return { x: t.x, y: t.y, padding: t.radius + t.borderWidth }; }, draw: function (t) { var e = this._view, n = this._chart.ctx, i = e.pointStyle, a = e.rotation, r = e.radius, o = e.x, s = e.y, l = z.global, u = l.defaultColor; e.skip || ((void 0 === t || V.canvas._isPointInArea(e, t)) && ((n.strokeStyle = e.borderColor || u), (n.lineWidth = dt(e.borderWidth, l.elements.point.borderWidth)), (n.fillStyle = e.backgroundColor || u), V.canvas.drawPoint(n, i, r, o, s, a))); }, }), gt = z.global.defaultColor; function pt(t) { return t && void 0 !== t.width; } function mt(t) { var e, n, i, a, r; return ( pt(t) ? ((r = t.width / 2), (e = t.x - r), (n = t.x + r), (i = Math.min(t.y, t.base)), (a = Math.max(t.y, t.base))) : ((r = t.height / 2), (e = Math.min(t.x, t.base)), (n = Math.max(t.x, t.base)), (i = t.y - r), (a = t.y + r)), { left: e, top: i, right: n, bottom: a } ); } function vt(t, e, n) { return t === e ? n : t === n ? e : t; } function bt(t, e, n) { var i, a, r, o, s = t.borderWidth, l = (function (t) { var e = t.borderSkipped, n = {}; return e ? (t.horizontal ? t.base > t.x && (e = vt(e, "left", "right")) : t.base < t.y && (e = vt(e, "bottom", "top")), (n[e] = !0), n) : n; })(t); return ( V.isObject(s) ? ((i = +s.top || 0), (a = +s.right || 0), (r = +s.bottom || 0), (o = +s.left || 0)) : (i = a = r = o = +s || 0), { t: l.top || i < 0 ? 0 : i > n ? n : i, r: l.right || a < 0 ? 0 : a > e ? e : a, b: l.bottom || r < 0 ? 0 : r > n ? n : r, l: l.left || o < 0 ? 0 : o > e ? e : o, } ); } function xt(t, e, n) { var i = null === e, a = null === n, r = !(!t || (i && a)) && mt(t); return ( r && (i || (e >= r.left && e <= r.right)) && (a || (n >= r.top && n <= r.bottom)) ); } z._set("global", { elements: { rectangle: { backgroundColor: gt, borderColor: gt, borderSkipped: "bottom", borderWidth: 0, }, }, }); var yt = X.extend({ _type: "rectangle", draw: function () { var t = this._chart.ctx, e = this._view, n = (function (t) { var e = mt(t), n = e.right - e.left, i = e.bottom - e.top, a = bt(t, n / 2, i / 2); return { outer: { x: e.left, y: e.top, w: n, h: i }, inner: { x: e.left + a.l, y: e.top + a.t, w: n - a.l - a.r, h: i - a.t - a.b, }, }; })(e), i = n.outer, a = n.inner; (t.fillStyle = e.backgroundColor), t.fillRect(i.x, i.y, i.w, i.h), (i.w === a.w && i.h === a.h) || (t.save(), t.beginPath(), t.rect(i.x, i.y, i.w, i.h), t.clip(), (t.fillStyle = e.borderColor), t.rect(a.x, a.y, a.w, a.h), t.fill("evenodd"), t.restore()); }, height: function () { var t = this._view; return t.base - t.y; }, inRange: function (t, e) { return xt(this._view, t, e); }, inLabelRange: function (t, e) { var n = this._view; return pt(n) ? xt(n, t, null) : xt(n, null, e); }, inXRange: function (t) { return xt(this._view, t, null); }, inYRange: function (t) { return xt(this._view, null, t); }, getCenterPoint: function () { var t, e, n = this._view; return ( pt(n) ? ((t = n.x), (e = (n.y + n.base) / 2)) : ((t = (n.x + n.base) / 2), (e = n.y)), { x: t, y: e } ); }, getArea: function () { var t = this._view; return pt(t) ? t.width * Math.abs(t.y - t.base) : t.height * Math.abs(t.x - t.base); }, tooltipPosition: function () { var t = this._view; return { x: t.x, y: t.y }; }, }), _t = {}, kt = ot, wt = ut, Mt = ft, St = yt; (_t.Arc = kt), (_t.Line = wt), (_t.Point = Mt), (_t.Rectangle = St); var Ct = V._deprecated, Pt = V.valueOrDefault; function At(t, e, n) { var i, a, r = n.barThickness, o = e.stackCount, s = e.pixels[t], l = V.isNullOrUndef(r) ? (function (t, e) { var n, i, a, r, o = t._length; for (a = 1, r = e.length; a < r; ++a) o = Math.min(o, Math.abs(e[a] - e[a - 1])); for (a = 0, r = t.getTicks().length; a < r; ++a) (i = t.getPixelForTick(a)), (o = a > 0 ? Math.min(o, Math.abs(i - n)) : o), (n = i); return o; })(e.scale, e.pixels) : -1; return ( V.isNullOrUndef(r) ? ((i = l * n.categoryPercentage), (a = n.barPercentage)) : ((i = r * o), (a = 1)), { chunk: i / o, ratio: a, start: s - i / 2 } ); } z._set("bar", { hover: { mode: "label" }, scales: { xAxes: [ { type: "category", offset: !0, gridLines: { offsetGridLines: !0 } }, ], yAxes: [{ type: "linear" }], }, }), z._set("global", { datasets: { bar: { categoryPercentage: 0.8, barPercentage: 0.9 } }, }); var Dt = nt.extend({ dataElementType: _t.Rectangle, _dataElementOptions: [ "backgroundColor", "borderColor", "borderSkipped", "borderWidth", "barPercentage", "barThickness", "categoryPercentage", "maxBarThickness", "minBarLength", ], initialize: function () { var t, e, n = this; nt.prototype.initialize.apply(n, arguments), ((t = n.getMeta()).stack = n.getDataset().stack), (t.bar = !0), (e = n._getIndexScale().options), Ct( "bar chart", e.barPercentage, "scales.[x/y]Axes.barPercentage", "dataset.barPercentage" ), Ct( "bar chart", e.barThickness, "scales.[x/y]Axes.barThickness", "dataset.barThickness" ), Ct( "bar chart", e.categoryPercentage, "scales.[x/y]Axes.categoryPercentage", "dataset.categoryPercentage" ), Ct( "bar chart", n._getValueScale().options.minBarLength, "scales.[x/y]Axes.minBarLength", "dataset.minBarLength" ), Ct( "bar chart", e.maxBarThickness, "scales.[x/y]Axes.maxBarThickness", "dataset.maxBarThickness" ); }, update: function (t) { var e, n, i = this.getMeta().data; for (this._ruler = this.getRuler(), e = 0, n = i.length; e < n; ++e) this.updateElement(i[e], e, t); }, updateElement: function (t, e, n) { var i = this, a = i.getMeta(), r = i.getDataset(), o = i._resolveDataElementOptions(t, e); (t._xScale = i.getScaleForId(a.xAxisID)), (t._yScale = i.getScaleForId(a.yAxisID)), (t._datasetIndex = i.index), (t._index = e), (t._model = { backgroundColor: o.backgroundColor, borderColor: o.borderColor, borderSkipped: o.borderSkipped, borderWidth: o.borderWidth, datasetLabel: r.label, label: i.chart.data.labels[e], }), V.isArray(r.data[e]) && (t._model.borderSkipped = null), i._updateElementGeometry(t, e, n, o), t.pivot(); }, _updateElementGeometry: function (t, e, n, i) { var a = this, r = t._model, o = a._getValueScale(), s = o.getBasePixel(), l = o.isHorizontal(), u = a._ruler || a.getRuler(), d = a.calculateBarValuePixels(a.index, e, i), h = a.calculateBarIndexPixels(a.index, e, u, i); (r.horizontal = l), (r.base = n ? s : d.base), (r.x = l ? (n ? s : d.head) : h.center), (r.y = l ? h.center : n ? s : d.head), (r.height = l ? h.size : void 0), (r.width = l ? void 0 : h.size); }, _getStacks: function (t) { var e, n, i = this._getIndexScale(), a = i._getMatchingVisibleMetas(this._type), r = i.options.stacked, o = a.length, s = []; for ( e = 0; e < o && ((n = a[e]), (!1 === r || -1 === s.indexOf(n.stack) || (void 0 === r && void 0 === n.stack)) && s.push(n.stack), n.index !== t); ++e ); return s; }, getStackCount: function () { return this._getStacks().length; }, getStackIndex: function (t, e) { var n = this._getStacks(t), i = void 0 !== e ? n.indexOf(e) : -1; return -1 === i ? n.length - 1 : i; }, getRuler: function () { var t, e, n = this._getIndexScale(), i = []; for (t = 0, e = this.getMeta().data.length; t < e; ++t) i.push(n.getPixelForValue(null, t, this.index)); return { pixels: i, start: n._startPixel, end: n._endPixel, stackCount: this.getStackCount(), scale: n, }; }, calculateBarValuePixels: function (t, e, n) { var i, a, r, o, s, l, u, d = this.chart, h = this._getValueScale(), c = h.isHorizontal(), f = d.data.datasets, g = h._getMatchingVisibleMetas(this._type), p = h._parseValue(f[t].data[e]), m = n.minBarLength, v = h.options.stacked, b = this.getMeta().stack, x = void 0 === p.start ? 0 : p.max >= 0 && p.min >= 0 ? p.min : p.max, y = void 0 === p.start ? p.end : p.max >= 0 && p.min >= 0 ? p.max - p.min : p.min - p.max, _ = g.length; if (v || (void 0 === v && void 0 !== b)) for (i = 0; i < _ && (a = g[i]).index !== t; ++i) a.stack === b && ((r = void 0 === (u = h._parseValue(f[a.index].data[e])).start ? u.end : u.min >= 0 && u.max >= 0 ? u.max : u.min), ((p.min < 0 && r < 0) || (p.max >= 0 && r > 0)) && (x += r)); return ( (o = h.getPixelForValue(x)), (l = (s = h.getPixelForValue(x + y)) - o), void 0 !== m && Math.abs(l) < m && ((l = m), (s = (y >= 0 && !c) || (y < 0 && c) ? o - m : o + m)), { size: l, base: o, head: s, center: s + l / 2 } ); }, calculateBarIndexPixels: function (t, e, n, i) { var a = "flex" === i.barThickness ? (function (t, e, n) { var i, a = e.pixels, r = a[t], o = t > 0 ? a[t - 1] : null, s = t < a.length - 1 ? a[t + 1] : null, l = n.categoryPercentage; return ( null === o && (o = r - (null === s ? e.end - e.start : s - r)), null === s && (s = r + r - o), (i = r - ((r - Math.min(o, s)) / 2) * l), { chunk: ((Math.abs(s - o) / 2) * l) / e.stackCount, ratio: n.barPercentage, start: i, } ); })(e, n, i) : At(e, n, i), r = this.getStackIndex(t, this.getMeta().stack), o = a.start + a.chunk * r + a.chunk / 2, s = Math.min(Pt(i.maxBarThickness, 1 / 0), a.chunk * a.ratio); return { base: o - s / 2, head: o + s / 2, center: o, size: s }; }, draw: function () { var t = this.chart, e = this._getValueScale(), n = this.getMeta().data, i = this.getDataset(), a = n.length, r = 0; for (V.canvas.clipArea(t.ctx, t.chartArea); r < a; ++r) { var o = e._parseValue(i.data[r]); isNaN(o.min) || isNaN(o.max) || n[r].draw(); } V.canvas.unclipArea(t.ctx); }, _resolveDataElementOptions: function () { var t = this, e = V.extend( {}, nt.prototype._resolveDataElementOptions.apply(t, arguments) ), n = t._getIndexScale().options, i = t._getValueScale().options; return ( (e.barPercentage = Pt(n.barPercentage, e.barPercentage)), (e.barThickness = Pt(n.barThickness, e.barThickness)), (e.categoryPercentage = Pt( n.categoryPercentage, e.categoryPercentage )), (e.maxBarThickness = Pt(n.maxBarThickness, e.maxBarThickness)), (e.minBarLength = Pt(i.minBarLength, e.minBarLength)), e ); }, }), Tt = V.valueOrDefault, It = V.options.resolve; z._set("bubble", { hover: { mode: "single" }, scales: { xAxes: [{ type: "linear", position: "bottom", id: "x-axis-0" }], yAxes: [{ type: "linear", position: "left", id: "y-axis-0" }], }, tooltips: { callbacks: { title: function () { return ""; }, label: function (t, e) { var n = e.datasets[t.datasetIndex].label || "", i = e.datasets[t.datasetIndex].data[t.index]; return n + ": (" + t.xLabel + ", " + t.yLabel + ", " + i.r + ")"; }, }, }, }); var Ft = nt.extend({ dataElementType: _t.Point, _dataElementOptions: [ "backgroundColor", "borderColor", "borderWidth", "hoverBackgroundColor", "hoverBorderColor", "hoverBorderWidth", "hoverRadius", "hitRadius", "pointStyle", "rotation", ], update: function (t) { var e = this, n = e.getMeta().data; V.each(n, function (n, i) { e.updateElement(n, i, t); }); }, updateElement: function (t, e, n) { var i = this, a = i.getMeta(), r = t.custom || {}, o = i.getScaleForId(a.xAxisID), s = i.getScaleForId(a.yAxisID), l = i._resolveDataElementOptions(t, e), u = i.getDataset().data[e], d = i.index, h = n ? o.getPixelForDecimal(0.5) : o.getPixelForValue("object" == typeof u ? u : NaN, e, d), c = n ? s.getBasePixel() : s.getPixelForValue(u, e, d); (t._xScale = o), (t._yScale = s), (t._options = l), (t._datasetIndex = d), (t._index = e), (t._model = { backgroundColor: l.backgroundColor, borderColor: l.borderColor, borderWidth: l.borderWidth, hitRadius: l.hitRadius, pointStyle: l.pointStyle, rotation: l.rotation, radius: n ? 0 : l.radius, skip: r.skip || isNaN(h) || isNaN(c), x: h, y: c, }), t.pivot(); }, setHoverStyle: function (t) { var e = t._model, n = t._options, i = V.getHoverColor; (t.$previousStyle = { backgroundColor: e.backgroundColor, borderColor: e.borderColor, borderWidth: e.borderWidth, radius: e.radius, }), (e.backgroundColor = Tt( n.hoverBackgroundColor, i(n.backgroundColor) )), (e.borderColor = Tt(n.hoverBorderColor, i(n.borderColor))), (e.borderWidth = Tt(n.hoverBorderWidth, n.borderWidth)), (e.radius = n.radius + n.hoverRadius); }, _resolveDataElementOptions: function (t, e) { var n = this, i = n.chart, a = n.getDataset(), r = t.custom || {}, o = a.data[e] || {}, s = nt.prototype._resolveDataElementOptions.apply(n, arguments), l = { chart: i, dataIndex: e, dataset: a, datasetIndex: n.index }; return ( n._cachedDataOpts === s && (s = V.extend({}, s)), (s.radius = It( [r.radius, o.r, n._config.radius, i.options.elements.point.radius], l, e )), s ); }, }), Lt = V.valueOrDefault, Ot = Math.PI, Rt = 2 * Ot, zt = Ot / 2; z._set("doughnut", { animation: { animateRotate: !0, animateScale: !1 }, hover: { mode: "single" }, legendCallback: function (t) { var e, n, i, a = document.createElement("ul"), r = t.data, o = r.datasets, s = r.labels; if ((a.setAttribute("class", t.id + "-legend"), o.length)) for (e = 0, n = o[0].data.length; e < n; ++e) ((i = a.appendChild(document.createElement("li"))).appendChild( document.createElement("span") ).style.backgroundColor = o[0].backgroundColor[e]), s[e] && i.appendChild(document.createTextNode(s[e])); return a.outerHTML; }, legend: { labels: { generateLabels: function (t) { var e = t.data; return e.labels.length && e.datasets.length ? e.labels.map(function (n, i) { var a = t.getDatasetMeta(0), r = a.controller.getStyle(i); return { text: n, fillStyle: r.backgroundColor, strokeStyle: r.borderColor, lineWidth: r.borderWidth, hidden: isNaN(e.datasets[0].data[i]) || a.data[i].hidden, index: i, }; }) : []; }, }, onClick: function (t, e) { var n, i, a, r = e.index, o = this.chart; for (n = 0, i = (o.data.datasets || []).length; n < i; ++n) (a = o.getDatasetMeta(n)).data[r] && (a.data[r].hidden = !a.data[r].hidden); o.update(); }, }, cutoutPercentage: 50, rotation: -zt, circumference: Rt, tooltips: { callbacks: { title: function () { return ""; }, label: function (t, e) { var n = e.labels[t.index], i = ": " + e.datasets[t.datasetIndex].data[t.index]; return V.isArray(n) ? ((n = n.slice())[0] += i) : (n += i), n; }, }, }, }); var Nt = nt.extend({ dataElementType: _t.Arc, linkScales: V.noop, _dataElementOptions: [ "backgroundColor", "borderColor", "borderWidth", "borderAlign", "hoverBackgroundColor", "hoverBorderColor", "hoverBorderWidth", ], getRingIndex: function (t) { for (var e = 0, n = 0; n < t; ++n) this.chart.isDatasetVisible(n) && ++e; return e; }, update: function (t) { var e, n, i, a, r = this, o = r.chart, s = o.chartArea, l = o.options, u = 1, d = 1, h = 0, c = 0, f = r.getMeta(), g = f.data, p = l.cutoutPercentage / 100 || 0, m = l.circumference, v = r._getRingWeight(r.index); if (m < Rt) { var b = l.rotation % Rt, x = (b += b >= Ot ? -Rt : b < -Ot ? Rt : 0) + m, y = Math.cos(b), _ = Math.sin(b), k = Math.cos(x), w = Math.sin(x), M = (b <= 0 && x >= 0) || x >= Rt, S = (b <= zt && x >= zt) || x >= Rt + zt, C = (b <= -zt && x >= -zt) || x >= Ot + zt, P = b === -Ot || x >= Ot ? -1 : Math.min(y, y * p, k, k * p), A = C ? -1 : Math.min(_, _ * p, w, w * p), D = M ? 1 : Math.max(y, y * p, k, k * p), T = S ? 1 : Math.max(_, _ * p, w, w * p); (u = (D - P) / 2), (d = (T - A) / 2), (h = -(D + P) / 2), (c = -(T + A) / 2); } for (i = 0, a = g.length; i < a; ++i) g[i]._options = r._resolveDataElementOptions(g[i], i); for ( o.borderWidth = r.getMaxBorderWidth(), e = (s.right - s.left - o.borderWidth) / u, n = (s.bottom - s.top - o.borderWidth) / d, o.outerRadius = Math.max(Math.min(e, n) / 2, 0), o.innerRadius = Math.max(o.outerRadius * p, 0), o.radiusLength = (o.outerRadius - o.innerRadius) / (r._getVisibleDatasetWeightTotal() || 1), o.offsetX = h * o.outerRadius, o.offsetY = c * o.outerRadius, f.total = r.calculateTotal(), r.outerRadius = o.outerRadius - o.radiusLength * r._getRingWeightOffset(r.index), r.innerRadius = Math.max(r.outerRadius - o.radiusLength * v, 0), i = 0, a = g.length; i < a; ++i ) r.updateElement(g[i], i, t); }, updateElement: function (t, e, n) { var i = this, a = i.chart, r = a.chartArea, o = a.options, s = o.animation, l = (r.left + r.right) / 2, u = (r.top + r.bottom) / 2, d = o.rotation, h = o.rotation, c = i.getDataset(), f = n && s.animateRotate ? 0 : t.hidden ? 0 : i.calculateCircumference(c.data[e]) * (o.circumference / Rt), g = n && s.animateScale ? 0 : i.innerRadius, p = n && s.animateScale ? 0 : i.outerRadius, m = t._options || {}; V.extend(t, { _datasetIndex: i.index, _index: e, _model: { backgroundColor: m.backgroundColor, borderColor: m.borderColor, borderWidth: m.borderWidth, borderAlign: m.borderAlign, x: l + a.offsetX, y: u + a.offsetY, startAngle: d, endAngle: h, circumference: f, outerRadius: p, innerRadius: g, label: V.valueAtIndexOrDefault(c.label, e, a.data.labels[e]), }, }); var v = t._model; (n && s.animateRotate) || ((v.startAngle = 0 === e ? o.rotation : i.getMeta().data[e - 1]._model.endAngle), (v.endAngle = v.startAngle + v.circumference)), t.pivot(); }, calculateTotal: function () { var t, e = this.getDataset(), n = this.getMeta(), i = 0; return ( V.each(n.data, function (n, a) { (t = e.data[a]), isNaN(t) || n.hidden || (i += Math.abs(t)); }), i ); }, calculateCircumference: function (t) { var e = this.getMeta().total; return e > 0 && !isNaN(t) ? Rt * (Math.abs(t) / e) : 0; }, getMaxBorderWidth: function (t) { var e, n, i, a, r, o, s, l, u = 0, d = this.chart; if (!t) for (e = 0, n = d.data.datasets.length; e < n; ++e) if (d.isDatasetVisible(e)) { (t = (i = d.getDatasetMeta(e)).data), e !== this.index && (r = i.controller); break; } if (!t) return 0; for (e = 0, n = t.length; e < n; ++e) (a = t[e]), r ? (r._configure(), (o = r._resolveDataElementOptions(a, e))) : (o = a._options), "inner" !== o.borderAlign && ((s = o.borderWidth), (u = (l = o.hoverBorderWidth) > (u = s > u ? s : u) ? l : u)); return u; }, setHoverStyle: function (t) { var e = t._model, n = t._options, i = V.getHoverColor; (t.$previousStyle = { backgroundColor: e.backgroundColor, borderColor: e.borderColor, borderWidth: e.borderWidth, }), (e.backgroundColor = Lt(n.hoverBackgroundColor, i(n.backgroundColor))), (e.borderColor = Lt(n.hoverBorderColor, i(n.borderColor))), (e.borderWidth = Lt(n.hoverBorderWidth, n.borderWidth)); }, _getRingWeightOffset: function (t) { for (var e = 0, n = 0; n < t; ++n) this.chart.isDatasetVisible(n) && (e += this._getRingWeight(n)); return e; }, _getRingWeight: function (t) { return Math.max(Lt(this.chart.data.datasets[t].weight, 1), 0); }, _getVisibleDatasetWeightTotal: function () { return this._getRingWeightOffset(this.chart.data.datasets.length); }, }); z._set("horizontalBar", { hover: { mode: "index", axis: "y" }, scales: { xAxes: [{ type: "linear", position: "bottom" }], yAxes: [ { type: "category", position: "left", offset: !0, gridLines: { offsetGridLines: !0 }, }, ], }, elements: { rectangle: { borderSkipped: "left" } }, tooltips: { mode: "index", axis: "y" }, }), z._set("global", { datasets: { horizontalBar: { categoryPercentage: 0.8, barPercentage: 0.9 }, }, }); var Bt = Dt.extend({ _getValueScaleId: function () { return this.getMeta().xAxisID; }, _getIndexScaleId: function () { return this.getMeta().yAxisID; }, }), Et = V.valueOrDefault, Wt = V.options.resolve, Vt = V.canvas._isPointInArea; function Ht(t, e) { var n = (t && t.options.ticks) || {}, i = n.reverse, a = void 0 === n.min ? e : 0, r = void 0 === n.max ? e : 0; return { start: i ? r : a, end: i ? a : r }; } function jt(t, e, n) { var i = n / 2, a = Ht(t, i), r = Ht(e, i); return { top: r.end, right: a.end, bottom: r.start, left: a.start }; } function qt(t) { var e, n, i, a; return ( V.isObject(t) ? ((e = t.top), (n = t.right), (i = t.bottom), (a = t.left)) : (e = n = i = a = t), { top: e, right: n, bottom: i, left: a } ); } z._set("line", { showLines: !0, spanGaps: !1, hover: { mode: "label" }, scales: { xAxes: [{ type: "category", id: "x-axis-0" }], yAxes: [{ type: "linear", id: "y-axis-0" }], }, }); var Ut = nt.extend({ datasetElementType: _t.Line, dataElementType: _t.Point, _datasetElementOptions: [ "backgroundColor", "borderCapStyle", "borderColor", "borderDash", "borderDashOffset", "borderJoinStyle", "borderWidth", "cubicInterpolationMode", "fill", ], _dataElementOptions: { backgroundColor: "pointBackgroundColor", borderColor: "pointBorderColor", borderWidth: "pointBorderWidth", hitRadius: "pointHitRadius", hoverBackgroundColor: "pointHoverBackgroundColor", hoverBorderColor: "pointHoverBorderColor", hoverBorderWidth: "pointHoverBorderWidth", hoverRadius: "pointHoverRadius", pointStyle: "pointStyle", radius: "pointRadius", rotation: "pointRotation", }, update: function (t) { var e, n, i = this, a = i.getMeta(), r = a.dataset, o = a.data || [], s = i.chart.options, l = i._config, u = (i._showLine = Et(l.showLine, s.showLines)); for ( i._xScale = i.getScaleForId(a.xAxisID), i._yScale = i.getScaleForId(a.yAxisID), u && (void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), (r._scale = i._yScale), (r._datasetIndex = i.index), (r._children = o), (r._model = i._resolveDatasetElementOptions(r)), r.pivot()), e = 0, n = o.length; e < n; ++e ) i.updateElement(o[e], e, t); for ( u && 0 !== r._model.tension && i.updateBezierControlPoints(), e = 0, n = o.length; e < n; ++e ) o[e].pivot(); }, updateElement: function (t, e, n) { var i, a, r = this, o = r.getMeta(), s = t.custom || {}, l = r.getDataset(), u = r.index, d = l.data[e], h = r._xScale, c = r._yScale, f = o.dataset._model, g = r._resolveDataElementOptions(t, e); (i = h.getPixelForValue("object" == typeof d ? d : NaN, e, u)), (a = n ? c.getBasePixel() : r.calculatePointY(d, e, u)), (t._xScale = h), (t._yScale = c), (t._options = g), (t._datasetIndex = u), (t._index = e), (t._model = { x: i, y: a, skip: s.skip || isNaN(i) || isNaN(a), radius: g.radius, pointStyle: g.pointStyle, rotation: g.rotation, backgroundColor: g.backgroundColor, borderColor: g.borderColor, borderWidth: g.borderWidth, tension: Et(s.tension, f ? f.tension : 0), steppedLine: !!f && f.steppedLine, hitRadius: g.hitRadius, }); }, _resolveDatasetElementOptions: function (t) { var e = this, n = e._config, i = t.custom || {}, a = e.chart.options, r = a.elements.line, o = nt.prototype._resolveDatasetElementOptions.apply(e, arguments); return ( (o.spanGaps = Et(n.spanGaps, a.spanGaps)), (o.tension = Et(n.lineTension, r.tension)), (o.steppedLine = Wt([i.steppedLine, n.steppedLine, r.stepped])), (o.clip = qt(Et(n.clip, jt(e._xScale, e._yScale, o.borderWidth)))), o ); }, calculatePointY: function (t, e, n) { var i, a, r, o, s, l, u, d = this.chart, h = this._yScale, c = 0, f = 0; if (h.options.stacked) { for ( s = +h.getRightValue(t), u = (l = d._getSortedVisibleDatasetMetas()).length, i = 0; i < u && (r = l[i]).index !== n; ++i ) (a = d.data.datasets[r.index]), "line" === r.type && r.yAxisID === h.id && ((o = +h.getRightValue(a.data[e])) < 0 ? (f += o || 0) : (c += o || 0)); return s < 0 ? h.getPixelForValue(f + s) : h.getPixelForValue(c + s); } return h.getPixelForValue(t); }, updateBezierControlPoints: function () { var t, e, n, i, a = this.chart, r = this.getMeta(), o = r.dataset._model, s = a.chartArea, l = r.data || []; function u(t, e, n) { return Math.max(Math.min(t, n), e); } if ( (o.spanGaps && (l = l.filter(function (t) { return !t._model.skip; })), "monotone" === o.cubicInterpolationMode) ) V.splineCurveMonotone(l); else for (t = 0, e = l.length; t < e; ++t) (n = l[t]._model), (i = V.splineCurve( V.previousItem(l, t)._model, n, V.nextItem(l, t)._model, o.tension )), (n.controlPointPreviousX = i.previous.x), (n.controlPointPreviousY = i.previous.y), (n.controlPointNextX = i.next.x), (n.controlPointNextY = i.next.y); if (a.options.elements.line.capBezierPoints) for (t = 0, e = l.length; t < e; ++t) (n = l[t]._model), Vt(n, s) && (t > 0 && Vt(l[t - 1]._model, s) && ((n.controlPointPreviousX = u( n.controlPointPreviousX, s.left, s.right )), (n.controlPointPreviousY = u( n.controlPointPreviousY, s.top, s.bottom ))), t < l.length - 1 && Vt(l[t + 1]._model, s) && ((n.controlPointNextX = u( n.controlPointNextX, s.left, s.right )), (n.controlPointNextY = u( n.controlPointNextY, s.top, s.bottom )))); }, draw: function () { var t, e = this.chart, n = this.getMeta(), i = n.data || [], a = e.chartArea, r = e.canvas, o = 0, s = i.length; for ( this._showLine && ((t = n.dataset._model.clip), V.canvas.clipArea(e.ctx, { left: !1 === t.left ? 0 : a.left - t.left, right: !1 === t.right ? r.width : a.right + t.right, top: !1 === t.top ? 0 : a.top - t.top, bottom: !1 === t.bottom ? r.height : a.bottom + t.bottom, }), n.dataset.draw(), V.canvas.unclipArea(e.ctx)); o < s; ++o ) i[o].draw(a); }, setHoverStyle: function (t) { var e = t._model, n = t._options, i = V.getHoverColor; (t.$previousStyle = { backgroundColor: e.backgroundColor, borderColor: e.borderColor, borderWidth: e.borderWidth, radius: e.radius, }), (e.backgroundColor = Et( n.hoverBackgroundColor, i(n.backgroundColor) )), (e.borderColor = Et(n.hoverBorderColor, i(n.borderColor))), (e.borderWidth = Et(n.hoverBorderWidth, n.borderWidth)), (e.radius = Et(n.hoverRadius, n.radius)); }, }), Yt = V.options.resolve; z._set("polarArea", { scale: { type: "radialLinear", angleLines: { display: !1 }, gridLines: { circular: !0 }, pointLabels: { display: !1 }, ticks: { beginAtZero: !0 }, }, animation: { animateRotate: !0, animateScale: !0 }, startAngle: -0.5 * Math.PI, legendCallback: function (t) { var e, n, i, a = document.createElement("ul"), r = t.data, o = r.datasets, s = r.labels; if ((a.setAttribute("class", t.id + "-legend"), o.length)) for (e = 0, n = o[0].data.length; e < n; ++e) ((i = a.appendChild(document.createElement("li"))).appendChild( document.createElement("span") ).style.backgroundColor = o[0].backgroundColor[e]), s[e] && i.appendChild(document.createTextNode(s[e])); return a.outerHTML; }, legend: { labels: { generateLabels: function (t) { var e = t.data; return e.labels.length && e.datasets.length ? e.labels.map(function (n, i) { var a = t.getDatasetMeta(0), r = a.controller.getStyle(i); return { text: n, fillStyle: r.backgroundColor, strokeStyle: r.borderColor, lineWidth: r.borderWidth, hidden: isNaN(e.datasets[0].data[i]) || a.data[i].hidden, index: i, }; }) : []; }, }, onClick: function (t, e) { var n, i, a, r = e.index, o = this.chart; for (n = 0, i = (o.data.datasets || []).length; n < i; ++n) (a = o.getDatasetMeta(n)).data[r].hidden = !a.data[r].hidden; o.update(); }, }, tooltips: { callbacks: { title: function () { return ""; }, label: function (t, e) { return e.labels[t.index] + ": " + t.yLabel; }, }, }, }); var Gt = nt.extend({ dataElementType: _t.Arc, linkScales: V.noop, _dataElementOptions: [ "backgroundColor", "borderColor", "borderWidth", "borderAlign", "hoverBackgroundColor", "hoverBorderColor", "hoverBorderWidth", ], _getIndexScaleId: function () { return this.chart.scale.id; }, _getValueScaleId: function () { return this.chart.scale.id; }, update: function (t) { var e, n, i, a = this, r = a.getDataset(), o = a.getMeta(), s = a.chart.options.startAngle || 0, l = (a._starts = []), u = (a._angles = []), d = o.data; for ( a._updateRadius(), o.count = a.countVisibleElements(), e = 0, n = r.data.length; e < n; e++ ) (l[e] = s), (i = a._computeAngle(e)), (u[e] = i), (s += i); for (e = 0, n = d.length; e < n; ++e) (d[e]._options = a._resolveDataElementOptions(d[e], e)), a.updateElement(d[e], e, t); }, _updateRadius: function () { var t = this, e = t.chart, n = e.chartArea, i = e.options, a = Math.min(n.right - n.left, n.bottom - n.top); (e.outerRadius = Math.max(a / 2, 0)), (e.innerRadius = Math.max( i.cutoutPercentage ? (e.outerRadius / 100) * i.cutoutPercentage : 1, 0 )), (e.radiusLength = (e.outerRadius - e.innerRadius) / e.getVisibleDatasetCount()), (t.outerRadius = e.outerRadius - e.radiusLength * t.index), (t.innerRadius = t.outerRadius - e.radiusLength); }, updateElement: function (t, e, n) { var i = this, a = i.chart, r = i.getDataset(), o = a.options, s = o.animation, l = a.scale, u = a.data.labels, d = l.xCenter, h = l.yCenter, c = o.startAngle, f = t.hidden ? 0 : l.getDistanceFromCenterForValue(r.data[e]), g = i._starts[e], p = g + (t.hidden ? 0 : i._angles[e]), m = s.animateScale ? 0 : l.getDistanceFromCenterForValue(r.data[e]), v = t._options || {}; V.extend(t, { _datasetIndex: i.index, _index: e, _scale: l, _model: { backgroundColor: v.backgroundColor, borderColor: v.borderColor, borderWidth: v.borderWidth, borderAlign: v.borderAlign, x: d, y: h, innerRadius: 0, outerRadius: n ? m : f, startAngle: n && s.animateRotate ? c : g, endAngle: n && s.animateRotate ? c : p, label: V.valueAtIndexOrDefault(u, e, u[e]), }, }), t.pivot(); }, countVisibleElements: function () { var t = this.getDataset(), e = this.getMeta(), n = 0; return ( V.each(e.data, function (e, i) { isNaN(t.data[i]) || e.hidden || n++; }), n ); }, setHoverStyle: function (t) { var e = t._model, n = t._options, i = V.getHoverColor, a = V.valueOrDefault; (t.$previousStyle = { backgroundColor: e.backgroundColor, borderColor: e.borderColor, borderWidth: e.borderWidth, }), (e.backgroundColor = a(n.hoverBackgroundColor, i(n.backgroundColor))), (e.borderColor = a(n.hoverBorderColor, i(n.borderColor))), (e.borderWidth = a(n.hoverBorderWidth, n.borderWidth)); }, _computeAngle: function (t) { var e = this, n = this.getMeta().count, i = e.getDataset(), a = e.getMeta(); if (isNaN(i.data[t]) || a.data[t].hidden) return 0; var r = { chart: e.chart, dataIndex: t, dataset: i, datasetIndex: e.index, }; return Yt([e.chart.options.elements.arc.angle, (2 * Math.PI) / n], r, t); }, }); z._set("pie", V.clone(z.doughnut)), z._set("pie", { cutoutPercentage: 0 }); var Xt = Nt, Kt = V.valueOrDefault; z._set("radar", { spanGaps: !1, scale: { type: "radialLinear" }, elements: { line: { fill: "start", tension: 0 } }, }); var Zt = nt.extend({ datasetElementType: _t.Line, dataElementType: _t.Point, linkScales: V.noop, _datasetElementOptions: [ "backgroundColor", "borderWidth", "borderColor", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "fill", ], _dataElementOptions: { backgroundColor: "pointBackgroundColor", borderColor: "pointBorderColor", borderWidth: "pointBorderWidth", hitRadius: "pointHitRadius", hoverBackgroundColor: "pointHoverBackgroundColor", hoverBorderColor: "pointHoverBorderColor", hoverBorderWidth: "pointHoverBorderWidth", hoverRadius: "pointHoverRadius", pointStyle: "pointStyle", radius: "pointRadius", rotation: "pointRotation", }, _getIndexScaleId: function () { return this.chart.scale.id; }, _getValueScaleId: function () { return this.chart.scale.id; }, update: function (t) { var e, n, i = this, a = i.getMeta(), r = a.dataset, o = a.data || [], s = i.chart.scale, l = i._config; for ( void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), r._scale = s, r._datasetIndex = i.index, r._children = o, r._loop = !0, r._model = i._resolveDatasetElementOptions(r), r.pivot(), e = 0, n = o.length; e < n; ++e ) i.updateElement(o[e], e, t); for (i.updateBezierControlPoints(), e = 0, n = o.length; e < n; ++e) o[e].pivot(); }, updateElement: function (t, e, n) { var i = this, a = t.custom || {}, r = i.getDataset(), o = i.chart.scale, s = o.getPointPositionForValue(e, r.data[e]), l = i._resolveDataElementOptions(t, e), u = i.getMeta().dataset._model, d = n ? o.xCenter : s.x, h = n ? o.yCenter : s.y; (t._scale = o), (t._options = l), (t._datasetIndex = i.index), (t._index = e), (t._model = { x: d, y: h, skip: a.skip || isNaN(d) || isNaN(h), radius: l.radius, pointStyle: l.pointStyle, rotation: l.rotation, backgroundColor: l.backgroundColor, borderColor: l.borderColor, borderWidth: l.borderWidth, tension: Kt(a.tension, u ? u.tension : 0), hitRadius: l.hitRadius, }); }, _resolveDatasetElementOptions: function () { var t = this, e = t._config, n = t.chart.options, i = nt.prototype._resolveDatasetElementOptions.apply(t, arguments); return ( (i.spanGaps = Kt(e.spanGaps, n.spanGaps)), (i.tension = Kt(e.lineTension, n.elements.line.tension)), i ); }, updateBezierControlPoints: function () { var t, e, n, i, a = this.getMeta(), r = this.chart.chartArea, o = a.data || []; function s(t, e, n) { return Math.max(Math.min(t, n), e); } for ( a.dataset._model.spanGaps && (o = o.filter(function (t) { return !t._model.skip; })), t = 0, e = o.length; t < e; ++t ) (n = o[t]._model), (i = V.splineCurve( V.previousItem(o, t, !0)._model, n, V.nextItem(o, t, !0)._model, n.tension )), (n.controlPointPreviousX = s(i.previous.x, r.left, r.right)), (n.controlPointPreviousY = s(i.previous.y, r.top, r.bottom)), (n.controlPointNextX = s(i.next.x, r.left, r.right)), (n.controlPointNextY = s(i.next.y, r.top, r.bottom)); }, setHoverStyle: function (t) { var e = t._model, n = t._options, i = V.getHoverColor; (t.$previousStyle = { backgroundColor: e.backgroundColor, borderColor: e.borderColor, borderWidth: e.borderWidth, radius: e.radius, }), (e.backgroundColor = Kt(n.hoverBackgroundColor, i(n.backgroundColor))), (e.borderColor = Kt(n.hoverBorderColor, i(n.borderColor))), (e.borderWidth = Kt(n.hoverBorderWidth, n.borderWidth)), (e.radius = Kt(n.hoverRadius, n.radius)); }, }); z._set("scatter", { hover: { mode: "single" }, scales: { xAxes: [{ id: "x-axis-1", type: "linear", position: "bottom" }], yAxes: [{ id: "y-axis-1", type: "linear", position: "left" }], }, tooltips: { callbacks: { title: function () { return ""; }, label: function (t) { return "(" + t.xLabel + ", " + t.yLabel + ")"; }, }, }, }), z._set("global", { datasets: { scatter: { showLine: !1 } } }); var $t = { bar: Dt, bubble: Ft, doughnut: Nt, horizontalBar: Bt, line: Ut, polarArea: Gt, pie: Xt, radar: Zt, scatter: Ut, }; function Jt(t, e) { return t.native ? { x: t.x, y: t.y } : V.getRelativePosition(t, e); } function Qt(t, e) { var n, i, a, r, o, s, l = t._getSortedVisibleDatasetMetas(); for (i = 0, r = l.length; i < r; ++i) for (a = 0, o = (n = l[i].data).length; a < o; ++a) (s = n[a])._view.skip || e(s); } function te(t, e) { var n = []; return ( Qt(t, function (t) { t.inRange(e.x, e.y) && n.push(t); }), n ); } function ee(t, e, n, i) { var a = Number.POSITIVE_INFINITY, r = []; return ( Qt(t, function (t) { if (!n || t.inRange(e.x, e.y)) { var o = t.getCenterPoint(), s = i(e, o); s < a ? ((r = [t]), (a = s)) : s === a && r.push(t); } }), r ); } function ne(t) { var e = -1 !== t.indexOf("x"), n = -1 !== t.indexOf("y"); return function (t, i) { var a = e ? Math.abs(t.x - i.x) : 0, r = n ? Math.abs(t.y - i.y) : 0; return Math.sqrt(Math.pow(a, 2) + Math.pow(r, 2)); }; } function ie(t, e, n) { var i = Jt(e, t); n.axis = n.axis || "x"; var a = ne(n.axis), r = n.intersect ? te(t, i) : ee(t, i, !1, a), o = []; return r.length ? (t._getSortedVisibleDatasetMetas().forEach(function (t) { var e = t.data[r[0]._index]; e && !e._view.skip && o.push(e); }), o) : []; } var ae = { modes: { single: function (t, e) { var n = Jt(e, t), i = []; return ( Qt(t, function (t) { if (t.inRange(n.x, n.y)) return i.push(t), i; }), i.slice(0, 1) ); }, label: ie, index: ie, dataset: function (t, e, n) { var i = Jt(e, t); n.axis = n.axis || "xy"; var a = ne(n.axis), r = n.intersect ? te(t, i) : ee(t, i, !1, a); return ( r.length > 0 && (r = t.getDatasetMeta(r[0]._datasetIndex).data), r ); }, "x-axis": function (t, e) { return ie(t, e, { intersect: !1 }); }, point: function (t, e) { return te(t, Jt(e, t)); }, nearest: function (t, e, n) { var i = Jt(e, t); n.axis = n.axis || "xy"; var a = ne(n.axis); return ee(t, i, n.intersect, a); }, x: function (t, e, n) { var i = Jt(e, t), a = [], r = !1; return ( Qt(t, function (t) { t.inXRange(i.x) && a.push(t), t.inRange(i.x, i.y) && (r = !0); }), n.intersect && !r && (a = []), a ); }, y: function (t, e, n) { var i = Jt(e, t), a = [], r = !1; return ( Qt(t, function (t) { t.inYRange(i.y) && a.push(t), t.inRange(i.x, i.y) && (r = !0); }), n.intersect && !r && (a = []), a ); }, }, }, re = V.extend; function oe(t, e) { return V.where(t, function (t) { return t.pos === e; }); } function se(t, e) { return t.sort(function (t, n) { var i = e ? n : t, a = e ? t : n; return i.weight === a.weight ? i.index - a.index : i.weight - a.weight; }); } function le(t, e, n, i) { return Math.max(t[n], e[n]) + Math.max(t[i], e[i]); } function ue(t, e, n) { var i, a, r = n.box, o = t.maxPadding; if ( (n.size && (t[n.pos] -= n.size), (n.size = n.horizontal ? r.height : r.width), (t[n.pos] += n.size), r.getPadding) ) { var s = r.getPadding(); (o.top = Math.max(o.top, s.top)), (o.left = Math.max(o.left, s.left)), (o.bottom = Math.max(o.bottom, s.bottom)), (o.right = Math.max(o.right, s.right)); } if ( ((i = e.outerWidth - le(o, t, "left", "right")), (a = e.outerHeight - le(o, t, "top", "bottom")), i !== t.w || a !== t.h) ) return (t.w = i), (t.h = a), n.horizontal ? i !== t.w : a !== t.h; } function de(t, e) { var n = e.maxPadding; function i(t) { var i = { left: 0, top: 0, right: 0, bottom: 0 }; return ( t.forEach(function (t) { i[t] = Math.max(e[t], n[t]); }), i ); } return i(t ? ["left", "right"] : ["top", "bottom"]); } function he(t, e, n) { var i, a, r, o, s, l, u = []; for (i = 0, a = t.length; i < a; ++i) (o = (r = t[i]).box).update( r.width || e.w, r.height || e.h, de(r.horizontal, e) ), ue(e, n, r) && ((l = !0), u.length && (s = !0)), o.fullWidth || u.push(r); return (s && he(u, e, n)) || l; } function ce(t, e, n) { var i, a, r, o, s = n.padding, l = e.x, u = e.y; for (i = 0, a = t.length; i < a; ++i) (o = (r = t[i]).box), r.horizontal ? ((o.left = o.fullWidth ? s.left : e.left), (o.right = o.fullWidth ? n.outerWidth - s.right : e.left + e.w), (o.top = u), (o.bottom = u + o.height), (o.width = o.right - o.left), (u = o.bottom)) : ((o.left = l), (o.right = l + o.width), (o.top = e.top), (o.bottom = e.top + e.h), (o.height = o.bottom - o.top), (l = o.right)); (e.x = l), (e.y = u); } z._set("global", { layout: { padding: { top: 0, right: 0, bottom: 0, left: 0 } }, }); var fe, ge = { defaults: {}, addBox: function (t, e) { t.boxes || (t.boxes = []), (e.fullWidth = e.fullWidth || !1), (e.position = e.position || "top"), (e.weight = e.weight || 0), (e._layers = e._layers || function () { return [ { z: 0, draw: function () { e.draw.apply(e, arguments); }, }, ]; }), t.boxes.push(e); }, removeBox: function (t, e) { var n = t.boxes ? t.boxes.indexOf(e) : -1; -1 !== n && t.boxes.splice(n, 1); }, configure: function (t, e, n) { for ( var i, a = ["fullWidth", "position", "weight"], r = a.length, o = 0; o < r; ++o ) (i = a[o]), n.hasOwnProperty(i) && (e[i] = n[i]); }, update: function (t, e, n) { if (t) { var i = t.options.layout || {}, a = V.options.toPadding(i.padding), r = e - a.width, o = n - a.height, s = (function (t) { var e = (function (t) { var e, n, i, a = []; for (e = 0, n = (t || []).length; e < n; ++e) (i = t[e]), a.push({ index: e, box: i, pos: i.position, horizontal: i.isHorizontal(), weight: i.weight, }); return a; })(t), n = se(oe(e, "left"), !0), i = se(oe(e, "right")), a = se(oe(e, "top"), !0), r = se(oe(e, "bottom")); return { leftAndTop: n.concat(a), rightAndBottom: i.concat(r), chartArea: oe(e, "chartArea"), vertical: n.concat(i), horizontal: a.concat(r), }; })(t.boxes), l = s.vertical, u = s.horizontal, d = Object.freeze({ outerWidth: e, outerHeight: n, padding: a, availableWidth: r, vBoxMaxWidth: r / 2 / l.length, hBoxMaxHeight: o / 2, }), h = re( { maxPadding: re({}, a), w: r, h: o, x: a.left, y: a.top }, a ); !(function (t, e) { var n, i, a; for (n = 0, i = t.length; n < i; ++n) ((a = t[n]).width = a.horizontal ? a.box.fullWidth && e.availableWidth : e.vBoxMaxWidth), (a.height = a.horizontal && e.hBoxMaxHeight); })(l.concat(u), d), he(l, h, d), he(u, h, d) && he(l, h, d), (function (t) { var e = t.maxPadding; function n(n) { var i = Math.max(e[n] - t[n], 0); return (t[n] += i), i; } (t.y += n("top")), (t.x += n("left")), n("right"), n("bottom"); })(h), ce(s.leftAndTop, h, d), (h.x += h.w), (h.y += h.h), ce(s.rightAndBottom, h, d), (t.chartArea = { left: h.left, top: h.top, right: h.left + h.w, bottom: h.top + h.h, }), V.each(s.chartArea, function (e) { var n = e.box; re(n, t.chartArea), n.update(h.w, h.h); }); } }, }, pe = ((fe = Object.freeze({ __proto__: null, default: "@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}", })) && fe.default) || fe, me = "$chartjs", ve = "chartjs-size-monitor", be = "chartjs-render-monitor", xe = "chartjs-render-animation", ye = ["animationstart", "webkitAnimationStart"], _e = { touchstart: "mousedown", touchmove: "mousemove", touchend: "mouseup", pointerenter: "mouseenter", pointerdown: "mousedown", pointermove: "mousemove", pointerup: "mouseup", pointerleave: "mouseout", pointerout: "mouseout", }; function ke(t, e) { var n = V.getStyle(t, e), i = n && n.match(/^(\d+)(\.\d+)?px$/); return i ? Number(i[1]) : void 0; } var we = !!(function () { var t = !1; try { var e = Object.defineProperty({}, "passive", { get: function () { t = !0; }, }); window.addEventListener("e", null, e); } catch (t) {} return t; })() && { passive: !0 }; function Me(t, e, n) { t.addEventListener(e, n, we); } function Se(t, e, n) { t.removeEventListener(e, n, we); } function Ce(t, e, n, i, a) { return { type: t, chart: e, native: a || null, x: void 0 !== n ? n : null, y: void 0 !== i ? i : null, }; } function Pe(t) { var e = document.createElement("div"); return (e.className = t || ""), e; } function Ae(t, e, n) { var i, a, r, o, s = t[me] || (t[me] = {}), l = (s.resizer = (function (t) { var e = Pe(ve), n = Pe(ve + "-expand"), i = Pe(ve + "-shrink"); n.appendChild(Pe()), i.appendChild(Pe()), e.appendChild(n), e.appendChild(i), (e._reset = function () { (n.scrollLeft = 1e6), (n.scrollTop = 1e6), (i.scrollLeft = 1e6), (i.scrollTop = 1e6); }); var a = function () { e._reset(), t(); }; return ( Me(n, "scroll", a.bind(n, "expand")), Me(i, "scroll", a.bind(i, "shrink")), e ); })( ((i = function () { if (s.resizer) { var i = n.options.maintainAspectRatio && t.parentNode, a = i ? i.clientWidth : 0; e(Ce("resize", n)), i && i.clientWidth < a && n.canvas && e(Ce("resize", n)); } }), (r = !1), (o = []), function () { (o = Array.prototype.slice.call(arguments)), (a = a || this), r || ((r = !0), V.requestAnimFrame.call(window, function () { (r = !1), i.apply(a, o); })); }) )); !(function (t, e) { var n = t[me] || (t[me] = {}), i = (n.renderProxy = function (t) { t.animationName === xe && e(); }); V.each(ye, function (e) { Me(t, e, i); }), (n.reflow = !!t.offsetParent), t.classList.add(be); })(t, function () { if (s.resizer) { var e = t.parentNode; e && e !== l.parentNode && e.insertBefore(l, e.firstChild), l._reset(); } }); } function De(t) { var e = t[me] || {}, n = e.resizer; delete e.resizer, (function (t) { var e = t[me] || {}, n = e.renderProxy; n && (V.each(ye, function (e) { Se(t, e, n); }), delete e.renderProxy), t.classList.remove(be); })(t), n && n.parentNode && n.parentNode.removeChild(n); } var Te = { disableCSSInjection: !1, _enabled: "undefined" != typeof window && "undefined" != typeof document, _ensureLoaded: function (t) { if (!this.disableCSSInjection) { var e = t.getRootNode ? t.getRootNode() : document; !(function (t, e) { var n = t[me] || (t[me] = {}); if (!n.containsStyles) { (n.containsStyles = !0), (e = "/* Chart.js */\n" + e); var i = document.createElement("style"); i.setAttribute("type", "text/css"), i.appendChild(document.createTextNode(e)), t.appendChild(i); } })(e.host ? e : document.head, pe); } }, acquireContext: function (t, e) { "string" == typeof t ? (t = document.getElementById(t)) : t.length && (t = t[0]), t && t.canvas && (t = t.canvas); var n = t && t.getContext && t.getContext("2d"); return n && n.canvas === t ? (this._ensureLoaded(t), (function (t, e) { var n = t.style, i = t.getAttribute("height"), a = t.getAttribute("width"); if ( ((t[me] = { initial: { height: i, width: a, style: { display: n.display, height: n.height, width: n.width, }, }, }), (n.display = n.display || "block"), null === a || "" === a) ) { var r = ke(t, "width"); void 0 !== r && (t.width = r); } if (null === i || "" === i) if ("" === t.style.height) t.height = t.width / (e.options.aspectRatio || 2); else { var o = ke(t, "height"); void 0 !== r && (t.height = o); } })(t, e), n) : null; }, releaseContext: function (t) { var e = t.canvas; if (e[me]) { var n = e[me].initial; ["height", "width"].forEach(function (t) { var i = n[t]; V.isNullOrUndef(i) ? e.removeAttribute(t) : e.setAttribute(t, i); }), V.each(n.style || {}, function (t, n) { e.style[n] = t; }), (e.width = e.width), delete e[me]; } }, addEventListener: function (t, e, n) { var i = t.canvas; if ("resize" !== e) { var a = n[me] || (n[me] = {}); Me( i, e, ((a.proxies || (a.proxies = {}))[t.id + "_" + e] = function (e) { n( (function (t, e) { var n = _e[t.type] || t.type, i = V.getRelativePosition(t, e); return Ce(n, e, i.x, i.y, t); })(e, t) ); }) ); } else Ae(i, n, t); }, removeEventListener: function (t, e, n) { var i = t.canvas; if ("resize" !== e) { var a = ((n[me] || {}).proxies || {})[t.id + "_" + e]; a && Se(i, e, a); } else De(i); }, }; (V.addEvent = Me), (V.removeEvent = Se); var Ie = Te._enabled ? Te : { acquireContext: function (t) { return ( t && t.canvas && (t = t.canvas), (t && t.getContext("2d")) || null ); }, }, Fe = V.extend( { initialize: function () {}, acquireContext: function () {}, releaseContext: function () {}, addEventListener: function () {}, removeEventListener: function () {}, }, Ie ); z._set("global", { plugins: {} }); var Le = { _plugins: [], _cacheId: 0, register: function (t) { var e = this._plugins; [].concat(t).forEach(function (t) { -1 === e.indexOf(t) && e.push(t); }), this._cacheId++; }, unregister: function (t) { var e = this._plugins; [].concat(t).forEach(function (t) { var n = e.indexOf(t); -1 !== n && e.splice(n, 1); }), this._cacheId++; }, clear: function () { (this._plugins = []), this._cacheId++; }, count: function () { return this._plugins.length; }, getAll: function () { return this._plugins; }, notify: function (t, e, n) { var i, a, r, o, s, l = this.descriptors(t), u = l.length; for (i = 0; i < u; ++i) if ( "function" == typeof (s = (r = (a = l[i]).plugin)[e]) && ((o = [t].concat(n || [])).push(a.options), !1 === s.apply(r, o)) ) return !1; return !0; }, descriptors: function (t) { var e = t.$plugins || (t.$plugins = {}); if (e.id === this._cacheId) return e.descriptors; var n = [], i = [], a = (t && t.config) || {}, r = (a.options && a.options.plugins) || {}; return ( this._plugins.concat(a.plugins || []).forEach(function (t) { if (-1 === n.indexOf(t)) { var e = t.id, a = r[e]; !1 !== a && (!0 === a && (a = V.clone(z.global.plugins[e])), n.push(t), i.push({ plugin: t, options: a || {} })); } }), (e.descriptors = i), (e.id = this._cacheId), i ); }, _invalidate: function (t) { delete t.$plugins; }, }, Oe = { constructors: {}, defaults: {}, registerScaleType: function (t, e, n) { (this.constructors[t] = e), (this.defaults[t] = V.clone(n)); }, getScaleConstructor: function (t) { return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0; }, getScaleDefaults: function (t) { return this.defaults.hasOwnProperty(t) ? V.merge({}, [z.scale, this.defaults[t]]) : {}; }, updateScaleDefaults: function (t, e) { this.defaults.hasOwnProperty(t) && (this.defaults[t] = V.extend(this.defaults[t], e)); }, addScalesToLayout: function (t) { V.each(t.scales, function (e) { (e.fullWidth = e.options.fullWidth), (e.position = e.options.position), (e.weight = e.options.weight), ge.addBox(t, e); }); }, }, Re = V.valueOrDefault, ze = V.rtl.getRtlAdapter; z._set("global", { tooltips: { enabled: !0, custom: null, mode: "nearest", position: "average", intersect: !0, backgroundColor: "rgba(0,0,0,0.8)", titleFontStyle: "bold", titleSpacing: 2, titleMarginBottom: 6, titleFontColor: "#fff", titleAlign: "left", bodySpacing: 2, bodyFontColor: "#fff", bodyAlign: "left", footerFontStyle: "bold", footerSpacing: 2, footerMarginTop: 6, footerFontColor: "#fff", footerAlign: "left", yPadding: 6, xPadding: 6, caretPadding: 2, caretSize: 5, cornerRadius: 6, multiKeyBackground: "#fff", displayColors: !0, borderColor: "rgba(0,0,0,0)", borderWidth: 0, callbacks: { beforeTitle: V.noop, title: function (t, e) { var n = "", i = e.labels, a = i ? i.length : 0; if (t.length > 0) { var r = t[0]; r.label ? (n = r.label) : r.xLabel ? (n = r.xLabel) : a > 0 && r.index < a && (n = i[r.index]); } return n; }, afterTitle: V.noop, beforeBody: V.noop, beforeLabel: V.noop, label: function (t, e) { var n = e.datasets[t.datasetIndex].label || ""; return ( n && (n += ": "), V.isNullOrUndef(t.value) ? (n += t.yLabel) : (n += t.value), n ); }, labelColor: function (t, e) { var n = e.getDatasetMeta(t.datasetIndex).data[t.index]._view; return { borderColor: n.borderColor, backgroundColor: n.backgroundColor, }; }, labelTextColor: function () { return this._options.bodyFontColor; }, afterLabel: V.noop, afterBody: V.noop, beforeFooter: V.noop, footer: V.noop, afterFooter: V.noop, }, }, }); var Ne = { average: function (t) { if (!t.length) return !1; var e, n, i = 0, a = 0, r = 0; for (e = 0, n = t.length; e < n; ++e) { var o = t[e]; if (o && o.hasValue()) { var s = o.tooltipPosition(); (i += s.x), (a += s.y), ++r; } } return { x: i / r, y: a / r }; }, nearest: function (t, e) { var n, i, a, r = e.x, o = e.y, s = Number.POSITIVE_INFINITY; for (n = 0, i = t.length; n < i; ++n) { var l = t[n]; if (l && l.hasValue()) { var u = l.getCenterPoint(), d = V.distanceBetweenPoints(e, u); d < s && ((s = d), (a = l)); } } if (a) { var h = a.tooltipPosition(); (r = h.x), (o = h.y); } return { x: r, y: o }; }, }; function Be(t, e) { return ( e && (V.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t ); } function Ee(t) { return ("string" == typeof t || t instanceof String) && t.indexOf("\n") > -1 ? t.split("\n") : t; } function We(t) { var e = z.global; return { xPadding: t.xPadding, yPadding: t.yPadding, xAlign: t.xAlign, yAlign: t.yAlign, rtl: t.rtl, textDirection: t.textDirection, bodyFontColor: t.bodyFontColor, _bodyFontFamily: Re(t.bodyFontFamily, e.defaultFontFamily), _bodyFontStyle: Re(t.bodyFontStyle, e.defaultFontStyle), _bodyAlign: t.bodyAlign, bodyFontSize: Re(t.bodyFontSize, e.defaultFontSize), bodySpacing: t.bodySpacing, titleFontColor: t.titleFontColor, _titleFontFamily: Re(t.titleFontFamily, e.defaultFontFamily), _titleFontStyle: Re(t.titleFontStyle, e.defaultFontStyle), titleFontSize: Re(t.titleFontSize, e.defaultFontSize), _titleAlign: t.titleAlign, titleSpacing: t.titleSpacing, titleMarginBottom: t.titleMarginBottom, footerFontColor: t.footerFontColor, _footerFontFamily: Re(t.footerFontFamily, e.defaultFontFamily), _footerFontStyle: Re(t.footerFontStyle, e.defaultFontStyle), footerFontSize: Re(t.footerFontSize, e.defaultFontSize), _footerAlign: t.footerAlign, footerSpacing: t.footerSpacing, footerMarginTop: t.footerMarginTop, caretSize: t.caretSize, cornerRadius: t.cornerRadius, backgroundColor: t.backgroundColor, opacity: 0, legendColorBackground: t.multiKeyBackground, displayColors: t.displayColors, borderColor: t.borderColor, borderWidth: t.borderWidth, }; } function Ve(t, e) { return "center" === e ? t.x + t.width / 2 : "right" === e ? t.x + t.width - t.xPadding : t.x + t.xPadding; } function He(t) { return Be([], Ee(t)); } var je = X.extend({ initialize: function () { (this._model = We(this._options)), (this._lastActive = []); }, getTitle: function () { var t = this, e = t._options, n = e.callbacks, i = n.beforeTitle.apply(t, arguments), a = n.title.apply(t, arguments), r = n.afterTitle.apply(t, arguments), o = []; return (o = Be(o, Ee(i))), (o = Be(o, Ee(a))), (o = Be(o, Ee(r))); }, getBeforeBody: function () { return He(this._options.callbacks.beforeBody.apply(this, arguments)); }, getBody: function (t, e) { var n = this, i = n._options.callbacks, a = []; return ( V.each(t, function (t) { var r = { before: [], lines: [], after: [] }; Be(r.before, Ee(i.beforeLabel.call(n, t, e))), Be(r.lines, i.label.call(n, t, e)), Be(r.after, Ee(i.afterLabel.call(n, t, e))), a.push(r); }), a ); }, getAfterBody: function () { return He(this._options.callbacks.afterBody.apply(this, arguments)); }, getFooter: function () { var t = this, e = t._options.callbacks, n = e.beforeFooter.apply(t, arguments), i = e.footer.apply(t, arguments), a = e.afterFooter.apply(t, arguments), r = []; return (r = Be(r, Ee(n))), (r = Be(r, Ee(i))), (r = Be(r, Ee(a))); }, update: function (t) { var e, n, i, a, r, o, s, l, u, d, h = this, c = h._options, f = h._model, g = (h._model = We(c)), p = h._active, m = h._data, v = { xAlign: f.xAlign, yAlign: f.yAlign }, b = { x: f.x, y: f.y }, x = { width: f.width, height: f.height }, y = { x: f.caretX, y: f.caretY }; if (p.length) { g.opacity = 1; var _ = [], k = []; y = Ne[c.position].call(h, p, h._eventPosition); var w = []; for (e = 0, n = p.length; e < n; ++e) w.push( ((i = p[e]), (a = void 0), (r = void 0), (o = void 0), (s = void 0), (l = void 0), (u = void 0), (d = void 0), (a = i._xScale), (r = i._yScale || i._scale), (o = i._index), (s = i._datasetIndex), (l = i._chart.getDatasetMeta(s).controller), (u = l._getIndexScale()), (d = l._getValueScale()), { xLabel: a ? a.getLabelForIndex(o, s) : "", yLabel: r ? r.getLabelForIndex(o, s) : "", label: u ? "" + u.getLabelForIndex(o, s) : "", value: d ? "" + d.getLabelForIndex(o, s) : "", index: o, datasetIndex: s, x: i._model.x, y: i._model.y, }) ); c.filter && (w = w.filter(function (t) { return c.filter(t, m); })), c.itemSort && (w = w.sort(function (t, e) { return c.itemSort(t, e, m); })), V.each(w, function (t) { _.push(c.callbacks.labelColor.call(h, t, h._chart)), k.push(c.callbacks.labelTextColor.call(h, t, h._chart)); }), (g.title = h.getTitle(w, m)), (g.beforeBody = h.getBeforeBody(w, m)), (g.body = h.getBody(w, m)), (g.afterBody = h.getAfterBody(w, m)), (g.footer = h.getFooter(w, m)), (g.x = y.x), (g.y = y.y), (g.caretPadding = c.caretPadding), (g.labelColors = _), (g.labelTextColors = k), (g.dataPoints = w), (x = (function (t, e) { var n = t._chart.ctx, i = 2 * e.yPadding, a = 0, r = e.body, o = r.reduce(function (t, e) { return t + e.before.length + e.lines.length + e.after.length; }, 0); o += e.beforeBody.length + e.afterBody.length; var s = e.title.length, l = e.footer.length, u = e.titleFontSize, d = e.bodyFontSize, h = e.footerFontSize; (i += s * u), (i += s ? (s - 1) * e.titleSpacing : 0), (i += s ? e.titleMarginBottom : 0), (i += o * d), (i += o ? (o - 1) * e.bodySpacing : 0), (i += l ? e.footerMarginTop : 0), (i += l * h), (i += l ? (l - 1) * e.footerSpacing : 0); var c = 0, f = function (t) { a = Math.max(a, n.measureText(t).width + c); }; return ( (n.font = V.fontString( u, e._titleFontStyle, e._titleFontFamily )), V.each(e.title, f), (n.font = V.fontString(d, e._bodyFontStyle, e._bodyFontFamily)), V.each(e.beforeBody.concat(e.afterBody), f), (c = e.displayColors ? d + 2 : 0), V.each(r, function (t) { V.each(t.before, f), V.each(t.lines, f), V.each(t.after, f); }), (c = 0), (n.font = V.fontString( h, e._footerFontStyle, e._footerFontFamily )), V.each(e.footer, f), { width: (a += 2 * e.xPadding), height: i } ); })(this, g)), (b = (function (t, e, n, i) { var a = t.x, r = t.y, o = t.caretSize, s = t.caretPadding, l = t.cornerRadius, u = n.xAlign, d = n.yAlign, h = o + s, c = l + s; return ( "right" === u ? (a -= e.width) : "center" === u && ((a -= e.width / 2) + e.width > i.width && (a = i.width - e.width), a < 0 && (a = 0)), "top" === d ? (r += h) : (r -= "bottom" === d ? e.height + h : e.height / 2), "center" === d ? "left" === u ? (a += h) : "right" === u && (a -= h) : "left" === u ? (a -= c) : "right" === u && (a += c), { x: a, y: r } ); })( g, x, (v = (function (t, e) { var n, i, a, r, o, s = t._model, l = t._chart, u = t._chart.chartArea, d = "center", h = "center"; s.y < e.height ? (h = "top") : s.y > l.height - e.height && (h = "bottom"); var c = (u.left + u.right) / 2, f = (u.top + u.bottom) / 2; "center" === h ? ((n = function (t) { return t <= c; }), (i = function (t) { return t > c; })) : ((n = function (t) { return t <= e.width / 2; }), (i = function (t) { return t >= l.width - e.width / 2; })), (a = function (t) { return t + e.width + s.caretSize + s.caretPadding > l.width; }), (r = function (t) { return t - e.width - s.caretSize - s.caretPadding < 0; }), (o = function (t) { return t <= f ? "top" : "bottom"; }), n(s.x) ? ((d = "left"), a(s.x) && ((d = "center"), (h = o(s.y)))) : i(s.x) && ((d = "right"), r(s.x) && ((d = "center"), (h = o(s.y)))); var g = t._options; return { xAlign: g.xAlign ? g.xAlign : d, yAlign: g.yAlign ? g.yAlign : h, }; })(this, x)), h._chart )); } else g.opacity = 0; return ( (g.xAlign = v.xAlign), (g.yAlign = v.yAlign), (g.x = b.x), (g.y = b.y), (g.width = x.width), (g.height = x.height), (g.caretX = y.x), (g.caretY = y.y), (h._model = g), t && c.custom && c.custom.call(h, g), h ); }, drawCaret: function (t, e) { var n = this._chart.ctx, i = this._view, a = this.getCaretPosition(t, e, i); n.lineTo(a.x1, a.y1), n.lineTo(a.x2, a.y2), n.lineTo(a.x3, a.y3); }, getCaretPosition: function (t, e, n) { var i, a, r, o, s, l, u = n.caretSize, d = n.cornerRadius, h = n.xAlign, c = n.yAlign, f = t.x, g = t.y, p = e.width, m = e.height; if ("center" === c) (s = g + m / 2), "left" === h ? ((a = (i = f) - u), (r = i), (o = s + u), (l = s - u)) : ((a = (i = f + p) + u), (r = i), (o = s - u), (l = s + u)); else if ( ("left" === h ? ((i = (a = f + d + u) - u), (r = a + u)) : "right" === h ? ((i = (a = f + p - d - u) - u), (r = a + u)) : ((i = (a = n.caretX) - u), (r = a + u)), "top" === c) ) (s = (o = g) - u), (l = o); else { (s = (o = g + m) + u), (l = o); var v = r; (r = i), (i = v); } return { x1: i, x2: a, x3: r, y1: o, y2: s, y3: l }; }, drawTitle: function (t, e, n) { var i, a, r, o = e.title, s = o.length; if (s) { var l = ze(e.rtl, e.x, e.width); for ( t.x = Ve(e, e._titleAlign), n.textAlign = l.textAlign(e._titleAlign), n.textBaseline = "middle", i = e.titleFontSize, a = e.titleSpacing, n.fillStyle = e.titleFontColor, n.font = V.fontString(i, e._titleFontStyle, e._titleFontFamily), r = 0; r < s; ++r ) n.fillText(o[r], l.x(t.x), t.y + i / 2), (t.y += i + a), r + 1 === s && (t.y += e.titleMarginBottom - a); } }, drawBody: function (t, e, n) { var i, a, r, o, s, l, u, d, h = e.bodyFontSize, c = e.bodySpacing, f = e._bodyAlign, g = e.body, p = e.displayColors, m = 0, v = p ? Ve(e, "left") : 0, b = ze(e.rtl, e.x, e.width), x = function (e) { n.fillText(e, b.x(t.x + m), t.y + h / 2), (t.y += h + c); }, y = b.textAlign(f); for ( n.textAlign = f, n.textBaseline = "middle", n.font = V.fontString(h, e._bodyFontStyle, e._bodyFontFamily), t.x = Ve(e, y), n.fillStyle = e.bodyFontColor, V.each(e.beforeBody, x), m = p && "right" !== y ? ("center" === f ? h / 2 + 1 : h + 2) : 0, s = 0, u = g.length; s < u; ++s ) { for ( i = g[s], a = e.labelTextColors[s], r = e.labelColors[s], n.fillStyle = a, V.each(i.before, x), l = 0, d = (o = i.lines).length; l < d; ++l ) { if (p) { var _ = b.x(v); (n.fillStyle = e.legendColorBackground), n.fillRect(b.leftForLtr(_, h), t.y, h, h), (n.lineWidth = 1), (n.strokeStyle = r.borderColor), n.strokeRect(b.leftForLtr(_, h), t.y, h, h), (n.fillStyle = r.backgroundColor), n.fillRect( b.leftForLtr(b.xPlus(_, 1), h - 2), t.y + 1, h - 2, h - 2 ), (n.fillStyle = a); } x(o[l]); } V.each(i.after, x); } (m = 0), V.each(e.afterBody, x), (t.y -= c); }, drawFooter: function (t, e, n) { var i, a, r = e.footer, o = r.length; if (o) { var s = ze(e.rtl, e.x, e.width); for ( t.x = Ve(e, e._footerAlign), t.y += e.footerMarginTop, n.textAlign = s.textAlign(e._footerAlign), n.textBaseline = "middle", i = e.footerFontSize, n.fillStyle = e.footerFontColor, n.font = V.fontString(i, e._footerFontStyle, e._footerFontFamily), a = 0; a < o; ++a ) n.fillText(r[a], s.x(t.x), t.y + i / 2), (t.y += i + e.footerSpacing); } }, drawBackground: function (t, e, n, i) { (n.fillStyle = e.backgroundColor), (n.strokeStyle = e.borderColor), (n.lineWidth = e.borderWidth); var a = e.xAlign, r = e.yAlign, o = t.x, s = t.y, l = i.width, u = i.height, d = e.cornerRadius; n.beginPath(), n.moveTo(o + d, s), "top" === r && this.drawCaret(t, i), n.lineTo(o + l - d, s), n.quadraticCurveTo(o + l, s, o + l, s + d), "center" === r && "right" === a && this.drawCaret(t, i), n.lineTo(o + l, s + u - d), n.quadraticCurveTo(o + l, s + u, o + l - d, s + u), "bottom" === r && this.drawCaret(t, i), n.lineTo(o + d, s + u), n.quadraticCurveTo(o, s + u, o, s + u - d), "center" === r && "left" === a && this.drawCaret(t, i), n.lineTo(o, s + d), n.quadraticCurveTo(o, s, o + d, s), n.closePath(), n.fill(), e.borderWidth > 0 && n.stroke(); }, draw: function () { var t = this._chart.ctx, e = this._view; if (0 !== e.opacity) { var n = { width: e.width, height: e.height }, i = { x: e.x, y: e.y }, a = Math.abs(e.opacity < 0.001) ? 0 : e.opacity, r = e.title.length || e.beforeBody.length || e.body.length || e.afterBody.length || e.footer.length; this._options.enabled && r && (t.save(), (t.globalAlpha = a), this.drawBackground(i, e, t, n), (i.y += e.yPadding), V.rtl.overrideTextDirection(t, e.textDirection), this.drawTitle(i, e, t), this.drawBody(i, e, t), this.drawFooter(i, e, t), V.rtl.restoreTextDirection(t, e.textDirection), t.restore()); } }, handleEvent: function (t) { var e, n = this, i = n._options; return ( (n._lastActive = n._lastActive || []), "mouseout" === t.type ? (n._active = []) : ((n._active = n._chart.getElementsAtEventForMode(t, i.mode, i)), i.reverse && n._active.reverse()), (e = !V.arrayEquals(n._active, n._lastActive)) && ((n._lastActive = n._active), (i.enabled || i.custom) && ((n._eventPosition = { x: t.x, y: t.y }), n.update(!0), n.pivot())), e ); }, }), qe = Ne, Ue = je; Ue.positioners = qe; var Ye = V.valueOrDefault; function Ge() { return V.merge({}, [].slice.call(arguments), { merger: function (t, e, n, i) { if ("xAxes" === t || "yAxes" === t) { var a, r, o, s = n[t].length; for (e[t] || (e[t] = []), a = 0; a < s; ++a) (o = n[t][a]), (r = Ye(o.type, "xAxes" === t ? "category" : "linear")), a >= e[t].length && e[t].push({}), !e[t][a].type || (o.type && o.type !== e[t][a].type) ? V.merge(e[t][a], [Oe.getScaleDefaults(r), o]) : V.merge(e[t][a], o); } else V._merger(t, e, n, i); }, }); } function Xe() { return V.merge({}, [].slice.call(arguments), { merger: function (t, e, n, i) { var a = e[t] || {}, r = n[t]; "scales" === t ? (e[t] = Ge(a, r)) : "scale" === t ? (e[t] = V.merge(a, [Oe.getScaleDefaults(r.type), r])) : V._merger(t, e, n, i); }, }); } function Ke(t) { var e = t.options; V.each(t.scales, function (e) { ge.removeBox(t, e); }), (e = Xe(z.global, z[t.config.type], e)), (t.options = t.config.options = e), t.ensureScalesHaveIDs(), t.buildOrUpdateScales(), (t.tooltip._options = e.tooltips), t.tooltip.initialize(); } function Ze(t, e, n) { var i, a = function (t) { return t.id === i; }; do { i = e + n++; } while (V.findIndex(t, a) >= 0); return i; } function $e(t) { return "top" === t || "bottom" === t; } function Je(t, e) { return function (n, i) { return n[t] === i[t] ? n[e] - i[e] : n[t] - i[t]; }; } z._set("global", { elements: {}, events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"], hover: { onHover: null, mode: "nearest", intersect: !0, animationDuration: 400, }, onClick: null, maintainAspectRatio: !0, responsive: !0, responsiveAnimationDuration: 0, }); var Qe = function (t, e) { return this.construct(t, e), this; }; V.extend(Qe.prototype, { construct: function (t, e) { var n = this; e = (function (t) { var e = ((t = t || {}).data = t.data || {}); return ( (e.datasets = e.datasets || []), (e.labels = e.labels || []), (t.options = Xe(z.global, z[t.type], t.options || {})), t ); })(e); var i = Fe.acquireContext(t, e), a = i && i.canvas, r = a && a.height, o = a && a.width; (n.id = V.uid()), (n.ctx = i), (n.canvas = a), (n.config = e), (n.width = o), (n.height = r), (n.aspectRatio = r ? o / r : null), (n.options = e.options), (n._bufferedRender = !1), (n._layers = []), (n.chart = n), (n.controller = n), (Qe.instances[n.id] = n), Object.defineProperty(n, "data", { get: function () { return n.config.data; }, set: function (t) { n.config.data = t; }, }), i && a ? (n.initialize(), n.update()) : console.error( "Failed to create chart: can't acquire context from the given item" ); }, initialize: function () { var t = this; return ( Le.notify(t, "beforeInit"), V.retinaScale(t, t.options.devicePixelRatio), t.bindEvents(), t.options.responsive && t.resize(!0), t.initToolTip(), Le.notify(t, "afterInit"), t ); }, clear: function () { return V.canvas.clear(this), this; }, stop: function () { return $.cancelAnimation(this), this; }, resize: function (t) { var e = this, n = e.options, i = e.canvas, a = (n.maintainAspectRatio && e.aspectRatio) || null, r = Math.max(0, Math.floor(V.getMaximumWidth(i))), o = Math.max(0, Math.floor(a ? r / a : V.getMaximumHeight(i))); if ( (e.width !== r || e.height !== o) && ((i.width = e.width = r), (i.height = e.height = o), (i.style.width = r + "px"), (i.style.height = o + "px"), V.retinaScale(e, n.devicePixelRatio), !t) ) { var s = { width: r, height: o }; Le.notify(e, "resize", [s]), n.onResize && n.onResize(e, s), e.stop(), e.update({ duration: n.responsiveAnimationDuration }); } }, ensureScalesHaveIDs: function () { var t = this.options, e = t.scales || {}, n = t.scale; V.each(e.xAxes, function (t, n) { t.id || (t.id = Ze(e.xAxes, "x-axis-", n)); }), V.each(e.yAxes, function (t, n) { t.id || (t.id = Ze(e.yAxes, "y-axis-", n)); }), n && (n.id = n.id || "scale"); }, buildOrUpdateScales: function () { var t = this, e = t.options, n = t.scales || {}, i = [], a = Object.keys(n).reduce(function (t, e) { return (t[e] = !1), t; }, {}); e.scales && (i = i.concat( (e.scales.xAxes || []).map(function (t) { return { options: t, dtype: "category", dposition: "bottom" }; }), (e.scales.yAxes || []).map(function (t) { return { options: t, dtype: "linear", dposition: "left" }; }) )), e.scale && i.push({ options: e.scale, dtype: "radialLinear", isDefault: !0, dposition: "chartArea", }), V.each(i, function (e) { var i = e.options, r = i.id, o = Ye(i.type, e.dtype); $e(i.position) !== $e(e.dposition) && (i.position = e.dposition), (a[r] = !0); var s = null; if (r in n && n[r].type === o) ((s = n[r]).options = i), (s.ctx = t.ctx), (s.chart = t); else { var l = Oe.getScaleConstructor(o); if (!l) return; (s = new l({ id: r, type: o, options: i, ctx: t.ctx, chart: t })), (n[s.id] = s); } s.mergeTicksOptions(), e.isDefault && (t.scale = s); }), V.each(a, function (t, e) { t || delete n[e]; }), (t.scales = n), Oe.addScalesToLayout(this); }, buildOrUpdateControllers: function () { var t, e, n = this, i = [], a = n.data.datasets; for (t = 0, e = a.length; t < e; t++) { var r = a[t], o = n.getDatasetMeta(t), s = r.type || n.config.type; if ( (o.type && o.type !== s && (n.destroyDatasetMeta(t), (o = n.getDatasetMeta(t))), (o.type = s), (o.order = r.order || 0), (o.index = t), o.controller) ) o.controller.updateIndex(t), o.controller.linkScales(); else { var l = $t[o.type]; if (void 0 === l) throw new Error('"' + o.type + '" is not a chart type.'); (o.controller = new l(n, t)), i.push(o.controller); } } return i; }, resetElements: function () { var t = this; V.each( t.data.datasets, function (e, n) { t.getDatasetMeta(n).controller.reset(); }, t ); }, reset: function () { this.resetElements(), this.tooltip.initialize(); }, update: function (t) { var e, n, i = this; if ( ((t && "object" == typeof t) || (t = { duration: t, lazy: arguments[1] }), Ke(i), Le._invalidate(i), !1 !== Le.notify(i, "beforeUpdate")) ) { i.tooltip._data = i.data; var a = i.buildOrUpdateControllers(); for (e = 0, n = i.data.datasets.length; e < n; e++) i.getDatasetMeta(e).controller.buildOrUpdateElements(); i.updateLayout(), i.options.animation && i.options.animation.duration && V.each(a, function (t) { t.reset(); }), i.updateDatasets(), i.tooltip.initialize(), (i.lastActive = []), Le.notify(i, "afterUpdate"), i._layers.sort(Je("z", "_idx")), i._bufferedRender ? (i._bufferedRequest = { duration: t.duration, easing: t.easing, lazy: t.lazy, }) : i.render(t); } }, updateLayout: function () { var t = this; !1 !== Le.notify(t, "beforeLayout") && (ge.update(this, this.width, this.height), (t._layers = []), V.each( t.boxes, function (e) { e._configure && e._configure(), t._layers.push.apply(t._layers, e._layers()); }, t ), t._layers.forEach(function (t, e) { t._idx = e; }), Le.notify(t, "afterScaleUpdate"), Le.notify(t, "afterLayout")); }, updateDatasets: function () { if (!1 !== Le.notify(this, "beforeDatasetsUpdate")) { for (var t = 0, e = this.data.datasets.length; t < e; ++t) this.updateDataset(t); Le.notify(this, "afterDatasetsUpdate"); } }, updateDataset: function (t) { var e = this.getDatasetMeta(t), n = { meta: e, index: t }; !1 !== Le.notify(this, "beforeDatasetUpdate", [n]) && (e.controller._update(), Le.notify(this, "afterDatasetUpdate", [n])); }, render: function (t) { var e = this; (t && "object" == typeof t) || (t = { duration: t, lazy: arguments[1] }); var n = e.options.animation, i = Ye(t.duration, n && n.duration), a = t.lazy; if (!1 !== Le.notify(e, "beforeRender")) { var r = function (t) { Le.notify(e, "afterRender"), V.callback(n && n.onComplete, [t], e); }; if (n && i) { var o = new Z({ numSteps: i / 16.66, easing: t.easing || n.easing, render: function (t, e) { var n = V.easing.effects[e.easing], i = e.currentStep, a = i / e.numSteps; t.draw(n(a), a, i); }, onAnimationProgress: n.onProgress, onAnimationComplete: r, }); $.addAnimation(e, o, i, a); } else e.draw(), r(new Z({ numSteps: 0, chart: e })); return e; } }, draw: function (t) { var e, n, i = this; if ( (i.clear(), V.isNullOrUndef(t) && (t = 1), i.transition(t), !(i.width <= 0 || i.height <= 0) && !1 !== Le.notify(i, "beforeDraw", [t])) ) { for (n = i._layers, e = 0; e < n.length && n[e].z <= 0; ++e) n[e].draw(i.chartArea); for (i.drawDatasets(t); e < n.length; ++e) n[e].draw(i.chartArea); i._drawTooltip(t), Le.notify(i, "afterDraw", [t]); } }, transition: function (t) { for (var e = 0, n = (this.data.datasets || []).length; e < n; ++e) this.isDatasetVisible(e) && this.getDatasetMeta(e).controller.transition(t); this.tooltip.transition(t); }, _getSortedDatasetMetas: function (t) { var e, n, i = []; for (e = 0, n = (this.data.datasets || []).length; e < n; ++e) (t && !this.isDatasetVisible(e)) || i.push(this.getDatasetMeta(e)); return i.sort(Je("order", "index")), i; }, _getSortedVisibleDatasetMetas: function () { return this._getSortedDatasetMetas(!0); }, drawDatasets: function (t) { var e, n; if (!1 !== Le.notify(this, "beforeDatasetsDraw", [t])) { for ( n = (e = this._getSortedVisibleDatasetMetas()).length - 1; n >= 0; --n ) this.drawDataset(e[n], t); Le.notify(this, "afterDatasetsDraw", [t]); } }, drawDataset: function (t, e) { var n = { meta: t, index: t.index, easingValue: e }; !1 !== Le.notify(this, "beforeDatasetDraw", [n]) && (t.controller.draw(e), Le.notify(this, "afterDatasetDraw", [n])); }, _drawTooltip: function (t) { var e = this.tooltip, n = { tooltip: e, easingValue: t }; !1 !== Le.notify(this, "beforeTooltipDraw", [n]) && (e.draw(), Le.notify(this, "afterTooltipDraw", [n])); }, getElementAtEvent: function (t) { return ae.modes.single(this, t); }, getElementsAtEvent: function (t) { return ae.modes.label(this, t, { intersect: !0 }); }, getElementsAtXAxis: function (t) { return ae.modes["x-axis"](this, t, { intersect: !0 }); }, getElementsAtEventForMode: function (t, e, n) { var i = ae.modes[e]; return "function" == typeof i ? i(this, t, n) : []; }, getDatasetAtEvent: function (t) { return ae.modes.dataset(this, t, { intersect: !0 }); }, getDatasetMeta: function (t) { var e = this.data.datasets[t]; e._meta || (e._meta = {}); var n = e._meta[this.id]; return ( n || (n = e._meta[this.id] = { type: null, data: [], dataset: null, controller: null, hidden: null, xAxisID: null, yAxisID: null, order: e.order || 0, index: t, }), n ); }, getVisibleDatasetCount: function () { for (var t = 0, e = 0, n = this.data.datasets.length; e < n; ++e) this.isDatasetVisible(e) && t++; return t; }, isDatasetVisible: function (t) { var e = this.getDatasetMeta(t); return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden; }, generateLegend: function () { return this.options.legendCallback(this); }, destroyDatasetMeta: function (t) { var e = this.id, n = this.data.datasets[t], i = n._meta && n._meta[e]; i && (i.controller.destroy(), delete n._meta[e]); }, destroy: function () { var t, e, n = this, i = n.canvas; for (n.stop(), t = 0, e = n.data.datasets.length; t < e; ++t) n.destroyDatasetMeta(t); i && (n.unbindEvents(), V.canvas.clear(n), Fe.releaseContext(n.ctx), (n.canvas = null), (n.ctx = null)), Le.notify(n, "destroy"), delete Qe.instances[n.id]; }, toBase64Image: function () { return this.canvas.toDataURL.apply(this.canvas, arguments); }, initToolTip: function () { var t = this; t.tooltip = new Ue( { _chart: t, _chartInstance: t, _data: t.data, _options: t.options.tooltips, }, t ); }, bindEvents: function () { var t = this, e = (t._listeners = {}), n = function () { t.eventHandler.apply(t, arguments); }; V.each(t.options.events, function (i) { Fe.addEventListener(t, i, n), (e[i] = n); }), t.options.responsive && ((n = function () { t.resize(); }), Fe.addEventListener(t, "resize", n), (e.resize = n)); }, unbindEvents: function () { var t = this, e = t._listeners; e && (delete t._listeners, V.each(e, function (e, n) { Fe.removeEventListener(t, n, e); })); }, updateHoverStyle: function (t, e, n) { var i, a, r, o = n ? "set" : "remove"; for (a = 0, r = t.length; a < r; ++a) (i = t[a]) && this.getDatasetMeta(i._datasetIndex).controller[o + "HoverStyle"](i); "dataset" === e && this.getDatasetMeta(t[0]._datasetIndex).controller[ "_" + o + "DatasetHoverStyle" ](); }, eventHandler: function (t) { var e = this, n = e.tooltip; if (!1 !== Le.notify(e, "beforeEvent", [t])) { (e._bufferedRender = !0), (e._bufferedRequest = null); var i = e.handleEvent(t); n && (i = n._start ? n.handleEvent(t) : i | n.handleEvent(t)), Le.notify(e, "afterEvent", [t]); var a = e._bufferedRequest; return ( a ? e.render(a) : i && !e.animating && (e.stop(), e.render({ duration: e.options.hover.animationDuration, lazy: !0, })), (e._bufferedRender = !1), (e._bufferedRequest = null), e ); } }, handleEvent: function (t) { var e, n = this, i = n.options || {}, a = i.hover; return ( (n.lastActive = n.lastActive || []), "mouseout" === t.type ? (n.active = []) : (n.active = n.getElementsAtEventForMode(t, a.mode, a)), V.callback(i.onHover || i.hover.onHover, [t.native, n.active], n), ("mouseup" !== t.type && "click" !== t.type) || (i.onClick && i.onClick.call(n, t.native, n.active)), n.lastActive.length && n.updateHoverStyle(n.lastActive, a.mode, !1), n.active.length && a.mode && n.updateHoverStyle(n.active, a.mode, !0), (e = !V.arrayEquals(n.active, n.lastActive)), (n.lastActive = n.active), e ); }, }), (Qe.instances = {}); var tn = Qe; (Qe.Controller = Qe), (Qe.types = {}), (V.configMerge = Xe), (V.scaleMerge = Ge); function en() { throw new Error( "This method is not implemented: either no adapter can be found or an incomplete integration was provided." ); } function nn(t) { this.options = t || {}; } V.extend(nn.prototype, { formats: en, parse: en, format: en, add: en, diff: en, startOf: en, endOf: en, _create: function (t) { return t; }, }), (nn.override = function (t) { V.extend(nn.prototype, t); }); var an = { _date: nn }, rn = { formatters: { values: function (t) { return V.isArray(t) ? t : "" + t; }, linear: function (t, e, n) { var i = n.length > 3 ? n[2] - n[1] : n[1] - n[0]; Math.abs(i) > 1 && t !== Math.floor(t) && (i = t - Math.floor(t)); var a = V.log10(Math.abs(i)), r = ""; if (0 !== t) if (Math.max(Math.abs(n[0]), Math.abs(n[n.length - 1])) < 1e-4) { var o = V.log10(Math.abs(t)), s = Math.floor(o) - Math.floor(a); (s = Math.max(Math.min(s, 20), 0)), (r = t.toExponential(s)); } else { var l = -1 * Math.floor(a); (l = Math.max(Math.min(l, 20), 0)), (r = t.toFixed(l)); } else r = "0"; return r; }, logarithmic: function (t, e, n) { var i = t / Math.pow(10, Math.floor(V.log10(t))); return 0 === t ? "0" : 1 === i || 2 === i || 5 === i || 0 === e || e === n.length - 1 ? t.toExponential() : ""; }, }, }, on = V.isArray, sn = V.isNullOrUndef, ln = V.valueOrDefault, un = V.valueAtIndexOrDefault; function dn(t, e, n) { var i, a = t.getTicks().length, r = Math.min(e, a - 1), o = t.getPixelForTick(r), s = t._startPixel, l = t._endPixel; if ( !( n && ((i = 1 === a ? Math.max(o - s, l - o) : 0 === e ? (t.getPixelForTick(1) - o) / 2 : (o - t.getPixelForTick(r - 1)) / 2), (o += r < e ? i : -i) < s - 1e-6 || o > l + 1e-6) ) ) return o; } function hn(t, e, n, i) { var a, r, o, s, l, u, d, h, c, f, g, p, m, v = n.length, b = [], x = [], y = []; for (a = 0; a < v; ++a) { if ( ((s = n[a].label), (l = n[a].major ? e.major : e.minor), (t.font = u = l.string), (d = i[u] = i[u] || { data: {}, gc: [] }), (h = l.lineHeight), (c = f = 0), sn(s) || on(s)) ) { if (on(s)) for (r = 0, o = s.length; r < o; ++r) (g = s[r]), sn(g) || on(g) || ((c = V.measureText(t, d.data, d.gc, c, g)), (f += h)); } else (c = V.measureText(t, d.data, d.gc, c, s)), (f = h); b.push(c), x.push(f), y.push(h / 2); } function _(t) { return { width: b[t] || 0, height: x[t] || 0, offset: y[t] || 0 }; } return ( (function (t, e) { V.each(t, function (t) { var n, i = t.gc, a = i.length / 2; if (a > e) { for (n = 0; n < a; ++n) delete t.data[i[n]]; i.splice(0, a); } }); })(i, v), (p = b.indexOf(Math.max.apply(null, b))), (m = x.indexOf(Math.max.apply(null, x))), { first: _(0), last: _(v - 1), widest: _(p), highest: _(m) } ); } function cn(t) { return t.drawTicks ? t.tickMarkLength : 0; } function fn(t) { var e, n; return t.display ? ((e = V.options._parseFont(t)), (n = V.options.toPadding(t.padding)), e.lineHeight + n.height) : 0; } function gn(t, e) { return V.extend( V.options._parseFont({ fontFamily: ln(e.fontFamily, t.fontFamily), fontSize: ln(e.fontSize, t.fontSize), fontStyle: ln(e.fontStyle, t.fontStyle), lineHeight: ln(e.lineHeight, t.lineHeight), }), { color: V.options.resolve([ e.fontColor, t.fontColor, z.global.defaultFontColor, ]), } ); } function pn(t) { var e = gn(t, t.minor); return { minor: e, major: t.major.enabled ? gn(t, t.major) : e }; } function mn(t) { var e, n, i, a = []; for (n = 0, i = t.length; n < i; ++n) void 0 !== (e = t[n])._index && a.push(e); return a; } function vn(t, e, n, i) { var a, r, o, s, l = ln(n, 0), u = Math.min(ln(i, t.length), t.length), d = 0; for ( e = Math.ceil(e), i && (e = (a = i - n) / Math.floor(a / e)), s = l; s < 0; ) d++, (s = Math.round(l + d * e)); for (r = Math.max(l, 0); r < u; r++) (o = t[r]), r === s ? ((o._index = r), d++, (s = Math.round(l + d * e))) : delete o.label; } z._set("scale", { display: !0, position: "left", offset: !1, gridLines: { display: !0, color: "rgba(0,0,0,0.1)", lineWidth: 1, drawBorder: !0, drawOnChartArea: !0, drawTicks: !0, tickMarkLength: 10, zeroLineWidth: 1, zeroLineColor: "rgba(0,0,0,0.25)", zeroLineBorderDash: [], zeroLineBorderDashOffset: 0, offsetGridLines: !1, borderDash: [], borderDashOffset: 0, }, scaleLabel: { display: !1, labelString: "", padding: { top: 4, bottom: 4 }, }, ticks: { beginAtZero: !1, minRotation: 0, maxRotation: 50, mirror: !1, padding: 0, reverse: !1, display: !0, autoSkip: !0, autoSkipPadding: 0, labelOffset: 0, callback: rn.formatters.values, minor: {}, major: {}, }, }); var bn = X.extend({ zeroLineIndex: 0, getPadding: function () { return { left: this.paddingLeft || 0, top: this.paddingTop || 0, right: this.paddingRight || 0, bottom: this.paddingBottom || 0, }; }, getTicks: function () { return this._ticks; }, _getLabels: function () { var t = this.chart.data; return ( this.options.labels || (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels || [] ); }, mergeTicksOptions: function () {}, beforeUpdate: function () { V.callback(this.options.beforeUpdate, [this]); }, update: function (t, e, n) { var i, a, r, o, s, l = this, u = l.options.ticks, d = u.sampleSize; if ( (l.beforeUpdate(), (l.maxWidth = t), (l.maxHeight = e), (l.margins = V.extend({ left: 0, right: 0, top: 0, bottom: 0 }, n)), (l._ticks = null), (l.ticks = null), (l._labelSizes = null), (l._maxLabelLines = 0), (l.longestLabelWidth = 0), (l.longestTextCache = l.longestTextCache || {}), (l._gridLineItems = null), (l._labelItems = null), l.beforeSetDimensions(), l.setDimensions(), l.afterSetDimensions(), l.beforeDataLimits(), l.determineDataLimits(), l.afterDataLimits(), l.beforeBuildTicks(), (o = l.buildTicks() || []), (!(o = l.afterBuildTicks(o) || o) || !o.length) && l.ticks) ) for (o = [], i = 0, a = l.ticks.length; i < a; ++i) o.push({ value: l.ticks[i], major: !1 }); return ( (l._ticks = o), (s = d < o.length), (r = l._convertTicksToLabels( s ? (function (t, e) { for ( var n = [], i = t.length / e, a = 0, r = t.length; a < r; a += i ) n.push(t[Math.floor(a)]); return n; })(o, d) : o )), l._configure(), l.beforeCalculateTickRotation(), l.calculateTickRotation(), l.afterCalculateTickRotation(), l.beforeFit(), l.fit(), l.afterFit(), (l._ticksToDraw = u.display && (u.autoSkip || "auto" === u.source) ? l._autoSkip(o) : o), s && (r = l._convertTicksToLabels(l._ticksToDraw)), (l.ticks = r), l.afterUpdate(), l.minSize ); }, _configure: function () { var t, e, n = this, i = n.options.ticks.reverse; n.isHorizontal() ? ((t = n.left), (e = n.right)) : ((t = n.top), (e = n.bottom), (i = !i)), (n._startPixel = t), (n._endPixel = e), (n._reversePixels = i), (n._length = e - t); }, afterUpdate: function () { V.callback(this.options.afterUpdate, [this]); }, beforeSetDimensions: function () { V.callback(this.options.beforeSetDimensions, [this]); }, setDimensions: function () { var t = this; t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), (t.paddingLeft = 0), (t.paddingTop = 0), (t.paddingRight = 0), (t.paddingBottom = 0); }, afterSetDimensions: function () { V.callback(this.options.afterSetDimensions, [this]); }, beforeDataLimits: function () { V.callback(this.options.beforeDataLimits, [this]); }, determineDataLimits: V.noop, afterDataLimits: function () { V.callback(this.options.afterDataLimits, [this]); }, beforeBuildTicks: function () { V.callback(this.options.beforeBuildTicks, [this]); }, buildTicks: V.noop, afterBuildTicks: function (t) { var e = this; return on(t) && t.length ? V.callback(e.options.afterBuildTicks, [e, t]) : ((e.ticks = V.callback(e.options.afterBuildTicks, [e, e.ticks]) || e.ticks), t); }, beforeTickToLabelConversion: function () { V.callback(this.options.beforeTickToLabelConversion, [this]); }, convertTicksToLabels: function () { var t = this.options.ticks; this.ticks = this.ticks.map(t.userCallback || t.callback, this); }, afterTickToLabelConversion: function () { V.callback(this.options.afterTickToLabelConversion, [this]); }, beforeCalculateTickRotation: function () { V.callback(this.options.beforeCalculateTickRotation, [this]); }, calculateTickRotation: function () { var t, e, n, i, a, r, o, s = this, l = s.options, u = l.ticks, d = s.getTicks().length, h = u.minRotation || 0, c = u.maxRotation, f = h; !s._isVisible() || !u.display || h >= c || d <= 1 || !s.isHorizontal() ? (s.labelRotation = h) : ((e = (t = s._getLabelSizes()).widest.width), (n = t.highest.height - t.highest.offset), (i = Math.min(s.maxWidth, s.chart.width - e)), e + 6 > (a = l.offset ? s.maxWidth / d : i / (d - 1)) && ((a = i / (d - (l.offset ? 0.5 : 1))), (r = s.maxHeight - cn(l.gridLines) - u.padding - fn(l.scaleLabel)), (o = Math.sqrt(e * e + n * n)), (f = V.toDegrees( Math.min( Math.asin(Math.min((t.highest.height + 6) / a, 1)), Math.asin(Math.min(r / o, 1)) - Math.asin(n / o) ) )), (f = Math.max(h, Math.min(c, f)))), (s.labelRotation = f)); }, afterCalculateTickRotation: function () { V.callback(this.options.afterCalculateTickRotation, [this]); }, beforeFit: function () { V.callback(this.options.beforeFit, [this]); }, fit: function () { var t = this, e = (t.minSize = { width: 0, height: 0 }), n = t.chart, i = t.options, a = i.ticks, r = i.scaleLabel, o = i.gridLines, s = t._isVisible(), l = "bottom" === i.position, u = t.isHorizontal(); if ( (u ? (e.width = t.maxWidth) : s && (e.width = cn(o) + fn(r)), u ? s && (e.height = cn(o) + fn(r)) : (e.height = t.maxHeight), a.display && s) ) { var d = pn(a), h = t._getLabelSizes(), c = h.first, f = h.last, g = h.widest, p = h.highest, m = 0.4 * d.minor.lineHeight, v = a.padding; if (u) { var b = 0 !== t.labelRotation, x = V.toRadians(t.labelRotation), y = Math.cos(x), _ = Math.sin(x), k = _ * g.width + y * (p.height - (b ? p.offset : 0)) + (b ? 0 : m); e.height = Math.min(t.maxHeight, e.height + k + v); var w, M, S = t.getPixelForTick(0) - t.left, C = t.right - t.getPixelForTick(t.getTicks().length - 1); b ? ((w = l ? y * c.width + _ * c.offset : _ * (c.height - c.offset)), (M = l ? _ * (f.height - f.offset) : y * f.width + _ * f.offset)) : ((w = c.width / 2), (M = f.width / 2)), (t.paddingLeft = Math.max(((w - S) * t.width) / (t.width - S), 0) + 3), (t.paddingRight = Math.max(((M - C) * t.width) / (t.width - C), 0) + 3); } else { var P = a.mirror ? 0 : g.width + v + m; (e.width = Math.min(t.maxWidth, e.width + P)), (t.paddingTop = c.height / 2), (t.paddingBottom = f.height / 2); } } t.handleMargins(), u ? ((t.width = t._length = n.width - t.margins.left - t.margins.right), (t.height = e.height)) : ((t.width = e.width), (t.height = t._length = n.height - t.margins.top - t.margins.bottom)); }, handleMargins: function () { var t = this; t.margins && ((t.margins.left = Math.max(t.paddingLeft, t.margins.left)), (t.margins.top = Math.max(t.paddingTop, t.margins.top)), (t.margins.right = Math.max(t.paddingRight, t.margins.right)), (t.margins.bottom = Math.max(t.paddingBottom, t.margins.bottom))); }, afterFit: function () { V.callback(this.options.afterFit, [this]); }, isHorizontal: function () { var t = this.options.position; return "top" === t || "bottom" === t; }, isFullWidth: function () { return this.options.fullWidth; }, getRightValue: function (t) { if (sn(t)) return NaN; if (("number" == typeof t || t instanceof Number) && !isFinite(t)) return NaN; if (t) if (this.isHorizontal()) { if (void 0 !== t.x) return this.getRightValue(t.x); } else if (void 0 !== t.y) return this.getRightValue(t.y); return t; }, _convertTicksToLabels: function (t) { var e, n, i, a = this; for ( a.ticks = t.map(function (t) { return t.value; }), a.beforeTickToLabelConversion(), e = a.convertTicksToLabels(t) || a.ticks, a.afterTickToLabelConversion(), n = 0, i = t.length; n < i; ++n ) t[n].label = e[n]; return e; }, _getLabelSizes: function () { var t = this, e = t._labelSizes; return ( e || ((t._labelSizes = e = hn(t.ctx, pn(t.options.ticks), t.getTicks(), t.longestTextCache)), (t.longestLabelWidth = e.widest.width)), e ); }, _parseValue: function (t) { var e, n, i, a; return ( on(t) ? ((e = +this.getRightValue(t[0])), (n = +this.getRightValue(t[1])), (i = Math.min(e, n)), (a = Math.max(e, n))) : ((e = void 0), (n = t = +this.getRightValue(t)), (i = t), (a = t)), { min: i, max: a, start: e, end: n } ); }, _getScaleLabel: function (t) { var e = this._parseValue(t); return void 0 !== e.start ? "[" + e.start + ", " + e.end + "]" : +this.getRightValue(t); }, getLabelForIndex: V.noop, getPixelForValue: V.noop, getValueForPixel: V.noop, getPixelForTick: function (t) { var e = this.options.offset, n = this._ticks.length, i = 1 / Math.max(n - (e ? 0 : 1), 1); return t < 0 || t > n - 1 ? null : this.getPixelForDecimal(t * i + (e ? i / 2 : 0)); }, getPixelForDecimal: function (t) { return ( this._reversePixels && (t = 1 - t), this._startPixel + t * this._length ); }, getDecimalForPixel: function (t) { var e = (t - this._startPixel) / this._length; return this._reversePixels ? 1 - e : e; }, getBasePixel: function () { return this.getPixelForValue(this.getBaseValue()); }, getBaseValue: function () { var t = this.min, e = this.max; return this.beginAtZero ? 0 : t < 0 && e < 0 ? e : t > 0 && e > 0 ? t : 0; }, _autoSkip: function (t) { var e, n, i, a, r = this.options.ticks, o = this._length, s = r.maxTicksLimit || o / this._tickSize() + 1, l = r.major.enabled ? (function (t) { var e, n, i = []; for (e = 0, n = t.length; e < n; e++) t[e].major && i.push(e); return i; })(t) : [], u = l.length, d = l[0], h = l[u - 1]; if (u > s) return ( (function (t, e, n) { var i, a, r = 0, o = e[0]; for (n = Math.ceil(n), i = 0; i < t.length; i++) (a = t[i]), i === o ? ((a._index = i), (o = e[++r * n])) : delete a.label; })(t, l, u / s), mn(t) ); if ( ((i = (function (t, e, n, i) { var a, r, o, s, l = (function (t) { var e, n, i = t.length; if (i < 2) return !1; for (n = t[0], e = 1; e < i; ++e) if (t[e] - t[e - 1] !== n) return !1; return n; })(t), u = (e.length - 1) / i; if (!l) return Math.max(u, 1); for (o = 0, s = (a = V.math._factorize(l)).length - 1; o < s; o++) if ((r = a[o]) > u) return r; return Math.max(u, 1); })(l, t, 0, s)), u > 0) ) { for (e = 0, n = u - 1; e < n; e++) vn(t, i, l[e], l[e + 1]); return ( (a = u > 1 ? (h - d) / (u - 1) : null), vn(t, i, V.isNullOrUndef(a) ? 0 : d - a, d), vn(t, i, h, V.isNullOrUndef(a) ? t.length : h + a), mn(t) ); } return vn(t, i), mn(t); }, _tickSize: function () { var t = this.options.ticks, e = V.toRadians(this.labelRotation), n = Math.abs(Math.cos(e)), i = Math.abs(Math.sin(e)), a = this._getLabelSizes(), r = t.autoSkipPadding || 0, o = a ? a.widest.width + r : 0, s = a ? a.highest.height + r : 0; return this.isHorizontal() ? s * n > o * i ? o / n : s / i : s * i < o * n ? s / n : o / i; }, _isVisible: function () { var t, e, n, i = this.chart, a = this.options.display; if ("auto" !== a) return !!a; for (t = 0, e = i.data.datasets.length; t < e; ++t) if ( i.isDatasetVisible(t) && ((n = i.getDatasetMeta(t)).xAxisID === this.id || n.yAxisID === this.id) ) return !0; return !1; }, _computeGridLineItems: function (t) { var e, n, i, a, r, o, s, l, u, d, h, c, f, g, p, m, v, b = this, x = b.chart, y = b.options, _ = y.gridLines, k = y.position, w = _.offsetGridLines, M = b.isHorizontal(), S = b._ticksToDraw, C = S.length + (w ? 1 : 0), P = cn(_), A = [], D = _.drawBorder ? un(_.lineWidth, 0, 0) : 0, T = D / 2, I = V._alignPixel, F = function (t) { return I(x, t, D); }; for ( "top" === k ? ((e = F(b.bottom)), (s = b.bottom - P), (u = e - T), (h = F(t.top) + T), (f = t.bottom)) : "bottom" === k ? ((e = F(b.top)), (h = t.top), (f = F(t.bottom) - T), (s = e + T), (u = b.top + P)) : "left" === k ? ((e = F(b.right)), (o = b.right - P), (l = e - T), (d = F(t.left) + T), (c = t.right)) : ((e = F(b.left)), (d = t.left), (c = F(t.right) - T), (o = e + T), (l = b.left + P)), n = 0; n < C; ++n ) (i = S[n] || {}), (sn(i.label) && n < S.length) || (n === b.zeroLineIndex && y.offset === w ? ((g = _.zeroLineWidth), (p = _.zeroLineColor), (m = _.zeroLineBorderDash || []), (v = _.zeroLineBorderDashOffset || 0)) : ((g = un(_.lineWidth, n, 1)), (p = un(_.color, n, "rgba(0,0,0,0.1)")), (m = _.borderDash || []), (v = _.borderDashOffset || 0)), void 0 !== (a = dn(b, i._index || n, w)) && ((r = I(x, a, g)), M ? (o = l = d = c = r) : (s = u = h = f = r), A.push({ tx1: o, ty1: s, tx2: l, ty2: u, x1: d, y1: h, x2: c, y2: f, width: g, color: p, borderDash: m, borderDashOffset: v, }))); return (A.ticksLength = C), (A.borderValue = e), A; }, _computeLabelItems: function () { var t, e, n, i, a, r, o, s, l, u, d, h, c = this, f = c.options, g = f.ticks, p = f.position, m = g.mirror, v = c.isHorizontal(), b = c._ticksToDraw, x = pn(g), y = g.padding, _ = cn(f.gridLines), k = -V.toRadians(c.labelRotation), w = []; for ( "top" === p ? ((r = c.bottom - _ - y), (o = k ? "left" : "center")) : "bottom" === p ? ((r = c.top + _ + y), (o = k ? "right" : "center")) : "left" === p ? ((a = c.right - (m ? 0 : _) - y), (o = m ? "left" : "right")) : ((a = c.left + (m ? 0 : _) + y), (o = m ? "right" : "left")), t = 0, e = b.length; t < e; ++t ) (i = (n = b[t]).label), sn(i) || ((s = c.getPixelForTick(n._index || t) + g.labelOffset), (u = (l = n.major ? x.major : x.minor).lineHeight), (d = on(i) ? i.length : 1), v ? ((a = s), (h = "top" === p ? ((k ? 1 : 0.5) - d) * u : (k ? 0 : 0.5) * u)) : ((r = s), (h = ((1 - d) * u) / 2)), w.push({ x: a, y: r, rotation: k, label: i, font: l, textOffset: h, textAlign: o, })); return w; }, _drawGrid: function (t) { var e = this, n = e.options.gridLines; if (n.display) { var i, a, r, o, s, l = e.ctx, u = e.chart, d = V._alignPixel, h = n.drawBorder ? un(n.lineWidth, 0, 0) : 0, c = e._gridLineItems || (e._gridLineItems = e._computeGridLineItems(t)); for (r = 0, o = c.length; r < o; ++r) (i = (s = c[r]).width), (a = s.color), i && a && (l.save(), (l.lineWidth = i), (l.strokeStyle = a), l.setLineDash && (l.setLineDash(s.borderDash), (l.lineDashOffset = s.borderDashOffset)), l.beginPath(), n.drawTicks && (l.moveTo(s.tx1, s.ty1), l.lineTo(s.tx2, s.ty2)), n.drawOnChartArea && (l.moveTo(s.x1, s.y1), l.lineTo(s.x2, s.y2)), l.stroke(), l.restore()); if (h) { var f, g, p, m, v = h, b = un(n.lineWidth, c.ticksLength - 1, 1), x = c.borderValue; e.isHorizontal() ? ((f = d(u, e.left, v) - v / 2), (g = d(u, e.right, b) + b / 2), (p = m = x)) : ((p = d(u, e.top, v) - v / 2), (m = d(u, e.bottom, b) + b / 2), (f = g = x)), (l.lineWidth = h), (l.strokeStyle = un(n.color, 0)), l.beginPath(), l.moveTo(f, p), l.lineTo(g, m), l.stroke(); } } }, _drawLabels: function () { var t = this; if (t.options.ticks.display) { var e, n, i, a, r, o, s, l, u = t.ctx, d = t._labelItems || (t._labelItems = t._computeLabelItems()); for (e = 0, i = d.length; e < i; ++e) { if ( ((o = (r = d[e]).font), u.save(), u.translate(r.x, r.y), u.rotate(r.rotation), (u.font = o.string), (u.fillStyle = o.color), (u.textBaseline = "middle"), (u.textAlign = r.textAlign), (s = r.label), (l = r.textOffset), on(s)) ) for (n = 0, a = s.length; n < a; ++n) u.fillText("" + s[n], 0, l), (l += o.lineHeight); else u.fillText(s, 0, l); u.restore(); } } }, _drawTitle: function () { var t = this, e = t.ctx, n = t.options, i = n.scaleLabel; if (i.display) { var a, r, o = ln(i.fontColor, z.global.defaultFontColor), s = V.options._parseFont(i), l = V.options.toPadding(i.padding), u = s.lineHeight / 2, d = n.position, h = 0; if (t.isHorizontal()) (a = t.left + t.width / 2), (r = "bottom" === d ? t.bottom - u - l.bottom : t.top + u + l.top); else { var c = "left" === d; (a = c ? t.left + u + l.top : t.right - u - l.top), (r = t.top + t.height / 2), (h = c ? -0.5 * Math.PI : 0.5 * Math.PI); } e.save(), e.translate(a, r), e.rotate(h), (e.textAlign = "center"), (e.textBaseline = "middle"), (e.fillStyle = o), (e.font = s.string), e.fillText(i.labelString, 0, 0), e.restore(); } }, draw: function (t) { this._isVisible() && (this._drawGrid(t), this._drawTitle(), this._drawLabels()); }, _layers: function () { var t = this, e = t.options, n = (e.ticks && e.ticks.z) || 0, i = (e.gridLines && e.gridLines.z) || 0; return t._isVisible() && n !== i && t.draw === t._draw ? [ { z: i, draw: function () { t._drawGrid.apply(t, arguments), t._drawTitle.apply(t, arguments); }, }, { z: n, draw: function () { t._drawLabels.apply(t, arguments); }, }, ] : [ { z: n, draw: function () { t.draw.apply(t, arguments); }, }, ]; }, _getMatchingVisibleMetas: function (t) { var e = this, n = e.isHorizontal(); return e.chart._getSortedVisibleDatasetMetas().filter(function (i) { return ( (!t || i.type === t) && (n ? i.xAxisID === e.id : i.yAxisID === e.id) ); }); }, }); bn.prototype._draw = bn.prototype.draw; var xn = bn, yn = V.isNullOrUndef, _n = xn.extend({ determineDataLimits: function () { var t, e = this, n = e._getLabels(), i = e.options.ticks, a = i.min, r = i.max, o = 0, s = n.length - 1; void 0 !== a && (t = n.indexOf(a)) >= 0 && (o = t), void 0 !== r && (t = n.indexOf(r)) >= 0 && (s = t), (e.minIndex = o), (e.maxIndex = s), (e.min = n[o]), (e.max = n[s]); }, buildTicks: function () { var t = this._getLabels(), e = this.minIndex, n = this.maxIndex; this.ticks = 0 === e && n === t.length - 1 ? t : t.slice(e, n + 1); }, getLabelForIndex: function (t, e) { var n = this.chart; return n.getDatasetMeta(e).controller._getValueScaleId() === this.id ? this.getRightValue(n.data.datasets[e].data[t]) : this._getLabels()[t]; }, _configure: function () { var t = this, e = t.options.offset, n = t.ticks; xn.prototype._configure.call(t), t.isHorizontal() || (t._reversePixels = !t._reversePixels), n && ((t._startValue = t.minIndex - (e ? 0.5 : 0)), (t._valueRange = Math.max(n.length - (e ? 0 : 1), 1))); }, getPixelForValue: function (t, e, n) { var i, a, r, o = this; return ( yn(e) || yn(n) || (t = o.chart.data.datasets[n].data[e]), yn(t) || (i = o.isHorizontal() ? t.x : t.y), (void 0 !== i || (void 0 !== t && isNaN(e))) && ((a = o._getLabels()), (t = V.valueOrDefault(i, t)), (e = -1 !== (r = a.indexOf(t)) ? r : e), isNaN(e) && (e = t)), o.getPixelForDecimal((e - o._startValue) / o._valueRange) ); }, getPixelForTick: function (t) { var e = this.ticks; return t < 0 || t > e.length - 1 ? null : this.getPixelForValue(e[t], t + this.minIndex); }, getValueForPixel: function (t) { var e = Math.round( this._startValue + this.getDecimalForPixel(t) * this._valueRange ); return Math.min(Math.max(e, 0), this.ticks.length - 1); }, getBasePixel: function () { return this.bottom; }, }), kn = { position: "bottom" }; _n._defaults = kn; var wn = V.noop, Mn = V.isNullOrUndef; var Sn = xn.extend({ getRightValue: function (t) { return "string" == typeof t ? +t : xn.prototype.getRightValue.call(this, t); }, handleTickRangeOptions: function () { var t = this, e = t.options.ticks; if (e.beginAtZero) { var n = V.sign(t.min), i = V.sign(t.max); n < 0 && i < 0 ? (t.max = 0) : n > 0 && i > 0 && (t.min = 0); } var a = void 0 !== e.min || void 0 !== e.suggestedMin, r = void 0 !== e.max || void 0 !== e.suggestedMax; void 0 !== e.min ? (t.min = e.min) : void 0 !== e.suggestedMin && (null === t.min ? (t.min = e.suggestedMin) : (t.min = Math.min(t.min, e.suggestedMin))), void 0 !== e.max ? (t.max = e.max) : void 0 !== e.suggestedMax && (null === t.max ? (t.max = e.suggestedMax) : (t.max = Math.max(t.max, e.suggestedMax))), a !== r && t.min >= t.max && (a ? (t.max = t.min + 1) : (t.min = t.max - 1)), t.min === t.max && (t.max++, e.beginAtZero || t.min--); }, getTickLimit: function () { var t, e = this.options.ticks, n = e.stepSize, i = e.maxTicksLimit; return ( n ? (t = Math.ceil(this.max / n) - Math.floor(this.min / n) + 1) : ((t = this._computeTickLimit()), (i = i || 11)), i && (t = Math.min(i, t)), t ); }, _computeTickLimit: function () { return Number.POSITIVE_INFINITY; }, handleDirectionalChanges: wn, buildTicks: function () { var t = this, e = t.options.ticks, n = t.getTickLimit(), i = { maxTicks: (n = Math.max(2, n)), min: e.min, max: e.max, precision: e.precision, stepSize: V.valueOrDefault(e.fixedStepSize, e.stepSize), }, a = (t.ticks = (function (t, e) { var n, i, a, r, o = [], s = t.stepSize, l = s || 1, u = t.maxTicks - 1, d = t.min, h = t.max, c = t.precision, f = e.min, g = e.max, p = V.niceNum((g - f) / u / l) * l; if (p < 1e-14 && Mn(d) && Mn(h)) return [f, g]; (r = Math.ceil(g / p) - Math.floor(f / p)) > u && (p = V.niceNum((r * p) / u / l) * l), s || Mn(c) ? (n = Math.pow(10, V._decimalPlaces(p))) : ((n = Math.pow(10, c)), (p = Math.ceil(p * n) / n)), (i = Math.floor(f / p) * p), (a = Math.ceil(g / p) * p), s && (!Mn(d) && V.almostWhole(d / p, p / 1e3) && (i = d), !Mn(h) && V.almostWhole(h / p, p / 1e3) && (a = h)), (r = (a - i) / p), (r = V.almostEquals(r, Math.round(r), p / 1e3) ? Math.round(r) : Math.ceil(r)), (i = Math.round(i * n) / n), (a = Math.round(a * n) / n), o.push(Mn(d) ? i : d); for (var m = 1; m < r; ++m) o.push(Math.round((i + m * p) * n) / n); return o.push(Mn(h) ? a : h), o; })(i, t)); t.handleDirectionalChanges(), (t.max = V.max(a)), (t.min = V.min(a)), e.reverse ? (a.reverse(), (t.start = t.max), (t.end = t.min)) : ((t.start = t.min), (t.end = t.max)); }, convertTicksToLabels: function () { var t = this; (t.ticksAsNumbers = t.ticks.slice()), (t.zeroLineIndex = t.ticks.indexOf(0)), xn.prototype.convertTicksToLabels.call(t); }, _configure: function () { var t, e = this, n = e.getTicks(), i = e.min, a = e.max; xn.prototype._configure.call(e), e.options.offset && n.length && ((i -= t = (a - i) / Math.max(n.length - 1, 1) / 2), (a += t)), (e._startValue = i), (e._endValue = a), (e._valueRange = a - i); }, }), Cn = { position: "left", ticks: { callback: rn.formatters.linear } }; function Pn(t, e, n, i) { var a, r, o = t.options, s = (function (t, e, n) { var i = [ n.type, void 0 === e && void 0 === n.stack ? n.index : "", n.stack, ].join("."); return void 0 === t[i] && (t[i] = { pos: [], neg: [] }), t[i]; })(e, o.stacked, n), l = s.pos, u = s.neg, d = i.length; for (a = 0; a < d; ++a) (r = t._parseValue(i[a])), isNaN(r.min) || isNaN(r.max) || n.data[a].hidden || ((l[a] = l[a] || 0), (u[a] = u[a] || 0), o.relativePoints ? (l[a] = 100) : r.min < 0 || r.max < 0 ? (u[a] += r.min) : (l[a] += r.max)); } function An(t, e, n) { var i, a, r = n.length; for (i = 0; i < r; ++i) (a = t._parseValue(n[i])), isNaN(a.min) || isNaN(a.max) || e.data[i].hidden || ((t.min = Math.min(t.min, a.min)), (t.max = Math.max(t.max, a.max))); } var Dn = Sn.extend({ determineDataLimits: function () { var t, e, n, i, a = this, r = a.options, o = a.chart.data.datasets, s = a._getMatchingVisibleMetas(), l = r.stacked, u = {}, d = s.length; if ( ((a.min = Number.POSITIVE_INFINITY), (a.max = Number.NEGATIVE_INFINITY), void 0 === l) ) for (t = 0; !l && t < d; ++t) l = void 0 !== (e = s[t]).stack; for (t = 0; t < d; ++t) (n = o[(e = s[t]).index].data), l ? Pn(a, u, e, n) : An(a, e, n); V.each(u, function (t) { (i = t.pos.concat(t.neg)), (a.min = Math.min(a.min, V.min(i))), (a.max = Math.max(a.max, V.max(i))); }), (a.min = V.isFinite(a.min) && !isNaN(a.min) ? a.min : 0), (a.max = V.isFinite(a.max) && !isNaN(a.max) ? a.max : 1), a.handleTickRangeOptions(); }, _computeTickLimit: function () { var t; return this.isHorizontal() ? Math.ceil(this.width / 40) : ((t = V.options._parseFont(this.options.ticks)), Math.ceil(this.height / t.lineHeight)); }, handleDirectionalChanges: function () { this.isHorizontal() || this.ticks.reverse(); }, getLabelForIndex: function (t, e) { return this._getScaleLabel(this.chart.data.datasets[e].data[t]); }, getPixelForValue: function (t) { return this.getPixelForDecimal( (+this.getRightValue(t) - this._startValue) / this._valueRange ); }, getValueForPixel: function (t) { return this._startValue + this.getDecimalForPixel(t) * this._valueRange; }, getPixelForTick: function (t) { var e = this.ticksAsNumbers; return t < 0 || t > e.length - 1 ? null : this.getPixelForValue(e[t]); }, }), Tn = Cn; Dn._defaults = Tn; var In = V.valueOrDefault, Fn = V.math.log10; var Ln = { position: "left", ticks: { callback: rn.formatters.logarithmic } }; function On(t, e) { return V.isFinite(t) && t >= 0 ? t : e; } var Rn = xn.extend({ determineDataLimits: function () { var t, e, n, i, a, r, o = this, s = o.options, l = o.chart, u = l.data.datasets, d = o.isHorizontal(); function h(t) { return d ? t.xAxisID === o.id : t.yAxisID === o.id; } (o.min = Number.POSITIVE_INFINITY), (o.max = Number.NEGATIVE_INFINITY), (o.minNotZero = Number.POSITIVE_INFINITY); var c = s.stacked; if (void 0 === c) for (t = 0; t < u.length; t++) if ( ((e = l.getDatasetMeta(t)), l.isDatasetVisible(t) && h(e) && void 0 !== e.stack) ) { c = !0; break; } if (s.stacked || c) { var f = {}; for (t = 0; t < u.length; t++) { var g = [ (e = l.getDatasetMeta(t)).type, void 0 === s.stacked && void 0 === e.stack ? t : "", e.stack, ].join("."); if (l.isDatasetVisible(t) && h(e)) for ( void 0 === f[g] && (f[g] = []), a = 0, r = (i = u[t].data).length; a < r; a++ ) { var p = f[g]; (n = o._parseValue(i[a])), isNaN(n.min) || isNaN(n.max) || e.data[a].hidden || n.min < 0 || n.max < 0 || ((p[a] = p[a] || 0), (p[a] += n.max)); } } V.each(f, function (t) { if (t.length > 0) { var e = V.min(t), n = V.max(t); (o.min = Math.min(o.min, e)), (o.max = Math.max(o.max, n)); } }); } else for (t = 0; t < u.length; t++) if (((e = l.getDatasetMeta(t)), l.isDatasetVisible(t) && h(e))) for (a = 0, r = (i = u[t].data).length; a < r; a++) (n = o._parseValue(i[a])), isNaN(n.min) || isNaN(n.max) || e.data[a].hidden || n.min < 0 || n.max < 0 || ((o.min = Math.min(n.min, o.min)), (o.max = Math.max(n.max, o.max)), 0 !== n.min && (o.minNotZero = Math.min(n.min, o.minNotZero))); (o.min = V.isFinite(o.min) ? o.min : null), (o.max = V.isFinite(o.max) ? o.max : null), (o.minNotZero = V.isFinite(o.minNotZero) ? o.minNotZero : null), this.handleTickRangeOptions(); }, handleTickRangeOptions: function () { var t = this, e = t.options.ticks; (t.min = On(e.min, t.min)), (t.max = On(e.max, t.max)), t.min === t.max && (0 !== t.min && null !== t.min ? ((t.min = Math.pow(10, Math.floor(Fn(t.min)) - 1)), (t.max = Math.pow(10, Math.floor(Fn(t.max)) + 1))) : ((t.min = 1), (t.max = 10))), null === t.min && (t.min = Math.pow(10, Math.floor(Fn(t.max)) - 1)), null === t.max && (t.max = 0 !== t.min ? Math.pow(10, Math.floor(Fn(t.min)) + 1) : 10), null === t.minNotZero && (t.min > 0 ? (t.minNotZero = t.min) : t.max < 1 ? (t.minNotZero = Math.pow(10, Math.floor(Fn(t.max)))) : (t.minNotZero = 1)); }, buildTicks: function () { var t = this, e = t.options.ticks, n = !t.isHorizontal(), i = { min: On(e.min), max: On(e.max) }, a = (t.ticks = (function (t, e) { var n, i, a = [], r = In(t.min, Math.pow(10, Math.floor(Fn(e.min)))), o = Math.floor(Fn(e.max)), s = Math.ceil(e.max / Math.pow(10, o)); 0 === r ? ((n = Math.floor(Fn(e.minNotZero))), (i = Math.floor(e.minNotZero / Math.pow(10, n))), a.push(r), (r = i * Math.pow(10, n))) : ((n = Math.floor(Fn(r))), (i = Math.floor(r / Math.pow(10, n)))); var l = n < 0 ? Math.pow(10, Math.abs(n)) : 1; do { a.push(r), 10 === ++i && ((i = 1), (l = ++n >= 0 ? 1 : l)), (r = Math.round(i * Math.pow(10, n) * l) / l); } while (n < o || (n === o && i < s)); var u = In(t.max, r); return a.push(u), a; })(i, t)); (t.max = V.max(a)), (t.min = V.min(a)), e.reverse ? ((n = !n), (t.start = t.max), (t.end = t.min)) : ((t.start = t.min), (t.end = t.max)), n && a.reverse(); }, convertTicksToLabels: function () { (this.tickValues = this.ticks.slice()), xn.prototype.convertTicksToLabels.call(this); }, getLabelForIndex: function (t, e) { return this._getScaleLabel(this.chart.data.datasets[e].data[t]); }, getPixelForTick: function (t) { var e = this.tickValues; return t < 0 || t > e.length - 1 ? null : this.getPixelForValue(e[t]); }, _getFirstTickValue: function (t) { var e = Math.floor(Fn(t)); return Math.floor(t / Math.pow(10, e)) * Math.pow(10, e); }, _configure: function () { var t = this, e = t.min, n = 0; xn.prototype._configure.call(t), 0 === e && ((e = t._getFirstTickValue(t.minNotZero)), (n = In(t.options.ticks.fontSize, z.global.defaultFontSize) / t._length)), (t._startValue = Fn(e)), (t._valueOffset = n), (t._valueRange = (Fn(t.max) - Fn(e)) / (1 - n)); }, getPixelForValue: function (t) { var e = this, n = 0; return ( (t = +e.getRightValue(t)) > e.min && t > 0 && (n = (Fn(t) - e._startValue) / e._valueRange + e._valueOffset), e.getPixelForDecimal(n) ); }, getValueForPixel: function (t) { var e = this, n = e.getDecimalForPixel(t); return 0 === n && 0 === e.min ? 0 : Math.pow(10, e._startValue + (n - e._valueOffset) * e._valueRange); }, }), zn = Ln; Rn._defaults = zn; var Nn = V.valueOrDefault, Bn = V.valueAtIndexOrDefault, En = V.options.resolve, Wn = { display: !0, animate: !0, position: "chartArea", angleLines: { display: !0, color: "rgba(0,0,0,0.1)", lineWidth: 1, borderDash: [], borderDashOffset: 0, }, gridLines: { circular: !1 }, ticks: { showLabelBackdrop: !0, backdropColor: "rgba(255,255,255,0.75)", backdropPaddingY: 2, backdropPaddingX: 2, callback: rn.formatters.linear, }, pointLabels: { display: !0, fontSize: 10, callback: function (t) { return t; }, }, }; function Vn(t) { var e = t.ticks; return e.display && t.display ? Nn(e.fontSize, z.global.defaultFontSize) + 2 * e.backdropPaddingY : 0; } function Hn(t, e, n, i, a) { return t === i || t === a ? { start: e - n / 2, end: e + n / 2 } : t < i || t > a ? { start: e - n, end: e } : { start: e, end: e + n }; } function jn(t) { return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right"; } function qn(t, e, n, i) { var a, r, o = n.y + i / 2; if (V.isArray(e)) for (a = 0, r = e.length; a < r; ++a) t.fillText(e[a], n.x, o), (o += i); else t.fillText(e, n.x, o); } function Un(t, e, n) { 90 === t || 270 === t ? (n.y -= e.h / 2) : (t > 270 || t < 90) && (n.y -= e.h); } function Yn(t) { return V.isNumber(t) ? t : 0; } var Gn = Sn.extend({ setDimensions: function () { var t = this; (t.width = t.maxWidth), (t.height = t.maxHeight), (t.paddingTop = Vn(t.options) / 2), (t.xCenter = Math.floor(t.width / 2)), (t.yCenter = Math.floor((t.height - t.paddingTop) / 2)), (t.drawingArea = Math.min(t.height - t.paddingTop, t.width) / 2); }, determineDataLimits: function () { var t = this, e = t.chart, n = Number.POSITIVE_INFINITY, i = Number.NEGATIVE_INFINITY; V.each(e.data.datasets, function (a, r) { if (e.isDatasetVisible(r)) { var o = e.getDatasetMeta(r); V.each(a.data, function (e, a) { var r = +t.getRightValue(e); isNaN(r) || o.data[a].hidden || ((n = Math.min(r, n)), (i = Math.max(r, i))); }); } }), (t.min = n === Number.POSITIVE_INFINITY ? 0 : n), (t.max = i === Number.NEGATIVE_INFINITY ? 0 : i), t.handleTickRangeOptions(); }, _computeTickLimit: function () { return Math.ceil(this.drawingArea / Vn(this.options)); }, convertTicksToLabels: function () { var t = this; Sn.prototype.convertTicksToLabels.call(t), (t.pointLabels = t.chart.data.labels.map(function () { var e = V.callback(t.options.pointLabels.callback, arguments, t); return e || 0 === e ? e : ""; })); }, getLabelForIndex: function (t, e) { return +this.getRightValue(this.chart.data.datasets[e].data[t]); }, fit: function () { var t = this.options; t.display && t.pointLabels.display ? (function (t) { var e, n, i, a = V.options._parseFont(t.options.pointLabels), r = { l: 0, r: t.width, t: 0, b: t.height - t.paddingTop }, o = {}; (t.ctx.font = a.string), (t._pointLabelSizes = []); var s, l, u, d = t.chart.data.labels.length; for (e = 0; e < d; e++) { (i = t.getPointPosition(e, t.drawingArea + 5)), (s = t.ctx), (l = a.lineHeight), (u = t.pointLabels[e]), (n = V.isArray(u) ? { w: V.longestText(s, s.font, u), h: u.length * l } : { w: s.measureText(u).width, h: l }), (t._pointLabelSizes[e] = n); var h = t.getIndexAngle(e), c = V.toDegrees(h) % 360, f = Hn(c, i.x, n.w, 0, 180), g = Hn(c, i.y, n.h, 90, 270); f.start < r.l && ((r.l = f.start), (o.l = h)), f.end > r.r && ((r.r = f.end), (o.r = h)), g.start < r.t && ((r.t = g.start), (o.t = h)), g.end > r.b && ((r.b = g.end), (o.b = h)); } t.setReductions(t.drawingArea, r, o); })(this) : this.setCenterPoint(0, 0, 0, 0); }, setReductions: function (t, e, n) { var i = this, a = e.l / Math.sin(n.l), r = Math.max(e.r - i.width, 0) / Math.sin(n.r), o = -e.t / Math.cos(n.t), s = -Math.max(e.b - (i.height - i.paddingTop), 0) / Math.cos(n.b); (a = Yn(a)), (r = Yn(r)), (o = Yn(o)), (s = Yn(s)), (i.drawingArea = Math.min( Math.floor(t - (a + r) / 2), Math.floor(t - (o + s) / 2) )), i.setCenterPoint(a, r, o, s); }, setCenterPoint: function (t, e, n, i) { var a = this, r = a.width - e - a.drawingArea, o = t + a.drawingArea, s = n + a.drawingArea, l = a.height - a.paddingTop - i - a.drawingArea; (a.xCenter = Math.floor((o + r) / 2 + a.left)), (a.yCenter = Math.floor((s + l) / 2 + a.top + a.paddingTop)); }, getIndexAngle: function (t) { var e = this.chart, n = (t * (360 / e.data.labels.length) + ((e.options || {}).startAngle || 0)) % 360; return ((n < 0 ? n + 360 : n) * Math.PI * 2) / 360; }, getDistanceFromCenterForValue: function (t) { var e = this; if (V.isNullOrUndef(t)) return NaN; var n = e.drawingArea / (e.max - e.min); return e.options.ticks.reverse ? (e.max - t) * n : (t - e.min) * n; }, getPointPosition: function (t, e) { var n = this.getIndexAngle(t) - Math.PI / 2; return { x: Math.cos(n) * e + this.xCenter, y: Math.sin(n) * e + this.yCenter, }; }, getPointPositionForValue: function (t, e) { return this.getPointPosition(t, this.getDistanceFromCenterForValue(e)); }, getBasePosition: function (t) { var e = this.min, n = this.max; return this.getPointPositionForValue( t || 0, this.beginAtZero ? 0 : e < 0 && n < 0 ? n : e > 0 && n > 0 ? e : 0 ); }, _drawGrid: function () { var t, e, n, i = this, a = i.ctx, r = i.options, o = r.gridLines, s = r.angleLines, l = Nn(s.lineWidth, o.lineWidth), u = Nn(s.color, o.color); if ( (r.pointLabels.display && (function (t) { var e = t.ctx, n = t.options, i = n.pointLabels, a = Vn(n), r = t.getDistanceFromCenterForValue( n.ticks.reverse ? t.min : t.max ), o = V.options._parseFont(i); e.save(), (e.font = o.string), (e.textBaseline = "middle"); for (var s = t.chart.data.labels.length - 1; s >= 0; s--) { var l = 0 === s ? a / 2 : 0, u = t.getPointPosition(s, r + l + 5), d = Bn(i.fontColor, s, z.global.defaultFontColor); e.fillStyle = d; var h = t.getIndexAngle(s), c = V.toDegrees(h); (e.textAlign = jn(c)), Un(c, t._pointLabelSizes[s], u), qn(e, t.pointLabels[s], u, o.lineHeight); } e.restore(); })(i), o.display && V.each(i.ticks, function (t, n) { 0 !== n && ((e = i.getDistanceFromCenterForValue(i.ticksAsNumbers[n])), (function (t, e, n, i) { var a, r = t.ctx, o = e.circular, s = t.chart.data.labels.length, l = Bn(e.color, i - 1), u = Bn(e.lineWidth, i - 1); if ((o || s) && l && u) { if ( (r.save(), (r.strokeStyle = l), (r.lineWidth = u), r.setLineDash && (r.setLineDash(e.borderDash || []), (r.lineDashOffset = e.borderDashOffset || 0)), r.beginPath(), o) ) r.arc(t.xCenter, t.yCenter, n, 0, 2 * Math.PI); else { (a = t.getPointPosition(0, n)), r.moveTo(a.x, a.y); for (var d = 1; d < s; d++) (a = t.getPointPosition(d, n)), r.lineTo(a.x, a.y); } r.closePath(), r.stroke(), r.restore(); } })(i, o, e, n)); }), s.display && l && u) ) { for ( a.save(), a.lineWidth = l, a.strokeStyle = u, a.setLineDash && (a.setLineDash(En([s.borderDash, o.borderDash, []])), (a.lineDashOffset = En([ s.borderDashOffset, o.borderDashOffset, 0, ]))), t = i.chart.data.labels.length - 1; t >= 0; t-- ) (e = i.getDistanceFromCenterForValue( r.ticks.reverse ? i.min : i.max )), (n = i.getPointPosition(t, e)), a.beginPath(), a.moveTo(i.xCenter, i.yCenter), a.lineTo(n.x, n.y), a.stroke(); a.restore(); } }, _drawLabels: function () { var t = this, e = t.ctx, n = t.options.ticks; if (n.display) { var i, a, r = t.getIndexAngle(0), o = V.options._parseFont(n), s = Nn(n.fontColor, z.global.defaultFontColor); e.save(), (e.font = o.string), e.translate(t.xCenter, t.yCenter), e.rotate(r), (e.textAlign = "center"), (e.textBaseline = "middle"), V.each(t.ticks, function (r, l) { (0 !== l || n.reverse) && ((i = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l])), n.showLabelBackdrop && ((a = e.measureText(r).width), (e.fillStyle = n.backdropColor), e.fillRect( -a / 2 - n.backdropPaddingX, -i - o.size / 2 - n.backdropPaddingY, a + 2 * n.backdropPaddingX, o.size + 2 * n.backdropPaddingY )), (e.fillStyle = s), e.fillText(r, 0, -i)); }), e.restore(); } }, _drawTitle: V.noop, }), Xn = Wn; Gn._defaults = Xn; var Kn = V._deprecated, Zn = V.options.resolve, $n = V.valueOrDefault, Jn = Number.MIN_SAFE_INTEGER || -9007199254740991, Qn = Number.MAX_SAFE_INTEGER || 9007199254740991, ti = { millisecond: { common: !0, size: 1, steps: 1e3 }, second: { common: !0, size: 1e3, steps: 60 }, minute: { common: !0, size: 6e4, steps: 60 }, hour: { common: !0, size: 36e5, steps: 24 }, day: { common: !0, size: 864e5, steps: 30 }, week: { common: !1, size: 6048e5, steps: 4 }, month: { common: !0, size: 2628e6, steps: 12 }, quarter: { common: !1, size: 7884e6, steps: 4 }, year: { common: !0, size: 3154e7 }, }, ei = Object.keys(ti); function ni(t, e) { return t - e; } function ii(t) { return V.valueOrDefault(t.time.min, t.ticks.min); } function ai(t) { return V.valueOrDefault(t.time.max, t.ticks.max); } function ri(t, e, n, i) { var a = (function (t, e, n) { for (var i, a, r, o = 0, s = t.length - 1; o >= 0 && o <= s; ) { if (((a = t[(i = (o + s) >> 1) - 1] || null), (r = t[i]), !a)) return { lo: null, hi: r }; if (r[e] < n) o = i + 1; else { if (!(a[e] > n)) return { lo: a, hi: r }; s = i - 1; } } return { lo: r, hi: null }; })(t, e, n), r = a.lo ? (a.hi ? a.lo : t[t.length - 2]) : t[0], o = a.lo ? (a.hi ? a.hi : t[t.length - 1]) : t[1], s = o[e] - r[e], l = s ? (n - r[e]) / s : 0, u = (o[i] - r[i]) * l; return r[i] + u; } function oi(t, e) { var n = t._adapter, i = t.options.time, a = i.parser, r = a || i.format, o = e; return ( "function" == typeof a && (o = a(o)), V.isFinite(o) || (o = "string" == typeof r ? n.parse(o, r) : n.parse(o)), null !== o ? +o : (a || "function" != typeof r || ((o = r(e)), V.isFinite(o) || (o = n.parse(o))), o) ); } function si(t, e) { if (V.isNullOrUndef(e)) return null; var n = t.options.time, i = oi(t, t.getRightValue(e)); return null === i ? i : (n.round && (i = +t._adapter.startOf(i, n.round)), i); } function li(t, e, n, i) { var a, r, o, s = ei.length; for (a = ei.indexOf(t); a < s - 1; ++a) if ( ((o = (r = ti[ei[a]]).steps ? r.steps : Qn), r.common && Math.ceil((n - e) / (o * r.size)) <= i) ) return ei[a]; return ei[s - 1]; } function ui(t, e, n) { var i, a, r = [], o = {}, s = e.length; for (i = 0; i < s; ++i) (o[(a = e[i])] = i), r.push({ value: a, major: !1 }); return 0 !== s && n ? (function (t, e, n, i) { var a, r, o = t._adapter, s = +o.startOf(e[0].value, i), l = e[e.length - 1].value; for (a = s; a <= l; a = +o.add(a, 1, i)) (r = n[a]) >= 0 && (e[r].major = !0); return e; })(t, r, o, n) : r; } var di = xn.extend({ initialize: function () { this.mergeTicksOptions(), xn.prototype.initialize.call(this); }, update: function () { var t = this, e = t.options, n = e.time || (e.time = {}), i = (t._adapter = new an._date(e.adapters.date)); return ( Kn("time scale", n.format, "time.format", "time.parser"), Kn("time scale", n.min, "time.min", "ticks.min"), Kn("time scale", n.max, "time.max", "ticks.max"), V.mergeIf(n.displayFormats, i.formats()), xn.prototype.update.apply(t, arguments) ); }, getRightValue: function (t) { return ( t && void 0 !== t.t && (t = t.t), xn.prototype.getRightValue.call(this, t) ); }, determineDataLimits: function () { var t, e, n, i, a, r, o, s = this, l = s.chart, u = s._adapter, d = s.options, h = d.time.unit || "day", c = Qn, f = Jn, g = [], p = [], m = [], v = s._getLabels(); for (t = 0, n = v.length; t < n; ++t) m.push(si(s, v[t])); for (t = 0, n = (l.data.datasets || []).length; t < n; ++t) if (l.isDatasetVisible(t)) if (((a = l.data.datasets[t].data), V.isObject(a[0]))) for (p[t] = [], e = 0, i = a.length; e < i; ++e) (r = si(s, a[e])), g.push(r), (p[t][e] = r); else (p[t] = m.slice(0)), o || ((g = g.concat(m)), (o = !0)); else p[t] = []; m.length && ((c = Math.min(c, m[0])), (f = Math.max(f, m[m.length - 1]))), g.length && ((g = n > 1 ? (function (t) { var e, n, i, a = {}, r = []; for (e = 0, n = t.length; e < n; ++e) a[(i = t[e])] || ((a[i] = !0), r.push(i)); return r; })(g).sort(ni) : g.sort(ni)), (c = Math.min(c, g[0])), (f = Math.max(f, g[g.length - 1]))), (c = si(s, ii(d)) || c), (f = si(s, ai(d)) || f), (c = c === Qn ? +u.startOf(Date.now(), h) : c), (f = f === Jn ? +u.endOf(Date.now(), h) + 1 : f), (s.min = Math.min(c, f)), (s.max = Math.max(c + 1, f)), (s._table = []), (s._timestamps = { data: g, datasets: p, labels: m }); }, buildTicks: function () { var t, e, n, i = this, a = i.min, r = i.max, o = i.options, s = o.ticks, l = o.time, u = i._timestamps, d = [], h = i.getLabelCapacity(a), c = s.source, f = o.distribution; for ( u = "data" === c || ("auto" === c && "series" === f) ? u.data : "labels" === c ? u.labels : (function (t, e, n, i) { var a, r = t._adapter, o = t.options, s = o.time, l = s.unit || li(s.minUnit, e, n, i), u = Zn([s.stepSize, s.unitStepSize, 1]), d = "week" === l && s.isoWeekday, h = e, c = []; if ( (d && (h = +r.startOf(h, "isoWeek", d)), (h = +r.startOf(h, d ? "day" : l)), r.diff(n, e, l) > 1e5 * u) ) throw ( e + " and " + n + " are too far apart with stepSize of " + u + " " + l ); for (a = h; a < n; a = +r.add(a, u, l)) c.push(a); return (a !== n && "ticks" !== o.bounds) || c.push(a), c; })(i, a, r, h), "ticks" === o.bounds && u.length && ((a = u[0]), (r = u[u.length - 1])), a = si(i, ii(o)) || a, r = si(i, ai(o)) || r, t = 0, e = u.length; t < e; ++t ) (n = u[t]) >= a && n <= r && d.push(n); return ( (i.min = a), (i.max = r), (i._unit = l.unit || (s.autoSkip ? li(l.minUnit, i.min, i.max, h) : (function (t, e, n, i, a) { var r, o; for (r = ei.length - 1; r >= ei.indexOf(n); r--) if ( ((o = ei[r]), ti[o].common && t._adapter.diff(a, i, o) >= e - 1) ) return o; return ei[n ? ei.indexOf(n) : 0]; })(i, d.length, l.minUnit, i.min, i.max))), (i._majorUnit = s.major.enabled && "year" !== i._unit ? (function (t) { for (var e = ei.indexOf(t) + 1, n = ei.length; e < n; ++e) if (ti[ei[e]].common) return ei[e]; })(i._unit) : void 0), (i._table = (function (t, e, n, i) { if ("linear" === i || !t.length) return [ { time: e, pos: 0 }, { time: n, pos: 1 }, ]; var a, r, o, s, l, u = [], d = [e]; for (a = 0, r = t.length; a < r; ++a) (s = t[a]) > e && s < n && d.push(s); for (d.push(n), a = 0, r = d.length; a < r; ++a) (l = d[a + 1]), (o = d[a - 1]), (s = d[a]), (void 0 !== o && void 0 !== l && Math.round((l + o) / 2) === s) || u.push({ time: s, pos: a / (r - 1) }); return u; })(i._timestamps.data, a, r, f)), (i._offsets = (function (t, e, n, i, a) { var r, o, s = 0, l = 0; return ( a.offset && e.length && ((r = ri(t, "time", e[0], "pos")), (s = 1 === e.length ? 1 - r : (ri(t, "time", e[1], "pos") - r) / 2), (o = ri(t, "time", e[e.length - 1], "pos")), (l = 1 === e.length ? o : (o - ri(t, "time", e[e.length - 2], "pos")) / 2)), { start: s, end: l, factor: 1 / (s + 1 + l) } ); })(i._table, d, 0, 0, o)), s.reverse && d.reverse(), ui(i, d, i._majorUnit) ); }, getLabelForIndex: function (t, e) { var n = this, i = n._adapter, a = n.chart.data, r = n.options.time, o = a.labels && t < a.labels.length ? a.labels[t] : "", s = a.datasets[e].data[t]; return ( V.isObject(s) && (o = n.getRightValue(s)), r.tooltipFormat ? i.format(oi(n, o), r.tooltipFormat) : "string" == typeof o ? o : i.format(oi(n, o), r.displayFormats.datetime) ); }, tickFormatFunction: function (t, e, n, i) { var a = this._adapter, r = this.options, o = r.time.displayFormats, s = o[this._unit], l = this._majorUnit, u = o[l], d = n[e], h = r.ticks, c = l && u && d && d.major, f = a.format(t, i || (c ? u : s)), g = c ? h.major : h.minor, p = Zn([g.callback, g.userCallback, h.callback, h.userCallback]); return p ? p(f, e, n) : f; }, convertTicksToLabels: function (t) { var e, n, i = []; for (e = 0, n = t.length; e < n; ++e) i.push(this.tickFormatFunction(t[e].value, e, t)); return i; }, getPixelForOffset: function (t) { var e = this._offsets, n = ri(this._table, "time", t, "pos"); return this.getPixelForDecimal((e.start + n) * e.factor); }, getPixelForValue: function (t, e, n) { var i = null; if ( (void 0 !== e && void 0 !== n && (i = this._timestamps.datasets[n][e]), null === i && (i = si(this, t)), null !== i) ) return this.getPixelForOffset(i); }, getPixelForTick: function (t) { var e = this.getTicks(); return t >= 0 && t < e.length ? this.getPixelForOffset(e[t].value) : null; }, getValueForPixel: function (t) { var e = this._offsets, n = this.getDecimalForPixel(t) / e.factor - e.end, i = ri(this._table, "pos", n, "time"); return this._adapter._create(i); }, _getLabelSize: function (t) { var e = this.options.ticks, n = this.ctx.measureText(t).width, i = V.toRadians(this.isHorizontal() ? e.maxRotation : e.minRotation), a = Math.cos(i), r = Math.sin(i), o = $n(e.fontSize, z.global.defaultFontSize); return { w: n * a + o * r, h: n * r + o * a }; }, getLabelWidth: function (t) { return this._getLabelSize(t).w; }, getLabelCapacity: function (t) { var e = this, n = e.options.time, i = n.displayFormats, a = i[n.unit] || i.millisecond, r = e.tickFormatFunction(t, 0, ui(e, [t], e._majorUnit), a), o = e._getLabelSize(r), s = Math.floor(e.isHorizontal() ? e.width / o.w : e.height / o.h); return e.options.offset && s--, s > 0 ? s : 1; }, }), hi = { position: "bottom", distribution: "linear", bounds: "data", adapters: {}, time: { parser: !1, unit: !1, round: !1, displayFormat: !1, isoWeekday: !1, minUnit: "millisecond", displayFormats: {}, }, ticks: { autoSkip: !1, source: "auto", major: { enabled: !1 } }, }; di._defaults = hi; var ci = { category: _n, linear: Dn, logarithmic: Rn, radialLinear: Gn, time: di, }, fi = { datetime: "MMM D, YYYY, h:mm:ss a", millisecond: "h:mm:ss.SSS a", second: "h:mm:ss a", minute: "h:mm a", hour: "hA", day: "MMM D", week: "ll", month: "MMM YYYY", quarter: "[Q]Q - YYYY", year: "YYYY", }; an._date.override( "function" == typeof t ? { _id: "moment", formats: function () { return fi; }, parse: function (e, n) { return ( "string" == typeof e && "string" == typeof n ? (e = t(e, n)) : e instanceof t || (e = t(e)), e.isValid() ? e.valueOf() : null ); }, format: function (e, n) { return t(e).format(n); }, add: function (e, n, i) { return t(e).add(n, i).valueOf(); }, diff: function (e, n, i) { return t(e).diff(t(n), i); }, startOf: function (e, n, i) { return ( (e = t(e)), "isoWeek" === n ? e.isoWeekday(i).valueOf() : e.startOf(n).valueOf() ); }, endOf: function (e, n) { return t(e).endOf(n).valueOf(); }, _create: function (e) { return t(e); }, } : {} ), z._set("global", { plugins: { filler: { propagate: !0 } } }); var gi = { dataset: function (t) { var e = t.fill, n = t.chart, i = n.getDatasetMeta(e), a = (i && n.isDatasetVisible(e) && i.dataset._children) || [], r = a.length || 0; return r ? function (t, e) { return (e < r && a[e]._view) || null; } : null; }, boundary: function (t) { var e = t.boundary, n = e ? e.x : null, i = e ? e.y : null; return V.isArray(e) ? function (t, n) { return e[n]; } : function (t) { return { x: null === n ? t.x : n, y: null === i ? t.y : i }; }; }, }; function pi(t, e, n) { var i, a = t._model || {}, r = a.fill; if ((void 0 === r && (r = !!a.backgroundColor), !1 === r || null === r)) return !1; if (!0 === r) return "origin"; if (((i = parseFloat(r, 10)), isFinite(i) && Math.floor(i) === i)) return ( ("-" !== r[0] && "+" !== r[0]) || (i = e + i), !(i === e || i < 0 || i >= n) && i ); switch (r) { case "bottom": return "start"; case "top": return "end"; case "zero": return "origin"; case "origin": case "start": case "end": return r; default: return !1; } } function mi(t) { return (t.el._scale || {}).getPointPositionForValue ? (function (t) { var e, n, i, a, r, o = t.el._scale, s = o.options, l = o.chart.data.labels.length, u = t.fill, d = []; if (!l) return null; for ( e = s.ticks.reverse ? o.max : o.min, n = s.ticks.reverse ? o.min : o.max, i = o.getPointPositionForValue(0, e), a = 0; a < l; ++a ) (r = "start" === u || "end" === u ? o.getPointPositionForValue(a, "start" === u ? e : n) : o.getBasePosition(a)), s.gridLines.circular && ((r.cx = i.x), (r.cy = i.y), (r.angle = o.getIndexAngle(a) - Math.PI / 2)), d.push(r); return d; })(t) : (function (t) { var e, n = t.el._model || {}, i = t.el._scale || {}, a = t.fill, r = null; if (isFinite(a)) return null; if ( ("start" === a ? (r = void 0 === n.scaleBottom ? i.bottom : n.scaleBottom) : "end" === a ? (r = void 0 === n.scaleTop ? i.top : n.scaleTop) : void 0 !== n.scaleZero ? (r = n.scaleZero) : i.getBasePixel && (r = i.getBasePixel()), null != r) ) { if (void 0 !== r.x && void 0 !== r.y) return r; if (V.isFinite(r)) return { x: (e = i.isHorizontal()) ? r : null, y: e ? null : r }; } return null; })(t); } function vi(t, e, n) { var i, a = t[e].fill, r = [e]; if (!n) return a; for (; !1 !== a && -1 === r.indexOf(a); ) { if (!isFinite(a)) return a; if (!(i = t[a])) return !1; if (i.visible) return a; r.push(a), (a = i.fill); } return !1; } function bi(t) { var e = t.fill, n = "dataset"; return !1 === e ? null : (isFinite(e) || (n = "boundary"), gi[n](t)); } function xi(t) { return t && !t.skip; } function yi(t, e, n, i, a) { var r, o, s, l; if (i && a) { for (t.moveTo(e[0].x, e[0].y), r = 1; r < i; ++r) V.canvas.lineTo(t, e[r - 1], e[r]); if (void 0 === n[0].angle) for (t.lineTo(n[a - 1].x, n[a - 1].y), r = a - 1; r > 0; --r) V.canvas.lineTo(t, n[r], n[r - 1], !0); else for ( o = n[0].cx, s = n[0].cy, l = Math.sqrt(Math.pow(n[0].x - o, 2) + Math.pow(n[0].y - s, 2)), r = a - 1; r > 0; --r ) t.arc(o, s, l, n[r].angle, n[r - 1].angle, !0); } } function _i(t, e, n, i, a, r) { var o, s, l, u, d, h, c, f, g = e.length, p = i.spanGaps, m = [], v = [], b = 0, x = 0; for (t.beginPath(), o = 0, s = g; o < s; ++o) (d = n((u = e[(l = o % g)]._view), l, i)), (h = xi(u)), (c = xi(d)), r && void 0 === f && h && (s = g + (f = o + 1)), h && c ? ((b = m.push(u)), (x = v.push(d))) : b && x && (p ? (h && m.push(u), c && v.push(d)) : (yi(t, m, v, b, x), (b = x = 0), (m = []), (v = []))); yi(t, m, v, b, x), t.closePath(), (t.fillStyle = a), t.fill(); } var ki = { id: "filler", afterDatasetsUpdate: function (t, e) { var n, i, a, r, o = (t.data.datasets || []).length, s = e.propagate, l = []; for (i = 0; i < o; ++i) (r = null), (a = (n = t.getDatasetMeta(i)).dataset) && a._model && a instanceof _t.Line && (r = { visible: t.isDatasetVisible(i), fill: pi(a, i, o), chart: t, el: a, }), (n.$filler = r), l.push(r); for (i = 0; i < o; ++i) (r = l[i]) && ((r.fill = vi(l, i, s)), (r.boundary = mi(r)), (r.mapper = bi(r))); }, beforeDatasetsDraw: function (t) { var e, n, i, a, r, o, s, l = t._getSortedVisibleDatasetMetas(), u = t.ctx; for (n = l.length - 1; n >= 0; --n) (e = l[n].$filler) && e.visible && ((a = (i = e.el)._view), (r = i._children || []), (o = e.mapper), (s = a.backgroundColor || z.global.defaultColor), o && s && r.length && (V.canvas.clipArea(u, t.chartArea), _i(u, r, o, a, s, i._loop), V.canvas.unclipArea(u))); }, }, wi = V.rtl.getRtlAdapter, Mi = V.noop, Si = V.valueOrDefault; function Ci(t, e) { return t.usePointStyle && t.boxWidth > e ? e : t.boxWidth; } z._set("global", { legend: { display: !0, position: "top", align: "center", fullWidth: !0, reverse: !1, weight: 1e3, onClick: function (t, e) { var n = e.datasetIndex, i = this.chart, a = i.getDatasetMeta(n); (a.hidden = null === a.hidden ? !i.data.datasets[n].hidden : null), i.update(); }, onHover: null, onLeave: null, labels: { boxWidth: 40, padding: 10, generateLabels: function (t) { var e = t.data.datasets, n = t.options.legend || {}, i = n.labels && n.labels.usePointStyle; return t._getSortedDatasetMetas().map(function (n) { var a = n.controller.getStyle(i ? 0 : void 0); return { text: e[n.index].label, fillStyle: a.backgroundColor, hidden: !t.isDatasetVisible(n.index), lineCap: a.borderCapStyle, lineDash: a.borderDash, lineDashOffset: a.borderDashOffset, lineJoin: a.borderJoinStyle, lineWidth: a.borderWidth, strokeStyle: a.borderColor, pointStyle: a.pointStyle, rotation: a.rotation, datasetIndex: n.index, }; }, this); }, }, }, legendCallback: function (t) { var e, n, i, a = document.createElement("ul"), r = t.data.datasets; for ( a.setAttribute("class", t.id + "-legend"), e = 0, n = r.length; e < n; e++ ) ((i = a.appendChild(document.createElement("li"))).appendChild( document.createElement("span") ).style.backgroundColor = r[e].backgroundColor), r[e].label && i.appendChild(document.createTextNode(r[e].label)); return a.outerHTML; }, }); var Pi = X.extend({ initialize: function (t) { V.extend(this, t), (this.legendHitBoxes = []), (this._hoveredItem = null), (this.doughnutMode = !1); }, beforeUpdate: Mi, update: function (t, e, n) { var i = this; return ( i.beforeUpdate(), (i.maxWidth = t), (i.maxHeight = e), (i.margins = n), i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize ); }, afterUpdate: Mi, beforeSetDimensions: Mi, setDimensions: function () { var t = this; t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), (t.paddingLeft = 0), (t.paddingTop = 0), (t.paddingRight = 0), (t.paddingBottom = 0), (t.minSize = { width: 0, height: 0 }); }, afterSetDimensions: Mi, beforeBuildLabels: Mi, buildLabels: function () { var t = this, e = t.options.labels || {}, n = V.callback(e.generateLabels, [t.chart], t) || []; e.filter && (n = n.filter(function (n) { return e.filter(n, t.chart.data); })), t.options.reverse && n.reverse(), (t.legendItems = n); }, afterBuildLabels: Mi, beforeFit: Mi, fit: function () { var t = this, e = t.options, n = e.labels, i = e.display, a = t.ctx, r = V.options._parseFont(n), o = r.size, s = (t.legendHitBoxes = []), l = t.minSize, u = t.isHorizontal(); if ( (u ? ((l.width = t.maxWidth), (l.height = i ? 10 : 0)) : ((l.width = i ? 10 : 0), (l.height = t.maxHeight)), i) ) { if (((a.font = r.string), u)) { var d = (t.lineWidths = [0]), h = 0; (a.textAlign = "left"), (a.textBaseline = "middle"), V.each(t.legendItems, function (t, e) { var i = Ci(n, o) + o / 2 + a.measureText(t.text).width; (0 === e || d[d.length - 1] + i + 2 * n.padding > l.width) && ((h += o + n.padding), (d[d.length - (e > 0 ? 0 : 1)] = 0)), (s[e] = { left: 0, top: 0, width: i, height: o }), (d[d.length - 1] += i + n.padding); }), (l.height += h); } else { var c = n.padding, f = (t.columnWidths = []), g = (t.columnHeights = []), p = n.padding, m = 0, v = 0; V.each(t.legendItems, function (t, e) { var i = Ci(n, o) + o / 2 + a.measureText(t.text).width; e > 0 && v + o + 2 * c > l.height && ((p += m + n.padding), f.push(m), g.push(v), (m = 0), (v = 0)), (m = Math.max(m, i)), (v += o + c), (s[e] = { left: 0, top: 0, width: i, height: o }); }), (p += m), f.push(m), g.push(v), (l.width += p); } (t.width = l.width), (t.height = l.height); } else t.width = l.width = t.height = l.height = 0; }, afterFit: Mi, isHorizontal: function () { return ( "top" === this.options.position || "bottom" === this.options.position ); }, draw: function () { var t = this, e = t.options, n = e.labels, i = z.global, a = i.defaultColor, r = i.elements.line, o = t.height, s = t.columnHeights, l = t.width, u = t.lineWidths; if (e.display) { var d, h = wi(e.rtl, t.left, t.minSize.width), c = t.ctx, f = Si(n.fontColor, i.defaultFontColor), g = V.options._parseFont(n), p = g.size; (c.textAlign = h.textAlign("left")), (c.textBaseline = "middle"), (c.lineWidth = 0.5), (c.strokeStyle = f), (c.fillStyle = f), (c.font = g.string); var m = Ci(n, p), v = t.legendHitBoxes, b = function (t, i) { switch (e.align) { case "start": return n.padding; case "end": return t - i; default: return (t - i + n.padding) / 2; } }, x = t.isHorizontal(); (d = x ? { x: t.left + b(l, u[0]), y: t.top + n.padding, line: 0 } : { x: t.left + n.padding, y: t.top + b(o, s[0]), line: 0 }), V.rtl.overrideTextDirection(t.ctx, e.textDirection); var y = p + n.padding; V.each(t.legendItems, function (e, i) { var f = c.measureText(e.text).width, g = m + p / 2 + f, _ = d.x, k = d.y; h.setWidth(t.minSize.width), x ? i > 0 && _ + g + n.padding > t.left + t.minSize.width && ((k = d.y += y), d.line++, (_ = d.x = t.left + b(l, u[d.line]))) : i > 0 && k + y > t.top + t.minSize.height && ((_ = d.x = _ + t.columnWidths[d.line] + n.padding), d.line++, (k = d.y = t.top + b(o, s[d.line]))); var w = h.x(_); !(function (t, e, i) { if (!(isNaN(m) || m <= 0)) { c.save(); var o = Si(i.lineWidth, r.borderWidth); if ( ((c.fillStyle = Si(i.fillStyle, a)), (c.lineCap = Si(i.lineCap, r.borderCapStyle)), (c.lineDashOffset = Si(i.lineDashOffset, r.borderDashOffset)), (c.lineJoin = Si(i.lineJoin, r.borderJoinStyle)), (c.lineWidth = o), (c.strokeStyle = Si(i.strokeStyle, a)), c.setLineDash && c.setLineDash(Si(i.lineDash, r.borderDash)), n && n.usePointStyle) ) { var s = (m * Math.SQRT2) / 2, l = h.xPlus(t, m / 2), u = e + p / 2; V.canvas.drawPoint(c, i.pointStyle, s, l, u, i.rotation); } else c.fillRect(h.leftForLtr(t, m), e, m, p), 0 !== o && c.strokeRect(h.leftForLtr(t, m), e, m, p); c.restore(); } })(w, k, e), (v[i].left = h.leftForLtr(w, v[i].width)), (v[i].top = k), (function (t, e, n, i) { var a = p / 2, r = h.xPlus(t, m + a), o = e + a; c.fillText(n.text, r, o), n.hidden && (c.beginPath(), (c.lineWidth = 2), c.moveTo(r, o), c.lineTo(h.xPlus(r, i), o), c.stroke()); })(w, k, e, f), x ? (d.x += g + n.padding) : (d.y += y); }), V.rtl.restoreTextDirection(t.ctx, e.textDirection); } }, _getLegendItemAt: function (t, e) { var n, i, a, r = this; if (t >= r.left && t <= r.right && e >= r.top && e <= r.bottom) for (a = r.legendHitBoxes, n = 0; n < a.length; ++n) if ( t >= (i = a[n]).left && t <= i.left + i.width && e >= i.top && e <= i.top + i.height ) return r.legendItems[n]; return null; }, handleEvent: function (t) { var e, n = this, i = n.options, a = "mouseup" === t.type ? "click" : t.type; if ("mousemove" === a) { if (!i.onHover && !i.onLeave) return; } else { if ("click" !== a) return; if (!i.onClick) return; } (e = n._getLegendItemAt(t.x, t.y)), "click" === a ? e && i.onClick && i.onClick.call(n, t.native, e) : (i.onLeave && e !== n._hoveredItem && (n._hoveredItem && i.onLeave.call(n, t.native, n._hoveredItem), (n._hoveredItem = e)), i.onHover && e && i.onHover.call(n, t.native, e)); }, }); function Ai(t, e) { var n = new Pi({ ctx: t.ctx, options: e, chart: t }); ge.configure(t, n, e), ge.addBox(t, n), (t.legend = n); } var Di = { id: "legend", _element: Pi, beforeInit: function (t) { var e = t.options.legend; e && Ai(t, e); }, beforeUpdate: function (t) { var e = t.options.legend, n = t.legend; e ? (V.mergeIf(e, z.global.legend), n ? (ge.configure(t, n, e), (n.options = e)) : Ai(t, e)) : n && (ge.removeBox(t, n), delete t.legend); }, afterEvent: function (t, e) { var n = t.legend; n && n.handleEvent(e); }, }, Ti = V.noop; z._set("global", { title: { display: !1, fontStyle: "bold", fullWidth: !0, padding: 10, position: "top", text: "", weight: 2e3, }, }); var Ii = X.extend({ initialize: function (t) { V.extend(this, t), (this.legendHitBoxes = []); }, beforeUpdate: Ti, update: function (t, e, n) { var i = this; return ( i.beforeUpdate(), (i.maxWidth = t), (i.maxHeight = e), (i.margins = n), i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize ); }, afterUpdate: Ti, beforeSetDimensions: Ti, setDimensions: function () { var t = this; t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), (t.paddingLeft = 0), (t.paddingTop = 0), (t.paddingRight = 0), (t.paddingBottom = 0), (t.minSize = { width: 0, height: 0 }); }, afterSetDimensions: Ti, beforeBuildLabels: Ti, buildLabels: Ti, afterBuildLabels: Ti, beforeFit: Ti, fit: function () { var t, e = this, n = e.options, i = (e.minSize = {}), a = e.isHorizontal(); n.display ? ((t = (V.isArray(n.text) ? n.text.length : 1) * V.options._parseFont(n).lineHeight + 2 * n.padding), (e.width = i.width = a ? e.maxWidth : t), (e.height = i.height = a ? t : e.maxHeight)) : (e.width = i.width = e.height = i.height = 0); }, afterFit: Ti, isHorizontal: function () { var t = this.options.position; return "top" === t || "bottom" === t; }, draw: function () { var t = this, e = t.ctx, n = t.options; if (n.display) { var i, a, r, o = V.options._parseFont(n), s = o.lineHeight, l = s / 2 + n.padding, u = 0, d = t.top, h = t.left, c = t.bottom, f = t.right; (e.fillStyle = V.valueOrDefault( n.fontColor, z.global.defaultFontColor )), (e.font = o.string), t.isHorizontal() ? ((a = h + (f - h) / 2), (r = d + l), (i = f - h)) : ((a = "left" === n.position ? h + l : f - l), (r = d + (c - d) / 2), (i = c - d), (u = Math.PI * ("left" === n.position ? -0.5 : 0.5))), e.save(), e.translate(a, r), e.rotate(u), (e.textAlign = "center"), (e.textBaseline = "middle"); var g = n.text; if (V.isArray(g)) for (var p = 0, m = 0; m < g.length; ++m) e.fillText(g[m], 0, p, i), (p += s); else e.fillText(g, 0, 0, i); e.restore(); } }, }); function Fi(t, e) { var n = new Ii({ ctx: t.ctx, options: e, chart: t }); ge.configure(t, n, e), ge.addBox(t, n), (t.titleBlock = n); } var Li = {}, Oi = ki, Ri = Di, zi = { id: "title", _element: Ii, beforeInit: function (t) { var e = t.options.title; e && Fi(t, e); }, beforeUpdate: function (t) { var e = t.options.title, n = t.titleBlock; e ? (V.mergeIf(e, z.global.title), n ? (ge.configure(t, n, e), (n.options = e)) : Fi(t, e)) : n && (ge.removeBox(t, n), delete t.titleBlock); }, }; for (var Ni in ((Li.filler = Oi), (Li.legend = Ri), (Li.title = zi), (tn.helpers = V), (function () { function t(t, e, n) { var i; return ( "string" == typeof t ? ((i = parseInt(t, 10)), -1 !== t.indexOf("%") && (i = (i / 100) * e.parentNode[n])) : (i = t), i ); } function e(t) { return null != t && "none" !== t; } function n(n, i, a) { var r = document.defaultView, o = V._getParentNode(n), s = r.getComputedStyle(n)[i], l = r.getComputedStyle(o)[i], u = e(s), d = e(l), h = Number.POSITIVE_INFINITY; return u || d ? Math.min(u ? t(s, n, a) : h, d ? t(l, o, a) : h) : "none"; } (V.where = function (t, e) { if (V.isArray(t) && Array.prototype.filter) return t.filter(e); var n = []; return ( V.each(t, function (t) { e(t) && n.push(t); }), n ); }), (V.findIndex = Array.prototype.findIndex ? function (t, e, n) { return t.findIndex(e, n); } : function (t, e, n) { n = void 0 === n ? t : n; for (var i = 0, a = t.length; i < a; ++i) if (e.call(n, t[i], i, t)) return i; return -1; }), (V.findNextWhere = function (t, e, n) { V.isNullOrUndef(n) && (n = -1); for (var i = n + 1; i < t.length; i++) { var a = t[i]; if (e(a)) return a; } }), (V.findPreviousWhere = function (t, e, n) { V.isNullOrUndef(n) && (n = t.length); for (var i = n - 1; i >= 0; i--) { var a = t[i]; if (e(a)) return a; } }), (V.isNumber = function (t) { return !isNaN(parseFloat(t)) && isFinite(t); }), (V.almostEquals = function (t, e, n) { return Math.abs(t - e) < n; }), (V.almostWhole = function (t, e) { var n = Math.round(t); return n - e <= t && n + e >= t; }), (V.max = function (t) { return t.reduce(function (t, e) { return isNaN(e) ? t : Math.max(t, e); }, Number.NEGATIVE_INFINITY); }), (V.min = function (t) { return t.reduce(function (t, e) { return isNaN(e) ? t : Math.min(t, e); }, Number.POSITIVE_INFINITY); }), (V.sign = Math.sign ? function (t) { return Math.sign(t); } : function (t) { return 0 === (t = +t) || isNaN(t) ? t : t > 0 ? 1 : -1; }), (V.toRadians = function (t) { return t * (Math.PI / 180); }), (V.toDegrees = function (t) { return t * (180 / Math.PI); }), (V._decimalPlaces = function (t) { if (V.isFinite(t)) { for (var e = 1, n = 0; Math.round(t * e) / e !== t; ) (e *= 10), n++; return n; } }), (V.getAngleFromPoint = function (t, e) { var n = e.x - t.x, i = e.y - t.y, a = Math.sqrt(n * n + i * i), r = Math.atan2(i, n); return ( r < -0.5 * Math.PI && (r += 2 * Math.PI), { angle: r, distance: a } ); }), (V.distanceBetweenPoints = function (t, e) { return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2)); }), (V.aliasPixel = function (t) { return t % 2 == 0 ? 0 : 0.5; }), (V._alignPixel = function (t, e, n) { var i = t.currentDevicePixelRatio, a = n / 2; return Math.round((e - a) * i) / i + a; }), (V.splineCurve = function (t, e, n, i) { var a = t.skip ? e : t, r = e, o = n.skip ? e : n, s = Math.sqrt(Math.pow(r.x - a.x, 2) + Math.pow(r.y - a.y, 2)), l = Math.sqrt(Math.pow(o.x - r.x, 2) + Math.pow(o.y - r.y, 2)), u = s / (s + l), d = l / (s + l), h = i * (u = isNaN(u) ? 0 : u), c = i * (d = isNaN(d) ? 0 : d); return { previous: { x: r.x - h * (o.x - a.x), y: r.y - h * (o.y - a.y) }, next: { x: r.x + c * (o.x - a.x), y: r.y + c * (o.y - a.y) }, }; }), (V.EPSILON = Number.EPSILON || 1e-14), (V.splineCurveMonotone = function (t) { var e, n, i, a, r, o, s, l, u, d = (t || []).map(function (t) { return { model: t._model, deltaK: 0, mK: 0 }; }), h = d.length; for (e = 0; e < h; ++e) if (!(i = d[e]).model.skip) { if ( ((n = e > 0 ? d[e - 1] : null), (a = e < h - 1 ? d[e + 1] : null) && !a.model.skip) ) { var c = a.model.x - i.model.x; i.deltaK = 0 !== c ? (a.model.y - i.model.y) / c : 0; } !n || n.model.skip ? (i.mK = i.deltaK) : !a || a.model.skip ? (i.mK = n.deltaK) : this.sign(n.deltaK) !== this.sign(i.deltaK) ? (i.mK = 0) : (i.mK = (n.deltaK + i.deltaK) / 2); } for (e = 0; e < h - 1; ++e) (i = d[e]), (a = d[e + 1]), i.model.skip || a.model.skip || (V.almostEquals(i.deltaK, 0, this.EPSILON) ? (i.mK = a.mK = 0) : ((r = i.mK / i.deltaK), (o = a.mK / i.deltaK), (l = Math.pow(r, 2) + Math.pow(o, 2)) <= 9 || ((s = 3 / Math.sqrt(l)), (i.mK = r * s * i.deltaK), (a.mK = o * s * i.deltaK)))); for (e = 0; e < h; ++e) (i = d[e]).model.skip || ((n = e > 0 ? d[e - 1] : null), (a = e < h - 1 ? d[e + 1] : null), n && !n.model.skip && ((u = (i.model.x - n.model.x) / 3), (i.model.controlPointPreviousX = i.model.x - u), (i.model.controlPointPreviousY = i.model.y - u * i.mK)), a && !a.model.skip && ((u = (a.model.x - i.model.x) / 3), (i.model.controlPointNextX = i.model.x + u), (i.model.controlPointNextY = i.model.y + u * i.mK))); }), (V.nextItem = function (t, e, n) { return n ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1]; }), (V.previousItem = function (t, e, n) { return n ? e <= 0 ? t[t.length - 1] : t[e - 1] : e <= 0 ? t[0] : t[e - 1]; }), (V.niceNum = function (t, e) { var n = Math.floor(V.log10(t)), i = t / Math.pow(10, n); return ( (e ? i < 1.5 ? 1 : i < 3 ? 2 : i < 7 ? 5 : 10 : i <= 1 ? 1 : i <= 2 ? 2 : i <= 5 ? 5 : 10) * Math.pow(10, n) ); }), (V.requestAnimFrame = "undefined" == typeof window ? function (t) { t(); } : window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) { return window.setTimeout(t, 1e3 / 60); }), (V.getRelativePosition = function (t, e) { var n, i, a = t.originalEvent || t, r = t.target || t.srcElement, o = r.getBoundingClientRect(), s = a.touches; s && s.length > 0 ? ((n = s[0].clientX), (i = s[0].clientY)) : ((n = a.clientX), (i = a.clientY)); var l = parseFloat(V.getStyle(r, "padding-left")), u = parseFloat(V.getStyle(r, "padding-top")), d = parseFloat(V.getStyle(r, "padding-right")), h = parseFloat(V.getStyle(r, "padding-bottom")), c = o.right - o.left - l - d, f = o.bottom - o.top - u - h; return { x: (n = Math.round( (((n - o.left - l) / c) * r.width) / e.currentDevicePixelRatio )), y: (i = Math.round( (((i - o.top - u) / f) * r.height) / e.currentDevicePixelRatio )), }; }), (V.getConstraintWidth = function (t) { return n(t, "max-width", "clientWidth"); }), (V.getConstraintHeight = function (t) { return n(t, "max-height", "clientHeight"); }), (V._calculatePadding = function (t, e, n) { return (e = V.getStyle(t, e) || "0").indexOf("%") > -1 ? (n * parseInt(e, 10)) / 100 : parseInt(e, 10); }), (V._getParentNode = function (t) { var e = t.parentNode; return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e; }), (V.getMaximumWidth = function (t) { var e = V._getParentNode(t); if (!e) return t.clientWidth; var n = e.clientWidth, i = n - V._calculatePadding(e, "padding-left", n) - V._calculatePadding(e, "padding-right", n), a = V.getConstraintWidth(t); return isNaN(a) ? i : Math.min(i, a); }), (V.getMaximumHeight = function (t) { var e = V._getParentNode(t); if (!e) return t.clientHeight; var n = e.clientHeight, i = n - V._calculatePadding(e, "padding-top", n) - V._calculatePadding(e, "padding-bottom", n), a = V.getConstraintHeight(t); return isNaN(a) ? i : Math.min(i, a); }), (V.getStyle = function (t, e) { return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e); }), (V.retinaScale = function (t, e) { var n = (t.currentDevicePixelRatio = e || ("undefined" != typeof window && window.devicePixelRatio) || 1); if (1 !== n) { var i = t.canvas, a = t.height, r = t.width; (i.height = a * n), (i.width = r * n), t.ctx.scale(n, n), i.style.height || i.style.width || ((i.style.height = a + "px"), (i.style.width = r + "px")); } }), (V.fontString = function (t, e, n) { return e + " " + t + "px " + n; }), (V.longestText = function (t, e, n, i) { var a = ((i = i || {}).data = i.data || {}), r = (i.garbageCollect = i.garbageCollect || []); i.font !== e && ((a = i.data = {}), (r = i.garbageCollect = []), (i.font = e)), (t.font = e); var o, s, l, u, d, h = 0, c = n.length; for (o = 0; o < c; o++) if (null != (u = n[o]) && !0 !== V.isArray(u)) h = V.measureText(t, a, r, h, u); else if (V.isArray(u)) for (s = 0, l = u.length; s < l; s++) null == (d = u[s]) || V.isArray(d) || (h = V.measureText(t, a, r, h, d)); var f = r.length / 2; if (f > n.length) { for (o = 0; o < f; o++) delete a[r[o]]; r.splice(0, f); } return h; }), (V.measureText = function (t, e, n, i, a) { var r = e[a]; return ( r || ((r = e[a] = t.measureText(a).width), n.push(a)), r > i && (i = r), i ); }), (V.numberOfLabelLines = function (t) { var e = 1; return ( V.each(t, function (t) { V.isArray(t) && t.length > e && (e = t.length); }), e ); }), (V.color = k ? function (t) { return ( t instanceof CanvasGradient && (t = z.global.defaultColor), k(t) ); } : function (t) { return console.error("Color.js not found!"), t; }), (V.getHoverColor = function (t) { return t instanceof CanvasPattern || t instanceof CanvasGradient ? t : V.color(t).saturate(0.5).darken(0.1).rgbString(); }); })(), (tn._adapters = an), (tn.Animation = Z), (tn.animationService = $), (tn.controllers = $t), (tn.DatasetController = nt), (tn.defaults = z), (tn.Element = X), (tn.elements = _t), (tn.Interaction = ae), (tn.layouts = ge), (tn.platform = Fe), (tn.plugins = Le), (tn.Scale = xn), (tn.scaleService = Oe), (tn.Ticks = rn), (tn.Tooltip = Ue), tn.helpers.each(ci, function (t, e) { tn.scaleService.registerScaleType(e, t, t._defaults); }), Li)) Li.hasOwnProperty(Ni) && tn.plugins.register(Li[Ni]); tn.platform.initialize(); var Bi = tn; return ( "undefined" != typeof window && (window.Chart = tn), (tn.Chart = tn), (tn.Legend = Li.legend._element), (tn.Title = Li.title._element), (tn.pluginService = tn.plugins), (tn.PluginBase = tn.Element.extend({})), (tn.canvasHelpers = tn.helpers.canvas), (tn.layoutService = tn.layouts), (tn.LinearScaleBase = Sn), tn.helpers.each( ["Bar", "Bubble", "Doughnut", "Line", "PolarArea", "Radar", "Scatter"], function (t) { tn[t] = function (e, n) { return new tn( e, tn.helpers.merge(n || {}, { type: t.charAt(0).toLowerCase() + t.slice(1), }) ); }; } ), Bi ); });