Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/es5/modules/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/es5/modules/boost-canvas.js.map

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/boost-canvas\n * @requires highcharts\n *\n * Boost module\n *\n * (c) 2010-2024 Highsoft AS\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"highcharts\"), require(\"highcharts\")[\"Color\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/boost-canvas\", [[\"highcharts/highcharts\"], [\"highcharts/highcharts\",\"Color\"]], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/boost-canvas\"] = factory(require(\"highcharts\"), require(\"highcharts\")[\"Color\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Color\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__620__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 620:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 944:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ boost_canvas_src; }\n});\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\"],\"commonjs\":[\"highcharts\"],\"commonjs2\":[\"highcharts\"],\"root\":[\"Highcharts\"]}\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_ = __webpack_require__(944);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n;// ./code/es5/es-modules/Extensions/Boost/Boostables.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n// These are the series we allow boosting for.\nvar Boostables = [\n    'area',\n    'areaspline',\n    'arearange',\n    'column',\n    'columnrange',\n    'bar',\n    'line',\n    'scatter',\n    'heatmap',\n    'bubble',\n    'treemap'\n];\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_Boostables = (Boostables);\n\n;// ./code/es5/es-modules/Extensions/Boost/BoostableMap.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Imports\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n// These are the series we allow boosting for.\nvar BoostableMap = {};\nBoost_Boostables.forEach(function (item) {\n    BoostableMap[item] = true;\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_BoostableMap = (BoostableMap);\n\n;// ./code/es5/es-modules/Extensions/Boost/BoostChart.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\nvar addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass, wglMode) {\n    if (wglMode && pushUnique(composed, 'Boost.Chart')) {\n        ChartClass.prototype.callbacks.push(onChartCallback);\n    }\n    return ChartClass;\n}\n/**\n * Get the clip rectangle for a target, either a series or the chart.\n * For the chart, we need to consider the maximum extent of its Y axes,\n * in case of Highcharts Stock panes and navigator.\n *\n * @private\n * @function Highcharts.Chart#getBoostClipRect\n */\nfunction getBoostClipRect(chart, target) {\n    var navigator = chart.navigator;\n    var clipBox = {\n            x: chart.plotLeft,\n            y: chart.plotTop,\n            width: chart.plotWidth,\n            height: chart.plotHeight\n        };\n    if (navigator && chart.inverted) { // #17820, #20936\n        clipBox.width += navigator.top + navigator.height;\n        if (!navigator.opposite) {\n            clipBox.x = navigator.left;\n        }\n    }\n    else if (navigator && !chart.inverted) {\n        clipBox.height = navigator.top + navigator.height - chart.plotTop;\n    }\n    // Clipping of individual series (#11906, #19039).\n    if (target.getClipBox) {\n        var _a = target,\n            xAxis = _a.xAxis,\n            yAxis = _a.yAxis;\n        clipBox = target.getClipBox();\n        if (chart.inverted) {\n            var lateral = clipBox.width;\n            clipBox.width = clipBox.height;\n            clipBox.height = lateral;\n            clipBox.x = yAxis.pos;\n            clipBox.y = xAxis.pos;\n        }\n        else {\n            clipBox.x = xAxis.pos;\n            clipBox.y = yAxis.pos;\n        }\n    }\n    if (target === chart) {\n        var verticalAxes = chart.inverted ? chart.xAxis : chart.yAxis; // #14444\n            if (verticalAxes.length <= 1) {\n                clipBox.y = Math.min(verticalAxes[0].pos,\n            clipBox.y);\n            clipBox.height = (verticalAxes[0].pos -\n                chart.plotTop +\n                verticalAxes[0].len);\n        }\n    }\n    return clipBox;\n}\n/**\n * Returns true if the chart is in series boost mode.\n * @private\n * @param {Highcharts.Chart} chart\n * Chart to check.\n * @return {boolean}\n * `true` if the chart is in series boost mode.\n */\nfunction isChartSeriesBoosting(chart) {\n    var allSeries = chart.series,\n        boost = chart.boost = chart.boost || {},\n        boostOptions = chart.options.boost || {},\n        threshold = pick(boostOptions.seriesThreshold, 50);\n    if (allSeries.length >= threshold) {\n        return true;\n    }\n    if (allSeries.length === 1) {\n        return false;\n    }\n    var allowBoostForce = boostOptions.allowForce;\n    if (typeof allowBoostForce === 'undefined') {\n        allowBoostForce = true;\n        for (var _i = 0, _a = chart.xAxis; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            if (pick(axis.min, -Infinity) > pick(axis.dataMin, -Infinity) ||\n                pick(axis.max, Infinity) < pick(axis.dataMax, Infinity)) {\n                allowBoostForce = false;\n                break;\n            }\n        }\n    }\n    if (typeof boost.forceChartBoost !== 'undefined') {\n        if (allowBoostForce) {\n            return boost.forceChartBoost;\n        }\n        boost.forceChartBoost = void 0;\n    }\n    // If there are more than five series currently boosting,\n    // we should boost the whole chart to avoid running out of webgl contexts.\n    var canBoostCount = 0,\n        needBoostCount = 0,\n        seriesOptions;\n    for (var _b = 0, allSeries_1 = allSeries; _b < allSeries_1.length; _b++) {\n        var series = allSeries_1[_b];\n        seriesOptions = series.options;\n        // Don't count series with boostThreshold set to 0\n        // See #8950\n        // Also don't count if the series is hidden.\n        // See #9046\n        if (seriesOptions.boostThreshold === 0 ||\n            series.visible === false) {\n            continue;\n        }\n        // Don't count heatmap series as they are handled differently.\n        // In the future we should make the heatmap/treemap path compatible\n        // with forcing. See #9636.\n        if (series.type === 'heatmap') {\n            continue;\n        }\n        if (Boost_BoostableMap[series.type]) {\n            ++canBoostCount;\n        }\n        if (patientMax(series.getColumn('x', true), seriesOptions.data, \n        /// series.xData,\n        series.points) >= (seriesOptions.boostThreshold || Number.MAX_VALUE)) {\n            ++needBoostCount;\n        }\n    }\n    boost.forceChartBoost = allowBoostForce && ((\n    // Even when the series that need a boost are less than or equal\n    // to 5, force a chart boost when all series are to be boosted.\n    // See #18815\n    canBoostCount === allSeries.length &&\n        needBoostCount === canBoostCount) ||\n        needBoostCount > 5);\n    return boost.forceChartBoost;\n}\n/**\n * Take care of the canvas blitting\n * @private\n */\nfunction onChartCallback(chart) {\n    /**\n     * Convert chart-level canvas to image.\n     * @private\n     */\n    function canvasToSVG() {\n        if (chart.boost &&\n            chart.boost.wgl &&\n            isChartSeriesBoosting(chart)) {\n            chart.boost.wgl.render(chart);\n        }\n    }\n    /**\n     * Clear chart-level canvas.\n     * @private\n     */\n    function preRender() {\n        var _a,\n            _b;\n        // Reset force state\n        chart.boost = chart.boost || {};\n        chart.boost.forceChartBoost = void 0;\n        chart.boosted = false;\n        // Clear the canvas\n        if (!chart.axes.some(function (axis) { return axis.isPanning; })) {\n            (_b = (_a = chart.boost).clear) === null || _b === void 0 ? void 0 : _b.call(_a);\n        }\n        if (chart.boost.canvas &&\n            chart.boost.wgl &&\n            isChartSeriesBoosting(chart)) {\n            // Allocate\n            chart.boost.wgl.allocateBuffer(chart);\n        }\n        // See #6518 + #6739\n        if (chart.boost.markerGroup &&\n            chart.xAxis &&\n            chart.xAxis.length > 0 &&\n            chart.yAxis &&\n            chart.yAxis.length > 0) {\n            chart.boost.markerGroup.translate(chart.xAxis[0].pos, chart.yAxis[0].pos);\n        }\n    }\n    addEvent(chart, 'predraw', preRender);\n    // Use the load event rather than redraw, otherwise user load events will\n    // fire too early (#18755)\n    addEvent(chart, 'load', canvasToSVG, { order: -1 });\n    addEvent(chart, 'redraw', canvasToSVG);\n    var prevX = -1;\n    var prevY = -1;\n    addEvent(chart.pointer, 'afterGetHoverData', function (e) {\n        var _a;\n        var series = (_a = e.hoverPoint) === null || _a === void 0 ? void 0 : _a.series;\n        chart.boost = chart.boost || {};\n        if (chart.boost.markerGroup && series) {\n            var xAxis = chart.inverted ? series.yAxis : series.xAxis;\n            var yAxis = chart.inverted ? series.xAxis : series.yAxis;\n            if ((xAxis && xAxis.pos !== prevX) ||\n                (yAxis && yAxis.pos !== prevY)) {\n                // #21176: If the axis is changed, hide teh halo without\n                // animation  to prevent flickering of halos sharing the\n                // same marker group\n                chart.series.forEach(function (s) {\n                    var _a;\n                    (_a = s.halo) === null || _a === void 0 ? void 0 : _a.hide();\n                });\n                // #10464: Keep the marker group position in sync with the\n                // position of the hovered series axes since there is only\n                // one shared marker group when boosting.\n                chart.boost.markerGroup.translate(xAxis.pos, yAxis.pos);\n                prevX = xAxis.pos;\n                prevY = yAxis.pos;\n            }\n        }\n    });\n}\n/**\n * Tolerant max() function.\n *\n * @private\n * @param {...Array<Array<unknown>>} args\n * Max arguments\n * @return {number}\n * Max value\n */\nfunction patientMax() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var r = -Number.MAX_VALUE;\n    args.forEach(function (t) {\n        if (typeof t !== 'undefined' &&\n            t !== null &&\n            typeof t.length !== 'undefined') {\n            if (t.length > 0) {\n                r = t.length;\n                return true;\n            }\n        }\n    });\n    return r;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar BoostChart = {\n    compose: compose,\n    getBoostClipRect: getBoostClipRect,\n    isChartSeriesBoosting: isChartSeriesBoosting\n};\n/* harmony default export */ var Boost_BoostChart = (BoostChart);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n;// ./code/es5/es-modules/Extensions/Boost/WGLDrawMode.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\nvar WGLDrawMode = {\n    'area': 'LINES',\n    'arearange': 'LINES',\n    'areaspline': 'LINES',\n    'column': 'LINES',\n    'columnrange': 'LINES',\n    'bar': 'LINES',\n    'line': 'LINE_STRIP',\n    'scatter': 'POINTS',\n    'heatmap': 'TRIANGLES',\n    'treemap': 'TRIANGLES',\n    'bubble': 'POINTS'\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_WGLDrawMode = (WGLDrawMode);\n\n;// ./code/es5/es-modules/Extensions/Boost/WGLShader.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar clamp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).clamp, error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, WGLShader_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Constants\n *\n * */\nvar fragmentShader = [\n    /* eslint-disable max-len, @typescript-eslint/indent */\n    'precision highp float;',\n    'uniform vec4 fillColor;',\n    'varying highp vec2 position;',\n    'varying highp vec4 vColor;',\n    'uniform sampler2D uSampler;',\n    'uniform bool isCircle;',\n    'uniform bool hasColor;',\n    // 'vec4 toColor(float value, vec2 point) {',\n    //     'return vec4(0.0, 0.0, 0.0, 0.0);',\n    // '}',\n    'void main(void) {',\n    'vec4 col = fillColor;',\n    'vec4 tcol = texture2D(uSampler, gl_PointCoord.st);',\n    'if (hasColor) {',\n    'col = vColor;',\n    '}',\n    'if (isCircle) {',\n    'col *= tcol;',\n    'if (tcol.r < 0.0) {',\n    'discard;',\n    '} else {',\n    'gl_FragColor = col;',\n    '}',\n    '} else {',\n    'gl_FragColor = col;',\n    '}',\n    '}'\n    /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\nvar vertexShader = [\n    /* eslint-disable max-len, @typescript-eslint/indent */\n    '#version 100',\n    '#define LN10 2.302585092994046',\n    'precision highp float;',\n    'attribute vec4 aVertexPosition;',\n    'attribute vec4 aColor;',\n    'varying highp vec2 position;',\n    'varying highp vec4 vColor;',\n    'uniform mat4 uPMatrix;',\n    'uniform float pSize;',\n    'uniform float translatedThreshold;',\n    'uniform bool hasThreshold;',\n    'uniform bool skipTranslation;',\n    'uniform float xAxisTrans;',\n    'uniform float xAxisMin;',\n    'uniform float xAxisMinPad;',\n    'uniform float xAxisPointRange;',\n    'uniform float xAxisLen;',\n    'uniform bool  xAxisPostTranslate;',\n    'uniform float xAxisOrdinalSlope;',\n    'uniform float xAxisOrdinalOffset;',\n    'uniform float xAxisPos;',\n    'uniform bool  xAxisCVSCoord;',\n    'uniform bool  xAxisIsLog;',\n    'uniform bool  xAxisReversed;',\n    'uniform float yAxisTrans;',\n    'uniform float yAxisMin;',\n    'uniform float yAxisMinPad;',\n    'uniform float yAxisPointRange;',\n    'uniform float yAxisLen;',\n    'uniform bool  yAxisPostTranslate;',\n    'uniform float yAxisOrdinalSlope;',\n    'uniform float yAxisOrdinalOffset;',\n    'uniform float yAxisPos;',\n    'uniform bool  yAxisCVSCoord;',\n    'uniform bool  yAxisIsLog;',\n    'uniform bool  yAxisReversed;',\n    'uniform bool  isBubble;',\n    'uniform bool  bubbleSizeByArea;',\n    'uniform float bubbleZMin;',\n    'uniform float bubbleZMax;',\n    'uniform float bubbleZThreshold;',\n    'uniform float bubbleMinSize;',\n    'uniform float bubbleMaxSize;',\n    'uniform bool  bubbleSizeAbs;',\n    'uniform bool  isInverted;',\n    'float bubbleRadius(){',\n    'float value = aVertexPosition.w;',\n    'float zMax = bubbleZMax;',\n    'float zMin = bubbleZMin;',\n    'float radius = 0.0;',\n    'float pos = 0.0;',\n    'float zRange = zMax - zMin;',\n    'if (bubbleSizeAbs){',\n    'value = value - bubbleZThreshold;',\n    'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',\n    'zMin = 0.0;',\n    '}',\n    'if (value < zMin){',\n    'radius = bubbleZMin / 2.0 - 1.0;',\n    '} else {',\n    'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',\n    'if (bubbleSizeByArea && pos > 0.0){',\n    'pos = sqrt(pos);',\n    '}',\n    'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',\n    '}',\n    'return radius * 2.0;',\n    '}',\n    'float translate(float val,',\n    'float pointPlacement,',\n    'float localA,',\n    'float localMin,',\n    'float minPixelPadding,',\n    'float pointRange,',\n    'float len,',\n    'bool  cvsCoord,',\n    'bool  isLog,',\n    'bool  reversed',\n    '){',\n    'float sign = 1.0;',\n    'float cvsOffset = 0.0;',\n    'if (cvsCoord) {',\n    'sign *= -1.0;',\n    'cvsOffset = len;',\n    '}',\n    'if (isLog) {',\n    'val = log(val) / LN10;',\n    '}',\n    'if (reversed) {',\n    'sign *= -1.0;',\n    'cvsOffset -= sign * len;',\n    '}',\n    'return sign * (val - localMin) * localA + cvsOffset + ',\n    '(sign * minPixelPadding);', // ' + localA * pointPlacement * pointRange;',\n    '}',\n    'float xToPixels(float value) {',\n    'if (skipTranslation){',\n    'return value;// + xAxisPos;',\n    '}',\n    'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;',\n    '}',\n    'float yToPixels(float value, float checkTreshold) {',\n    'float v;',\n    'if (skipTranslation){',\n    'v = value;// + yAxisPos;',\n    '} else {',\n    'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;',\n    'if (v > yAxisLen) {',\n    'v = yAxisLen;',\n    '}',\n    '}',\n    'if (checkTreshold > 0.0 && hasThreshold) {',\n    'v = min(v, translatedThreshold);',\n    '}',\n    'return v;',\n    '}',\n    'void main(void) {',\n    'if (isBubble){',\n    'gl_PointSize = bubbleRadius();',\n    '} else {',\n    'gl_PointSize = pSize;',\n    '}',\n    // 'gl_PointSize = 10.0;',\n    'vColor = aColor;',\n    'if (skipTranslation && isInverted) {',\n    // If we get translated values from JS, just swap them (x, y)\n    'gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);',\n    '} else if (isInverted) {',\n    // But when calculating pixel positions directly,\n    // swap axes and values (x, y)\n    'gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);',\n    '} else {',\n    'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',\n    '}',\n    // 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',\n    '}'\n    /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * A static shader mimicing axis translation functions found in Core/Axis\n *\n * @private\n *\n * @param {WebGLContext} gl\n * the context in which the shader is active\n */\nvar WGLShader = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function WGLShader(gl) {\n        // Error stack\n        this.errors = [];\n        this.uLocations = {};\n        this.gl = gl;\n        if (gl && !this.createShader()) {\n            return void 0;\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Bind the shader.\n     * This makes the shader the active one until another one is bound,\n     * or until 0 is bound.\n     * @private\n     */\n    WGLShader.prototype.bind = function () {\n        if (this.gl && this.shaderProgram) {\n            this.gl.useProgram(this.shaderProgram);\n        }\n    };\n    /**\n     * Create the shader.\n     * Loads the shader program statically defined above\n     * @private\n     */\n    WGLShader.prototype.createShader = function () {\n        var _this = this;\n        var v = this.stringToProgram(vertexShader, 'vertex'), f = this.stringToProgram(fragmentShader, 'fragment'), uloc = function (n) { return (_this.gl.getUniformLocation(_this.shaderProgram, n)); };\n        if (!v || !f) {\n            this.shaderProgram = false;\n            this.handleErrors();\n            return false;\n        }\n        this.shaderProgram = this.gl.createProgram();\n        this.gl.attachShader(this.shaderProgram, v);\n        this.gl.attachShader(this.shaderProgram, f);\n        this.gl.linkProgram(this.shaderProgram);\n        if (!this.gl.getProgramParameter(this.shaderProgram, this.gl.LINK_STATUS)) {\n            this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram));\n            this.handleErrors();\n            this.shaderProgram = false;\n            return false;\n        }\n        this.gl.useProgram(this.shaderProgram);\n        this.gl.bindAttribLocation(this.shaderProgram, 0, 'aVertexPosition');\n        this.pUniform = uloc('uPMatrix');\n        this.psUniform = uloc('pSize');\n        this.fcUniform = uloc('fillColor');\n        this.isBubbleUniform = uloc('isBubble');\n        this.bubbleSizeAbsUniform = uloc('bubbleSizeAbs');\n        this.bubbleSizeAreaUniform = uloc('bubbleSizeByArea');\n        this.uSamplerUniform = uloc('uSampler');\n        this.skipTranslationUniform = uloc('skipTranslation');\n        this.isCircleUniform = uloc('isCircle');\n        this.isInverted = uloc('isInverted');\n        return true;\n    };\n    /**\n     * Handle errors accumulated in errors stack\n     * @private\n     */\n    WGLShader.prototype.handleErrors = function () {\n        if (this.errors.length) {\n            error('[highcharts boost] shader error - ' +\n                this.errors.join('\\n'));\n        }\n    };\n    /**\n     * String to shader program\n     * @private\n     * @param {string} str\n     * Program source\n     * @param {string} type\n     * Program type: either `vertex` or `fragment`\n     */\n    WGLShader.prototype.stringToProgram = function (str, type) {\n        var shader = this.gl.createShader(type === 'vertex' ? this.gl.VERTEX_SHADER : this.gl.FRAGMENT_SHADER);\n        this.gl.shaderSource(shader, str);\n        this.gl.compileShader(shader);\n        if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n            this.errors.push('when compiling ' +\n                type +\n                ' shader:\\n' +\n                this.gl.getShaderInfoLog(shader));\n            return false;\n        }\n        return shader;\n    };\n    /**\n     * Destroy the shader\n     * @private\n     */\n    WGLShader.prototype.destroy = function () {\n        if (this.gl && this.shaderProgram) {\n            this.gl.deleteProgram(this.shaderProgram);\n            this.shaderProgram = false;\n        }\n    };\n    WGLShader.prototype.fillColorUniform = function () {\n        return this.fcUniform;\n    };\n    /**\n     * Get the shader program handle\n     * @private\n     * @return {WebGLProgram}\n     * The handle for the program\n     */\n    WGLShader.prototype.getProgram = function () {\n        return this.shaderProgram;\n    };\n    WGLShader.prototype.pointSizeUniform = function () {\n        return this.psUniform;\n    };\n    WGLShader.prototype.perspectiveUniform = function () {\n        return this.pUniform;\n    };\n    /**\n     * Flush\n     * @private\n     */\n    WGLShader.prototype.reset = function () {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isBubbleUniform, 0);\n            this.gl.uniform1i(this.isCircleUniform, 0);\n        }\n    };\n    /**\n     * Set bubble uniforms\n     * @private\n     * @param {Highcharts.Series} series\n     * Series to use\n     */\n    WGLShader.prototype.setBubbleUniforms = function (series, zCalcMin, zCalcMax, pixelRatio) {\n        if (pixelRatio === void 0) { pixelRatio = 1; }\n        var seriesOptions = series.options;\n        var zMin = Number.MAX_VALUE,\n            zMax = -Number.MAX_VALUE;\n        if (this.gl && this.shaderProgram && series.is('bubble')) {\n            var pxSizes = series.getPxExtremes();\n            zMin = WGLShader_pick(seriesOptions.zMin, clamp(zCalcMin, seriesOptions.displayNegative === false ?\n                seriesOptions.zThreshold : -Number.MAX_VALUE, zMin));\n            zMax = WGLShader_pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));\n            this.gl.uniform1i(this.isBubbleUniform, 1);\n            this.gl.uniform1i(this.isCircleUniform, 1);\n            this.gl.uniform1i(this.bubbleSizeAreaUniform, (series.options.sizeBy !== 'width'));\n            this.gl.uniform1i(this.bubbleSizeAbsUniform, series.options\n                .sizeByAbsoluteValue);\n            this.setUniform('bubbleMinSize', pxSizes.minPxSize * pixelRatio);\n            this.setUniform('bubbleMaxSize', pxSizes.maxPxSize * pixelRatio);\n            this.setUniform('bubbleZMin', zMin);\n            this.setUniform('bubbleZMax', zMax);\n            this.setUniform('bubbleZThreshold', series.options.zThreshold);\n        }\n    };\n    /**\n     * Set the Color uniform.\n     * @private\n     * @param {Array<number>} color\n     * Array with RGBA values.\n     */\n    WGLShader.prototype.setColor = function (color) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform4f(this.fcUniform, color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3]);\n        }\n    };\n    /**\n     * Enable/disable circle drawing\n     * @private\n     */\n    WGLShader.prototype.setDrawAsCircle = function (flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isCircleUniform, flag ? 1 : 0);\n        }\n    };\n    /**\n     * Set if inversion state\n     * @private\n     * @param {number} flag\n     * Inversion flag\n     */\n    WGLShader.prototype.setInverted = function (flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isInverted, flag);\n        }\n    };\n    /**\n     * Set the perspective matrix\n     * @private\n     * @param {Float32List} m\n     * Matrix 4 x 4\n     */\n    WGLShader.prototype.setPMatrix = function (m) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniformMatrix4fv(this.pUniform, false, m);\n        }\n    };\n    /**\n     * Set the point size.\n     * @private\n     * @param {number} p\n     * Point size\n     */\n    WGLShader.prototype.setPointSize = function (p) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1f(this.psUniform, p);\n        }\n    };\n    /**\n     * Set skip translation\n     * @private\n     */\n    WGLShader.prototype.setSkipTranslation = function (flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.skipTranslationUniform, flag === true ? 1 : 0);\n        }\n    };\n    /**\n     * Set the active texture\n     * @private\n     * @param {number} texture\n     * Texture to activate\n     */\n    WGLShader.prototype.setTexture = function (texture) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.uSamplerUniform, texture);\n        }\n    };\n    /**\n     * Set a uniform value.\n     * This uses a hash map to cache uniform locations.\n     * @private\n     * @param {string} name\n     * Name of the uniform to set.\n     * @param {number} val\n     * Value to set\n     */\n    WGLShader.prototype.setUniform = function (name, val) {\n        if (this.gl && this.shaderProgram) {\n            var u = this.uLocations[name] = (this.uLocations[name] ||\n                    this.gl.getUniformLocation(this.shaderProgram,\n                name));\n            this.gl.uniform1f(u, val);\n        }\n    };\n    return WGLShader;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_WGLShader = (WGLShader);\n\n;// ./code/es5/es-modules/Extensions/Boost/WGLVertexBuffer.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * Vertex Buffer abstraction.\n * A vertex buffer is a set of vertices which are passed to the GPU\n * in a single call.\n *\n * @private\n * @class\n * @name WGLVertexBuffer\n *\n * @param {WebGLContext} gl\n * Context in which to create the buffer.\n * @param {WGLShader} shader\n * Shader to use.\n */\nvar WGLVertexBuffer = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function WGLVertexBuffer(gl, shader, dataComponents\n    /* , type */\n    ) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this.buffer = false;\n        this.iterator = 0;\n        this.preAllocated = false;\n        this.vertAttribute = false;\n        this.components = dataComponents || 2;\n        this.dataComponents = dataComponents;\n        this.gl = gl;\n        this.shader = shader;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Note about pre-allocated buffers:\n     *     - This is slower for charts with many series\n     * @private\n     */\n    WGLVertexBuffer.prototype.allocate = function (size) {\n        this.iterator = -1;\n        this.preAllocated = new Float32Array(size * 4);\n    };\n    /**\n     * Bind the buffer\n     * @private\n     */\n    WGLVertexBuffer.prototype.bind = function () {\n        if (!this.buffer) {\n            return false;\n        }\n        /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n        // gl.enableVertexAttribArray(vertAttribute);\n        // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n        this.gl.vertexAttribPointer(this.vertAttribute, this.components, this.gl.FLOAT, false, 0, 0);\n        /// gl.enableVertexAttribArray(vertAttribute);\n    };\n    /**\n     * Build the buffer\n     * @private\n     * @param {Array<number>} dataIn\n     * Zero padded array of indices\n     * @param {string} attrib\n     * Name of the Attribute to bind the buffer to\n     * @param {number} dataComponents\n     * Number of components per. indice\n     */\n    WGLVertexBuffer.prototype.build = function (dataIn, attrib, dataComponents) {\n        var farray;\n        this.data = dataIn || [];\n        if ((!this.data || this.data.length === 0) && !this.preAllocated) {\n            /// console.error('trying to render empty vbuffer');\n            this.destroy();\n            return false;\n        }\n        this.components = dataComponents || this.components;\n        if (this.buffer) {\n            this.gl.deleteBuffer(this.buffer);\n        }\n        if (!this.preAllocated) {\n            farray = new Float32Array(this.data);\n        }\n        this.buffer = this.gl.createBuffer();\n        this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);\n        this.gl.bufferData(this.gl.ARRAY_BUFFER, this.preAllocated || farray, this.gl.STATIC_DRAW);\n        /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n        this.vertAttribute = this.gl\n            .getAttribLocation(this.shader.getProgram(), attrib);\n        this.gl.enableVertexAttribArray(this.vertAttribute);\n        // Trigger cleanup\n        farray = false;\n        return true;\n    };\n    /**\n     * @private\n     */\n    WGLVertexBuffer.prototype.destroy = function () {\n        if (this.buffer) {\n            this.gl.deleteBuffer(this.buffer);\n            this.buffer = false;\n            this.vertAttribute = false;\n        }\n        this.iterator = 0;\n        this.components = this.dataComponents || 2;\n        this.data = [];\n    };\n    /**\n     * Adds data to the pre-allocated buffer.\n     * @private\n     * @param {number} x\n     * X data\n     * @param {number} y\n     * Y data\n     * @param {number} a\n     * A data\n     * @param {number} b\n     * B data\n     */\n    WGLVertexBuffer.prototype.push = function (x, y, a, b) {\n        if (this.preAllocated) { // && iterator <= preAllocated.length - 4) {\n            this.preAllocated[++this.iterator] = x;\n            this.preAllocated[++this.iterator] = y;\n            this.preAllocated[++this.iterator] = a;\n            this.preAllocated[++this.iterator] = b;\n        }\n    };\n    /**\n     * Render the buffer\n     *\n     * @private\n     * @param {number} from\n     * Start indice.\n     * @param {number} to\n     * End indice.\n     * @param {WGLDrawModeValue} drawMode\n     * Draw mode.\n     */\n    WGLVertexBuffer.prototype.render = function (from, to, drawMode) {\n        var length = this.preAllocated ?\n                this.preAllocated.length : this.data.length;\n        if (!this.buffer) {\n            return false;\n        }\n        if (!length) {\n            return false;\n        }\n        if (!from || from > length || from < 0) {\n            from = 0;\n        }\n        if (!to || to > length) {\n            to = length;\n        }\n        if (from >= to) {\n            return false;\n        }\n        drawMode = drawMode || 'POINTS';\n        this.gl.drawArrays(this.gl[drawMode], from / this.components, (to - from) / this.components);\n        return true;\n    };\n    return WGLVertexBuffer;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_WGLVertexBuffer = (WGLVertexBuffer);\n\n;// ./code/es5/es-modules/Extensions/Boost/WGLRenderer.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar color = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default()).parse;\n\nvar doc = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).doc, win = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).win;\n\nvar isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach, WGLRenderer_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n\n\n\n/* *\n *\n *  Constants\n *\n * */\n// Things to draw as \"rectangles\" (i.e lines)\nvar asBar = {\n    'column': true,\n    'columnrange': true,\n    'bar': true,\n    'area': true,\n    'areaspline': true,\n    'arearange': true\n};\nvar asCircle = {\n    'scatter': true,\n    'bubble': true\n};\nvar contexts = [\n    'webgl',\n    'experimental-webgl',\n    'moz-webgl',\n    'webkit-3d'\n];\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Main renderer. Used to render series.\n *\n * Notes to self:\n * - May be able to build a point map by rendering to a separate canvas and\n *   encoding values in the color data.\n * - Need to figure out a way to transform the data quicker\n *\n * @private\n *\n * @param {Function} postRenderCallback\n */\nvar WGLRenderer = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function WGLRenderer(postRenderCallback) {\n        /**\n         * The data to render - array of coordinates.\n         * Repeating sequence of [x, y, checkThreshold, pointSize].\n         */\n        this.data = [];\n        // Height of our viewport in pixels\n        this.height = 0;\n        // Is it inited?\n        this.isInited = false;\n        // The marker data\n        this.markerData = [];\n        // The series stack\n        this.series = [];\n        // Texture handles\n        this.textureHandles = {};\n        // Width of our viewport in pixels\n        this.width = 0;\n        this.postRenderCallback = postRenderCallback;\n        this.settings = {\n            pointSize: 1,\n            lineWidth: 1,\n            fillColor: '#AA00AA',\n            useAlpha: true,\n            usePreallocated: false,\n            useGPUTranslations: false,\n            debug: {\n                timeRendering: false,\n                timeSeriesProcessing: false,\n                timeSetup: false,\n                timeBufferCopy: false,\n                timeKDTree: false,\n                showSkipSummary: false\n            }\n        };\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Returns an orthographic perspective matrix\n     * @private\n     * @param {number} width\n     * the width of the viewport in pixels\n     * @param {number} height\n     * the height of the viewport in pixels\n     */\n    WGLRenderer.orthoMatrix = function (width, height) {\n        var near = 0,\n            far = 1;\n        return [\n            2 / width, 0, 0, 0,\n            0, -(2 / height), 0, 0,\n            0, 0, -2 / (far - near), 0,\n            -1, 1, -(far + near) / (far - near), 1\n        ];\n    };\n    /**\n     * @private\n     */\n    WGLRenderer.seriesPointCount = function (series) {\n        var isStacked,\n            xData,\n            s;\n        if (series.boosted) {\n            isStacked = !!series.options.stacking;\n            xData = ((series.getColumn('x').length ?\n                series.getColumn('x') :\n                void 0) ||\n                series.options.xData ||\n                series.getColumn('x', true));\n            s = (isStacked ? series.data : (xData || series.options.data))\n                .length;\n            if (series.type === 'treemap') {\n                s *= 12;\n            }\n            else if (series.type === 'heatmap') {\n                s *= 6;\n            }\n            else if (asBar[series.type]) {\n                s *= 2;\n            }\n            return s;\n        }\n        return 0;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    WGLRenderer.prototype.getPixelRatio = function () {\n        return this.settings.pixelRatio || win.devicePixelRatio || 1;\n    };\n    /**\n     * @private\n     */\n    WGLRenderer.prototype.setOptions = function (options) {\n        // The pixelRatio defaults to 1. This is an antipattern, we should\n        // refactor the Boost options to include an object of default options as\n        // base for the merge, like other components.\n        if (!('pixelRatio' in options)) {\n            options.pixelRatio = 1;\n        }\n        merge(true, this.settings, options);\n    };\n    /**\n     * Allocate a float buffer to fit all series\n     * @private\n     */\n    WGLRenderer.prototype.allocateBuffer = function (chart) {\n        var vbuffer = this.vbuffer;\n        var s = 0;\n        if (!this.settings.usePreallocated) {\n            return;\n        }\n        chart.series.forEach(function (series) {\n            if (series.boosted) {\n                s += WGLRenderer.seriesPointCount(series);\n            }\n        });\n        vbuffer && vbuffer.allocate(s);\n    };\n    /**\n     * @private\n     */\n    WGLRenderer.prototype.allocateBufferForSingleSeries = function (series) {\n        var vbuffer = this.vbuffer;\n        var s = 0;\n        if (!this.settings.usePreallocated) {\n            return;\n        }\n        if (series.boosted) {\n            s = WGLRenderer.seriesPointCount(series);\n        }\n        vbuffer && vbuffer.allocate(s);\n    };\n    /**\n     * Clear the depth and color buffer\n     * @private\n     */\n    WGLRenderer.prototype.clear = function () {\n        var gl = this.gl;\n        gl && gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n    };\n    /**\n     * Push data for a single series\n     * This calculates additional vertices and transforms the data to be\n     * aligned correctly in memory\n     * @private\n     */\n    WGLRenderer.prototype.pushSeriesData = function (series, inst) {\n        var _this = this;\n        var _a,\n            _b;\n        var data = this.data, settings = this.settings, vbuffer = this.vbuffer, isRange = (series.pointArrayMap &&\n                series.pointArrayMap.join(',') === 'low,high'), chart = series.chart, options = series.options, sorted = series.sorted, xAxis = series.xAxis, yAxis = series.yAxis, isStacked = !!options.stacking, rawData = options.data, xExtremes = series.xAxis.getExtremes(), \n            // Taking into account the offset of the min point #19497\n            xMin = xExtremes.min - (series.xAxis.minPointOffset || 0), xMax = xExtremes.max + (series.xAxis.minPointOffset || 0), yExtremes = series.yAxis.getExtremes(), yMin = yExtremes.min - (series.yAxis.minPointOffset || 0), yMax = yExtremes.max + (series.yAxis.minPointOffset || 0), xData = (series.getColumn('x').length ? series.getColumn('x') : void 0) || options.xData || series.getColumn('x', true), yData = (series.getColumn('y').length ? series.getColumn('y') : void 0) || options.yData || series.getColumn('y', true), zData = (series.getColumn('z').length ? series.getColumn('z') : void 0) || options.zData || series.getColumn('z', true), useRaw = !xData || xData.length === 0, \n            /// threshold = options.threshold,\n            // yBottom = chart.yAxis[0].getThreshold(threshold),\n            // hasThreshold = isNumber(threshold),\n            // colorByPoint = series.options.colorByPoint,\n            // This is required for color by point, so make sure this is\n            // uncommented if enabling that\n            // colorIndex = 0,\n            // Required for color axis support\n            // caxis,\n            connectNulls = options.connectNulls, \n            // For some reason eslint/TypeScript don't pick up that this is\n            // actually used: --- bre1470: it is never read, just set\n            // maxVal: (number|undefined), // eslint-disable-line no-unused-vars\n            points = series.points || false, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, cullXThreshold = 1, cullYThreshold = 1, chartDestroyed = typeof chart.index === 'undefined', drawAsBar = asBar[series.type], zoneAxis = options.zoneAxis || 'y', zones = options.zones || false, threshold = options.threshold, pixelRatio = this.getPixelRatio();\n        var plotWidth = series.chart.plotWidth,\n            lastX = false,\n            lastY = false,\n            minVal,\n            scolor, \n            //\n            skipped = 0,\n            hadPoints = false, \n            // The following are used in the builder while loop\n            x,\n            y,\n            d,\n            z,\n            i = -1,\n            px = false,\n            nx = false,\n            low,\n            nextInside = false,\n            prevInside = false,\n            pcolor = false,\n            isXInside = false,\n            isYInside = true,\n            firstPoint = true,\n            zoneColors,\n            zoneDefColor = false,\n            gapSize = false,\n            vlen = 0;\n        if (options.boostData && options.boostData.length > 0) {\n            return;\n        }\n        if (options.gapSize) {\n            gapSize = options.gapUnit !== 'value' ?\n                options.gapSize * series.closestPointRange :\n                options.gapSize;\n        }\n        if (zones) {\n            zoneColors = [];\n            zones.forEach(function (zone, i) {\n                if (zone.color) {\n                    var zoneColor = color(zone.color).rgba;\n                    zoneColor[0] /= 255.0;\n                    zoneColor[1] /= 255.0;\n                    zoneColor[2] /= 255.0;\n                    zoneColors[i] = zoneColor;\n                    if (!zoneDefColor && typeof zone.value === 'undefined') {\n                        zoneDefColor = zoneColor;\n                    }\n                }\n            });\n            if (!zoneDefColor) {\n                var seriesColor = ((series.pointAttribs && series.pointAttribs().fill) ||\n                        series.color);\n                zoneDefColor = color(seriesColor).rgba;\n                zoneDefColor[0] /= 255.0;\n                zoneDefColor[1] /= 255.0;\n                zoneDefColor[2] /= 255.0;\n            }\n        }\n        if (chart.inverted) {\n            plotWidth = series.chart.plotHeight;\n        }\n        series.closestPointRangePx = Number.MAX_VALUE;\n        /**\n         * Push color to color buffer - need to do this per vertex.\n         * @private\n         */\n        var pushColor = function (color) {\n                if (color) {\n                    inst.colorData.push(color[0]);\n                inst.colorData.push(color[1]);\n                inst.colorData.push(color[2]);\n                inst.colorData.push(color[3]);\n            }\n        };\n        /**\n         * Push a vertice to the data buffer.\n         * @private\n         */\n        var vertice = function (x,\n            y,\n            checkTreshold,\n            pointSize,\n            color) {\n                if (pointSize === void 0) { pointSize = 1; }\n                pushColor(color);\n            // Correct for pixel ratio\n            if (pixelRatio !== 1 && (!settings.useGPUTranslations ||\n                inst.skipTranslation)) {\n                x *= pixelRatio;\n                y *= pixelRatio;\n                pointSize *= pixelRatio;\n            }\n            if (settings.usePreallocated && vbuffer) {\n                vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize);\n                vlen += 4;\n            }\n            else {\n                data.push(x);\n                data.push(y);\n                data.push(checkTreshold ? pixelRatio : 0);\n                data.push(pointSize);\n            }\n        };\n        /**\n         * @private\n         */\n        var closeSegment = function () {\n                if (inst.segments.length) {\n                    inst.segments[inst.segments.length - 1].to = data.length || vlen;\n            }\n        };\n        /**\n         * Create a new segment for the current set.\n         * @private\n         */\n        var beginSegment = function () {\n                // Insert a segment on the series.\n                // A segment is just a start indice.\n                // When adding a segment, if one exists from before, it should\n                // set the previous segment's end\n                if (inst.segments.length &&\n                    inst.segments[inst.segments.length - 1].from === (data.length || vlen)) {\n                    return;\n            }\n            closeSegment();\n            inst.segments.push({\n                from: data.length || vlen\n            });\n        };\n        /**\n         * Push a rectangle to the data buffer.\n         * @private\n         */\n        var pushRect = function (x,\n            y,\n            w,\n            h,\n            color) {\n                pushColor(color);\n            vertice(x + w, y);\n            pushColor(color);\n            vertice(x, y);\n            pushColor(color);\n            vertice(x, y + h);\n            pushColor(color);\n            vertice(x, y + h);\n            pushColor(color);\n            vertice(x + w, y + h);\n            pushColor(color);\n            vertice(x + w, y);\n        };\n        // Create the first segment\n        beginSegment();\n        // Special case for point shapes\n        if (points && points.length > 0) {\n            // If we're doing points, we assume that the points are already\n            // translated, so we skip the shader translation.\n            inst.skipTranslation = true;\n            // Force triangle draw mode\n            inst.drawMode = 'TRIANGLES';\n            // We don't have a z component in the shader, so we need to sort.\n            if (points[0].node && points[0].node.levelDynamic) {\n                points.sort(function (a, b) {\n                    if (a.node) {\n                        if (a.node.levelDynamic >\n                            b.node.levelDynamic) {\n                            return 1;\n                        }\n                        if (a.node.levelDynamic <\n                            b.node.levelDynamic) {\n                            return -1;\n                        }\n                    }\n                    return 0;\n                });\n            }\n            points.forEach(function (point) {\n                var plotY = point.plotY;\n                var swidth,\n                    pointAttr;\n                if (typeof plotY !== 'undefined' &&\n                    !isNaN(plotY) &&\n                    point.y !== null &&\n                    point.shapeArgs) {\n                    var _a = point.shapeArgs,\n                        _b = _a.x,\n                        x_1 = _b === void 0 ? 0 : _b,\n                        _c = _a.y,\n                        y_1 = _c === void 0 ? 0 : _c,\n                        _d = _a.width,\n                        width = _d === void 0 ? 0 : _d,\n                        _e = _a.height,\n                        height = _e === void 0 ? 0 : _e;\n                    pointAttr = chart.styledMode ?\n                        point.series\n                            .colorAttribs(point) :\n                        pointAttr = point.series.pointAttribs(point);\n                    swidth = pointAttr['stroke-width'] || 0;\n                    // Handle point colors\n                    pcolor = color(pointAttr.fill).rgba;\n                    pcolor[0] /= 255.0;\n                    pcolor[1] /= 255.0;\n                    pcolor[2] /= 255.0;\n                    // So there are two ways of doing this. Either we can\n                    // create a rectangle of two triangles, or we can do a\n                    // point and use point size. Latter is faster, but\n                    // only supports squares. So we're doing triangles.\n                    // We could also use one color per. vertice to get\n                    // better color interpolation.\n                    // If there's stroking, we do an additional rect\n                    if (series.is('treemap')) {\n                        swidth = swidth || 1;\n                        scolor = color(pointAttr.stroke).rgba;\n                        scolor[0] /= 255.0;\n                        scolor[1] /= 255.0;\n                        scolor[2] /= 255.0;\n                        pushRect(x_1, y_1, width, height, scolor);\n                        swidth /= 2;\n                    }\n                    // } else {\n                    //     swidth = 0;\n                    // }\n                    // Fixes issues with inverted heatmaps (see #6981). The root\n                    // cause is that the coordinate system is flipped. In other\n                    // words, instead of [0,0] being top-left, it's\n                    // bottom-right. This causes a vertical and horizontal flip\n                    // in the resulting image, making it rotated 180 degrees.\n                    if (series.is('heatmap') && chart.inverted) {\n                        x_1 = xAxis.len - x_1;\n                        y_1 = yAxis.len - y_1;\n                        width = -width;\n                        height = -height;\n                    }\n                    pushRect(x_1 + swidth, y_1 + swidth, width - (swidth * 2), height - (swidth * 2), pcolor);\n                }\n            });\n            closeSegment();\n            return;\n        }\n        var _loop_1 = function () {\n                d = sdata[++i];\n            if (typeof d === 'undefined') {\n                return \"continue\";\n            }\n            /// px = x = y = z = nx = low = false;\n            // chartDestroyed = typeof chart.index === 'undefined';\n            // nextInside = prevInside = pcolor = isXInside = isYInside = false;\n            // drawAsBar = asBar[series.type];\n            if (chartDestroyed) {\n                return \"break\";\n            }\n            // Uncomment this to enable color by point.\n            // This currently left disabled as the charts look really ugly\n            // when enabled and there's a lot of points.\n            // Leaving in for the future (tm).\n            // if (colorByPoint) {\n            //     colorIndex = ++colorIndex %\n            //         series.chart.options.colors.length;\n            //     pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);\n            //     pcolor[0] /= 255.0;\n            //     pcolor[1] /= 255.0;\n            //     pcolor[2] /= 255.0;\n            // }\n            // Handle the point.color option (#5999)\n            var pointOptions = rawData && rawData[i];\n            if (!useRaw && isObject(pointOptions, true)) {\n                if (pointOptions.color) {\n                    pcolor = color(pointOptions.color).rgba;\n                    pcolor[0] /= 255.0;\n                    pcolor[1] /= 255.0;\n                    pcolor[2] /= 255.0;\n                }\n            }\n            if (useRaw) {\n                x = d[0];\n                y = d[1];\n                if (sdata[i + 1]) {\n                    nx = sdata[i + 1][0];\n                }\n                if (sdata[i - 1]) {\n                    px = sdata[i - 1][0];\n                }\n                if (d.length >= 3) {\n                    z = d[2];\n                    if (d[2] > inst.zMax) {\n                        inst.zMax = d[2];\n                    }\n                    if (d[2] < inst.zMin) {\n                        inst.zMin = d[2];\n                    }\n                }\n            }\n            else {\n                x = d;\n                y = yData === null || yData === void 0 ? void 0 : yData[i];\n                if (sdata[i + 1]) {\n                    nx = sdata[i + 1];\n                }\n                if (sdata[i - 1]) {\n                    px = sdata[i - 1];\n                }\n                if (zData && zData.length) {\n                    z = zData[i];\n                    if (zData[i] > inst.zMax) {\n                        inst.zMax = zData[i];\n                    }\n                    if (zData[i] < inst.zMin) {\n                        inst.zMin = zData[i];\n                    }\n                }\n            }\n            if (!connectNulls && (x === null || y === null)) {\n                beginSegment();\n                return \"continue\";\n            }\n            if (nx && nx >= xMin && nx <= xMax) {\n                nextInside = true;\n            }\n            if (px && px >= xMin && px <= xMax) {\n                prevInside = true;\n            }\n            if (isRange) {\n                if (useRaw) {\n                    y = d.slice(1, 3);\n                }\n                low = (_a = series.getColumn('low', true)) === null || _a === void 0 ? void 0 : _a[i];\n                y = ((_b = series.getColumn('high', true)) === null || _b === void 0 ? void 0 : _b[i]) || 0;\n            }\n            else if (isStacked) {\n                x = d.x;\n                y = d.stackY;\n                low = y - d.y;\n            }\n            if (yMin !== null &&\n                typeof yMin !== 'undefined' &&\n                yMax !== null &&\n                typeof yMax !== 'undefined') {\n                isYInside = y >= yMin && y <= yMax;\n            }\n            // Do not render points outside the zoomed range (#19701)\n            if (!sorted && !isYInside) {\n                return \"continue\";\n            }\n            if (x > xMax && closestRight.x < xMax) {\n                closestRight.x = x;\n                closestRight.y = y;\n            }\n            if (x < xMin && closestLeft.x > xMin) {\n                closestLeft.x = x;\n                closestLeft.y = y;\n            }\n            if (y === null && connectNulls) {\n                return \"continue\";\n            }\n            // Cull points outside the extremes\n            if (y === null || (!isYInside && !nextInside && !prevInside)) {\n                beginSegment();\n                return \"continue\";\n            }\n            // The first point before and first after extremes should be\n            // rendered (#9962, 19701)\n            // Make sure series with a single point are rendered (#21897)\n            if (sorted && ((nx >= xMin || x >= xMin) &&\n                (px <= xMax || x <= xMax)) ||\n                !sorted && ((x >= xMin) && (x <= xMax))) {\n                isXInside = true;\n            }\n            if (!isXInside && !nextInside && !prevInside) {\n                return \"continue\";\n            }\n            if (gapSize && x - px > gapSize) {\n                beginSegment();\n            }\n            // Note: Boost requires that zones are sorted!\n            if (zones) {\n                var zoneColor_1;\n                zones.some(function (// eslint-disable-line no-loop-func\n                zone, i) {\n                    var last = zones[i - 1];\n                    if (zoneAxis === 'x') {\n                        if (typeof zone.value !== 'undefined' &&\n                            x <= zone.value) {\n                            if (zoneColors[i] &&\n                                (!last || x >= last.value)) {\n                                zoneColor_1 = zoneColors[i];\n                            }\n                            return true;\n                        }\n                        return false;\n                    }\n                    if (typeof zone.value !== 'undefined' && y <= zone.value) {\n                        if (zoneColors[i] &&\n                            (!last || y >= last.value)) {\n                            zoneColor_1 = zoneColors[i];\n                        }\n                        return true;\n                    }\n                    return false;\n                });\n                pcolor = zoneColor_1 || zoneDefColor || pcolor;\n            }\n            // Skip translations - temporary floating point fix\n            if (!settings.useGPUTranslations) {\n                inst.skipTranslation = true;\n                x = xAxis.toPixels(x, true);\n                y = yAxis.toPixels(y, true);\n                // Make sure we're not drawing outside of the chart area.\n                // See #6594. Update: this is no longer required as far as I\n                // can tell. Leaving in for git blame in case there are edge\n                // cases I've not found. Having this in breaks #10246.\n                // if (y > plotHeight) {\n                // y = plotHeight;\n                // }\n                if (x > plotWidth) {\n                    // If this is rendered as a point, just skip drawing it\n                    // entirely, as we're not dependant on lineTo'ing to it.\n                    // See #8197\n                    if (inst.drawMode === 'POINTS') {\n                        return \"continue\";\n                    }\n                    // Having this here will clamp markers and make the angle\n                    // of the last line wrong. See 9166.\n                    // x = plotWidth;\n                }\n            }\n            // No markers on out of bounds things.\n            // Out of bound things are shown if and only if the next\n            // or previous point is inside the rect.\n            if (inst.hasMarkers && isXInside) {\n                /// x = Highcharts.correctFloat(\n                //     Math.min(Math.max(-1e5, xAxis.translate(\n                //         x,\n                //         0,\n                //         0,\n                //         0,\n                //         1,\n                //         0.5,\n                //         false\n                //     )), 1e5)\n                // );\n                if (lastX !== false) {\n                    series.closestPointRangePx = Math.min(series.closestPointRangePx, Math.abs(x - lastX));\n                }\n            }\n            // If the last _drawn_ point is closer to this point than the\n            // threshold, skip it. Shaves off 20-100ms in processing.\n            if (!settings.useGPUTranslations &&\n                !settings.usePreallocated &&\n                (lastX && Math.abs(x - lastX) < cullXThreshold) &&\n                (lastY && Math.abs(y - lastY) < cullYThreshold)) {\n                if (settings.debug.showSkipSummary) {\n                    ++skipped;\n                }\n                return \"continue\";\n            }\n            if (drawAsBar) {\n                minVal = low || 0;\n                if (low === false || typeof low === 'undefined') {\n                    if (y < 0) {\n                        minVal = y;\n                    }\n                    else {\n                        minVal = 0;\n                    }\n                }\n                if ((!isRange && !isStacked) ||\n                    yAxis.logarithmic // #16850\n                ) {\n                    minVal = Math.max(threshold === null ? yMin : threshold, // #5268\n                    yMin); // #8731\n                }\n                if (!settings.useGPUTranslations) {\n                    minVal = yAxis.toPixels(minVal, true);\n                }\n                // Need to add an extra point here\n                vertice(x, minVal, 0, 0, pcolor);\n            }\n            // Do step line if enabled.\n            // Draws an additional point at the old Y at the new X.\n            // See #6976.\n            if (options.step && !firstPoint) {\n                vertice(x, lastY, 0, 2, pcolor);\n            }\n            vertice(x, y, 0, series.type === 'bubble' ? (z || 1) : 2, pcolor);\n            // Uncomment this to support color axis.\n            // if (caxis) {\n            //     pcolor = color(caxis.toColor(y)).rgba;\n            //     inst.colorData.push(color[0] / 255.0);\n            //     inst.colorData.push(color[1] / 255.0);\n            //     inst.colorData.push(color[2] / 255.0);\n            //     inst.colorData.push(color[3]);\n            // }\n            lastX = x;\n            lastY = y;\n            hadPoints = true;\n            firstPoint = false;\n        };\n        // Extract color axis\n        // (chart.axes || []).forEach((a): void => {\n        //     if (H.ColorAxis && a instanceof H.ColorAxis) {\n        //         caxis = a;\n        //     }\n        // });\n        while (i < sdata.length - 1) {\n            var state_1 = _loop_1();\n            if (state_1 === \"break\")\n                break;\n        }\n        if (settings.debug.showSkipSummary) {\n            console.log('skipped points:', skipped); // eslint-disable-line no-console\n        }\n        var pushSupplementPoint = function (point,\n            atStart) {\n                if (!settings.useGPUTranslations) {\n                    inst.skipTranslation = true;\n                point.x = xAxis.toPixels(point.x, true);\n                point.y = yAxis.toPixels(point.y, true);\n            }\n            // We should only do this for lines, and we should ignore markers\n            // since there's no point here that would have a marker.\n            if (atStart) {\n                _this.data = [point.x, point.y, 0, 2].concat(_this.data);\n                return;\n            }\n            vertice(point.x, point.y, 0, 2);\n        };\n        if (!hadPoints &&\n            connectNulls !== false &&\n            series.drawMode === 'line_strip') {\n            if (closestLeft.x < Number.MAX_VALUE) {\n                // We actually need to push this *before* the complete buffer.\n                pushSupplementPoint(closestLeft, true);\n            }\n            if (closestRight.x > -Number.MAX_VALUE) {\n                pushSupplementPoint(closestRight);\n            }\n        }\n        closeSegment();\n    };\n    /**\n     * Push a series to the renderer\n     * If we render the series immediately, we don't have to loop later\n     * @private\n     * @param {Highchart.Series} s\n     * The series to push.\n     */\n    WGLRenderer.prototype.pushSeries = function (s) {\n        var markerData = this.markerData,\n            series = this.series,\n            settings = this.settings;\n        if (series.length > 0) {\n            if (series[series.length - 1].hasMarkers) {\n                series[series.length - 1].markerTo = markerData.length;\n            }\n        }\n        if (settings.debug.timeSeriesProcessing) {\n            console.time('building ' + s.type + ' series'); // eslint-disable-line no-console\n        }\n        var obj = {\n                segments: [],\n                markerFrom: markerData.length,\n                // Push RGBA values to this array to use per. point coloring.\n                // It should be 0-padded, so each component should be pushed in\n                // succession.\n                colorData: [],\n                series: s,\n                zMin: Number.MAX_VALUE,\n                zMax: -Number.MAX_VALUE,\n                hasMarkers: s.options.marker ?\n                    s.options.marker.enabled !== false :\n                    false,\n                showMarkers: true,\n                drawMode: Boost_WGLDrawMode[s.type] || 'LINE_STRIP'\n            };\n        if (s.index >= series.length) {\n            series.push(obj);\n        }\n        else {\n            series[s.index] = obj;\n        }\n        // Add the series data to our buffer(s)\n        this.pushSeriesData(s, obj);\n        if (settings.debug.timeSeriesProcessing) {\n            console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console\n        }\n    };\n    /**\n     * Flush the renderer.\n     * This removes pushed series and vertices.\n     * Should be called after clearing and before rendering\n     * @private\n     */\n    WGLRenderer.prototype.flush = function () {\n        var vbuffer = this.vbuffer;\n        this.data = [];\n        this.markerData = [];\n        this.series = [];\n        if (vbuffer) {\n            vbuffer.destroy();\n        }\n    };\n    /**\n     * Pass x-axis to shader\n     * @private\n     * @param {Highcharts.Axis} axis\n     * The x-axis.\n     */\n    WGLRenderer.prototype.setXAxis = function (axis) {\n        var shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        var pixelRatio = this.getPixelRatio();\n        shader.setUniform('xAxisTrans', axis.transA * pixelRatio);\n        shader.setUniform('xAxisMin', axis.min);\n        shader.setUniform('xAxisMinPad', axis.minPixelPadding * pixelRatio);\n        shader.setUniform('xAxisPointRange', axis.pointRange);\n        shader.setUniform('xAxisLen', axis.len * pixelRatio);\n        shader.setUniform('xAxisPos', axis.pos * pixelRatio);\n        shader.setUniform('xAxisCVSCoord', (!axis.horiz));\n        shader.setUniform('xAxisIsLog', (!!axis.logarithmic));\n        shader.setUniform('xAxisReversed', (!!axis.reversed));\n    };\n    /**\n     * Pass y-axis to shader\n     * @private\n     * @param {Highcharts.Axis} axis\n     * The y-axis.\n     */\n    WGLRenderer.prototype.setYAxis = function (axis) {\n        var shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        var pixelRatio = this.getPixelRatio();\n        shader.setUniform('yAxisTrans', axis.transA * pixelRatio);\n        shader.setUniform('yAxisMin', axis.min);\n        shader.setUniform('yAxisMinPad', axis.minPixelPadding * pixelRatio);\n        shader.setUniform('yAxisPointRange', axis.pointRange);\n        shader.setUniform('yAxisLen', axis.len * pixelRatio);\n        shader.setUniform('yAxisPos', axis.pos * pixelRatio);\n        shader.setUniform('yAxisCVSCoord', (!axis.horiz));\n        shader.setUniform('yAxisIsLog', (!!axis.logarithmic));\n        shader.setUniform('yAxisReversed', (!!axis.reversed));\n    };\n    /**\n     * Set the translation threshold\n     * @private\n     * @param {boolean} has\n     * Has threshold flag.\n     * @param {numbe} translation\n     * The threshold.\n     */\n    WGLRenderer.prototype.setThreshold = function (has, translation) {\n        var shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        shader.setUniform('hasThreshold', has);\n        shader.setUniform('translatedThreshold', translation);\n    };\n    /**\n     * Render the data\n     * This renders all pushed series.\n     * @private\n     */\n    WGLRenderer.prototype.renderChart = function (chart) {\n        var _this = this;\n        var gl = this.gl,\n            settings = this.settings,\n            shader = this.shader,\n            vbuffer = this.vbuffer;\n        var pixelRatio = this.getPixelRatio();\n        if (chart) {\n            this.width = chart.chartWidth * pixelRatio;\n            this.height = chart.chartHeight * pixelRatio;\n        }\n        else {\n            return false;\n        }\n        var height = this.height,\n            width = this.width;\n        if (!gl || !shader || !width || !height) {\n            return false;\n        }\n        if (settings.debug.timeRendering) {\n            console.time('gl rendering'); // eslint-disable-line no-console\n        }\n        gl.canvas.width = width;\n        gl.canvas.height = height;\n        shader.bind();\n        gl.viewport(0, 0, width, height);\n        shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n        if (settings.lineWidth > 1 && !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS) {\n            gl.lineWidth(settings.lineWidth);\n        }\n        if (vbuffer) {\n            vbuffer.build(this.data, 'aVertexPosition', 4);\n            vbuffer.bind();\n        }\n        shader.setInverted(chart.inverted);\n        // Render the series\n        this.series.forEach(function (s, si) {\n            var _a,\n                _b,\n                _c;\n            var options = s.series.options,\n                shapeOptions = options.marker,\n                lineWidth = (typeof options.lineWidth !== 'undefined' ?\n                    options.lineWidth :\n                    1),\n                threshold = options.threshold,\n                hasThreshold = isNumber(threshold),\n                yBottom = s.series.yAxis.getThreshold(threshold),\n                translatedThreshold = yBottom,\n                showMarkers = WGLRenderer_pick(options.marker ? options.marker.enabled : null,\n                s.series.xAxis.isRadial ? true : null,\n                s.series.closestPointRangePx >\n                    2 * ((options.marker ?\n                        options.marker.radius :\n                        10) || 10)),\n                shapeTexture = _this.textureHandles[(shapeOptions && shapeOptions.symbol) ||\n                    s.series.symbol] || _this.textureHandles.circle;\n            var sindex,\n                cbuffer,\n                fillColor,\n                scolor = [];\n            if (s.segments.length === 0 ||\n                s.segments[0].from === s.segments[0].to) {\n                return;\n            }\n            if (shapeTexture.isReady) {\n                gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);\n                shader.setTexture(shapeTexture.handle);\n            }\n            if (chart.styledMode) {\n                if (s.series.markerGroup === ((_a = s.series.chart.boost) === null || _a === void 0 ? void 0 : _a.markerGroup)) {\n                    // Create a temporary markerGroup to get the fill color\n                    delete s.series.markerGroup;\n                    s.series.markerGroup = s.series.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n                    fillColor = s.series.markerGroup.getStyle('fill');\n                    s.series.markerGroup.destroy();\n                    s.series.markerGroup = (_b = s.series.chart.boost) === null || _b === void 0 ? void 0 : _b.markerGroup;\n                }\n                else {\n                    fillColor = (_c = s.series.markerGroup) === null || _c === void 0 ? void 0 : _c.getStyle('fill');\n                }\n            }\n            else {\n                fillColor =\n                    (s.drawMode === 'POINTS' && // #14260\n                        s.series.pointAttribs &&\n                        s.series.pointAttribs().fill) ||\n                        s.series.color;\n                if (options.colorByPoint) {\n                    fillColor = s.series.chart.options.colors[si];\n                }\n            }\n            if (s.series.fillOpacity && options.fillOpacity) {\n                fillColor = new (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default())(fillColor).setOpacity(WGLRenderer_pick(options.fillOpacity, 1.0)).get();\n            }\n            scolor = color(fillColor).rgba;\n            if (!settings.useAlpha) {\n                scolor[3] = 1.0;\n            }\n            // Blending\n            if (options.boostBlending === 'add') {\n                gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n                gl.blendEquation(gl.FUNC_ADD);\n            }\n            else if (options.boostBlending === 'mult' ||\n                options.boostBlending === 'multiply') {\n                gl.blendFunc(gl.DST_COLOR, gl.ZERO);\n            }\n            else if (options.boostBlending === 'darken') {\n                gl.blendFunc(gl.ONE, gl.ONE);\n                gl.blendEquation(gl.FUNC_MIN);\n            }\n            else {\n                /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n                // gl.blendEquation(gl.FUNC_ADD);\n                gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n            }\n            shader.reset();\n            // If there are entries in the colorData buffer, build and bind it.\n            if (s.colorData.length > 0) {\n                shader.setUniform('hasColor', 1);\n                cbuffer = new Boost_WGLVertexBuffer(gl, shader);\n                cbuffer.build(\n                // The color array attribute for vertex is assigned from 0,\n                // so it needs to be shifted to be applied to further\n                // segments. #18858\n                Array(s.segments[0].from).concat(s.colorData), 'aColor', 4);\n                cbuffer.bind();\n            }\n            else {\n                // Set the hasColor uniform to false (0) when the series\n                // contains no colorData buffer points. #18858\n                shader.setUniform('hasColor', 0);\n                // #15869, a buffer with fewer points might already be bound by\n                // a different series/chart causing out of range errors\n                gl.disableVertexAttribArray(gl.getAttribLocation(shader.getProgram(), 'aColor'));\n            }\n            // Set series specific uniforms\n            shader.setColor(scolor);\n            _this.setXAxis(s.series.xAxis);\n            _this.setYAxis(s.series.yAxis);\n            _this.setThreshold(hasThreshold, translatedThreshold);\n            if (s.drawMode === 'POINTS') {\n                shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 0.5) * 2 * pixelRatio);\n            }\n            // If set to true, the toPixels translations in the shader\n            // is skipped, i.e it's assumed that the value is a pixel coord.\n            shader.setSkipTranslation(s.skipTranslation);\n            if (s.series.type === 'bubble') {\n                shader.setBubbleUniforms(s.series, s.zMin, s.zMax, pixelRatio);\n            }\n            shader.setDrawAsCircle(asCircle[s.series.type] || false);\n            if (!vbuffer) {\n                return;\n            }\n            // Do the actual rendering\n            // If the line width is < 0, skip rendering of the lines. See #7833.\n            if (lineWidth > 0 || s.drawMode !== 'LINE_STRIP') {\n                for (sindex = 0; sindex < s.segments.length; sindex++) {\n                    vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, s.drawMode);\n                }\n            }\n            if (s.hasMarkers && showMarkers) {\n                shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 5) * 2 * pixelRatio);\n                shader.setDrawAsCircle(true);\n                for (sindex = 0; sindex < s.segments.length; sindex++) {\n                    vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, 'POINTS');\n                }\n            }\n        });\n        if (settings.debug.timeRendering) {\n            console.timeEnd('gl rendering'); // eslint-disable-line no-console\n        }\n        if (this.postRenderCallback) {\n            this.postRenderCallback(this);\n        }\n        this.flush();\n    };\n    /**\n     * Render the data when ready\n     * @private\n     */\n    WGLRenderer.prototype.render = function (chart) {\n        var _this = this;\n        this.clear();\n        if (chart.renderer.forExport) {\n            return this.renderChart(chart);\n        }\n        if (this.isInited) {\n            this.renderChart(chart);\n        }\n        else {\n            setTimeout(function () {\n                _this.render(chart);\n            }, 1);\n        }\n    };\n    /**\n     * Set the viewport size in pixels\n     * Creates an orthographic perspective matrix and applies it.\n     * @private\n     */\n    WGLRenderer.prototype.setSize = function (width, height) {\n        var shader = this.shader;\n        // Skip if there's no change, or if we have no valid shader\n        if (!shader || (this.width === width && this.height === height)) {\n            return;\n        }\n        this.width = width;\n        this.height = height;\n        shader.bind();\n        shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n    };\n    /**\n     * Init OpenGL\n     * @private\n     */\n    WGLRenderer.prototype.init = function (canvas, noFlush) {\n        var _this = this;\n        var settings = this.settings;\n        this.isInited = false;\n        if (!canvas) {\n            return false;\n        }\n        if (settings.debug.timeSetup) {\n            console.time('gl setup'); // eslint-disable-line no-console\n        }\n        for (var i = 0; i < contexts.length; ++i) {\n            this.gl = canvas.getContext(contexts[i], {\n            //    /premultipliedAlpha: false\n            });\n            if (this.gl) {\n                break;\n            }\n        }\n        var gl = this.gl;\n        if (gl) {\n            if (!noFlush) {\n                this.flush();\n            }\n        }\n        else {\n            return false;\n        }\n        gl.enable(gl.BLEND);\n        /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n        gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n        gl.disable(gl.DEPTH_TEST);\n        /// gl.depthMask(gl.FALSE);\n        gl.depthFunc(gl.LESS);\n        var shader = this.shader = new Boost_WGLShader(gl);\n        if (!shader) {\n            // We need to abort, there's no shader context\n            return false;\n        }\n        this.vbuffer = new Boost_WGLVertexBuffer(gl, shader);\n        var createTexture = function (name,\n            fn) {\n                var props = {\n                    isReady: false,\n                    texture: doc.createElement('canvas'),\n                    handle: gl.createTexture()\n                },\n            ctx = props.texture.getContext('2d');\n            _this.textureHandles[name] = props;\n            props.texture.width = 512;\n            props.texture.height = 512;\n            ctx.mozImageSmoothingEnabled = false;\n            ctx.webkitImageSmoothingEnabled = false;\n            ctx.msImageSmoothingEnabled = false;\n            ctx.imageSmoothingEnabled = false;\n            ctx.strokeStyle = 'rgba(255, 255, 255, 0)';\n            ctx.fillStyle = '#FFF';\n            fn(ctx);\n            try {\n                gl.activeTexture(gl.TEXTURE0);\n                gl.bindTexture(gl.TEXTURE_2D, props.handle);\n                /// gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n                gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, props.texture);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n                /// gl.generateMipmap(gl.TEXTURE_2D);\n                gl.bindTexture(gl.TEXTURE_2D, null);\n                props.isReady = true;\n            }\n            catch (e) {\n                // Silent error\n            }\n        };\n        // Circle shape\n        createTexture('circle', function (ctx) {\n            ctx.beginPath();\n            ctx.arc(256, 256, 256, 0, 2 * Math.PI);\n            ctx.stroke();\n            ctx.fill();\n        });\n        // Square shape\n        createTexture('square', function (ctx) {\n            ctx.fillRect(0, 0, 512, 512);\n        });\n        // Diamond shape\n        createTexture('diamond', function (ctx) {\n            ctx.beginPath();\n            ctx.moveTo(256, 0);\n            ctx.lineTo(512, 256);\n            ctx.lineTo(256, 512);\n            ctx.lineTo(0, 256);\n            ctx.lineTo(256, 0);\n            ctx.fill();\n        });\n        // Triangle shape\n        createTexture('triangle', function (ctx) {\n            ctx.beginPath();\n            ctx.moveTo(0, 512);\n            ctx.lineTo(256, 0);\n            ctx.lineTo(512, 512);\n            ctx.lineTo(0, 512);\n            ctx.fill();\n        });\n        // Triangle shape (rotated)\n        createTexture('triangle-down', function (ctx) {\n            ctx.beginPath();\n            ctx.moveTo(0, 0);\n            ctx.lineTo(256, 512);\n            ctx.lineTo(512, 0);\n            ctx.lineTo(0, 0);\n            ctx.fill();\n        });\n        this.isInited = true;\n        if (settings.debug.timeSetup) {\n            console.timeEnd('gl setup'); // eslint-disable-line no-console\n        }\n        return true;\n    };\n    /**\n     * @private\n     * @todo use it\n     */\n    WGLRenderer.prototype.destroy = function () {\n        var gl = this.gl,\n            shader = this.shader,\n            vbuffer = this.vbuffer;\n        this.flush();\n        if (vbuffer) {\n            vbuffer.destroy();\n        }\n        if (shader) {\n            shader.destroy();\n        }\n        if (gl) {\n            objectEach(this.textureHandles, function (texture) {\n                if (texture.handle) {\n                    gl.deleteTexture(texture.handle);\n                }\n            });\n            gl.canvas.width = 1;\n            gl.canvas.height = 1;\n        }\n    };\n    return WGLRenderer;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Boost_WGLRenderer = (WGLRenderer);\n\n;// ./code/es5/es-modules/Extensions/Boost/BoostSeries.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nvar BoostSeries_getBoostClipRect = Boost_BoostChart.getBoostClipRect, BoostSeries_isChartSeriesBoosting = Boost_BoostChart.isChartSeriesBoosting;\n\nvar getOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).getOptions;\n\nvar BoostSeries_composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed, BoostSeries_doc = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).doc, noop = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop, BoostSeries_win = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).win;\n\nvar BoostSeries_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, destroyObjectProperties = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).destroyObjectProperties, BoostSeries_error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, BoostSeries_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, BoostSeries_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, BoostSeries_pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique, wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap, defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined;\n\n/* *\n *\n *  Constants\n *\n * */\nvar CHUNK_SIZE = 3000;\n/* *\n *\n *  Variables\n *\n * */\nvar index, mainCanvas;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction allocateIfNotSeriesBoosting(renderer, series) {\n    var boost = series.boost;\n    if (renderer &&\n        boost &&\n        boost.target &&\n        boost.canvas &&\n        !BoostSeries_isChartSeriesBoosting(series.chart)) {\n        renderer.allocateBufferForSingleSeries(series);\n    }\n}\n/**\n * Return true if ths boost.enabled option is true\n *\n * @private\n * @param {Highcharts.Chart} chart\n * The chart\n * @return {boolean}\n * True, if boost is enabled.\n */\nfunction boostEnabled(chart) {\n    return BoostSeries_pick((chart &&\n        chart.options &&\n        chart.options.boost &&\n        chart.options.boost.enabled), true);\n}\n/**\n * @private\n */\nfunction BoostSeries_compose(SeriesClass, seriesTypes, wglMode) {\n    if (BoostSeries_pushUnique(BoostSeries_composed, 'Boost.Series')) {\n        var plotOptions_1 = getOptions().plotOptions,\n            seriesProto_1 = SeriesClass.prototype;\n        BoostSeries_addEvent(SeriesClass, 'destroy', onSeriesDestroy);\n        BoostSeries_addEvent(SeriesClass, 'hide', onSeriesHide);\n        if (wglMode) {\n            seriesProto_1.renderCanvas = seriesRenderCanvas;\n        }\n        wrap(seriesProto_1, 'getExtremes', wrapSeriesGetExtremes);\n        wrap(seriesProto_1, 'processData', wrapSeriesProcessData);\n        wrap(seriesProto_1, 'searchPoint', wrapSeriesSearchPoint);\n        [\n            'translate',\n            'generatePoints',\n            'drawTracker',\n            'drawPoints',\n            'render'\n        ].forEach(function (method) {\n            return wrapSeriesFunctions(seriesProto_1, seriesTypes, method);\n        });\n        // Set default options\n        Boost_Boostables.forEach(function (type) {\n            var typePlotOptions = plotOptions_1[type];\n            if (typePlotOptions) {\n                typePlotOptions.boostThreshold = 5000;\n                typePlotOptions.boostData = [];\n                seriesTypes[type].prototype.fillOpacity = true;\n            }\n        });\n        if (wglMode) {\n            var AreaSeries = seriesTypes.area,\n                AreaSplineSeries = seriesTypes.areaspline,\n                BubbleSeries = seriesTypes.bubble,\n                ColumnSeries = seriesTypes.column,\n                HeatmapSeries = seriesTypes.heatmap,\n                ScatterSeries = seriesTypes.scatter,\n                TreemapSeries = seriesTypes.treemap;\n            if (AreaSeries) {\n                extend(AreaSeries.prototype, {\n                    fill: true,\n                    fillOpacity: true,\n                    sampling: true\n                });\n            }\n            if (AreaSplineSeries) {\n                extend(AreaSplineSeries.prototype, {\n                    fill: true,\n                    fillOpacity: true,\n                    sampling: true\n                });\n            }\n            if (BubbleSeries) {\n                var bubbleProto_1 = BubbleSeries.prototype;\n                // By default, the bubble series does not use the KD-tree, so\n                // force it to.\n                delete bubbleProto_1.buildKDTree;\n                // SeriesTypes.bubble.prototype.directTouch = false;\n                // Needed for markers to work correctly\n                wrap(bubbleProto_1, 'markerAttribs', function (proceed) {\n                    if (this.boosted) {\n                        return false;\n                    }\n                    return proceed.apply(this, [].slice.call(arguments, 1));\n                });\n            }\n            if (ColumnSeries) {\n                extend(ColumnSeries.prototype, {\n                    fill: true,\n                    sampling: true\n                });\n            }\n            if (ScatterSeries) {\n                ScatterSeries.prototype.fill = true;\n            }\n            // We need to handle heatmaps separately, since we can't perform the\n            // size/color calculations in the shader easily.\n            // @todo This likely needs future optimization.\n            [HeatmapSeries, TreemapSeries].forEach(function (SC) {\n                if (SC) {\n                    wrap(SC.prototype, 'drawPoints', wrapSeriesDrawPoints);\n                }\n            });\n        }\n    }\n    return SeriesClass;\n}\n/**\n * Create a canvas + context and attach it to the target\n *\n * @private\n * @function createAndAttachRenderer\n *\n * @param {Highcharts.Chart} chart\n * the chart\n *\n * @param {Highcharts.Series} series\n * the series\n *\n * @return {Highcharts.BoostGLRenderer}\n * the canvas renderer\n */\nfunction createAndAttachRenderer(chart, series) {\n    var _a,\n        _b,\n        _c;\n    var ChartClass = chart.constructor,\n        targetGroup = chart.seriesGroup || series.group,\n        alpha = 1;\n    var width = chart.chartWidth,\n        height = chart.chartHeight,\n        target = chart,\n        foSupported = typeof SVGForeignObjectElement !== 'undefined',\n        hasClickHandler = false;\n    if (BoostSeries_isChartSeriesBoosting(chart)) {\n        target = chart;\n    }\n    else {\n        target = series;\n        hasClickHandler = Boolean(((_a = series.options.events) === null || _a === void 0 ? void 0 : _a.click) ||\n            ((_c = (_b = series.options.point) === null || _b === void 0 ? void 0 : _b.events) === null || _c === void 0 ? void 0 : _c.click));\n    }\n    var boost = target.boost =\n            target.boost ||\n                {};\n    // Support for foreignObject is flimsy as best.\n    // IE does not support it, and Chrome has a bug which messes up\n    // the canvas draw order.\n    // As such, we force the Image fallback for now, but leaving the\n    // actual Canvas path in-place in case this changes in the future.\n    foSupported = false;\n    if (!mainCanvas) {\n        mainCanvas = BoostSeries_doc.createElement('canvas');\n    }\n    if (!boost.target) {\n        boost.canvas = mainCanvas;\n        // Fall back to image tag if foreignObject isn't supported,\n        // or if we're exporting.\n        if (chart.renderer.forExport || !foSupported) {\n            target.renderTarget = boost.target = chart.renderer.image('', 0, 0, width, height)\n                .addClass('highcharts-boost-canvas')\n                .add(targetGroup);\n            boost.clear = function () {\n                boost.target.attr({\n                    // Insert a blank pixel (#17182)\n                    /* eslint-disable-next-line max-len*/\n                    href: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='\n                });\n            };\n            boost.copy = function () {\n                boost.resize();\n                boost.target.attr({\n                    href: boost.canvas.toDataURL('image/png')\n                });\n            };\n        }\n        else {\n            boost.targetFo = chart.renderer\n                .createElement('foreignObject')\n                .add(targetGroup);\n            target.renderTarget = boost.target =\n                BoostSeries_doc.createElement('canvas');\n            boost.targetCtx = boost.target.getContext('2d');\n            boost.targetFo.element.appendChild(boost.target);\n            boost.clear = function () {\n                boost.target.width = boost.canvas.width;\n                boost.target.height = boost.canvas.height;\n            };\n            boost.copy = function () {\n                boost.target.width = boost.canvas.width;\n                boost.target.height = boost.canvas.height;\n                boost.targetCtx.drawImage(boost.canvas, 0, 0);\n            };\n        }\n        boost.resize = function () {\n            var _a,\n                _b;\n            width = chart.chartWidth;\n            height = chart.chartHeight;\n            (boost.targetFo || boost.target)\n                .attr({\n                x: 0,\n                y: 0,\n                width: width,\n                height: height\n            })\n                .css({\n                pointerEvents: hasClickHandler ? void 0 : 'none',\n                mixedBlendMode: 'normal',\n                opacity: alpha\n            })\n                .addClass(hasClickHandler ? 'highcharts-tracker' : '');\n            if (target instanceof ChartClass) {\n                (_b = (_a = target.boost) === null || _a === void 0 ? void 0 : _a.markerGroup) === null || _b === void 0 ? void 0 : _b.translate(chart.plotLeft, chart.plotTop);\n            }\n        };\n        boost.clipRect = chart.renderer.clipRect();\n        (boost.targetFo || boost.target)\n            .attr({\n            // Set the z index of the boost target to that of the last\n            // series using it. This logic is not perfect, as it will not\n            // handle interleaved series with boost enabled or disabled. But\n            // it will cover the most common use case of one or more\n            // successive boosted or non-boosted series (#9819).\n            zIndex: series.options.zIndex\n        });\n        if (target instanceof ChartClass) {\n            target.boost.markerGroup = target.renderer\n                .g()\n                .add(targetGroup)\n                .translate(series.xAxis.pos, series.yAxis.pos);\n        }\n    }\n    boost.canvas.width = width;\n    boost.canvas.height = height;\n    if (boost.clipRect) {\n        var box = BoostSeries_getBoostClipRect(chart,\n            target), \n            // When using panes, the image itself must be clipped. When not\n            // using panes, it is better to clip the target group, because then\n            // we preserve clipping on touch- and mousewheel zoom preview.\n            clippedElement = (box.width === chart.clipBox.width &&\n                box.height === chart.clipBox.height) ? targetGroup :\n                (boost.targetFo || boost.target);\n        boost.clipRect.attr(box);\n        clippedElement === null || clippedElement === void 0 ? void 0 : clippedElement.clip(boost.clipRect);\n    }\n    boost.resize();\n    boost.clear();\n    if (!boost.wgl) {\n        boost.wgl = new Boost_WGLRenderer(function (wgl) {\n            if (wgl.settings.debug.timeBufferCopy) {\n                console.time('buffer copy'); // eslint-disable-line no-console\n            }\n            boost.copy();\n            if (wgl.settings.debug.timeBufferCopy) {\n                console.timeEnd('buffer copy'); // eslint-disable-line no-console\n            }\n        });\n        if (!boost.wgl.init(boost.canvas)) {\n            // The OGL renderer couldn't be inited. This likely means a shader\n            // error as we wouldn't get to this point if there was no WebGL\n            // support.\n            BoostSeries_error('[highcharts boost] - unable to init WebGL renderer');\n        }\n        boost.wgl.setOptions(chart.options.boost || {});\n        if (target instanceof ChartClass) {\n            boost.wgl.allocateBuffer(chart);\n        }\n    }\n    boost.wgl.setSize(width, height);\n    return boost.wgl;\n}\n/**\n * If implemented in the core, parts of this can probably be\n * shared with other similar methods in Highcharts.\n * @private\n * @function Highcharts.Series#destroyGraphics\n */\nfunction destroyGraphics(series) {\n    var points = series.points;\n    if (points) {\n        var point = void 0,\n            i = void 0;\n        for (i = 0; i < points.length; i = i + 1) {\n            point = points[i];\n            if (point && point.destroyElements) {\n                point.destroyElements(); // #7557\n            }\n        }\n    }\n    ['graph', 'area', 'tracker'].forEach(function (prop) {\n        var seriesProp = series[prop];\n        if (seriesProp) {\n            series[prop] = seriesProp.destroy();\n        }\n    });\n    for (var _i = 0, _a = series.zones; _i < _a.length; _i++) {\n        var zone = _a[_i];\n        destroyObjectProperties(zone, void 0, true);\n    }\n}\n/**\n * An \"async\" foreach loop. Uses a setTimeout to keep the loop from blocking the\n * UI thread.\n *\n * @private\n * @param {Array<unknown>} arr\n * The array to loop through.\n * @param {Function} fn\n * The callback to call for each item.\n * @param {Function} finalFunc\n * The callback to call when done.\n * @param {number} [chunkSize]\n * The number of iterations per timeout.\n * @param {number} [i]\n * The current index.\n * @param {boolean} [noTimeout]\n * Set to true to skip timeouts.\n */\nfunction eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {\n    i = i || 0;\n    chunkSize = chunkSize || CHUNK_SIZE;\n    var threshold = i + chunkSize;\n    var proceed = true;\n    while (proceed && i < threshold && i < arr.length) {\n        proceed = fn(arr[i], i);\n        ++i;\n    }\n    if (proceed) {\n        if (i < arr.length) {\n            if (noTimeout) {\n                eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);\n            }\n            else if (BoostSeries_win.requestAnimationFrame) {\n                // If available, do requestAnimationFrame - shaves off a few ms\n                BoostSeries_win.requestAnimationFrame(function () {\n                    eachAsync(arr, fn, finalFunc, chunkSize, i);\n                });\n            }\n            else {\n                setTimeout(eachAsync, 0, arr, fn, finalFunc, chunkSize, i);\n            }\n        }\n        else if (finalFunc) {\n            finalFunc();\n        }\n    }\n}\n/**\n * Enter boost mode and apply boost-specific properties.\n * @private\n * @function Highcharts.Series#enterBoost\n */\nfunction enterBoost(series) {\n    var _a;\n    series.boost = series.boost || {\n        // Faster than a series bind:\n        getPoint: (function (bp) { return getPoint(series, bp); })\n    };\n    var alteredByBoost = series.boost.altered = [];\n    // Save the original values, including whether it was an own\n    // property or inherited from the prototype.\n    ['allowDG', 'directTouch', 'stickyTracking'].forEach(function (prop) {\n        alteredByBoost.push({\n            prop: prop,\n            val: series[prop],\n            own: Object.hasOwnProperty.call(series, prop)\n        });\n    });\n    series.allowDG = false;\n    series.directTouch = false;\n    series.stickyTracking = true;\n    // Prevent animation when zooming in on boosted series(#13421).\n    series.finishedAnimating = true;\n    // Hide series label if any\n    if (series.labelBySeries) {\n        series.labelBySeries = series.labelBySeries.destroy();\n    }\n    // Destroy existing points after zoom out\n    if (series.is('scatter') &&\n        !series.is('treemap') &&\n        series.data.length) {\n        for (var _i = 0, _b = series.data; _i < _b.length; _i++) {\n            var point = _b[_i];\n            (_a = point === null || point === void 0 ? void 0 : point.destroy) === null || _a === void 0 ? void 0 : _a.call(point);\n        }\n        series.data.length = 0;\n        series.points.length = 0;\n        delete series.processedData;\n    }\n}\n/**\n * Exit from boost mode and restore non-boost properties.\n * @private\n * @function Highcharts.Series#exitBoost\n */\nfunction exitBoost(series) {\n    var _a;\n    var boost = series.boost,\n        chart = series.chart,\n        chartBoost = chart.boost;\n    if (chartBoost === null || chartBoost === void 0 ? void 0 : chartBoost.markerGroup) {\n        chartBoost.markerGroup.destroy();\n        chartBoost.markerGroup = void 0;\n        for (var _i = 0, _b = chart.series; _i < _b.length; _i++) {\n            var s = _b[_i];\n            s.markerGroup = void 0;\n            s.markerGroup = s.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n        }\n    }\n    // Reset instance properties and/or delete instance properties and go back\n    // to prototype\n    if (boost) {\n        (boost.altered || []).forEach(function (setting) {\n            if (setting.own) {\n                series[setting.prop] = setting.val;\n            }\n            else {\n                // Revert to prototype\n                delete series[setting.prop];\n            }\n        });\n        // Clear previous run\n        if (boost.clear) {\n            boost.clear();\n        }\n    }\n    // #21106, clean up boost clipping on the series groups.\n    (_a = (chart.seriesGroup || series.group)) === null || _a === void 0 ? void 0 : _a.clip();\n}\n/**\n * @private\n * @function Highcharts.Series#hasExtremes\n */\nfunction hasExtremes(series, checkX) {\n    var options = series.options,\n        dataLength = series.dataTable.modified.rowCount,\n        xAxis = series.xAxis && series.xAxis.options,\n        yAxis = series.yAxis && series.yAxis.options,\n        colorAxis = series.colorAxis && series.colorAxis.options;\n    return dataLength > (options.boostThreshold || Number.MAX_VALUE) &&\n        // Defined yAxis extremes\n        BoostSeries_isNumber(yAxis.min) &&\n        BoostSeries_isNumber(yAxis.max) &&\n        // Defined (and required) xAxis extremes\n        (!checkX ||\n            (BoostSeries_isNumber(xAxis.min) && BoostSeries_isNumber(xAxis.max))) &&\n        // Defined (e.g. heatmap) colorAxis extremes\n        (!colorAxis ||\n            (BoostSeries_isNumber(colorAxis.min) && BoostSeries_isNumber(colorAxis.max)));\n}\n/**\n * Used multiple times. In processData first on this.options.data, the second\n * time it runs the check again after processedXData is built.\n * If the data is going to be grouped, the series shouldn't be boosted.\n * @private\n */\nvar getSeriesBoosting = function (series, data) {\n    // Check if will be grouped.\n    if (series.forceCrop) {\n        return false;\n    }\n    return (BoostSeries_isChartSeriesBoosting(series.chart) ||\n        ((data ? data.length : 0) >=\n            (series.options.boostThreshold || Number.MAX_VALUE)));\n};\n/**\n * Extend series.destroy to also remove the fake k-d-tree points (#5137).\n * Normally this is handled by Series.destroy that calls Point.destroy,\n * but the fake search points are not registered like that.\n * @private\n */\nfunction onSeriesDestroy() {\n    var series = this,\n        chart = series.chart;\n    if (chart.boost &&\n        chart.boost.markerGroup === series.markerGroup) {\n        series.markerGroup = null;\n    }\n    if (chart.hoverPoints) {\n        chart.hoverPoints = chart.hoverPoints.filter(function (point) {\n            return point.series === series;\n        });\n    }\n    if (chart.hoverPoint && chart.hoverPoint.series === series) {\n        chart.hoverPoint = null;\n    }\n}\n/**\n * @private\n */\nfunction onSeriesHide() {\n    var boost = this.boost;\n    if (boost && boost.canvas && boost.target) {\n        if (boost.wgl) {\n            boost.wgl.clear();\n        }\n        if (boost.clear) {\n            boost.clear();\n        }\n    }\n}\n/**\n * Performs the actual render if the renderer is\n * attached to the series.\n * @private\n */\nfunction renderIfNotSeriesBoosting(series) {\n    var boost = series.boost;\n    if (boost &&\n        boost.canvas &&\n        boost.target &&\n        boost.wgl &&\n        !BoostSeries_isChartSeriesBoosting(series.chart)) {\n        boost.wgl.render(series.chart);\n    }\n}\n/**\n * Return a full Point object based on the index.\n * The boost module uses stripped point objects for performance reasons.\n * @private\n * @param {object|Highcharts.Point} boostPoint\n *        A stripped-down point object\n * @return {Highcharts.Point}\n *         A Point object as per https://api.highcharts.com/highcharts#Point\n */\nfunction getPoint(series, boostPoint) {\n    var _a;\n    var seriesOptions = series.options,\n        xAxis = series.xAxis,\n        PointClass = series.pointClass;\n    if (boostPoint instanceof PointClass) {\n        return boostPoint;\n    }\n    var isScatter = series.is('scatter'), xData = ((isScatter && series.getColumn('x', true).length ?\n            series.getColumn('x', true) :\n            void 0) ||\n            (series.getColumn('x').length ? series.getColumn('x') : void 0) ||\n            seriesOptions.xData ||\n            series.getColumn('x', true) ||\n            false), yData = (series.getColumn('y', true) ||\n            seriesOptions.yData ||\n            false), point = new PointClass(series, (isScatter && xData && yData) ?\n            [xData[boostPoint.i], yData[boostPoint.i]] :\n            (isArray(series.options.data) ? series.options.data : [])[boostPoint.i], xData ? xData[boostPoint.i] : void 0);\n    point.category = BoostSeries_pick(xAxis.categories ?\n        xAxis.categories[point.x] :\n        point.x, // @todo simplify\n    point.x);\n    point.key = (_a = point.name) !== null && _a !== void 0 ? _a : point.category;\n    point.dist = boostPoint.dist;\n    point.distX = boostPoint.distX;\n    point.plotX = boostPoint.plotX;\n    point.plotY = boostPoint.plotY;\n    point.index = boostPoint.i;\n    point.percentage = boostPoint.percentage;\n    point.isInside = series.isPointInside(point);\n    return point;\n}\n/**\n * @private\n */\nfunction scatterProcessData(force) {\n    var _a,\n        _b,\n        _c,\n        _d,\n        _e,\n        _f,\n        _g,\n        _h;\n    var series = this,\n        options = series.options,\n        xAxis = series.xAxis,\n        yAxis = series.yAxis;\n    // Process only on changes\n    if (!series.isDirty &&\n        !xAxis.isDirty &&\n        !yAxis.isDirty &&\n        !force) {\n        return false;\n    }\n    // Required to get tick-based zoom ranges that take options into account\n    // like `minPadding`, `maxPadding`, `startOnTick`, `endOnTick`.\n    series.yAxis.setTickInterval();\n    var boostThreshold = options.boostThreshold || 0, cropThreshold = options.cropThreshold, xData = series.getColumn('x'), xExtremes = xAxis.getExtremes(), xMax = (_a = xExtremes.max) !== null && _a !== void 0 ? _a : Number.MAX_VALUE, xMin = (_b = xExtremes.min) !== null && _b !== void 0 ? _b : -Number.MAX_VALUE, yData = series.getColumn('y'), yExtremes = yAxis.getExtremes(), yMax = (_c = yExtremes.max) !== null && _c !== void 0 ? _c : Number.MAX_VALUE, yMin = (_d = yExtremes.min) !== null && _d !== void 0 ? _d : -Number.MAX_VALUE;\n    // Skip processing in non-boost zoom\n    if (!series.boosted &&\n        xAxis.old &&\n        yAxis.old &&\n        xMin >= ((_e = xAxis.old.min) !== null && _e !== void 0 ? _e : -Number.MAX_VALUE) &&\n        xMax <= ((_f = xAxis.old.max) !== null && _f !== void 0 ? _f : Number.MAX_VALUE) &&\n        yMin >= ((_g = yAxis.old.min) !== null && _g !== void 0 ? _g : -Number.MAX_VALUE) &&\n        yMax <= ((_h = yAxis.old.max) !== null && _h !== void 0 ? _h : Number.MAX_VALUE)) {\n        series.dataTable.modified.setColumns({\n            x: xData,\n            y: yData\n        });\n        return true;\n    }\n    // Without thresholds just assign data\n    var dataLength = series.dataTable.rowCount;\n    if (!boostThreshold ||\n        dataLength < boostThreshold ||\n        (cropThreshold &&\n            !series.forceCrop &&\n            !series.getExtremesFromAll &&\n            !options.getExtremesFromAll &&\n            dataLength < cropThreshold)) {\n        series.dataTable.modified.setColumns({\n            x: xData,\n            y: yData\n        });\n        return true;\n    }\n    // Filter unsorted scatter data for ranges\n    var processedData = [],\n        processedXData = [],\n        processedYData = [],\n        xRangeNeeded = !(BoostSeries_isNumber(xExtremes.max) || BoostSeries_isNumber(xExtremes.min)),\n        yRangeNeeded = !(BoostSeries_isNumber(yExtremes.max) || BoostSeries_isNumber(yExtremes.min));\n    var cropped = false,\n        x,\n        xDataMax = xData[0],\n        xDataMin = xData[0],\n        y,\n        yDataMax = yData === null || yData === void 0 ? void 0 : yData[0],\n        yDataMin = yData === null || yData === void 0 ? void 0 : yData[0];\n    for (var i = 0, iEnd = xData.length; i < iEnd; ++i) {\n        x = xData[i];\n        y = yData === null || yData === void 0 ? void 0 : yData[i];\n        if (x >= xMin && x <= xMax &&\n            y >= yMin && y <= yMax) {\n            processedData.push({ x: x, y: y });\n            processedXData.push(x);\n            processedYData.push(y);\n            if (xRangeNeeded) {\n                xDataMax = Math.max(xDataMax, x);\n                xDataMin = Math.min(xDataMin, x);\n            }\n            if (yRangeNeeded) {\n                yDataMax = Math.max(yDataMax, y);\n                yDataMin = Math.min(yDataMin, y);\n            }\n        }\n        else {\n            cropped = true;\n        }\n    }\n    if (xRangeNeeded) {\n        xAxis.dataMax = Math.max(xDataMax, xAxis.dataMax || 0);\n        xAxis.dataMin = Math.min(xDataMin, xAxis.dataMin || 0);\n    }\n    if (yRangeNeeded) {\n        yAxis.dataMax = Math.max(yDataMax, yAxis.dataMax || 0);\n        yAxis.dataMin = Math.min(yDataMin, yAxis.dataMin || 0);\n    }\n    // Set properties as base processData\n    series.cropped = cropped;\n    series.cropStart = 0;\n    // For boosted points rendering\n    series.dataTable.modified.setColumns({\n        x: processedXData,\n        y: processedYData\n    });\n    if (!getSeriesBoosting(series, processedXData)) {\n        series.processedData = processedData; // For un-boosted points rendering\n    }\n    return true;\n}\n/**\n * @private\n * @function Highcharts.Series#renderCanvas\n */\nfunction seriesRenderCanvas() {\n    var _this = this;\n    var options = this.options || {}, chart = this.chart, chartBoost = chart.boost, seriesBoost = this.boost, xAxis = this.xAxis, yAxis = this.yAxis, xData = options.xData || this.getColumn('x', true), yData = options.yData || this.getColumn('y', true), lowData = this.getColumn('low', true), highData = this.getColumn('high', true), rawData = this.processedData || options.data, xExtremes = xAxis.getExtremes(), \n        // Taking into account the offset of the min point #19497\n        xMin = xExtremes.min - (xAxis.minPointOffset || 0), xMax = xExtremes.max + (xAxis.minPointOffset || 0), yExtremes = yAxis.getExtremes(), yMin = yExtremes.min - (yAxis.minPointOffset || 0), yMax = yExtremes.max + (yAxis.minPointOffset || 0), pointTaken = {}, sampling = !!this.sampling, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, isRange = this.pointArrayMap &&\n            this.pointArrayMap.join(',') === 'low,high', isStacked = !!options.stacking, cropStart = this.cropStart || 0, requireSorting = this.requireSorting, useRaw = !xData, compareX = options.findNearestPointBy === 'x', xDataFull = ((this.getColumn('x', true).length ?\n            this.getColumn('x', true) :\n            void 0) ||\n            this.options.xData ||\n            this.getColumn('x', true)), lineWidth = BoostSeries_pick(options.lineWidth, 1);\n    var renderer = false,\n        lastClientX,\n        yBottom = yAxis.getThreshold(threshold),\n        minVal,\n        maxVal,\n        minI,\n        maxI;\n    // When touch-zooming or mouse-panning, re-rendering the canvas would not\n    // perform fast enough. Instead, let the axes redraw, but not the series.\n    // The series is scale-translated in an event handler for an approximate\n    // preview.\n    if (xAxis.isPanning || yAxis.isPanning) {\n        return;\n    }\n    // Get or create the renderer\n    renderer = createAndAttachRenderer(chart, this);\n    chart.boosted = true;\n    if (!this.visible) {\n        return;\n    }\n    // If we are zooming out from SVG mode, destroy the graphics\n    if (this.points || this.graph) {\n        destroyGraphics(this);\n    }\n    // If we're rendering per. series we should create the marker groups\n    // as usual.\n    if (!BoostSeries_isChartSeriesBoosting(chart)) {\n        // If all series were boosting, but are not anymore\n        // restore private markerGroup\n        if (this.markerGroup === (chartBoost === null || chartBoost === void 0 ? void 0 : chartBoost.markerGroup)) {\n            this.markerGroup = void 0;\n        }\n        this.markerGroup = this.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n    }\n    else {\n        // If series has a private markerGroup, remove that\n        // and use common markerGroup\n        if (this.markerGroup &&\n            this.markerGroup !== (chartBoost === null || chartBoost === void 0 ? void 0 : chartBoost.markerGroup)) {\n            this.markerGroup.destroy();\n        }\n        // Use a single group for the markers\n        this.markerGroup = chartBoost === null || chartBoost === void 0 ? void 0 : chartBoost.markerGroup;\n        // When switching from chart boosting mode, destroy redundant\n        // series boosting targets\n        if (seriesBoost && seriesBoost.target) {\n            this.renderTarget =\n                seriesBoost.target =\n                    seriesBoost.target.destroy();\n        }\n    }\n    var points = this.points = [],\n        addKDPoint = function (clientX,\n        plotY,\n        i,\n        percentage) {\n            var x = xDataFull ? xDataFull[cropStart + i] : false,\n        pushPoint = function (plotX) {\n                if (chart.inverted) {\n                    plotX = xAxis.len - plotX;\n                plotY = yAxis.len - plotY;\n            }\n            points.push({\n                destroy: noop,\n                x: x,\n                clientX: plotX,\n                plotX: plotX,\n                plotY: plotY,\n                i: cropStart + i,\n                percentage: percentage\n            });\n        };\n        // We need to do ceil on the clientX to make things\n        // snap to pixel values. The renderer will frequently\n        // draw stuff on \"sub-pixels\".\n        clientX = Math.ceil(clientX);\n        // Shaves off about 60ms compared to repeated concatenation\n        index = compareX ? clientX : clientX + ',' + plotY;\n        // The k-d tree requires series points.\n        // Reduce the amount of points, since the time to build the\n        // tree increases exponentially.\n        if (enableMouseTracking) {\n            if (!pointTaken[index]) {\n                pointTaken[index] = true;\n                pushPoint(clientX);\n            }\n            else if (x === xDataFull[xDataFull.length - 1]) {\n                // If the last point is on the same pixel as the last\n                // tracked point, swap them. (#18856)\n                points.length--;\n                pushPoint(clientX);\n            }\n        }\n    };\n    // Do not start building while drawing\n    this.buildKDTree = noop;\n    fireEvent(this, 'renderCanvas');\n    if (this.is('line') &&\n        lineWidth > 1 &&\n        (seriesBoost === null || seriesBoost === void 0 ? void 0 : seriesBoost.target) &&\n        chartBoost &&\n        !chartBoost.lineWidthFilter) {\n        chartBoost.lineWidthFilter = chart.renderer.definition({\n            tagName: 'filter',\n            children: [\n                {\n                    tagName: 'feMorphology',\n                    attributes: {\n                        operator: 'dilate',\n                        radius: 0.25 * lineWidth\n                    }\n                }\n            ],\n            attributes: { id: 'linewidth' }\n        });\n        seriesBoost.target.attr({\n            filter: 'url(#linewidth)'\n        });\n    }\n    if (renderer) {\n        allocateIfNotSeriesBoosting(renderer, this);\n        renderer.pushSeries(this);\n        // Perform the actual renderer if we're on series level\n        renderIfNotSeriesBoosting(this);\n    }\n    /**\n     * This builds the KD-tree\n     * @private\n     */\n    function processPoint(d, i) {\n        var chartDestroyed = typeof chart.index === 'undefined';\n        var x,\n            y,\n            clientX,\n            plotY,\n            percentage,\n            low = false,\n            isYInside = true;\n        if (!defined(d)) {\n            return true;\n        }\n        if (!chartDestroyed) {\n            if (useRaw) {\n                x = d[0];\n                y = d[1];\n            }\n            else {\n                x = d;\n                y = yData === null || yData === void 0 ? void 0 : yData[i];\n            }\n            // Resolve low and high for range series\n            if (isRange) {\n                if (useRaw) {\n                    y = d.slice(1, 3);\n                }\n                low = lowData[i];\n                y = highData[i];\n            }\n            else if (isStacked) {\n                x = d.x;\n                y = d.stackY;\n                low = y - d.y;\n                percentage = d.percentage;\n            }\n            // Optimize for scatter zooming\n            if (!requireSorting) {\n                isYInside = (y || 0) >= yMin && y <= yMax;\n            }\n            if (y !== null && x >= xMin && x <= xMax && isYInside) {\n                clientX = xAxis.toPixels(x, true);\n                if (sampling) {\n                    if (typeof minI === 'undefined' ||\n                        clientX === lastClientX) {\n                        if (!isRange) {\n                            low = y;\n                        }\n                        if (typeof maxI === 'undefined' ||\n                            y > maxVal) {\n                            maxVal = y;\n                            maxI = i;\n                        }\n                        if (typeof minI === 'undefined' ||\n                            low < minVal) {\n                            minVal = low;\n                            minI = i;\n                        }\n                    }\n                    // Add points and reset\n                    if (!compareX || clientX !== lastClientX) {\n                        // `maxI` is number too:\n                        if (typeof minI !== 'undefined') {\n                            plotY =\n                                yAxis.toPixels(maxVal, true);\n                            yBottom =\n                                yAxis.toPixels(minVal, true);\n                            addKDPoint(clientX, plotY, maxI, percentage);\n                            if (yBottom !== plotY) {\n                                addKDPoint(clientX, yBottom, minI, percentage);\n                            }\n                        }\n                        minI = maxI = void 0;\n                        lastClientX = clientX;\n                    }\n                }\n                else {\n                    plotY = Math.ceil(yAxis.toPixels(y, true));\n                    addKDPoint(clientX, plotY, i, percentage);\n                }\n            }\n        }\n        return !chartDestroyed;\n    }\n    /**\n     * @private\n     */\n    var boostOptions = renderer.settings,\n        doneProcessing = function () {\n            fireEvent(_this, 'renderedCanvas');\n        // Go back to prototype, ready to build\n        delete _this.buildKDTree;\n        // Check that options exist, as async processing\n        // could mean the series is removed at this point (#19895)\n        if (_this.options) {\n            _this.buildKDTree();\n        }\n        if (boostOptions.debug.timeKDTree) {\n            console.timeEnd('kd tree building'); // eslint-disable-line no-console\n        }\n    };\n    // Loop over the points to build the k-d tree - skip this if\n    // exporting\n    if (!chart.renderer.forExport) {\n        if (boostOptions.debug.timeKDTree) {\n            console.time('kd tree building'); // eslint-disable-line no-console\n        }\n        eachAsync(isStacked ?\n            this.data.slice(cropStart) :\n            (xData || rawData), processPoint, doneProcessing);\n    }\n}\n/**\n * Used for treemap|heatmap.drawPoints\n * @private\n */\nfunction wrapSeriesDrawPoints(proceed) {\n    var enabled = true;\n    if (this.chart.options && this.chart.options.boost) {\n        enabled = typeof this.chart.options.boost.enabled === 'undefined' ?\n            true :\n            this.chart.options.boost.enabled;\n    }\n    if (!enabled || !this.boosted) {\n        return proceed.call(this);\n    }\n    this.chart.boosted = true;\n    // Make sure we have a valid OGL context\n    var renderer = createAndAttachRenderer(this.chart,\n        this);\n    if (renderer) {\n        allocateIfNotSeriesBoosting(renderer, this);\n        renderer.pushSeries(this);\n    }\n    renderIfNotSeriesBoosting(this);\n}\n/**\n * Override a bunch of methods the same way. If the number of points is\n * below the threshold, run the original method. If not, check for a\n * canvas version or do nothing.\n *\n * Note that we're not overriding any of these for heatmaps.\n */\nfunction wrapSeriesFunctions(seriesProto, seriesTypes, method) {\n    /**\n     * @private\n     */\n    function branch(proceed) {\n        var letItPass = this.options.stacking &&\n                (method === 'translate' || method === 'generatePoints');\n        if (!this.boosted ||\n            letItPass ||\n            !boostEnabled(this.chart) ||\n            this.type === 'heatmap' ||\n            this.type === 'treemap' ||\n            !Boost_BoostableMap[this.type] ||\n            this.options.boostThreshold === 0) {\n            proceed.call(this);\n            // Run canvas version of method, like renderCanvas(), if it exists\n        }\n        else if (method === 'render' && this.renderCanvas) {\n            this.renderCanvas();\n        }\n    }\n    wrap(seriesProto, method, branch);\n    // Special case for some types, when translate method is already wrapped\n    if (method === 'translate') {\n        for (var _i = 0, _a = [\n            'column',\n            'arearange',\n            'columnrange',\n            'heatmap',\n            'treemap'\n        ]; _i < _a.length; _i++) {\n            var type = _a[_i];\n            if (seriesTypes[type]) {\n                wrap(seriesTypes[type].prototype, method, branch);\n            }\n        }\n    }\n}\n/**\n * Do not compute extremes when min and max are set. If we use this in the\n * core, we can add the hook to hasExtremes to the methods directly.\n * @private\n */\nfunction wrapSeriesGetExtremes(proceed) {\n    if (this.boosted) {\n        if (hasExtremes(this)) {\n            return {};\n        }\n        if (this.xAxis.isPanning || this.yAxis.isPanning) {\n            // Do not re-compute the extremes during panning, because looping\n            // the data is expensive. The `this` contains the `dataMin` and\n            // `dataMax` to use.\n            return this;\n        }\n    }\n    return proceed.apply(this, [].slice.call(arguments, 1));\n}\n/**\n * If the series is a heatmap or treemap, or if the series is not boosting\n * do the default behaviour. Otherwise, process if the series has no\n * extremes.\n * @private\n */\nfunction wrapSeriesProcessData(proceed) {\n    var _a,\n        _b,\n        _c;\n    var dataToMeasure = this.options.data;\n    if (boostEnabled(this.chart) && Boost_BoostableMap[this.type]) {\n        var series = this, \n            // Flag for code that should run for ScatterSeries and its\n            // subclasses, apart from the enlisted exceptions.\n            isScatter = series.is('scatter') &&\n                !series.is('bubble') &&\n                !series.is('treemap') &&\n                !series.is('heatmap');\n        // If there are no extremes given in the options, we also need to\n        // process the data to read the data extremes. If this is a heatmap,\n        // do default behaviour.\n        if (\n        // First pass with options.data:\n        !getSeriesBoosting(series, dataToMeasure) ||\n            isScatter ||\n            series.is('treemap') ||\n            // Use processedYData for the stack (#7481):\n            series.options.stacking ||\n            !hasExtremes(series, true)) {\n            // Do nothing until the panning stops\n            if (series.boosted && (((_a = series.xAxis) === null || _a === void 0 ? void 0 : _a.isPanning) || ((_b = series.yAxis) === null || _b === void 0 ? void 0 : _b.isPanning))) {\n                return;\n            }\n            // Extra check for zoomed scatter data\n            if (isScatter && !series.yAxis.treeGrid) {\n                scatterProcessData.call(series, arguments[1]);\n            }\n            else {\n                proceed.apply(series, [].slice.call(arguments, 1));\n            }\n            dataToMeasure = series.getColumn('x', true);\n        }\n        // Set the isBoosting flag, second pass with processedXData to\n        // see if we have zoomed.\n        series.boosted = getSeriesBoosting(series, dataToMeasure);\n        // Enter or exit boost mode\n        if (series.boosted) {\n            // Force turbo-mode:\n            var firstPoint = void 0;\n            if ((_c = series.options.data) === null || _c === void 0 ? void 0 : _c.length) {\n                firstPoint = series.getFirstValidPoint(series.options.data);\n                if (!BoostSeries_isNumber(firstPoint) &&\n                    !isArray(firstPoint) &&\n                    !series.is('treemap')) {\n                    BoostSeries_error(12, false, series.chart);\n                }\n            }\n            enterBoost(series);\n        }\n        else {\n            exitBoost(series);\n        }\n        // The series type is not boostable\n    }\n    else {\n        proceed.apply(this, [].slice.call(arguments, 1));\n    }\n}\n/**\n * Return a point instance from the k-d-tree\n * @private\n */\nfunction wrapSeriesSearchPoint(proceed) {\n    var result = proceed.apply(this,\n        [].slice.call(arguments, 1));\n    if (this.boost && result) {\n        return this.boost.getPoint(result);\n    }\n    return result;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar BoostSeries = {\n    compose: BoostSeries_compose,\n    destroyGraphics: destroyGraphics,\n    eachAsync: eachAsync,\n    getPoint: getPoint\n};\n/* harmony default export */ var Boost_BoostSeries = (BoostSeries);\n\n;// ./code/es5/es-modules/Extensions/BoostCanvas.js\n/* *\n *\n *  License: www.highcharts.com/license\n *  Author: Torstein Honsi, Christer Vasseng\n *\n *  This module serves as a fallback for the Boost module in IE9 and IE10. Newer\n *  browsers support WebGL which is faster.\n *\n *  It is recommended to include this module in conditional comments targeting\n *  IE9 and IE10.\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar BoostCanvas_getBoostClipRect = Boost_BoostChart.getBoostClipRect, BoostCanvas_isChartSeriesBoosting = Boost_BoostChart.isChartSeriesBoosting;\n\nvar BoostCanvas_destroyGraphics = Boost_BoostSeries.destroyGraphics;\n\nvar BoostCanvas_color = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default()).parse;\n\nvar BoostCanvas_doc = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).doc, BoostCanvas_noop = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop;\n\nvar BoostCanvas_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, BoostCanvas_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, BoostCanvas_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, BoostCanvas_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, BoostCanvas_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, BoostCanvas_wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap;\n/* *\n *\n *  Namespace\n *\n * */\nvar BoostCanvas;\n(function (BoostCanvas) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    // Use a blank pixel for clearing canvas (#17182)\n    var b64BlankPixel = ('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +\n            'CAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');\n    var CHUNK_SIZE = 50000;\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    var ChartConstructor;\n    var destroyLoadingDiv;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function areaCvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint) {\n        if (lastPoint && clientX !== lastPoint.clientX) {\n            ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);\n            ctx.lineTo(lastPoint.clientX, lastPoint.plotY);\n            ctx.lineTo(clientX, plotY);\n            ctx.lineTo(clientX, yBottom);\n        }\n    }\n    /**\n     * @private\n     */\n    function bubbleCvsMarkerCircle(ctx, clientX, plotY, r, i) {\n        ctx.moveTo(clientX, plotY);\n        ctx.arc(clientX, plotY, this.radii && this.radii[i], 0, 2 * Math.PI, false);\n    }\n    /**\n     * @private\n     */\n    function columnCvsDrawPoint(ctx, clientX, plotY, yBottom) {\n        ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);\n    }\n    /**\n     * @private\n     */\n    function compose(ChartClass, SeriesClass, seriesTypes) {\n        var seriesProto = SeriesClass.prototype;\n        if (!seriesProto.renderCanvas) {\n            var AreaSeries_1 = seriesTypes.area,\n                BubbleSeries_1 = seriesTypes.bubble,\n                ColumnSeries_1 = seriesTypes.column,\n                HeatmapSeries_1 = seriesTypes.heatmap,\n                ScatterSeries_1 = seriesTypes.scatter;\n            ChartConstructor = ChartClass;\n            ChartClass.prototype.callbacks.push(function (chart) {\n                BoostCanvas_addEvent(chart, 'predraw', onChartClear);\n                BoostCanvas_addEvent(chart, 'render', onChartCanvasToSVG);\n            });\n            seriesProto.canvasToSVG = seriesCanvasToSVG;\n            seriesProto.cvsLineTo = seriesCvsLineTo;\n            seriesProto.getContext = seriesGetContext;\n            seriesProto.renderCanvas = seriesRenderCanvas;\n            if (AreaSeries_1) {\n                var areaProto = AreaSeries_1.prototype;\n                areaProto.cvsDrawPoint = areaCvsDrawPoint;\n                areaProto.fill = true;\n                areaProto.fillOpacity = true;\n                areaProto.sampling = true;\n            }\n            if (BubbleSeries_1) {\n                var bubbleProto = BubbleSeries_1.prototype;\n                bubbleProto.cvsMarkerCircle = bubbleCvsMarkerCircle;\n                bubbleProto.cvsStrokeBatch = 1;\n            }\n            if (ColumnSeries_1) {\n                var columnProto = ColumnSeries_1.prototype;\n                columnProto.cvsDrawPoint = columnCvsDrawPoint;\n                columnProto.fill = true;\n                columnProto.sampling = true;\n            }\n            if (HeatmapSeries_1) {\n                var heatmapProto = HeatmapSeries_1.prototype;\n                BoostCanvas_wrap(heatmapProto, 'drawPoints', wrapHeatmapDrawPoints);\n            }\n            if (ScatterSeries_1) {\n                var scatterProto = ScatterSeries_1.prototype;\n                scatterProto.cvsMarkerCircle = scatterCvsMarkerCircle;\n                scatterProto.cvsMarkerSquare = scatterCvsMarkerSquare;\n                scatterProto.fill = true;\n            }\n        }\n    }\n    BoostCanvas.compose = compose;\n    /**\n     * @private\n     */\n    function onChartCanvasToSVG() {\n        if (this.boost && this.boost.copy) {\n            this.boost.copy();\n        }\n    }\n    /**\n     * @private\n     */\n    function onChartClear() {\n        var boost = this.boost || {};\n        if (boost.target) {\n            boost.target.attr({ href: b64BlankPixel });\n        }\n        if (boost.canvas) {\n            boost.canvas.getContext('2d').clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n        }\n    }\n    /**\n     * Draw the canvas image inside an SVG image\n     *\n     * @private\n     * @function Highcharts.Series#canvasToSVG\n     */\n    function seriesCanvasToSVG() {\n        if (!BoostCanvas_isChartSeriesBoosting(this.chart)) {\n            if (this.boost && this.boost.copy) {\n                this.boost.copy();\n            }\n            else if (this.chart.boost && this.chart.boost.copy) {\n                this.chart.boost.copy();\n            }\n        }\n        else if (this.boost && this.boost.clear) {\n            this.boost.clear();\n        }\n    }\n    /**\n     * @private\n     */\n    function seriesCvsLineTo(ctx, clientX, plotY) {\n        ctx.lineTo(clientX, plotY);\n    }\n    /**\n     * Create a hidden canvas to draw the graph on. The contents is later\n     * copied over to an SVG image element.\n     *\n     * @private\n     * @function Highcharts.Series#getContext\n     */\n    function seriesGetContext() {\n        var chart = this.chart,\n            target = BoostCanvas_isChartSeriesBoosting(chart) ? chart : this,\n            targetGroup = (target === chart ?\n                chart.seriesGroup :\n                chart.seriesGroup || this.group),\n            width = chart.chartWidth,\n            height = chart.chartHeight,\n            swapXY = function (proceed,\n            x,\n            y,\n            a,\n            b,\n            c,\n            d) {\n                proceed.call(this,\n            y,\n            x,\n            a,\n            b,\n            c,\n            d);\n        };\n        var ctx;\n        var boost = target.boost =\n                target.boost ||\n                    {};\n        ctx = boost.targetCtx;\n        if (!boost.canvas) {\n            boost.canvas = BoostCanvas_doc.createElement('canvas');\n            boost.target = chart.renderer\n                .image('', 0, 0, width, height)\n                .addClass('highcharts-boost-canvas')\n                .add(targetGroup);\n            ctx = boost.targetCtx =\n                boost.canvas.getContext('2d');\n            if (chart.inverted) {\n                ['moveTo', 'lineTo', 'rect', 'arc'].forEach(function (fn) {\n                    BoostCanvas_wrap(ctx, fn, swapXY);\n                });\n            }\n            boost.copy = function () {\n                boost.target.attr({\n                    href: boost.canvas.toDataURL('image/png')\n                });\n            };\n            boost.clear = function () {\n                ctx.clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n                if (target === boost.target) {\n                    boost.target.attr({\n                        href: b64BlankPixel\n                    });\n                }\n            };\n            boost.clipRect = chart.renderer.clipRect();\n            boost.target.clip(boost.clipRect);\n        }\n        else if (!(target instanceof ChartConstructor)) {\n            ///  ctx.clearRect(0, 0, width, height);\n        }\n        if (boost.canvas.width !== width) {\n            boost.canvas.width = width;\n        }\n        if (boost.canvas.height !== height) {\n            boost.canvas.height = height;\n        }\n        boost.target.attr({\n            x: 0,\n            y: 0,\n            width: width,\n            height: height,\n            style: 'pointer-events: none',\n            href: b64BlankPixel\n        });\n        if (boost.clipRect) {\n            boost.clipRect.attr(BoostCanvas_getBoostClipRect(chart, target));\n        }\n        return ctx;\n    }\n    /**\n     * @private\n     */\n    function seriesRenderCanvas() {\n        var series = this, options = series.options, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, activeBoostSettings = chart.options.boost || {}, boostSettings = {\n                timeRendering: activeBoostSettings.timeRendering || false,\n                timeSeriesProcessing: activeBoostSettings.timeSeriesProcessing || false,\n                timeSetup: activeBoostSettings.timeSetup || false\n            }, xData = series.getColumn('x', true), yData = series.getColumn('y', true), rawData = options.data, xExtremes = xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, pointTaken = {}, sampling = !!series.sampling, r = options.marker && options.marker.radius, strokeBatch = series.cvsStrokeBatch || 1000, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, hasThreshold = BoostCanvas_isNumber(threshold), translatedThreshold = yAxis.getThreshold(threshold), doFill = series.fill, isRange = (series.pointArrayMap &&\n                series.pointArrayMap.join(',') === 'low,high'), isStacked = !!options.stacking, cropStart = series.cropStart || 0, loadingOptions = chart.options.loading, requireSorting = series.requireSorting, connectNulls = options.connectNulls, useRaw = !xData, sdata = (isStacked ?\n                series.data :\n                (xData || rawData)), fillColor = (series.fillOpacity ?\n                highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(series.color).setOpacity(BoostCanvas_pick(options.fillOpacity, 0.75)).get() :\n                series.color), compareX = options.findNearestPointBy === 'x', boost = this.boost || {}, cvsDrawPoint = series.cvsDrawPoint, cvsLineTo = options.lineWidth ? series.cvsLineTo : void 0, cvsMarker = (r && r <= 1 ?\n                series.cvsMarkerSquare :\n                series.cvsMarkerCircle);\n        if (boost.target) {\n            boost.target.attr({ href: b64BlankPixel });\n        }\n        // If we are zooming out from SVG mode, destroy the graphics\n        if (series.points || series.graph) {\n            BoostCanvas_destroyGraphics(series);\n        }\n        // The group\n        series.plotGroup('group', 'series', series.visible ? 'visible' : 'hidden', options.zIndex, chart.seriesGroup);\n        series.markerGroup = series.group;\n        BoostCanvas_addEvent(series, 'destroy', function () {\n            // Prevent destroy twice\n            series.markerGroup = null;\n        });\n        var points = this.points = [],\n            ctx = this.getContext();\n        series.buildKDTree = BoostCanvas_noop; // Do not start building while drawing\n        if (boost.clear) {\n            boost.clear();\n        }\n        // If (series.canvas) {\n        //     ctx.clearRect(\n        //         0,\n        //         0,\n        //         series.canvas.width,\n        //         series.canvas.height\n        //     );\n        // }\n        if (!series.visible) {\n            return;\n        }\n        // Display a loading indicator\n        if (rawData.length > 99999) {\n            chart.options.loading = BoostCanvas_merge(loadingOptions, {\n                labelStyle: {\n                    backgroundColor: BoostCanvas_color(\"#ffffff\" /* Palette.backgroundColor */).setOpacity(0.75).get(),\n                    padding: '1em',\n                    borderRadius: '0.5em'\n                },\n                style: {\n                    backgroundColor: 'none',\n                    opacity: 1\n                }\n            });\n            highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().clearTimeout(destroyLoadingDiv);\n            chart.showLoading('Drawing...');\n            chart.options.loading = loadingOptions; // Reset\n        }\n        if (boostSettings.timeRendering) {\n            console.time('canvas rendering'); // eslint-disable-line no-console\n        }\n        // Loop variables\n        var c = 0,\n            lastClientX,\n            lastPoint,\n            yBottom = translatedThreshold,\n            wasNull,\n            minVal,\n            maxVal,\n            minI,\n            maxI,\n            index;\n        // Loop helpers\n        var stroke = function () {\n                if (doFill) {\n                    ctx.fillStyle = fillColor;\n                ctx.fill();\n            }\n            else {\n                ctx.strokeStyle = series.color;\n                ctx.lineWidth = options.lineWidth;\n                ctx.stroke();\n            }\n        }, \n        //\n        drawPoint = function (clientX, plotY, yBottom, i) {\n            if (c === 0) {\n                ctx.beginPath();\n                if (cvsLineTo) {\n                    ctx.lineJoin = 'round';\n                }\n            }\n            if (chart.scroller &&\n                series.options.className ===\n                    'highcharts-navigator-series') {\n                plotY += chart.scroller.top;\n                if (yBottom) {\n                    yBottom += chart.scroller.top;\n                }\n            }\n            else {\n                plotY += chart.plotTop;\n            }\n            clientX += chart.plotLeft;\n            if (wasNull) {\n                ctx.moveTo(clientX, plotY);\n            }\n            else {\n                if (cvsDrawPoint) {\n                    cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);\n                }\n                else if (cvsLineTo) {\n                    cvsLineTo(ctx, clientX, plotY);\n                }\n                else if (cvsMarker) {\n                    cvsMarker.call(series, ctx, clientX, plotY, r, i);\n                }\n            }\n            // We need to stroke the line for every 1000 pixels. It will\n            // crash the browser memory use if we stroke too\n            // infrequently.\n            c = c + 1;\n            if (c === strokeBatch) {\n                stroke();\n                c = 0;\n            }\n            // Area charts need to keep track of the last point\n            lastPoint = {\n                clientX: clientX,\n                plotY: plotY,\n                yBottom: yBottom\n            };\n        }, xDataFull = ((this.getColumn('x').length ? this.getColumn('x') : void 0) ||\n            this.options.xData ||\n            (this.getColumn('x', true).length ?\n                this.getColumn('x', true) :\n                false)), \n        //\n        addKDPoint = function (clientX, plotY, i) {\n            // Shaves off about 60ms compared to repeated concatenation\n            index = compareX ? clientX : clientX + ',' + plotY;\n            // The k-d tree requires series points.\n            // Reduce the amount of points, since the time to build the\n            // tree increases exponentially.\n            if (enableMouseTracking && !pointTaken[index]) {\n                pointTaken[index] = true;\n                if (chart.inverted) {\n                    clientX = xAxis.len - clientX;\n                    plotY = yAxis.len - plotY;\n                }\n                points.push({\n                    x: xDataFull ?\n                        xDataFull[cropStart + i] :\n                        false,\n                    clientX: clientX,\n                    plotX: clientX,\n                    plotY: plotY,\n                    i: cropStart + i\n                });\n            }\n        };\n        // Loop over the points\n        Boost_BoostSeries.eachAsync(sdata, function (d, i) {\n            var chartDestroyed = typeof chart.index === 'undefined';\n            var x,\n                y,\n                clientX,\n                plotY,\n                isNull,\n                low,\n                isNextInside = false,\n                isPrevInside = false,\n                nx = NaN,\n                px = NaN,\n                isYInside = true;\n            if (!chartDestroyed) {\n                if (useRaw) {\n                    x = d[0];\n                    y = d[1];\n                    if (sdata[i + 1]) {\n                        nx = sdata[i + 1][0];\n                    }\n                    if (sdata[i - 1]) {\n                        px = sdata[i - 1][0];\n                    }\n                }\n                else {\n                    x = d;\n                    y = yData[i];\n                    if (sdata[i + 1]) {\n                        nx = sdata[i + 1];\n                    }\n                    if (sdata[i - 1]) {\n                        px = sdata[i - 1];\n                    }\n                }\n                if (nx && nx >= xMin && nx <= xMax) {\n                    isNextInside = true;\n                }\n                if (px && px >= xMin && px <= xMax) {\n                    isPrevInside = true;\n                }\n                // Resolve low and high for range series\n                if (isRange) {\n                    if (useRaw) {\n                        y = d.slice(1, 3);\n                    }\n                    low = y[0];\n                    y = y[1];\n                }\n                else if (isStacked) {\n                    x = d.x;\n                    y = d.stackY;\n                    low = y - d.y;\n                }\n                isNull = y === null;\n                // Optimize for scatter zooming\n                if (!requireSorting) {\n                    isYInside = y >= yMin && y <= yMax;\n                }\n                if (!isNull &&\n                    ((x >= xMin && x <= xMax && isYInside) ||\n                        (isNextInside || isPrevInside))) {\n                    clientX = Math.round(xAxis.toPixels(x, true));\n                    if (sampling) {\n                        if (typeof minI === 'undefined' ||\n                            clientX === lastClientX) {\n                            if (!isRange) {\n                                low = y;\n                            }\n                            if (typeof maxI === 'undefined' || y > maxVal) {\n                                maxVal = y;\n                                maxI = i;\n                            }\n                            if (typeof minI === 'undefined' ||\n                                low < minVal) {\n                                minVal = low;\n                                minI = i;\n                            }\n                        }\n                        // Add points and reset\n                        if (clientX !== lastClientX) {\n                            // `maxI` also a number:\n                            if (typeof minI !== 'undefined') {\n                                plotY = yAxis.toPixels(maxVal, true);\n                                yBottom = yAxis.toPixels(minVal, true);\n                                drawPoint(clientX, hasThreshold ?\n                                    Math.min(plotY, translatedThreshold) : plotY, hasThreshold ?\n                                    Math.max(yBottom, translatedThreshold) : yBottom, i);\n                                addKDPoint(clientX, plotY, maxI);\n                                if (yBottom !== plotY) {\n                                    addKDPoint(clientX, yBottom, minI);\n                                }\n                            }\n                            minI = maxI = void 0;\n                            lastClientX = clientX;\n                        }\n                    }\n                    else {\n                        plotY = Math.round(yAxis.toPixels(y, true));\n                        drawPoint(clientX, plotY, yBottom, i);\n                        addKDPoint(clientX, plotY, i);\n                    }\n                }\n                wasNull = isNull && !connectNulls;\n                if (i % CHUNK_SIZE === 0) {\n                    if (series.boost &&\n                        series.boost.copy) {\n                        series.boost.copy();\n                    }\n                    else if (series.chart.boost &&\n                        series.chart.boost.copy) {\n                        series.chart.boost.copy();\n                    }\n                }\n            }\n            return !chartDestroyed;\n        }, function () {\n            var loadingDiv = chart.loadingDiv,\n                loadingShown = chart.loadingShown;\n            stroke();\n            // If (series.boostCopy || series.chart.boostCopy) {\n            //     (series.boostCopy || series.chart.boostCopy)();\n            // }\n            series.canvasToSVG();\n            if (boostSettings.timeRendering) {\n                console.timeEnd('canvas rendering'); // eslint-disable-line no-console\n            }\n            BoostCanvas_fireEvent(series, 'renderedCanvas');\n            // Do not use chart.hideLoading, as it runs JS animation and\n            // will be blocked by buildKDTree. CSS animation looks good, but\n            // then it must be deleted in timeout. If we add the module to\n            // core, change hideLoading so we can skip this block.\n            if (loadingShown) {\n                loadingDiv.style.transition = 'opacity 250ms';\n                loadingDiv.opacity = 0;\n                chart.loadingShown = false;\n                destroyLoadingDiv = setTimeout(function () {\n                    if (loadingDiv.parentNode) { // In exporting it is falsy\n                        loadingDiv.parentNode.removeChild(loadingDiv);\n                    }\n                    chart.loadingDiv = chart.loadingSpan = null;\n                }, 250);\n            }\n            // Go back to prototype, ready to build\n            delete series.buildKDTree;\n            series.buildKDTree();\n            // Don't do async on export, the exportChart, getSVGForExport and\n            // getSVG methods are not chained for it.\n        }, chart.renderer.forExport ? Number.MAX_VALUE : void 0);\n    }\n    /**\n     * @private\n     */\n    function scatterCvsMarkerCircle(ctx, clientX, plotY, r) {\n        ctx.moveTo(clientX, plotY);\n        ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);\n    }\n    /**\n     * Rect is twice as fast as arc, should be used for small markers.\n     * @private\n     */\n    function scatterCvsMarkerSquare(ctx, clientX, plotY, r) {\n        ctx.rect(clientX - r, plotY - r, r * 2, r * 2);\n    }\n    /**\n     * @private\n     */\n    function wrapHeatmapDrawPoints() {\n        var chart = this.chart,\n            ctx = this.getContext(),\n            inverted = this.chart.inverted,\n            xAxis = this.xAxis,\n            yAxis = this.yAxis;\n        if (ctx) {\n            // Draw the columns\n            this.points.forEach(function (point) {\n                var plotY = point.plotY;\n                var pointAttr;\n                if (typeof plotY !== 'undefined' &&\n                    !isNaN(plotY) &&\n                    point.y !== null &&\n                    ctx) {\n                    var _a = point.shapeArgs || {},\n                        _b = _a.x,\n                        x = _b === void 0 ? 0 : _b,\n                        _c = _a.y,\n                        y = _c === void 0 ? 0 : _c,\n                        _d = _a.width,\n                        width = _d === void 0 ? 0 : _d,\n                        _e = _a.height,\n                        height = _e === void 0 ? 0 : _e;\n                    if (!chart.styledMode) {\n                        pointAttr = point.series.pointAttribs(point);\n                    }\n                    else {\n                        pointAttr = point.series.colorAttribs(point);\n                    }\n                    ctx.fillStyle = pointAttr.fill;\n                    if (inverted) {\n                        ctx.fillRect(yAxis.len - y + xAxis.left, xAxis.len - x + yAxis.top, -height, -width);\n                    }\n                    else {\n                        ctx.fillRect(x + xAxis.left, y + yAxis.top, width, height);\n                    }\n                }\n            });\n            this.canvasToSVG();\n        }\n        else {\n            this.chart.showLoading('Your browser doesn\\'t support HTML5 canvas, <br>' +\n                'please use a modern browser');\n        }\n    }\n})(BoostCanvas || (BoostCanvas = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Extensions_BoostCanvas = (BoostCanvas);\n\n;// ./code/es5/es-modules/masters/modules/boost-canvas.src.js\n\n\n\n\nvar G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Initialize the canvas boost.\n *\n * @function Highcharts.initCanvasBoost\n */\nG.initCanvasBoost = function () {\n    Extensions_BoostCanvas.compose(G.Chart, G.Series, G.seriesTypes);\n};\n/* harmony default export */ var boost_canvas_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","require","define","amd","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__620__","index","mainCanvas","BoostCanvas","__webpack_modules__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","boost_canvas_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","BoostableMap","Boost_Boostables","forEach","item","composed","addEvent","pick","isChartSeriesBoosting","chart","allSeries","series","boost","boostOptions","options","threshold","seriesThreshold","length","allowBoostForce","allowForce","_i","_a","xAxis","axis","min","Infinity","dataMin","max","dataMax","forceChartBoost","seriesOptions","canBoostCount","needBoostCount","_b","allSeries_1","boostThreshold","visible","type","Boost_BoostableMap","patientMax","args","arguments","r","Number","MAX_VALUE","t","getColumn","data","points","pushUnique","target","navigator","clipBox","x","plotLeft","y","plotTop","width","plotWidth","height","plotHeight","inverted","top","opposite","left","getClipBox","yAxis","lateral","pos","verticalAxes","Math","len","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","Boost_WGLDrawMode","clamp","error","WGLShader_pick","WGLShader","gl","errors","uLocations","createShader","bind","shaderProgram","useProgram","_this","v","stringToProgram","f","uloc","getUniformLocation","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","bindAttribLocation","pUniform","psUniform","fcUniform","isBubbleUniform","bubbleSizeAbsUniform","bubbleSizeAreaUniform","uSamplerUniform","skipTranslationUniform","isCircleUniform","isInverted","push","getProgramInfoLog","handleErrors","join","str","shader","VERTEX_SHADER","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","destroy","deleteProgram","fillColorUniform","getProgram","pointSizeUniform","perspectiveUniform","reset","uniform1i","setBubbleUniforms","zCalcMin","zCalcMax","pixelRatio","zMin","zMax","is","pxSizes","getPxExtremes","displayNegative","zThreshold","sizeBy","sizeByAbsoluteValue","setUniform","minPxSize","maxPxSize","setColor","color","uniform4f","setDrawAsCircle","flag","setInverted","setPMatrix","m","uniformMatrix4fv","setPointSize","p","uniform1f","setSkipTranslation","setTexture","texture","name","val","u","WGLVertexBuffer","dataComponents","buffer","iterator","preAllocated","vertAttribute","components","allocate","size","Float32Array","vertexAttribPointer","FLOAT","build","dataIn","attrib","farray","deleteBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","getAttribLocation","enableVertexAttribArray","b","render","from","to","drawMode","drawArrays","parse","doc","win","isNumber","isObject","merge","objectEach","WGLRenderer_pick","asBar","asCircle","contexts","WGLRenderer","postRenderCallback","isInited","markerData","textureHandles","settings","pointSize","lineWidth","fillColor","useAlpha","usePreallocated","useGPUTranslations","debug","timeRendering","timeSeriesProcessing","timeSetup","timeBufferCopy","timeKDTree","showSkipSummary","orthoMatrix","seriesPointCount","isStacked","xData","s","boosted","stacking","getPixelRatio","devicePixelRatio","setOptions","allocateBuffer","vbuffer","allocateBufferForSingleSeries","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","pushSeriesData","inst","minVal","scolor","z","low","zoneColors","isRange","pointArrayMap","sorted","rawData","xExtremes","getExtremes","xMin","minPointOffset","xMax","yExtremes","yMin","yMax","yData","zData","useRaw","connectNulls","sdata","closestLeft","closestRight","chartDestroyed","drawAsBar","zoneAxis","zones","lastX","lastY","skipped","hadPoints","i","px","nx","nextInside","prevInside","pcolor","isXInside","isYInside","firstPoint","zoneDefColor","gapSize","vlen","boostData","gapUnit","closestPointRange","zone","zoneColor","rgba","value","pointAttribs","fill","closestPointRangePx","pushColor","colorData","vertice","checkTreshold","skipTranslation","closeSegment","segments","beginSegment","pushRect","w","h","node","levelDynamic","sort","point","swidth","pointAttr","plotY","isNaN","shapeArgs","x_1","_c","y_1","_d","_e","styledMode","colorAttribs","stroke","state_1","_loop_1","zoneColor_1","pointOptions","slice","stackY","some","last","toPixels","hasMarkers","abs","logarithmic","step","console","log","pushSupplementPoint","atStart","concat","pushSeries","markerTo","time","markerFrom","marker","enabled","showMarkers","timeEnd","flush","setXAxis","transA","minPixelPadding","pointRange","horiz","reversed","setYAxis","setThreshold","has","translation","renderChart","chartWidth","chartHeight","canvas","viewport","isMS","si","sindex","cbuffer","shapeOptions","hasThreshold","yBottom","getThreshold","isRadial","radius","shapeTexture","symbol","circle","isReady","bindTexture","TEXTURE_2D","handle","markerGroup","plotGroup","seriesGroup","addClass","getStyle","colorByPoint","colors","fillOpacity","setOpacity","boostBlending","blendFunc","SRC_ALPHA","ONE","blendEquation","FUNC_ADD","DST_COLOR","ZERO","FUNC_MIN","blendFuncSeparate","ONE_MINUS_SRC_ALPHA","Array","disableVertexAttribArray","renderer","forExport","setTimeout","setSize","init","noFlush","getContext","enable","BLEND","disable","DEPTH_TEST","depthFunc","LESS","createTexture","fn","props","createElement","ctx","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","strokeStyle","fillStyle","activeTexture","TEXTURE0","texImage2D","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","e","beginPath","arc","PI","fillRect","moveTo","lineTo","deleteTexture","BoostSeries_doc","getOptions","noop","BoostSeries_win","destroyObjectProperties","BoostSeries_error","fireEvent","extend","isArray","BoostSeries_isNumber","BoostSeries_pick","defined","wrap","allocateIfNotSeriesBoosting","BoostSeries_isChartSeriesBoosting","createAndAttachRenderer","ChartClass","constructor","targetGroup","group","foSupported","SVGForeignObjectElement","hasClickHandler","Boolean","events","click","renderTarget","image","add","attr","href","copy","resize","toDataURL","targetFo","targetCtx","element","appendChild","drawImage","css","pointerEvents","mixedBlendMode","opacity","translate","clipRect","zIndex","g","box","BoostSeries_getBoostClipRect","clippedElement","clip","wgl","destroyGraphics","destroyElements","seriesProp","eachAsync","arr","finalFunc","chunkSize","noTimeout","proceed","requestAnimationFrame","hasExtremes","checkX","dataLength","dataTable","modified","rowCount","colorAxis","getSeriesBoosting","forceCrop","renderIfNotSeriesBoosting","scatterProcessData","force","isDirty","setTickInterval","cropThreshold","old","_f","_g","_h","setColumns","getExtremesFromAll","processedData","processedXData","processedYData","xRangeNeeded","yRangeNeeded","cropped","xDataMax","xDataMin","yDataMax","yDataMin","iEnd","cropStart","BoostCanvas_color","BoostCanvas_doc","BoostCanvas_noop","BoostCanvas_addEvent","BoostCanvas_fireEvent","BoostCanvas_isNumber","BoostCanvas_merge","BoostCanvas_pick","BoostCanvas_wrap","destroyLoadingDiv","b64BlankPixel","areaCvsDrawPoint","clientX","lastPoint","bubbleCvsMarkerCircle","radii","columnCvsDrawPoint","rect","onChartCanvasToSVG","onChartClear","clearRect","seriesCanvasToSVG","BoostCanvas_isChartSeriesBoosting","seriesCvsLineTo","seriesGetContext","swapXY","c","style","BoostCanvas_getBoostClipRect","seriesRenderCanvas","activeBoostSettings","boostSettings","pointTaken","sampling","strokeBatch","cvsStrokeBatch","enableMouseTracking","translatedThreshold","doFill","loadingOptions","loading","requireSorting","compareX","findNearestPointBy","cvsDrawPoint","cvsLineTo","cvsMarker","cvsMarkerSquare","cvsMarkerCircle","graph","BoostCanvas_destroyGraphics","buildKDTree","labelStyle","backgroundColor","padding","borderRadius","clearTimeout","showLoading","lastClientX","wasNull","maxVal","minI","maxI","drawPoint","lineJoin","scroller","className","xDataFull","addKDPoint","plotX","Boost_BoostSeries","isNull","isNextInside","isPrevInside","NaN","round","loadingDiv","loadingShown","canvasToSVG","transition","parentNode","removeChild","loadingSpan","scatterCvsMarkerCircle","scatterCvsMarkerSquare","wrapHeatmapDrawPoints","compose","SeriesClass","seriesTypes","seriesProto","renderCanvas","AreaSeries_1","area","BubbleSeries_1","bubble","ColumnSeries_1","column","HeatmapSeries_1","heatmap","ScatterSeries_1","scatter","callbacks","areaProto","bubbleProto","columnProto","scatterProto","Extensions_BoostCanvas","G","initCanvasBoost","Chart","Series"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox