Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/modules/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/modules/stock.js.map

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/broken-axis\n * @requires highcharts\n *\n * (c) 2009-2024 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(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Axis\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Series\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"RendererRegistry\"], root[\"_Highcharts\"][\"SVGRenderer\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"Chart\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"_Highcharts\"][\"StackItem\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/stock\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"Axis\"],amd1[\"Point\"],amd1[\"Series\"],amd1[\"Color\"],amd1[\"SeriesRegistry\"],amd1[\"RendererRegistry\"],amd1[\"SVGRenderer\"],amd1[\"SVGElement\"],amd1[\"Chart\"],amd1[\"Templating\"],amd1[\"Series\"],[\"types\"],[\"column\"],amd1[\"StackItem\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/stock\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Axis\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Series\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"RendererRegistry\"], root[\"_Highcharts\"][\"SVGRenderer\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"Chart\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"_Highcharts\"][\"StackItem\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Axis\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"Series\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"RendererRegistry\"], root[\"Highcharts\"][\"SVGRenderer\"], root[\"Highcharts\"][\"SVGElement\"], root[\"Highcharts\"][\"Chart\"], root[\"Highcharts\"][\"Templating\"], root[\"Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"Highcharts\"][\"StackItem\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__532__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__820__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__608__, __WEBPACK_EXTERNAL_MODULE__540__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__960__, __WEBPACK_EXTERNAL_MODULE__984__, __WEBPACK_EXTERNAL_MODULE__448__, __WEBPACK_EXTERNAL_MODULE__184__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 532:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__532__;\n\n/***/ }),\n\n/***/ 960:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__960__;\n\n/***/ }),\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 608:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__608__;\n\n/***/ }),\n\n/***/ 28:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 540:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__540__;\n\n/***/ }),\n\n/***/ 448:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__448__;\n\n/***/ }),\n\n/***/ 820:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__820__;\n\n/***/ }),\n\n/***/ 512:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 184:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__184__;\n\n/***/ }),\n\n/***/ 984:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__984__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((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(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (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(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (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(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (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\": () => (/* binding */ stock_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// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Axis\"],\"commonjs\":[\"highcharts\",\"Axis\"],\"commonjs2\":[\"highcharts\",\"Axis\"],\"root\":[\"Highcharts\",\"Axis\"]}\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_ = __webpack_require__(532);\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default = /*#__PURE__*/__webpack_require__.n(highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Point\"],\"commonjs\":[\"highcharts\",\"Point\"],\"commonjs2\":[\"highcharts\",\"Point\"],\"root\":[\"Highcharts\",\"Point\"]}\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_ = __webpack_require__(260);\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default = /*#__PURE__*/__webpack_require__.n(highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Series\"],\"commonjs\":[\"highcharts\",\"Series\"],\"commonjs2\":[\"highcharts\",\"Series\"],\"root\":[\"Highcharts\",\"Series\"]}\nvar highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_ = __webpack_require__(820);\nvar highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default = /*#__PURE__*/__webpack_require__.n(highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_);\n;// ./code/es-modules/Series/DataModifyComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { tooltipFormatter: pointTooltipFormatter } = (highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default()).prototype;\n\n\nconst { addEvent, arrayMax, arrayMin, correctFloat, defined, isArray, isNumber, isString, pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar DataModifyComposition;\n(function (DataModifyComposition) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends the series, axis and point classes with\n     * compare and cumulative support.\n     *\n     * @private\n     *\n     * @param SeriesClass\n     * Series class to use.\n     *\n     * @param AxisClass\n     * Axis class to extend.\n     *\n     * @param PointClass\n     * Point class to use.\n     */\n    function compose(SeriesClass, AxisClass, PointClass) {\n        const axisProto = AxisClass.prototype, pointProto = PointClass.prototype, seriesProto = SeriesClass.prototype;\n        if (!seriesProto.setCompare) {\n            seriesProto.setCompare = seriesSetCompare;\n            seriesProto.setCumulative = seriesSetCumulative;\n            addEvent(SeriesClass, 'afterInit', afterInit);\n            addEvent(SeriesClass, 'afterGetExtremes', afterGetExtremes);\n            addEvent(SeriesClass, 'afterProcessData', afterProcessData);\n        }\n        if (!axisProto.setCompare) {\n            axisProto.setCompare = axisSetCompare;\n            axisProto.setModifier = setModifier;\n            axisProto.setCumulative = axisSetCumulative;\n            pointProto.tooltipFormatter = tooltipFormatter;\n        }\n        return SeriesClass;\n    }\n    DataModifyComposition.compose = compose;\n    /* ********************************************************************** *\n     *  Start shared compare and cumulative logic                             *\n     * ********************************************************************** */\n    /**\n     * Shared code for the axis.setCompare() and the axis.setCumulative()\n     * methods. Inits the 'compare' or the 'cumulative' mode.\n     * @private\n     */\n    function setModifier(mode, modeState, redraw) {\n        if (!this.isXAxis) {\n            this.series.forEach(function (series) {\n                if (mode === 'compare' &&\n                    typeof modeState !== 'boolean') {\n                    series.setCompare(modeState, false);\n                }\n                else if (mode === 'cumulative' &&\n                    !isString(modeState)) {\n                    series.setCumulative(modeState, false);\n                }\n            });\n            if (pick(redraw, true)) {\n                this.chart.redraw();\n            }\n        }\n    }\n    /**\n     * Extend the tooltip formatter by adding support for the point.change\n     * variable as well as the changeDecimals option.\n     *\n     * @ignore\n     * @function Highcharts.Point#tooltipFormatter\n     *\n     * @param {string} pointFormat\n     */\n    function tooltipFormatter(pointFormat) {\n        const point = this, { numberFormatter } = point.series.chart, replace = function (value) {\n            pointFormat = pointFormat.replace('{point.' + value + '}', (point[value] > 0 && value === 'change' ? '+' : '') +\n                numberFormatter(point[value], pick(point.series.tooltipOptions.changeDecimals, 2)));\n        };\n        if (defined(point.change)) {\n            replace('change');\n        }\n        if (defined(point.cumulativeSum)) {\n            replace('cumulativeSum');\n        }\n        return pointTooltipFormatter.apply(this, [pointFormat]);\n    }\n    /**\n     * Extend series.init by adding a methods to modify the y values used\n     * for plotting on the y axis. For compare mode, this method is called both\n     * from the axis when finding dataMin and dataMax,\n     * and from the series.translate method.\n     *\n     * @ignore\n     * @function Highcharts.Series#init\n     */\n    function afterInit() {\n        const compare = this.options.compare;\n        let dataModify;\n        if (compare === 'percent' ||\n            compare === 'value' ||\n            this.options.cumulative) {\n            dataModify = new Additions(this);\n            if (compare === 'percent' || compare === 'value') {\n                // Set comparison mode\n                dataModify.initCompare(compare);\n            }\n            else {\n                // Set Cumulative Sum mode\n                dataModify.initCumulative();\n            }\n        }\n        this.dataModify = dataModify;\n    }\n    /**\n     * Adjust the extremes (compare and cumulative modify the data).\n     * @private\n     */\n    function afterGetExtremes(e) {\n        const dataExtremes = e.dataExtremes, activeYData = dataExtremes.activeYData;\n        if (this.dataModify && dataExtremes) {\n            let extremes;\n            if (this.options.compare) {\n                extremes = [\n                    this.dataModify.modifyValue(dataExtremes.dataMin),\n                    this.dataModify.modifyValue(dataExtremes.dataMax)\n                ];\n            }\n            else if (this.options.cumulative &&\n                isArray(activeYData) &&\n                // If only one y visible, sum doesn't change\n                // so no need to change extremes\n                activeYData.length >= 2) {\n                extremes = Additions.getCumulativeExtremes(activeYData);\n            }\n            if (extremes) {\n                dataExtremes.dataMin = arrayMin(extremes);\n                dataExtremes.dataMax = arrayMax(extremes);\n            }\n        }\n    }\n    /* ********************************************************************** *\n     *  End shared compare and cumulative logic                               *\n     * ********************************************************************** */\n    /* ********************************************************************** *\n     *  Start value compare logic                                             *\n     * ********************************************************************** */\n    /**\n     * Highcharts Stock only. Set the\n     * [compare](https://api.highcharts.com/highstock/plotOptions.series.compare)\n     * mode of the series after render time.\n     * In most cases it is more useful running\n     * {@link Axis#setCompare} on the X axis to update all its series.\n     *\n     * @function Highcharts.Series#setCompare\n     *\n     * @param {string|null} [compare]\n     *        Can be one of `undefined` (default), `null`, `\"percent\"`\n     *        or `\"value\"`.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart or to wait for a later call to\n     *        {@link Chart#redraw}.\n     */\n    function seriesSetCompare(compare, redraw) {\n        // Survive to export, #5485 (and for options generally)\n        this.options.compare = this.userOptions.compare = compare;\n        // Fire series.init() that will set or delete series.dataModify\n        this.update({}, pick(redraw, true));\n        if (this.dataModify && (compare === 'value' || compare === 'percent')) {\n            this.dataModify.initCompare(compare);\n        }\n        else {\n            // When disabling, clear the points\n            this.points.forEach((point) => {\n                delete point.change;\n            });\n        }\n    }\n    /**\n     * Extend series.processData by finding the first y value in the plot area,\n     * used for comparing the following values\n     *\n     * @ignore\n     * @function Highcharts.Series#processData\n     */\n    function afterProcessData() {\n        const series = this, \n        // For series with more than one value (range, OHLC etc), compare\n        // against close or the pointValKey (#4922, #3112, #9854)\n        compareColumn = this.getColumn((series.pointArrayMap &&\n            (series.options.pointValKey || series.pointValKey)) || 'y', true);\n        if (series.xAxis && // Not pies\n            compareColumn.length &&\n            series.dataModify) {\n            const processedXData = series.getColumn('x', true), length = series.dataTable.rowCount, compareStart = series.options.compareStart === true ? 0 : 1;\n            // Find the first value for comparison\n            for (let i = 0; i < length - compareStart; i++) {\n                const compareValue = compareColumn[i];\n                if (isNumber(compareValue) &&\n                    compareValue !== 0 &&\n                    processedXData[i + compareStart] >= (series.xAxis.min || 0)) {\n                    series.dataModify.compareValue = compareValue;\n                    break;\n                }\n            }\n        }\n    }\n    /**\n     * Highcharts Stock only. Set the compare mode on all series\n     * belonging to a Y axis.\n     *\n     * @see [plotOptions.series.compare](https://api.highcharts.com/highstock/plotOptions.series.compare)\n     *\n     * @sample stock/members/axis-setcompare/\n     *         Set compare\n     *\n     * @function Highcharts.Axis#setCompare\n     *\n     * @param {string|null} [compare]\n     *        The compare mode. Can be one of `undefined` (default), `null`,\n     *        `\"value\"` or `\"percent\"`.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart or to wait for a later call to\n     *        {@link Chart#redraw}.\n     */\n    function axisSetCompare(compare, redraw) {\n        this.setModifier('compare', compare, redraw);\n    }\n    /* ********************************************************************** *\n     *  End value compare logic                                               *\n     * ********************************************************************** */\n    /* ********************************************************************** *\n     *  Start Cumulative Sum logic, author: Rafal Sebestjanski                *\n     * ********************************************************************** */\n    /**\n     * Highcharts Stock only. Set the\n     * [cumulative](https://api.highcharts.com/highstock/plotOptions.series.cumulative)\n     * mode of the series after render time.\n     * In most cases it is more useful running\n     * {@link Axis#setCumulative} on the Y axis to update all its series.\n     *\n     * @function Highcharts.Series#setCumulative\n     *\n     * @param {boolean} [cumulative=false]\n     *        Either enable or disable Cumulative Sum mode.\n     *        Can be one of `false` (default) or `true`.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart or to wait for a later call to\n     *        {@link Chart#redraw}.\n     */\n    function seriesSetCumulative(cumulative, redraw) {\n        // Set default value to false\n        cumulative = pick(cumulative, false);\n        // Survive to export, #5485 (and for options generally)\n        this.options.cumulative = this.userOptions.cumulative = cumulative;\n        // Fire series.init() that will set or delete series.dataModify\n        this.update({}, pick(redraw, true));\n        // If should, turn on the Cumulative Sum mode\n        if (this.dataModify) {\n            this.dataModify.initCumulative();\n        }\n        else {\n            // When disabling, clear the points\n            this.points.forEach((point) => {\n                delete point.cumulativeSum;\n            });\n        }\n    }\n    /**\n     * Highcharts Stock only. Set the cumulative mode on all series\n     * belonging to a Y axis.\n     *\n     * @see [plotOptions.series.cumulative](https://api.highcharts.com/highstock/plotOptions.series.cumulative)\n     *\n     * @sample stock/members/axis-setcumulative/\n     *         Set cumulative\n     *\n     * @function Highcharts.Axis#setCumulative\n     *\n     * @param {boolean} [cumulative]\n     *        Whether to disable or enable the cumulative mode.\n     *        Can be one of `undefined` (default, treated as `false`),\n     *        `false` or `true`.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart or to wait for a later call to\n     *        {@link Chart#redraw}.\n     */\n    function axisSetCumulative(cumulative, redraw) {\n        this.setModifier('cumulative', cumulative, redraw);\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    /**\n     * @private\n     */\n    class Additions {\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        /**\n         * @private\n         */\n        constructor(series) {\n            this.series = series;\n        }\n        /* *\n        *\n        *  Functions\n        *\n        * */\n        /**\n         * @private\n         */\n        modifyValue() {\n            return 0;\n        }\n        /**\n         * @ignore\n         * @function Highcharts.Series#getCumulativeExtremes\n         *\n         * @param {Array} [activeYData]\n         *        An array cointaining all the points' y values\n         *        in a visible range.\n         */\n        static getCumulativeExtremes(activeYData) {\n            let cumulativeDataMin = Infinity, cumulativeDataMax = -Infinity;\n            activeYData.reduce((prev, cur) => {\n                const sum = prev + cur;\n                cumulativeDataMin = Math.min(cumulativeDataMin, sum, prev);\n                cumulativeDataMax = Math.max(cumulativeDataMax, sum, prev);\n                return sum;\n            });\n            return [cumulativeDataMin, cumulativeDataMax];\n        }\n        /**\n         * @ignore\n         * @function Highcharts.Series#initCompare\n         *\n         * @param {string} [compare]\n         *        Can be one of `\"percent\"` or `\"value\"`.\n         */\n        initCompare(compare) {\n            // Set the modifyValue method\n            this.modifyValue = function (value, index) {\n                if (value === null) {\n                    value = 0;\n                }\n                const compareValue = this.compareValue;\n                if (typeof value !== 'undefined' &&\n                    typeof compareValue !== 'undefined') { // #2601, #5814\n                    // Get the modified value\n                    if (compare === 'value') {\n                        value -= compareValue;\n                        // Compare percent\n                    }\n                    else {\n                        const compareBase = this.series.options.compareBase;\n                        value = 100 * (value / compareValue) -\n                            (compareBase === 100 ? 0 : 100);\n                    }\n                    // Record for tooltip etc.\n                    if (typeof index !== 'undefined') {\n                        const point = this.series.points[index];\n                        if (point) {\n                            point.change = value;\n                        }\n                    }\n                    return value;\n                }\n                return 0;\n            };\n        }\n        /**\n         * @ignore\n         * @function Highcharts.Series#initCumulative\n         */\n        initCumulative() {\n            // Set the modifyValue method\n            this.modifyValue = function (value, index) {\n                if (value === null) {\n                    value = 0;\n                }\n                if (value !== void 0 && index !== void 0) {\n                    const prevPoint = index > 0 ?\n                        this.series.points[index - 1] : null;\n                    // Get the modified value\n                    if (prevPoint && prevPoint.cumulativeSum) {\n                        value = correctFloat(prevPoint.cumulativeSum + value);\n                    }\n                    // Record for tooltip etc.\n                    const point = this.series.points[index];\n                    const cumulativeStart = point.series.options.cumulativeStart, withinRange = point.x <= this.series.xAxis.max &&\n                        point.x >= this.series.xAxis.min;\n                    if (point) {\n                        if (!cumulativeStart || withinRange) {\n                            point.cumulativeSum = value;\n                        }\n                        else {\n                            point.cumulativeSum = void 0;\n                        }\n                    }\n                    return value;\n                }\n                return 0;\n            };\n        }\n    }\n    DataModifyComposition.Additions = Additions;\n})(DataModifyComposition || (DataModifyComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Series_DataModifyComposition = (DataModifyComposition);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Compare the values of the series against the first non-null, non-\n * zero value in the visible range. The y axis will show percentage\n * or absolute change depending on whether `compare` is set to `\"percent\"`\n * or `\"value\"`. When this is applied to multiple series, it allows\n * comparing the development of the series against each other. Adds\n * a `change` field to every point object.\n *\n * @see [compareBase](#plotOptions.series.compareBase)\n * @see [Axis.setCompare()](/class-reference/Highcharts.Axis#setCompare)\n * @see [Series.setCompare()](/class-reference/Highcharts.Series#setCompare)\n *\n * @sample {highstock} stock/plotoptions/series-compare-percent/\n *         Percent\n * @sample {highstock} stock/plotoptions/series-compare-value/\n *         Value\n *\n * @type      {string}\n * @since     1.0.1\n * @product   highstock\n * @validvalue [\"percent\", \"value\"]\n * @apioption plotOptions.series.compare\n */\n/**\n * Defines if comparison should start from the first point within the visible\n * range or should start from the last point **before** the range.\n *\n * In other words, this flag determines if first point within the visible range\n * will have 0% (`compareStart=true`) or should have been already calculated\n * according to the previous point (`compareStart=false`).\n *\n * @sample {highstock} stock/plotoptions/series-comparestart/\n *         Calculate compare within visible range\n *\n * @type      {boolean}\n * @default   false\n * @since     6.0.0\n * @product   highstock\n * @apioption plotOptions.series.compareStart\n */\n/**\n * When [compare](#plotOptions.series.compare) is `percent`, this option\n * dictates whether to use 0 or 100 as the base of comparison.\n *\n * @sample {highstock} stock/plotoptions/series-comparebase/\n *         Compare base is 100\n *\n * @type       {number}\n * @default    0\n * @since      5.0.6\n * @product    highstock\n * @validvalue [0, 100]\n * @apioption  plotOptions.series.compareBase\n */\n/**\n * Cumulative Sum feature replaces points' values with the following formula:\n * `sum of all previous points' values + current point's value`.\n * Works only for points in a visible range.\n * Adds the `cumulativeSum` field to each point object that can be accessed\n * e.g. in the [tooltip.pointFormat](https://api.highcharts.com/highstock/tooltip.pointFormat).\n *\n * With `dataGrouping` enabled, default grouping approximation is set to `sum`.\n *\n * @see [Axis.setCumulative()](/class-reference/Highcharts.Axis#setCumulative)\n * @see [Series.setCumulative()](/class-reference/Highcharts.Series#setCumulative)\n *\n * @sample {highstock} stock/plotoptions/series-cumulative-sum/\n *         Cumulative Sum\n *\n * @type      {boolean}\n * @default   false\n * @since 9.3.0\n * @product   highstock\n * @apioption plotOptions.series.cumulative\n */\n/**\n * Defines if cumulation should start from the first point within the visible\n * range or should start from the last point **before** the range.\n *\n * In other words, this flag determines if first point within the visible range\n * will start at 0 (`cumulativeStart=true`) or should have been already calculated\n * according to the previous point (`cumulativeStart=false`).\n *\n * @sample {highstock} stock/plotoptions/series-cumulativestart/\n *         Cumulative Start\n *\n * @type      {boolean}\n * @default   false\n * @since 11.4.2\n * @product   highstock\n * @apioption plotOptions.series.cumulativeStart\n */\n''; // Keeps doclets above in transpiled file\n\n;// ./code/es-modules/Stock/Navigator/ChartNavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ChartNavigatorComposition_addEvent, merge, pick: ChartNavigatorComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst composedMembers = [];\n/* *\n *\n *  Variables\n *\n * */\nlet NavigatorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass, NavigatorClass) {\n    if (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().pushUnique(composedMembers, ChartClass)) {\n        const chartProto = ChartClass.prototype;\n        NavigatorConstructor = NavigatorClass;\n        chartProto.callbacks.push(onChartCallback);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeRender', onChartBeforeRender);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeShowResetZoom', onChartBeforeShowResetZoom);\n        ChartNavigatorComposition_addEvent(ChartClass, 'update', onChartUpdate);\n    }\n}\n/**\n * Handle adding new series.\n * @private\n */\nfunction onChartAfterAddSeries() {\n    if (this.navigator) {\n        // Recompute which series should be shown in navigator, and add them\n        this.navigator.setBaseSeries(null, false);\n    }\n}\n/**\n * For stock charts, extend the Chart.setChartSize method so that we can set the\n * final top position of the navigator once the height of the chart, including\n * the legend, is determined. #367. We can't use Chart.getMargins, because\n * labels offsets are not calculated yet.\n * @private\n */\nfunction onChartAfterSetChartSize() {\n    const legend = this.legend, navigator = this.navigator;\n    let legendOptions, xAxis, yAxis;\n    if (navigator) {\n        legendOptions = legend && legend.options;\n        xAxis = navigator.xAxis;\n        yAxis = navigator.yAxis;\n        const { scrollbarHeight, scrollButtonSize } = navigator;\n        // Compute the top position\n        if (this.inverted) {\n            navigator.left = navigator.opposite ?\n                this.chartWidth - scrollbarHeight -\n                    navigator.height :\n                this.spacing[3] + scrollbarHeight;\n            navigator.top = this.plotTop + scrollButtonSize;\n        }\n        else {\n            navigator.left = ChartNavigatorComposition_pick(xAxis.left, this.plotLeft + scrollButtonSize);\n            navigator.top = navigator.navigatorOptions.top ||\n                this.chartHeight -\n                    navigator.height -\n                    scrollbarHeight -\n                    (this.scrollbar?.options.margin || 0) -\n                    this.spacing[2] -\n                    (this.rangeSelector && this.extraBottomMargin ?\n                        this.rangeSelector.getHeight() :\n                        0) -\n                    ((legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.layout !== 'proximate' && // #13392\n                        legendOptions.enabled &&\n                        !legendOptions.floating) ?\n                        legend.legendHeight +\n                            ChartNavigatorComposition_pick(legendOptions.margin, 10) :\n                        0) -\n                    (this.titleOffset ? this.titleOffset[2] : 0);\n        }\n        if (xAxis && yAxis) { // False if navigator is disabled (#904)\n            if (this.inverted) {\n                xAxis.options.left = yAxis.options.left = navigator.left;\n            }\n            else {\n                xAxis.options.top = yAxis.options.top = navigator.top;\n            }\n            xAxis.setAxisSize();\n            yAxis.setAxisSize();\n        }\n    }\n}\n/**\n * Initialize navigator, if no scrolling exists yet.\n * @private\n */\nfunction onChartAfterUpdate(event) {\n    if (!this.navigator && !this.scroller &&\n        (this.options.navigator.enabled ||\n            this.options.scrollbar.enabled)) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n        if (ChartNavigatorComposition_pick(event.redraw, true)) {\n            this.redraw(event.animation); // #7067\n        }\n    }\n}\n/**\n * Initialize navigator for stock charts\n * @private\n */\nfunction onChartBeforeRender() {\n    const options = this.options;\n    if (options.navigator.enabled ||\n        options.scrollbar.enabled) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n    }\n}\n/**\n * For Stock charts. For x only zooming, do not to create the zoom button\n * because X axis zooming is already allowed by the Navigator and Range\n * selector. (#9285)\n * @private\n */\nfunction onChartBeforeShowResetZoom() {\n    const chartOptions = this.options, navigator = chartOptions.navigator, rangeSelector = chartOptions.rangeSelector;\n    if (((navigator && navigator.enabled) ||\n        (rangeSelector && rangeSelector.enabled)) &&\n        ((!isTouchDevice &&\n            this.zooming.type === 'x') ||\n            (isTouchDevice && this.zooming.pinchType === 'x'))) {\n        return false;\n    }\n}\n/**\n * @private\n */\nfunction onChartCallback(chart) {\n    const navigator = chart.navigator;\n    // Initialize the navigator\n    if (navigator && chart.xAxis[0]) {\n        const extremes = chart.xAxis[0].getExtremes();\n        navigator.render(extremes.min, extremes.max);\n    }\n}\n/**\n * Merge options, if no scrolling exists yet\n * @private\n */\nfunction onChartUpdate(e) {\n    const navigatorOptions = (e.options.navigator || {}), scrollbarOptions = (e.options.scrollbar || {});\n    if (!this.navigator && !this.scroller &&\n        (navigatorOptions.enabled || scrollbarOptions.enabled)) {\n        merge(true, this.options.navigator, navigatorOptions);\n        merge(true, this.options.scrollbar, scrollbarOptions);\n        delete e.options.navigator;\n        delete e.options.scrollbar;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst ChartNavigatorComposition = {\n    compose\n};\n/* harmony default export */ const Navigator_ChartNavigatorComposition = (ChartNavigatorComposition);\n\n;// ./code/es-modules/Core/Axis/NavigatorAxisComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: NavigatorAxisComposition_addEvent, correctFloat: NavigatorAxisComposition_correctFloat, defined: NavigatorAxisComposition_defined, isNumber: NavigatorAxisComposition_isNumber, pick: NavigatorAxisComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onAxisInit() {\n    const axis = this;\n    if (!axis.navigatorAxis) {\n        axis.navigatorAxis = new NavigatorAxisAdditions(axis);\n    }\n}\n/**\n * For Stock charts, override selection zooming with some special features\n * because X axis zooming is already allowed by the Navigator and Range\n * selector.\n * @private\n */\nfunction onAxisSetExtremes(e) {\n    const axis = this, chart = axis.chart, chartOptions = chart.options, navigator = chartOptions.navigator, navigatorAxis = axis.navigatorAxis, pinchType = chart.zooming.pinchType, rangeSelector = chartOptions.rangeSelector, zoomType = chart.zooming.type;\n    let zoomed;\n    if (axis.isXAxis &&\n        (navigator?.enabled || rangeSelector?.enabled)) {\n        // For y only zooming, ignore the X axis completely\n        if (zoomType === 'y' && e.trigger === 'zoom') {\n            zoomed = false;\n            // For xy zooming, record the state of the zoom before zoom selection,\n            // then when the reset button is pressed, revert to this state. This\n            // should apply only if the chart is initialized with a range (#6612),\n            // otherwise zoom all the way out.\n        }\n        else if (((e.trigger === 'zoom' && zoomType === 'xy') ||\n            (NavigatorAxisComposition_isTouchDevice && pinchType === 'xy')) &&\n            axis.options.range) {\n            const previousZoom = navigatorAxis.previousZoom;\n            // Minimum defined, zooming in\n            if (NavigatorAxisComposition_defined(e.min)) {\n                navigatorAxis.previousZoom = [axis.min, axis.max];\n                // Minimum undefined, resetting zoom\n            }\n            else if (previousZoom) {\n                e.min = previousZoom[0];\n                e.max = previousZoom[1];\n                navigatorAxis.previousZoom = void 0;\n            }\n        }\n    }\n    if (typeof zoomed !== 'undefined') {\n        e.preventDefault();\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n */\nclass NavigatorAxisAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(AxisClass) {\n        if (!AxisClass.keepProps.includes('navigatorAxis')) {\n            AxisClass.keepProps.push('navigatorAxis');\n            NavigatorAxisComposition_addEvent(AxisClass, 'init', onAxisInit);\n            NavigatorAxisComposition_addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);\n        }\n    }\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    constructor(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    destroy() {\n        this.axis = void 0;\n    }\n    /**\n     * Add logic to normalize the zoomed range in order to preserve the pressed\n     * state of range selector buttons\n     *\n     * @private\n     * @function Highcharts.Axis#toFixedRange\n     */\n    toFixedRange(pxMin, pxMax, fixedMin, fixedMax) {\n        const axis = this.axis, halfPointRange = (axis.pointRange || 0) / 2;\n        let newMin = NavigatorAxisComposition_pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)), newMax = NavigatorAxisComposition_pick(fixedMax, axis.translate(pxMax, true, !axis.horiz));\n        // Add/remove half point range to/from the extremes (#1172)\n        if (!NavigatorAxisComposition_defined(fixedMin)) {\n            newMin = NavigatorAxisComposition_correctFloat(newMin + halfPointRange);\n        }\n        if (!NavigatorAxisComposition_defined(fixedMax)) {\n            newMax = NavigatorAxisComposition_correctFloat(newMax - halfPointRange);\n        }\n        if (!NavigatorAxisComposition_isNumber(newMin) || !NavigatorAxisComposition_isNumber(newMax)) { // #1195, #7411\n            newMin = newMax = void 0;\n        }\n        return {\n            min: newMin,\n            max: newMax\n        };\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const NavigatorAxisComposition = (NavigatorAxisAdditions);\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// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SeriesRegistry\"],\"commonjs\":[\"highcharts\",\"SeriesRegistry\"],\"commonjs2\":[\"highcharts\",\"SeriesRegistry\"],\"root\":[\"Highcharts\",\"SeriesRegistry\"]}\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_ = __webpack_require__(512);\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_);\n;// ./code/es-modules/Stock/Navigator/NavigatorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { seriesTypes } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The navigator is a small series below the main series, displaying\n * a view of the entire data set. It provides tools to zoom in and\n * out on parts of the data as well as panning across the dataset.\n *\n * @product      highstock gantt\n * @optionparent navigator\n */\nconst NavigatorDefaults = {\n    /**\n     * Whether the navigator and scrollbar should adapt to updated data\n     * in the base X axis. When loading data async, as in the demo below,\n     * this should be `false`. Otherwise new data will trigger navigator\n     * redraw, which will cause unwanted looping. In the demo below, the\n     * data in the navigator is set only once. On navigating, only the main\n     * chart content is updated.\n     *\n     * @sample {highstock} stock/demo/lazy-loading/\n     *         Set to false with async data loading\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.adaptToUpdatedData\n     */\n    /**\n     * An integer identifying the index to use for the base series, or a\n     * string representing the id of the series.\n     *\n     * **Note**: As of Highcharts 5.0, this is now a deprecated option.\n     * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).\n     *\n     * @see [series.showInNavigator](#plotOptions.series.showInNavigator)\n     *\n     * @deprecated\n     * @type      {number|string}\n     * @default   0\n     * @apioption navigator.baseSeries\n     */\n    /**\n     * Enable or disable the navigator.\n     *\n     * @sample {highstock} stock/navigator/enabled/\n     *         Disable the navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.enabled\n     */\n    /**\n     * When the chart is inverted, whether to draw the navigator on the\n     * opposite side.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     5.0.8\n     * @apioption navigator.opposite\n     */\n    /**\n     * The height of the navigator.\n     *\n     * @sample {highstock} stock/navigator/height/\n     *         A higher navigator\n     */\n    height: 40,\n    /**\n     * The distance from the nearest element, the X axis or X axis labels.\n     *\n     * @sample {highstock} stock/navigator/margin/\n     *         A margin of 2 draws the navigator closer to the X axis labels\n     */\n    margin: 25,\n    /**\n     * Whether the mask should be inside the range marking the zoomed\n     * range, or outside. In Highcharts Stock 1.x it was always `false`.\n     *\n     * @sample {highstock} stock/demo/maskinside-false/\n     *         False, mask outside\n     *\n     * @since   2.0\n     */\n    maskInside: true,\n    /**\n     * Options for the handles for dragging the zoomed area.\n     *\n     * @sample {highstock} stock/navigator/handles/\n     *         Colored handles\n     */\n    handles: {\n        /**\n         * Width for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        width: 7,\n        /**\n         * Border radius of the handles.\n         *\n         * @sample {highstock} stock/navigator/handles-border-radius/\n         *      Border radius on the navigator handles.\n         *\n         * @since 11.4.2\n         */\n        borderRadius: 0,\n        /**\n         * Height for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        height: 15,\n        /**\n         * Array to define shapes of handles. 0-index for left, 1-index for\n         * right.\n         *\n         * Additionally, the URL to a graphic can be given on this form:\n         * `url(graphic.png)`. Note that for the image to be applied to\n         * exported charts, its URL needs to be accessible by the export\n         * server.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n         * used by its method name, as shown in the demo.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @type    {Array<string>}\n         * @default [\"navigator-handle\", \"navigator-handle\"]\n         * @since   6.0.0\n         */\n        symbols: ['navigator-handle', 'navigator-handle'],\n        /**\n         * Allows to enable/disable handles.\n         *\n         * @since   6.0.0\n         */\n        enabled: true,\n        /**\n         * The width for the handle border and the stripes inside.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since     6.0.0\n         * @apioption navigator.handles.lineWidth\n         */\n        lineWidth: 1,\n        /**\n         * The fill for the handle.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        backgroundColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n        /**\n         * The stroke for the handle border and the stripes inside.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: \"#999999\" /* Palette.neutralColor40 */\n    },\n    /**\n     * The color of the mask covering the areas of the navigator series\n     * that are currently not visible in the main series. The default\n     * color is bluish with an opacity of 0.3 to see the series below.\n     *\n     * @see In styled mode, the mask is styled with the\n     *      `.highcharts-navigator-mask` and\n     *      `.highcharts-navigator-mask-inside` classes.\n     *\n     * @sample {highstock} stock/navigator/maskfill/\n     *         Blue, semi transparent mask\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default rgba(102,133,194,0.3)\n     */\n    maskFill: color(\"#667aff\" /* Palette.highlightColor60 */).setOpacity(0.3).get(),\n    /**\n     * The color of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #cccccc\n     */\n    outlineColor: \"#999999\" /* Palette.neutralColor40 */,\n    /**\n     * The width of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @see In styled mode, the outline stroke width is set with the\n     *      `.highcharts-navigator-outline` class.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {number}\n     */\n    outlineWidth: 1,\n    /**\n     * Options for the navigator series. Available options are the same\n     * as any series, documented at [plotOptions](#plotOptions.series)\n     * and [series](#series).\n     *\n     * Unless data is explicitly defined on navigator.series, the data\n     * is borrowed from the first series in the chart.\n     *\n     * Default series options for the navigator series are:\n     * ```js\n     * series: {\n     *     type: 'areaspline',\n     *     fillOpacity: 0.05,\n     *     dataGrouping: {\n     *         smoothed: true\n     *     },\n     *     lineWidth: 1,\n     *     marker: {\n     *         enabled: false\n     *     }\n     * }\n     * ```\n     *\n     * @see In styled mode, the navigator series is styled with the\n     *      `.highcharts-navigator-series` class.\n     *\n     * @sample {highstock} stock/navigator/series-data/\n     *         Using a separate data set for the navigator\n     * @sample {highstock} stock/navigator/series/\n     *         A green navigator series\n     *\n     * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}\n     */\n    series: {\n        /**\n         * The type of the navigator series.\n         *\n         * Heads up:\n         * In column-type navigator, zooming is limited to at least one\n         * point with its `pointRange`.\n         *\n         * @sample {highstock} stock/navigator/column/\n         *         Column type navigator\n         *\n         * @type    {string}\n         * @default {highstock} `areaspline` if defined, otherwise `line`\n         * @default {gantt} gantt\n         */\n        type: (typeof seriesTypes.areaspline === 'undefined' ?\n            'line' :\n            'areaspline'),\n        /**\n         * The fill opacity of the navigator series.\n         */\n        fillOpacity: 0.05,\n        /**\n         * The pixel line width of the navigator series.\n         */\n        lineWidth: 1,\n        /**\n         * @ignore-option\n         */\n        compare: null,\n        /**\n         * @ignore-option\n         */\n        sonification: {\n            enabled: false\n        },\n        /**\n         * Unless data is explicitly defined, the data is borrowed from the\n         * first series in the chart.\n         *\n         * @type      {Array<number|Array<number|string|null>|object|null>}\n         * @product   highstock\n         * @apioption navigator.series.data\n         */\n        /**\n         * Data grouping options for the navigator series.\n         *\n         * @extends plotOptions.series.dataGrouping\n         */\n        dataGrouping: {\n            approximation: 'average',\n            enabled: true,\n            groupPixelWidth: 2,\n            // Replace smoothed property by anchors, #12455.\n            firstAnchor: 'firstPoint',\n            anchor: 'middle',\n            lastAnchor: 'lastPoint',\n            // Day and week differs from plotOptions.series.dataGrouping\n            units: [\n                ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],\n                ['second', [1, 2, 5, 10, 15, 30]],\n                ['minute', [1, 2, 5, 10, 15, 30]],\n                ['hour', [1, 2, 3, 4, 6, 8, 12]],\n                ['day', [1, 2, 3, 4]],\n                ['week', [1, 2, 3]],\n                ['month', [1, 3, 6]],\n                ['year', null]\n            ]\n        },\n        /**\n         * Data label options for the navigator series. Data labels are\n         * disabled by default on the navigator series.\n         *\n         * @extends plotOptions.series.dataLabels\n         */\n        dataLabels: {\n            enabled: false,\n            zIndex: 2 // #1839\n        },\n        id: 'highcharts-navigator-series',\n        className: 'highcharts-navigator-series',\n        /**\n         * Sets the fill color of the navigator series.\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption navigator.series.color\n         */\n        /**\n         * Line color for the navigator series. Allows setting the color\n         * while disallowing the default candlestick setting.\n         *\n         * @type {Highcharts.ColorString|null}\n         */\n        lineColor: null, // #4602\n        marker: {\n            enabled: false\n        },\n        /**\n         * Since Highcharts Stock v8, default value is the same as default\n         * `pointRange` defined for a specific type (e.g. `null` for\n         * column type).\n         *\n         * In Highcharts Stock version < 8, defaults to 0.\n         *\n         * @extends plotOptions.series.pointRange\n         * @type {number|null}\n         * @apioption navigator.series.pointRange\n         */\n        /**\n         * The threshold option. Setting it to 0 will make the default\n         * navigator area series draw its area from the 0 value and up.\n         *\n         * @type {number|null}\n         */\n        threshold: null\n    },\n    /**\n     * Enable or disable navigator sticking to right, while adding new\n     * points. If `undefined`, the navigator sticks to the axis maximum only\n     * if it was already at the maximum prior to adding points.\n     *\n     * @type      {boolean}\n     * @default   undefined\n     * @since 10.2.1\n     * @sample {highstock} stock/navigator/sticktomax-false/\n     * stickToMax set to false\n     * @apioption navigator.stickToMax\n     */\n    /**\n     * Options for the navigator X axis. Default series options for the\n     * navigator xAxis are:\n     * ```js\n     * xAxis: {\n     *     tickWidth: 0,\n     *     lineWidth: 0,\n     *     gridLineWidth: 1,\n     *     tickPixelInterval: 200,\n     *     labels: {\n     *            align: 'left',\n     *         style: {\n     *             color: '#888'\n     *         },\n     *         x: 3,\n     *         y: -4\n     *     }\n     * }\n     * ```\n     *\n     * @extends   xAxis\n     * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,\n     *            showEmpty, maxRange\n     */\n    xAxis: {\n        /**\n         * Additional range on the right side of the xAxis. Works similar to\n         * `xAxis.maxPadding`, but the value is set in terms of axis values,\n         * percentage or pixels.\n         *\n         * If it's a number, it is interpreted as axis values, which in a\n         * datetime axis equals milliseconds.\n         *\n         * If it's a percentage string, is interpreted as percentages of the\n         * axis length. An overscroll of 50% will make a 100px axis 50px longer.\n         *\n         * If it's a pixel string, it is interpreted as a fixed pixel value, but\n         * limited to 90% of the axis length.\n         *\n         * If it's undefined, the value is inherited from `xAxis.overscroll`.\n         *\n         * Can be set for both, main xAxis and navigator's xAxis.\n         *\n         * @type    {number | string | undefined}\n         * @since   6.0.0\n         * @apioption navigator.xAxis.overscroll\n         */\n        className: 'highcharts-navigator-xaxis',\n        tickLength: 0,\n        lineWidth: 0,\n        gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n        id: 'navigator-x-axis',\n        gridLineWidth: 1,\n        tickPixelInterval: 200,\n        labels: {\n            align: 'left',\n            /**\n             * @type {Highcharts.CSSObject}\n             */\n            style: {\n                /** @ignore */\n                color: \"#000000\" /* Palette.neutralColor100 */,\n                /** @ignore */\n                fontSize: '0.7em',\n                /** @ignore */\n                opacity: 0.6,\n                /** @ignore */\n                textOutline: '2px contrast'\n            },\n            x: 3,\n            y: -4\n        },\n        crosshair: false\n    },\n    /**\n     * Options for the navigator Y axis. Default series options for the\n     * navigator yAxis are:\n     * ```js\n     * yAxis: {\n     *     gridLineWidth: 0,\n     *     startOnTick: false,\n     *     endOnTick: false,\n     *     minPadding: 0.1,\n     *     maxPadding: 0.1,\n     *     labels: {\n     *         enabled: false\n     *     },\n     *     title: {\n     *         text: null\n     *     },\n     *     tickWidth: 0\n     * }\n     * ```\n     *\n     * @extends   yAxis\n     * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,\n     *            showEmpty, scrollbar, top, units, maxRange, minLength,\n     *            maxLength, resize\n     */\n    yAxis: {\n        className: 'highcharts-navigator-yaxis',\n        gridLineWidth: 0,\n        startOnTick: false,\n        endOnTick: false,\n        minPadding: 0.1,\n        id: 'navigator-y-axis',\n        maxPadding: 0.1,\n        labels: {\n            enabled: false\n        },\n        crosshair: false,\n        title: {\n            text: null\n        },\n        tickLength: 0,\n        tickWidth: 0\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Navigator_NavigatorDefaults = (NavigatorDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Maximum range which can be set using the navigator's handles.\n * Opposite of [xAxis.minRange](#xAxis.minRange).\n *\n * @sample {highstock} stock/navigator/maxrange/\n *         Defined max and min range\n *\n * @type      {number}\n * @since     6.0.0\n * @product   highstock gantt\n * @apioption xAxis.maxRange\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es-modules/Core/Renderer/SVG/Symbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defined: Symbols_defined, isNumber: Symbols_isNumber, pick: Symbols_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n    const arc = [];\n    if (options) {\n        const start = options.start || 0, rx = Symbols_pick(options.r, w), ry = Symbols_pick(options.r, h || w), \n        // Subtract a small number to prevent cos and sin of start and end\n        // from becoming equal on 360 arcs (#1561). The size of the circle\n        // affects the constant, therefore the division by `rx`. If the\n        // proximity is too small, the arc disappears. If it is too great, a\n        // gap appears. This can be seen in the animation of the official\n        // bubble demo (#20586).\n        proximity = 0.0002 / (options.borderRadius ? 1 : Math.max(rx, 1)), fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n            proximity), end = (options.end || 0) - (fullCircle ? proximity : 0), innerRadius = options.innerR, open = Symbols_pick(options.open, fullCircle), cosStart = Math.cos(start), sinStart = Math.sin(start), cosEnd = Math.cos(end), sinEnd = Math.sin(end), \n        // Proximity takes care of rounding errors around PI (#6971)\n        longArc = Symbols_pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);\n        let arcSegment = [\n            'A', // ArcTo\n            rx, // X radius\n            ry, // Y radius\n            0, // Slanting\n            longArc, // Long or short arc\n            Symbols_pick(options.clockwise, 1), // Clockwise\n            cx + rx * cosEnd,\n            cy + ry * sinEnd\n        ];\n        arcSegment.params = { start, end, cx, cy }; // Memo for border radius\n        arc.push([\n            'M',\n            cx + rx * cosStart,\n            cy + ry * sinStart\n        ], arcSegment);\n        if (Symbols_defined(innerRadius)) {\n            arcSegment = [\n                'A', // ArcTo\n                innerRadius, // X radius\n                innerRadius, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                // Clockwise - opposite to the outer arc clockwise\n                Symbols_defined(options.clockwise) ? 1 - options.clockwise : 0,\n                cx + innerRadius * cosStart,\n                cy + innerRadius * sinStart\n            ];\n            // Memo for border radius\n            arcSegment.params = {\n                start: end,\n                end: start,\n                cx,\n                cy\n            };\n            arc.push(open ?\n                [\n                    'M',\n                    cx + innerRadius * cosEnd,\n                    cy + innerRadius * sinEnd\n                ] : [\n                'L',\n                cx + innerRadius * cosEnd,\n                cy + innerRadius * sinEnd\n            ], arcSegment);\n        }\n        if (!open) {\n            arc.push(['Z']);\n        }\n    }\n    return arc;\n}\n/**\n * Callout shape used for default tooltips.\n */\nfunction callout(x, y, w, h, options) {\n    const arrowLength = 6, halfDistance = 6, r = Math.min((options && options.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options && options.anchorX, anchorY = options && options.anchorY || 0;\n    const path = roundedRect(x, y, w, h, { r });\n    if (!Symbols_isNumber(anchorX)) {\n        return path;\n    }\n    // Do not render a connector, if anchor starts inside the label\n    if (anchorX < w && anchorX > 0 && anchorY < h && anchorY > 0) {\n        return path;\n    }\n    // Anchor on right side\n    if (x + anchorX > w - safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(3, 1, ['L', x + w, anchorY - halfDistance], ['L', x + w + arrowLength, anchorY], ['L', x + w, anchorY + halfDistance], ['L', x + w, y + h - r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX < w) { // Corner connector\n                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, sliceStart = isTopCorner ? 2 : 5;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + w - r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(3, 1, ['L', x + w, h / 2], ['L', anchorX, anchorY], ['L', x + w, h / 2], ['L', x + w, y + h - r]);\n            }\n        }\n        // Anchor on left side\n    }\n    else if (x + anchorX < safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(7, 1, ['L', x, anchorY + halfDistance], ['L', x - arrowLength, anchorY], ['L', x, anchorY - halfDistance], ['L', x, y + r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX > 0) { // Corner connector\n                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, sliceStart = isTopCorner ? 1 : 6;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(7, 1, ['L', x, h / 2], ['L', anchorX, anchorY], ['L', x, h / 2], ['L', x, y + r]);\n            }\n        }\n    }\n    else if ( // Replace bottom\n    anchorY > h &&\n        anchorX < w - safeDistance) {\n        path.splice(5, 1, ['L', anchorX + halfDistance, y + h], ['L', anchorX, y + h + arrowLength], ['L', anchorX - halfDistance, y + h], ['L', x + r, y + h]);\n    }\n    else if ( // Replace top\n    anchorY < 0 &&\n        anchorX > safeDistance) {\n        path.splice(1, 1, ['L', anchorX - halfDistance, y], ['L', anchorX, y - arrowLength], ['L', anchorX + halfDistance, y], ['L', w - r, y]);\n    }\n    return path;\n}\n/**\n *\n */\nfunction circle(x, y, w, h) {\n    // Return a full arc\n    return arc(x + w / 2, y + h / 2, w / 2, h / 2, {\n        start: Math.PI * 0.5,\n        end: Math.PI * 2.5,\n        open: false\n    });\n}\n/**\n *\n */\nfunction diamond(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h / 2],\n        ['L', x + w / 2, y + h],\n        ['L', x, y + h / 2],\n        ['Z']\n    ];\n}\n// #15291\n/**\n *\n */\nfunction rect(x, y, w, h, options) {\n    if (options && options.r) {\n        return roundedRect(x, y, w, h, options);\n    }\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction roundedRect(x, y, w, h, options) {\n    const r = options?.r || 0;\n    return [\n        ['M', x + r, y],\n        ['L', x + w - r, y], // Top side\n        ['A', r, r, 0, 0, 1, x + w, y + r], // Top-right corner\n        ['L', x + w, y + h - r], // Right side\n        ['A', r, r, 0, 0, 1, x + w - r, y + h], // Bottom-right corner\n        ['L', x + r, y + h], // Bottom side\n        ['A', r, r, 0, 0, 1, x, y + h - r], // Bottom-left corner\n        ['L', x, y + r], // Left side\n        ['A', r, r, 0, 0, 1, x + r, y],\n        ['Z'] // Top-left corner\n    ];\n}\n/**\n *\n */\nfunction triangle(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction triangleDown(x, y, w, h) {\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w / 2, y + h],\n        ['Z']\n    ];\n}\nconst Symbols = {\n    arc,\n    callout,\n    circle,\n    diamond,\n    rect,\n    roundedRect,\n    square: rect,\n    triangle,\n    'triangle-down': triangleDown\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SVG_Symbols = (Symbols);\n\n;// ./code/es-modules/Stock/Navigator/NavigatorSymbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Draw one of the handles on the side of the zoomed range in the navigator.\n * @private\n */\nfunction navigatorHandle(_x, _y, width, height, options = {}) {\n    const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));\n    height = options.height || height;\n    return [\n        ['M', -markerPosition, height / 2 - 3.5],\n        ['L', -markerPosition, height / 2 + 4.5],\n        ['M', markerPosition - 1, height / 2 - 3.5],\n        ['L', markerPosition - 1, height / 2 + 4.5],\n        ...SVG_Symbols.rect(-halfWidth - 1, 0.5, halfWidth * 2 + 1, height, { r })\n    ];\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigatorSymbols = {\n    'navigator-handle': navigatorHandle\n};\n/* harmony default export */ const Navigator_NavigatorSymbols = (NavigatorSymbols);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"RendererRegistry\"],\"commonjs\":[\"highcharts\",\"RendererRegistry\"],\"commonjs2\":[\"highcharts\",\"RendererRegistry\"],\"root\":[\"Highcharts\",\"RendererRegistry\"]}\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_ = __webpack_require__(608);\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_);\n;// ./code/es-modules/Stock/Utilities/StockUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defined: StockUtilities_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Sets the chart.fixedRange to the specified value. If the value is larger\n * than actual range, sets it to the maximum possible range. (#20327)\n *\n * @private\n * @function Highcharts.StockChart#setFixedRange\n * @param {number|undefined} range\n *        Range to set in axis units.\n */\nfunction setFixedRange(range) {\n    const xAxis = this.xAxis[0];\n    if (StockUtilities_defined(xAxis.dataMax) &&\n        StockUtilities_defined(xAxis.dataMin) &&\n        range) {\n        this.fixedRange = Math.min(range, xAxis.dataMax - xAxis.dataMin);\n    }\n    else {\n        this.fixedRange = range;\n    }\n}\nconst StockUtilities = {\n    setFixedRange\n};\n/* harmony default export */ const Utilities_StockUtilities = (StockUtilities);\n\n;// ./code/es-modules/Stock/Navigator/NavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { setOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { getRendererType } = (highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default());\n\nconst { setFixedRange: NavigatorComposition_setFixedRange } = Utilities_StockUtilities;\n\nconst { addEvent: NavigatorComposition_addEvent, extend, pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Variables\n *\n * */\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction NavigatorComposition_compose(ChartClass, AxisClass, SeriesClass) {\n    NavigatorAxisComposition.compose(AxisClass);\n    if (pushUnique(composed, 'Navigator')) {\n        ChartClass.prototype.setFixedRange = NavigatorComposition_setFixedRange;\n        extend(getRendererType().prototype.symbols, Navigator_NavigatorSymbols);\n        NavigatorComposition_addEvent(SeriesClass, 'afterUpdate', onSeriesAfterUpdate);\n        setOptions({ navigator: Navigator_NavigatorDefaults });\n    }\n}\n/**\n * Handle updating series\n * @private\n */\nfunction onSeriesAfterUpdate() {\n    if (this.chart.navigator && !this.options.isInternal) {\n        this.chart.navigator.setBaseSeries(null, false);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigatorComposition = {\n    compose: NavigatorComposition_compose\n};\n/* harmony default export */ const Navigator_NavigatorComposition = (NavigatorComposition);\n\n;// ./code/es-modules/Core/Axis/ScrollbarAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: ScrollbarAxis_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ScrollbarAxis_addEvent, defined: ScrollbarAxis_defined, pick: ScrollbarAxis_pick, pushUnique: ScrollbarAxis_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar ScrollbarAxis;\n(function (ScrollbarAxis) {\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    let Scrollbar;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Attaches to axis events to create scrollbars if enabled.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} AxisClass\n     * Axis class to extend.\n     *\n     * @param {Highcharts.Scrollbar} ScrollbarClass\n     * Scrollbar class to use.\n     */\n    function compose(AxisClass, ScrollbarClass) {\n        if (ScrollbarAxis_pushUnique(ScrollbarAxis_composed, 'Axis.Scrollbar')) {\n            Scrollbar = ScrollbarClass;\n            ScrollbarAxis_addEvent(AxisClass, 'afterGetOffset', onAxisAfterGetOffset);\n            ScrollbarAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            ScrollbarAxis_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n        }\n    }\n    ScrollbarAxis.compose = compose;\n    /** @private */\n    function getExtremes(axis) {\n        const axisMin = ScrollbarAxis_pick(axis.options && axis.options.min, axis.min);\n        const axisMax = ScrollbarAxis_pick(axis.options && axis.options.max, axis.max);\n        return {\n            axisMin,\n            axisMax,\n            scrollMin: ScrollbarAxis_defined(axis.dataMin) ?\n                Math.min(axisMin, axis.min, axis.dataMin, ScrollbarAxis_pick(axis.threshold, Infinity)) : axisMin,\n            scrollMax: ScrollbarAxis_defined(axis.dataMax) ?\n                Math.max(axisMax, axis.max, axis.dataMax, ScrollbarAxis_pick(axis.threshold, -Infinity)) : axisMax\n        };\n    }\n    /**\n     * Make space for a scrollbar.\n     * @private\n     */\n    function onAxisAfterGetOffset() {\n        const axis = this, scrollbar = axis.scrollbar, opposite = scrollbar && !scrollbar.options.opposite, index = axis.horiz ? 2 : opposite ? 3 : 1;\n        if (scrollbar) {\n            // Reset scrollbars offsets\n            axis.chart.scrollbarsOffsets = [0, 0];\n            axis.chart.axisOffset[index] +=\n                scrollbar.size + (scrollbar.options.margin || 0);\n        }\n    }\n    /**\n     * Wrap axis initialization and create scrollbar if enabled.\n     * @private\n     */\n    function onAxisAfterInit() {\n        const axis = this;\n        if (axis.options &&\n            axis.options.scrollbar &&\n            axis.options.scrollbar.enabled) {\n            // Predefined options:\n            axis.options.scrollbar.vertical = !axis.horiz;\n            axis.options.startOnTick = axis.options.endOnTick = false;\n            axis.scrollbar = new Scrollbar(axis.chart.renderer, axis.options.scrollbar, axis.chart);\n            ScrollbarAxis_addEvent(axis.scrollbar, 'changed', function (e) {\n                const { axisMin, axisMax, scrollMin: unitedMin, scrollMax: unitedMax } = getExtremes(axis), range = unitedMax - unitedMin;\n                let to, from;\n                // #12834, scroll when show/hide series, wrong extremes\n                if (!ScrollbarAxis_defined(axisMin) || !ScrollbarAxis_defined(axisMax)) {\n                    return;\n                }\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    to = unitedMin + range * this.to;\n                    from = unitedMin + range * this.from;\n                }\n                else {\n                    // Y-values in browser are reversed, but this also\n                    // applies for reversed horizontal axis:\n                    to = unitedMin + range * (1 - this.from);\n                    from = unitedMin + range * (1 - this.to);\n                }\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    // #17977, set animation to undefined instead of true\n                    const animate = e.DOMType === 'mousemove' ||\n                        e.DOMType === 'touchmove' ? false : void 0;\n                    axis.setExtremes(from, to, true, animate, e);\n                }\n                else {\n                    // When live redraw is disabled, don't change extremes\n                    // Only change the position of the scrollbar thumb\n                    this.setRange(this.from, this.to);\n                }\n            });\n        }\n    }\n    /**\n     * Wrap rendering axis, and update scrollbar if one is created.\n     * @private\n     */\n    function onAxisAfterRender() {\n        const axis = this, { scrollMin, scrollMax } = getExtremes(axis), scrollbar = axis.scrollbar, offset = (axis.axisTitleMargin + (axis.titleOffset || 0)), scrollbarsOffsets = axis.chart.scrollbarsOffsets, axisMargin = axis.options.margin || 0;\n        let offsetsIndex, from, to;\n        if (scrollbar && scrollbarsOffsets) {\n            if (axis.horiz) {\n                // Reserve space for labels/title\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += offset;\n                }\n                scrollbar.position(axis.left, (axis.top +\n                    axis.height +\n                    2 +\n                    scrollbarsOffsets[1] -\n                    (axis.opposite ? axisMargin : 0)), axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += axisMargin;\n                }\n                offsetsIndex = 1;\n            }\n            else {\n                // Reserve space for labels/title\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += offset;\n                }\n                let xPosition;\n                if (!scrollbar.options.opposite) {\n                    xPosition = axis.opposite ? 0 : axisMargin;\n                }\n                else {\n                    xPosition = axis.left +\n                        axis.width +\n                        2 +\n                        scrollbarsOffsets[0] -\n                        (axis.opposite ? 0 : axisMargin);\n                }\n                scrollbar.position(xPosition, axis.top, axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += axisMargin;\n                }\n                offsetsIndex = 0;\n            }\n            scrollbarsOffsets[offsetsIndex] += scrollbar.size +\n                (scrollbar.options.margin || 0);\n            if (isNaN(scrollMin) ||\n                isNaN(scrollMax) ||\n                !ScrollbarAxis_defined(axis.min) ||\n                !ScrollbarAxis_defined(axis.max) ||\n                axis.dataMin === axis.dataMax // #10733\n            ) {\n                // Default action: when data extremes are the same or there is\n                // not extremes on the axis, but scrollbar exists, make it\n                // full size\n                scrollbar.setRange(0, 1);\n            }\n            else if (axis.min === axis.max) { // #20359\n                // When the extremes are the same, set the scrollbar to a point\n                // within the extremes range. Utilize pointRange to perform the\n                // calculations. (#20359)\n                const interval = axis.pointRange / (axis.dataMax +\n                    1);\n                from = interval * axis.min;\n                to = interval * (axis.max + 1);\n                scrollbar.setRange(from, to);\n            }\n            else {\n                from = ((axis.min - scrollMin) /\n                    (scrollMax - scrollMin));\n                to = ((axis.max - scrollMin) /\n                    (scrollMax - scrollMin));\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    scrollbar.setRange(from, to);\n                }\n                else {\n                    // Inverse vertical axis\n                    scrollbar.setRange(1 - to, 1 - from);\n                }\n            }\n        }\n    }\n})(ScrollbarAxis || (ScrollbarAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_ScrollbarAxis = (ScrollbarAxis);\n\n;// ./code/es-modules/Stock/Scrollbar/ScrollbarDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constant\n *\n * */\n/**\n *\n * The scrollbar is a means of panning over the X axis of a stock chart.\n * Scrollbars can also be applied to other types of axes.\n *\n * Another approach to scrollable charts is the [chart.scrollablePlotArea](\n * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that\n * is especially suitable for simpler cartesian charts on mobile.\n *\n * In styled mode, all the presentational options for the\n * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample stock/yaxis/inverted-bar-scrollbar/\n *         A scrollbar on a simple bar chart\n *\n * @product highstock gantt\n * @optionparent scrollbar\n *\n * @private\n */\nconst ScrollbarDefaults = {\n    /**\n     * The height of the scrollbar. If `buttonsEnabled` is true , the height\n     * also applies to the width of the scroll arrows so that they are always\n     * squares.\n     *\n     * @sample stock/scrollbar/style/\n     *         Non-default height\n     *\n     * @type    {number}\n     */\n    height: 10,\n    /**\n     * The border rounding radius of the bar.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderRadius: 5,\n    /**\n     * The corner radius of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderRadius: 0,\n    /**\n     * Enable or disable the buttons at the end of the scrollbar.\n     *\n     * @since 11.0.0\n     */\n    buttonsEnabled: false,\n    /**\n     * Enable or disable the scrollbar.\n     *\n     * @sample stock/scrollbar/enabled/\n     *         Disable the scrollbar, only use navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.enabled\n     */\n    /**\n     * Whether to redraw the main chart as the scrollbar or the navigator\n     * zoomed window is moved. Defaults to `true` for modern browsers and\n     * `false` for legacy IE browsers as well as mobile devices.\n     *\n     * @sample stock/scrollbar/liveredraw\n     *         Setting live redraw to false\n     *\n     * @type  {boolean}\n     * @since 1.3\n     */\n    liveRedraw: void 0,\n    /**\n     * The margin between the scrollbar and its axis when the scrollbar is\n     * applied directly to an axis, or the navigator in case that is enabled.\n     * Defaults to 10 for axis, 0 for navigator.\n     *\n     * @type {number|undefined}\n     */\n    margin: void 0,\n    /**\n     * The minimum width of the scrollbar.\n     *\n     * @since 1.2.5\n     */\n    minWidth: 6,\n    /** @ignore-option */\n    opposite: true,\n    /**\n     * Whether to show or hide the scrollbar when the scrolled content is\n     * zoomed out to it full extent.\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.showFull\n     */\n    step: 0.2,\n    /**\n     * The z index of the scrollbar group.\n     */\n    zIndex: 3,\n    /**\n     * The background color of the scrollbar itself.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBackgroundColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The width of the bar's border.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderWidth: 0,\n    /**\n     * The color of the scrollbar's border.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The color of the small arrow inside the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonArrowColor: \"#333333\" /* Palette.neutralColor80 */,\n    /**\n     * The color of scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBackgroundColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n    /**\n     * The color of the border of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The border width of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderWidth: 1,\n    /**\n     * The color of the small rifles in the middle of the scrollbar.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    rifleColor: 'none',\n    /**\n     * The color of the track background.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBackgroundColor: 'rgba(255, 255, 255, 0.001)', // #18922\n    /**\n     * The color of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The corner radius of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderRadius: 5,\n    /**\n     * The width of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderWidth: 1\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Scrollbar_ScrollbarDefaults = (ScrollbarDefaults);\n\n;// ./code/es-modules/Stock/Scrollbar/Scrollbar.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { addEvent: Scrollbar_addEvent, correctFloat: Scrollbar_correctFloat, crisp, defined: Scrollbar_defined, destroyObjectProperties, fireEvent, merge: Scrollbar_merge, pick: Scrollbar_pick, removeEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * A reusable scrollbar, internally used in Highcharts Stock's\n * navigator and optionally on individual axes.\n *\n * @private\n * @class\n * @name Highcharts.Scrollbar\n * @param {Highcharts.SVGRenderer} renderer\n * @param {Highcharts.ScrollbarOptions} options\n * @param {Highcharts.Chart} chart\n */\nclass Scrollbar {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(AxisClass) {\n        Axis_ScrollbarAxis.compose(AxisClass, Scrollbar);\n    }\n    /**\n     * When we have vertical scrollbar, rifles and arrow in buttons should be\n     * rotated. The same method is used in Navigator's handles, to rotate them.\n     *\n     * @function Highcharts.swapXY\n     *\n     * @param {Highcharts.SVGPathArray} path\n     * Path to be rotated.\n     *\n     * @param {boolean} [vertical]\n     * If vertical scrollbar, swap x-y values.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Rotated path.\n     *\n     * @requires modules/stock\n     */\n    static swapXY(path, vertical) {\n        if (vertical) {\n            path.forEach((seg) => {\n                const len = seg.length;\n                let temp;\n                for (let i = 0; i < len; i += 2) {\n                    temp = seg[i + 1];\n                    if (typeof temp === 'number') {\n                        seg[i + 1] = seg[i + 2];\n                        seg[i + 2] = temp;\n                    }\n                }\n            });\n        }\n        return path;\n    }\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    constructor(renderer, options, chart) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this._events = [];\n        this.chartX = 0;\n        this.chartY = 0;\n        this.from = 0;\n        this.scrollbarButtons = [];\n        this.scrollbarLeft = 0;\n        this.scrollbarStrokeWidth = 1;\n        this.scrollbarTop = 0;\n        this.size = 0;\n        this.to = 0;\n        this.trackBorderWidth = 1;\n        this.x = 0;\n        this.y = 0;\n        this.init(renderer, options, chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set up the mouse and touch events for the Scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#addEvents\n     */\n    addEvents() {\n        const buttonsOrder = this.options.inverted ? [1, 0] : [0, 1], buttons = this.scrollbarButtons, bar = this.scrollbarGroup.element, track = this.track.element, mouseDownHandler = this.mouseDownHandler.bind(this), mouseMoveHandler = this.mouseMoveHandler.bind(this), mouseUpHandler = this.mouseUpHandler.bind(this);\n        const _events = [\n            // Mouse events\n            [\n                buttons[buttonsOrder[0]].element,\n                'click',\n                this.buttonToMinClick.bind(this)\n            ],\n            [\n                buttons[buttonsOrder[1]].element,\n                'click',\n                this.buttonToMaxClick.bind(this)\n            ],\n            [track, 'click', this.trackClick.bind(this)],\n            [bar, 'mousedown', mouseDownHandler],\n            [bar.ownerDocument, 'mousemove', mouseMoveHandler],\n            [bar.ownerDocument, 'mouseup', mouseUpHandler],\n            // Touch events\n            [bar, 'touchstart', mouseDownHandler],\n            [bar.ownerDocument, 'touchmove', mouseMoveHandler],\n            [bar.ownerDocument, 'touchend', mouseUpHandler]\n        ];\n        // Add them all\n        _events.forEach(function (args) {\n            Scrollbar_addEvent.apply(null, args);\n        });\n        this._events = _events;\n    }\n    buttonToMaxClick(e) {\n        const scroller = this;\n        const range = ((scroller.to - scroller.from) *\n            Scrollbar_pick(scroller.options.step, 0.2));\n        scroller.updatePosition(scroller.from + range, scroller.to + range);\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    }\n    buttonToMinClick(e) {\n        const scroller = this;\n        const range = Scrollbar_correctFloat(scroller.to - scroller.from) *\n            Scrollbar_pick(scroller.options.step, 0.2);\n        scroller.updatePosition(Scrollbar_correctFloat(scroller.from - range), Scrollbar_correctFloat(scroller.to - range));\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    }\n    /**\n     * Get normalized (0-1) cursor position over the scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#cursorToScrollbarPosition\n     *\n     * @param  {*} normalizedEvent\n     *         normalized event, with chartX and chartY values\n     *\n     * @return {Highcharts.Dictionary<number>}\n     *         Local position {chartX, chartY}\n     */\n    cursorToScrollbarPosition(normalizedEvent) {\n        const scroller = this, options = scroller.options, minWidthDifference = options.minWidth > scroller.calculatedWidth ?\n            options.minWidth :\n            0; // `minWidth` distorts translation\n        return {\n            chartX: (normalizedEvent.chartX - scroller.x -\n                scroller.xOffset) /\n                (scroller.barWidth - minWidthDifference),\n            chartY: (normalizedEvent.chartY - scroller.y -\n                scroller.yOffset) /\n                (scroller.barWidth - minWidthDifference)\n        };\n    }\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#destroy\n     */\n    destroy() {\n        const scroller = this, navigator = scroller.chart.scroller;\n        // Disconnect events added in addEvents\n        scroller.removeEvents();\n        // Destroy properties\n        [\n            'track',\n            'scrollbarRifles',\n            'scrollbar',\n            'scrollbarGroup',\n            'group'\n        ].forEach(function (prop) {\n            if (scroller[prop] && scroller[prop].destroy) {\n                scroller[prop] = scroller[prop].destroy();\n            }\n        });\n        // #6421, chart may have more scrollbars\n        if (navigator && scroller === navigator.scrollbar) {\n            navigator.scrollbar = null;\n            // Destroy elements in collection\n            destroyObjectProperties(navigator.scrollbarButtons);\n        }\n    }\n    /**\n     * Draw the scrollbar buttons with arrows\n     *\n     * @private\n     * @function Highcharts.Scrollbar#drawScrollbarButton\n     * @param {number} index\n     *        0 is left, 1 is right\n     */\n    drawScrollbarButton(index) {\n        const scroller = this, renderer = scroller.renderer, scrollbarButtons = scroller.scrollbarButtons, options = scroller.options, size = scroller.size, group = renderer.g().add(scroller.group);\n        scrollbarButtons.push(group);\n        if (options.buttonsEnabled) {\n            // Create a rectangle for the scrollbar button\n            const rect = renderer.rect()\n                .addClass('highcharts-scrollbar-button')\n                .add(group);\n            // Presentational attributes\n            if (!scroller.chart.styledMode) {\n                rect.attr({\n                    stroke: options.buttonBorderColor,\n                    'stroke-width': options.buttonBorderWidth,\n                    fill: options.buttonBackgroundColor\n                });\n            }\n            // Place the rectangle based on the rendered stroke width\n            rect.attr(rect.crisp({\n                x: -0.5,\n                y: -0.5,\n                width: size,\n                height: size,\n                r: options.buttonBorderRadius\n            }, rect.strokeWidth()));\n            // Button arrow\n            const arrow = renderer\n                .path(Scrollbar.swapXY([[\n                    'M',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 - 3\n                ], [\n                    'L',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 + 3\n                ], [\n                    'L',\n                    size / 2 + (index ? 2 : -2),\n                    size / 2\n                ]], options.vertical))\n                .addClass('highcharts-scrollbar-arrow')\n                .add(scrollbarButtons[index]);\n            if (!scroller.chart.styledMode) {\n                arrow.attr({\n                    fill: options.buttonArrowColor\n                });\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.Scrollbar#init\n     * @param {Highcharts.SVGRenderer} renderer\n     * @param {Highcharts.ScrollbarOptions} options\n     * @param {Highcharts.Chart} chart\n     */\n    init(renderer, options, chart) {\n        const scroller = this;\n        scroller.scrollbarButtons = [];\n        scroller.renderer = renderer;\n        scroller.userOptions = options;\n        scroller.options = Scrollbar_merge(Scrollbar_ScrollbarDefaults, defaultOptions.scrollbar, options);\n        scroller.options.margin = Scrollbar_pick(scroller.options.margin, 10);\n        scroller.chart = chart;\n        // Backward compatibility\n        scroller.size = Scrollbar_pick(scroller.options.size, scroller.options.height);\n        // Init\n        if (options.enabled) {\n            scroller.render();\n            scroller.addEvents();\n        }\n    }\n    mouseDownHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);\n        scroller.chartX = mousePosition.chartX;\n        scroller.chartY = mousePosition.chartY;\n        scroller.initPositions = [scroller.from, scroller.to];\n        scroller.grabbedCenter = true;\n    }\n    /**\n     * Event handler for the mouse move event.\n     * @private\n     */\n    mouseMoveHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, options = scroller.options, direction = options.vertical ?\n            'chartY' : 'chartX', initPositions = scroller.initPositions || [];\n        let scrollPosition, chartPosition, change;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when\n        // holding the finger down in the center of the scrollbar. This\n        // should be ignored.\n        if (scroller.grabbedCenter &&\n            // #4696, scrollbar failed on Android\n            (!e.touches || e.touches[0][direction] !== 0)) {\n            chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];\n            scrollPosition = scroller[direction];\n            change = chartPosition - scrollPosition;\n            scroller.hasDragged = true;\n            scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);\n            if (scroller.hasDragged) {\n                fireEvent(scroller, 'changed', {\n                    from: scroller.from,\n                    to: scroller.to,\n                    trigger: 'scrollbar',\n                    DOMType: e.type,\n                    DOMEvent: e\n                });\n            }\n        }\n    }\n    /**\n     * Event handler for the mouse up event.\n     * @private\n     */\n    mouseUpHandler(e) {\n        const scroller = this;\n        if (scroller.hasDragged) {\n            fireEvent(scroller, 'changed', {\n                from: scroller.from,\n                to: scroller.to,\n                trigger: 'scrollbar',\n                DOMType: e.type,\n                DOMEvent: e\n            });\n        }\n        scroller.grabbedCenter =\n            scroller.hasDragged =\n                scroller.chartX =\n                    scroller.chartY = null;\n    }\n    /**\n     * Position the scrollbar, method called from a parent with defined\n     * dimensions.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#position\n     * @param {number} x\n     *        x-position on the chart\n     * @param {number} y\n     *        y-position on the chart\n     * @param {number} width\n     *        width of the scrollbar\n     * @param {number} height\n     *        height of the scrollbar\n     */\n    position(x, y, width, height) {\n        const scroller = this, options = scroller.options, { buttonsEnabled, margin = 0, vertical } = options, method = scroller.rendered ? 'animate' : 'attr';\n        let xOffset = height, yOffset = 0;\n        // Make the scrollbar visible when it is repositioned, #15763.\n        scroller.group.show();\n        scroller.x = x;\n        scroller.y = y + this.trackBorderWidth;\n        scroller.width = width; // Width with buttons\n        scroller.height = height;\n        scroller.xOffset = xOffset;\n        scroller.yOffset = yOffset;\n        // If Scrollbar is a vertical type, swap options:\n        if (vertical) {\n            scroller.width = scroller.yOffset = width = yOffset = scroller.size;\n            scroller.xOffset = xOffset = 0;\n            scroller.yOffset = yOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = height - (buttonsEnabled ? width * 2 : 0);\n            scroller.x = x = x + margin;\n        }\n        else {\n            scroller.height = height = scroller.size;\n            scroller.xOffset = xOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = width - (buttonsEnabled ? height * 2 : 0);\n            scroller.y = scroller.y + margin;\n        }\n        // Set general position for a group:\n        scroller.group[method]({\n            translateX: x,\n            translateY: scroller.y\n        });\n        // Resize background/track:\n        scroller.track[method]({\n            width: width,\n            height: height\n        });\n        // Move right/bottom button to its place:\n        scroller.scrollbarButtons[1][method]({\n            translateX: vertical ? 0 : width - xOffset,\n            translateY: vertical ? height - yOffset : 0\n        });\n    }\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#removeEvents\n     */\n    removeEvents() {\n        this._events.forEach(function (args) {\n            removeEvent.apply(null, args);\n        });\n        this._events.length = 0;\n    }\n    /**\n     * Render scrollbar with all required items.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#render\n     */\n    render() {\n        const scroller = this, renderer = scroller.renderer, options = scroller.options, size = scroller.size, styledMode = scroller.chart.styledMode, group = renderer.g('scrollbar')\n            .attr({\n            zIndex: options.zIndex\n        })\n            .hide() // Initially hide the scrollbar #15863\n            .add();\n        // Draw the scrollbar group\n        scroller.group = group;\n        // Draw the scrollbar track:\n        scroller.track = renderer.rect()\n            .addClass('highcharts-scrollbar-track')\n            .attr({\n            r: options.trackBorderRadius || 0,\n            height: size,\n            width: size\n        }).add(group);\n        if (!styledMode) {\n            scroller.track.attr({\n                fill: options.trackBackgroundColor,\n                stroke: options.trackBorderColor,\n                'stroke-width': options.trackBorderWidth\n            });\n        }\n        const trackBorderWidth = scroller.trackBorderWidth =\n            scroller.track.strokeWidth();\n        scroller.track.attr({\n            x: -crisp(0, trackBorderWidth),\n            y: -crisp(0, trackBorderWidth)\n        });\n        // Draw the scrollbar itself\n        scroller.scrollbarGroup = renderer.g().add(group);\n        scroller.scrollbar = renderer.rect()\n            .addClass('highcharts-scrollbar-thumb')\n            .attr({\n            height: size - trackBorderWidth,\n            width: size - trackBorderWidth,\n            r: options.barBorderRadius || 0\n        }).add(scroller.scrollbarGroup);\n        scroller.scrollbarRifles = renderer\n            .path(Scrollbar.swapXY([\n            ['M', -3, size / 4],\n            ['L', -3, 2 * size / 3],\n            ['M', 0, size / 4],\n            ['L', 0, 2 * size / 3],\n            ['M', 3, size / 4],\n            ['L', 3, 2 * size / 3]\n        ], options.vertical))\n            .addClass('highcharts-scrollbar-rifles')\n            .add(scroller.scrollbarGroup);\n        if (!styledMode) {\n            scroller.scrollbar.attr({\n                fill: options.barBackgroundColor,\n                stroke: options.barBorderColor,\n                'stroke-width': options.barBorderWidth\n            });\n            scroller.scrollbarRifles.attr({\n                stroke: options.rifleColor,\n                'stroke-width': 1\n            });\n        }\n        scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();\n        scroller.scrollbarGroup.translate(-crisp(0, scroller.scrollbarStrokeWidth), -crisp(0, scroller.scrollbarStrokeWidth));\n        // Draw the buttons:\n        scroller.drawScrollbarButton(0);\n        scroller.drawScrollbarButton(1);\n    }\n    /**\n     * Set scrollbar size, with a given scale.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#setRange\n     * @param {number} from\n     *        scale (0-1) where bar should start\n     * @param {number} to\n     *        scale (0-1) where bar should end\n     */\n    setRange(from, to) {\n        const scroller = this, options = scroller.options, vertical = options.vertical, minWidth = options.minWidth, fullWidth = scroller.barWidth, method = (this.rendered &&\n            !this.hasDragged &&\n            !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';\n        if (!Scrollbar_defined(fullWidth)) {\n            return;\n        }\n        const toPX = fullWidth * Math.min(to, 1);\n        let fromPX, newSize;\n        from = Math.max(from, 0);\n        fromPX = Math.ceil(fullWidth * from);\n        scroller.calculatedWidth = newSize = Scrollbar_correctFloat(toPX - fromPX);\n        // We need to recalculate position, if minWidth is used\n        if (newSize < minWidth) {\n            fromPX = (fullWidth - minWidth + newSize) * from;\n            newSize = minWidth;\n        }\n        const newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);\n        const newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2\n        // Store current position:\n        scroller.from = from;\n        scroller.to = to;\n        if (!vertical) {\n            scroller.scrollbarGroup[method]({\n                translateX: newPos\n            });\n            scroller.scrollbar[method]({\n                width: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateX: newRiflesPos\n            });\n            scroller.scrollbarLeft = newPos;\n            scroller.scrollbarTop = 0;\n        }\n        else {\n            scroller.scrollbarGroup[method]({\n                translateY: newPos\n            });\n            scroller.scrollbar[method]({\n                height: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateY: newRiflesPos\n            });\n            scroller.scrollbarTop = newPos;\n            scroller.scrollbarLeft = 0;\n        }\n        if (newSize <= 12) {\n            scroller.scrollbarRifles.hide();\n        }\n        else {\n            scroller.scrollbarRifles.show();\n        }\n        // Show or hide the scrollbar based on the showFull setting\n        if (options.showFull === false) {\n            if (from <= 0 && to >= 1) {\n                scroller.group.hide();\n            }\n            else {\n                scroller.group.show();\n            }\n        }\n        scroller.rendered = true;\n    }\n    /**\n     * Checks if the extremes should be updated in response to a scrollbar\n     * change event.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#shouldUpdateExtremes\n     */\n    shouldUpdateExtremes(eventType) {\n        return (Scrollbar_pick(this.options.liveRedraw, (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).svg &&\n            !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice &&\n            !this.chart.boosted) ||\n            // Mouseup always should change extremes\n            eventType === 'mouseup' ||\n            eventType === 'touchend' ||\n            // Internal events\n            !Scrollbar_defined(eventType));\n    }\n    trackClick(e) {\n        const scroller = this;\n        const normalizedEvent = scroller.chart.pointer?.normalize(e) || e, range = scroller.to - scroller.from, top = scroller.y + scroller.scrollbarTop, left = scroller.x + scroller.scrollbarLeft;\n        if ((scroller.options.vertical && normalizedEvent.chartY > top) ||\n            (!scroller.options.vertical && normalizedEvent.chartX > left)) {\n            // On the top or on the left side of the track:\n            scroller.updatePosition(scroller.from + range, scroller.to + range);\n        }\n        else {\n            // On the bottom or the right side of the track:\n            scroller.updatePosition(scroller.from - range, scroller.to - range);\n        }\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    }\n    /**\n     * Update the scrollbar with new options\n     *\n     * @private\n     * @function Highcharts.Scrollbar#update\n     * @param  {Highcharts.ScrollbarOptions} options\n     */\n    update(options) {\n        this.destroy();\n        this.init(this.chart.renderer, Scrollbar_merge(true, this.options, options), this.chart);\n    }\n    /**\n     * Update position option in the Scrollbar, with normalized 0-1 scale\n     *\n     * @private\n     * @function Highcharts.Scrollbar#updatePosition\n     * @param  {number} from\n     * @param  {number} to\n     */\n    updatePosition(from, to) {\n        if (to > 1) {\n            from = Scrollbar_correctFloat(1 - Scrollbar_correctFloat(to - from));\n            to = 1;\n        }\n        if (from < 0) {\n            to = Scrollbar_correctFloat(to - from);\n            from = 0;\n        }\n        this.from = from;\n        this.to = to;\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nScrollbar.defaultOptions = Scrollbar_ScrollbarDefaults;\n/* *\n *\n *  Registry\n *\n * */\ndefaultOptions.scrollbar = Scrollbar_merge(true, Scrollbar.defaultOptions, defaultOptions.scrollbar);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Scrollbar_Scrollbar = (Scrollbar);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGRenderer\"],\"commonjs\":[\"highcharts\",\"SVGRenderer\"],\"commonjs2\":[\"highcharts\",\"SVGRenderer\"],\"root\":[\"Highcharts\",\"SVGRenderer\"]}\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_ = __webpack_require__(540);\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_);\n;// ./code/es-modules/Stock/Navigator/Navigator.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { defaultOptions: Navigator_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isTouchDevice: Navigator_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { prototype: { symbols } } = (highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default());\n\nconst { addEvent: Navigator_addEvent, clamp, correctFloat: Navigator_correctFloat, defined: Navigator_defined, destroyObjectProperties: Navigator_destroyObjectProperties, erase, extend: Navigator_extend, find, fireEvent: Navigator_fireEvent, isArray: Navigator_isArray, isNumber: Navigator_isNumber, merge: Navigator_merge, pick: Navigator_pick, removeEvent: Navigator_removeEvent, splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Finding the min or max of a set of variables where we don't know if they are\n * defined, is a pattern that is repeated several places in Highcharts. Consider\n * making this a global utility method.\n * @private\n */\nfunction numExt(extreme, ...args) {\n    const numbers = [].filter.call(args, Navigator_isNumber);\n    if (numbers.length) {\n        return Math[extreme].apply(0, numbers);\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Navigator class\n *\n * @private\n * @class\n * @name Highcharts.Navigator\n *\n * @param {Highcharts.Chart} chart\n *        Chart object\n */\nclass Navigator {\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    static compose(ChartClass, AxisClass, SeriesClass) {\n        Navigator_ChartNavigatorComposition.compose(ChartClass, Navigator);\n        Navigator_NavigatorComposition.compose(ChartClass, AxisClass, SeriesClass);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.isDirty = false;\n        this.scrollbarHeight = 0;\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draw one of the handles on the side of the zoomed range in the navigator.\n     *\n     * @private\n     * @function Highcharts.Navigator#drawHandle\n     *\n     * @param {number} x\n     *        The x center for the handle\n     *\n     * @param {number} index\n     *        0 for left and 1 for right\n     *\n     * @param {boolean|undefined} inverted\n     *        Flag for chart.inverted\n     *\n     * @param {string} verb\n     *        Use 'animate' or 'attr'\n     */\n    drawHandle(x, index, inverted, verb) {\n        const navigator = this, height = navigator.navigatorOptions.handles.height;\n        // Place it\n        navigator.handles[index][verb](inverted ? {\n            translateX: Math.round(navigator.left + navigator.height / 2),\n            translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)\n        } : {\n            translateX: Math.round(navigator.left + parseInt(x, 10)),\n            translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)\n        });\n    }\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawOutline\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    drawOutline(zoomedMin, zoomedMax, inverted, verb) {\n        const navigator = this, maskInside = navigator.navigatorOptions.maskInside, outlineWidth = navigator.outline.strokeWidth(), halfOutline = outlineWidth / 2, outlineCorrection = (outlineWidth % 2) / 2, // #5800\n        scrollButtonSize = navigator.scrollButtonSize, navigatorSize = navigator.size, navigatorTop = navigator.top, height = navigator.height, lineTop = navigatorTop - halfOutline, lineBtm = navigatorTop + height;\n        let left = navigator.left, verticalMin, path;\n        if (inverted) {\n            verticalMin = navigatorTop + zoomedMax + outlineCorrection;\n            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;\n            path = [\n                [\n                    'M',\n                    left + height,\n                    navigatorTop - scrollButtonSize - outlineCorrection\n                ],\n                // Top right of zoomed range\n                ['L', left + height, verticalMin],\n                ['L', left, verticalMin], // Top left of z.r.\n                ['M', left, zoomedMax], // Bottom left of z.r.\n                ['L', left + height, zoomedMax], // Bottom right of z.r.\n                [\n                    'L',\n                    left + height,\n                    navigatorTop + navigatorSize + scrollButtonSize\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', left + height, verticalMin - halfOutline], \n                // Upper right of z.r.\n                [\n                    'L',\n                    left + height,\n                    zoomedMax + halfOutline\n                ]);\n            }\n        }\n        else {\n            left -= scrollButtonSize;\n            zoomedMin += left + scrollButtonSize - outlineCorrection;\n            zoomedMax += left + scrollButtonSize - outlineCorrection;\n            path = [\n                // Left\n                ['M', left, lineTop],\n                // Upper left of zoomed range\n                ['L', zoomedMin, lineTop],\n                // Lower left of z.r.\n                ['L', zoomedMin, lineBtm],\n                // Lower right of z.r.\n                ['M', zoomedMax, lineBtm],\n                // Upper right of z.r.\n                ['L', zoomedMax, lineTop],\n                // Right\n                [\n                    'L',\n                    left + navigatorSize + scrollButtonSize * 2,\n                    lineTop\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', zoomedMin - halfOutline, lineTop], \n                // Upper right of z.r.\n                ['L', zoomedMax + halfOutline, lineTop]);\n            }\n        }\n        navigator.outline[verb]({\n            d: path\n        });\n    }\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawMasks\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    drawMasks(zoomedMin, zoomedMax, inverted, verb) {\n        const navigator = this, left = navigator.left, top = navigator.top, navigatorHeight = navigator.height;\n        let height, width, x, y;\n        // Determine rectangle position & size\n        // According to (non)inverted position:\n        if (inverted) {\n            x = [left, left, left];\n            y = [top, top + zoomedMin, top + zoomedMax];\n            width = [navigatorHeight, navigatorHeight, navigatorHeight];\n            height = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n        }\n        else {\n            x = [left, left + zoomedMin, left + zoomedMax];\n            y = [top, top, top];\n            width = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n            height = [navigatorHeight, navigatorHeight, navigatorHeight];\n        }\n        navigator.shades.forEach((shade, i) => {\n            shade[verb]({\n                x: x[i],\n                y: y[i],\n                width: width[i],\n                height: height[i]\n            });\n        });\n    }\n    /**\n     * Generate and update DOM elements for a navigator:\n     *\n     * - main navigator group\n     *\n     * - all shades\n     *\n     * - outline\n     *\n     * - handles\n     *\n     * @private\n     * @function Highcharts.Navigator#renderElements\n     */\n    renderElements() {\n        const navigator = this, navigatorOptions = navigator.navigatorOptions, maskInside = navigatorOptions.maskInside, chart = navigator.chart, inverted = chart.inverted, renderer = chart.renderer, mouseCursor = {\n            cursor: inverted ? 'ns-resize' : 'ew-resize'\n        }, \n        // Create the main navigator group\n        navigatorGroup = navigator.navigatorGroup ??\n            (navigator.navigatorGroup = renderer\n                .g('navigator')\n                .attr({\n                zIndex: 8,\n                visibility: 'hidden'\n            })\n                .add());\n        // Create masks, each mask will get events and fill:\n        [\n            !maskInside,\n            maskInside,\n            !maskInside\n        ].forEach((hasMask, index) => {\n            const shade = navigator.shades[index] ??\n                (navigator.shades[index] = renderer.rect()\n                    .addClass('highcharts-navigator-mask' +\n                    (index === 1 ? '-inside' : '-outside'))\n                    .add(navigatorGroup));\n            if (!chart.styledMode) {\n                shade.attr({\n                    fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)'\n                });\n                if (index === 1) {\n                    shade.css(mouseCursor);\n                }\n            }\n        });\n        // Create the outline:\n        if (!navigator.outline) {\n            navigator.outline = renderer.path()\n                .addClass('highcharts-navigator-outline')\n                .add(navigatorGroup);\n        }\n        if (!chart.styledMode) {\n            navigator.outline.attr({\n                'stroke-width': navigatorOptions.outlineWidth,\n                stroke: navigatorOptions.outlineColor\n            });\n        }\n        // Create the handlers:\n        if (navigatorOptions.handles?.enabled) {\n            const handlesOptions = navigatorOptions.handles, { height, width } = handlesOptions;\n            [0, 1].forEach((index) => {\n                const symbolName = handlesOptions.symbols[index];\n                if (!navigator.handles[index] ||\n                    navigator.handles[index].symbolUrl !== symbolName) {\n                    // Generate symbol from scratch if we're dealing with an URL\n                    navigator.handles[index]?.destroy();\n                    navigator.handles[index] = renderer.symbol(symbolName, -width / 2 - 1, 0, width, height, handlesOptions);\n                    // Z index is 6 for right handle, 7 for left. Can't be 10,\n                    // because of the tooltip in inverted chart (#2908).\n                    navigator.handles[index].attr({ zIndex: 7 - index })\n                        .addClass('highcharts-navigator-handle ' +\n                        'highcharts-navigator-handle-' +\n                        ['left', 'right'][index]).add(navigatorGroup);\n                    navigator.addMouseEvents();\n                    // If the navigator symbol changed, update its path and name\n                }\n                else if (!navigator.handles[index].isImg &&\n                    navigator.handles[index].symbolName !== symbolName) {\n                    const symbolFn = symbols[symbolName], path = symbolFn.call(symbols, -width / 2 - 1, 0, width, height);\n                    navigator.handles[index].attr({\n                        d: path\n                    });\n                    navigator.handles[index].symbolName = symbolName;\n                }\n                if (chart.inverted) {\n                    navigator.handles[index].attr({\n                        rotation: 90,\n                        rotationOriginX: Math.floor(-width / 2),\n                        rotationOriginY: (height + width) / 2\n                    });\n                }\n                if (!chart.styledMode) {\n                    navigator.handles[index]\n                        .attr({\n                        fill: handlesOptions.backgroundColor,\n                        stroke: handlesOptions.borderColor,\n                        'stroke-width': handlesOptions.lineWidth,\n                        width: handlesOptions.width,\n                        height: handlesOptions.height,\n                        x: -width / 2 - 1,\n                        y: 0\n                    })\n                        .css(mouseCursor);\n                }\n            });\n        }\n    }\n    /**\n     * Update navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#update\n     *\n     * @param {Highcharts.NavigatorOptions} options\n     *        Options to merge in when updating navigator\n     */\n    update(options, redraw = false) {\n        const chart = this.chart, invertedUpdate = chart.options.chart.inverted !==\n            chart.scrollbar?.options.vertical;\n        Navigator_merge(true, chart.options.navigator, options);\n        this.navigatorOptions = chart.options.navigator || {};\n        this.setOpposite();\n        // Revert to destroy/init for navigator/scrollbar enabled toggle\n        if (Navigator_defined(options.enabled) || invertedUpdate) {\n            this.destroy();\n            this.navigatorEnabled = options.enabled || this.navigatorEnabled;\n            return this.init(chart);\n        }\n        if (this.navigatorEnabled) {\n            this.isDirty = true;\n            if (options.adaptToUpdatedData === false) {\n                this.baseSeries.forEach((series) => {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            if (options.adaptToUpdatedData) {\n                this.baseSeries.forEach((series) => {\n                    series.eventsToUnbind.push(Navigator_addEvent(series, 'updatedData', this.updatedDataHandler));\n                }, this);\n            }\n            // Update navigator series\n            if (options.series || options.baseSeries) {\n                this.setBaseSeries(void 0, false);\n            }\n            // Update navigator axis\n            if (options.height || options.xAxis || options.yAxis) {\n                this.height = options.height ?? this.height;\n                const offsets = this.getXAxisOffsets();\n                this.xAxis.update({\n                    ...options.xAxis,\n                    offsets,\n                    [chart.inverted ? 'width' : 'height']: this.height,\n                    [chart.inverted ? 'height' : 'width']: void 0\n                }, false);\n                this.yAxis.update({\n                    ...options.yAxis,\n                    [chart.inverted ? 'width' : 'height']: this.height\n                }, false);\n            }\n        }\n        if (redraw) {\n            chart.redraw();\n        }\n    }\n    /**\n     * Render the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#render\n     * @param {number} min\n     *        X axis value minimum\n     * @param {number} max\n     *        X axis value maximum\n     * @param {number} [pxMin]\n     *        Pixel value minimum\n     * @param {number} [pxMax]\n     *        Pixel value maximum\n     */\n    render(min, max, pxMin, pxMax) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, pointRange = xAxis.pointRange || 0, scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis, navigatorEnabled = navigator.navigatorEnabled, rendered = navigator.rendered, inverted = chart.inverted, minRange = chart.xAxis[0].minRange, maxRange = chart.xAxis[0].options.maxRange, scrollButtonSize = navigator.scrollButtonSize;\n        let navigatorWidth, scrollbarLeft, scrollbarTop, scrollbarHeight = navigator.scrollbarHeight, navigatorSize, verb;\n        // Don't redraw while moving the handles (#4703).\n        if (this.hasDragged && !Navigator_defined(pxMin)) {\n            return;\n        }\n        if (this.isDirty) {\n            // Update DOM navigator elements\n            this.renderElements();\n        }\n        min = Navigator_correctFloat(min - pointRange / 2);\n        max = Navigator_correctFloat(max + pointRange / 2);\n        // Don't render the navigator until we have data (#486, #4202, #5172).\n        if (!Navigator_isNumber(min) || !Navigator_isNumber(max)) {\n            // However, if navigator was already rendered, we may need to resize\n            // it. For example hidden series, but visible navigator (#6022).\n            if (rendered) {\n                pxMin = 0;\n                pxMax = Navigator_pick(xAxis.width, scrollbarXAxis.width);\n            }\n            else {\n                return;\n            }\n        }\n        navigator.left = Navigator_pick(xAxis.left, \n        // In case of scrollbar only, without navigator\n        chart.plotLeft + scrollButtonSize +\n            (inverted ? chart.plotWidth : 0));\n        let zoomedMax = navigator.size = navigatorSize = Navigator_pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -\n            2 * scrollButtonSize);\n        if (inverted) {\n            navigatorWidth = scrollbarHeight;\n        }\n        else {\n            navigatorWidth = navigatorSize + 2 * scrollButtonSize;\n        }\n        // Get the pixel position of the handles\n        pxMin = Navigator_pick(pxMin, xAxis.toPixels(min, true));\n        pxMax = Navigator_pick(pxMax, xAxis.toPixels(max, true));\n        // Verify (#1851, #2238)\n        if (!Navigator_isNumber(pxMin) || Math.abs(pxMin) === Infinity) {\n            pxMin = 0;\n            pxMax = navigatorWidth;\n        }\n        // Are we below the minRange? (#2618, #6191)\n        const newMin = xAxis.toValue(pxMin, true), newMax = xAxis.toValue(pxMax, true), currentRange = Math.abs(Navigator_correctFloat(newMax - newMin));\n        if (currentRange < minRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);\n            }\n        }\n        else if (Navigator_defined(maxRange) &&\n            Navigator_correctFloat(currentRange - pointRange) > maxRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);\n            }\n        }\n        // Handles are allowed to cross, but never exceed the plot area\n        navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);\n        navigator.zoomedMin = clamp(navigator.fixedWidth ?\n            navigator.zoomedMax - navigator.fixedWidth :\n            Math.min(pxMin, pxMax), 0, zoomedMax);\n        navigator.range = navigator.zoomedMax - navigator.zoomedMin;\n        zoomedMax = Math.round(navigator.zoomedMax);\n        const zoomedMin = Math.round(navigator.zoomedMin);\n        if (navigatorEnabled) {\n            navigator.navigatorGroup.attr({\n                visibility: 'inherit'\n            });\n            // Place elements\n            verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';\n            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            if (navigator.navigatorOptions.handles.enabled) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n        if (navigator.scrollbar) {\n            if (inverted) {\n                scrollbarTop = navigator.top - scrollButtonSize;\n                scrollbarLeft = navigator.left - scrollbarHeight +\n                    (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :\n                        // Multiple axes has offsets:\n                        (scrollbarXAxis.titleOffset || 0) +\n                            // Self margin from the axis.title\n                            scrollbarXAxis.axisTitleMargin);\n                scrollbarHeight = navigatorSize + 2 * scrollButtonSize;\n            }\n            else {\n                scrollbarTop = navigator.top + (navigatorEnabled ?\n                    navigator.height :\n                    -scrollbarHeight);\n                scrollbarLeft = navigator.left - scrollButtonSize;\n            }\n            // Reposition scrollbar\n            navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);\n            // Keep scale 0-1\n            navigator.scrollbar.setRange(\n            // Use real value, not rounded because range can be very small\n            // (#1716)\n            navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));\n        }\n        navigator.rendered = true;\n        this.isDirty = false;\n        Navigator_fireEvent(this, 'afterRender');\n    }\n    /**\n     * Set up the mouse and touch events for the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#addMouseEvents\n     */\n    addMouseEvents() {\n        const navigator = this, chart = navigator.chart, container = chart.container;\n        let eventsToUnbind = [], mouseMoveHandler, mouseUpHandler;\n        /**\n         * Create mouse events' handlers.\n         * Make them as separate functions to enable wrapping them:\n         */\n        navigator.mouseMoveHandler = mouseMoveHandler = function (e) {\n            navigator.onMouseMove(e);\n        };\n        navigator.mouseUpHandler = mouseUpHandler = function (e) {\n            navigator.onMouseUp(e);\n        };\n        // Add shades and handles mousedown events\n        eventsToUnbind = navigator.getPartsEvents('mousedown');\n        eventsToUnbind.push(\n        // Add mouse move and mouseup events. These are bind to doc/div,\n        // because Navigator.grabbedSomething flags are stored in mousedown\n        // events\n        Navigator_addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'mouseup', mouseUpHandler), \n        // Touch events\n        Navigator_addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'touchend', mouseUpHandler));\n        eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));\n        navigator.eventsToUnbind = eventsToUnbind;\n        // Data events\n        if (navigator.series && navigator.series[0]) {\n            eventsToUnbind.push(Navigator_addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {\n                chart.navigator.modifyNavigatorAxisExtremes();\n            }));\n        }\n    }\n    /**\n     * Generate events for handles and masks\n     *\n     * @private\n     * @function Highcharts.Navigator#getPartsEvents\n     *\n     * @param {string} eventName\n     *        Event name handler, 'mousedown' or 'touchstart'\n     *\n     * @return {Array<Function>}\n     *         An array of functions to remove navigator functions from the\n     *         events again.\n     */\n    getPartsEvents(eventName) {\n        const navigator = this, events = [];\n        ['shades', 'handles'].forEach(function (name) {\n            navigator[name].forEach(function (navigatorItem, index) {\n                events.push(Navigator_addEvent(navigatorItem.element, eventName, function (e) {\n                    navigator[name + 'Mousedown'](e, index);\n                }));\n            });\n        });\n        return events;\n    }\n    /**\n     * Mousedown on a shaded mask, either:\n     *\n     * - will be stored for future drag&drop\n     *\n     * - will directly shift to a new range\n     *\n     * @private\n     * @function Highcharts.Navigator#shadesMousedown\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     *\n     * @param {number} index\n     *        Index of a mask in Navigator.shades array\n     */\n    shadesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, zoomedMin = navigator.zoomedMin, navigatorSize = navigator.size, range = navigator.range;\n        let navigatorPosition = navigator.left, chartX = e.chartX, fixedMax, fixedMin, ext, left;\n        // For inverted chart, swap some options:\n        if (chart.inverted) {\n            chartX = e.chartY;\n            navigatorPosition = navigator.top;\n        }\n        if (index === 1) {\n            // Store information for drag&drop\n            navigator.grabbedCenter = chartX;\n            navigator.fixedWidth = range;\n            navigator.dragOffset = chartX - zoomedMin;\n        }\n        else {\n            // Shift the range by clicking on shaded areas\n            left = chartX - navigatorPosition - range / 2;\n            if (index === 0) {\n                left = Math.max(0, left);\n            }\n            else if (index === 2 && left + range >= navigatorSize) {\n                left = navigatorSize - range;\n                if (navigator.reversedExtremes) {\n                    // #7713\n                    left -= range;\n                    fixedMin = navigator.getUnionExtremes().dataMin;\n                }\n                else {\n                    // #2293, #3543\n                    fixedMax = navigator.getUnionExtremes().dataMax;\n                }\n            }\n            if (left !== zoomedMin) { // It has actually moved\n                navigator.fixedWidth = range; // #1370\n                ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);\n                if (Navigator_defined(ext.min)) { // #7411\n                    Navigator_fireEvent(this, 'setRange', {\n                        min: Math.min(ext.min, ext.max),\n                        max: Math.max(ext.min, ext.max),\n                        redraw: true,\n                        eventArguments: {\n                            trigger: 'navigator'\n                        }\n                    });\n                }\n            }\n        }\n    }\n    /**\n     * Mousedown on a handle mask.\n     * Will store necessary information for drag&drop.\n     *\n     * @private\n     * @function Highcharts.Navigator#handlesMousedown\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     * @param {number} index\n     *        Index of a handle in Navigator.handles array\n     */\n    handlesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, baseXAxis = chart.xAxis[0], \n        // For reversed axes, min and max are changed,\n        // so the other extreme should be stored\n        reverse = navigator.reversedExtremes;\n        if (index === 0) {\n            // Grab the left handle\n            navigator.grabbedLeft = true;\n            navigator.otherHandlePos = navigator.zoomedMax;\n            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;\n        }\n        else {\n            // Grab the right handle\n            navigator.grabbedRight = true;\n            navigator.otherHandlePos = navigator.zoomedMin;\n            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;\n        }\n        chart.setFixedRange(void 0);\n    }\n    /**\n     * Mouse move event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseMove\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    onMouseMove(e) {\n        const navigator = this, chart = navigator.chart, navigatorSize = navigator.navigatorSize, range = navigator.range, dragOffset = navigator.dragOffset, inverted = chart.inverted;\n        let left = navigator.left, chartX;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when holding\n        // the finger down in the center of the scrollbar. This should be\n        // ignored.\n        if (!e.touches || e.touches[0].pageX !== 0) { // #4696\n            e = chart.pointer?.normalize(e) || e;\n            chartX = e.chartX;\n            // Swap some options for inverted chart\n            if (inverted) {\n                left = navigator.top;\n                chartX = e.chartY;\n            }\n            // Drag left handle or top handle\n            if (navigator.grabbedLeft) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, chartX - left, navigator.otherHandlePos);\n                // Drag right handle or bottom handle\n            }\n            else if (navigator.grabbedRight) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, navigator.otherHandlePos, chartX - left);\n                // Drag scrollbar or open area in navigator\n            }\n            else if (navigator.grabbedCenter) {\n                navigator.hasDragged = true;\n                if (chartX < dragOffset) { // Outside left\n                    chartX = dragOffset;\n                    // Outside right\n                }\n                else if (chartX >\n                    navigatorSize + dragOffset - range) {\n                    chartX = navigatorSize + dragOffset - range;\n                }\n                navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);\n            }\n            if (navigator.hasDragged &&\n                navigator.scrollbar &&\n                Navigator_pick(navigator.scrollbar.options.liveRedraw, \n                // By default, don't run live redraw on touch\n                // devices or if the chart is in boost.\n                !Navigator_isTouchDevice &&\n                    !this.chart.boosted)) {\n                e.DOMType = e.type;\n                setTimeout(function () {\n                    navigator.onMouseUp(e);\n                }, 0);\n            }\n        }\n    }\n    /**\n     * Mouse up event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseUp\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    onMouseUp(e) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, scrollbar = navigator.scrollbar, DOMEvent = e.DOMEvent || e, inverted = chart.inverted, verb = navigator.rendered && !navigator.hasDragged ?\n            'animate' : 'attr';\n        let zoomedMax, zoomedMin, unionExtremes, fixedMin, fixedMax, ext;\n        if (\n        // MouseUp is called for both, navigator and scrollbar (that order),\n        // which causes calling afterSetExtremes twice. Prevent first call\n        // by checking if scrollbar is going to set new extremes (#6334)\n        (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||\n            e.trigger === 'scrollbar') {\n            unionExtremes = navigator.getUnionExtremes();\n            // When dragging one handle, make sure the other one doesn't change\n            if (navigator.zoomedMin === navigator.otherHandlePos) {\n                fixedMin = navigator.fixedExtreme;\n            }\n            else if (navigator.zoomedMax === navigator.otherHandlePos) {\n                fixedMax = navigator.fixedExtreme;\n            }\n            // Snap to right edge (#4076)\n            if (navigator.zoomedMax === navigator.size) {\n                fixedMax = navigator.reversedExtremes ?\n                    unionExtremes.dataMin :\n                    unionExtremes.dataMax;\n            }\n            // Snap to left edge (#7576)\n            if (navigator.zoomedMin === 0) {\n                fixedMin = navigator.reversedExtremes ?\n                    unionExtremes.dataMax :\n                    unionExtremes.dataMin;\n            }\n            ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);\n            if (Navigator_defined(ext.min)) {\n                Navigator_fireEvent(this, 'setRange', {\n                    min: Math.min(ext.min, ext.max),\n                    max: Math.max(ext.min, ext.max),\n                    redraw: true,\n                    animation: navigator.hasDragged ? false : null,\n                    eventArguments: {\n                        trigger: 'navigator',\n                        triggerOp: 'navigator-drag',\n                        DOMEvent: DOMEvent // #1838\n                    }\n                });\n            }\n        }\n        if (e.DOMType !== 'mousemove' &&\n            e.DOMType !== 'touchmove') {\n            navigator.grabbedLeft = navigator.grabbedRight =\n                navigator.grabbedCenter = navigator.fixedWidth =\n                    navigator.fixedExtreme = navigator.otherHandlePos =\n                        navigator.hasDragged = navigator.dragOffset = null;\n        }\n        // Update position of navigator shades, outline and handles (#12573)\n        if (navigator.navigatorEnabled &&\n            Navigator_isNumber(navigator.zoomedMin) &&\n            Navigator_isNumber(navigator.zoomedMax)) {\n            zoomedMin = Math.round(navigator.zoomedMin);\n            zoomedMax = Math.round(navigator.zoomedMax);\n            if (navigator.shades) {\n                navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.outline) {\n                navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.navigatorOptions.handles.enabled &&\n                Object.keys(navigator.handles).length ===\n                    navigator.handles.length) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n    }\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeEvents\n     */\n    removeEvents() {\n        if (this.eventsToUnbind) {\n            this.eventsToUnbind.forEach(function (unbind) {\n                unbind();\n            });\n            this.eventsToUnbind = void 0;\n        }\n        this.removeBaseSeriesEvents();\n    }\n    /**\n     * Remove data events.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeBaseSeriesEvents\n     */\n    removeBaseSeriesEvents() {\n        const baseSeries = this.baseSeries || [];\n        if (this.navigatorEnabled && baseSeries[0]) {\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            // We only listen for extremes-events on the first baseSeries\n            if (baseSeries[0].xAxis) {\n                Navigator_removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);\n            }\n        }\n    }\n    /**\n     * Calculate the navigator xAxis offsets\n     *\n     * @private\n     */\n    getXAxisOffsets() {\n        return (this.chart.inverted ?\n            [this.scrollButtonSize, 0, -this.scrollButtonSize, 0] :\n            [0, -this.scrollButtonSize, 0, this.scrollButtonSize]);\n    }\n    /**\n     * Initialize the Navigator object\n     *\n     * @private\n     * @function Highcharts.Navigator#init\n     */\n    init(chart) {\n        const chartOptions = chart.options, navigatorOptions = chartOptions.navigator || {}, navigatorEnabled = navigatorOptions.enabled, scrollbarOptions = chartOptions.scrollbar || {}, scrollbarEnabled = scrollbarOptions.enabled, height = navigatorEnabled && navigatorOptions.height || 0, scrollbarHeight = scrollbarEnabled && scrollbarOptions.height || 0, scrollButtonSize = scrollbarOptions.buttonsEnabled && scrollbarHeight || 0;\n        this.handles = [];\n        this.shades = [];\n        this.chart = chart;\n        this.setBaseSeries();\n        this.height = height;\n        this.scrollbarHeight = scrollbarHeight;\n        this.scrollButtonSize = scrollButtonSize;\n        this.scrollbarEnabled = scrollbarEnabled;\n        this.navigatorEnabled = navigatorEnabled;\n        this.navigatorOptions = navigatorOptions;\n        this.scrollbarOptions = scrollbarOptions;\n        this.setOpposite();\n        const navigator = this, baseSeries = navigator.baseSeries, xAxisIndex = chart.xAxis.length, yAxisIndex = chart.yAxis.length, baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||\n            chart.xAxis[0] || { options: {} };\n        chart.isDirtyBox = true;\n        if (navigator.navigatorEnabled) {\n            const offsets = this.getXAxisOffsets();\n            // An x axis is required for scrollbar also\n            navigator.xAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge({\n                // Inherit base xAxis' break, ordinal options and overscroll\n                breaks: baseXaxis.options.breaks,\n                ordinal: baseXaxis.options.ordinal,\n                overscroll: baseXaxis.options.overscroll\n            }, navigatorOptions.xAxis, {\n                type: 'datetime',\n                yAxis: navigatorOptions.yAxis?.id,\n                index: xAxisIndex,\n                isInternal: true,\n                offset: 0,\n                keepOrdinalPadding: true, // #2436\n                startOnTick: false,\n                endOnTick: false,\n                // Inherit base xAxis' padding when ordinal is false (#16915).\n                minPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.minPadding,\n                maxPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.maxPadding,\n                zoomEnabled: false\n            }, chart.inverted ? {\n                offsets,\n                width: height\n            } : {\n                offsets,\n                height\n            }), 'xAxis');\n            navigator.yAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge(navigatorOptions.yAxis, {\n                alignTicks: false,\n                offset: 0,\n                index: yAxisIndex,\n                isInternal: true,\n                reversed: Navigator_pick((navigatorOptions.yAxis &&\n                    navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060\n                zoomEnabled: false\n            }, chart.inverted ? {\n                width: height\n            } : {\n                height: height\n            }), 'yAxis');\n            // If we have a base series, initialize the navigator series\n            if (baseSeries || navigatorOptions.series.data) {\n                navigator.updateNavigatorSeries(false);\n                // If not, set up an event to listen for added series\n            }\n            else if (chart.series.length === 0) {\n                navigator.unbindRedraw = Navigator_addEvent(chart, 'beforeRedraw', function () {\n                    // We've got one, now add it as base\n                    if (chart.series.length > 0 && !navigator.series) {\n                        navigator.setBaseSeries();\n                        navigator.unbindRedraw(); // Reset\n                    }\n                });\n            }\n            navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);\n            // Render items, so we can bind events to them:\n            navigator.renderElements();\n            // Add mouse events\n            navigator.addMouseEvents();\n            // In case of scrollbar only, fake an x axis to get translation\n        }\n        else {\n            navigator.xAxis = {\n                chart,\n                navigatorAxis: {\n                    fake: true\n                },\n                translate: function (value, reverse) {\n                    const axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollButtonSize, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;\n                    return reverse ?\n                        // From pixel to value\n                        (value * valueRange / scrollTrackWidth) + min :\n                        // From value to pixel\n                        scrollTrackWidth * (value - min) / valueRange;\n                },\n                toPixels: function (value) {\n                    return this.translate(value);\n                },\n                toValue: function (value) {\n                    return this.translate(value, true);\n                }\n            };\n            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;\n            navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxisComposition.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));\n        }\n        // Initialize the scrollbar\n        if (chart.options.scrollbar.enabled) {\n            const options = Navigator_merge(chart.options.scrollbar, { vertical: chart.inverted });\n            if (!Navigator_isNumber(options.margin) && navigator.navigatorEnabled) {\n                options.margin = chart.inverted ? -3 : 3;\n            }\n            chart.scrollbar = navigator.scrollbar = new Scrollbar_Scrollbar(chart.renderer, options, chart);\n            Navigator_addEvent(navigator.scrollbar, 'changed', function (e) {\n                const range = navigator.size, to = range * this.to, from = range * this.from;\n                navigator.hasDragged = navigator.scrollbar.hasDragged;\n                navigator.render(0, 0, from, to);\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    setTimeout(function () {\n                        navigator.onMouseUp(e);\n                    });\n                }\n            });\n        }\n        // Add data events\n        navigator.addBaseSeriesEvents();\n        // Add redraw events\n        navigator.addChartEvents();\n    }\n    /**\n     * Set the opposite property on navigator\n     *\n     * @private\n     */\n    setOpposite() {\n        const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, chart = this.chart;\n        this.opposite = Navigator_pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262\n    }\n    /**\n     * Get the union data extremes of the chart - the outer data extremes of the\n     * base X axis and the navigator axis.\n     *\n     * @private\n     * @function Highcharts.Navigator#getUnionExtremes\n     */\n    getUnionExtremes(returnFalseOnNoBaseSeries) {\n        const baseAxis = this.chart.xAxis[0], time = this.chart.time, navAxis = this.xAxis, navAxisOptions = navAxis.options, baseAxisOptions = baseAxis.options;\n        let ret;\n        if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {\n            ret = {\n                dataMin: Navigator_pick(// #4053\n                time.parse(navAxisOptions?.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),\n                dataMax: Navigator_pick(time.parse(navAxisOptions?.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))\n            };\n        }\n        return ret;\n    }\n    /**\n     * Set the base series and update the navigator series from this. With a bit\n     * of modification we should be able to make this an API method to be called\n     * from the outside\n     *\n     * @private\n     * @function Highcharts.Navigator#setBaseSeries\n     * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]\n     *        Additional series options for a navigator\n     * @param {boolean} [redraw]\n     *        Whether to redraw after update.\n     */\n    setBaseSeries(baseSeriesOptions, redraw) {\n        const chart = this.chart, baseSeries = this.baseSeries = [];\n        baseSeriesOptions = (baseSeriesOptions ||\n            chart.options && chart.options.navigator.baseSeries ||\n            (chart.series.length ?\n                // Find the first non-navigator series (#8430)\n                find(chart.series, (s) => (!s.options.isInternal)).index :\n                0));\n        // Iterate through series and add the ones that should be shown in\n        // navigator.\n        (chart.series || []).forEach((series, i) => {\n            if (\n            // Don't include existing nav series\n            !series.options.isInternal &&\n                (series.options.showInNavigator ||\n                    (i === baseSeriesOptions ||\n                        series.options.id === baseSeriesOptions) &&\n                        series.options.showInNavigator !== false)) {\n                baseSeries.push(series);\n            }\n        });\n        // When run after render, this.xAxis already exists\n        if (this.xAxis && !this.xAxis.navigatorAxis.fake) {\n            this.updateNavigatorSeries(true, redraw);\n        }\n    }\n    /**\n     * Update series in the navigator from baseSeries, adding new if does not\n     * exist.\n     *\n     * @private\n     * @function Highcharts.Navigator.updateNavigatorSeries\n     */\n    updateNavigatorSeries(addEvents, redraw) {\n        const navigator = this, chart = navigator.chart, baseSeries = navigator.baseSeries, navSeriesMixin = {\n            enableMouseTracking: false,\n            index: null, // #6162\n            linkedTo: null, // #6734\n            group: 'nav', // For columns\n            padXAxis: false,\n            xAxis: this.navigatorOptions.xAxis?.id,\n            yAxis: this.navigatorOptions.yAxis?.id,\n            showInLegend: false,\n            stacking: void 0, // #4823\n            isInternal: true,\n            states: {\n                inactive: {\n                    opacity: 1\n                }\n            }\n        }, \n        // Remove navigator series that are no longer in the baseSeries\n        navigatorSeries = navigator.series =\n            (navigator.series || []).filter((navSeries) => {\n                const base = navSeries.baseSeries;\n                if (baseSeries.indexOf(base) < 0) { // Not in array\n                    // If there is still a base series connected to this\n                    // series, remove event handler and reference.\n                    if (base) {\n                        Navigator_removeEvent(base, 'updatedData', navigator.updatedDataHandler);\n                        delete base.navigatorSeries;\n                    }\n                    // Kill the nav series. It may already have been\n                    // destroyed (#8715).\n                    if (navSeries.chart) {\n                        navSeries.destroy();\n                    }\n                    return false;\n                }\n                return true;\n            });\n        let baseOptions, mergedNavSeriesOptions, chartNavigatorSeriesOptions = navigator.navigatorOptions.series, baseNavigatorOptions;\n        // Go through each base series and merge the options to create new\n        // series\n        if (baseSeries && baseSeries.length) {\n            baseSeries.forEach((base) => {\n                const linkedNavSeries = base.navigatorSeries, userNavOptions = Navigator_extend(\n                // Grab color and visibility from base as default\n                {\n                    color: base.color,\n                    visible: base.visible\n                }, !Navigator_isArray(chartNavigatorSeriesOptions) ?\n                    chartNavigatorSeriesOptions :\n                    Navigator_defaultOptions.navigator.series);\n                // Don't update if the series exists in nav and we have disabled\n                // adaptToUpdatedData.\n                if (linkedNavSeries &&\n                    navigator.navigatorOptions.adaptToUpdatedData === false) {\n                    return;\n                }\n                navSeriesMixin.name = 'Navigator ' + baseSeries.length;\n                baseOptions = base.options || {};\n                baseNavigatorOptions = baseOptions.navigatorOptions || {};\n                // The dataLabels options are not merged correctly\n                // if the settings are an array, #13847.\n                userNavOptions.dataLabels = splat(userNavOptions.dataLabels);\n                mergedNavSeriesOptions = Navigator_merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);\n                // Once nav series type is resolved, pick correct pointRange\n                mergedNavSeriesOptions.pointRange = Navigator_pick(\n                // Stricte set pointRange in options\n                userNavOptions.pointRange, baseNavigatorOptions.pointRange, \n                // Fallback to default values, e.g. `null` for column\n                Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);\n                // Merge data separately. Do a slice to avoid mutating the\n                // navigator options from base series (#4923).\n                const navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;\n                navigator.hasNavigatorData =\n                    navigator.hasNavigatorData || !!navigatorSeriesData;\n                mergedNavSeriesOptions.data = (navigatorSeriesData ||\n                    baseOptions.data?.slice(0));\n                // Update or add the series\n                if (linkedNavSeries && linkedNavSeries.options) {\n                    linkedNavSeries.update(mergedNavSeriesOptions, redraw);\n                }\n                else {\n                    base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);\n                    // Set data on initial run with dataSorting enabled (#20318)\n                    chart.setSortedData();\n                    base.navigatorSeries.baseSeries = base; // Store ref\n                    navigatorSeries.push(base.navigatorSeries);\n                }\n            });\n        }\n        // If user has defined data (and no base series) or explicitly defined\n        // navigator.series as an array, we create these series on top of any\n        // base series.\n        if (chartNavigatorSeriesOptions.data &&\n            !(baseSeries && baseSeries.length) ||\n            Navigator_isArray(chartNavigatorSeriesOptions)) {\n            navigator.hasNavigatorData = false;\n            // Allow navigator.series to be an array\n            chartNavigatorSeriesOptions =\n                splat(chartNavigatorSeriesOptions);\n            chartNavigatorSeriesOptions.forEach((userSeriesOptions, i) => {\n                navSeriesMixin.name =\n                    'Navigator ' + (navigatorSeries.length + 1);\n                mergedNavSeriesOptions = Navigator_merge(Navigator_defaultOptions.navigator.series, {\n                    // Since we don't have a base series to pull color from,\n                    // try to fake it by using color from series with same\n                    // index. Otherwise pull from the colors array. We need\n                    // an explicit color as otherwise updates will increment\n                    // color counter and we'll get a new color for each\n                    // update of the nav series.\n                    color: chart.series[i] &&\n                        !chart.series[i].options.isInternal &&\n                        chart.series[i].color ||\n                        chart.options.colors[i] ||\n                        chart.options.colors[0]\n                }, navSeriesMixin, userSeriesOptions);\n                mergedNavSeriesOptions.data = userSeriesOptions.data;\n                if (mergedNavSeriesOptions.data) {\n                    navigator.hasNavigatorData = true;\n                    navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));\n                }\n            });\n        }\n        if (addEvents) {\n            this.addBaseSeriesEvents();\n        }\n    }\n    /**\n     * Add data events.\n     * For example when main series is updated we need to recalculate extremes\n     *\n     * @private\n     * @function Highcharts.Navigator#addBaseSeriesEvent\n     */\n    addBaseSeriesEvents() {\n        const navigator = this, baseSeries = navigator.baseSeries || [];\n        // Bind modified extremes event to first base's xAxis only.\n        // In event of > 1 base-xAxes, the navigator will ignore those.\n        // Adding this multiple times to the same axis is no problem, as\n        // duplicates should be discarded by the browser.\n        if (baseSeries[0] && baseSeries[0].xAxis) {\n            baseSeries[0].eventsToUnbind.push(Navigator_addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes));\n        }\n        baseSeries.forEach((base) => {\n            // Link base series show/hide to navigator series visibility\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'show', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(true, false);\n                }\n            }));\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'hide', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(false, false);\n                }\n            }));\n            // Respond to updated data in the base series, unless explicitly\n            // not adapting to data changes.\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                if (base.xAxis) {\n                    base.eventsToUnbind.push(Navigator_addEvent(base, 'updatedData', this.updatedDataHandler));\n                }\n            }\n            // Handle series removal\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'remove', function () {\n                if (baseSeries) {\n                    erase(baseSeries, base); // #21043\n                }\n                if (this.navigatorSeries && navigator.series) {\n                    erase(navigator.series, this.navigatorSeries);\n                    if (Navigator_defined(this.navigatorSeries.options)) {\n                        this.navigatorSeries.remove(false);\n                    }\n                    delete this.navigatorSeries;\n                }\n            }));\n        });\n    }\n    /**\n     * Get minimum from all base series connected to the navigator\n     * @private\n     * @param {number} currentSeriesMin\n     *        Minium from the current series\n     * @return {number}\n     *         Minimum from all series\n     */\n    getBaseSeriesMin(currentSeriesMin) {\n        return this.baseSeries.reduce(function (min, series) {\n            // #10193\n            return Math.min(min, series.getColumn('x')[0] ?? min);\n        }, currentSeriesMin);\n    }\n    /**\n     * Set the navigator x axis extremes to reflect the total. The navigator\n     * extremes should always be the extremes of the union of all series in the\n     * chart as well as the navigator series.\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyNavigatorAxisExtremes\n     */\n    modifyNavigatorAxisExtremes() {\n        const xAxis = this.xAxis;\n        if (typeof xAxis.getExtremes !== 'undefined') {\n            const unionExtremes = this.getUnionExtremes(true);\n            if (unionExtremes &&\n                (unionExtremes.dataMin !== xAxis.min ||\n                    unionExtremes.dataMax !== xAxis.max)) {\n                xAxis.min = unionExtremes.dataMin;\n                xAxis.max = unionExtremes.dataMax;\n            }\n        }\n    }\n    /**\n     * Hook to modify the base axis extremes with information from the Navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyBaseAxisExtremes\n     */\n    modifyBaseAxisExtremes() {\n        const baseXAxis = this, navigator = baseXAxis.chart.navigator, baseExtremes = baseXAxis.getExtremes(), baseMin = baseExtremes.min, baseMax = baseExtremes.max, baseDataMin = baseExtremes.dataMin, baseDataMax = baseExtremes.dataMax, range = baseMax - baseMin, stickToMin = navigator.stickToMin, stickToMax = navigator.stickToMax, overscroll = Navigator_pick(baseXAxis.ordinal?.convertOverscroll(baseXAxis.options.overscroll), 0), navigatorSeries = navigator.series && navigator.series[0], hasSetExtremes = !!baseXAxis.setExtremes, \n        // When the extremes have been set by range selector button, don't\n        // stick to min or max. The range selector buttons will handle the\n        // extremes. (#5489)\n        unmutable = baseXAxis.eventArgs &&\n            baseXAxis.eventArgs.trigger === 'rangeSelectorButton';\n        let newMax, newMin;\n        if (!unmutable) {\n            // If the zoomed range is already at the min, move it to the right\n            // as new data comes in\n            if (stickToMin) {\n                newMin = baseDataMin;\n                newMax = newMin + range;\n            }\n            // If the zoomed range is already at the max, move it to the right\n            // as new data comes in\n            if (stickToMax) {\n                newMax = baseDataMax + overscroll;\n                // If stickToMin is true, the new min value is set above\n                if (!stickToMin) {\n                    newMin = Math.max(baseDataMin, // Don't go below data extremes (#13184)\n                    newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?\n                        navigatorSeries.xData[0] :\n                        -Number.MAX_VALUE));\n                }\n            }\n            // Update the extremes\n            if (hasSetExtremes && (stickToMin || stickToMax)) {\n                if (Navigator_isNumber(newMin)) {\n                    baseXAxis.min = baseXAxis.userMin = newMin;\n                    baseXAxis.max = baseXAxis.userMax = newMax;\n                }\n            }\n        }\n        // Reset\n        navigator.stickToMin =\n            navigator.stickToMax = null;\n    }\n    /**\n     * Handler for updated data on the base series. When data is modified, the\n     * navigator series must reflect it. This is called from the Chart.redraw\n     * function before axis and series extremes are computed.\n     *\n     * @private\n     * @function Highcharts.Navigator#updateDataHandler\n     */\n    updatedDataHandler() {\n        const navigator = this.chart.navigator, baseSeries = this, navigatorSeries = this.navigatorSeries, shouldStickToMax = navigator.reversedExtremes ?\n            Math.round(navigator.zoomedMin) === 0 :\n            Math.round(navigator.zoomedMax) >= Math.round(navigator.size);\n        // If the scrollbar is scrolled all the way to the right, keep right as\n        // new data comes in, unless user set navigator.stickToMax to false.\n        navigator.stickToMax = Navigator_pick(this.chart.options.navigator &&\n            this.chart.options.navigator.stickToMax, shouldStickToMax);\n        navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);\n        // Set the navigator series data to the new data of the base series\n        if (navigatorSeries && !navigator.hasNavigatorData) {\n            navigatorSeries.options.pointStart = baseSeries.getColumn('x')[0];\n            navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414\n        }\n    }\n    /**\n     * Detect if the zoomed area should stick to the minimum, #14742.\n     *\n     * @private\n     * @function Highcharts.Navigator#shouldStickToMin\n     */\n    shouldStickToMin(baseSeries, navigator) {\n        const xDataMin = navigator.getBaseSeriesMin(baseSeries.getColumn('x')[0]), xAxis = baseSeries.xAxis, max = xAxis.max, min = xAxis.min, range = xAxis.options.range;\n        let stickToMin = true;\n        if (Navigator_isNumber(max) && Navigator_isNumber(min)) {\n            // If range declared, stick to the minimum only if the range\n            // is smaller than the data set range.\n            if (range && max - xDataMin > 0) {\n                stickToMin = max - xDataMin < range;\n            }\n            else {\n                // If the current axis minimum falls outside the new\n                // updated dataset, we must adjust.\n                stickToMin = min <= xDataMin;\n            }\n        }\n        else {\n            stickToMin = false; // #15864\n        }\n        return stickToMin;\n    }\n    /**\n     * Add chart events, like redrawing navigator, when chart requires that.\n     *\n     * @private\n     * @function Highcharts.Navigator#addChartEvents\n     */\n    addChartEvents() {\n        if (!this.eventsToUnbind) {\n            this.eventsToUnbind = [];\n        }\n        this.eventsToUnbind.push(\n        // Move the scrollbar after redraw, like after data updata even if\n        // axes don't redraw\n        Navigator_addEvent(this.chart, 'redraw', function () {\n            const navigator = this.navigator, xAxis = navigator && (navigator.baseSeries &&\n                navigator.baseSeries[0] &&\n                navigator.baseSeries[0].xAxis ||\n                this.xAxis[0]); // #5709, #13114\n            if (xAxis) {\n                navigator.render(xAxis.min, xAxis.max);\n            }\n        }), \n        // Make room for the navigator, can be placed around the chart:\n        Navigator_addEvent(this.chart, 'getMargins', function () {\n            const chart = this, navigator = chart.navigator;\n            let marginName = navigator.opposite ?\n                'plotTop' : 'marginBottom';\n            if (chart.inverted) {\n                marginName = navigator.opposite ?\n                    'marginRight' : 'plotLeft';\n            }\n            chart[marginName] =\n                (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?\n                    navigator.height + navigator.scrollbarHeight :\n                    0) + navigator.navigatorOptions.margin;\n        }), Navigator_addEvent(Navigator, 'setRange', function (e) {\n            this.chart.xAxis[0].setExtremes(e.min, e.max, e.redraw, e.animation, e.eventArguments);\n        }));\n    }\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Navigator#destroy\n     */\n    destroy() {\n        // Disconnect events added in addEvents\n        this.removeEvents();\n        if (this.xAxis) {\n            erase(this.chart.xAxis, this.xAxis);\n            erase(this.chart.axes, this.xAxis);\n        }\n        if (this.yAxis) {\n            erase(this.chart.yAxis, this.yAxis);\n            erase(this.chart.axes, this.yAxis);\n        }\n        // Destroy series\n        (this.series || []).forEach((s) => {\n            if (s.destroy) {\n                s.destroy();\n            }\n        });\n        // Destroy properties\n        [\n            'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',\n            'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',\n            'rendered'\n        ].forEach((prop) => {\n            if (this[prop] && this[prop].destroy) {\n                this[prop].destroy();\n            }\n            this[prop] = null;\n        });\n        // Destroy elements in collection\n        [this.handles].forEach((coll) => {\n            Navigator_destroyObjectProperties(coll);\n        });\n        this.navigatorEnabled = false;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Navigator_Navigator = (Navigator);\n\n;// ./code/es-modules/Data/DataTableCore.js\n/* *\n *\n *  (c) 2009-2024 Highsoft AS\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n *  Authors:\n *  - Sophie Bremer\n *  - Gøran Slettemark\n *  - Torstein Hønsi\n *\n * */\n\n\nconst { fireEvent: DataTableCore_fireEvent, isArray: DataTableCore_isArray, objectEach, uniqueKey } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * Class to manage columns and rows in a table structure. It provides methods\n * to add, remove, and manipulate columns and rows, as well as to retrieve data\n * from specific cells.\n *\n * @class\n * @name Highcharts.DataTable\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\nclass DataTableCore {\n    /**\n     * Constructs an instance of the DataTable class.\n     *\n     * @example\n     * const dataTable = new Highcharts.DataTableCore({\n     *   columns: {\n     *     year: [2020, 2021, 2022, 2023],\n     *     cost: [11, 13, 12, 14],\n     *     revenue: [12, 15, 14, 18]\n     *   }\n     * });\n\n     *\n     * @param {Highcharts.DataTableOptions} [options]\n     * Options to initialize the new DataTable instance.\n     */\n    constructor(options = {}) {\n        /**\n         * Whether the ID was automatic generated or given in the constructor.\n         *\n         * @name Highcharts.DataTable#autoId\n         * @type {boolean}\n         */\n        this.autoId = !options.id;\n        this.columns = {};\n        /**\n         * ID of the table for indentification purposes.\n         *\n         * @name Highcharts.DataTable#id\n         * @type {string}\n         */\n        this.id = (options.id || uniqueKey());\n        this.modified = this;\n        this.rowCount = 0;\n        this.versionTag = uniqueKey();\n        let rowCount = 0;\n        objectEach(options.columns || {}, (column, columnName) => {\n            this.columns[columnName] = column.slice();\n            rowCount = Math.max(rowCount, column.length);\n        });\n        this.applyRowCount(rowCount);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Applies a row count to the table by setting the `rowCount` property and\n     * adjusting the length of all columns.\n     *\n     * @private\n     * @param {number} rowCount The new row count.\n     */\n    applyRowCount(rowCount) {\n        this.rowCount = rowCount;\n        objectEach(this.columns, (column) => {\n            if (DataTableCore_isArray(column)) { // Not on typed array\n                column.length = rowCount;\n            }\n        });\n    }\n    /**\n     * Fetches the given column by the canonical column name. Simplified version\n     * of the full `DataTable.getRow` method, always returning by reference.\n     *\n     * @param {string} columnName\n     * Name of the column to get.\n     *\n     * @return {Highcharts.DataTableColumn|undefined}\n     * A copy of the column, or `undefined` if not found.\n     */\n    getColumn(columnName, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        return this.columns[columnName];\n    }\n    /**\n     * Retrieves all or the given columns. Simplified version of the full\n     * `DataTable.getColumns` method, always returning by reference.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Highcharts.DataTableColumnCollection}\n     * Collection of columns. If a requested column was not found, it is\n     * `undefined`.\n     */\n    getColumns(columnNames, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        return (columnNames || Object.keys(this.columns)).reduce((columns, columnName) => {\n            columns[columnName] = this.columns[columnName];\n            return columns;\n        }, {});\n    }\n    /**\n     * Retrieves the row at a given index.\n     *\n     * @param {number} rowIndex\n     * Row index to retrieve. First row has index 0.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Record<string, number|string|undefined>|undefined}\n     * Returns the row values, or `undefined` if not found.\n     */\n    getRow(rowIndex, columnNames) {\n        return (columnNames || Object.keys(this.columns)).map((key) => this.columns[key]?.[rowIndex]);\n    }\n    /**\n     * Sets cell values for a column. Will insert a new column, if not found.\n     *\n     * @param {string} columnName\n     * Column name to set.\n     *\n     * @param {Highcharts.DataTableColumn} [column]\n     * Values to set in the column.\n     *\n     * @param {number} [rowIndex=0]\n     * Index of the first row to change. (Default: 0)\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    setColumn(columnName, column = [], rowIndex = 0, eventDetail) {\n        this.setColumns({ [columnName]: column }, rowIndex, eventDetail);\n    }\n    /**\n     * * Sets cell values for multiple columns. Will insert new columns, if not\n     * found. Simplified version of the full `DataTable.setColumns`, limited to\n     * full replacement of the columns (undefined `rowIndex`).\n     *\n     * @param {Highcharts.DataTableColumnCollection} columns\n     * Columns as a collection, where the keys are the column names.\n     *\n     * @param {number} [rowIndex]\n     * Index of the first row to change. Keep undefined to reset.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    setColumns(columns, rowIndex, eventDetail) {\n        let rowCount = this.rowCount;\n        objectEach(columns, (column, columnName) => {\n            this.columns[columnName] = column.slice();\n            rowCount = column.length;\n        });\n        this.applyRowCount(rowCount);\n        if (!eventDetail?.silent) {\n            DataTableCore_fireEvent(this, 'afterSetColumns');\n            this.versionTag = uniqueKey();\n        }\n    }\n    /**\n     * Sets cell values of a row. Will insert a new row if no index was\n     * provided, or if the index is higher than the total number of table rows.\n     * A simplified version of the full `DateTable.setRow`, limited to objects.\n     *\n     * @param {Record<string, number|string|undefined>} row\n     * Cell values to set.\n     *\n     * @param {number} [rowIndex]\n     * Index of the row to set. Leave `undefind` to add as a new row.\n     *\n     * @param {boolean} [insert]\n     * Whether to insert the row at the given index, or to overwrite the row.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #afterSetRows\n     */\n    setRow(row, rowIndex = this.rowCount, insert, eventDetail) {\n        const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n        objectEach(row, (cellValue, columnName) => {\n            const column = columns[columnName] ||\n                eventDetail?.addColumns !== false && new Array(indexRowCount);\n            if (column) {\n                if (insert) {\n                    column.splice(rowIndex, 0, cellValue);\n                }\n                else {\n                    column[rowIndex] = cellValue;\n                }\n                columns[columnName] = column;\n            }\n        });\n        if (indexRowCount > this.rowCount) {\n            this.applyRowCount(indexRowCount);\n        }\n        if (!eventDetail?.silent) {\n            DataTableCore_fireEvent(this, 'afterSetRows');\n            this.versionTag = uniqueKey();\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Data_DataTableCore = (DataTableCore);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A column of values in a data table.\n * @typedef {Array<boolean|null|number|string|undefined>} Highcharts.DataTableColumn\n */ /**\n* A collection of data table columns defined by a object where the key is the\n* column name and the value is an array of the column values.\n* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection\n*/\n/**\n * Options for the `DataTable` or `DataTableCore` classes.\n * @interface Highcharts.DataTableOptions\n */ /**\n* The column options for the data table. The columns are defined by an object\n* where the key is the column ID and the value is an array of the column\n* values.\n*\n* @name Highcharts.DataTableOptions.columns\n* @type {Highcharts.DataTableColumnCollection|undefined}\n*/ /**\n* Custom ID to identify the new DataTable instance.\n*\n* @name Highcharts.DataTableOptions.id\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es-modules/Core/Axis/OrdinalAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { addEvent: OrdinalAxis_addEvent, correctFloat: OrdinalAxis_correctFloat, css, defined: OrdinalAxis_defined, error, isNumber: OrdinalAxis_isNumber, pick: OrdinalAxis_pick, timeUnits, isString: OrdinalAxis_isString } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Extends the axis with ordinal support.\n * @private\n */\nvar OrdinalAxis;\n(function (OrdinalAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends the axis with ordinal support.\n     *\n     * @private\n     *\n     * @param AxisClass\n     * Axis class to extend.\n     *\n     * @param ChartClass\n     * Chart class to use.\n     *\n     * @param SeriesClass\n     * Series class to use.\n     */\n    function compose(AxisClass, SeriesClass, ChartClass) {\n        const axisProto = AxisClass.prototype;\n        if (!axisProto.ordinal2lin) {\n            axisProto.getTimeTicks = getTimeTicks;\n            axisProto.index2val = index2val;\n            axisProto.lin2val = lin2val;\n            axisProto.val2lin = val2lin;\n            // Record this to prevent overwriting by broken-axis module (#5979)\n            axisProto.ordinal2lin = axisProto.val2lin;\n            OrdinalAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            OrdinalAxis_addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);\n            OrdinalAxis_addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);\n            OrdinalAxis_addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);\n            OrdinalAxis_addEvent(ChartClass, 'pan', onChartPan);\n            OrdinalAxis_addEvent(ChartClass, 'touchpan', onChartPan);\n            OrdinalAxis_addEvent(SeriesClass, 'updatedData', onSeriesUpdatedData);\n        }\n        return AxisClass;\n    }\n    OrdinalAxis.compose = compose;\n    /**\n     * In an ordinal axis, there might be areas with dense concentrations of\n     * points, then large gaps between some. Creating equally distributed\n     * ticks over this entire range may lead to a huge number of ticks that\n     * will later be removed. So instead, break the positions up in\n     * segments, find the tick positions for each segment then concatenize\n     * them. This method is used from both data grouping logic and X axis\n     * tick position logic.\n     * @private\n     */\n    function getTimeTicks(normalizedInterval, min, max, startOfWeek, positions = [], closestDistance = 0, findHigherRanks) {\n        const higherRanks = {}, tickPixelIntervalOption = this.options.tickPixelInterval, time = this.chart.time, \n        // Record all the start positions of a segment, to use when\n        // deciding what's a gap in the data.\n        segmentStarts = [];\n        let end, segmentPositions, hasCrossedHigherRank, info, outsideMax, start = 0, groupPositions = [], lastGroupPosition = -Number.MAX_VALUE;\n        // The positions are not always defined, for example for ordinal\n        // positions when data has regular interval (#1557, #2090)\n        if ((!this.options.ordinal && !this.options.breaks) ||\n            !positions ||\n            positions.length < 3 ||\n            typeof min === 'undefined') {\n            return time.getTimeTicks.apply(time, arguments);\n        }\n        // Analyze the positions array to split it into segments on gaps\n        // larger than 5 times the closest distance. The closest distance is\n        // already found at this point, so we reuse that instead of\n        // computing it again.\n        const posLength = positions.length;\n        for (end = 0; end < posLength; end++) {\n            outsideMax = end && positions[end - 1] > max;\n            if (positions[end] < min) { // Set the last position before min\n                start = end;\n            }\n            if (end === posLength - 1 ||\n                positions[end + 1] - positions[end] > closestDistance * 5 ||\n                outsideMax) {\n                // For each segment, calculate the tick positions from the\n                // getTimeTicks utility function. The interval will be the\n                // same regardless of how long the segment is.\n                if (positions[end] > lastGroupPosition) { // #1475\n                    segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);\n                    // Prevent duplicate groups, for example for multiple\n                    // segments within one larger time frame (#1475)\n                    while (segmentPositions.length &&\n                        segmentPositions[0] <= lastGroupPosition) {\n                        segmentPositions.shift();\n                    }\n                    if (segmentPositions.length) {\n                        lastGroupPosition =\n                            segmentPositions[segmentPositions.length - 1];\n                    }\n                    segmentStarts.push(groupPositions.length);\n                    groupPositions = groupPositions.concat(segmentPositions);\n                }\n                // Set start of next segment\n                start = end + 1;\n            }\n            if (outsideMax) {\n                break;\n            }\n        }\n        // Get the grouping info from the last of the segments. The info is\n        // the same for all segments.\n        if (segmentPositions) {\n            info = segmentPositions.info;\n            // Optionally identify ticks with higher rank, for example\n            // when the ticks have crossed midnight.\n            if (findHigherRanks && info.unitRange <= timeUnits.hour) {\n                end = groupPositions.length - 1;\n                // Compare points two by two\n                for (start = 1; start < end; start++) {\n                    if (time.dateFormat('%d', groupPositions[start]) !==\n                        time.dateFormat('%d', groupPositions[start - 1])) {\n                        higherRanks[groupPositions[start]] = 'day';\n                        hasCrossedHigherRank = true;\n                    }\n                }\n                // If the complete array has crossed midnight, we want\n                // to mark the first positions also as higher rank\n                if (hasCrossedHigherRank) {\n                    higherRanks[groupPositions[0]] = 'day';\n                }\n                info.higherRanks = higherRanks;\n            }\n            // Save the info\n            info.segmentStarts = segmentStarts;\n            groupPositions.info = info;\n        }\n        else {\n            error(12, false, this.chart);\n        }\n        // Don't show ticks within a gap in the ordinal axis, where the\n        // space between two points is greater than a portion of the tick\n        // pixel interval\n        if (findHigherRanks && OrdinalAxis_defined(tickPixelIntervalOption)) {\n            const length = groupPositions.length, translatedArr = [], distances = [];\n            let itemToRemove, translated, lastTranslated, medianDistance, distance, i = length;\n            // Find median pixel distance in order to keep a reasonably even\n            // distance between ticks (#748)\n            while (i--) {\n                translated = this.translate(groupPositions[i]);\n                if (lastTranslated) {\n                    distances[i] = lastTranslated - translated;\n                }\n                translatedArr[i] = lastTranslated = translated;\n            }\n            distances.sort((a, b) => a - b);\n            medianDistance = distances[Math.floor(distances.length / 2)];\n            if (medianDistance < tickPixelIntervalOption * 0.6) {\n                medianDistance = null;\n            }\n            // Now loop over again and remove ticks where needed\n            i = groupPositions[length - 1] > max ? length - 1 : length; // #817\n            lastTranslated = void 0;\n            while (i--) {\n                translated = translatedArr[i];\n                distance = Math.abs(lastTranslated - translated);\n                // #4175 - when axis is reversed, the distance, is negative but\n                // tickPixelIntervalOption positive, so we need to compare the\n                // same values\n                // Remove ticks that are closer than 0.6 times the pixel\n                // interval from the one to the right, but not if it is close to\n                // the median distance (#748).\n                if (lastTranslated &&\n                    distance < tickPixelIntervalOption * 0.8 &&\n                    (medianDistance === null || distance < medianDistance * 0.8)) {\n                    // Is this a higher ranked position with a normal\n                    // position to the right?\n                    if (higherRanks[groupPositions[i]] &&\n                        !higherRanks[groupPositions[i + 1]]) {\n                        // Yes: remove the lower ranked neighbour to the\n                        // right\n                        itemToRemove = i + 1;\n                        lastTranslated = translated; // #709\n                    }\n                    else {\n                        // No: remove this one\n                        itemToRemove = i;\n                    }\n                    groupPositions.splice(itemToRemove, 1);\n                }\n                else {\n                    lastTranslated = translated;\n                }\n            }\n        }\n        return groupPositions;\n    }\n    /**\n     * Get axis position of given index of the extended ordinal positions.\n     * Used only when panning an ordinal axis.\n     *\n     * @private\n     * @function Highcharts.Axis#index2val\n     * @param {number} index\n     * The index value of searched point\n     */\n    function index2val(index) {\n        const axis = this, ordinal = axis.ordinal, \n        // Context could be changed to extendedOrdinalPositions.\n        ordinalPositions = ordinal.positions;\n        // The visible range contains only equally spaced values.\n        if (!ordinalPositions) {\n            return index;\n        }\n        let i = ordinalPositions.length - 1, distance;\n        if (index < 0) { // Out of range, in effect panning to the left\n            index = ordinalPositions[0];\n        }\n        else if (index > i) { // Out of range, panning to the right\n            index = ordinalPositions[i];\n        }\n        else { // Split it up\n            i = Math.floor(index);\n            distance = index - i; // The decimal\n        }\n        if (typeof distance !== 'undefined' &&\n            typeof ordinalPositions[i] !== 'undefined') {\n            return ordinalPositions[i] + (distance ?\n                distance *\n                    (ordinalPositions[i + 1] - ordinalPositions[i]) :\n                0);\n        }\n        return index;\n    }\n    /**\n     * Translate from linear (internal) to axis value.\n     *\n     * @private\n     * @function Highcharts.Axis#lin2val\n     * @param {number} val\n     * The linear abstracted value.\n     */\n    function lin2val(val) {\n        const axis = this, ordinal = axis.ordinal, localMin = axis.old ? axis.old.min : axis.min, localA = axis.old ? axis.old.transA : axis.transA;\n        // Always use extendedPositions (#19816)\n        const positions = ordinal.getExtendedPositions();\n        // In some cases (especially in early stages of the chart creation) the\n        // getExtendedPositions might return undefined.\n        if (positions?.length) {\n            // Convert back from modivied value to pixels. // #15970\n            const pixelVal = OrdinalAxis_correctFloat((val - localMin) * localA +\n                axis.minPixelPadding), index = OrdinalAxis_correctFloat(ordinal.getIndexOfPoint(pixelVal, positions)), mantissa = OrdinalAxis_correctFloat(index % 1);\n            // Check if the index is inside position array. If true,\n            // read/approximate value for that exact index.\n            if (index >= 0 && index <= positions.length - 1) {\n                const leftNeighbour = positions[Math.floor(index)], rightNeighbour = positions[Math.ceil(index)], distance = rightNeighbour - leftNeighbour;\n                return positions[Math.floor(index)] + mantissa * distance;\n            }\n        }\n        // If the value is outside positions array, return initial value\n        return val; // #16784\n    }\n    /**\n     * Internal function to calculate the precise index in ordinalPositions\n     * array.\n     * @private\n     */\n    function getIndexInArray(ordinalPositions, val) {\n        const index = OrdinalAxis.Additions.findIndexOf(ordinalPositions, val, true);\n        if (ordinalPositions[index] === val) {\n            return index;\n        }\n        const percent = (val - ordinalPositions[index]) /\n            (ordinalPositions[index + 1] - ordinalPositions[index]);\n        return index + percent;\n    }\n    /**\n    * @private\n    */\n    function onAxisAfterInit() {\n        const axis = this;\n        if (!axis.ordinal) {\n            axis.ordinal = new OrdinalAxis.Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisFoundExtremes() {\n        const axis = this, { eventArgs, options } = axis;\n        if (axis.isXAxis &&\n            OrdinalAxis_defined(options.overscroll) &&\n            options.overscroll !== 0 &&\n            OrdinalAxis_isNumber(axis.max) &&\n            OrdinalAxis_isNumber(axis.min)) {\n            if (axis.options.ordinal && !axis.ordinal.originalOrdinalRange) {\n                // Calculate the original ordinal range\n                axis.ordinal.getExtendedPositions(false);\n            }\n            if (axis.max === axis.dataMax &&\n                (\n                // Panning is an exception. We don't want to apply\n                // overscroll when panning over the dataMax\n                eventArgs?.trigger !== 'pan' ||\n                    axis.isInternal) &&\n                // Scrollbar buttons are the other execption\n                eventArgs?.trigger !== 'navigator') {\n                const overscroll = axis.ordinal.convertOverscroll(options.overscroll);\n                axis.max += overscroll;\n                // Live data and buttons require translation for the min:\n                if (!axis.isInternal &&\n                    OrdinalAxis_defined(axis.userMin) &&\n                    eventArgs?.trigger !== 'mousewheel') {\n                    axis.min += overscroll;\n                }\n            }\n        }\n    }\n    /**\n     * For ordinal axis, that loads data async, redraw axis after data is\n     * loaded. If we don't do that, axis will have the same extremes as\n     * previously, but ordinal positions won't be calculated. See #10290\n     * @private\n     */\n    function onAxisAfterSetScale() {\n        const axis = this;\n        if (axis.horiz && !axis.isDirty) {\n            axis.isDirty = axis.isOrdinal &&\n                axis.chart.navigator &&\n                !axis.chart.navigator.adaptToUpdatedData;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInitialAxisTranslation() {\n        const axis = this;\n        if (axis.ordinal) {\n            axis.ordinal.beforeSetTickPositions();\n            axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);\n        }\n    }\n    /**\n     * Extending the Chart.pan method for ordinal axes\n     * @private\n     */\n    function onChartPan(e) {\n        const chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.ordinal.convertOverscroll(xAxis.options.overscroll), chartX = e.originalEvent.chartX, panning = chart.options.chart.panning;\n        let runBase = false;\n        if (panning &&\n            panning.type !== 'y' &&\n            xAxis.options.ordinal &&\n            xAxis.series.length &&\n            // On touch devices, let default function handle the pinching\n            (!e.touches || e.touches.length <= 1)) {\n            const mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMin = extremes.dataMin, dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||\n                (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), pointPixelWidth = (xAxis.translationSlope *\n                (xAxis.ordinal.slope || closestPointRange)), \n            // How many ordinal units did we move?\n            movedUnits = Math.round((mouseDownX - chartX) / pointPixelWidth), \n            // Get index of all the chart's points\n            extendedOrdinalPositions = xAxis.ordinal.getExtendedPositions(), extendedAxis = {\n                ordinal: {\n                    positions: extendedOrdinalPositions,\n                    extendedOrdinalPositions: extendedOrdinalPositions\n                }\n            }, index2val = xAxis.index2val, val2lin = xAxis.val2lin;\n            let trimmedRange, ordinalPositions;\n            // Make sure panning to the edges does not decrease the zoomed range\n            if ((min <= dataMin && movedUnits < 0) ||\n                (max + overscroll >= dataMax && movedUnits > 0)) {\n                return;\n            }\n            // We have an ordinal axis, but the data is equally spaced\n            if (!extendedAxis.ordinal.positions) {\n                runBase = true;\n            }\n            else if (Math.abs(movedUnits) > 1) {\n                // Remove active points for shared tooltip\n                if (hoverPoints) {\n                    hoverPoints.forEach(function (point) {\n                        point.setState();\n                    });\n                }\n                // In grouped data series, the last ordinal position represents\n                // the grouped data, which is to the left of the real data max.\n                // If we don't compensate for this, we will be allowed to pan\n                // grouped data series passed the right of the plot area.\n                ordinalPositions = extendedAxis.ordinal.positions;\n                if (dataMax >\n                    ordinalPositions[ordinalPositions.length - 1]) {\n                    ordinalPositions.push(dataMax);\n                }\n                // Get the new min and max values by getting the ordinal index\n                // for the current extreme, then add the moved units and\n                // translate back to values. This happens on the extended\n                // ordinal positions if the new position is out of range, else\n                // it happens on the current x axis which is smaller and faster.\n                chart.setFixedRange(max - min);\n                trimmedRange = xAxis.navigatorAxis\n                    .toFixedRange(void 0, void 0, index2val.apply(extendedAxis, [\n                    val2lin.apply(extendedAxis, [min, true]) +\n                        movedUnits\n                ]), index2val.apply(extendedAxis, [\n                    val2lin.apply(extendedAxis, [max, true]) +\n                        movedUnits\n                ]));\n                // Apply it if it is within the available data range\n                if (trimmedRange.min >= Math.min(ordinalPositions[0], min) &&\n                    trimmedRange.max <= Math.max(ordinalPositions[ordinalPositions.length - 1], max) + overscroll) {\n                    xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });\n                }\n                chart.mouseDownX = chartX; // Set new reference for next run\n                css(chart.container, { cursor: 'move' });\n            }\n        }\n        else {\n            runBase = true;\n        }\n        // Revert to the linear chart.pan version\n        if (runBase || (panning && /y/.test(panning.type))) {\n            if (overscroll) {\n                xAxis.max = xAxis.dataMax + overscroll;\n            }\n        }\n        else {\n            e.preventDefault();\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesUpdatedData() {\n        const xAxis = this.xAxis;\n        // Destroy the extended ordinal index on updated data\n        // and destroy extendedOrdinalPositions, #16055.\n        if (xAxis && xAxis.options.ordinal) {\n            delete xAxis.ordinal.index;\n            delete xAxis.ordinal.originalOrdinalRange;\n        }\n    }\n    /**\n     * Translate from a linear axis value to the corresponding ordinal axis\n     * position. If there are no gaps in the ordinal axis this will be the\n     * same. The translated value is the value that the point would have if\n     * the axis was linear, using the same min and max.\n     *\n     * @private\n     * @function Highcharts.Axis#val2lin\n     * @param {number} val\n     * The axis value.\n     * @param {boolean} [toIndex]\n     * Whether to return the index in the ordinalPositions or the new value.\n     */\n    function val2lin(val, toIndex) {\n        const axis = this, ordinal = axis.ordinal, ordinalPositions = ordinal.positions;\n        let slope = ordinal.slope, extendedOrdinalPositions;\n        if (!ordinalPositions) {\n            return val;\n        }\n        const ordinalLength = ordinalPositions.length;\n        let ordinalIndex;\n        // If the searched value is inside visible plotArea, ivastigate the\n        // value basing on ordinalPositions.\n        if (ordinalPositions[0] <= val &&\n            ordinalPositions[ordinalLength - 1] >= val) {\n            ordinalIndex = getIndexInArray(ordinalPositions, val);\n            // Final return value is based on ordinalIndex\n        }\n        else {\n            extendedOrdinalPositions =\n                ordinal.getExtendedPositions &&\n                    ordinal.getExtendedPositions();\n            if (!(extendedOrdinalPositions && extendedOrdinalPositions.length)) {\n                return val;\n            }\n            const length = extendedOrdinalPositions.length;\n            if (!slope) {\n                slope =\n                    (extendedOrdinalPositions[length - 1] -\n                        extendedOrdinalPositions[0]) /\n                        length;\n            }\n            // `originalPointReference` is equal to the index of first point of\n            // ordinalPositions in extendedOrdinalPositions.\n            const originalPositionsReference = getIndexInArray(extendedOrdinalPositions, ordinalPositions[0]);\n            // If the searched value is outside the visiblePlotArea,\n            // check if it is inside extendedOrdinalPositions.\n            if (val >= extendedOrdinalPositions[0] &&\n                val <=\n                    extendedOrdinalPositions[length - 1]) {\n                // Return Value\n                ordinalIndex = getIndexInArray(extendedOrdinalPositions, val) -\n                    originalPositionsReference;\n            }\n            else {\n                if (!toIndex) {\n                    // If the value is outside positions array,\n                    // return initial value, #16784\n                    return val;\n                }\n                // Since ordinal.slope is the average distance between 2\n                // points on visible plotArea, this can be used to calculate\n                // the approximate position of the point, which is outside\n                // the extendedOrdinalPositions.\n                if (val < extendedOrdinalPositions[0]) {\n                    const diff = extendedOrdinalPositions[0] - val, approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        -originalPositionsReference -\n                            approximateIndexOffset;\n                }\n                else {\n                    const diff = val -\n                        extendedOrdinalPositions[length - 1], approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        approximateIndexOffset +\n                            length -\n                            originalPositionsReference;\n                }\n            }\n        }\n        return toIndex ? ordinalIndex : slope * (ordinalIndex || 0) +\n            ordinal.offset;\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    /**\n     * @private\n     */\n    class Additions {\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        /**\n         * @private\n         */\n        constructor(axis) {\n            this.index = {};\n            this.axis = axis;\n        }\n        /* *\n        *\n        *  Functions\n        *\n        * */\n        /**\n         * Calculate the ordinal positions before tick positions are calculated.\n         * @private\n         */\n        beforeSetTickPositions() {\n            const axis = this.axis, ordinal = axis.ordinal, extremes = axis.getExtremes(), min = extremes.min, max = extremes.max, hasBreaks = axis.brokenAxis?.hasBreaks, isOrdinal = axis.options.ordinal;\n            let len, uniqueOrdinalPositions, dist, minIndex, maxIndex, slope, i, ordinalPositions = [], overscrollPointsRange = Number.MAX_VALUE, useOrdinal = false, adjustOrdinalExtremesPoints = false, isBoosted = false;\n            // Apply the ordinal logic\n            if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?\n                let distanceBetweenPoint = 0;\n                axis.series.forEach(function (series, i) {\n                    const xData = series.getColumn('x', true);\n                    uniqueOrdinalPositions = [];\n                    // For an axis with multiple series, check if the distance\n                    // between points is identical throughout all series.\n                    if (i > 0 &&\n                        series.options.id !== 'highcharts-navigator-series' &&\n                        xData.length > 1) {\n                        adjustOrdinalExtremesPoints = (distanceBetweenPoint !== xData[1] - xData[0]);\n                    }\n                    distanceBetweenPoint = xData[1] - xData[0];\n                    if (series.boosted) {\n                        isBoosted = series.boosted;\n                    }\n                    if (series.reserveSpace() &&\n                        (series\n                            .takeOrdinalPosition !== false || hasBreaks)) {\n                        // Concatenate the processed X data into the existing\n                        // positions, or the empty array\n                        ordinalPositions = ordinalPositions.concat(xData);\n                        len = ordinalPositions.length;\n                        // Remove duplicates (#1588)\n                        ordinalPositions.sort(function (a, b) {\n                            // Without a custom function it is sorted as strings\n                            return a - b;\n                        });\n                        overscrollPointsRange = Math.min(overscrollPointsRange, OrdinalAxis_pick(\n                        // Check for a single-point series:\n                        series.closestPointRange, overscrollPointsRange));\n                        if (len) {\n                            i = 0;\n                            while (i < len - 1) {\n                                if (ordinalPositions[i] !==\n                                    ordinalPositions[i + 1]) {\n                                    uniqueOrdinalPositions.push(ordinalPositions[i + 1]);\n                                }\n                                i++;\n                            }\n                            // Check first item:\n                            if (uniqueOrdinalPositions[0] !==\n                                ordinalPositions[0]) {\n                                uniqueOrdinalPositions.unshift(ordinalPositions[0]);\n                            }\n                            ordinalPositions = uniqueOrdinalPositions;\n                        }\n                    }\n                });\n                if (!axis.ordinal.originalOrdinalRange) {\n                    // Calculate current originalOrdinalRange\n                    axis.ordinal.originalOrdinalRange =\n                        (ordinalPositions.length - 1) * overscrollPointsRange;\n                }\n                // If the distance between points is not identical throughout\n                // all series, remove the first and last ordinal position to\n                // avoid enabling ordinal logic when it is not needed, #17405.\n                // Only for boosted series because changes are negligible.\n                if (adjustOrdinalExtremesPoints && isBoosted) {\n                    ordinalPositions.pop();\n                    ordinalPositions.shift();\n                }\n                // Cache the length\n                len = ordinalPositions.length;\n                // Check if we really need the overhead of mapping axis data\n                // against the ordinal positions. If the series consist of\n                // evenly spaced data any way, we don't need any ordinal logic.\n                if (len > 2) { // Two points have equal distance by default\n                    dist = ordinalPositions[1] - ordinalPositions[0];\n                    i = len - 1;\n                    while (i-- && !useOrdinal) {\n                        if (ordinalPositions[i + 1] - ordinalPositions[i] !==\n                            dist) {\n                            useOrdinal = true;\n                        }\n                    }\n                    // When zooming in on a week, prevent axis padding for\n                    // weekends even though the data within the week is evenly\n                    // spaced.\n                    if (!axis.options.keepOrdinalPadding &&\n                        (ordinalPositions[0] - min > dist ||\n                            (max -\n                                ordinalPositions[ordinalPositions.length - 1]) > dist)) {\n                        useOrdinal = true;\n                    }\n                }\n                else if (axis.options.overscroll) {\n                    if (len === 2) {\n                        // Exactly two points, distance for overscroll is fixed:\n                        overscrollPointsRange =\n                            ordinalPositions[1] - ordinalPositions[0];\n                    }\n                    else if (len === 1) {\n                        // We have just one point, closest distance is unknown.\n                        // Assume then it is last point and overscrolled range:\n                        overscrollPointsRange = axis.ordinal.convertOverscroll(axis.options.overscroll);\n                        ordinalPositions = [\n                            ordinalPositions[0],\n                            ordinalPositions[0] + overscrollPointsRange\n                        ];\n                    }\n                    else {\n                        // In case of zooming in on overscrolled range, stick to\n                        // the old range:\n                        overscrollPointsRange = ordinal.overscrollPointsRange;\n                    }\n                }\n                // Record the slope and offset to compute the linear values from\n                // the array index. Since the ordinal positions may exceed the\n                // current range, get the start and end positions within it\n                // (#719, #665b)\n                if (useOrdinal || axis.forceOrdinal) {\n                    if (axis.options.overscroll) {\n                        ordinal.overscrollPointsRange = overscrollPointsRange;\n                        ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());\n                    }\n                    // Register\n                    ordinal.positions = ordinalPositions;\n                    // This relies on the ordinalPositions being set. Use\n                    // Math.max and Math.min to prevent padding on either sides\n                    // of the data.\n                    minIndex = axis.ordinal2lin(// #5979\n                    Math.max(min, ordinalPositions[0]), true);\n                    maxIndex = Math.max(axis.ordinal2lin(Math.min(max, ordinalPositions[ordinalPositions.length - 1]), true), 1); // #3339\n                    // Set the slope and offset of the values compared to the\n                    // indices in the ordinal positions.\n                    ordinal.slope = slope =\n                        (max - min) / (maxIndex - minIndex);\n                    ordinal.offset = min - (minIndex * slope);\n                }\n                else {\n                    ordinal.overscrollPointsRange = OrdinalAxis_pick(axis.closestPointRange, ordinal.overscrollPointsRange);\n                    ordinal.positions = axis.ordinal.slope = ordinal.offset =\n                        void 0;\n                }\n            }\n            axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926\n            ordinal.groupIntervalFactor = null; // Reset for next run\n        }\n        /**\n         * Faster way of using the Array.indexOf method.\n         * Works for sorted arrays only with unique values.\n         *\n         * @param {Array} sortedArray\n         *        The sorted array inside which we are looking for.\n         * @param {number} key\n         *        The key to being found.\n         * @param {boolean} indirectSearch\n         *        In case of lack of the point in the array, should return\n         *        value be equal to -1 or the closest smaller index.\n         *  @private\n         */\n        static findIndexOf(sortedArray, key, indirectSearch) {\n            let start = 0, end = sortedArray.length - 1, middle;\n            while (start < end) {\n                middle = Math.ceil((start + end) / 2);\n                // Key found as the middle element.\n                if (sortedArray[middle] <= key) {\n                    // Continue searching to the right.\n                    start = middle;\n                }\n                else {\n                    // Continue searching to the left.\n                    end = middle - 1;\n                }\n            }\n            if (sortedArray[start] === key) {\n                return start;\n            }\n            // Key could not be found.\n            return !indirectSearch ? -1 : start;\n        }\n        /**\n         * Get the ordinal positions for the entire data set. This is necessary\n         * in chart panning because we need to find out what points or data\n         * groups are available outside the visible range. When a panning\n         * operation starts, if an index for the given grouping does not exists,\n         * it is created and cached. This index is deleted on updated data, so\n         * it will be regenerated the next time a panning operation starts.\n         * @private\n         */\n        getExtendedPositions(withOverscroll = true) {\n            const ordinal = this, axis = ordinal.axis, axisProto = axis.constructor.prototype, chart = axis.chart, key = axis.series.reduce((k, series) => {\n                const grouping = series.currentDataGrouping;\n                return (k +\n                    (grouping ? grouping.count + grouping.unitName : 'raw'));\n            }, ''), overscroll = withOverscroll ?\n                axis.ordinal.convertOverscroll(axis.options.overscroll) : 0, extremes = axis.getExtremes();\n            let fakeAxis, fakeSeries = void 0, ordinalIndex = ordinal.index;\n            // If this is the first time, or the ordinal index is deleted by\n            // updatedData,\n            // create it.\n            if (!ordinalIndex) {\n                ordinalIndex = ordinal.index = {};\n            }\n            if (!ordinalIndex[key]) {\n                // Create a fake axis object where the extended ordinal\n                // positions are emulated\n                fakeAxis = {\n                    series: [],\n                    chart: chart,\n                    forceOrdinal: false,\n                    getExtremes: function () {\n                        return {\n                            min: extremes.dataMin,\n                            max: extremes.dataMax + overscroll\n                        };\n                    },\n                    applyGrouping: axisProto.applyGrouping,\n                    getGroupPixelWidth: axisProto.getGroupPixelWidth,\n                    getTimeTicks: axisProto.getTimeTicks,\n                    options: {\n                        ordinal: true\n                    },\n                    ordinal: {\n                        getGroupIntervalFactor: this.getGroupIntervalFactor\n                    },\n                    ordinal2lin: axisProto.ordinal2lin, // #6276\n                    getIndexOfPoint: axisProto.getIndexOfPoint,\n                    val2lin: axisProto.val2lin // #2590\n                };\n                fakeAxis.ordinal.axis = fakeAxis;\n                // Add the fake series to hold the full data, then apply\n                // processData to it\n                axis.series.forEach((series) => {\n                    fakeSeries = {\n                        xAxis: fakeAxis,\n                        chart: chart,\n                        groupPixelWidth: series.groupPixelWidth,\n                        destroyGroupedData: (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop,\n                        getColumn: series.getColumn,\n                        applyGrouping: series.applyGrouping,\n                        getProcessedData: series.getProcessedData,\n                        reserveSpace: series.reserveSpace,\n                        visible: series.visible\n                    };\n                    const xData = series.getColumn('x').concat(withOverscroll ?\n                        ordinal.getOverscrollPositions() :\n                        []);\n                    fakeSeries.dataTable = new Data_DataTableCore({\n                        columns: {\n                            x: xData\n                        }\n                    });\n                    fakeSeries.options = {\n                        ...series.options,\n                        dataGrouping: series.currentDataGrouping ? {\n                            firstAnchor: series.options.dataGrouping?.firstAnchor,\n                            anchor: series.options.dataGrouping?.anchor,\n                            lastAnchor: series.options.dataGrouping?.firstAnchor,\n                            enabled: true,\n                            forced: true,\n                            approximation: 'open',\n                            units: [[\n                                    series.currentDataGrouping.unitName,\n                                    [series.currentDataGrouping.count]\n                                ]]\n                        } : {\n                            enabled: false\n                        }\n                    };\n                    fakeAxis.series.push(fakeSeries);\n                    series.processData.apply(fakeSeries);\n                });\n                fakeAxis.applyGrouping({ hasExtremesChanged: true });\n                // Force to use the ordinal when points are evenly spaced (e.g.\n                // weeks), #3825.\n                if ((fakeSeries?.closestPointRange !==\n                    fakeSeries?.basePointRange) &&\n                    fakeSeries.currentDataGrouping) {\n                    fakeAxis.forceOrdinal = true;\n                }\n                // Run beforeSetTickPositions to compute the ordinalPositions\n                axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });\n                if (!axis.ordinal.originalOrdinalRange &&\n                    fakeAxis.ordinal.originalOrdinalRange) {\n                    axis.ordinal.originalOrdinalRange =\n                        fakeAxis.ordinal.originalOrdinalRange;\n                }\n                // Cache it\n                if (fakeAxis.ordinal.positions) {\n                    ordinalIndex[key] = fakeAxis.ordinal.positions;\n                }\n            }\n            return ordinalIndex[key];\n        }\n        /**\n         * Find the factor to estimate how wide the plot area would have been if\n         * ordinal gaps were included. This value is used to compute an imagined\n         * plot width in order to establish the data grouping interval.\n         *\n         * A real world case is the intraday-candlestick example. Without this\n         * logic, it would show the correct data grouping when viewing a range\n         * within each day, but once moving the range to include the gap between\n         * two days, the interval would include the cut-away night hours and the\n         * data grouping would be wrong. So the below method tries to compensate\n         * by identifying the most common point interval, in this case days.\n         *\n         * An opposite case is presented in issue #718. We have a long array of\n         * daily data, then one point is appended one hour after the last point.\n         * We expect the data grouping not to change.\n         *\n         * In the future, if we find cases where this estimation doesn't work\n         * optimally, we might need to add a second pass to the data grouping\n         * logic, where we do another run with a greater interval if the number\n         * of data groups is more than a certain fraction of the desired group\n         * count.\n         * @private\n         */\n        getGroupIntervalFactor(xMin, xMax, series) {\n            const ordinal = this, processedXData = series.getColumn('x', true), len = processedXData.length, distances = [];\n            let median, i, groupIntervalFactor = ordinal.groupIntervalFactor;\n            // Only do this computation for the first series, let the other\n            // inherit it (#2416)\n            if (!groupIntervalFactor) {\n                // Register all the distances in an array\n                for (i = 0; i < len - 1; i++) {\n                    distances[i] = (processedXData[i + 1] -\n                        processedXData[i]);\n                }\n                // Sort them and find the median\n                distances.sort(function (a, b) {\n                    return a - b;\n                });\n                median = distances[Math.floor(len / 2)];\n                // Compensate for series that don't extend through the entire\n                // axis extent. #1675.\n                xMin = Math.max(xMin, processedXData[0]);\n                xMax = Math.min(xMax, processedXData[len - 1]);\n                ordinal.groupIntervalFactor = groupIntervalFactor =\n                    (len * median) / (xMax - xMin);\n            }\n            // Return the factor needed for data grouping\n            return groupIntervalFactor;\n        }\n        /**\n         * Get index of point inside the ordinal positions array.\n         *\n         * @private\n         * @param {number} pixelVal\n         * The pixel value of a point.\n         *\n         * @param {Array<number>} [ordinalArray]\n         * An array of all points available on the axis for the given data set.\n         * Either ordinalPositions if the value is inside the plotArea or\n         * extendedOrdinalPositions if not.\n         */\n        getIndexOfPoint(pixelVal, ordinalArray) {\n            const ordinal = this, axis = ordinal.axis, min = axis.min, minX = axis.minPixelPadding, indexOfMin = getIndexInArray(ordinalArray, min);\n            const ordinalPointPixelInterval = axis.translationSlope *\n                (ordinal.slope ||\n                    axis.closestPointRange ||\n                    ordinal.overscrollPointsRange);\n            const shiftIndex = OrdinalAxis_correctFloat((pixelVal - minX) / ordinalPointPixelInterval);\n            return indexOfMin + shiftIndex;\n        }\n        /**\n         * Get ticks for an ordinal axis within a range where points don't\n         * exist. It is required when overscroll is enabled. We can't base on\n         * points, because we may not have any, so we use approximated\n         * pointRange and generate these ticks between Axis.dataMax,\n         * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and\n         * navigator scrolling.\n         * @private\n         */\n        getOverscrollPositions() {\n            const ordinal = this, axis = ordinal.axis, extraRange = ordinal.convertOverscroll(axis.options.overscroll), distance = ordinal.overscrollPointsRange, positions = [];\n            let max = axis.dataMax;\n            if (OrdinalAxis_defined(distance)) {\n                // Max + pointRange because we need to scroll to the last\n                while (max < axis.dataMax + extraRange) {\n                    max += distance;\n                    positions.push(max);\n                }\n            }\n            return positions;\n        }\n        /**\n         * Make the tick intervals closer because the ordinal gaps make the\n         * ticks spread out or cluster.\n         * @private\n         */\n        postProcessTickInterval(tickInterval) {\n            // Problem: https://jsfiddle.net/highcharts/FQm4E/1/. This is a case\n            // where this algorithm doesn't work optimally. In this case, the\n            // tick labels are spread out per week, but all the gaps reside\n            // within weeks. So we have a situation where the labels are courser\n            // than the ordinal gaps, and thus the tick interval should not be\n            // altered.\n            const ordinal = this, axis = ordinal.axis, ordinalSlope = ordinal.slope, closestPointRange = axis.closestPointRange;\n            let ret;\n            if (ordinalSlope && closestPointRange) {\n                if (!axis.options.breaks) {\n                    ret = (tickInterval /\n                        (ordinalSlope / closestPointRange));\n                }\n                else {\n                    ret = closestPointRange || tickInterval; // #7275\n                }\n            }\n            else {\n                ret = tickInterval;\n            }\n            return ret;\n        }\n        /**\n         * If overscroll is pixel or pecentage value, convert it to axis range.\n         *\n         * @private\n         * @param {number | string} overscroll\n         * Overscroll value in axis range, pixels or percentage value.\n         * @return {number}\n         * Overscroll value in axis range.\n         */\n        convertOverscroll(overscroll = 0) {\n            const ordinal = this, axis = ordinal.axis, calculateOverscroll = function (overscrollPercentage) {\n                return OrdinalAxis_pick(ordinal.originalOrdinalRange, OrdinalAxis_defined(axis.dataMax) && OrdinalAxis_defined(axis.dataMin) ?\n                    axis.dataMax - axis.dataMin : 0) * overscrollPercentage;\n            };\n            if (OrdinalAxis_isString(overscroll)) {\n                const overscrollValue = parseInt(overscroll, 10);\n                if (/%$/.test(overscroll)) {\n                    // If overscroll is percentage\n                    return calculateOverscroll(overscrollValue / 100);\n                }\n                if (/px/.test(overscroll)) {\n                    // If overscroll is pixels, it is limited to 90% of the axis\n                    // length to prevent division by zero\n                    const limitedOverscrollValue = Math.min(overscrollValue, axis.len * 0.9), pixelToPercent = limitedOverscrollValue / axis.len;\n                    return calculateOverscroll(pixelToPercent / (1 - pixelToPercent));\n                }\n                // If overscroll is a string but not pixels or percentage,\n                // return 0 as no overscroll\n                return 0;\n            }\n            return overscroll;\n        }\n    }\n    OrdinalAxis.Additions = Additions;\n})(OrdinalAxis || (OrdinalAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_OrdinalAxis = (OrdinalAxis);\n\n;// ./code/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Declarations\n *\n * */\n/**\n * An object containing language-related strings and settings. A typical setup\n * uses `Highcharts.setOptions` to make the options apply to all charts in the\n * same page.\n *\n * ```js\n * Highcharts.setOptions({\n *     lang: {\n *         locale: 'fr'\n *     }\n * });\n * ```\n *\n * @optionparent lang\n */\nconst lang = {\n    /**\n     * The text for the label for the range selector buttons.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorZoom: 'Zoom',\n    /**\n     * The text for the label for the \"from\" input box in the range\n     * selector. Since v9.0, this string is empty as the label is not\n     * rendered by default.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorFrom: '',\n    /**\n     * The text for the label for the \"to\" input box in the range selector.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorTo: '→'\n};\n/**\n * The range selector is a tool for selecting ranges to display within\n * the chart. It provides buttons to select preconfigured ranges in\n * the chart, like 1 day, 1 week, 1 month etc. It also provides input\n * boxes where min and max dates can be manually input.\n *\n * @product      highstock gantt\n * @optionparent rangeSelector\n */\nconst rangeSelector = {\n    /**\n     * Whether to enable all buttons from the start. By default buttons are\n     * only enabled if the corresponding time range exists on the X axis,\n     * but enabling all buttons allows for dynamically loading different\n     * time ranges.\n     *\n     * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/\n     *         All buttons enabled\n     *\n     * @since     2.0.3\n     */\n    allButtonsEnabled: false,\n    /**\n     * An array of configuration objects for the buttons.\n     *\n     * Defaults to:\n     * ```js\n     * buttons: [{\n     *     type: 'month',\n     *     count: 1,\n     *     text: '1m',\n     *     title: 'View 1 month'\n     * }, {\n     *     type: 'month',\n     *     count: 3,\n     *     text: '3m',\n     *     title: 'View 3 months'\n     * }, {\n     *     type: 'month',\n     *     count: 6,\n     *     text: '6m',\n     *     title: 'View 6 months'\n     * }, {\n     *     type: 'ytd',\n     *     text: 'YTD',\n     *     title: 'View year to date'\n     * }, {\n     *     type: 'year',\n     *     count: 1,\n     *     text: '1y',\n     *     title: 'View 1 year'\n     * }, {\n     *     type: 'all',\n     *     text: 'All',\n     *     title: 'View all'\n     * }]\n     * ```\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by buttons\n     *\n     * @type      {Array<*>}\n     */\n    buttons: [{\n            type: 'month',\n            count: 1,\n            text: '1m',\n            title: 'View 1 month'\n        }, {\n            type: 'month',\n            count: 3,\n            text: '3m',\n            title: 'View 3 months'\n        }, {\n            type: 'month',\n            count: 6,\n            text: '6m',\n            title: 'View 6 months'\n        }, {\n            type: 'ytd',\n            text: 'YTD',\n            title: 'View year to date'\n        }, {\n            type: 'year',\n            count: 1,\n            text: '1y',\n            title: 'View 1 year'\n        }, {\n            type: 'all',\n            text: 'All',\n            title: 'View all'\n        }],\n    /**\n     * How many units of the defined type the button should span. If `type`\n     * is \"month\" and `count` is 3, the button spans three months.\n     *\n     * @type      {number}\n     * @default   1\n     * @apioption rangeSelector.buttons.count\n     */\n    /**\n     * Fires when clicking on the rangeSelector button. One parameter,\n     * event, is passed to the function, containing common event\n     * information.\n     *\n     * ```js\n     * click: function(e) {\n     *   console.log(this);\n     * }\n     * ```\n     *\n     * Return false to stop default button's click action.\n     *\n     * @sample {highstock} stock/rangeselector/button-click/\n     *         Click event on the button\n     *\n     * @type      {Highcharts.RangeSelectorClickCallbackFunction}\n     * @apioption rangeSelector.buttons.events.click\n     */\n    /**\n     * Additional range (in milliseconds) added to the end of the calculated\n     * time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMax\n     */\n    /**\n     * Additional range (in milliseconds) added to the start of the\n     * calculated time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMin\n     */\n    /**\n     * When buttons apply dataGrouping on a series, by default zooming\n     * in/out will deselect buttons and unset dataGrouping. Enable this\n     * option to keep buttons selected when extremes change.\n     *\n     * @sample {highstock} stock/rangeselector/preserve-datagrouping/\n     *         Different preserveDataGrouping settings\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     6.1.2\n     * @apioption rangeSelector.buttons.preserveDataGrouping\n     */\n    /**\n     * A custom data grouping object for each button.\n     *\n     * @see [series.dataGrouping](#plotOptions.series.dataGrouping)\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by range selector buttons\n     *\n     * @type      {*}\n     * @extends   plotOptions.series.dataGrouping\n     * @apioption rangeSelector.buttons.dataGrouping\n     */\n    /**\n     * The text for the button itself.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.text\n     */\n    /**\n     * Explanation for the button, shown as a tooltip on hover, and used by\n     * assistive technology.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.title\n     */\n    /**\n     * Defined the time span for the button. Can be one of `millisecond`,\n     * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,\n     * and `all`.\n     *\n     * @type       {Highcharts.RangeSelectorButtonTypeValue}\n     * @apioption  rangeSelector.buttons.type\n     */\n    /**\n     * The space in pixels between the buttons in the range selector.\n     */\n    buttonSpacing: 5,\n    /**\n     * Whether to collapse the range selector buttons into a dropdown when\n     * there is not enough room to show everything in a single row, instead\n     * of dividing the range selector into multiple rows.\n     * Can be one of the following:\n     *  - `always`: Always collapse\n     *  - `responsive`: Only collapse when there is not enough room\n     *  - `never`: Never collapse\n     *\n     * @sample {highstock} stock/rangeselector/dropdown/\n     *         Dropdown option\n     *\n     * @validvalue [\"always\", \"responsive\", \"never\"]\n     * @since 9.0.0\n     */\n    dropdown: 'responsive',\n    /**\n     * Enable or disable the range selector. Default to `true` for stock\n     * charts, using the `stockChart` factory.\n     *\n     * @sample {highstock} stock/rangeselector/enabled/\n     *         Disable the range selector\n     *\n     * @type {boolean|undefined}\n     * @default {highstock} true\n     */\n    enabled: void 0,\n    /**\n     * The vertical alignment of the rangeselector box. Allowed properties\n     * are `top`, `middle`, `bottom`.\n     *\n     * @sample {highstock} stock/rangeselector/vertical-align-middle/\n     *         Middle\n     * @sample {highstock} stock/rangeselector/vertical-align-bottom/\n     *         Bottom\n     *\n     * @type  {Highcharts.VerticalAlignValue}\n     * @since 6.0.0\n     */\n    verticalAlign: 'top',\n    /**\n     * A collection of attributes for the buttons. The object takes SVG\n     * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,\n     * a collection of CSS properties for the text.\n     *\n     * The object can also be extended with states, so you can set\n     * presentational options for `hover`, `select` or `disabled` button\n     * states.\n     *\n     * CSS styles for the text label.\n     *\n     * In styled mode, the buttons are styled by the\n     * `.highcharts-range-selector-buttons .highcharts-button` rule with its\n     * different states.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.SVGAttributes}\n     */\n    buttonTheme: {\n        /** @ignore */\n        width: 28,\n        /** @ignore */\n        height: 18,\n        /** @ignore */\n        padding: 2,\n        /** @ignore */\n        zIndex: 7 // #484, #852\n    },\n    /**\n     * When the rangeselector is floating, the plot area does not reserve\n     * space for it. This opens for positioning anywhere on the chart.\n     *\n     * @sample {highstock} stock/rangeselector/floating/\n     *         Placing the range selector between the plot area and the\n     *         navigator\n     *\n     * @since 6.0.0\n     */\n    floating: false,\n    /**\n     * The x offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    x: 0,\n    /**\n     * The y offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    y: 0,\n    /**\n     * Deprecated. The height of the range selector. Currently it is\n     * calculated dynamically.\n     *\n     * @deprecated\n     * @type  {number|undefined}\n     * @since 2.1.9\n     */\n    height: void 0, // Reserved space for buttons and input\n    /**\n     * The border color of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.ColorString}\n     * @since     1.3.7\n     */\n    inputBoxBorderColor: 'none',\n    /**\n     * The pixel height of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @since     1.3.7\n     */\n    inputBoxHeight: 17,\n    /**\n     * The pixel width of the date input boxes. When `undefined`, the width\n     * is fitted to the rendered content.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type   {number|undefined}\n     * @since  1.3.7\n     */\n    inputBoxWidth: void 0,\n    /**\n     * The date format in the input boxes when not selected for editing.\n     * Defaults to `%e %b %Y`.\n     *\n     * This is used to determine which type of input to show,\n     * `datetime-local`, `date` or `time` and falling back to `text` when\n     * the browser does not support the input type or the format contains\n     * milliseconds.\n     *\n     * @sample {highstock} stock/rangeselector/input-type/\n     *         Input types\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputDateFormat: '%[ebY]',\n    /**\n     * A custom callback function to parse values entered in the input boxes and\n     * return a valid JavaScript time as milliseconds since 1970. The first\n     * argument passed is the value to parse, second is a boolean indicating use\n     * of UTC time. The third is a reference to the `time` object. Time zone can\n     * be read from `time.timezone`.\n     *\n     * This will only get called for inputs of type `text`. Since v8.2.3, the\n     * input type is dynamically determined based on the granularity of the\n     * `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     * @type      {Highcharts.RangeSelectorParseCallbackFunction}\n     * @since     1.3.3\n     */\n    inputDateParser: void 0,\n    /**\n     * The date format in the input boxes when they are selected for\n     * editing. This must be a format that is recognized by JavaScript\n     * Date.parse.\n     *\n     * This will only be used for inputs of type `text`. Since v8.2.3,\n     * the input type is dynamically determined based on the granularity\n     * of the `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputEditDateFormat: '%Y-%m-%d',\n    /**\n     * Enable or disable the date input boxes.\n     */\n    inputEnabled: true,\n    /**\n     * Positioning for the input boxes. Allowed properties are `align`,\n     *  `x` and `y`.\n     *\n     * @since 1.2.4\n     */\n    inputPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'right',\n        /**\n         * X offset of the input row.\n         */\n        x: 0,\n        /**\n         * Y offset of the input row.\n         */\n        y: 0\n    },\n    /**\n     * The space in pixels between the labels and the date input boxes in\n     * the range selector.\n     *\n     * @since 9.0.0\n     */\n    inputSpacing: 5,\n    /**\n     * The index of the button to appear pre-selected. If the selected range\n     * exceeds the total data range and the 'all' option is available,\n     * the 'all' option, showing the full range, is automatically selected.\n     *\n     * @type      {number}\n     */\n    selected: void 0,\n    /**\n     * Positioning for the button row.\n     *\n     * @since 1.2.4\n     */\n    buttonPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'left',\n        /**\n         * X offset of the button row.\n         */\n        x: 0,\n        /**\n         * Y offset of the button row.\n         */\n        y: 0\n    },\n    /**\n     * CSS for the HTML inputs in the range selector.\n     *\n     * In styled mode, the inputs are styled by the\n     * `.highcharts-range-input text` rule in SVG mode, and\n     * `input.highcharts-range-selector` when active.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.CSSObject}\n     * @apioption rangeSelector.inputStyle\n     */\n    inputStyle: {\n        /** @ignore */\n        color: \"#334eff\" /* Palette.highlightColor80 */,\n        /** @ignore */\n        cursor: 'pointer',\n        /** @ignore */\n        fontSize: '0.8em'\n    },\n    /**\n     * CSS styles for the labels - the Zoom, From and To texts.\n     *\n     * In styled mode, the labels are styled by the\n     * `.highcharts-range-label` class.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.CSSObject}\n     */\n    labelStyle: {\n        /** @ignore */\n        color: \"#666666\" /* Palette.neutralColor60 */,\n        /** @ignore */\n        fontSize: '0.8em'\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\nconst RangeSelectorDefaults = {\n    lang,\n    rangeSelector\n};\n/* harmony default export */ const RangeSelector_RangeSelectorDefaults = (RangeSelectorDefaults);\n\n;// ./code/es-modules/Stock/RangeSelector/RangeSelectorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defaultOptions: RangeSelectorComposition_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: RangeSelectorComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { addEvent: RangeSelectorComposition_addEvent, defined: RangeSelectorComposition_defined, extend: RangeSelectorComposition_extend, isNumber: RangeSelectorComposition_isNumber, merge: RangeSelectorComposition_merge, pick: RangeSelectorComposition_pick, pushUnique: RangeSelectorComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst chartDestroyEvents = [];\n/* *\n *\n *  Variables\n *\n * */\nlet RangeSelectorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the axis min value based on the range option and the current max. For\n * stock charts this is extended via the {@link RangeSelector} so that if the\n * selected range is a multiple of months or years, it is compensated for\n * various month lengths.\n *\n * @private\n * @function Highcharts.Axis#minFromRange\n * @return {number|undefined}\n *         The new minimum value.\n */\nfunction axisMinFromRange() {\n    const rangeOptions = this.range, type = rangeOptions.type, max = this.max, time = this.chart.time, \n    // Get the true range from a start date\n    getTrueRange = function (base, count) {\n        const original = time.toParts(base), modified = original.slice();\n        if (type === 'year') {\n            modified[0] += count;\n        }\n        else {\n            modified[1] += count;\n        }\n        let d = time.makeTime.apply(time, modified);\n        const numbers = time.toParts(d);\n        // When subtracting a month still places us in the same month, like\n        // subtracting one month from March 31 places us on February 31,\n        // which translates to March 3 (#6537)\n        if (type === 'month' &&\n            original[1] === numbers[1] &&\n            Math.abs(count) === 1) {\n            modified[0] = original[0];\n            modified[1] = original[1];\n            // 0 is the last day of the previous month\n            modified[2] = 0;\n        }\n        d = time.makeTime.apply(time, modified);\n        return d - base;\n    };\n    let min, range;\n    if (RangeSelectorComposition_isNumber(rangeOptions)) {\n        min = max - rangeOptions;\n        range = rangeOptions;\n    }\n    else if (rangeOptions) {\n        min = max + getTrueRange(max, -(rangeOptions.count || 1));\n        // Let the fixedRange reflect initial settings (#5930)\n        if (this.chart) {\n            this.chart.setFixedRange(max - min);\n        }\n    }\n    const dataMin = RangeSelectorComposition_pick(this.dataMin, Number.MIN_VALUE);\n    if (!RangeSelectorComposition_isNumber(min)) {\n        min = dataMin;\n    }\n    if (min <= dataMin) {\n        min = dataMin;\n        if (typeof range === 'undefined') { // #4501\n            range = getTrueRange(min, rangeOptions.count);\n        }\n        this.newMax = Math.min(min + range, RangeSelectorComposition_pick(this.dataMax, Number.MAX_VALUE));\n    }\n    if (!RangeSelectorComposition_isNumber(max)) {\n        min = void 0;\n    }\n    else if (!RangeSelectorComposition_isNumber(rangeOptions) &&\n        rangeOptions &&\n        rangeOptions._offsetMin) {\n        min += rangeOptions._offsetMin;\n    }\n    return min;\n}\n/**\n * @private\n */\nfunction updateRangeSelectorButtons() {\n    this.rangeSelector?.redrawElements();\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_compose(AxisClass, ChartClass, RangeSelectorClass) {\n    RangeSelectorConstructor = RangeSelectorClass;\n    if (RangeSelectorComposition_pushUnique(RangeSelectorComposition_composed, 'RangeSelector')) {\n        const chartProto = ChartClass.prototype;\n        AxisClass.prototype.minFromRange = axisMinFromRange;\n        RangeSelectorComposition_addEvent(ChartClass, 'afterGetContainer', createRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRender', RangeSelectorComposition_onChartBeforeRender);\n        RangeSelectorComposition_addEvent(ChartClass, 'destroy', onChartDestroy);\n        RangeSelectorComposition_addEvent(ChartClass, 'getMargins', onChartGetMargins);\n        RangeSelectorComposition_addEvent(ChartClass, 'redraw', redrawRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'update', RangeSelectorComposition_onChartUpdate);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRedraw', updateRangeSelectorButtons);\n        chartProto.callbacks.push(redrawRangeSelector);\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions, { rangeSelector: RangeSelector_RangeSelectorDefaults.rangeSelector });\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions.lang, RangeSelector_RangeSelectorDefaults.lang);\n    }\n}\n/**\n * Initialize rangeselector for stock charts\n * @private\n */\nfunction createRangeSelector() {\n    if (this.options.rangeSelector &&\n        this.options.rangeSelector.enabled) {\n        this.rangeSelector = new RangeSelectorConstructor(this);\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartBeforeRender() {\n    const chart = this, rangeSelector = chart.rangeSelector;\n    if (rangeSelector) {\n        if (RangeSelectorComposition_isNumber(rangeSelector.deferredYTDClick)) {\n            rangeSelector.clickButton(rangeSelector.deferredYTDClick);\n            delete rangeSelector.deferredYTDClick;\n        }\n        const verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign === 'top') {\n                this.extraTopMargin = true;\n            }\n        }\n    }\n}\nfunction redrawRangeSelector() {\n    const chart = this;\n    const rangeSelector = this.rangeSelector;\n    if (!rangeSelector) {\n        return;\n    }\n    let alignTo;\n    const extremes = chart.xAxis[0].getExtremes();\n    const legend = chart.legend;\n    const verticalAlign = (rangeSelector &&\n        rangeSelector.options.verticalAlign);\n    if (RangeSelectorComposition_isNumber(extremes.min)) {\n        rangeSelector.render(extremes.min, extremes.max);\n    }\n    // Re-align the legend so that it's below the rangeselector\n    if (legend.display &&\n        verticalAlign === 'top' &&\n        verticalAlign === legend.options.verticalAlign) {\n        // Create a new alignment box for the legend.\n        alignTo = RangeSelectorComposition_merge(chart.spacingBox);\n        if (legend.options.layout === 'vertical') {\n            alignTo.y = chart.plotTop;\n        }\n        else {\n            alignTo.y += rangeSelector.getHeight();\n        }\n        legend.group.placed = false; // Don't animate the alignment.\n        legend.align(alignTo);\n    }\n}\n/**\n * Remove resize/afterSetExtremes at chart destroy.\n * @private\n */\nfunction onChartDestroy() {\n    for (let i = 0, iEnd = chartDestroyEvents.length; i < iEnd; ++i) {\n        const events = chartDestroyEvents[i];\n        if (events[0] === this) {\n            events[1].forEach((unbind) => unbind());\n            chartDestroyEvents.splice(i, 1);\n            return;\n        }\n    }\n}\n/**\n *\n */\nfunction onChartGetMargins() {\n    const rangeSelector = this.rangeSelector;\n    if (rangeSelector?.options?.enabled) {\n        const rangeSelectorHeight = rangeSelector.getHeight();\n        const verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.marginBottom += rangeSelectorHeight;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.plotTop += rangeSelectorHeight;\n            }\n        }\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartUpdate(e) {\n    const chart = this, options = e.options, optionsRangeSelector = options.rangeSelector, extraBottomMarginWas = this.extraBottomMargin, extraTopMarginWas = this.extraTopMargin;\n    let rangeSelector = chart.rangeSelector;\n    if (optionsRangeSelector &&\n        optionsRangeSelector.enabled &&\n        !RangeSelectorComposition_defined(rangeSelector) &&\n        this.options.rangeSelector) {\n        this.options.rangeSelector.enabled = true;\n        this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);\n    }\n    this.extraBottomMargin = false;\n    this.extraTopMargin = false;\n    if (rangeSelector) {\n        const verticalAlign = (optionsRangeSelector &&\n            optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.extraTopMargin = true;\n            }\n        }\n        if (this.extraBottomMargin !== extraBottomMarginWas ||\n            this.extraTopMargin !== extraTopMarginWas) {\n            this.isDirtyBox = true;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst RangeSelectorComposition = {\n    compose: RangeSelectorComposition_compose\n};\n/* harmony default export */ const RangeSelector_RangeSelectorComposition = (RangeSelectorComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGElement\"],\"commonjs\":[\"highcharts\",\"SVGElement\"],\"commonjs2\":[\"highcharts\",\"SVGElement\"],\"root\":[\"Highcharts\",\"SVGElement\"]}\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_ = __webpack_require__(28);\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_);\n;// ./code/es-modules/Stock/RangeSelector/RangeSelector.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { defaultOptions: RangeSelector_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\n\nconst { addEvent: RangeSelector_addEvent, createElement, css: RangeSelector_css, defined: RangeSelector_defined, destroyObjectProperties: RangeSelector_destroyObjectProperties, diffObjects, discardElement, extend: RangeSelector_extend, fireEvent: RangeSelector_fireEvent, isNumber: RangeSelector_isNumber, isString: RangeSelector_isString, merge: RangeSelector_merge, objectEach: RangeSelector_objectEach, pick: RangeSelector_pick, splat: RangeSelector_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the preferred input type based on a date format string.\n *\n * @private\n * @function preferredInputType\n */\nfunction preferredInputType(format) {\n    const hasTimeKey = (char) => new RegExp(`%[[a-zA-Z]*${char}`).test(format);\n    const ms = RangeSelector_isString(format) ?\n        format.indexOf('%L') !== -1 :\n        // Implemented but not typed as of 2024\n        format.fractionalSecondDigits;\n    if (ms) {\n        return 'text';\n    }\n    const date = RangeSelector_isString(format) ?\n        ['a', 'A', 'd', 'e', 'w', 'b', 'B', 'm', 'o', 'y', 'Y']\n            .some(hasTimeKey) :\n        format.dateStyle || format.day || format.month || format.year;\n    const time = RangeSelector_isString(format) ?\n        ['H', 'k', 'I', 'l', 'M', 'S'].some(hasTimeKey) :\n        format.timeStyle || format.hour || format.minute || format.second;\n    if (date && time) {\n        return 'datetime-local';\n    }\n    if (date) {\n        return 'date';\n    }\n    if (time) {\n        return 'time';\n    }\n    return 'text';\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The range selector.\n *\n * @private\n * @class\n * @name Highcharts.RangeSelector\n * @param {Highcharts.Chart} chart\n */\nclass RangeSelector {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(AxisClass, ChartClass) {\n        RangeSelector_RangeSelectorComposition.compose(AxisClass, ChartClass, RangeSelector);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.isDirty = false;\n        this.buttonOptions = RangeSelector.prototype.defaultButtons;\n        this.initialButtonGroupWidth = 0;\n        this.maxButtonWidth = () => {\n            let buttonWidth = 0;\n            this.buttons.forEach((button) => {\n                const bBox = button.getBBox();\n                if (bBox.width > buttonWidth) {\n                    buttonWidth = bBox.width;\n                }\n            });\n            return buttonWidth;\n        };\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * The method to run when one of the buttons in the range selectors is\n     * clicked\n     *\n     * @private\n     * @function Highcharts.RangeSelector#clickButton\n     * @param {number} i\n     *        The index of the button\n     * @param {boolean} [redraw]\n     */\n    clickButton(i, redraw) {\n        const rangeSelector = this, chart = rangeSelector.chart, rangeOptions = rangeSelector.buttonOptions[i], baseAxis = chart.xAxis[0], unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {}, type = rangeOptions.type, dataGrouping = rangeOptions.dataGrouping;\n        let dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, newMin, newMax = RangeSelector_isNumber(baseAxis?.max) ? Math.round(Math.min(baseAxis.max, dataMax ?? baseAxis.max)) : void 0, // #1568\n        baseXAxisOptions, range = rangeOptions._range, rangeMin, ctx, ytdExtremes, addOffsetMin = true;\n        // Chart has no data, base series is removed\n        if (dataMin === null || dataMax === null) {\n            return;\n        }\n        rangeSelector.setSelected(i);\n        // Apply dataGrouping associated to button\n        if (dataGrouping) {\n            this.forcedDataGrouping = true;\n            highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default().prototype.setDataGrouping.call(baseAxis || { chart: this.chart }, dataGrouping, false);\n            this.frozenStates = rangeOptions.preserveDataGrouping;\n        }\n        // Apply range\n        if (type === 'month' || type === 'year') {\n            if (!baseAxis) {\n                // This is set to the user options and picked up later when the\n                // axis is instantiated so that we know the min and max.\n                range = rangeOptions;\n            }\n            else {\n                ctx = {\n                    range: rangeOptions,\n                    max: newMax,\n                    chart: chart,\n                    dataMin: dataMin,\n                    dataMax: dataMax\n                };\n                newMin = baseAxis.minFromRange.call(ctx);\n                if (RangeSelector_isNumber(ctx.newMax)) {\n                    newMax = ctx.newMax;\n                }\n                // #15799: offsetMin is added in minFromRange so that it works\n                // with pre-selected buttons as well\n                addOffsetMin = false;\n            }\n            // Fixed times like minutes, hours, days\n        }\n        else if (range) {\n            if (RangeSelector_isNumber(newMax)) {\n                newMin = Math.max(newMax - range, dataMin);\n                newMax = Math.min(newMin + range, dataMax);\n                addOffsetMin = false;\n            }\n        }\n        else if (type === 'ytd') {\n            // On user clicks on the buttons, or a delayed action running from\n            // the beforeRender event (below), the baseAxis is defined.\n            if (baseAxis) {\n                // When \"ytd\" is the pre-selected button for the initial view,\n                // its calculation is delayed and rerun in the beforeRender\n                // event (below). When the series are initialized, but before\n                // the chart is rendered, we have access to the xData array\n                // (#942).\n                if (baseAxis.hasData() && (!RangeSelector_isNumber(dataMax) ||\n                    !RangeSelector_isNumber(dataMin))) {\n                    dataMin = Number.MAX_VALUE;\n                    dataMax = -Number.MAX_VALUE;\n                    chart.series.forEach((series) => {\n                        // Reassign it to the last item\n                        const xData = series.getColumn('x');\n                        if (xData.length) {\n                            dataMin = Math.min(xData[0], dataMin);\n                            dataMax = Math.max(xData[xData.length - 1], dataMax);\n                        }\n                    });\n                    redraw = false;\n                }\n                if (RangeSelector_isNumber(dataMax) && RangeSelector_isNumber(dataMin)) {\n                    ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin);\n                    newMin = rangeMin = ytdExtremes.min;\n                    newMax = ytdExtremes.max;\n                }\n                // \"ytd\" is pre-selected. We don't yet have access to processed\n                // point and extremes data (things like pointStart and pointInterval\n                // are missing), so we delay the process (#942)\n            }\n            else {\n                rangeSelector.deferredYTDClick = i;\n                return;\n            }\n        }\n        else if (type === 'all' && baseAxis) {\n            // If the navigator exist and the axis range is declared reset that\n            // range and from now on only use the range set by a user, #14742.\n            if (chart.navigator && chart.navigator.baseSeries[0]) {\n                chart.navigator.baseSeries[0].xAxis.options.range = void 0;\n            }\n            newMin = dataMin;\n            newMax = dataMax;\n        }\n        if (addOffsetMin && rangeOptions._offsetMin && RangeSelector_defined(newMin)) {\n            newMin += rangeOptions._offsetMin;\n        }\n        if (rangeOptions._offsetMax && RangeSelector_defined(newMax)) {\n            newMax += rangeOptions._offsetMax;\n        }\n        if (this.dropdown) {\n            this.dropdown.selectedIndex = i + 1;\n        }\n        // Update the chart\n        if (!baseAxis) {\n            // Axis not yet instantiated. Temporarily set min and range\n            // options and axes once defined and remove them on\n            // chart load (#4317 & #20529).\n            baseXAxisOptions = RangeSelector_splat(chart.options.xAxis || {})[0];\n            const axisRangeUpdateEvent = RangeSelector_addEvent(chart, 'afterCreateAxes', function () {\n                const xAxis = chart.xAxis[0];\n                xAxis.range = xAxis.options.range = range;\n                xAxis.min = xAxis.options.min = rangeMin;\n            });\n            RangeSelector_addEvent(chart, 'load', function resetMinAndRange() {\n                const xAxis = chart.xAxis[0];\n                chart.setFixedRange(rangeOptions._range);\n                xAxis.options.range = baseXAxisOptions.range;\n                xAxis.options.min = baseXAxisOptions.min;\n                axisRangeUpdateEvent(); // Remove event\n            });\n        }\n        else if (RangeSelector_isNumber(newMin) && RangeSelector_isNumber(newMax)) {\n            // Existing axis object. Set extremes after render time.\n            baseAxis.setExtremes(newMin, newMax, RangeSelector_pick(redraw, true), void 0, // Auto animation\n            {\n                trigger: 'rangeSelectorButton',\n                rangeSelectorButton: rangeOptions\n            });\n            chart.setFixedRange(rangeOptions._range);\n        }\n        RangeSelector_fireEvent(this, 'afterBtnClick');\n    }\n    /**\n     * Set the selected option. This method only sets the internal flag, it\n     * doesn't update the buttons or the actual zoomed range.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setSelected\n     * @param {number} [selected]\n     */\n    setSelected(selected) {\n        this.selected = this.options.selected = selected;\n    }\n    /**\n     * Initialize the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#init\n     * @param {Highcharts.Chart} chart\n     */\n    init(chart) {\n        const rangeSelector = this, options = chart.options.rangeSelector, buttonOptions = options.buttons, selectedOption = options.selected, blurInputs = function () {\n            const minInput = rangeSelector.minInput, maxInput = rangeSelector.maxInput;\n            // #3274 in some case blur is not defined\n            if (minInput && !!minInput.blur) {\n                RangeSelector_fireEvent(minInput, 'blur');\n            }\n            if (maxInput && !!maxInput.blur) {\n                RangeSelector_fireEvent(maxInput, 'blur');\n            }\n        };\n        rangeSelector.chart = chart;\n        rangeSelector.options = options;\n        rangeSelector.buttons = [];\n        rangeSelector.buttonOptions = buttonOptions;\n        this.eventsToUnbind = [];\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart.container, 'mousedown', blurInputs));\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'resize', blurInputs));\n        // Extend the buttonOptions with actual range\n        buttonOptions.forEach(rangeSelector.computeButtonRange);\n        // Zoomed range based on a pre-selected button index\n        if (typeof selectedOption !== 'undefined' &&\n            buttonOptions[selectedOption]) {\n            this.clickButton(selectedOption, false);\n        }\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'load', function () {\n            // If a data grouping is applied to the current button, release it\n            // when extremes change\n            if (chart.xAxis && chart.xAxis[0]) {\n                RangeSelector_addEvent(chart.xAxis[0], 'setExtremes', function (e) {\n                    if (RangeSelector_isNumber(this.max) &&\n                        RangeSelector_isNumber(this.min) &&\n                        this.max - this.min !== chart.fixedRange &&\n                        e.trigger !== 'rangeSelectorButton' &&\n                        e.trigger !== 'updatedData' &&\n                        rangeSelector.forcedDataGrouping &&\n                        !rangeSelector.frozenStates) {\n                        this.setDataGrouping(false, false);\n                    }\n                });\n            }\n        }));\n        this.createElements();\n    }\n    /**\n     * Dynamically update the range selector buttons after a new range has been\n     * set\n     *\n     * @private\n     * @function Highcharts.RangeSelector#updateButtonStates\n     */\n    updateButtonStates() {\n        const rangeSelector = this, chart = this.chart, dropdown = this.dropdown, dropdownLabel = this.dropdownLabel, baseAxis = chart.xAxis[0], actualRange = Math.round(baseAxis.max - baseAxis.min), hasNoData = !baseAxis.hasVisibleSeries, day = 24 * 36e5, // A single day in milliseconds\n        unionExtremes = (chart.scroller &&\n            chart.scroller.getUnionExtremes()) || baseAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin), ytdMin = ytdExtremes.min, ytdMax = ytdExtremes.max, selected = rangeSelector.selected, allButtonsEnabled = rangeSelector.options.allButtonsEnabled, buttonStates = new Array(rangeSelector.buttonOptions.length)\n            .fill(0), selectedExists = RangeSelector_isNumber(selected), buttons = rangeSelector.buttons;\n        let isSelectedTooGreat = false, selectedIndex = null;\n        rangeSelector.buttonOptions.forEach((rangeOptions, i) => {\n            const range = rangeOptions._range, type = rangeOptions.type, count = rangeOptions.count || 1, offsetRange = rangeOptions._offsetMax -\n                rangeOptions._offsetMin, isSelected = i === selected, \n            // Disable buttons where the range exceeds what is allowed i;\n            // the current view\n            isTooGreatRange = range >\n                dataMax - dataMin, \n            // Disable buttons where the range is smaller than the minimum\n            // range\n            isTooSmallRange = range < baseAxis.minRange;\n            // Do not select the YTD button if not explicitly told so\n            let isYTDButNotSelected = false, \n            // Disable the All button if we're already showing all\n            isSameRange = range === actualRange;\n            if (isSelected && isTooGreatRange) {\n                isSelectedTooGreat = true;\n            }\n            if (baseAxis.isOrdinal &&\n                baseAxis.ordinal?.positions &&\n                range &&\n                actualRange < range) {\n                // Handle ordinal ranges\n                const positions = baseAxis.ordinal.positions, prevOrdinalPosition = Axis_OrdinalAxis.Additions.findIndexOf(positions, baseAxis.min, true), nextOrdinalPosition = Math.min(Axis_OrdinalAxis.Additions.findIndexOf(positions, baseAxis.max, true) + 1, positions.length - 1);\n                if (positions[nextOrdinalPosition] -\n                    positions[prevOrdinalPosition] > range) {\n                    isSameRange = true;\n                }\n            }\n            else if (\n            // Months and years have variable range so we check the extremes\n            (type === 'month' || type === 'year') &&\n                (actualRange + 36e5 >=\n                    { month: 28, year: 365 }[type] * day * count - offsetRange) &&\n                (actualRange - 36e5 <=\n                    { month: 31, year: 366 }[type] * day * count + offsetRange)) {\n                isSameRange = true;\n            }\n            else if (type === 'ytd') {\n                isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange;\n                isYTDButNotSelected = !isSelected;\n            }\n            else if (type === 'all') {\n                isSameRange = (baseAxis.max - baseAxis.min >=\n                    dataMax - dataMin);\n            }\n            // The new zoom area happens to match the range for a button - mark\n            // it selected. This happens when scrolling across an ordinal gap.\n            // It can be seen in the intraday demos when selecting 1h and scroll\n            // across the night gap.\n            const disable = (!allButtonsEnabled &&\n                !(isSelectedTooGreat && type === 'all') &&\n                (isTooGreatRange ||\n                    isTooSmallRange ||\n                    hasNoData));\n            const select = ((isSelectedTooGreat && type === 'all') ||\n                (isYTDButNotSelected ? false : isSameRange) ||\n                (isSelected && rangeSelector.frozenStates));\n            if (disable) {\n                buttonStates[i] = 3;\n            }\n            else if (select) {\n                if (!selectedExists || i === selected) {\n                    selectedIndex = i;\n                }\n            }\n        });\n        if (selectedIndex !== null) {\n            buttonStates[selectedIndex] = 2;\n            rangeSelector.setSelected(selectedIndex);\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = selectedIndex + 1;\n            }\n        }\n        else {\n            rangeSelector.setSelected();\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = -1;\n            }\n            if (dropdownLabel) {\n                dropdownLabel.setState(0);\n                dropdownLabel.attr({\n                    text: (RangeSelector_defaultOptions.lang.rangeSelectorZoom || '') + ' ▾'\n                });\n            }\n        }\n        for (let i = 0; i < buttonStates.length; i++) {\n            const state = buttonStates[i];\n            const button = buttons[i];\n            if (button.state !== state) {\n                button.setState(state);\n                if (dropdown) {\n                    dropdown.options[i + 1].disabled = (state === 3);\n                    if (state === 2) {\n                        if (dropdownLabel) {\n                            dropdownLabel.setState(2);\n                            dropdownLabel.attr({\n                                text: rangeSelector.buttonOptions[i].text + ' ▾'\n                            });\n                        }\n                        dropdown.selectedIndex = i + 1;\n                    }\n                    const bbox = dropdownLabel.getBBox();\n                    RangeSelector_css(dropdown, {\n                        width: `${bbox.width}px`,\n                        height: `${bbox.height}px`\n                    });\n                }\n            }\n        }\n    }\n    /**\n     * Compute and cache the range for an individual button\n     *\n     * @private\n     * @function Highcharts.RangeSelector#computeButtonRange\n     * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions\n     */\n    computeButtonRange(rangeOptions) {\n        const type = rangeOptions.type, count = rangeOptions.count || 1, \n        // These time intervals have a fixed number of milliseconds, as\n        // opposed to month, ytd and year\n        fixedTimes = {\n            millisecond: 1,\n            second: 1000,\n            minute: 60 * 1000,\n            hour: 3600 * 1000,\n            day: 24 * 3600 * 1000,\n            week: 7 * 24 * 3600 * 1000\n        };\n        // Store the range on the button object\n        if (fixedTimes[type]) {\n            rangeOptions._range = fixedTimes[type] * count;\n        }\n        else if (type === 'month' || type === 'year') {\n            rangeOptions._range = {\n                month: 30,\n                year: 365\n            }[type] * 24 * 36e5 * count;\n        }\n        rangeOptions._offsetMin = RangeSelector_pick(rangeOptions.offsetMin, 0);\n        rangeOptions._offsetMax = RangeSelector_pick(rangeOptions.offsetMax, 0);\n        rangeOptions._range +=\n            rangeOptions._offsetMax - rangeOptions._offsetMin;\n    }\n    /**\n     * Get the unix timestamp of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getInputValue\n     */\n    getInputValue(name) {\n        const input = name === 'min' ? this.minInput : this.maxInput;\n        const options = this.chart.options\n            .rangeSelector;\n        const time = this.chart.time;\n        if (input) {\n            return ((input.type === 'text' && options.inputDateParser) ||\n                this.defaultInputDateParser)(input.value, time.timezone === 'UTC', time);\n        }\n        return 0;\n    }\n    /**\n     * Set the internal and displayed value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputValue\n     */\n    setInputValue(name, inputTime) {\n        const options = this.options, time = this.chart.time, input = name === 'min' ? this.minInput : this.maxInput, dateBox = name === 'min' ? this.minDateBox : this.maxDateBox;\n        if (input) {\n            input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n            const hcTimeAttr = input.getAttribute('data-hc-time');\n            let updatedTime = RangeSelector_defined(hcTimeAttr) ? Number(hcTimeAttr) : void 0;\n            if (RangeSelector_defined(inputTime)) {\n                const previousTime = updatedTime;\n                if (RangeSelector_defined(previousTime)) {\n                    input.setAttribute('data-hc-time-previous', previousTime);\n                }\n                input.setAttribute('data-hc-time', inputTime);\n                updatedTime = inputTime;\n            }\n            input.value = time.dateFormat((this.inputTypeFormats[input.type] ||\n                options.inputEditDateFormat), updatedTime);\n            if (dateBox) {\n                dateBox.attr({\n                    text: time.dateFormat(options.inputDateFormat, updatedTime)\n                });\n            }\n        }\n    }\n    /**\n     * Set the min and max value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputExtremes\n     */\n    setInputExtremes(name, min, max) {\n        const input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            const format = this.inputTypeFormats[input.type];\n            const time = this.chart.time;\n            if (format) {\n                const newMin = time.dateFormat(format, min);\n                if (input.min !== newMin) {\n                    input.min = newMin;\n                }\n                const newMax = time.dateFormat(format, max);\n                if (input.max !== newMax) {\n                    input.max = newMax;\n                }\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#showInput\n     * @param {string} name\n     */\n    showInput(name) {\n        const dateBox = name === 'min' ? this.minDateBox : this.maxDateBox, input = name === 'min' ? this.minInput : this.maxInput;\n        if (input && dateBox && this.inputGroup) {\n            const isTextInput = input.type === 'text', { translateX = 0, translateY = 0 } = this.inputGroup, { x = 0, width = 0, height = 0 } = dateBox, { inputBoxWidth } = this.options;\n            RangeSelector_css(input, {\n                width: isTextInput ?\n                    ((width + (inputBoxWidth ? -2 : 20)) + 'px') :\n                    'auto',\n                height: (height - 2) + 'px',\n                border: '2px solid silver'\n            });\n            if (isTextInput && inputBoxWidth) {\n                RangeSelector_css(input, {\n                    left: (translateX + x) + 'px',\n                    top: translateY + 'px'\n                });\n                // Inputs of types date, time or datetime-local should be centered\n                // on top of the dateBox\n            }\n            else {\n                RangeSelector_css(input, {\n                    left: Math.min(Math.round(x +\n                        translateX -\n                        (input.offsetWidth - width) / 2), this.chart.chartWidth - input.offsetWidth) + 'px',\n                    top: (translateY - (input.offsetHeight - height) / 2) + 'px'\n                });\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideInput\n     * @param {string} name\n     */\n    hideInput(name) {\n        const input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            RangeSelector_css(input, {\n                top: '-9999em',\n                border: 0,\n                width: '1px',\n                height: '1px'\n            });\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#defaultInputDateParser\n     */\n    defaultInputDateParser(inputDate, useUTC, time) {\n        return time?.parse(inputDate) || 0;\n    }\n    /**\n     * Draw either the 'from' or the 'to' HTML input box of the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#drawInput\n     */\n    drawInput(name) {\n        const { chart, div, inputGroup } = this;\n        const rangeSelector = this, chartStyle = chart.renderer.style || {}, renderer = chart.renderer, options = chart.options.rangeSelector, lang = RangeSelector_defaultOptions.lang, isMin = name === 'min';\n        /**\n         * @private\n         */\n        function updateExtremes(name) {\n            const { maxInput, minInput } = rangeSelector, chartAxis = chart.xAxis[0], unionExtremes = chart.scroller?.getUnionExtremes() || chartAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, currentExtreme = chart.xAxis[0].getExtremes()[name];\n            let value = rangeSelector.getInputValue(name);\n            if (RangeSelector_isNumber(value) && value !== currentExtreme) {\n                // Validate the extremes. If it goes beyond the data min or\n                // max, use the actual data extreme (#2438).\n                if (isMin && maxInput && RangeSelector_isNumber(dataMin)) {\n                    if (value > Number(maxInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value < dataMin) {\n                        value = dataMin;\n                    }\n                }\n                else if (minInput && RangeSelector_isNumber(dataMax)) {\n                    if (value < Number(minInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value > dataMax) {\n                        value = dataMax;\n                    }\n                }\n                // Set the extremes\n                if (typeof value !== 'undefined') { // @todo typeof undefined\n                    chartAxis.setExtremes(isMin ? value : chartAxis.min, isMin ? chartAxis.max : value, void 0, void 0, { trigger: 'rangeSelectorInput' });\n                }\n            }\n        }\n        // Create the text label\n        const text = lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'] || '';\n        const label = renderer\n            .label(text, 0)\n            .addClass('highcharts-range-label')\n            .attr({\n            padding: text ? 2 : 0,\n            height: text ? options.inputBoxHeight : 0\n        })\n            .add(inputGroup);\n        // Create an SVG label that shows updated date ranges and records click\n        // events that bring in the HTML input.\n        const dateBox = renderer\n            .label('', 0)\n            .addClass('highcharts-range-input')\n            .attr({\n            padding: 2,\n            width: options.inputBoxWidth,\n            height: options.inputBoxHeight,\n            'text-align': 'center'\n        })\n            .on('click', function () {\n            // If it is already focused, the onfocus event doesn't fire\n            // (#3713)\n            rangeSelector.showInput(name);\n            rangeSelector[name + 'Input'].focus();\n        });\n        if (!chart.styledMode) {\n            dateBox.attr({\n                stroke: options.inputBoxBorderColor,\n                'stroke-width': 1\n            });\n        }\n        dateBox.add(inputGroup);\n        // Create the HTML input element. This is rendered as 1x1 pixel then set\n        // to the right size when focused.\n        const input = createElement('input', {\n            name: name,\n            className: 'highcharts-range-selector'\n        }, void 0, div);\n        // #14788: Setting input.type to an unsupported type throws in IE, so\n        // we need to use setAttribute instead\n        input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n        if (!chart.styledMode) {\n            // Styles\n            label.css(RangeSelector_merge(chartStyle, options.labelStyle));\n            dateBox.css(RangeSelector_merge({\n                color: \"#333333\" /* Palette.neutralColor80 */\n            }, chartStyle, options.inputStyle));\n            RangeSelector_css(input, RangeSelector_extend({\n                position: 'absolute',\n                border: 0,\n                boxShadow: '0 0 15px rgba(0,0,0,0.3)',\n                width: '1px', // Chrome needs a pixel to see it\n                height: '1px',\n                padding: 0,\n                textAlign: 'center',\n                fontSize: chartStyle.fontSize,\n                fontFamily: chartStyle.fontFamily,\n                top: '-9999em' // #4798\n            }, options.inputStyle));\n        }\n        // Blow up the input box\n        input.onfocus = () => {\n            rangeSelector.showInput(name);\n        };\n        // Hide away the input box\n        input.onblur = () => {\n            // Update extremes only when inputs are active\n            if (input === (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).doc.activeElement) { // Only when focused\n                // Update also when no `change` event is triggered, like when\n                // clicking inside the SVG (#4710)\n                updateExtremes(name);\n            }\n            // #10404 - move hide and blur outside focus\n            rangeSelector.hideInput(name);\n            rangeSelector.setInputValue(name);\n            input.blur(); // #4606\n        };\n        let keyDown = false;\n        // Handle changes in the input boxes\n        input.onchange = () => {\n            // Update extremes and blur input when clicking date input calendar\n            if (!keyDown) {\n                updateExtremes(name);\n                rangeSelector.hideInput(name);\n                input.blur();\n            }\n        };\n        input.onkeypress = (event) => {\n            // IE does not fire onchange on enter\n            if (event.keyCode === 13) {\n                updateExtremes(name);\n            }\n        };\n        input.onkeydown = (event) => {\n            keyDown = true;\n            // Arrow keys\n            if (event.key === 'ArrowUp' ||\n                event.key === 'ArrowDown' ||\n                event.key === 'Tab') {\n                updateExtremes(name);\n            }\n        };\n        input.onkeyup = () => {\n            keyDown = false;\n        };\n        return { dateBox, input, label };\n    }\n    /**\n     * Get the position of the range selector buttons and inputs. This can be\n     * overridden from outside for custom positioning.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getPosition\n     */\n    getPosition() {\n        const chart = this.chart, options = chart.options.rangeSelector, top = options.verticalAlign === 'top' ?\n            chart.plotTop - chart.axisOffset[0] :\n            0; // Set offset only for verticalAlign top\n        return {\n            buttonTop: top + options.buttonPosition.y,\n            inputTop: top + options.inputPosition.y - 10\n        };\n    }\n    /**\n     * Get the extremes of YTD. Will choose dataMax if its value is lower than\n     * the current timestamp. Will choose dataMin if its value is higher than\n     * the timestamp for the start of current year.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getYTDExtremes\n     * @return {*}\n     * Returns min and max for the YTD\n     */\n    getYTDExtremes(dataMax, dataMin) {\n        const time = this.chart.time, year = time.toParts(dataMax)[0], startOfYear = time.makeTime(year, 0);\n        return {\n            max: dataMax,\n            min: Math.max(dataMin, startOfYear)\n        };\n    }\n    createElements() {\n        const chart = this.chart, renderer = chart.renderer, container = chart.container, chartOptions = chart.options, options = chartOptions.rangeSelector, inputEnabled = options.inputEnabled, inputsZIndex = RangeSelector_pick(chartOptions.chart.style?.zIndex, 0) + 1;\n        if (options.enabled === false) {\n            return;\n        }\n        this.group = renderer.g('range-selector-group')\n            .attr({\n            zIndex: 7\n        })\n            .add();\n        this.div = createElement('div', void 0, {\n            position: 'relative',\n            height: 0,\n            zIndex: inputsZIndex\n        });\n        if (this.buttonOptions.length) {\n            this.renderButtons();\n        }\n        // First create a wrapper outside the container in order to make\n        // the inputs work and make export correct\n        if (container.parentNode) {\n            container.parentNode.insertBefore(this.div, container);\n        }\n        if (inputEnabled) {\n            this.createInputs();\n        }\n    }\n    /**\n     * Create the input elements and its group.\n     *\n     */\n    createInputs() {\n        this.inputGroup = this.chart.renderer.g('input-group').add(this.group);\n        const minElems = this.drawInput('min');\n        this.minDateBox = minElems.dateBox;\n        this.minLabel = minElems.label;\n        this.minInput = minElems.input;\n        const maxElems = this.drawInput('max');\n        this.maxDateBox = maxElems.dateBox;\n        this.maxLabel = maxElems.label;\n        this.maxInput = maxElems.input;\n    }\n    /**\n     * Render the range selector including the buttons and the inputs. The first\n     * time render is called, the elements are created and positioned. On\n     * subsequent calls, they are moved and updated.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#render\n     * @param {number} [min]\n     *        X axis minimum\n     * @param {number} [max]\n     *        X axis maximum\n     */\n    render(min, max) {\n        if (this.options.enabled === false) {\n            return;\n        }\n        const chart = this.chart, chartOptions = chart.options, options = chartOptions.rangeSelector, \n        // Place inputs above the container\n        inputEnabled = options.inputEnabled;\n        if (inputEnabled) {\n            if (!this.inputGroup) {\n                this.createInputs();\n            }\n            // Set or reset the input values\n            this.setInputValue('min', min);\n            this.setInputValue('max', max);\n            if (!this.chart.styledMode) {\n                this.maxLabel?.css(options.labelStyle);\n                this.minLabel?.css(options.labelStyle);\n            }\n            const unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || chart.xAxis[0] || {};\n            if (RangeSelector_defined(unionExtremes.dataMin) &&\n                RangeSelector_defined(unionExtremes.dataMax)) {\n                const minRange = chart.xAxis[0].minRange || 0;\n                this.setInputExtremes('min', unionExtremes.dataMin, Math.min(unionExtremes.dataMax, this.getInputValue('max')) - minRange);\n                this.setInputExtremes('max', Math.max(unionExtremes.dataMin, this.getInputValue('min')) + minRange, unionExtremes.dataMax);\n            }\n            // Reflow\n            if (this.inputGroup) {\n                let x = 0;\n                [\n                    this.minLabel,\n                    this.minDateBox,\n                    this.maxLabel,\n                    this.maxDateBox\n                ].forEach((label) => {\n                    if (label) {\n                        const { width } = label.getBBox();\n                        if (width) {\n                            label.attr({ x });\n                            x += width + options.inputSpacing;\n                        }\n                    }\n                });\n            }\n        }\n        else {\n            if (this.inputGroup) {\n                this.inputGroup.destroy();\n                delete this.inputGroup;\n            }\n        }\n        if (!this.chart.styledMode) {\n            if (this.zoomText) {\n                this.zoomText.css(options.labelStyle);\n            }\n        }\n        this.alignElements();\n        this.updateButtonStates();\n    }\n    /**\n     * Render the range buttons. This only runs the first time, later the\n     * positioning is laid out in alignElements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#renderButtons\n     */\n    renderButtons() {\n        var _a;\n        const { chart, options } = this;\n        const lang = RangeSelector_defaultOptions.lang;\n        const renderer = chart.renderer;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        const states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonGroup = renderer.g('range-selector-buttons').add(this.group);\n        const dropdown = this.dropdown = createElement('select', void 0, {\n            position: 'absolute',\n            padding: 0,\n            border: 0,\n            cursor: 'pointer',\n            opacity: 0.0001\n        }, this.div);\n        // Create a label for dropdown select element\n        const userButtonTheme = chart.userOptions.rangeSelector?.buttonTheme;\n        this.dropdownLabel = renderer.button('', 0, 0, () => { }, RangeSelector_merge(buttonTheme, {\n            'stroke-width': RangeSelector_pick(buttonTheme['stroke-width'], 0),\n            width: 'auto',\n            paddingLeft: RangeSelector_pick(options.buttonTheme.paddingLeft, userButtonTheme?.padding, 8),\n            paddingRight: RangeSelector_pick(options.buttonTheme.paddingRight, userButtonTheme?.padding, 8)\n        }), states && states.hover, states && states.select, states && states.disabled)\n            .hide()\n            .add(this.group);\n        // Prevent page zoom on iPhone\n        RangeSelector_addEvent(dropdown, 'touchstart', () => {\n            dropdown.style.fontSize = '16px';\n        });\n        // Forward events from select to button\n        const mouseOver = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS ? 'mouseover' : 'mouseenter', mouseOut = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS ? 'mouseout' : 'mouseleave';\n        RangeSelector_addEvent(dropdown, mouseOver, () => {\n            RangeSelector_fireEvent(this.dropdownLabel.element, mouseOver);\n        });\n        RangeSelector_addEvent(dropdown, mouseOut, () => {\n            RangeSelector_fireEvent(this.dropdownLabel.element, mouseOut);\n        });\n        RangeSelector_addEvent(dropdown, 'change', () => {\n            const button = this.buttons[dropdown.selectedIndex - 1];\n            RangeSelector_fireEvent(button.element, 'click');\n        });\n        this.zoomText = renderer\n            .label(lang.rangeSelectorZoom || '', 0)\n            .attr({\n            padding: options.buttonTheme.padding,\n            height: options.buttonTheme.height,\n            paddingLeft: 0,\n            paddingRight: 0\n        })\n            .add(this.buttonGroup);\n        if (!this.chart.styledMode) {\n            this.zoomText.css(options.labelStyle);\n            (_a = options.buttonTheme)['stroke-width'] ?? (_a['stroke-width'] = 0);\n        }\n        createElement('option', {\n            textContent: this.zoomText.textStr,\n            disabled: true\n        }, void 0, dropdown);\n        this.createButtons();\n    }\n    createButtons() {\n        const { options } = this;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        const states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        const width = buttonTheme.width || 28;\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonOptions.forEach((rangeOptions, i) => {\n            this.createButton(rangeOptions, i, width, states);\n        });\n    }\n    createButton(rangeOptions, i, width, states) {\n        const { dropdown, buttons, chart, options } = this;\n        const renderer = chart.renderer;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        dropdown?.add(createElement('option', {\n            textContent: rangeOptions.title || rangeOptions.text\n        }), i + 2);\n        buttons[i] = renderer\n            .button(rangeOptions.text, 0, 0, (e) => {\n            // Extract events from button object and call\n            const buttonEvents = (rangeOptions.events && rangeOptions.events.click);\n            let callDefaultEvent;\n            if (buttonEvents) {\n                callDefaultEvent =\n                    buttonEvents.call(rangeOptions, e);\n            }\n            if (callDefaultEvent !== false) {\n                this.clickButton(i);\n            }\n            this.isActive = true;\n        }, buttonTheme, states && states.hover, states && states.select, states && states.disabled)\n            .attr({\n            'text-align': 'center',\n            width\n        })\n            .add(this.buttonGroup);\n        if (rangeOptions.title) {\n            buttons[i].attr('title', rangeOptions.title);\n        }\n    }\n    /**\n     * Align the elements horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignElements\n     */\n    alignElements() {\n        const { buttonGroup, buttons, chart, group, inputGroup, options, zoomText } = this;\n        const chartOptions = chart.options;\n        const navButtonOptions = (chartOptions.exporting &&\n            chartOptions.exporting.enabled !== false &&\n            chartOptions.navigation &&\n            chartOptions.navigation.buttonOptions);\n        const { buttonPosition, inputPosition, verticalAlign } = options;\n        // Get the X offset required to avoid overlapping with the exporting\n        // button. This is used both by the buttonGroup and the inputGroup.\n        const getXOffsetForExportButton = (group, position, rightAligned) => {\n            if (navButtonOptions &&\n                this.titleCollision(chart) &&\n                verticalAlign === 'top' &&\n                rightAligned && ((position.y -\n                group.getBBox().height - 12) <\n                ((navButtonOptions.y || 0) +\n                    (navButtonOptions.height || 0) +\n                    chart.spacing[0]))) {\n                return -40;\n            }\n            return 0;\n        };\n        let plotLeft = chart.plotLeft;\n        if (group && buttonPosition && inputPosition) {\n            let translateX = buttonPosition.x - chart.spacing[3];\n            if (buttonGroup) {\n                this.positionButtons();\n                if (!this.initialButtonGroupWidth) {\n                    let width = 0;\n                    if (zoomText) {\n                        width += zoomText.getBBox().width + 5;\n                    }\n                    buttons.forEach((button, i) => {\n                        width += button.width || 0;\n                        if (i !== buttons.length - 1) {\n                            width += options.buttonSpacing;\n                        }\n                    });\n                    this.initialButtonGroupWidth = width;\n                }\n                plotLeft -= chart.spacing[3];\n                // Detect collision between button group and exporting\n                const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition, buttonPosition.align === 'right' ||\n                    inputPosition.align === 'right');\n                this.alignButtonGroup(xOffsetForExportButton);\n                if (this.buttonGroup?.translateY) {\n                    this.dropdownLabel\n                        .attr({ y: this.buttonGroup.translateY });\n                }\n                // Skip animation\n                group.placed = buttonGroup.placed = chart.hasLoaded;\n            }\n            let xOffsetForExportButton = 0;\n            if (options.inputEnabled && inputGroup) {\n                // Detect collision between the input group and exporting button\n                xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition, buttonPosition.align === 'right' ||\n                    inputPosition.align === 'right');\n                if (inputPosition.align === 'left') {\n                    translateX = plotLeft;\n                }\n                else if (inputPosition.align === 'right') {\n                    translateX = -Math.max(chart.axisOffset[1], -xOffsetForExportButton);\n                }\n                // Update the alignment to the updated spacing box\n                inputGroup.align({\n                    y: inputPosition.y,\n                    width: inputGroup.getBBox().width,\n                    align: inputPosition.align,\n                    // Fix wrong getBBox() value on right align\n                    x: inputPosition.x + translateX - 2\n                }, true, chart.spacingBox);\n                // Skip animation\n                inputGroup.placed = chart.hasLoaded;\n            }\n            this.handleCollision(xOffsetForExportButton);\n            // Vertical align\n            group.align({\n                verticalAlign\n            }, true, chart.spacingBox);\n            const alignTranslateY = group.alignAttr.translateY;\n            // Set position\n            let groupHeight = group.getBBox().height + 20; // # 20 padding\n            let translateY = 0;\n            // Calculate bottom position\n            if (verticalAlign === 'bottom') {\n                const legendOptions = chart.legend && chart.legend.options;\n                const legendHeight = (legendOptions &&\n                    legendOptions.verticalAlign === 'bottom' &&\n                    legendOptions.enabled &&\n                    !legendOptions.floating ?\n                    (chart.legend.legendHeight +\n                        RangeSelector_pick(legendOptions.margin, 10)) :\n                    0);\n                groupHeight = groupHeight + legendHeight - 20;\n                translateY = (alignTranslateY -\n                    groupHeight -\n                    (options.floating ? 0 : options.y) -\n                    (chart.titleOffset ? chart.titleOffset[2] : 0) -\n                    10 // 10 spacing\n                );\n            }\n            if (verticalAlign === 'top') {\n                if (options.floating) {\n                    translateY = 0;\n                }\n                if (chart.titleOffset && chart.titleOffset[0]) {\n                    translateY = chart.titleOffset[0];\n                }\n                translateY += ((chart.margin[0] - chart.spacing[0]) || 0);\n            }\n            else if (verticalAlign === 'middle') {\n                if (inputPosition.y === buttonPosition.y) {\n                    translateY = alignTranslateY;\n                }\n                else if (inputPosition.y || buttonPosition.y) {\n                    if (inputPosition.y < 0 ||\n                        buttonPosition.y < 0) {\n                        translateY -= Math.min(inputPosition.y, buttonPosition.y);\n                    }\n                    else {\n                        translateY = alignTranslateY - groupHeight;\n                    }\n                }\n            }\n            group.translate(options.x, options.y + Math.floor(translateY));\n            // Translate HTML inputs\n            const { minInput, maxInput, dropdown } = this;\n            if (options.inputEnabled && minInput && maxInput) {\n                minInput.style.marginTop = group.translateY + 'px';\n                maxInput.style.marginTop = group.translateY + 'px';\n            }\n            if (dropdown) {\n                dropdown.style.marginTop = group.translateY + 'px';\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    redrawElements() {\n        const chart = this.chart, { inputBoxHeight, inputBoxBorderColor } = this.options;\n        this.maxDateBox?.attr({\n            height: inputBoxHeight\n        });\n        this.minDateBox?.attr({\n            height: inputBoxHeight\n        });\n        if (!chart.styledMode) {\n            this.maxDateBox?.attr({\n                stroke: inputBoxBorderColor\n            });\n            this.minDateBox?.attr({\n                stroke: inputBoxBorderColor\n            });\n        }\n        if (this.isDirty) {\n            this.isDirty = false;\n            // Reset this prop to force redrawing collapse of buttons\n            this.isCollapsed = void 0;\n            const newButtonsOptions = this.options.buttons ?? [];\n            const btnLength = Math.min(newButtonsOptions.length, this.buttonOptions.length);\n            const { dropdown, options } = this;\n            const buttonTheme = RangeSelector_merge(options.buttonTheme);\n            const states = buttonTheme && buttonTheme.states;\n            // Prevent the button from resetting the width when the button state\n            // changes since we need more control over the width when collapsing\n            // the buttons\n            const width = buttonTheme.width || 28;\n            // Destroy additional buttons\n            if (newButtonsOptions.length < this.buttonOptions.length) {\n                for (let i = this.buttonOptions.length - 1; i >= newButtonsOptions.length; i--) {\n                    const btn = this.buttons.pop();\n                    btn?.destroy();\n                    this.dropdown?.options.remove(i + 1);\n                }\n            }\n            // Update current buttons\n            for (let i = btnLength - 1; i >= 0; i--) {\n                const diff = diffObjects(newButtonsOptions[i], this.buttonOptions[i]);\n                if (Object.keys(diff).length !== 0) {\n                    const rangeOptions = newButtonsOptions[i];\n                    this.buttons[i].destroy();\n                    dropdown?.options.remove(i + 1);\n                    this.createButton(rangeOptions, i, width, states);\n                    this.computeButtonRange(rangeOptions);\n                }\n            }\n            // Create missing buttons\n            if (newButtonsOptions.length > this.buttonOptions.length) {\n                for (let i = this.buttonOptions.length; i < newButtonsOptions.length; i++) {\n                    this.createButton(newButtonsOptions[i], i, width, states);\n                    this.computeButtonRange(newButtonsOptions[i]);\n                }\n            }\n            this.buttonOptions = this.options.buttons ?? [];\n            if (RangeSelector_defined(this.options.selected) && this.buttons.length) {\n                this.clickButton(this.options.selected, false);\n            }\n        }\n    }\n    /**\n     * Align the button group horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignButtonGroup\n     * @param {number} xOffsetForExportButton\n     * @param {number} [width]\n     */\n    alignButtonGroup(xOffsetForExportButton, width) {\n        const { chart, options, buttonGroup, dropdown, dropdownLabel } = this;\n        const { buttonPosition } = options;\n        const plotLeft = chart.plotLeft - chart.spacing[3];\n        let translateX = buttonPosition.x - chart.spacing[3];\n        let dropdownTranslateX = chart.plotLeft;\n        if (buttonPosition.align === 'right') {\n            translateX += xOffsetForExportButton - plotLeft; // #13014\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth +\n                    xOffsetForExportButton -\n                    this.maxButtonWidth() - 20;\n            }\n        }\n        else if (buttonPosition.align === 'center') {\n            translateX -= plotLeft / 2;\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth / 2 -\n                    this.maxButtonWidth();\n            }\n        }\n        if (dropdown) {\n            RangeSelector_css(dropdown, {\n                left: dropdownTranslateX + 'px',\n                top: buttonGroup?.translateY + 'px'\n            });\n        }\n        dropdownLabel?.attr({\n            x: dropdownTranslateX\n        });\n        if (buttonGroup) {\n            // Align button group\n            buttonGroup.align({\n                y: buttonPosition.y,\n                width: RangeSelector_pick(width, this.initialButtonGroupWidth),\n                align: buttonPosition.align,\n                x: translateX\n            }, true, chart.spacingBox);\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#positionButtons\n     */\n    positionButtons() {\n        const { buttons, chart, options, zoomText } = this;\n        const verb = chart.hasLoaded ? 'animate' : 'attr';\n        const { buttonPosition } = options;\n        const plotLeft = chart.plotLeft;\n        let buttonLeft = plotLeft;\n        if (zoomText && zoomText.visibility !== 'hidden') {\n            // #8769, allow dynamically updating margins\n            zoomText[verb]({\n                x: RangeSelector_pick(plotLeft + buttonPosition.x, plotLeft)\n            });\n            // Button start position\n            buttonLeft += buttonPosition.x +\n                zoomText.getBBox().width + 5;\n        }\n        for (let i = 0, iEnd = this.buttonOptions.length; i < iEnd; ++i) {\n            if (buttons[i].visibility !== 'hidden') {\n                buttons[i][verb]({ x: buttonLeft });\n                // Increase the button position for the next button\n                buttonLeft += (buttons[i].width || 0) + options.buttonSpacing;\n            }\n            else {\n                buttons[i][verb]({ x: plotLeft });\n            }\n        }\n    }\n    /**\n     * Handle collision between the button group and the input group\n     *\n     * @private\n     * @function Highcharts.RangeSelector#handleCollision\n     *\n     * @param  {number} xOffsetForExportButton\n     *                  The X offset of the group required to make room for the\n     *                  exporting button\n     */\n    handleCollision(xOffsetForExportButton) {\n        const { chart, buttonGroup, inputGroup, initialButtonGroupWidth } = this;\n        const { buttonPosition, dropdown, inputPosition } = this.options;\n        const moveInputsDown = () => {\n            if (inputGroup && buttonGroup) {\n                inputGroup.attr({\n                    translateX: inputGroup.alignAttr.translateX + (chart.axisOffset[1] >= -xOffsetForExportButton ?\n                        0 :\n                        -xOffsetForExportButton),\n                    translateY: inputGroup.alignAttr.translateY +\n                        buttonGroup.getBBox().height + 10\n                });\n            }\n        };\n        // Detect collision\n        if (inputGroup && buttonGroup) {\n            if (inputPosition.align === buttonPosition.align) {\n                moveInputsDown();\n                if (initialButtonGroupWidth >\n                    chart.plotWidth + xOffsetForExportButton - 20) {\n                    this.collapseButtons();\n                }\n                else {\n                    this.expandButtons();\n                }\n            }\n            else if (initialButtonGroupWidth -\n                xOffsetForExportButton +\n                inputGroup.getBBox().width >\n                chart.plotWidth) {\n                if (dropdown === 'responsive') {\n                    this.collapseButtons();\n                }\n                else {\n                    moveInputsDown();\n                }\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        else if (buttonGroup && dropdown === 'responsive') {\n            if (initialButtonGroupWidth > chart.plotWidth) {\n                this.collapseButtons();\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        // Forced states\n        if (buttonGroup) {\n            if (dropdown === 'always') {\n                this.collapseButtons();\n            }\n            if (dropdown === 'never') {\n                this.expandButtons();\n            }\n        }\n        this.alignButtonGroup(xOffsetForExportButton);\n    }\n    /**\n     * Collapse the buttons and show the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#collapseButtons\n     * @param {number} xOffsetForExportButton\n     */\n    collapseButtons() {\n        const { buttons, zoomText } = this;\n        if (this.isCollapsed === true) {\n            return;\n        }\n        this.isCollapsed = true;\n        zoomText.hide();\n        buttons.forEach((button) => void button.hide());\n        this.showDropdown();\n    }\n    /**\n     * Show all the buttons and hide the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#expandButtons\n     */\n    expandButtons() {\n        const { buttons, zoomText } = this;\n        if (this.isCollapsed === false) {\n            return;\n        }\n        this.isCollapsed = false;\n        this.hideDropdown();\n        zoomText.show();\n        buttons.forEach((button) => void button.show());\n        this.positionButtons();\n    }\n    /**\n     * Position the select element on top of the button.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#showDropdown\n     */\n    showDropdown() {\n        const { buttonGroup, dropdownLabel, dropdown } = this;\n        if (buttonGroup && dropdown) {\n            dropdownLabel.show();\n            RangeSelector_css(dropdown, { visibility: 'inherit' });\n            this.hasVisibleDropdown = true;\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideDropdown\n     */\n    hideDropdown() {\n        const { dropdown } = this;\n        if (dropdown) {\n            this.dropdownLabel.hide();\n            RangeSelector_css(dropdown, {\n                visibility: 'hidden',\n                width: '1px',\n                height: '1px'\n            });\n            this.hasVisibleDropdown = false;\n        }\n    }\n    /**\n     * Extracts height of range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getHeight\n     * @return {number}\n     * Returns rangeSelector height\n     */\n    getHeight() {\n        const rangeSelector = this, options = rangeSelector.options, rangeSelectorGroup = rangeSelector.group, inputPosition = options.inputPosition, buttonPosition = options.buttonPosition, yPosition = options.y, buttonPositionY = buttonPosition.y, inputPositionY = inputPosition.y;\n        let rangeSelectorHeight = 0;\n        if (options.height) {\n            return options.height;\n        }\n        // Align the elements before we read the height in case we're switching\n        // between wrapped and non-wrapped layout\n        this.alignElements();\n        rangeSelectorHeight = rangeSelectorGroup ?\n            // 13px to keep back compatibility\n            (rangeSelectorGroup.getBBox(true).height) + 13 +\n                yPosition :\n            0;\n        const minPosition = Math.min(inputPositionY, buttonPositionY);\n        if ((inputPositionY < 0 && buttonPositionY < 0) ||\n            (inputPositionY > 0 && buttonPositionY > 0)) {\n            rangeSelectorHeight += Math.abs(minPosition);\n        }\n        return rangeSelectorHeight;\n    }\n    /**\n     * Detect collision with title or subtitle\n     *\n     * @private\n     * @function Highcharts.RangeSelector#titleCollision\n     * @return {boolean}\n     * Returns collision status\n     */\n    titleCollision(chart) {\n        return !(chart.options.title.text ||\n            chart.options.subtitle.text);\n    }\n    /**\n     * Update the range selector with new options\n     *\n     * @private\n     * @function Highcharts.RangeSelector#update\n     * @param {Highcharts.RangeSelectorOptions} options\n     */\n    update(options, redraw = true) {\n        const chart = this.chart;\n        RangeSelector_merge(true, this.options, options);\n        if (this.options.selected &&\n            this.options.selected >= this.options.buttons.length) {\n            this.options.selected = void 0;\n            chart.options.rangeSelector.selected = void 0;\n        }\n        if (RangeSelector_defined(options.enabled)) {\n            this.destroy();\n            return this.init(chart);\n        }\n        this.isDirty = !!options.buttons;\n        if (redraw) {\n            this.render();\n        }\n    }\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#destroy\n     */\n    destroy() {\n        const rSelector = this, minInput = rSelector.minInput, maxInput = rSelector.maxInput;\n        if (rSelector.eventsToUnbind) {\n            rSelector.eventsToUnbind.forEach((unbind) => unbind());\n            rSelector.eventsToUnbind = void 0;\n        }\n        // Destroy elements in collections\n        RangeSelector_destroyObjectProperties(rSelector.buttons);\n        // Clear input element events\n        if (minInput) {\n            minInput.onfocus = minInput.onblur = minInput.onchange = null;\n        }\n        if (maxInput) {\n            maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;\n        }\n        // Destroy HTML and SVG elements\n        RangeSelector_objectEach(rSelector, function (val, key) {\n            if (val && key !== 'chart') {\n                if (val instanceof (highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default())) {\n                    // SVGElement\n                    val.destroy();\n                }\n                else if (val instanceof window.HTMLElement) {\n                    // HTML element\n                    discardElement(val);\n                }\n                delete rSelector[key];\n            }\n            if (val !== RangeSelector.prototype[key]) {\n                rSelector[key] = null;\n            }\n        }, this);\n        this.buttons = [];\n    }\n}\nRangeSelector_extend(RangeSelector.prototype, {\n    /**\n     * The date formats to use when setting min, max and value on date inputs.\n     * @private\n     */\n    inputTypeFormats: {\n        'datetime-local': '%Y-%m-%dT%H:%M:%S',\n        'date': '%Y-%m-%d',\n        'time': '%H:%M:%S'\n    }\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const RangeSelector_RangeSelector = (RangeSelector);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Define the time span for the button\n *\n * @typedef {\"all\"|\"day\"|\"hour\"|\"millisecond\"|\"minute\"|\"month\"|\"second\"|\"week\"|\"year\"|\"ytd\"} Highcharts.RangeSelectorButtonTypeValue\n */\n/**\n * Callback function to react on button clicks.\n *\n * @callback Highcharts.RangeSelectorClickCallbackFunction\n *\n * @param {global.Event} e\n *        Event arguments.\n *\n * @param {boolean|undefined}\n *        Return false to cancel the default button event.\n */\n/**\n * Callback function to parse values entered in the input boxes and return a\n * valid JavaScript time as milliseconds since 1970.\n *\n * @callback Highcharts.RangeSelectorParseCallbackFunction\n *\n * @param {string} value\n *        Input value to parse.\n *\n * @return {number}\n *         Parsed JavaScript time value.\n */\n(''); // Keeps doclets above in JS file\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Chart\"],\"commonjs\":[\"highcharts\",\"Chart\"],\"commonjs2\":[\"highcharts\",\"Chart\"],\"root\":[\"Highcharts\",\"Chart\"]}\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_ = __webpack_require__(960);\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default = /*#__PURE__*/__webpack_require__.n(highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Templating\"],\"commonjs\":[\"highcharts\",\"Templating\"],\"commonjs2\":[\"highcharts\",\"Templating\"],\"root\":[\"Highcharts\",\"Templating\"]}\nvar highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_ = __webpack_require__(984);\nvar highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default = /*#__PURE__*/__webpack_require__.n(highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_);\n;// ./code/es-modules/Core/Chart/StockChart.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { format } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { getOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { setFixedRange: StockChart_setFixedRange } = Utilities_StockUtilities;\n\nconst { addEvent: StockChart_addEvent, clamp: StockChart_clamp, crisp: StockChart_crisp, defined: StockChart_defined, extend: StockChart_extend, find: StockChart_find, isNumber: StockChart_isNumber, isString: StockChart_isString, merge: StockChart_merge, pick: StockChart_pick, splat: StockChart_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get stock-specific default axis options.\n *\n * @private\n * @function getDefaultAxisOptions\n */\nfunction getDefaultAxisOptions(coll, options, defaultOptions) {\n    if (coll === 'xAxis') {\n        return {\n            minPadding: 0,\n            maxPadding: 0,\n            overscroll: 0,\n            ordinal: true\n        };\n    }\n    if (coll === 'yAxis') {\n        return {\n            labels: {\n                y: -2\n            },\n            opposite: defaultOptions.opposite ?? options.opposite ?? true,\n            showLastLabel: !!(\n            // #6104, show last label by default for category axes\n            options.categories ||\n                options.type === 'category'),\n            title: {\n                text: defaultOptions.title?.text !== 'Values' ?\n                    defaultOptions.title?.text :\n                    null\n            }\n        };\n    }\n    return {};\n}\n/**\n * Get stock-specific forced axis options.\n *\n * @private\n * @function getForcedAxisOptions\n */\nfunction getForcedAxisOptions(type, chartOptions) {\n    if (type === 'xAxis') {\n        // Always disable startOnTick:true on the main axis when the navigator\n        // is enabled (#1090)\n        const navigatorEnabled = StockChart_pick(chartOptions.navigator && chartOptions.navigator.enabled, Navigator_NavigatorDefaults.enabled, true);\n        const axisOptions = {\n            type: 'datetime',\n            categories: void 0\n        };\n        if (navigatorEnabled) {\n            axisOptions.startOnTick = false;\n            axisOptions.endOnTick = false;\n        }\n        return axisOptions;\n    }\n    return {};\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * Stock-optimized chart. Use {@link Highcharts.Chart|Chart} for common charts.\n *\n * @requires modules/stock\n *\n * @class\n * @name Highcharts.StockChart\n * @extends Highcharts.Chart\n */\nclass StockChart extends (highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default()) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initializes the chart. The constructor's arguments are passed on\n     * directly.\n     *\n     * @function Highcharts.StockChart#init\n     *\n     * @param {Highcharts.Options} userOptions\n     *        Custom options.\n     *\n     * @param {Function} [callback]\n     *        Function to run when the chart has loaded and all external\n     *        images are loaded.\n     *\n     *\n     * @emits Highcharts.StockChart#event:init\n     * @emits Highcharts.StockChart#event:afterInit\n     */\n    init(userOptions, callback) {\n        const defaultOptions = getOptions(), xAxisOptions = userOptions.xAxis, yAxisOptions = userOptions.yAxis, \n        // Always disable startOnTick:true on the main axis when the\n        // navigator is enabled (#1090)\n        navigatorEnabled = StockChart_pick(userOptions.navigator && userOptions.navigator.enabled, Navigator_NavigatorDefaults.enabled, true);\n        // Avoid doing these twice\n        userOptions.xAxis = userOptions.yAxis = void 0;\n        const options = StockChart_merge({\n            chart: {\n                panning: {\n                    enabled: true,\n                    type: 'x'\n                },\n                zooming: {\n                    pinchType: 'x',\n                    mouseWheel: {\n                        type: 'x'\n                    }\n                }\n            },\n            navigator: {\n                enabled: navigatorEnabled\n            },\n            scrollbar: {\n                // #4988 - check if setOptions was called\n                enabled: StockChart_pick(Scrollbar_ScrollbarDefaults.enabled, true)\n            },\n            rangeSelector: {\n                // #4988 - check if setOptions was called\n                enabled: StockChart_pick(RangeSelector_RangeSelectorDefaults.rangeSelector.enabled, true)\n            },\n            title: {\n                text: null\n            },\n            tooltip: {\n                split: StockChart_pick(defaultOptions.tooltip && defaultOptions.tooltip.split, true),\n                crosshairs: true\n            },\n            legend: {\n                enabled: false\n            }\n        }, userOptions, // User's options\n        {\n            isStock: true // Internal flag\n        });\n        userOptions.xAxis = xAxisOptions;\n        userOptions.yAxis = yAxisOptions;\n        // Apply X axis options to both single and multi y axes\n        options.xAxis = StockChart_splat(userOptions.xAxis || {}).map((xAxisOptions) => StockChart_merge(getDefaultAxisOptions('xAxis', xAxisOptions, defaultOptions.xAxis), \n        // #7690\n        xAxisOptions, // User options\n        getForcedAxisOptions('xAxis', userOptions)));\n        // Apply Y axis options to both single and multi y axes\n        options.yAxis = StockChart_splat(userOptions.yAxis || {}).map((yAxisOptions) => StockChart_merge(getDefaultAxisOptions('yAxis', yAxisOptions, defaultOptions.yAxis), \n        // #7690\n        yAxisOptions // User options\n        ));\n        super.init(options, callback);\n    }\n    /**\n     * Factory for creating different axis types.\n     * Extended to add stock defaults.\n     *\n     * @private\n     * @function Highcharts.StockChart#createAxis\n     * @param {string} coll\n     * An axis type.\n     * @param {Chart.CreateAxisOptionsObject} options\n     * The axis creation options.\n     */\n    createAxis(coll, options) {\n        options.axis = StockChart_merge(getDefaultAxisOptions(coll, options.axis, getOptions()[coll]), options.axis, getForcedAxisOptions(coll, this.userOptions));\n        return super.createAxis(coll, options);\n    }\n}\nStockChart_addEvent((highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default()), 'update', function (e) {\n    const chart = this, options = e.options;\n    // Use case: enabling scrollbar from a disabled state.\n    // Scrollbar needs to be initialized from a controller, Navigator in this\n    // case (#6615)\n    if ('scrollbar' in options && chart.navigator) {\n        StockChart_merge(true, chart.options.scrollbar, options.scrollbar);\n        chart.navigator.update({ enabled: !!chart.navigator.navigatorEnabled });\n        delete options.scrollbar;\n    }\n});\n/* *\n *\n *  Composition\n *\n * */\n(function (StockChart) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /** @private */\n    function compose(ChartClass, AxisClass, SeriesClass, SVGRendererClass) {\n        const seriesProto = SeriesClass.prototype;\n        if (!seriesProto.forceCropping) {\n            StockChart_addEvent(AxisClass, 'afterDrawCrosshair', onAxisAfterDrawCrosshair);\n            StockChart_addEvent(AxisClass, 'afterHideCrosshair', onAxisAfterHideCrosshair);\n            StockChart_addEvent(AxisClass, 'autoLabelAlign', onAxisAutoLabelAlign);\n            StockChart_addEvent(AxisClass, 'destroy', onAxisDestroy);\n            StockChart_addEvent(AxisClass, 'getPlotLinePath', onAxisGetPlotLinePath);\n            ChartClass.prototype.setFixedRange = StockChart_setFixedRange;\n            seriesProto.forceCropping = seriesForceCropping;\n            StockChart_addEvent(SeriesClass, 'setOptions', onSeriesSetOptions);\n            SVGRendererClass.prototype.crispPolyLine = svgRendererCrispPolyLine;\n        }\n    }\n    StockChart.compose = compose;\n    /**\n     * Extend crosshairs to also draw the label.\n     * @private\n     */\n    function onAxisAfterDrawCrosshair(event) {\n        const axis = this;\n        // Check if the label has to be drawn\n        if (!(axis.crosshair?.label?.enabled &&\n            axis.cross &&\n            StockChart_isNumber(axis.min) &&\n            StockChart_isNumber(axis.max))) {\n            return;\n        }\n        const chart = axis.chart, log = axis.logarithmic, options = axis.crosshair.label, // The label's options\n        horiz = axis.horiz, // Axis orientation\n        opposite = axis.opposite, // Axis position\n        left = axis.left, // Left position\n        top = axis.top, // Top position\n        width = axis.width, tickInside = axis.options.tickPosition === 'inside', snap = axis.crosshair.snap !== false, e = event.e || (axis.cross?.e), point = event.point;\n        let crossLabel = axis.crossLabel, // The svgElement\n        posx, posy, formatOption = options.format, formatFormat = '', limit, offset = 0, \n        // Use last available event (#5287)\n        min = axis.min, max = axis.max;\n        if (log) {\n            min = log.lin2log(axis.min);\n            max = log.lin2log(axis.max);\n        }\n        const align = (horiz ? 'center' : opposite ?\n            (axis.labelAlign === 'right' ? 'right' : 'left') :\n            (axis.labelAlign === 'left' ? 'left' : 'center'));\n        // If the label does not exist yet, create it.\n        if (!crossLabel) {\n            crossLabel = axis.crossLabel = chart.renderer\n                .label('', 0, void 0, options.shape || 'callout')\n                .addClass('highcharts-crosshair-label highcharts-color-' + (point && point.series ?\n                point.series.colorIndex :\n                axis.series[0] && this.series[0].colorIndex))\n                .attr({\n                align: options.align || align,\n                padding: StockChart_pick(options.padding, 8),\n                r: StockChart_pick(options.borderRadius, 3),\n                zIndex: 2\n            })\n                .add(axis.labelGroup);\n            // Presentational\n            if (!chart.styledMode) {\n                crossLabel\n                    .attr({\n                    fill: options.backgroundColor ||\n                        ( // #14888\n                        point && point.series &&\n                            point.series.color) ||\n                        \"#666666\" /* Palette.neutralColor60 */,\n                    stroke: options.borderColor || '',\n                    'stroke-width': options.borderWidth || 0\n                })\n                    .css(StockChart_extend({\n                    color: \"#ffffff\" /* Palette.backgroundColor */,\n                    fontWeight: 'normal',\n                    fontSize: '0.7em',\n                    textAlign: 'center'\n                }, options.style || {}));\n            }\n        }\n        if (horiz) {\n            posx = snap ? (point.plotX || 0) + left : e.chartX;\n            posy = top + (opposite ? 0 : axis.height);\n        }\n        else {\n            posx = left + axis.offset + (opposite ? width : 0);\n            posy = snap ? (point.plotY || 0) + top : e.chartY;\n        }\n        if (!formatOption && !options.formatter) {\n            if (axis.dateTime) {\n                formatFormat = '%b %d, %Y';\n            }\n            formatOption =\n                '{value' + (formatFormat ? ':' + formatFormat : '') + '}';\n        }\n        // Show the label\n        const value = snap ?\n            (axis.isXAxis ? point.x : point.y) :\n            axis.toValue(horiz ? e.chartX : e.chartY);\n        // Crosshair should be rendered within Axis range (#7219) and the point\n        // of currentPriceIndicator should be inside the plot area (#14879).\n        const isInside = point && point.series ?\n            point.series.isPointInside(point) :\n            (StockChart_isNumber(value) && value > min && value < max);\n        let text = '';\n        if (formatOption) {\n            text = format(formatOption, { value }, chart);\n        }\n        else if (options.formatter && StockChart_isNumber(value)) {\n            text = options.formatter.call(axis, value);\n        }\n        crossLabel.attr({\n            text,\n            x: posx,\n            y: posy,\n            visibility: isInside ? 'inherit' : 'hidden'\n        });\n        const crossBox = crossLabel.getBBox();\n        // Now it is placed we can correct its position\n        if (StockChart_isNumber(crossLabel.x) && !horiz && !opposite) {\n            posx = crossLabel.x - (crossBox.width / 2);\n        }\n        if (StockChart_isNumber(crossLabel.y)) {\n            if (horiz) {\n                if ((tickInside && !opposite) || (!tickInside && opposite)) {\n                    posy = crossLabel.y - crossBox.height;\n                }\n            }\n            else {\n                posy = crossLabel.y - (crossBox.height / 2);\n            }\n        }\n        // Check the edges\n        if (horiz) {\n            limit = {\n                left,\n                right: left + axis.width\n            };\n        }\n        else {\n            limit = {\n                left: axis.labelAlign === 'left' ? left : 0,\n                right: axis.labelAlign === 'right' ?\n                    left + axis.width :\n                    chart.chartWidth\n            };\n        }\n        const translateX = crossLabel.translateX || 0;\n        // Left edge\n        if (translateX < limit.left) {\n            offset = limit.left - translateX;\n        }\n        // Right edge\n        if (translateX + crossBox.width >= limit.right) {\n            offset = -(translateX + crossBox.width - limit.right);\n        }\n        // Show the crosslabel\n        crossLabel.attr({\n            x: Math.max(0, posx + offset),\n            y: Math.max(0, posy),\n            // First set x and y, then anchorX and anchorY, when box is actually\n            // calculated, #5702\n            anchorX: horiz ?\n                posx :\n                (axis.opposite ? 0 : chart.chartWidth),\n            anchorY: horiz ?\n                (axis.opposite ? chart.chartHeight : 0) :\n                posy + crossBox.height / 2\n        });\n    }\n    /**\n     * Wrapper to hide the label.\n     * @private\n     */\n    function onAxisAfterHideCrosshair() {\n        const axis = this;\n        if (axis.crossLabel) {\n            axis.crossLabel = axis.crossLabel.hide();\n        }\n    }\n    /**\n     * Override the automatic label alignment so that the first Y axis' labels\n     * are drawn on top of the grid line, and subsequent axes are drawn outside.\n     * @private\n     */\n    function onAxisAutoLabelAlign(e) {\n        const axis = this, chart = axis.chart, options = axis.options, panes = chart._labelPanes = chart._labelPanes || {}, labelOptions = options.labels;\n        if (chart.options.isStock && axis.coll === 'yAxis') {\n            const key = options.top + ',' + options.height;\n            // Do it only for the first Y axis of each pane\n            if (!panes[key] && labelOptions.enabled) {\n                if (labelOptions.distance === 15 && // Default\n                    axis.side === 1) {\n                    labelOptions.distance = 0;\n                }\n                if (typeof labelOptions.align === 'undefined') {\n                    labelOptions.align = 'right';\n                }\n                panes[key] = axis;\n                e.align = 'right';\n                e.preventDefault();\n            }\n        }\n    }\n    /**\n     * Clear axis from label panes. (#6071)\n     * @private\n     */\n    function onAxisDestroy() {\n        const axis = this, chart = axis.chart, key = (axis.options &&\n            (axis.options.top + ',' + axis.options.height));\n        if (key && chart._labelPanes && chart._labelPanes[key] === axis) {\n            delete chart._labelPanes[key];\n        }\n    }\n    /**\n     * Override getPlotLinePath to allow for multipane charts.\n     * @private\n     */\n    function onAxisGetPlotLinePath(e) {\n        const axis = this, series = (axis.isLinked && !axis.series && axis.linkedParent ?\n            axis.linkedParent.series :\n            axis.series), chart = axis.chart, renderer = chart.renderer, axisLeft = axis.left, axisTop = axis.top, result = [], translatedValue = e.translatedValue, value = e.value, force = e.force, \n        /**\n         * Return the other axis based on either the axis option or on\n         * related series.\n         * @private\n         */\n        getAxis = (coll) => {\n            const otherColl = coll === 'xAxis' ? 'yAxis' : 'xAxis', opt = axis.options[otherColl];\n            // Other axis indexed by number\n            if (StockChart_isNumber(opt)) {\n                return [chart[otherColl][opt]];\n            }\n            // Other axis indexed by id (like navigator)\n            if (StockChart_isString(opt)) {\n                return [chart.get(opt)];\n            }\n            // Auto detect based on existing series\n            return series.map((s) => s[otherColl]);\n        };\n        let x1, y1, x2, y2, axes = [], // #3416 need a default array\n        axes2, uniqueAxes, transVal;\n        if ( // For stock chart, by default render paths across the panes\n        // except the case when `acrossPanes` is disabled by user (#6644)\n        (chart.options.isStock && e.acrossPanes !== false) &&\n            // Ignore in case of colorAxis or zAxis. #3360, #3524, #6720\n            axis.coll === 'xAxis' || axis.coll === 'yAxis') {\n            e.preventDefault();\n            // Get the related axes based on series\n            axes = getAxis(axis.coll);\n            // Get the related axes based options.*Axis setting #2810\n            axes2 = (axis.isXAxis ? chart.yAxis : chart.xAxis);\n            for (const A of axes2) {\n                if (!A.options.isInternal) {\n                    const a = (A.isXAxis ? 'yAxis' : 'xAxis'), relatedAxis = (StockChart_defined(A.options[a]) ?\n                        chart[a][A.options[a]] :\n                        chart[a][0]);\n                    if (axis === relatedAxis) {\n                        axes.push(A);\n                    }\n                }\n            }\n            // Remove duplicates in the axes array. If there are no axes in the\n            // axes array, we are adding an axis without data, so we need to\n            // populate this with grid lines (#2796).\n            uniqueAxes = axes.length ?\n                [] :\n                [axis.isXAxis ? chart.yAxis[0] : chart.xAxis[0]]; // #3742\n            for (const axis2 of axes) {\n                if (uniqueAxes.indexOf(axis2) === -1 &&\n                    // Do not draw on axis which overlap completely. #5424\n                    !StockChart_find(uniqueAxes, (unique) => (unique.pos === axis2.pos &&\n                        unique.len === axis2.len))) {\n                    uniqueAxes.push(axis2);\n                }\n            }\n            transVal = StockChart_pick(translatedValue, axis.translate(value || 0, void 0, void 0, e.old));\n            if (StockChart_isNumber(transVal)) {\n                if (axis.horiz) {\n                    for (const axis2 of uniqueAxes) {\n                        let skip;\n                        y1 = axis2.pos;\n                        y2 = y1 + axis2.len;\n                        x1 = x2 = Math.round(transVal + axis.transB);\n                        // Outside plot area\n                        if (force !== 'pass' &&\n                            (x1 < axisLeft || x1 > axisLeft + axis.width)) {\n                            if (force) {\n                                x1 = x2 = StockChart_clamp(x1, axisLeft, axisLeft + axis.width);\n                            }\n                            else {\n                                skip = true;\n                            }\n                        }\n                        if (!skip) {\n                            result.push(['M', x1, y1], ['L', x2, y2]);\n                        }\n                    }\n                }\n                else {\n                    for (const axis2 of uniqueAxes) {\n                        let skip;\n                        x1 = axis2.pos;\n                        x2 = x1 + axis2.len;\n                        y1 = y2 = Math.round(axisTop + axis.height - transVal);\n                        // Outside plot area\n                        if (force !== 'pass' &&\n                            (y1 < axisTop || y1 > axisTop + axis.height)) {\n                            if (force) {\n                                y1 = y2 = StockChart_clamp(y1, axisTop, axisTop + axis.height);\n                            }\n                            else {\n                                skip = true;\n                            }\n                        }\n                        if (!skip) {\n                            result.push(['M', x1, y1], ['L', x2, y2]);\n                        }\n                    }\n                }\n            }\n            e.path = result.length > 0 ?\n                renderer.crispPolyLine(result, e.lineWidth || 1) :\n                // #3557 getPlotLinePath in regular Highcharts also returns null\n                void 0;\n        }\n    }\n    /**\n     * Handle som Stock-specific series defaults, override the plotOptions\n     * before series options are handled.\n     * @private\n     */\n    function onSeriesSetOptions(e) {\n        const series = this;\n        if (series.chart.options.isStock) {\n            let overrides;\n            if (series.is('column') || series.is('columnrange')) {\n                overrides = {\n                    borderWidth: 0,\n                    shadow: false\n                };\n            }\n            else if (!series.is('scatter') && !series.is('sma')) {\n                overrides = {\n                    marker: {\n                        enabled: false,\n                        radius: 2\n                    }\n                };\n            }\n            if (overrides) {\n                e.plotOptions[series.type] = StockChart_merge(e.plotOptions[series.type], overrides);\n            }\n        }\n    }\n    /**\n     * Based on the data grouping options decides whether\n     * the data should be cropped while processing.\n     *\n     * @ignore\n     * @function Highcharts.Series#forceCropping\n     */\n    function seriesForceCropping() {\n        const series = this, chart = series.chart, options = series.options, dataGroupingOptions = options.dataGrouping, groupingEnabled = (series.allowDG !== false &&\n            dataGroupingOptions &&\n            StockChart_pick(dataGroupingOptions.enabled, chart.options.isStock));\n        return groupingEnabled;\n    }\n    /* eslint-disable jsdoc/check-param-names */\n    /**\n     * Factory function for creating new stock charts. Creates a new\n     * {@link Highcharts.StockChart|StockChart} object with different default\n     * options than the basic Chart.\n     *\n     * @example\n     * let chart = Highcharts.stockChart('container', {\n     *     series: [{\n     *         data: [1, 2, 3, 4, 5, 6, 7, 8, 9],\n     *         pointInterval: 24 * 60 * 60 * 1000\n     *     }]\n     * });\n     *\n     * @function Highcharts.stockChart\n     *\n     * @param {string|Highcharts.HTMLDOMElement} [renderTo]\n     *        The DOM element to render to, or its id.\n     *\n     * @param {Highcharts.Options} options\n     *        The chart options structure as described in the\n     *        [options reference](https://api.highcharts.com/highstock).\n     *\n     * @param {Highcharts.ChartCallbackFunction} [callback]\n     *        A function to execute when the chart object is finished\n     *        rendering and all external image files (`chart.backgroundImage`,\n     *        `chart.plotBackgroundImage` etc) are loaded. Defining a\n     *        [chart.events.load](https://api.highcharts.com/highstock/chart.events.load)\n     *        handler is equivalent.\n     *\n     * @return {Highcharts.StockChart}\n     *         The chart object.\n     */\n    function stockChart(a, b, c) {\n        return new StockChart(a, b, c);\n    }\n    StockChart.stockChart = stockChart;\n    /* eslint-enable jsdoc/check-param-names */\n    /**\n     * Function to crisp a line with multiple segments\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#crispPolyLine\n     */\n    function svgRendererCrispPolyLine(points, width) {\n        // Points format: [['M', 0, 0], ['L', 100, 0]]\n        // normalize to a crisp line\n        for (let i = 0; i < points.length; i = i + 2) {\n            const start = points[i], end = points[i + 1];\n            if (StockChart_defined(start[1]) && start[1] === end[1]) {\n                start[1] = end[1] = StockChart_crisp(start[1], width);\n            }\n            if (StockChart_defined(start[2]) && start[2] === end[2]) {\n                start[2] = end[2] = StockChart_crisp(start[2], width);\n            }\n        }\n        return points;\n    }\n})(StockChart || (StockChart = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Chart_StockChart = (StockChart);\n\n;// ./code/es-modules/Series/HLC/HLCPoint.js\n/* *\n *\n *  (c) 2010-2024 Pawel Lysy\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { column: { prototype: { pointClass: ColumnPoint } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n/* *\n *\n *  Class\n *\n * */\nclass HLCPoint extends ColumnPoint {\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const HLC_HLCPoint = (HLCPoint);\n\n;// ./code/es-modules/Series/HLC/HLCSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Pawel Lysy\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * An HLC chart is a style of financial chart used to describe price\n * movements over time. It displays high, low and close values per\n * data point.\n *\n * @sample stock/demo/hlc/\n *         HLC chart\n *\n * @extends      plotOptions.column\n * @excluding    borderColor, borderRadius, borderWidth, crisp, stacking,\n *               stack\n * @product      highstock\n * @optionparent plotOptions.hlc\n */\nconst HLCSeriesDefaults = {\n    /**\n     * The approximate pixel width of each group. If for example a series\n     * with 30 points is displayed over a 600 pixel wide plot area, no\n     * grouping is performed. If however the series contains so many points\n     * that the spacing is less than the groupPixelWidth, Highcharts will\n     * try to group it into appropriate groups so that each is more or less\n     * two pixels wide. Defaults to `5`.\n     *\n     * @type      {number}\n     * @default   5\n     * @product   highstock\n     * @apioption plotOptions.hlc.dataGrouping.groupPixelWidth\n     */\n    /**\n     * @type      {Highcharts.DataGroupingApproximationValue|Function}\n     * @default   hlc\n     * @product   highstock\n     * @apioption plotOptions.hlc.dataGrouping.approximation\n     */\n    /**\n     * @default   close\n     * @apioption plotOptions.hlc.colorKey\n     */\n    /**\n     * The pixel width of the line/border. Defaults to `1`.\n     *\n     * @sample {highstock} stock/plotoptions/hlc-linewidth/\n     *         A greater line width\n     *\n     * @type    {number}\n     * @default 1\n     * @product highstock\n     *\n     * @public\n     */\n    lineWidth: 1,\n    tooltip: {\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> ' +\n            '<b> {series.name}</b><br/>' +\n            'High: {point.high}<br/>' +\n            'Low: {point.low}<br/>' +\n            'Close: {point.close}<br/>'\n    },\n    /**\n     * @type {number|null}\n     */\n    threshold: null,\n    states: {\n        /**\n         * @extends plotOptions.column.states.hover\n         * @product highstock\n         */\n        hover: {\n            /**\n             * The pixel width of the line representing the HLC point.\n             *\n             * @type    {number}\n             * @default 3\n             * @product highstock\n             */\n            lineWidth: 3\n        }\n    },\n    /**\n     * Determines which one of  `high`, `low`, `close` values should\n     * be represented as `point.y`, which is later used to set dataLabel\n     * position and [compare](#plotOptions.series.compare).\n     *\n     * @sample {highstock} stock/plotoptions/hlc-pointvalkey/\n     *         Possible values\n     *\n     * @declare    Highcharts.OptionsHLCPointValKeyValue\n     * @type       {string}\n     * @default    close\n     * @validvalue [\"high\", \"low\", \"close\"]\n     * @product    highstock\n     * @apioption  plotOptions.hlc.pointValKey\n     */\n    /**\n     * @default   close\n     * @apioption plotOptions.hlc.colorKey\n     */\n    stickyTracking: true\n};\n/**\n * A `hlc` series. If the [type](#series.hlc.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.hlc\n * @excluding dataParser, dataURL\n * @product   highstock\n * @apioption series.hlc\n */\n/**\n * An array of data points for the series. For the `hlc` series type,\n * points can be given in the following ways:\n *\n * 1. An array of arrays with 4 or 3 values. In this case, the values correspond\n *    to `x,high,low,close`. If the first value is a string, it is applied\n *    as the name of the point, and the `x` value is inferred. The `x` value can\n *    also be omitted, in which case the inner arrays should be of length of 3\\.\n *    Then the `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 5, 6, 7],\n *        [1, 4, 8, 2],\n *        [2, 3, 4, 10]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.hlc.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        high: 4,\n *        low: 5,\n *        close: 2,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        high: 3,\n *        low: 6,\n *        close: 7,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @type      {Array<Array<(number|string),number,number>|Array<(number|string),number,number,number>|*>}\n * @extends   series.arearange.data\n * @excluding y, marker\n * @product   highstock\n * @apioption series.hlc.data\n */\n/**\n * The closing value of each data point.\n *\n * @type      {number}\n * @product   highstock\n * @apioption series.hlc.data.close\n */\n(''); // Keeps doclets above in JS file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const HLC_HLCSeriesDefaults = (HLCSeriesDefaults);\n\n;// ./code/es-modules/Series/HLC/HLCSeries.js\n/* *\n *\n *  (c) 2010-2024 Pawel Lysy\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { column: ColumnSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { crisp: HLCSeries_crisp, extend: HLCSeries_extend, merge: HLCSeries_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The hlc series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.hlc\n *\n * @augments Highcharts.Series\n */\nclass HLCSeries extends ColumnSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extend the path if close is not between high and low.\n     *\n     * @param {SVGPath} path the path array of the point\n     * @param {number} halfStrokeWidth\n     * @param {number} value value of the point to which the stem should be extended\n     */\n    extendStem(path, halfStrokeWidth, value) {\n        const start = path[0];\n        const end = path[1];\n        // We don't need to worry about crisp - close value\n        // is already crisped and halfStrokeWidth should remove it.\n        if (typeof start[2] === 'number') {\n            start[2] = Math.max(value + halfStrokeWidth, start[2]);\n        }\n        if (typeof end[2] === 'number') {\n            end[2] = Math.min(value - halfStrokeWidth, end[2]);\n        }\n    }\n    /**\n     * Function to create SVGPath of the point based on the\n     * plot positions of this point.\n     * @private\n     */\n    getPointPath(point, graphic) {\n        // Crisp vector coordinates\n        const strokeWidth = graphic.strokeWidth(), series = point.series, \n        // #2596:\n        crispX = HLCSeries_crisp(point.plotX || 0, strokeWidth), halfWidth = Math.round(point.shapeArgs.width / 2);\n        // The vertical stem\n        const path = [\n            ['M', crispX, Math.round(point.yBottom)],\n            ['L', crispX, Math.round(point.plotHigh)]\n        ];\n        // Close\n        if (point.close !== null) {\n            const plotClose = HLCSeries_crisp(point.plotClose, strokeWidth);\n            path.push(['M', crispX, plotClose], ['L', crispX + halfWidth, plotClose]);\n            series.extendStem(path, strokeWidth / 2, plotClose);\n        }\n        return path;\n    }\n    /**\n     * Draw single point\n     * @private\n     */\n    drawSinglePoint(point) {\n        const series = point.series, chart = series.chart;\n        let path, graphic = point.graphic;\n        if (typeof point.plotY !== 'undefined') {\n            // Create and/or update the graphic\n            if (!graphic) {\n                point.graphic = graphic = chart.renderer.path()\n                    .add(series.group);\n            }\n            if (!chart.styledMode) {\n                graphic.attr(series.pointAttribs(point, (point.selected && 'select'))); // #3897\n            }\n            // Crisp vector coordinates\n            path = series.getPointPath(point, graphic);\n            graphic[!graphic ? 'attr' : 'animate']({ d: path })\n                .addClass(point.getClassName(), true);\n        }\n    }\n    /**\n     * Draw the data points\n     * @private\n     */\n    drawPoints() {\n        this.points.forEach(this.drawSinglePoint);\n    }\n    /**\n     * @private\n     * @function Highcharts.seriesTypes.hlc#init\n     */\n    init() {\n        super.init.apply(this, arguments);\n        this.options.stacking = void 0; // #8817\n    }\n    /**\n     * Postprocess mapping between options and SVG attributes\n     * @private\n     */\n    pointAttribs(point, state) {\n        const attribs = super.pointAttribs.call(this, point, state);\n        delete attribs.fill;\n        return attribs;\n    }\n    toYData(point) {\n        // Return a plain array for speedy calculation\n        return [point.high, point.low, point.close];\n    }\n    /**\n     * Translate data points from raw values x and y to plotX and plotY\n     *\n     * @private\n     * @function Highcharts.seriesTypes.hlc#translate\n     */\n    translate() {\n        const series = this, yAxis = series.yAxis, names = (this.pointArrayMap && this.pointArrayMap.slice()) || [], translated = names.map((name) => `plot${name.charAt(0).toUpperCase() + name.slice(1)}`);\n        translated.push('yBottom');\n        names.push('low');\n        super.translate.apply(series);\n        // Do the translation\n        series.points.forEach(function (point) {\n            names.forEach(function (name, i) {\n                let value = point[name];\n                if (value !== null) {\n                    if (series.dataModify) {\n                        value = series.dataModify.modifyValue(value);\n                    }\n                    point[translated[i]] =\n                        yAxis.toPixels(value, true);\n                }\n            });\n            // Align the tooltip to the high value to avoid covering the\n            // point\n            point.tooltipPos[1] =\n                point.plotHigh + yAxis.pos - series.chart.plotTop;\n        });\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nHLCSeries.defaultOptions = HLCSeries_merge(ColumnSeries.defaultOptions, HLC_HLCSeriesDefaults);\nHLCSeries_extend(HLCSeries.prototype, {\n    pointClass: HLC_HLCPoint,\n    animate: null, // Disable animation\n    directTouch: false,\n    keysAffectYAxis: ['low', 'high'],\n    pointArrayMap: ['high', 'low', 'close'],\n    pointAttrToOptions: {\n        stroke: 'color',\n        'stroke-width': 'lineWidth'\n    },\n    pointValKey: 'close'\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('hlc', HLCSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const HLC_HLCSeries = ((/* unused pure expression or super */ null && (HLCSeries)));\n\n;// ./code/es-modules/Series/OHLC/OHLCPoint.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { seriesTypes: { hlc: OHLCPoint_HLCSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n/* *\n *\n *  Class\n *\n * */\nclass OHLCPoint extends OHLCPoint_HLCSeries.prototype.pointClass {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extend the parent method by adding up or down to the class name.\n     * @private\n     * @function Highcharts.seriesTypes.ohlc#getClassName\n     */\n    getClassName() {\n        return super.getClassName.call(this) +\n            (this.open < this.close ?\n                ' highcharts-point-up' :\n                ' highcharts-point-down');\n    }\n    /**\n     * Save upColor as point color (#14826).\n     * @private\n     * @function Highcharts.seriesTypes.ohlc#resolveUpColor\n     */\n    resolveUpColor() {\n        if (this.open < this.close &&\n            !this.options.color &&\n            this.series.options.upColor) {\n            this.color = this.series.options.upColor;\n        }\n    }\n    /**\n     * Extend the parent method by saving upColor.\n     * @private\n     * @function Highcharts.seriesTypes.ohlc#resolveColor\n     */\n    resolveColor() {\n        super.resolveColor();\n        if (!this.series.is('heikinashi')) {\n            this.resolveUpColor();\n        }\n    }\n    /**\n     * Extend the parent method by saving upColor.\n     * @private\n     * @function Highcharts.seriesTypes.ohlc#getZone\n     *\n     * @return {Highcharts.SeriesZonesOptionsObject}\n     *         The zone item.\n     */\n    getZone() {\n        const zone = super.getZone();\n        this.resolveUpColor();\n        return zone;\n    }\n    /**\n     * Extend the parent method by resolving up/down colors (#15849)\n     * @private\n     **/\n    applyOptions() {\n        super.applyOptions.apply(this, arguments);\n        if (this.resolveColor) {\n            this.resolveColor();\n        }\n        return this;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const OHLC_OHLCPoint = (OHLCPoint);\n\n;// ./code/es-modules/Series/OHLC/OHLCSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * An OHLC chart is a style of financial chart used to describe price\n * movements over time. It displays open, high, low and close values per\n * data point.\n *\n * @sample stock/demo/ohlc\n *         OHLC chart\n *\n * @extends      plotOptions.hlc\n * @product      highstock\n * @optionparent plotOptions.ohlc\n */\nconst OHLCSeriesDefaults = {\n    /**\n     * @type      {Highcharts.DataGroupingApproximationValue|Function}\n     * @default   ohlc\n     * @product   highstock\n     * @apioption plotOptions.ohlc.dataGrouping.approximation\n     */\n    /**\n     * Determines which one of  `open`, `high`, `low`, `close` values should\n     * be represented as `point.y`, which is later used to set dataLabel\n     * position and [compare](#plotOptions.series.compare).\n     *\n     * @declare    Highcharts.OptionsPointValKeyValue\n     * @default    close\n     * @validvalue [\"open\", \"high\", \"low\", \"close\"]\n     * @product    highstock\n     * @apioption  plotOptions.ohlc.pointValKey\n     */\n    /**\n     * Line color for up points.\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highstock\n     * @apioption plotOptions.ohlc.upColor\n     */\n    tooltip: {\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> ' +\n            '<b> {series.name}</b><br/>' +\n            'Open: {point.open}<br/>' +\n            'High: {point.high}<br/>' +\n            'Low: {point.low}<br/>' +\n            'Close: {point.close}<br/>'\n    }\n};\n/**\n * The parameter allows setting line series type and use OHLC indicators.\n * Data in OHLC format is required.\n *\n * @sample {highstock} stock/indicators/use-ohlc-data\n *         Use OHLC data format to plot line chart\n *\n * @type      {boolean}\n * @product   highstock\n * @apioption plotOptions.line.useOhlcData\n */\n/**\n * A `ohlc` series. If the [type](#series.ohlc.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.ohlc\n * @excluding dataParser, dataURL\n * @product   highstock\n * @apioption series.ohlc\n */\n/**\n * An array of data points for the series. For the `ohlc` series type,\n * points can be given in the following ways:\n *\n * 1. An array of arrays with 5 or 4 values. In this case, the values correspond\n *    to `x,open,high,low,close`. If the first value is a string, it is applied\n *    as the name of the point, and the `x` value is inferred. The `x` value can\n *    also be omitted, in which case the inner arrays should be of length 4\\.\n *    Then the `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 6, 5, 6, 7],\n *        [1, 9, 4, 8, 2],\n *        [2, 6, 3, 4, 10]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.ohlc.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        open: 3,\n *        high: 4,\n *        low: 5,\n *        close: 2,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        open: 4,\n *        high: 3,\n *        low: 6,\n *        close: 7,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}\n * @extends   series.arearange.data\n * @excluding y, marker\n * @product   highstock\n * @apioption series.ohlc.data\n */\n/**\n * The closing value of each data point.\n *\n * @type      {number}\n * @product   highstock\n * @apioption series.ohlc.data.close\n */\n/**\n * The opening value of each data point.\n *\n * @type      {number}\n * @product   highstock\n * @apioption series.ohlc.data.open\n */\n''; // Adds doclets above to transpiled\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const OHLC_OHLCSeriesDefaults = (OHLCSeriesDefaults);\n\n;// ./code/es-modules/Series/OHLC/OHLCSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: OHLCSeries_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { hlc: OHLCSeries_HLCSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { addEvent: OHLCSeries_addEvent, crisp: OHLCSeries_crisp, extend: OHLCSeries_extend, merge: OHLCSeries_merge, pushUnique: OHLCSeries_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onSeriesAfterSetOptions(e) {\n    const options = e.options, dataGrouping = options.dataGrouping;\n    if (dataGrouping &&\n        options.useOhlcData &&\n        options.id !== 'highcharts-navigator-series') {\n        dataGrouping.approximation = 'ohlc';\n    }\n}\n/**\n * Add useOhlcData option\n * @private\n */\nfunction onSeriesInit(eventOptions) {\n    // eslint-disable-next-line no-invalid-this\n    const series = this, options = eventOptions.options;\n    if (options.useOhlcData &&\n        options.id !== 'highcharts-navigator-series') {\n        OHLCSeries_extend(series, {\n            pointValKey: OHLCSeries.prototype.pointValKey,\n            // Keys: ohlcProto.keys, // @todo potentially nonsense\n            pointArrayMap: OHLCSeries.prototype.pointArrayMap,\n            toYData: OHLCSeries.prototype.toYData\n        });\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The ohlc series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.ohlc\n *\n * @augments Highcharts.Series\n */\nclass OHLCSeries extends OHLCSeries_HLCSeries {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(SeriesClass, ..._args) {\n        if (OHLCSeries_pushUnique(OHLCSeries_composed, 'OHLCSeries')) {\n            OHLCSeries_addEvent(SeriesClass, 'afterSetOptions', onSeriesAfterSetOptions);\n            OHLCSeries_addEvent(SeriesClass, 'init', onSeriesInit);\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    getPointPath(point, graphic) {\n        const path = super.getPointPath(point, graphic), strokeWidth = graphic.strokeWidth(), crispX = OHLCSeries_crisp(point.plotX || 0, strokeWidth), halfWidth = Math.round(point.shapeArgs.width / 2);\n        if (point.open !== null) {\n            const plotOpen = OHLCSeries_crisp(point.plotOpen, strokeWidth);\n            path.push(['M', crispX, plotOpen], ['L', crispX - halfWidth, plotOpen]);\n            super.extendStem(path, strokeWidth / 2, plotOpen);\n        }\n        return path;\n    }\n    /**\n     * Postprocess mapping between options and SVG attributes\n     * @private\n     */\n    pointAttribs(point, state) {\n        const attribs = super.pointAttribs.call(this, point, state), options = this.options;\n        delete attribs.fill;\n        if (!point.options.color &&\n            options.upColor &&\n            point.open < point.close) {\n            attribs.stroke = options.upColor;\n        }\n        return attribs;\n    }\n    toYData(point) {\n        // Return a plain array for speedy calculation\n        return [point.open, point.high, point.low, point.close];\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nOHLCSeries.defaultOptions = OHLCSeries_merge(OHLCSeries_HLCSeries.defaultOptions, OHLC_OHLCSeriesDefaults);\nOHLCSeries_extend(OHLCSeries.prototype, {\n    pointClass: OHLC_OHLCPoint,\n    pointArrayMap: ['open', 'high', 'low', 'close']\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('ohlc', OHLCSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const OHLC_OHLCSeries = (OHLCSeries);\n\n;// ./code/es-modules/Series/Candlestick/CandlestickSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A candlestick chart is a style of financial chart used to describe\n * price movements over time.\n *\n * @sample stock/demo/candlestick/\n *         Candlestick chart\n *\n * @extends      plotOptions.ohlc\n * @excluding    borderColor,borderRadius,borderWidth\n * @product      highstock\n * @optionparent plotOptions.candlestick\n */\nconst CandlestickSeriesDefaults = {\n    /**\n     * The specific line color for up candle sticks. The default is to\n     * inherit the general `lineColor` setting.\n     *\n     * @sample {highstock} stock/plotoptions/candlestick-linecolor/\n     *         Candlestick line colors\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     1.3.6\n     * @product   highstock\n     * @apioption plotOptions.candlestick.upLineColor\n     */\n    states: {\n        /**\n         * @extends plotOptions.column.states.hover\n         * @product highstock\n         */\n        hover: {\n            /**\n             * The pixel width of the line/border around the\n             * candlestick.\n             *\n             * @product highstock\n             */\n            lineWidth: 2\n        }\n    },\n    /**\n     * @type    {number|null}\n     * @product highstock\n     */\n    threshold: null,\n    /**\n     * The color of the line/border of the candlestick.\n     *\n     * In styled mode, the line stroke can be set with the\n     * `.highcharts-candlestick-series .highcahrts-point` rule.\n     *\n     * @see [upLineColor](#plotOptions.candlestick.upLineColor)\n     *\n     * @sample {highstock} stock/plotoptions/candlestick-linecolor/\n     *         Candlestick line colors\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #000000\n     * @product highstock\n     */\n    lineColor: \"#000000\" /* Palette.neutralColor100 */,\n    /**\n     * The pixel width of the candlestick line/border. Defaults to `1`.\n     *\n     *\n     * In styled mode, the line stroke width can be set with the\n     * `.highcharts-candlestick-series .highcahrts-point` rule.\n     *\n     * @product highstock\n     */\n    lineWidth: 1,\n    /**\n     * The fill color of the candlestick when values are rising.\n     *\n     * In styled mode, the up color can be set with the\n     * `.highcharts-candlestick-series .highcharts-point-up` rule.\n     *\n     * @sample {highstock} stock/plotoptions/candlestick-color/\n     *         Custom colors\n     * @sample {highstock} highcharts/css/candlestick/\n     *         Colors in styled mode\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #ffffff\n     * @product highstock\n    */\n    upColor: \"#ffffff\" /* Palette.backgroundColor */,\n    /**\n     * @product highstock\n     */\n    stickyTracking: true\n};\n/**\n * A `candlestick` series. If the [type](#series.candlestick.type)\n * option is not specified, it is inherited from [chart.type](\n * #chart.type).\n *\n * @type      {*}\n * @extends   series,plotOptions.candlestick\n * @excluding dataParser, dataURL, marker\n * @product   highstock\n * @apioption series.candlestick\n */\n/**\n * An array of data points for the series. For the `candlestick` series\n * type, points can be given in the following ways:\n *\n * 1. An array of arrays with 5 or 4 values. In this case, the values correspond\n *    to `x,open,high,low,close`. If the first value is a string, it is applied\n *    as the name of the point, and the `x` value is inferred. The `x` value can\n *    also be omitted, in which case the inner arrays should be of length 4.\n *    Then the `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 7, 2, 0, 4],\n *        [1, 1, 4, 2, 8],\n *        [2, 3, 3, 9, 3]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.candlestick.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        open: 9,\n *        high: 2,\n *        low: 4,\n *        close: 6,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        open: 1,\n *        high: 4,\n *        low: 7,\n *        close: 7,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}\n * @extends   series.ohlc.data\n * @excluding y\n * @product   highstock\n * @apioption series.candlestick.data\n */\n''; // Adds doclets above to transpiled\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Candlestick_CandlestickSeriesDefaults = (CandlestickSeriesDefaults);\n\n;// ./code/es-modules/Series/Candlestick/CandlestickSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { column: CandlestickSeries_ColumnSeries, ohlc: CandlestickSeries_OHLCSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { crisp: CandlestickSeries_crisp, merge: CandlestickSeries_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The candlestick series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.candlestick\n *\n * @augments Highcharts.seriesTypes.ohlc\n */\nclass CandlestickSeries extends CandlestickSeries_OHLCSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Postprocess mapping between options and SVG attributes\n     *\n     * @private\n     * @function Highcharts.seriesTypes.candlestick#pointAttribs\n     */\n    pointAttribs(point, state) {\n        const attribs = CandlestickSeries_ColumnSeries.prototype.pointAttribs.call(this, point, state), options = this.options, isUp = point.open < point.close, stroke = options.lineColor || this.color, color = point.color || this.color; // (#14826)\n        attribs['stroke-width'] = options.lineWidth;\n        attribs.fill = point.options.color ||\n            (isUp ? (options.upColor || color) : color);\n        attribs.stroke = point.options.lineColor ||\n            (isUp ? (options.upLineColor || stroke) : stroke);\n        // Select or hover states\n        if (state) {\n            const stateOptions = options.states[state];\n            attribs.fill = stateOptions.color || attribs.fill;\n            attribs.stroke = stateOptions.lineColor || attribs.stroke;\n            attribs['stroke-width'] =\n                stateOptions.lineWidth || attribs['stroke-width'];\n        }\n        return attribs;\n    }\n    /**\n     * Draw the data points.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.candlestick#drawPoints\n     */\n    drawPoints() {\n        const series = this, points = series.points, chart = series.chart, reversedYAxis = series.yAxis.reversed;\n        for (const point of points) {\n            let graphic = point.graphic, plotOpen, plotClose, topBox, bottomBox, hasTopWhisker, hasBottomWhisker, crispX, path, halfWidth;\n            const isNew = !graphic;\n            if (typeof point.plotY !== 'undefined') {\n                if (!graphic) {\n                    point.graphic = graphic = chart.renderer.path()\n                        .add(series.group);\n                }\n                if (!series.chart.styledMode) {\n                    graphic\n                        .attr(series.pointAttribs(point, (point.selected && 'select'))) // #3897\n                        .shadow(series.options.shadow);\n                }\n                // Crisp vector coordinates\n                const strokeWidth = graphic.strokeWidth();\n                // #2596:\n                crispX = CandlestickSeries_crisp(point.plotX || 0, strokeWidth);\n                plotOpen = point.plotOpen;\n                plotClose = point.plotClose;\n                topBox = Math.min(plotOpen, plotClose);\n                bottomBox = Math.max(plotOpen, plotClose);\n                halfWidth = Math.round(point.shapeArgs.width / 2);\n                hasTopWhisker = reversedYAxis ?\n                    bottomBox !== point.yBottom :\n                    Math.round(topBox) !==\n                        Math.round(point.plotHigh || 0);\n                hasBottomWhisker = reversedYAxis ?\n                    Math.round(topBox) !==\n                        Math.round(point.plotHigh || 0) :\n                    bottomBox !== point.yBottom;\n                topBox = CandlestickSeries_crisp(topBox, strokeWidth);\n                bottomBox = CandlestickSeries_crisp(bottomBox, strokeWidth);\n                // Create the path. Due to a bug in Chrome 49, the path is\n                // first instantiated with no values, then the values\n                // pushed. For unknown reasons, instantiating the path array\n                // with all the values would lead to a crash when updating\n                // frequently (#5193).\n                path = [];\n                path.push(['M', crispX - halfWidth, bottomBox], ['L', crispX - halfWidth, topBox], ['L', crispX + halfWidth, topBox], ['L', crispX + halfWidth, bottomBox], ['Z'], // Ensure a nice rectangle #2602\n                ['M', crispX, topBox], [\n                    'L',\n                    // #460, #2094\n                    crispX,\n                    hasTopWhisker ?\n                        Math.round(reversedYAxis ?\n                            point.yBottom :\n                            point.plotHigh) :\n                        topBox\n                ], ['M', crispX, bottomBox], [\n                    'L',\n                    // #460, #2094\n                    crispX,\n                    hasBottomWhisker ?\n                        Math.round(reversedYAxis ?\n                            point.plotHigh :\n                            point.yBottom) :\n                        bottomBox\n                ]);\n                graphic[isNew ? 'attr' : 'animate']({ d: path })\n                    .addClass(point.getClassName(), true);\n            }\n        }\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nCandlestickSeries.defaultOptions = CandlestickSeries_merge(CandlestickSeries_OHLCSeries.defaultOptions, { tooltip: CandlestickSeries_OHLCSeries.defaultOptions.tooltip }, Candlestick_CandlestickSeriesDefaults);\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('candlestick', CandlestickSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Candlestick_CandlestickSeries = ((/* unused pure expression or super */ null && (CandlestickSeries)));\n\n;// ./code/es-modules/Series/Flags/FlagsPoint.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { column: { prototype: { pointClass: FlagsPoint_ColumnPoint } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { isNumber: FlagsPoint_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass FlagsPoint extends FlagsPoint_ColumnPoint {\n    constructor() {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        super(...arguments);\n        this.ttBelow = false;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    isValid() {\n        // #9233 - Prevent from treating flags as null points (even if\n        // they have no y values defined).\n        return FlagsPoint_isNumber(this.y) || typeof this.y === 'undefined';\n    }\n    /**\n     * @private\n     */\n    hasNewShapeType() {\n        const shape = this.options.shape || this.series.options.shape;\n        return this.graphic && shape && shape !== this.graphic.symbolKey;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Flags_FlagsPoint = (FlagsPoint);\n\n;// ./code/es-modules/Series/Flags/FlagsSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Flags are used to mark events in stock charts. They can be added on the\n * timeline, or attached to a specific series.\n *\n * @sample stock/demo/flags-general/\n *         Flags on a line series\n *\n * @extends      plotOptions.column\n * @excluding    animation, borderColor, borderWidth,\n *               colorByPoint, cropThreshold, dataGrouping, pointPadding,\n *               pointWidth, turboThreshold\n * @product      highstock\n * @optionparent plotOptions.flags\n */\nconst FlagsSeriesDefaults = {\n    /**\n     * The corner radius of the border surrounding each flag. For `squarepin`\n     * shaped flags only. A number signifies pixels. A percentage string, like\n     * for example 50%, signifies a relative size.\n     */\n    borderRadius: 0,\n    /**\n     * In case the flag is placed on a series, on what point key to place\n     * it. Line and columns have one key, `y`. In range or OHLC-type series,\n     * however, the flag can optionally be placed on the `open`, `high`,\n     * `low` or `close` key.\n     *\n     * @sample {highstock} stock/plotoptions/flags-onkey/\n     *         Range series, flag on high\n     *\n     * @type       {string}\n     * @default    y\n     * @since      4.2.2\n     * @product    highstock\n     * @validvalue [\"y\", \"open\", \"high\", \"low\", \"close\"]\n     * @apioption  plotOptions.flags.onKey\n     */\n    /**\n     * The id of the series that the flags should be drawn on. If no id\n     * is given, the flags are drawn on the x axis.\n     *\n     * @sample {highstock} stock/plotoptions/flags/\n     *         Flags on series and on x axis\n     *\n     * @type      {string}\n     * @product   highstock\n     * @apioption plotOptions.flags.onSeries\n     */\n    pointRange: 0, // #673\n    /**\n     * Whether the flags are allowed to overlap sideways. If `false`, the\n     * flags are moved sideways using an algorithm that seeks to place every\n     * flag as close as possible to its original position.\n     *\n     * @sample {highstock} stock/plotoptions/flags-allowoverlapx\n     *         Allow sideways overlap\n     *\n     * @since 6.0.4\n     */\n    allowOverlapX: false,\n    /**\n     * The shape of the marker. Can be one of \"flag\", \"circlepin\",\n     * \"squarepin\", or an image of the format `url(/path-to-image.jpg)`.\n     * Individual shapes can also be set for each point.\n     *\n     * @sample {highstock} stock/plotoptions/flags/\n     *         Different shapes\n     *\n     * @type    {Highcharts.FlagsShapeValue}\n     * @product highstock\n     */\n    shape: 'flag',\n    /**\n     * When multiple flags in the same series fall on the same value, this\n     * number determines the vertical offset between them.\n     *\n     * @sample {highstock} stock/plotoptions/flags-stackdistance/\n     *         A greater stack distance\n     *\n     * @product highstock\n     */\n    stackDistance: 12,\n    /**\n     * Text alignment for the text inside the flag.\n     *\n     * @since      5.0.0\n     * @product    highstock\n     * @validvalue [\"left\", \"center\", \"right\"]\n     */\n    textAlign: 'center',\n    /**\n     * Specific tooltip options for flag series. Flag series tooltips are\n     * different from most other types in that a flag doesn't have a data\n     * value, so the tooltip rather displays the `text` option for each\n     * point.\n     *\n     * @extends   plotOptions.series.tooltip\n     * @excluding changeDecimals, valueDecimals, valuePrefix, valueSuffix\n     * @product   highstock\n     */\n    tooltip: {\n        pointFormat: '{point.text}'\n    },\n    /**\n     * @type {number|null}\n     */\n    threshold: null,\n    /**\n     * The text to display on each flag. This can be defined on series\n     * level, or individually for each point. Defaults to `\"A\"`.\n     *\n     * @type      {string}\n     * @default   A\n     * @product   highstock\n     * @apioption plotOptions.flags.title\n     */\n    /**\n     * The y position of the top left corner of the flag relative to either\n     * the series (if onSeries is defined), or the x axis. Defaults to\n     * `-30`.\n     *\n     * @product highstock\n     */\n    y: -30,\n    /**\n     * Whether to use HTML to render the flag texts. Using HTML allows for\n     * advanced formatting, images and reliable bi-directional text\n     * rendering. Note that exported images won't respect the HTML, and that\n     * HTML won't respect Z-index settings.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     1.3\n     * @product   highstock\n     * @apioption plotOptions.flags.useHTML\n     */\n    /**\n     * Fixed width of the flag's shape. By default, width is autocalculated\n     * according to the flag's title.\n     *\n     * @sample {highstock} stock/demo/flags-shapes/\n     *         Flags with fixed width\n     *\n     * @type      {number}\n     * @product   highstock\n     * @apioption plotOptions.flags.width\n     */\n    /**\n     * Fixed height of the flag's shape. By default, height is\n     * autocalculated according to the flag's title.\n     *\n     * @type      {number}\n     * @product   highstock\n     * @apioption plotOptions.flags.height\n     */\n    /**\n     * The fill color for the flags.\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product highstock\n     */\n    fillColor: \"#ffffff\" /* Palette.backgroundColor */,\n    /**\n     * The color of the line/border of the flag.\n     *\n     * In styled mode, the stroke is set in the\n     * `.highcharts-flag-series.highcharts-point` rule.\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default   #000000\n     * @product   highstock\n     * @apioption plotOptions.flags.lineColor\n     */\n    /**\n     * The pixel width of the flag's line/border.\n     *\n     * @product highstock\n     */\n    lineWidth: 1,\n    states: {\n        /**\n         * @extends plotOptions.column.states.hover\n         * @product highstock\n         */\n        hover: {\n            /**\n             * The color of the line/border of the flag.\n             *\n             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @product highstock\n             */\n            lineColor: \"#000000\" /* Palette.neutralColor100 */,\n            /**\n             * The fill or background color of the flag.\n             *\n             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @product highstock\n             */\n            fillColor: \"#ccd3ff\" /* Palette.highlightColor20 */\n        }\n    },\n    /**\n     * The text styles of the flag.\n     *\n     * In styled mode, the styles are set in the\n     * `.highcharts-flag-series .highcharts-point` rule.\n     *\n     * @type    {Highcharts.CSSObject}\n     * @default {\"fontSize\": \"11px\", \"fontWeight\": \"bold\"}\n     * @product highstock\n     */\n    style: {\n        /** @ignore-option */\n        fontSize: '0.7em',\n        /** @ignore-option */\n        fontWeight: 'bold'\n    }\n};\n/**\n * A `flags` series. If the [type](#series.flags.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.flags\n * @excluding animation, borderColor, borderRadius, borderWidth, colorByPoint,\n *            connectNulls, cropThreshold, dashStyle, dataGrouping, dataParser,\n *            dataURL, gapSize, gapUnit, linecap, lineWidth, marker,\n *            pointPadding, pointWidth, step, turboThreshold, useOhlcData\n * @product   highstock\n * @apioption series.flags\n */\n/**\n * An array of data points for the series. For the `flags` series type,\n * points can be given in the following ways:\n *\n * 1. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.flags.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        title: \"A\",\n *        text: \"First event\"\n *    }, {\n *        x: 1,\n *        title: \"B\",\n *        text: \"Second event\"\n *    }]\n *    ```\n *\n * @type      {Array<*>}\n * @extends   series.line.data\n * @excluding dataLabels, marker, name, y\n * @product   highstock\n * @apioption series.flags.data\n */\n/**\n * The fill color of an individual flag. By default it inherits from\n * the series color.\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product   highstock\n * @apioption series.flags.data.fillColor\n */\n/**\n * The longer text to be shown in the flag's tooltip.\n *\n * @type      {string}\n * @product   highstock\n * @apioption series.flags.data.text\n */\n/**\n * The short text to be shown on the flag.\n *\n * @type      {string}\n * @product   highstock\n * @apioption series.flags.data.title\n */\n''; // Keeps doclets above in transpiled file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Flags_FlagsSeriesDefaults = (FlagsSeriesDefaults);\n\n;// ./code/es-modules/Series/Flags/FlagsSymbols.js\n/* *\n *\n *  Imports\n *\n * */\n\n/* *\n *\n *  Composition\n *\n * */\nvar FlagsSymbols;\n(function (FlagsSymbols) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    const modifiedMembers = [];\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * @private\n     */\n    function compose(SVGRendererClass) {\n        if (modifiedMembers.indexOf(SVGRendererClass) === -1) {\n            modifiedMembers.push(SVGRendererClass);\n            const symbols = SVGRendererClass.prototype.symbols;\n            symbols.flag = flag;\n            createPinSymbol(symbols, 'circle');\n            createPinSymbol(symbols, 'square');\n        }\n        const RendererClass = highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default().getRendererType();\n        // The symbol callbacks are generated on the SVGRenderer object in all\n        // browsers.\n        if (modifiedMembers.indexOf(RendererClass)) {\n            modifiedMembers.push(RendererClass);\n        }\n    }\n    FlagsSymbols.compose = compose;\n    /**\n     * Create the flag icon with anchor.\n     * @private\n     */\n    function flag(x, y, w, h, options) {\n        const anchorX = (options && options.anchorX) || x, anchorY = (options && options.anchorY) || y;\n        // To do: unwanted any cast because symbols.circle has wrong type, it\n        // actually returns an SVGPathArray\n        const path = this.circle(anchorX - 1, anchorY - 1, 2, 2);\n        path.push(['M', anchorX, anchorY], ['L', x, y + h], ['L', x, y], ['L', x + w, y], ['L', x + w, y + h], ['L', x, y + h], ['Z']);\n        return path;\n    }\n    /**\n     * Create the circlepin and squarepin icons with anchor.\n     * @private\n     */\n    function createPinSymbol(symbols, shape) {\n        symbols[(shape + 'pin')] = function (x, y, w, h, options) {\n            const anchorX = options && options.anchorX, anchorY = options && options.anchorY;\n            let path;\n            // For single-letter flags, make sure circular flags are not taller\n            // than their width\n            if (shape === 'circle' && h > w) {\n                x -= Math.round((h - w) / 2);\n                w = h;\n            }\n            path = (symbols[shape])(x, y, w, h, options);\n            if (anchorX && anchorY) {\n                /**\n                 * If the label is below the anchor, draw the connecting line\n                 * from the top edge of the label, otherwise start drawing from\n                 * the bottom edge\n                 */\n                let labelX = anchorX;\n                if (shape === 'circle') {\n                    labelX = x + w / 2;\n                }\n                else {\n                    const startSeg = path[0];\n                    const endSeg = path[1];\n                    if (startSeg[0] === 'M' && endSeg[0] === 'L') {\n                        labelX = (startSeg[1] + endSeg[1]) / 2;\n                    }\n                }\n                const labelY = (y > anchorY) ? y : y + h;\n                path.push([\n                    'M',\n                    labelX,\n                    labelY\n                ], [\n                    'L',\n                    anchorX,\n                    anchorY\n                ]);\n                path = path.concat(symbols.circle(anchorX - 1, anchorY - 1, 2, 2));\n            }\n            return path;\n        };\n    }\n})(FlagsSymbols || (FlagsSymbols = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Flags_FlagsSymbols = (FlagsSymbols);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Series\",\"types\",\"column\"],\"commonjs\":[\"highcharts\",\"Series\",\"types\",\"column\"],\"commonjs2\":[\"highcharts\",\"Series\",\"types\",\"column\"],\"root\":[\"Highcharts\",\"Series\",\"types\",\"column\"]}\nvar highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_ = __webpack_require__(448);\nvar highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default = /*#__PURE__*/__webpack_require__.n(highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_);\n;// ./code/es-modules/Series/OnSeriesComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { composed: OnSeriesComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nconst { prototype: columnProto } = (highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default());\n\nconst { prototype: seriesProto } = (highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default());\n\nconst { defined: OnSeriesComposition_defined, pushUnique: OnSeriesComposition_pushUnique, stableSort } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar OnSeriesComposition;\n(function (OnSeriesComposition) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(SeriesClass) {\n        if (OnSeriesComposition_pushUnique(OnSeriesComposition_composed, 'OnSeries')) {\n            const seriesProto = SeriesClass.prototype;\n            seriesProto.getPlotBox = getPlotBox;\n            seriesProto.translate = translate;\n        }\n        return SeriesClass;\n    }\n    OnSeriesComposition.compose = compose;\n    /**\n     * Override getPlotBox. If the onSeries option is valid, return the plot box\n     * of the onSeries, otherwise proceed as usual.\n     *\n     * @private\n     */\n    function getPlotBox(name) {\n        return seriesProto.getPlotBox.call((this.options.onSeries &&\n            this.chart.get(this.options.onSeries)) || this, name);\n    }\n    OnSeriesComposition.getPlotBox = getPlotBox;\n    /**\n     * Extend the translate method by placing the point on the related series\n     *\n     * @private\n     */\n    function translate() {\n        columnProto.translate.apply(this);\n        const series = this, options = series.options, chart = series.chart, points = series.points, optionsOnSeries = options.onSeries, onSeries = (optionsOnSeries &&\n            chart.get(optionsOnSeries)), step = onSeries && onSeries.options.step, onData = (onSeries && onSeries.points), inverted = chart.inverted, xAxis = series.xAxis, yAxis = series.yAxis;\n        let cursor = points.length - 1, point, lastPoint, onKey = options.onKey || 'y', i = onData && onData.length, xOffset = 0, leftPoint, lastX, rightPoint, currentDataGrouping, distanceRatio;\n        // Relate to a master series\n        if (onSeries && onSeries.visible && i) {\n            xOffset = (onSeries.pointXOffset || 0) + (onSeries.barW || 0) / 2;\n            currentDataGrouping = onSeries.currentDataGrouping;\n            lastX = (onData[i - 1].x +\n                (currentDataGrouping ? currentDataGrouping.totalRange : 0)); // #2374\n            // sort the data points\n            stableSort(points, (a, b) => (a.x - b.x));\n            onKey = 'plot' + onKey[0].toUpperCase() + onKey.substr(1);\n            while (i-- && points[cursor]) {\n                leftPoint = onData[i];\n                point = points[cursor];\n                point.y = leftPoint.y;\n                if (leftPoint.x <= point.x &&\n                    typeof leftPoint[onKey] !== 'undefined') {\n                    if (point.x <= lastX) { // #803\n                        point.plotY = leftPoint[onKey];\n                        // Interpolate between points, #666\n                        if (leftPoint.x < point.x &&\n                            !step) {\n                            rightPoint = onData[i + 1];\n                            if (rightPoint &&\n                                typeof rightPoint[onKey] !== 'undefined') {\n                                // If the series is spline, calculate Y of the\n                                // point on the bezier line. #19264\n                                if (OnSeriesComposition_defined(point.plotX) &&\n                                    onSeries.is('spline')) {\n                                    leftPoint = leftPoint;\n                                    rightPoint = rightPoint;\n                                    const p0 = [\n                                        leftPoint.plotX || 0,\n                                        leftPoint.plotY || 0\n                                    ], p3 = [\n                                        rightPoint.plotX || 0,\n                                        rightPoint.plotY || 0\n                                    ], p1 = (leftPoint.controlPoints?.high ||\n                                        p0), p2 = (rightPoint.controlPoints?.low ||\n                                        p3), pixelThreshold = 0.25, maxIterations = 100, calculateCoord = (t, key) => (\n                                    // The parametric formula for the\n                                    // cubic Bezier curve.\n                                    Math.pow(1 - t, 3) * p0[key] +\n                                        3 * (1 - t) * (1 - t) * t *\n                                            p1[key] + 3 * (1 - t) * t * t *\n                                        p2[key] + t * t * t * p3[key]);\n                                    let tMin = 0, tMax = 1, t;\n                                    // Find `t` of the parametric function of\n                                    // the bezier curve for the given `plotX`.\n                                    for (let i = 0; i < maxIterations; i++) {\n                                        const tMid = (tMin + tMax) / 2;\n                                        const xMid = calculateCoord(tMid, 0);\n                                        if (xMid === null) {\n                                            break;\n                                        }\n                                        if (Math.abs(xMid - point.plotX) < pixelThreshold) {\n                                            t = tMid;\n                                            break;\n                                        }\n                                        if (xMid < point.plotX) {\n                                            tMin = tMid;\n                                        }\n                                        else {\n                                            tMax = tMid;\n                                        }\n                                    }\n                                    if (OnSeriesComposition_defined(t)) {\n                                        point.plotY =\n                                            calculateCoord(t, 1);\n                                        point.y =\n                                            yAxis.toValue(point.plotY, true);\n                                    }\n                                }\n                                else {\n                                    // The distance ratio, between 0 and 1\n                                    distanceRatio =\n                                        (point.x - leftPoint.x) /\n                                            (rightPoint.x - leftPoint.x);\n                                    point.plotY +=\n                                        distanceRatio *\n                                            // The plotY distance\n                                            (rightPoint[onKey] - leftPoint[onKey]);\n                                    point.y +=\n                                        distanceRatio *\n                                            (rightPoint.y - leftPoint.y);\n                                }\n                            }\n                        }\n                    }\n                    cursor--;\n                    i++; // Check again for points in the same x position\n                    if (cursor < 0) {\n                        break;\n                    }\n                }\n            }\n        }\n        // Add plotY position and handle stacking\n        points.forEach((point, i) => {\n            let stackIndex;\n            point.plotX += xOffset; // #2049\n            // Undefined plotY means the point is either on axis, outside series\n            // range or hidden series. If the series is outside the range of the\n            // x axis it should fall through with an undefined plotY, but then\n            // we must remove the shapeArgs (#847). For inverted charts, we need\n            // to calculate position anyway, because series.invertGroups is not\n            // defined\n            if (typeof point.plotY === 'undefined' || inverted) {\n                if (point.plotX >= 0 &&\n                    point.plotX <= xAxis.len) {\n                    // We're inside xAxis range\n                    if (inverted) {\n                        point.plotY = xAxis.translate(point.x, 0, 1, 0, 1);\n                        point.plotX = OnSeriesComposition_defined(point.y) ?\n                            yAxis.translate(point.y, 0, 0, 0, 1) :\n                            0;\n                    }\n                    else {\n                        point.plotY = (xAxis.opposite ? 0 : series.yAxis.len) +\n                            xAxis.offset; // For the windbarb demo\n                    }\n                }\n                else {\n                    point.shapeArgs = {}; // 847\n                }\n            }\n            // If multiple flags appear at the same x, order them into a stack\n            lastPoint = points[i - 1];\n            if (lastPoint && lastPoint.plotX === point.plotX) {\n                if (typeof lastPoint.stackIndex === 'undefined') {\n                    lastPoint.stackIndex = 0;\n                }\n                stackIndex = lastPoint.stackIndex + 1;\n            }\n            point.stackIndex = stackIndex; // #3639\n        });\n        this.onSeries = onSeries;\n    }\n    OnSeriesComposition.translate = translate;\n})(OnSeriesComposition || (OnSeriesComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Series_OnSeriesComposition = (OnSeriesComposition);\n\n;// ./code/es-modules/Series/Flags/FlagsSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { distribute } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { series: Series, seriesTypes: { column: FlagsSeries_ColumnSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\n\nconst { addEvent: FlagsSeries_addEvent, defined: FlagsSeries_defined, extend: FlagsSeries_extend, isNumber: FlagsSeries_isNumber, merge: FlagsSeries_merge, objectEach: FlagsSeries_objectEach, wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Classes\n *\n * */\n/**\n * The Flags series.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.flags\n *\n * @augments Highcharts.Series\n */\nclass FlagsSeries extends FlagsSeries_ColumnSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Disable animation, but keep clipping (#8546).\n     * @private\n     */\n    animate(init) {\n        if (init) {\n            this.setClip();\n        }\n    }\n    /**\n     * Draw the markers.\n     * @private\n     */\n    drawPoints() {\n        const series = this, points = series.points, chart = series.chart, renderer = chart.renderer, inverted = chart.inverted, options = series.options, optionsY = options.y, yAxis = series.yAxis, boxesMap = {}, boxes = [], borderRadius = FlagsSeries_isNumber(options.borderRadius) ?\n            options.borderRadius : 0;\n        let plotX, plotY, shape, i, point, graphic, stackIndex, anchorY, attribs, outsideRight, centered;\n        i = points.length;\n        while (i--) {\n            point = points[i];\n            outsideRight =\n                (inverted ? point.plotY : point.plotX) >\n                    series.xAxis.len;\n            plotX = point.plotX;\n            stackIndex = point.stackIndex;\n            shape = point.options.shape || options.shape;\n            plotY = point.plotY;\n            if (typeof plotY !== 'undefined') {\n                plotY = point.plotY + optionsY -\n                    (typeof stackIndex !== 'undefined' &&\n                        (stackIndex * options.stackDistance));\n            }\n            // Skip connectors for higher level stacked points\n            point.anchorX = stackIndex ? void 0 : point.plotX;\n            anchorY = stackIndex ? void 0 : point.plotY;\n            centered = shape !== 'flag';\n            graphic = point.graphic;\n            // Only draw the point if y is defined and the flag is within\n            // the visible area\n            if (typeof plotY !== 'undefined' &&\n                plotX >= 0 &&\n                !outsideRight) {\n                // #15384\n                if (graphic && point.hasNewShapeType()) {\n                    graphic = graphic.destroy();\n                }\n                // Create the flag\n                if (!graphic) {\n                    graphic = point.graphic = renderer.label('', 0, void 0, shape, void 0, void 0, options.useHTML)\n                        .addClass('highcharts-point')\n                        .add(series.markerGroup);\n                    // Add reference to the point for tracker (#6303)\n                    if (point.graphic.div) {\n                        point.graphic.div.point = point;\n                    }\n                    graphic.isNew = true;\n                }\n                graphic.attr({\n                    align: centered ? 'center' : 'left',\n                    width: options.width,\n                    height: options.height,\n                    'text-align': options.textAlign,\n                    r: borderRadius\n                });\n                if (!chart.styledMode) {\n                    graphic\n                        .attr(series.pointAttribs(point))\n                        .css(FlagsSeries_merge(options.style, point.style))\n                        .shadow(options.shadow);\n                }\n                if (plotX > 0) { // #3119\n                    plotX -= graphic.strokeWidth() % 2; // #4285\n                }\n                // Plant the flag\n                attribs = {\n                    y: plotY,\n                    anchorY: anchorY\n                };\n                if (options.allowOverlapX) {\n                    attribs.x = plotX;\n                    attribs.anchorX = point.anchorX;\n                }\n                graphic.attr({\n                    // Allow empty string as a flag title (#20549)\n                    text: point.options.title ?? options.title ?? 'A'\n                })[graphic.isNew ? 'attr' : 'animate'](attribs);\n                // Rig for the distribute function\n                if (!options.allowOverlapX) {\n                    if (!boxesMap[point.plotX]) {\n                        boxesMap[point.plotX] = {\n                            align: centered ? 0.5 : 0,\n                            size: graphic.width || 0,\n                            target: plotX,\n                            anchorX: plotX\n                        };\n                    }\n                    else {\n                        boxesMap[point.plotX].size = Math.max(boxesMap[point.plotX].size, graphic.width || 0);\n                    }\n                }\n                // Set the tooltip anchor position\n                point.tooltipPos = [\n                    plotX,\n                    plotY + yAxis.pos - chart.plotTop\n                ]; // #6327\n            }\n            else if (graphic) {\n                point.graphic = graphic.destroy();\n            }\n        }\n        // Handle X-dimension overlapping\n        if (!options.allowOverlapX) {\n            let maxDistance = 100;\n            FlagsSeries_objectEach(boxesMap, function (box) {\n                box.plotX = box.anchorX;\n                boxes.push(box);\n                maxDistance = Math.max(box.size, maxDistance);\n            });\n            // If necessary (for overlapping or long labels)  distribute it\n            // depending on the label width or a hardcoded value, #16041.\n            distribute(boxes, inverted ? yAxis.len : this.xAxis.len, maxDistance);\n            for (const point of points) {\n                const plotX = point.plotX, graphic = point.graphic, box = graphic && boxesMap[plotX];\n                if (box && graphic) {\n                    // Hide flag when its box position is not specified\n                    // (#8573, #9299)\n                    if (!FlagsSeries_defined(box.pos)) {\n                        graphic.hide().isNew = true;\n                    }\n                    else {\n                        graphic[graphic.isNew ? 'attr' : 'animate']({\n                            x: box.pos + (box.align || 0) * box.size,\n                            anchorX: point.anchorX\n                        }).show().isNew = false;\n                    }\n                }\n            }\n        }\n        // Can be a mix of SVG and HTML and we need events for both (#6303)\n        if (options.useHTML && series.markerGroup) {\n            wrap(series.markerGroup, 'on', function (proceed) {\n                return highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default().prototype.on.apply(\n                // For HTML\n                // eslint-disable-next-line no-invalid-this\n                proceed.apply(this, [].slice.call(arguments, 1)), \n                // And for SVG\n                [].slice.call(arguments, 1));\n            });\n        }\n    }\n    /**\n     * Extend the column trackers with listeners to expand and contract\n     * stacks.\n     * @private\n     */\n    drawTracker() {\n        const series = this, points = series.points;\n        super.drawTracker();\n        /* *\n        * Bring each stacked flag up on mouse over, this allows readability\n        * of vertically stacked elements as well as tight points on the x\n        * axis. #1924.\n        */\n        for (const point of points) {\n            const graphic = point.graphic;\n            if (graphic) {\n                if (point.unbindMouseOver) {\n                    point.unbindMouseOver();\n                }\n                point.unbindMouseOver = FlagsSeries_addEvent(graphic.element, 'mouseover', function () {\n                    // Raise this point\n                    if (point.stackIndex > 0 &&\n                        !point.raised) {\n                        point._y = graphic.y;\n                        graphic.attr({\n                            y: point._y - 8\n                        });\n                        point.raised = true;\n                    }\n                    // Revert other raised points\n                    for (const otherPoint of points) {\n                        if (otherPoint !== point &&\n                            otherPoint.raised &&\n                            otherPoint.graphic) {\n                            otherPoint.graphic.attr({\n                                y: otherPoint._y\n                            });\n                            otherPoint.raised = false;\n                        }\n                    }\n                });\n            }\n        }\n    }\n    /**\n     * Get presentational attributes\n     * @private\n     */\n    pointAttribs(point, state) {\n        const options = this.options, color = (point && point.color) || this.color;\n        let lineColor = options.lineColor, lineWidth = (point && point.lineWidth), fill = (point && point.fillColor) || options.fillColor;\n        if (state) {\n            fill = options.states[state].fillColor;\n            lineColor = options.states[state].lineColor;\n            lineWidth = options.states[state].lineWidth;\n        }\n        return {\n            fill: fill || color,\n            stroke: lineColor || color,\n            'stroke-width': lineWidth || options.lineWidth || 0\n        };\n    }\n    /**\n     * @private\n     */\n    setClip() {\n        Series.prototype.setClip.apply(this, arguments);\n        if (this.options.clip !== false &&\n            this.sharedClipKey &&\n            this.markerGroup) {\n            this.markerGroup.clip(this.chart.sharedClips[this.sharedClipKey]);\n        }\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nFlagsSeries.compose = Flags_FlagsSymbols.compose;\nFlagsSeries.defaultOptions = FlagsSeries_merge(FlagsSeries_ColumnSeries.defaultOptions, Flags_FlagsSeriesDefaults);\nSeries_OnSeriesComposition.compose(FlagsSeries);\nFlagsSeries_extend(FlagsSeries.prototype, {\n    allowDG: false,\n    forceCrop: true,\n    invertible: false, // Flags series group should not be invertible (#14063).\n    noSharedTooltip: true,\n    pointClass: Flags_FlagsPoint,\n    sorted: false,\n    takeOrdinalPosition: false, // #1074\n    trackerGroups: ['markerGroup'],\n    buildKDTree: noop,\n    /**\n     * Inherit the initialization from base Series.\n     * @private\n     */\n    init: Series.prototype.init\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('flags', FlagsSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Flags_FlagsSeries = (FlagsSeries);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @typedef {\"circlepin\"|\"flag\"|\"squarepin\"} Highcharts.FlagsShapeValue\n */\n''; // Detach doclets above\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"StackItem\"],\"commonjs\":[\"highcharts\",\"StackItem\"],\"commonjs2\":[\"highcharts\",\"StackItem\"],\"root\":[\"Highcharts\",\"StackItem\"]}\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_ = __webpack_require__(184);\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default = /*#__PURE__*/__webpack_require__.n(highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_);\n;// ./code/es-modules/Core/Axis/BrokenAxis.js\n/* *\n *\n *  (c) 2009-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { addEvent: BrokenAxis_addEvent, find: BrokenAxis_find, fireEvent: BrokenAxis_fireEvent, isArray: BrokenAxis_isArray, isNumber: BrokenAxis_isNumber, pick: BrokenAxis_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Axis with support of broken data rows.\n * @private\n */\nvar BrokenAxis;\n(function (BrokenAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Adds support for broken axes.\n     * @private\n     */\n    function compose(AxisClass, SeriesClass) {\n        if (!AxisClass.keepProps.includes('brokenAxis')) {\n            AxisClass.keepProps.push('brokenAxis');\n            BrokenAxis_addEvent(AxisClass, 'init', onAxisInit);\n            BrokenAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            BrokenAxis_addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);\n            BrokenAxis_addEvent(AxisClass, 'afterSetOptions', onAxisAfterSetOptions);\n            const seriesProto = SeriesClass.prototype;\n            seriesProto.drawBreaks = seriesDrawBreaks;\n            seriesProto.gappedPath = seriesGappedPath;\n            BrokenAxis_addEvent(SeriesClass, 'afterGeneratePoints', onSeriesAfterGeneratePoints);\n            BrokenAxis_addEvent(SeriesClass, 'afterRender', onSeriesAfterRender);\n        }\n        return AxisClass;\n    }\n    BrokenAxis.compose = compose;\n    /**\n     * @private\n     */\n    function onAxisAfterInit() {\n        if (typeof this.brokenAxis !== 'undefined') {\n            this.brokenAxis.setBreaks(this.options.breaks, false);\n        }\n    }\n    /**\n     * Force Axis to be not-ordinal when breaks are defined.\n     * @private\n     */\n    function onAxisAfterSetOptions() {\n        const axis = this;\n        if (axis.brokenAxis?.hasBreaks) {\n            axis.options.ordinal = false;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisAfterSetTickPositions() {\n        const axis = this, brokenAxis = axis.brokenAxis;\n        if (brokenAxis?.hasBreaks) {\n            const tickPositions = axis.tickPositions, info = axis.tickPositions.info, newPositions = [];\n            for (let i = 0; i < tickPositions.length; i++) {\n                if (!brokenAxis.isInAnyBreak(tickPositions[i])) {\n                    newPositions.push(tickPositions[i]);\n                }\n            }\n            axis.tickPositions = newPositions;\n            axis.tickPositions.info = info;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInit() {\n        const axis = this;\n        if (!axis.brokenAxis) {\n            axis.brokenAxis = new Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterGeneratePoints() {\n        const { isDirty, options: { connectNulls }, points, xAxis, yAxis } = this;\n        // Set, or reset visibility of the points. Axis.setBreaks marks\n        // the series as isDirty\n        if (isDirty) {\n            let i = points.length;\n            while (i--) {\n                const point = points[i];\n                // Respect nulls inside the break (#4275)\n                const nullGap = point.y === null && connectNulls === false;\n                const isPointInBreak = (!nullGap && (xAxis?.brokenAxis?.isInAnyBreak(point.x, true) ||\n                    yAxis?.brokenAxis?.isInAnyBreak(point.y, true)));\n                // Set point.visible if in any break.\n                // If not in break, reset visible to original value.\n                point.visible = isPointInBreak ?\n                    false :\n                    point.options.visible !== false;\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterRender() {\n        this.drawBreaks(this.xAxis, ['x']);\n        this.drawBreaks(this.yAxis, BrokenAxis_pick(this.pointArrayMap, ['y']));\n    }\n    /**\n     * @private\n     */\n    function seriesDrawBreaks(axis, keys) {\n        const series = this, points = series.points;\n        let breaks, threshold, y;\n        if (axis?.brokenAxis?.hasBreaks) {\n            const brokenAxis = axis.brokenAxis;\n            keys.forEach(function (key) {\n                breaks = brokenAxis?.breakArray || [];\n                threshold = axis.isXAxis ?\n                    axis.min :\n                    BrokenAxis_pick(series.options.threshold, axis.min);\n                // Array of breaks that have been \"zoomed-out\" which means that\n                // they were shown previously, but now after zoom, they are not\n                // (#19885).\n                const breaksOutOfRange = axis?.options?.breaks?.filter(function (brk) {\n                    let isOut = true;\n                    // Iterate to see if \"brk\" is in axis range\n                    for (let i = 0; i < breaks.length; i++) {\n                        const otherBreak = breaks[i];\n                        if (otherBreak.from === brk.from &&\n                            otherBreak.to === brk.to) {\n                            isOut = false;\n                            break;\n                        }\n                    }\n                    return isOut;\n                });\n                points.forEach(function (point) {\n                    y = BrokenAxis_pick(point['stack' + key.toUpperCase()], point[key]);\n                    breaks.forEach(function (brk) {\n                        if (BrokenAxis_isNumber(threshold) && BrokenAxis_isNumber(y)) {\n                            let eventName = '';\n                            if ((threshold < brk.from && y > brk.to) ||\n                                (threshold > brk.from && y < brk.from)) {\n                                eventName = 'pointBreak';\n                            }\n                            else if ((threshold < brk.from &&\n                                y > brk.from &&\n                                y < brk.to) || (threshold > brk.from &&\n                                y > brk.to &&\n                                y < brk.from)) {\n                                eventName = 'pointInBreak';\n                            }\n                            if (eventName) {\n                                BrokenAxis_fireEvent(axis, eventName, { point, brk });\n                            }\n                        }\n                    });\n                    breaksOutOfRange?.forEach(function (brk) {\n                        BrokenAxis_fireEvent(axis, 'pointOutsideOfBreak', { point, brk });\n                    });\n                });\n            });\n        }\n    }\n    /**\n     * Extend getGraphPath by identifying gaps in the data so that we\n     * can draw a gap in the line or area. This was moved from ordinal\n     * axis module to broken axis module as of #5045.\n     *\n     * @private\n     * @function Highcharts.Series#gappedPath\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Gapped path\n     */\n    function seriesGappedPath() {\n        const currentDataGrouping = this.currentDataGrouping, groupingSize = currentDataGrouping?.gapSize, points = this.points.slice(), yAxis = this.yAxis;\n        let gapSize = this.options.gapSize, i = points.length - 1, stack;\n        /**\n         * Defines when to display a gap in the graph, together with the\n         * [gapUnit](plotOptions.series.gapUnit) option.\n         *\n         * In case when `dataGrouping` is enabled, points can be grouped\n         * into a larger time span. This can make the grouped points to\n         * have a greater distance than the absolute value of `gapSize`\n         * property, which will result in disappearing graph completely.\n         * To prevent this situation the mentioned distance between\n         * grouped points is used instead of previously defined\n         * `gapSize`.\n         *\n         * In practice, this option is most often used to visualize gaps\n         * in time series. In a stock chart, intraday data is available\n         * for daytime hours, while gaps will appear in nights and\n         * weekends.\n         *\n         * @see [gapUnit](plotOptions.series.gapUnit)\n         * @see [xAxis.breaks](#xAxis.breaks)\n         *\n         * @sample {highstock} stock/plotoptions/series-gapsize/\n         * Setting the gap size to 2 introduces gaps for weekends in\n         * daily datasets.\n         *\n         * @type      {number}\n         * @default   0\n         * @product   highstock\n         * @requires  modules/broken-axis\n         * @apioption plotOptions.series.gapSize\n         */\n        /**\n         * Together with [gapSize](plotOptions.series.gapSize), this\n         * option defines where to draw gaps in the graph.\n         *\n         * When the `gapUnit` is `\"relative\"` (default), a gap size of 5\n         * means that if the distance between two points is greater than\n         * 5 times that of the two closest points, the graph will be\n         * broken.\n         *\n         * When the `gapUnit` is `\"value\"`, the gap is based on absolute\n         * axis values, which on a datetime axis is milliseconds. This\n         * also applies to the navigator series that inherits gap\n         * options from the base series.\n         *\n         * @see [gapSize](plotOptions.series.gapSize)\n         *\n         * @type       {string}\n         * @default    relative\n         * @since      5.0.13\n         * @product    highstock\n         * @validvalue [\"relative\", \"value\"]\n         * @requires   modules/broken-axis\n         * @apioption  plotOptions.series.gapUnit\n         */\n        if (gapSize && i > 0) { // #5008\n            // Gap unit is relative\n            if (this.options.gapUnit !== 'value') {\n                gapSize *= this.basePointRange;\n            }\n            // Setting a new gapSize in case dataGrouping is enabled\n            // (#7686)\n            if (groupingSize &&\n                groupingSize > gapSize &&\n                // Except when DG is forced (e.g. from other series)\n                // and has lower granularity than actual points (#11351)\n                groupingSize >= this.basePointRange) {\n                gapSize = groupingSize;\n            }\n            // Extension for ordinal breaks\n            let current, next;\n            while (i--) {\n                // Reassign next if it is not visible\n                if (!(next && next.visible !== false)) {\n                    next = points[i + 1];\n                }\n                current = points[i];\n                // Skip iteration if one of the points is not visible\n                if (next.visible === false || current.visible === false) {\n                    continue;\n                }\n                if (next.x - current.x > gapSize) {\n                    const xRange = (current.x + next.x) / 2;\n                    points.splice(// Insert after this one\n                    i + 1, 0, {\n                        isNull: true,\n                        x: xRange\n                    });\n                    // For stacked chart generate empty stack items, #6546\n                    if (yAxis.stacking && this.options.stacking) {\n                        stack = yAxis.stacking.stacks[this.stackKey][xRange] = new (highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default())(yAxis, yAxis.options.stackLabels, false, xRange, this.stack);\n                        stack.total = 0;\n                    }\n                }\n                // Assign current to next for the upcoming iteration\n                next = current;\n            }\n        }\n        // Call base method\n        return this.getGraphPath(points);\n    }\n    /* *\n     *\n     *  Class\n     *\n     * */\n    /**\n     * Provides support for broken axes.\n     * @private\n     * @class\n     */\n    class Additions {\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        /**\n         * @private\n         */\n        static isInBreak(brk, val) {\n            const repeat = brk.repeat || Infinity, from = brk.from, length = brk.to - brk.from, test = (val >= from ?\n                (val - from) % repeat :\n                repeat - ((from - val) % repeat));\n            let ret;\n            if (!brk.inclusive) {\n                ret = test < length && test !== 0;\n            }\n            else {\n                ret = test <= length;\n            }\n            return ret;\n        }\n        /**\n         * @private\n         */\n        static lin2Val(val) {\n            const axis = this;\n            const brokenAxis = axis.brokenAxis;\n            const breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            let nval = val, brk, i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.from >= nval) {\n                    break;\n                }\n                else if (brk.to < nval) {\n                    nval += brk.len;\n                }\n                else if (Additions.isInBreak(brk, nval)) {\n                    nval += brk.len;\n                }\n            }\n            return nval;\n        }\n        /**\n         * @private\n         */\n        static val2Lin(val) {\n            const axis = this;\n            const brokenAxis = axis.brokenAxis;\n            const breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            let nval = val, brk, i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.to <= val) {\n                    nval -= brk.len;\n                }\n                else if (brk.from >= val) {\n                    break;\n                }\n                else if (Additions.isInBreak(brk, val)) {\n                    nval -= (val - brk.from);\n                    break;\n                }\n            }\n            return nval;\n        }\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        constructor(axis) {\n            this.hasBreaks = false;\n            this.axis = axis;\n        }\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Returns the first break found where the x is larger then break.from\n         * and smaller then break.to.\n         *\n         * @param {number} x\n         * The number which should be within a break.\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} breaks\n         * The array of breaks to search within.\n         *\n         * @return {Highcharts.XAxisBreaksOptions|undefined}\n         * Returns the first break found that matches, returns false if no break\n         * is found.\n         */\n        findBreakAt(x, breaks) {\n            return BrokenAxis_find(breaks, function (b) {\n                return b.from < x && x < b.to;\n            });\n        }\n        /**\n         * @private\n         */\n        isInAnyBreak(val, testKeep) {\n            const brokenAxis = this, axis = brokenAxis.axis, breaks = axis.options.breaks || [];\n            let i = breaks.length, inbrk, keep, ret;\n            if (i && BrokenAxis_isNumber(val)) {\n                while (i--) {\n                    if (Additions.isInBreak(breaks[i], val)) {\n                        inbrk = true;\n                        if (!keep) {\n                            keep = BrokenAxis_pick(breaks[i].showPoints, !axis.isXAxis);\n                        }\n                    }\n                }\n                if (inbrk && testKeep) {\n                    ret = inbrk && !keep;\n                }\n                else {\n                    ret = inbrk;\n                }\n            }\n            return ret;\n        }\n        /**\n         * Dynamically set or unset breaks in an axis. This function in lighter\n         * than using Axis.update, and it also preserves animation.\n         *\n         * @private\n         * @function Highcharts.Axis#setBreaks\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]\n         * The breaks to add. When `undefined` it removes existing breaks.\n         *\n         * @param {boolean} [redraw=true]\n         * Whether to redraw the chart immediately.\n         */\n        setBreaks(breaks, redraw) {\n            const brokenAxis = this, axis = brokenAxis.axis, time = axis.chart.time, hasBreaks = BrokenAxis_isArray(breaks) &&\n                !!breaks.length &&\n                !!Object.keys(breaks[0]).length; // Check for [{}], #16368.\n            axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;\n            brokenAxis.hasBreaks = hasBreaks;\n            // Compile string dates\n            breaks?.forEach((brk) => {\n                brk.from = time.parse(brk.from) || 0;\n                brk.to = time.parse(brk.to) || 0;\n            });\n            if (breaks !== axis.options.breaks) {\n                axis.options.breaks = axis.userOptions.breaks = breaks;\n            }\n            axis.forceRedraw = true; // Force recalculation in setScale\n            // Recalculate series related to the axis.\n            axis.series.forEach(function (series) {\n                series.isDirty = true;\n            });\n            if (!hasBreaks && axis.val2lin === Additions.val2Lin) {\n                // Revert to prototype functions\n                delete axis.val2lin;\n                delete axis.lin2val;\n            }\n            if (hasBreaks) {\n                axis.userOptions.ordinal = false;\n                axis.lin2val = Additions.lin2Val;\n                axis.val2lin = Additions.val2Lin;\n                axis.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) {\n                    // If trying to set extremes inside a break, extend min to\n                    // after, and max to before the break ( #3857 )\n                    if (brokenAxis.hasBreaks) {\n                        const breaks = (this.options.breaks || []);\n                        let axisBreak;\n                        while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {\n                            newMin = axisBreak.to;\n                        }\n                        while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {\n                            newMax = axisBreak.from;\n                        }\n                        // If both min and max is within the same break.\n                        if (newMax < newMin) {\n                            newMax = newMin;\n                        }\n                    }\n                    axis.constructor.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments);\n                };\n                axis.setAxisTranslation = function () {\n                    axis.constructor.prototype.setAxisTranslation.call(this);\n                    brokenAxis.unitLength = void 0;\n                    if (brokenAxis.hasBreaks) {\n                        const breaks = axis.options.breaks || [], \n                        // Temporary one:\n                        breakArrayT = [], breakArray = [], pointRangePadding = BrokenAxis_pick(axis.pointRangePadding, 0);\n                        let length = 0, inBrk, repeat, min = axis.userMin || axis.min, max = axis.userMax || axis.max, start, i;\n                        // Min & max check (#4247)\n                        breaks.forEach(function (brk) {\n                            repeat = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min) && BrokenAxis_isNumber(max)) {\n                                if (Additions.isInBreak(brk, min)) {\n                                    min += ((brk.to % repeat) -\n                                        (min % repeat));\n                                }\n                                if (Additions.isInBreak(brk, max)) {\n                                    max -= ((max % repeat) -\n                                        (brk.from % repeat));\n                                }\n                            }\n                        });\n                        // Construct an array holding all breaks in the axis\n                        breaks.forEach(function (brk) {\n                            start = brk.from;\n                            repeat = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min) && BrokenAxis_isNumber(max)) {\n                                while (start - repeat > min) {\n                                    start -= repeat;\n                                }\n                                while (start < min) {\n                                    start += repeat;\n                                }\n                                for (i = start; i < max; i += repeat) {\n                                    breakArrayT.push({\n                                        value: i,\n                                        move: 'in'\n                                    });\n                                    breakArrayT.push({\n                                        value: i + brk.to - brk.from,\n                                        move: 'out',\n                                        size: brk.breakSize\n                                    });\n                                }\n                            }\n                        });\n                        breakArrayT.sort(function (a, b) {\n                            return ((a.value === b.value) ?\n                                ((a.move === 'in' ? 0 : 1) -\n                                    (b.move === 'in' ? 0 : 1)) :\n                                a.value - b.value);\n                        });\n                        // Simplify the breaks\n                        inBrk = 0;\n                        start = min;\n                        breakArrayT.forEach(function (brk) {\n                            inBrk += (brk.move === 'in' ? 1 : -1);\n                            if (inBrk === 1 && brk.move === 'in') {\n                                start = brk.value;\n                            }\n                            if (inBrk === 0 && BrokenAxis_isNumber(start)) {\n                                breakArray.push({\n                                    from: start,\n                                    to: brk.value,\n                                    len: brk.value - start - (brk.size || 0)\n                                });\n                                length += (brk.value -\n                                    start -\n                                    (brk.size || 0));\n                            }\n                        });\n                        brokenAxis.breakArray = breakArray;\n                        // Used with staticScale, and below the actual axis\n                        // length, when breaks are subtracted.\n                        if (BrokenAxis_isNumber(min) &&\n                            BrokenAxis_isNumber(max) &&\n                            BrokenAxis_isNumber(axis.min)) {\n                            brokenAxis.unitLength = max - min - length +\n                                pointRangePadding;\n                            BrokenAxis_fireEvent(axis, 'afterBreaks');\n                            if (axis.staticScale) {\n                                axis.transA = axis.staticScale;\n                            }\n                            else if (brokenAxis.unitLength) {\n                                axis.transA *=\n                                    (max - axis.min + pointRangePadding) /\n                                        brokenAxis.unitLength;\n                            }\n                            if (pointRangePadding) {\n                                axis.minPixelPadding =\n                                    axis.transA * (axis.minPointOffset || 0);\n                            }\n                            axis.min = min;\n                            axis.max = max;\n                        }\n                    }\n                };\n            }\n            if (BrokenAxis_pick(redraw, true)) {\n                axis.chart.redraw();\n            }\n        }\n    }\n    BrokenAxis.Additions = Additions;\n})(BrokenAxis || (BrokenAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_BrokenAxis = (BrokenAxis);\n\n;// ./code/es-modules/masters/modules/broken-axis.src.js\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nG.BrokenAxis = G.BrokenAxis || Axis_BrokenAxis;\nG.BrokenAxis.compose(G.Axis, G.Series);\n/* harmony default export */ const broken_axis_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es-modules/Extensions/DataGrouping/ApproximationRegistry.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Define the available approximation types. The data grouping\n * approximations takes an array or numbers as the first parameter. In case\n * of ohlc, four arrays are sent in as four parameters. Each array consists\n * only of numbers. In case null values belong to the group, the property\n * .hasNulls will be set to true on the array.\n *\n * @product highstock\n *\n * @private\n */\nconst ApproximationRegistry = {\n// Approximations added programmatically\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const DataGrouping_ApproximationRegistry = (ApproximationRegistry);\n\n;// ./code/es-modules/Extensions/DataGrouping/ApproximationDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { arrayMax: ApproximationDefaults_arrayMax, arrayMin: ApproximationDefaults_arrayMin, correctFloat: ApproximationDefaults_correctFloat, extend: ApproximationDefaults_extend, isNumber: ApproximationDefaults_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction average(arr) {\n    const len = arr.length;\n    let ret = sum(arr);\n    // If we have a number, return it divided by the length. If not,\n    // return null or undefined based on what the sum method finds.\n    if (ApproximationDefaults_isNumber(ret) && len) {\n        ret = ApproximationDefaults_correctFloat(ret / len);\n    }\n    return ret;\n}\n/**\n * The same as average, but for series with multiple values, like area ranges.\n * @private\n */\nfunction averages() {\n    const ret = [];\n    [].forEach.call(arguments, function (arr) {\n        ret.push(average(arr));\n    });\n    // Return undefined when first elem. is undefined and let\n    // sum method handle null (#7377)\n    return typeof ret[0] === 'undefined' ? void 0 : ret;\n}\n/**\n * @private\n */\nfunction ApproximationDefaults_close(arr) {\n    return arr.length ?\n        arr[arr.length - 1] :\n        (arr.hasNulls ? null : void 0);\n}\n/**\n * @private\n */\nfunction high(arr) {\n    return arr.length ?\n        ApproximationDefaults_arrayMax(arr) :\n        (arr.hasNulls ? null : void 0);\n}\n/**\n * HLC, OHLC and range are special cases where a multidimensional array is input\n * and an array is output.\n * @private\n */\nfunction hlc(high, low, close) {\n    high = DataGrouping_ApproximationRegistry.high(high);\n    low = DataGrouping_ApproximationRegistry.low(low);\n    close = DataGrouping_ApproximationRegistry.close(close);\n    if (ApproximationDefaults_isNumber(high) ||\n        ApproximationDefaults_isNumber(low) ||\n        ApproximationDefaults_isNumber(close)) {\n        return [high, low, close];\n    }\n}\n/**\n * @private\n */\nfunction low(arr) {\n    return arr.length ?\n        ApproximationDefaults_arrayMin(arr) :\n        (arr.hasNulls ? null : void 0);\n}\n/**\n * @private\n */\nfunction ohlc(open, high, low, close) {\n    open = DataGrouping_ApproximationRegistry.open(open);\n    high = DataGrouping_ApproximationRegistry.high(high);\n    low = DataGrouping_ApproximationRegistry.low(low);\n    close = DataGrouping_ApproximationRegistry.close(close);\n    if (ApproximationDefaults_isNumber(open) ||\n        ApproximationDefaults_isNumber(high) ||\n        ApproximationDefaults_isNumber(low) ||\n        ApproximationDefaults_isNumber(close)) {\n        return [open, high, low, close];\n    }\n}\n/**\n * @private\n */\nfunction ApproximationDefaults_open(arr) {\n    return arr.length ? arr[0] : (arr.hasNulls ? null : void 0);\n}\n/**\n * @private\n */\nfunction range(low, high) {\n    low = DataGrouping_ApproximationRegistry.low(low);\n    high = DataGrouping_ApproximationRegistry.high(high);\n    if (ApproximationDefaults_isNumber(low) || ApproximationDefaults_isNumber(high)) {\n        return [low, high];\n    }\n    if (low === null && high === null) {\n        return null;\n    }\n    // Else, return is undefined\n}\n/**\n * @private\n */\nfunction sum(arr) {\n    let len = arr.length, ret;\n    // 1. it consists of nulls exclusive\n    if (!len && arr.hasNulls) {\n        ret = null;\n        // 2. it has a length and real values\n    }\n    else if (len) {\n        ret = 0;\n        while (len--) {\n            ret += arr[len];\n        }\n    }\n    // 3. it has zero length, so just return undefined\n    // => doNothing()\n    return ret;\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst ApproximationDefaults = {\n    average,\n    averages,\n    close: ApproximationDefaults_close,\n    high,\n    hlc,\n    low,\n    ohlc,\n    open: ApproximationDefaults_open,\n    range,\n    sum\n};\nApproximationDefaults_extend(DataGrouping_ApproximationRegistry, ApproximationDefaults);\n/* harmony default export */ const DataGrouping_ApproximationDefaults = (ApproximationDefaults);\n\n;// ./code/es-modules/Extensions/DataGrouping/DataGroupingDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Common options\n * @private\n */\nconst common = {\n    /// enabled: null, // (true for stock charts, false for basic),\n    // forced: undefined,\n    groupPixelWidth: 2,\n    // The first one is the point or start value, the second is the start\n    // value if we're dealing with range, the third one is the end value if\n    // dealing with a range\n    dateTimeLabelFormats: {\n        millisecond: [\n            '%[AebHMSL]',\n            '%[AebHMSL]',\n            '-%[HMSL]'\n        ],\n        second: [\n            '%[AebHMS]',\n            '%[AebHMS]',\n            '-%[HMS]'\n        ],\n        minute: [\n            '%[AebHM]',\n            '%[AebHM]',\n            '-%[HM]'\n        ],\n        hour: [\n            '%[AebHM]',\n            '%[AebHM]',\n            '-%[HM]'\n        ],\n        day: [\n            '%[AebY]',\n            '%[Aeb]',\n            '-%[AebY]'\n        ],\n        week: [\n            'week from %[AebY]',\n            '%[Aeb]',\n            '-%[AebY]'\n        ],\n        month: [\n            '%[BY]',\n            '%[B]',\n            '-%[BY]'\n        ],\n        year: [\n            '%Y',\n            '%Y',\n            '-%Y'\n        ]\n    }\n    /// smoothed = false, // enable this for navigator series only\n};\n/**\n * Extends common options\n * @private\n */\nconst seriesSpecific = {\n    line: {},\n    spline: {},\n    area: {},\n    areaspline: {},\n    arearange: {},\n    column: {\n        groupPixelWidth: 10\n    },\n    columnrange: {\n        groupPixelWidth: 10\n    },\n    candlestick: {\n        groupPixelWidth: 10\n    },\n    ohlc: {\n        groupPixelWidth: 5\n    },\n    hlc: {\n        groupPixelWidth: 5\n        // Move to HeikinAshiSeries.ts after refactoring data grouping.\n    },\n    heikinashi: {\n        groupPixelWidth: 10\n    }\n};\n/**\n * Units are defined in a separate array to allow complete overriding in\n * case of a user option.\n * @private\n */\nconst units = [\n    [\n        'millisecond', // Unit name\n        [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // Allowed multiples\n    ], [\n        'second',\n        [1, 2, 5, 10, 15, 30]\n    ], [\n        'minute',\n        [1, 2, 5, 10, 15, 30]\n    ], [\n        'hour',\n        [1, 2, 3, 4, 6, 8, 12]\n    ], [\n        'day',\n        [1]\n    ], [\n        'week',\n        [1]\n    ], [\n        'month',\n        [1, 3, 6]\n    ], [\n        'year',\n        null\n    ]\n];\n/* *\n *\n *  Default Export\n *\n * */\nconst DataGroupingDefaults = {\n    common,\n    seriesSpecific,\n    units\n};\n/* harmony default export */ const DataGrouping_DataGroupingDefaults = (DataGroupingDefaults);\n\n;// ./code/es-modules/Extensions/DataGrouping/DataGroupingAxisComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { addEvent: DataGroupingAxisComposition_addEvent, extend: DataGroupingAxisComposition_extend, merge: DataGroupingAxisComposition_merge, pick: DataGroupingAxisComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Variables\n *\n * */\nlet AxisConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Check the groupPixelWidth and apply the grouping if needed.\n * Fired only after processing the data.\n *\n * @product highstock\n *\n * @function Highcharts.Axis#applyGrouping\n */\nfunction applyGrouping(e) {\n    const axis = this, series = axis.series;\n    // Reset the groupPixelWidth for all series, #17141.\n    series.forEach(function (series) {\n        series.groupPixelWidth = void 0; // #2110\n    });\n    series.forEach(function (series) {\n        series.groupPixelWidth = (axis.getGroupPixelWidth &&\n            axis.getGroupPixelWidth());\n        if (series.groupPixelWidth) {\n            series.hasProcessed = true; // #2692\n        }\n        // Fire independing on series.groupPixelWidth to always set a proper\n        // dataGrouping state, (#16238)\n        series.applyGrouping(!!e.hasExtremesChanged);\n    });\n}\n/**\n * @private\n */\nfunction DataGroupingAxisComposition_compose(AxisClass) {\n    AxisConstructor = AxisClass;\n    const axisProto = AxisClass.prototype;\n    if (!axisProto.applyGrouping) {\n        DataGroupingAxisComposition_addEvent(AxisClass, 'afterSetScale', onAfterSetScale);\n        // When all series are processed, calculate the group pixel width and\n        // then if this value is different than zero apply groupings.\n        DataGroupingAxisComposition_addEvent(AxisClass, 'postProcessData', applyGrouping);\n        DataGroupingAxisComposition_extend(axisProto, {\n            applyGrouping,\n            getGroupPixelWidth,\n            setDataGrouping\n        });\n    }\n}\n/**\n * Get the data grouping pixel width based on the greatest defined individual\n * width of the axis' series, and if whether one of the axes need grouping.\n * @private\n */\nfunction getGroupPixelWidth() {\n    const series = this.series;\n    let i = series.length, groupPixelWidth = 0, doGrouping = false, dataLength, dgOptions;\n    // If one of the series needs grouping, apply it to all (#1634)\n    while (i--) {\n        dgOptions = series[i].options.dataGrouping;\n        if (dgOptions) { // #2692\n            // If multiple series are compared on the same x axis, give them the\n            // same group pixel width (#334)\n            groupPixelWidth = Math.max(groupPixelWidth, \n            // Fallback to commonOptions (#9693)\n            DataGroupingAxisComposition_pick(dgOptions.groupPixelWidth, DataGrouping_DataGroupingDefaults.common.groupPixelWidth));\n            dataLength = (series[i].dataTable.modified ||\n                series[i].dataTable).rowCount;\n            // Execute grouping if the amount of points is greater than the\n            // limit defined in groupPixelWidth\n            if (series[i].groupPixelWidth ||\n                (dataLength >\n                    (this.chart.plotSizeX / groupPixelWidth)) ||\n                (dataLength && dgOptions.forced)) {\n                doGrouping = true;\n            }\n        }\n    }\n    return doGrouping ? groupPixelWidth : 0;\n}\n/**\n * When resetting the scale reset the hasProcessed flag to avoid taking\n * previous data grouping of neighbour series into account when determining\n * group pixel width (#2692).\n * @private\n */\nfunction onAfterSetScale() {\n    this.series.forEach(function (series) {\n        series.hasProcessed = false;\n    });\n}\n/**\n * Highcharts Stock only. Force data grouping on all the axis' series.\n *\n * @product highstock\n *\n * @function Highcharts.Axis#setDataGrouping\n *\n * @param {boolean|Highcharts.DataGroupingOptionsObject} [dataGrouping]\n *        A `dataGrouping` configuration. Use `false` to disable data grouping\n *        dynamically.\n *\n * @param {boolean} [redraw=true]\n *        Whether to redraw the chart or wait for a later call to\n *        {@link Chart#redraw}.\n */\nfunction setDataGrouping(dataGrouping, redraw) {\n    const axis = this;\n    let i;\n    redraw = DataGroupingAxisComposition_pick(redraw, true);\n    if (!dataGrouping) {\n        dataGrouping = {\n            forced: false,\n            units: null\n        };\n    }\n    // Axis is instantiated, update all series\n    if (this instanceof AxisConstructor) {\n        i = this.series.length;\n        while (i--) {\n            this.series[i].update({\n                dataGrouping: dataGrouping\n            }, false);\n        }\n        // Axis not yet instantiated, alter series options\n    }\n    else {\n        this.chart.options.series.forEach(function (seriesOptions) {\n            // Merging dataGrouping options with already defined options #16759\n            seriesOptions.dataGrouping = typeof dataGrouping === 'boolean' ?\n                dataGrouping :\n                DataGroupingAxisComposition_merge(dataGrouping, seriesOptions.dataGrouping);\n        });\n    }\n    // Clear ordinal slope, so we won't accidentally use the old one (#7827)\n    if (axis.ordinal) {\n        axis.ordinal.slope = void 0;\n    }\n    if (redraw) {\n        this.chart.redraw();\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst DataGroupingAxisComposition = {\n    compose: DataGroupingAxisComposition_compose\n};\n/* harmony default export */ const DataGrouping_DataGroupingAxisComposition = (DataGroupingAxisComposition);\n\n;// ./code/es-modules/Core/Axis/DateTimeAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { addEvent: DateTimeAxis_addEvent, getMagnitude, normalizeTickInterval, timeUnits: DateTimeAxis_timeUnits } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar DateTimeAxis;\n(function (DateTimeAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends axis class with date and time support.\n     * @private\n     */\n    function compose(AxisClass) {\n        if (!AxisClass.keepProps.includes('dateTime')) {\n            AxisClass.keepProps.push('dateTime');\n            const axisProto = AxisClass.prototype;\n            axisProto.getTimeTicks = getTimeTicks;\n            DateTimeAxis_addEvent(AxisClass, 'afterSetType', onAfterSetType);\n        }\n        return AxisClass;\n    }\n    DateTimeAxis.compose = compose;\n    /**\n     * Set the tick positions to a time unit that makes sense, for example\n     * on the first of each month or on every Monday. Return an array with\n     * the time positions. Used in datetime axes as well as for grouping\n     * data on a datetime axis.\n     *\n     * @private\n     * @function Highcharts.Axis#getTimeTicks\n     * @param {Highcharts.TimeNormalizeObject} normalizedInterval\n     * The interval in axis values (ms) and the count.\n     * @param {number} min\n     * The minimum in axis values.\n     * @param {number} max\n     * The maximum in axis values.\n     */\n    function getTimeTicks() {\n        return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n    }\n    /**\n     * @private\n     */\n    function onAfterSetType() {\n        if (this.type !== 'datetime') {\n            this.dateTime = void 0;\n            return;\n        }\n        if (!this.dateTime) {\n            this.dateTime = new Additions(this);\n        }\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    class Additions {\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        constructor(axis) {\n            this.axis = axis;\n        }\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Get a normalized tick interval for dates. Returns a configuration\n         * object with unit range (interval), count and name. Used to prepare\n         * data for `getTimeTicks`. Previously this logic was part of\n         * getTimeTicks, but as `getTimeTicks` now runs of segments in stock\n         * charts, the normalizing logic was extracted in order to prevent it\n         * for running over again for each segment having the same interval.\n         * #662, #697.\n         * @private\n         */\n        normalizeTimeTickInterval(tickInterval, unitsOption) {\n            const units = (unitsOption || [[\n                    // Unit name\n                    'millisecond',\n                    // Allowed multiples\n                    [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]\n                ], [\n                    'second',\n                    [1, 2, 5, 10, 15, 30]\n                ], [\n                    'minute',\n                    [1, 2, 5, 10, 15, 30]\n                ], [\n                    'hour',\n                    [1, 2, 3, 4, 6, 8, 12]\n                ], [\n                    'day',\n                    [1, 2]\n                ], [\n                    'week',\n                    [1, 2]\n                ], [\n                    'month',\n                    [1, 2, 3, 4, 6]\n                ], [\n                    'year',\n                    null\n                ]]);\n            let unit = units[units.length - 1], // Default unit is years\n            interval = DateTimeAxis_timeUnits[unit[0]], multiples = unit[1], i;\n            // Loop through the units to find the one that best fits the\n            // tickInterval\n            for (i = 0; i < units.length; i++) {\n                unit = units[i];\n                interval = DateTimeAxis_timeUnits[unit[0]];\n                multiples = unit[1];\n                if (units[i + 1]) {\n                    // `lessThan` is in the middle between the highest multiple\n                    // and the next unit.\n                    const lessThan = (interval *\n                        multiples[multiples.length - 1] +\n                        DateTimeAxis_timeUnits[units[i + 1][0]]) / 2;\n                    // Break and keep the current unit\n                    if (tickInterval <= lessThan) {\n                        break;\n                    }\n                }\n            }\n            // Prevent 2.5 years intervals, though 25, 250 etc. are allowed\n            if (interval === DateTimeAxis_timeUnits.year && tickInterval < 5 * interval) {\n                multiples = [1, 2, 5];\n            }\n            // Get the count\n            const count = normalizeTickInterval(tickInterval / interval, multiples, unit[0] === 'year' ? // #1913, #2360\n                Math.max(getMagnitude(tickInterval / interval), 1) :\n                1);\n            return {\n                unitRange: interval,\n                count: count,\n                unitName: unit[0]\n            };\n        }\n        /**\n         * Get the best date format for a specific X value based on the closest\n         * point range on the axis.\n         *\n         * @private\n         */\n        getXDateFormat(x, dateTimeLabelFormats) {\n            const { axis } = this, time = axis.chart.time;\n            return axis.closestPointRange ?\n                time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) ||\n                    // #2546, 2581\n                    time.resolveDTLFormat(dateTimeLabelFormats.year).main :\n                time.resolveDTLFormat(dateTimeLabelFormats.day).main;\n        }\n    }\n    DateTimeAxis.Additions = Additions;\n})(DateTimeAxis || (DateTimeAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_DateTimeAxis = (DateTimeAxis);\n\n;// ./code/es-modules/Extensions/DataGrouping/DataGroupingSeriesComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\n\n\nconst { series: { prototype: DataGroupingSeriesComposition_seriesProto } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { addEvent: DataGroupingSeriesComposition_addEvent, defined: DataGroupingSeriesComposition_defined, error: DataGroupingSeriesComposition_error, extend: DataGroupingSeriesComposition_extend, isNumber: DataGroupingSeriesComposition_isNumber, merge: DataGroupingSeriesComposition_merge, pick: DataGroupingSeriesComposition_pick, splat: DataGroupingSeriesComposition_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst baseGeneratePoints = DataGroupingSeriesComposition_seriesProto.generatePoints;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction adjustExtremes(xAxis, groupedXData) {\n    // Make sure the X axis extends to show the first group (#2533)\n    // But only for visible series (#5493, #6393)\n    if (DataGroupingSeriesComposition_defined(groupedXData[0]) &&\n        DataGroupingSeriesComposition_isNumber(xAxis.min) &&\n        DataGroupingSeriesComposition_isNumber(xAxis.dataMin) &&\n        groupedXData[0] < xAxis.min) {\n        if ((!DataGroupingSeriesComposition_defined(xAxis.options.min) &&\n            xAxis.min <= xAxis.dataMin) ||\n            xAxis.min === xAxis.dataMin) {\n            xAxis.min = Math.min(groupedXData[0], xAxis.min);\n        }\n        xAxis.dataMin = Math.min(groupedXData[0], xAxis.dataMin);\n    }\n    // When the last anchor set, change the extremes that\n    // the last point is visible (#12455).\n    if (DataGroupingSeriesComposition_defined(groupedXData[groupedXData.length - 1]) &&\n        DataGroupingSeriesComposition_isNumber(xAxis.max) &&\n        DataGroupingSeriesComposition_isNumber(xAxis.dataMax) &&\n        groupedXData[groupedXData.length - 1] > xAxis.max) {\n        if ((!DataGroupingSeriesComposition_defined(xAxis.options.max) &&\n            DataGroupingSeriesComposition_isNumber(xAxis.dataMax) &&\n            xAxis.max >= xAxis.dataMax) || xAxis.max === xAxis.dataMax) {\n            xAxis.max = Math.max(groupedXData[groupedXData.length - 1], xAxis.max);\n        }\n        xAxis.dataMax = Math.max(groupedXData[groupedXData.length - 1], xAxis.dataMax);\n    }\n}\n/**\n * @private\n */\nfunction anchorPoints(series, groupedXData, xMax) {\n    const options = series.options, dataGroupingOptions = options.dataGrouping, totalRange = (series.currentDataGrouping && series.currentDataGrouping.gapSize), xData = series.getColumn('x');\n    if (!(dataGroupingOptions &&\n        xData.length &&\n        totalRange &&\n        series.groupMap)) {\n        return;\n    }\n    const groupedDataLastIndex = groupedXData.length - 1, anchor = dataGroupingOptions.anchor, firstAnchor = dataGroupingOptions.firstAnchor, lastAnchor = dataGroupingOptions.lastAnchor;\n    let anchorIndexIterator = groupedXData.length - 1, anchorFirstIndex = 0;\n    // Change the first point position, but only when it is\n    // the first point in the data set not in the current zoom.\n    if (firstAnchor && xData[0] >= groupedXData[0]) {\n        anchorFirstIndex++;\n        const groupStart = series.groupMap[0].start, groupLength = series.groupMap[0].length;\n        let firstGroupEnd;\n        if (DataGroupingSeriesComposition_isNumber(groupStart) && DataGroupingSeriesComposition_isNumber(groupLength)) {\n            firstGroupEnd = groupStart + (groupLength - 1);\n        }\n        groupedXData[0] = {\n            start: groupedXData[0],\n            middle: groupedXData[0] + 0.5 * totalRange,\n            end: groupedXData[0] + totalRange,\n            firstPoint: xData[0],\n            lastPoint: firstGroupEnd && xData[firstGroupEnd]\n        }[firstAnchor];\n    }\n    // Change the last point position but only when it is\n    // the last point in the data set not in the current zoom,\n    // or if it is not the 1st point simultaneously.\n    if (groupedDataLastIndex > 0 &&\n        lastAnchor &&\n        totalRange &&\n        groupedXData[groupedDataLastIndex] >= xMax - totalRange) {\n        anchorIndexIterator--;\n        const lastGroupStart = series.groupMap[series.groupMap.length - 1].start;\n        groupedXData[groupedDataLastIndex] = {\n            start: groupedXData[groupedDataLastIndex],\n            middle: groupedXData[groupedDataLastIndex] + 0.5 * totalRange,\n            end: groupedXData[groupedDataLastIndex] + totalRange,\n            firstPoint: lastGroupStart && xData[lastGroupStart],\n            lastPoint: xData[xData.length - 1]\n        }[lastAnchor];\n    }\n    if (anchor && anchor !== 'start') {\n        const shiftInterval = (totalRange *\n            { middle: 0.5, end: 1 }[anchor]);\n        // Anchor the rest of the points apart from the ones, that were\n        // previously moved.\n        while (anchorIndexIterator >= anchorFirstIndex) {\n            groupedXData[anchorIndexIterator] += shiftInterval;\n            anchorIndexIterator--;\n        }\n    }\n}\n/**\n * For the processed data, calculate the grouped data if needed.\n *\n * @private\n * @function Highcharts.Series#applyGrouping\n */\nfunction DataGroupingSeriesComposition_applyGrouping(hasExtremesChanged) {\n    const series = this, chart = series.chart, options = series.options, dataGroupingOptions = options.dataGrouping, groupingEnabled = series.allowDG !== false && dataGroupingOptions &&\n        DataGroupingSeriesComposition_pick(dataGroupingOptions.enabled, chart.options.isStock), reserveSpace = series.reserveSpace(), lastDataGrouping = this.currentDataGrouping;\n    let currentDataGrouping, croppedData, revertRequireSorting = false;\n    // Data needs to be sorted for dataGrouping\n    if (groupingEnabled && !series.requireSorting) {\n        series.requireSorting = revertRequireSorting = true;\n    }\n    // Skip if skipDataGrouping method returns false or if grouping is disabled\n    // (in that order).\n    const skip = skipDataGrouping(series, hasExtremesChanged) === false || !groupingEnabled;\n    // Revert original requireSorting value if changed\n    if (revertRequireSorting) {\n        series.requireSorting = false;\n    }\n    if (skip) {\n        return;\n    }\n    series.destroyGroupedData();\n    const table = dataGroupingOptions.groupAll ?\n        series.dataTable :\n        series.dataTable.modified || series.dataTable, processedXData = series.getColumn('x', !dataGroupingOptions.groupAll), xData = processedXData, plotSizeX = chart.plotSizeX, xAxis = series.xAxis, extremes = xAxis.getExtremes(), ordinal = xAxis.options.ordinal, groupPixelWidth = series.groupPixelWidth;\n    let i, hasGroupedData;\n    // Execute grouping if the amount of points is greater than the limit\n    // defined in groupPixelWidth\n    if (groupPixelWidth &&\n        xData &&\n        table.rowCount &&\n        plotSizeX &&\n        DataGroupingSeriesComposition_isNumber(extremes.min)) {\n        hasGroupedData = true;\n        // Force recreation of point instances in series.translate, #5699\n        series.isDirty = true;\n        series.points = null; // #6709\n        const xMin = extremes.min, xMax = extremes.max, groupIntervalFactor = (ordinal &&\n            xAxis.ordinal &&\n            xAxis.ordinal.getGroupIntervalFactor(xMin, xMax, series)) || 1, interval = (groupPixelWidth * (xMax - xMin) / plotSizeX) *\n            groupIntervalFactor, groupPositions = xAxis.getTimeTicks(Axis_DateTimeAxis.Additions.prototype.normalizeTimeTickInterval(interval, dataGroupingOptions.units ||\n            DataGrouping_DataGroupingDefaults.units), \n        // Processed data may extend beyond axis (#4907)\n        Math.min(xMin, xData[0]), Math.max(xMax, xData[xData.length - 1]), xAxis.options.startOfWeek, processedXData, series.closestPointRange), groupedData = DataGroupingSeriesComposition_seriesProto.groupData.apply(series, [\n            table,\n            groupPositions,\n            dataGroupingOptions.approximation\n        ]);\n        let modified = groupedData.modified, groupedXData = modified.getColumn('x', true), gapSize = 0;\n        // The smoothed option is deprecated, instead, there is a fallback\n        // to the new anchoring mechanism. #12455.\n        if (dataGroupingOptions?.smoothed &&\n            modified.rowCount) {\n            dataGroupingOptions.firstAnchor = 'firstPoint';\n            dataGroupingOptions.anchor = 'middle';\n            dataGroupingOptions.lastAnchor = 'lastPoint';\n            DataGroupingSeriesComposition_error(32, false, chart, {\n                'dataGrouping.smoothed': 'use dataGrouping.anchor'\n            });\n        }\n        // Record what data grouping values were used\n        for (i = 1; i < groupPositions.length; i++) {\n            // The grouped gapSize needs to be the largest distance between\n            // the group to capture varying group sizes like months or DST\n            // crossing (#10000). Also check that the gap is not at the\n            // start of a segment.\n            if (!groupPositions.info.segmentStarts ||\n                groupPositions.info.segmentStarts.indexOf(i) === -1) {\n                gapSize = Math.max(groupPositions[i] - groupPositions[i - 1], gapSize);\n            }\n        }\n        currentDataGrouping = groupPositions.info;\n        currentDataGrouping.gapSize = gapSize;\n        series.closestPointRange = groupPositions.info.totalRange;\n        series.groupMap = groupedData.groupMap;\n        series.currentDataGrouping = currentDataGrouping;\n        anchorPoints(series, groupedXData || [], xMax);\n        if (reserveSpace && groupedXData) {\n            adjustExtremes(xAxis, groupedXData);\n        }\n        // We calculated all group positions but we should render only the ones\n        // within the visible range\n        if (dataGroupingOptions.groupAll) {\n            // Keep the reference to all grouped points for further calculation,\n            // used in Heikin-Ashi and hollow candlestick series.\n            series.allGroupedTable = modified;\n            croppedData = series.cropData(modified, xAxis.min || 0, xAxis.max || 0);\n            modified = croppedData.modified;\n            groupedXData = modified.getColumn('x');\n            series.cropStart = croppedData.start; // #15005\n        }\n        // Set the modified table\n        series.dataTable.modified = modified;\n    }\n    else {\n        series.groupMap = void 0;\n        series.currentDataGrouping = void 0;\n    }\n    series.hasGroupedData = hasGroupedData;\n    series.preventGraphAnimation =\n        (lastDataGrouping && lastDataGrouping.totalRange) !==\n            (currentDataGrouping && currentDataGrouping.totalRange);\n}\n/**\n * @private\n */\nfunction DataGroupingSeriesComposition_compose(SeriesClass) {\n    const seriesProto = SeriesClass.prototype;\n    if (!seriesProto.applyGrouping) {\n        const PointClass = SeriesClass.prototype.pointClass;\n        // Override point prototype to throw a warning when trying to update\n        // grouped points.\n        DataGroupingSeriesComposition_addEvent(PointClass, 'update', function () {\n            if (this.dataGroup) {\n                DataGroupingSeriesComposition_error(24, false, this.series.chart);\n                return false;\n            }\n        });\n        DataGroupingSeriesComposition_addEvent(SeriesClass, 'afterSetOptions', onAfterSetOptions);\n        DataGroupingSeriesComposition_addEvent(SeriesClass, 'destroy', destroyGroupedData);\n        DataGroupingSeriesComposition_extend(seriesProto, {\n            applyGrouping: DataGroupingSeriesComposition_applyGrouping,\n            destroyGroupedData,\n            generatePoints,\n            getDGApproximation,\n            groupData\n        });\n    }\n}\n/**\n * Destroy the grouped data points. #622, #740\n * @private\n */\nfunction destroyGroupedData() {\n    // Clear previous groups\n    if (this.groupedData) {\n        this.groupedData.forEach(function (point, i) {\n            if (point) {\n                this.groupedData[i] = point.destroy ?\n                    point.destroy() : null;\n            }\n        }, this);\n        // Clears all:\n        // - `this.groupedData`\n        // - `this.points`\n        // - `preserve` object in series.update()\n        this.groupedData.length = 0;\n        delete this.allGroupedTable;\n    }\n}\n/**\n * Override the generatePoints method by adding a reference to grouped data\n * @private\n */\nfunction generatePoints() {\n    baseGeneratePoints.apply(this);\n    // Record grouped data in order to let it be destroyed the next time\n    // processData runs\n    this.destroyGroupedData(); // #622\n    this.groupedData = this.hasGroupedData ? this.points : null;\n}\n/**\n * Set default approximations to the prototypes if present. Properties are\n * inherited down. Can be overridden for individual series types.\n * @private\n */\nfunction getDGApproximation() {\n    if (this.is('arearange')) {\n        return 'range';\n    }\n    if (this.is('ohlc')) {\n        return 'ohlc';\n    }\n    if (this.is('hlc')) {\n        return 'hlc';\n    }\n    if (\n    // #18974, default approximation for cumulative\n    // should be `sum` when `dataGrouping` is enabled\n    this.is('column') ||\n        this.options.cumulative) {\n        return 'sum';\n    }\n    return 'average';\n}\n/**\n * Highcharts Stock only. Takes parallel arrays of x and y data and groups the\n * data into intervals defined by groupPositions, a collection of starting x\n * values for each group.\n *\n * @product highstock\n *\n * @function Highcharts.Series#groupData\n * @param {Highcharts.DataTable} table\n *        The series data table.\n * @param {Array<number>} groupPositions\n *        Group positions.\n * @param {string|Function} [approximation]\n *        Approximation to use.\n * @return {Highcharts.DataGroupingResultObject}\n *         Mapped groups.\n */\nfunction groupData(table, groupPositions, approximation) {\n    const xData = table.getColumn('x', true) || [], yData = table.getColumn('y', true), series = this, data = series.data, dataOptions = series.options && series.options.data, groupedXData = [], modified = new Data_DataTableCore(), groupMap = [], dataLength = table.rowCount, \n    // When grouping the fake extended axis for panning, we don't need to\n    // consider y\n    handleYData = !!yData, values = [], pointArrayMap = series.pointArrayMap, pointArrayMapLength = pointArrayMap && pointArrayMap.length, extendedPointArrayMap = ['x'].concat(pointArrayMap || ['y']), \n    // Data columns to be applied to the modified data table at the end\n    valueColumns = (pointArrayMap || ['y']).map(() => []), groupAll = (this.options.dataGrouping &&\n        this.options.dataGrouping.groupAll);\n    let pointX, pointY, groupedY, pos = 0, start = 0;\n    const approximationFn = (typeof approximation === 'function' ?\n        approximation :\n        approximation && DataGrouping_ApproximationRegistry[approximation] ?\n            DataGrouping_ApproximationRegistry[approximation] :\n            DataGrouping_ApproximationRegistry[(series.getDGApproximation && series.getDGApproximation() ||\n                'average')]);\n    // Calculate values array size from pointArrayMap length\n    if (pointArrayMapLength) {\n        let len = pointArrayMap.length;\n        while (len--) {\n            values.push([]);\n        }\n    }\n    else {\n        values.push([]);\n    }\n    const valuesLen = pointArrayMapLength || 1;\n    for (let i = 0; i <= dataLength; i++) {\n        // Start with the first point within the X axis range (#2696)\n        if (xData[i] < groupPositions[0]) {\n            continue; // With next point\n        }\n        // When a new group is entered, summarize and initialize\n        // the previous group\n        while ((typeof groupPositions[pos + 1] !== 'undefined' &&\n            xData[i] >= groupPositions[pos + 1]) ||\n            i === dataLength) { // Get the last group\n            // get group x and y\n            pointX = groupPositions[pos];\n            series.dataGroupInfo = {\n                start: groupAll ? start : (series.cropStart + start),\n                length: values[0].length,\n                groupStart: pointX\n            };\n            groupedY = approximationFn.apply(series, values);\n            // By default, let options of the first grouped point be passed over\n            // to the grouped point. This allows preserving properties like\n            // `name` and `color` or custom properties. Implementers can\n            // override this from the approximation function, where they can\n            // write custom options to `this.dataGroupInfo.options`.\n            if (series.pointClass && !DataGroupingSeriesComposition_defined(series.dataGroupInfo.options)) {\n                // Convert numbers and arrays into objects\n                series.dataGroupInfo.options = DataGroupingSeriesComposition_merge(series.pointClass.prototype\n                    .optionsToObject.call({ series: series }, series.options.data[series.cropStart + start]));\n                // Make sure the raw data (x, y, open, high etc) is not copied\n                // over and overwriting approximated data.\n                extendedPointArrayMap.forEach(function (key) {\n                    delete series.dataGroupInfo.options[key];\n                });\n            }\n            // Push the grouped data\n            if (typeof groupedY !== 'undefined') {\n                groupedXData.push(pointX);\n                // Push the grouped values to the parallel columns\n                const groupedValuesArr = DataGroupingSeriesComposition_splat(groupedY);\n                for (let j = 0; j < groupedValuesArr.length; j++) {\n                    valueColumns[j].push(groupedValuesArr[j]);\n                }\n                groupMap.push(series.dataGroupInfo);\n            }\n            // Reset the aggregate arrays\n            start = i;\n            for (let j = 0; j < valuesLen; j++) {\n                values[j].length = 0; // Faster than values[j] = []\n                values[j].hasNulls = false;\n            }\n            // Advance on the group positions\n            pos += 1;\n            // Don't loop beyond the last group\n            if (i === dataLength) {\n                break;\n            }\n        }\n        // Break out\n        if (i === dataLength) {\n            break;\n        }\n        // For each raw data point, push it to an array that contains all values\n        // for this specific group\n        if (pointArrayMap) {\n            const index = groupAll ? i : series.cropStart + i, point = (data && data[index]) ||\n                series.pointClass.prototype.applyOptions.apply({\n                    series: series\n                }, [dataOptions[index]]);\n            let val;\n            for (let j = 0; j < pointArrayMapLength; j++) {\n                val = point[pointArrayMap[j]];\n                if (DataGroupingSeriesComposition_isNumber(val)) {\n                    values[j].push(val);\n                }\n                else if (val === null) {\n                    values[j].hasNulls = true;\n                }\n            }\n        }\n        else {\n            pointY = handleYData ? yData[i] : null;\n            if (DataGroupingSeriesComposition_isNumber(pointY)) {\n                values[0].push(pointY);\n            }\n            else if (pointY === null) {\n                values[0].hasNulls = true;\n            }\n        }\n    }\n    const columns = {\n        x: groupedXData\n    };\n    (pointArrayMap || ['y']).forEach((key, i) => {\n        columns[key] = valueColumns[i];\n    });\n    modified.setColumns(columns);\n    return {\n        groupMap,\n        modified\n    };\n}\n/**\n * Handle default options for data grouping. This must be set at runtime because\n * some series types are defined after this.\n * @private\n */\nfunction onAfterSetOptions(e) {\n    const options = e.options, type = this.type, plotOptions = this.chart.options.plotOptions, \n    // External series, for example technical indicators should also inherit\n    // commonOptions which are not available outside this module\n    baseOptions = (this.useCommonDataGrouping &&\n        DataGrouping_DataGroupingDefaults.common), seriesSpecific = DataGrouping_DataGroupingDefaults.seriesSpecific;\n    let defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions.plotOptions[type].dataGrouping;\n    if (plotOptions && (seriesSpecific[type] || baseOptions)) { // #1284\n        const rangeSelector = this.chart.rangeSelector;\n        if (!defaultOptions) {\n            defaultOptions = DataGroupingSeriesComposition_merge(DataGrouping_DataGroupingDefaults.common, seriesSpecific[type]);\n        }\n        options.dataGrouping = DataGroupingSeriesComposition_merge(baseOptions, defaultOptions, plotOptions.series && plotOptions.series.dataGrouping, // #1228\n        // Set by the StockChart constructor:\n        plotOptions[type].dataGrouping, this.userOptions.dataGrouping, !options.isInternal &&\n            rangeSelector &&\n            DataGroupingSeriesComposition_isNumber(rangeSelector.selected) &&\n            rangeSelector.buttonOptions[rangeSelector.selected].dataGrouping);\n    }\n}\n/**\n * @private\n */\nfunction skipDataGrouping(series, force) {\n    return !(series.isCartesian &&\n        !series.isDirty &&\n        !series.xAxis.isDirty &&\n        !series.yAxis.isDirty &&\n        !force);\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst DataGroupingSeriesComposition = {\n    compose: DataGroupingSeriesComposition_compose,\n    groupData\n};\n/* harmony default export */ const DataGrouping_DataGroupingSeriesComposition = (DataGroupingSeriesComposition);\n\n;// ./code/es-modules/Extensions/DataGrouping/DataGrouping.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { format: DataGrouping_format } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { composed: DataGrouping_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: DataGrouping_addEvent, extend: DataGrouping_extend, isNumber: DataGrouping_isNumber, pick: DataGrouping_pick, pushUnique: DataGrouping_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction DataGrouping_compose(AxisClass, SeriesClass, TooltipClass) {\n    DataGrouping_DataGroupingAxisComposition.compose(AxisClass);\n    DataGrouping_DataGroupingSeriesComposition.compose(SeriesClass);\n    if (TooltipClass &&\n        DataGrouping_pushUnique(DataGrouping_composed, 'DataGrouping')) {\n        DataGrouping_addEvent(TooltipClass, 'headerFormatter', onTooltipHeaderFormatter);\n    }\n}\n/**\n * Extend the original method, make the tooltip's header reflect the grouped\n * range.\n * @private\n */\nfunction onTooltipHeaderFormatter(e) {\n    const chart = this.chart, time = chart.time, point = e.point, series = point.series, options = series.options, tooltipOptions = series.tooltipOptions, dataGroupingOptions = options.dataGrouping, xAxis = series.xAxis;\n    let xDateFormat = tooltipOptions.xDateFormat || '', xDateFormatEnd, currentDataGrouping, dateTimeLabelFormats, labelFormats, formattedKey, formatString = tooltipOptions[e.isFooter ? 'footerFormat' : 'headerFormat'];\n    // Apply only to grouped series\n    if (xAxis &&\n        xAxis.options.type === 'datetime' &&\n        dataGroupingOptions &&\n        DataGrouping_isNumber(point.key)) {\n        // Set variables\n        currentDataGrouping = series.currentDataGrouping;\n        dateTimeLabelFormats = dataGroupingOptions.dateTimeLabelFormats ||\n            // Fallback to commonOptions (#9693)\n            DataGrouping_DataGroupingDefaults.common.dateTimeLabelFormats;\n        // If we have grouped data, use the grouping information to get the\n        // right format\n        if (currentDataGrouping) {\n            labelFormats = dateTimeLabelFormats[currentDataGrouping.unitName];\n            if (currentDataGrouping.count === 1) {\n                xDateFormat = labelFormats[0];\n            }\n            else {\n                xDateFormat = labelFormats[1];\n                xDateFormatEnd = labelFormats[2];\n            }\n            // If not grouped, and we don't have set the xDateFormat option, get the\n            // best fit, so if the least distance between points is one minute, show\n            // it, but if the least distance is one day, skip hours and minutes etc.\n        }\n        else if (!xDateFormat && dateTimeLabelFormats && xAxis.dateTime) {\n            xDateFormat = xAxis.dateTime.getXDateFormat(point.x, tooltipOptions.dateTimeLabelFormats);\n        }\n        const groupStart = DataGrouping_pick(series.groupMap?.[point.index].groupStart, point.key), groupEnd = groupStart + (currentDataGrouping?.totalRange || 0) - 1;\n        formattedKey = time.dateFormat(xDateFormat, groupStart);\n        if (xDateFormatEnd) {\n            formattedKey += time.dateFormat(xDateFormatEnd, groupEnd);\n        }\n        // Replace default header style with class name\n        if (series.chart.styledMode) {\n            formatString = this.styledModeFormat(formatString);\n        }\n        // Return the replaced format\n        e.text = DataGrouping_format(formatString, {\n            point: DataGrouping_extend(point, { key: formattedKey }),\n            series: series\n        }, chart);\n        e.preventDefault();\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst DataGroupingComposition = {\n    compose: DataGrouping_compose,\n    groupData: DataGrouping_DataGroupingSeriesComposition.groupData\n};\n/* harmony default export */ const DataGrouping = (DataGroupingComposition);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @typedef {\"average\"|\"averages\"|\"open\"|\"high\"|\"low\"|\"close\"|\"sum\"} Highcharts.DataGroupingApproximationValue\n */\n/**\n * The position of the point inside the group.\n *\n * @typedef    {\"start\"|\"middle\"|\"end\"} Highcharts.DataGroupingAnchor\n */\n/**\n * The position of the first or last point in the series inside the group.\n *\n * @typedef    {\"start\"|\"middle\"|\"end\"|\"firstPoint\"|\"lastPoint\"} Highcharts.DataGroupingAnchorExtremes\n */\n/**\n * Highcharts Stock only.\n *\n * @product highstock\n * @interface Highcharts.DataGroupingInfoObject\n */ /**\n* @name Highcharts.DataGroupingInfoObject#length\n* @type {number}\n*/ /**\n* @name Highcharts.DataGroupingInfoObject#options\n* @type {Highcharts.SeriesOptionsType|undefined}\n*/ /**\n* @name Highcharts.DataGroupingInfoObject#start\n* @type {number}\n*/\n/**\n * Highcharts Stock only.\n *\n * @product highstock\n * @interface Highcharts.DataGroupingResultObject\n */ /**\n* @name Highcharts.DataGroupingResultObject#groupedXData\n* @type {Array<number>}\n*/ /**\n* @name Highcharts.DataGroupingResultObject#groupedYData\n* @type {Array<(number|null|undefined)>|Array<Array<(number|null|undefined)>>}\n*/ /**\n* @name Highcharts.DataGroupingResultObject#groupMap\n* @type {Array<DataGroupingInfoObject>}\n*/\n/**\n * Highcharts Stock only. If a point object is created by data\n * grouping, it doesn't reflect actual points in the raw\n * data. In this case, the `dataGroup` property holds\n * information that points back to the raw data.\n *\n * - `dataGroup.start` is the index of the first raw data\n *   point in the group.\n *\n * - `dataGroup.length` is the amount of points in the\n *   group.\n *\n * @sample stock/members/point-datagroup\n *         Click to inspect raw data points\n *\n * @product highstock\n *\n * @name Highcharts.Point#dataGroup\n * @type {Highcharts.DataGroupingInfoObject|undefined}\n */\n(''); // Detach doclets above\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Data grouping is the concept of sampling the data values into larger\n * blocks in order to ease readability and increase performance of the\n * JavaScript charts. Highcharts Stock by default applies data grouping when\n * the points become closer than a certain pixel value, determined by\n * the `groupPixelWidth` option.\n *\n * If data grouping is applied, the grouping information of grouped\n * points can be read from the [Point.dataGroup](\n * /class-reference/Highcharts.Point#dataGroup). If point options other than\n * the data itself are set, for example `name` or `color` or custom properties,\n * the grouping logic doesn't know how to group it. In this case the options of\n * the first point instance are copied over to the group point. This can be\n * altered through a custom `approximation` callback function.\n *\n * @declare   Highcharts.DataGroupingOptionsObject\n * @product   highstock\n * @requires  modules/stock\n * @apioption plotOptions.series.dataGrouping\n */\n/**\n * Specifies how the points should be located on the X axis inside the group.\n * Points that are extremes can be set separately. Available options:\n *\n * - `start` places the point at the beginning of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)\n *\n * - `middle` places the point in the middle of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)\n *\n * - `end` places the point at the end of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-anchor\n *         Changing the point x-coordinate inside the group.\n *\n * @see [dataGrouping.firstAnchor](#plotOptions.series.dataGrouping.firstAnchor)\n * @see [dataGrouping.lastAnchor](#plotOptions.series.dataGrouping.lastAnchor)\n *\n * @type       {Highcharts.DataGroupingAnchor}\n * @since 9.1.0\n * @default    start\n * @apioption  plotOptions.series.dataGrouping.anchor\n */\n/**\n * The method of approximation inside a group. When for example 30 days\n * are grouped into one month, this determines what value should represent\n * the group. Possible values are \"average\", \"averages\", \"open\", \"high\",\n * \"low\", \"close\" and \"sum\". For OHLC and candlestick series the approximation\n * is \"ohlc\" by default, which finds the open, high, low and close values\n * within all the grouped data. For ranges, the approximation is \"range\",\n * which finds the low and high values. For multi-dimensional data,\n * like ranges and OHLC, \"averages\" will compute the average for each\n * dimension.\n *\n * Custom aggregate methods can be added by assigning a callback function\n * as the approximation. This function takes a numeric array as the\n * argument and should return a single numeric value or `null`. Note\n * that the numeric array will never contain null values, only true\n * numbers. Instead, if null values are present in the raw data, the\n * numeric array will have an `.hasNulls` property set to `true`. For\n * single-value data sets the data is available in the first argument\n * of the callback function. For OHLC data sets, all the open values\n * are in the first argument, all high values in the second etc.\n *\n * Since v4.2.7, grouping meta data is available in the approximation\n * callback from `this.dataGroupInfo`. It can be used to extract information\n * from the raw data.\n *\n * Defaults to `average` for line-type series, `sum` for columns, `range`\n * for range series, `hlc` for HLC, and `ohlc` for OHLC and candlestick.\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-approximation\n *         Approximation callback with custom data\n * @sample {highstock} stock/plotoptions/series-datagrouping-simple-approximation\n *         Simple approximation demo\n *\n * @type       {Highcharts.DataGroupingApproximationValue|Function}\n * @apioption  plotOptions.series.dataGrouping.approximation\n */\n/**\n * Datetime formats for the header of the tooltip in a stock chart.\n * The format can vary within a chart depending on the currently selected\n * time range and the current data grouping.\n *\n * The default formats are:\n * ```js\n * {\n *     millisecond: [\n *         '%A, %e %b, %H:%M:%S.%L', '%A, %e %b, %H:%M:%S.%L', '-%H:%M:%S.%L'\n *     ],\n *     second: ['%A, %e %b, %H:%M:%S', '%A, %e %b, %H:%M:%S', '-%H:%M:%S'],\n *     minute: ['%A, %e %b, %H:%M', '%A, %e %b, %H:%M', '-%H:%M'],\n *     hour: ['%A, %e %b, %H:%M', '%A, %e %b, %H:%M', '-%H:%M'],\n *     day: ['%A, %e %b %Y', '%A, %e %b', '-%A, %e %b %Y'],\n *     week: ['Week from %A, %e %b %Y', '%A, %e %b', '-%A, %e %b %Y'],\n *     month: ['%B %Y', '%B', '-%B %Y'],\n *     year: ['%Y', '%Y', '-%Y']\n * }\n * ```\n *\n * For each of these array definitions, the first item is the format\n * used when the active time span is one unit. For instance, if the\n * current data applies to one week, the first item of the week array\n * is used. The second and third items are used when the active time\n * span is more than two units. For instance, if the current data applies\n * to two weeks, the second and third item of the week array are used,\n *  and applied to the start and end date of the time span.\n *\n * @type      {Object}\n * @apioption plotOptions.series.dataGrouping.dateTimeLabelFormats\n */\n/**\n * Enable or disable data grouping.\n *\n * @type      {boolean}\n * @default   true\n * @apioption plotOptions.series.dataGrouping.enabled\n */\n/**\n * Specifies how the first grouped point is positioned on the xAxis.\n * If firstAnchor and/or lastAnchor are defined, then those options take\n * precedence over anchor for the first and/or last grouped points.\n * Available options:\n *\n * -`start` places the point at the beginning of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)\n *\n * -`middle` places the point in the middle of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)\n *\n * -`end` places the point at the end of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)\n *\n * -`firstPoint` the first point in the group\n * (e.g. points at 00:13, 00:35, 00:59 -> 00:13)\n *\n * -`lastPoint` the last point in the group\n * (e.g. points at 00:13, 00:35, 00:59 -> 00:59)\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-first-anchor\n *         Applying first and last anchor.\n *\n * @see [dataGrouping.anchor](#plotOptions.series.dataGrouping.anchor)\n *\n * @type       {Highcharts.DataGroupingAnchorExtremes}\n * @since 9.1.0\n * @default    start\n * @apioption  plotOptions.series.dataGrouping.firstAnchor\n */\n/**\n * When data grouping is forced, it runs no matter how small the intervals\n * are. This can be handy for example when the sum should be calculated\n * for values appearing at random times within each hour.\n *\n * @type      {boolean}\n * @default   false\n * @apioption plotOptions.series.dataGrouping.forced\n */\n/**\n * The approximate pixel width of each group. If for example a series\n * with 30 points is displayed over a 600 pixel wide plot area, no grouping\n * is performed. If however the series contains so many points that\n * the spacing is less than the groupPixelWidth, Highcharts will try\n * to group it into appropriate groups so that each is more or less\n * two pixels wide. If multiple series with different group pixel widths\n * are drawn on the same x axis, all series will take the greatest width.\n * For example, line series have 2px default group width, while column\n * series have 10px. If combined, both the line and the column will\n * have 10px by default.\n *\n * @type      {number}\n * @default   2\n * @apioption plotOptions.series.dataGrouping.groupPixelWidth\n */\n/**\n * By default only points within the visible range are grouped. Enabling this\n * option will force data grouping to calculate all grouped points for a given\n * dataset. That option prevents for example a column series from calculating\n * a grouped point partially. The effect is similar to\n * [Series.getExtremesFromAll](#plotOptions.series.getExtremesFromAll) but does\n * not affect yAxis extremes.\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-groupall/\n *         Two series with the same data but different groupAll setting\n *\n * @type      {boolean}\n * @default   false\n * @since     6.1.0\n * @apioption plotOptions.series.dataGrouping.groupAll\n */\n/**\n * Specifies how the last grouped point is positioned on the xAxis.\n * If firstAnchor and/or lastAnchor are defined, then those options take\n * precedence over anchor for the first and/or last grouped points.\n * Available options:\n *\n * -`start` places the point at the beginning of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)\n *\n * -`middle` places the point in the middle of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)\n *\n * -`end` places the point at the end of the group\n * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)\n *\n * -`firstPoint` the first point in the group\n * (e.g. points at 00:13, 00:35, 00:59 -> 00:13)\n *\n * -`lastPoint` the last point in the group\n * (e.g. points at 00:13, 00:35, 00:59 -> 00:59)\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-first-anchor\n *         Applying first and last anchor.\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-last-anchor\n *         Applying the last anchor in the chart with live data.\n *\n * @see [dataGrouping.anchor](#plotOptions.series.dataGrouping.anchor)\n *\n * @type       {Highcharts.DataGroupingAnchorExtremes}\n * @since 9.1.0\n * @default    start\n * @apioption  plotOptions.series.dataGrouping.lastAnchor\n */\n/**\n * Normally, a group is indexed by the start of that group, so for example\n * when 30 daily values are grouped into one month, that month's x value\n * will be the 1st of the month. This apparently shifts the data to\n * the left. When the smoothed option is true, this is compensated for.\n * The data is shifted to the middle of the group, and min and max\n * values are preserved. Internally, this is used in the Navigator series.\n *\n * @type      {boolean}\n * @default   false\n * @deprecated\n * @apioption plotOptions.series.dataGrouping.smoothed\n */\n/**\n * An array determining what time intervals the data is allowed to be\n * grouped to. Each array item is an array where the first value is\n * the time unit and the second value another array of allowed multiples.\n *\n * Defaults to:\n * ```js\n * units: [[\n *     'millisecond', // unit name\n *     [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n * ], [\n *     'second',\n *     [1, 2, 5, 10, 15, 30]\n * ], [\n *     'minute',\n *     [1, 2, 5, 10, 15, 30]\n * ], [\n *     'hour',\n *     [1, 2, 3, 4, 6, 8, 12]\n * ], [\n *     'day',\n *     [1]\n * ], [\n *     'week',\n *     [1]\n * ], [\n *     'month',\n *     [1, 3, 6]\n * ], [\n *     'year',\n *     null\n * ]]\n * ```\n *\n * @type      {Array<Array<string,(Array<number>|null)>>}\n * @apioption plotOptions.series.dataGrouping.units\n */\n/**\n * The approximate pixel width of each group. If for example a series\n * with 30 points is displayed over a 600 pixel wide plot area, no grouping\n * is performed. If however the series contains so many points that\n * the spacing is less than the groupPixelWidth, Highcharts will try\n * to group it into appropriate groups so that each is more or less\n * two pixels wide. Defaults to `10`.\n *\n * @sample {highstock} stock/plotoptions/series-datagrouping-grouppixelwidth/\n *         Two series with the same data density but different groupPixelWidth\n *\n * @type      {number}\n * @default   10\n * @apioption plotOptions.column.dataGrouping.groupPixelWidth\n */\n''; // Required by JSDoc parsing\n\n;// ./code/es-modules/masters/modules/datagrouping.src.js\n/**\n * @license Highstock JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/datagrouping\n * @requires highcharts\n *\n * Data grouping module\n *\n * (c) 2010-2024 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n\n\n\n\nconst datagrouping_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\ndatagrouping_src_G.dataGrouping = datagrouping_src_G.dataGrouping || {};\ndatagrouping_src_G.dataGrouping.approximationDefaults = (datagrouping_src_G.dataGrouping.approximationDefaults ||\n    DataGrouping_ApproximationDefaults);\ndatagrouping_src_G.dataGrouping.approximations = (datagrouping_src_G.dataGrouping.approximations ||\n    DataGrouping_ApproximationRegistry);\nDataGrouping.compose(datagrouping_src_G.Axis, datagrouping_src_G.Series, datagrouping_src_G.Tooltip);\n/* harmony default export */ const datagrouping_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js\n/* *\n *\n *  (c) 2009-2024 Highsoft, Black Label\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defined: NavigationBindingsUtilities_defined, isNumber: NavigationBindingsUtilities_isNumber, pick: NavigationBindingsUtilities_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Define types for editable fields per annotation. There is no need to define\n * numbers, because they won't change their type to string.\n * @private\n */\nconst annotationsFieldsTypes = {\n    backgroundColor: 'string',\n    borderColor: 'string',\n    borderRadius: 'string',\n    color: 'string',\n    fill: 'string',\n    fontSize: 'string',\n    labels: 'string',\n    name: 'string',\n    stroke: 'string',\n    title: 'string'\n};\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Returns the first xAxis or yAxis that was clicked with its value.\n *\n * @private\n *\n * @param {Array<Highcharts.PointerAxisCoordinateObject>} coords\n *        All the chart's x or y axes with a current pointer's axis value.\n *\n * @return {Highcharts.PointerAxisCoordinateObject}\n *         Object with a first found axis and its value that pointer\n *         is currently pointing.\n */\nfunction getAssignedAxis(coords) {\n    return coords.filter((coord) => {\n        const extremes = coord.axis.getExtremes(), axisMin = extremes.min, axisMax = extremes.max, \n        // Correct axis edges when axis has series\n        // with pointRange (like column)\n        minPointOffset = NavigationBindingsUtilities_pick(coord.axis.minPointOffset, 0);\n        return NavigationBindingsUtilities_isNumber(axisMin) && NavigationBindingsUtilities_isNumber(axisMax) &&\n            coord.value >= (axisMin - minPointOffset) &&\n            coord.value <= (axisMax + minPointOffset) &&\n            // Don't count navigator axis\n            !coord.axis.options.isInternal;\n    })[0]; // If the axes overlap, return the first axis that was found.\n}\n/**\n * Get field type according to value\n *\n * @private\n *\n * @param {'boolean'|'number'|'string'} value\n * Atomic type (one of: string, number, boolean)\n *\n * @return {'checkbox'|'number'|'text'}\n * Field type (one of: text, number, checkbox)\n */\nfunction getFieldType(key, value) {\n    const predefinedType = annotationsFieldsTypes[key];\n    let fieldType = typeof value;\n    if (NavigationBindingsUtilities_defined(predefinedType)) {\n        fieldType = predefinedType;\n    }\n    return {\n        'string': 'text',\n        'number': 'number',\n        'boolean': 'checkbox'\n    }[fieldType];\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigationBindingUtilities = {\n    annotationsFieldsTypes,\n    getAssignedAxis,\n    getFieldType\n};\n/* harmony default export */ const NavigationBindingsUtilities = (NavigationBindingUtilities);\n\n;// ./code/es-modules/Extensions/MouseWheelZoom/MouseWheelZoom.js\n/* *\n *\n *  (c) 2023 Torstein Honsi, Askel Eirik Johansson\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { addEvent: MouseWheelZoom_addEvent, isObject, pick: MouseWheelZoom_pick, defined: MouseWheelZoom_defined, merge: MouseWheelZoom_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { getAssignedAxis: MouseWheelZoom_getAssignedAxis } = NavigationBindingsUtilities;\n/* *\n *\n *  Constants\n *\n * */\nconst composedClasses = [], MouseWheelZoom_defaultOptions = {\n    enabled: true,\n    sensitivity: 1.1\n};\nlet wheelTimer;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nconst optionsToObject = (options) => {\n    if (!isObject(options)) {\n        options = {\n            enabled: options ?? true\n        };\n    }\n    return MouseWheelZoom_merge(MouseWheelZoom_defaultOptions, options);\n};\n/**\n * @private\n */\nconst zoomBy = function (chart, howMuch, xAxis, yAxis, mouseX, mouseY, options) {\n    const type = MouseWheelZoom_pick(options.type, chart.zooming.type, '');\n    let axes = [];\n    if (type === 'x') {\n        axes = xAxis;\n    }\n    else if (type === 'y') {\n        axes = yAxis;\n    }\n    else if (type === 'xy') {\n        axes = chart.axes;\n    }\n    const hasZoomed = chart.transform({\n        axes,\n        // Create imaginary reference and target rectangles around the mouse\n        // point that scales up or down with `howMuch`;\n        to: {\n            x: mouseX - 5,\n            y: mouseY - 5,\n            // Must use 10 to get passed the limit for too small reference.\n            // Below this, the transform will default to a pan.\n            width: 10,\n            height: 10\n        },\n        from: {\n            x: mouseX - 5 * howMuch,\n            y: mouseY - 5 * howMuch,\n            width: 10 * howMuch,\n            height: 10 * howMuch\n        },\n        trigger: 'mousewheel'\n    });\n    if (hasZoomed) {\n        if (MouseWheelZoom_defined(wheelTimer)) {\n            clearTimeout(wheelTimer);\n        }\n        // Some time after the last mousewheel event, run drop. In case any of\n        // the affected axes had `startOnTick` or `endOnTick`, they will be\n        // re-adjusted now.\n        wheelTimer = setTimeout(() => {\n            chart.pointer?.drop();\n        }, 400);\n    }\n    return hasZoomed;\n};\n/**\n * @private\n */\nfunction onAfterGetContainer() {\n    const wheelZoomOptions = optionsToObject(this.zooming.mouseWheel);\n    if (wheelZoomOptions.enabled) {\n        MouseWheelZoom_addEvent(this.container, 'wheel', (e) => {\n            e = this.pointer?.normalize(e) || e;\n            const { pointer } = this, allowZoom = pointer && !pointer.inClass(e.target, 'highcharts-no-mousewheel');\n            // Firefox uses e.detail, WebKit and IE uses deltaX, deltaY, deltaZ.\n            if (this.isInsidePlot(e.chartX - this.plotLeft, e.chartY - this.plotTop) && allowZoom) {\n                const wheelSensitivity = wheelZoomOptions.sensitivity || 1.1, delta = e.detail || ((e.deltaY || 0) / 120), xAxisCoords = MouseWheelZoom_getAssignedAxis(pointer.getCoordinates(e).xAxis), yAxisCoords = MouseWheelZoom_getAssignedAxis(pointer.getCoordinates(e).yAxis);\n                const hasZoomed = zoomBy(this, Math.pow(wheelSensitivity, delta), xAxisCoords ? [xAxisCoords.axis] : this.xAxis, yAxisCoords ? [yAxisCoords.axis] : this.yAxis, e.chartX, e.chartY, wheelZoomOptions);\n                // Prevent page scroll\n                if (hasZoomed) {\n                    e.preventDefault?.();\n                }\n            }\n        });\n    }\n}\n/**\n * @private\n */\nfunction MouseWheelZoom_compose(ChartClass) {\n    if (composedClasses.indexOf(ChartClass) === -1) {\n        composedClasses.push(ChartClass);\n        MouseWheelZoom_addEvent(ChartClass, 'afterGetContainer', onAfterGetContainer);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst MouseWheelZoomComposition = {\n    compose: MouseWheelZoom_compose\n};\n/* harmony default export */ const MouseWheelZoom = (MouseWheelZoomComposition);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * The mouse wheel zoom is a feature included in Highcharts Stock, but is also\n * available for Highcharts Core as a module. Zooming with the mouse wheel is\n * enabled by default in Highcharts Stock. In Highcharts Core it is enabled if\n * [chart.zooming.type](chart.zooming.type) is set. It can be disabled by\n * setting this option to `false`.\n *\n * @type      {boolean|object}\n * @since 11.1.0\n * @requires  modules/mouse-wheel-zoom\n * @sample    {highcharts} highcharts/mouse-wheel-zoom/enabled\n *            Enable or disable\n * @sample    {highstock} stock/mouse-wheel-zoom/enabled\n *            Enable or disable\n * @apioption chart.zooming.mouseWheel\n */\n/**\n * Zooming with the mouse wheel can be disabled by setting this option to\n * `false`.\n *\n * @type      {boolean}\n * @default   true\n * @since 11.1.0\n * @requires  modules/mouse-wheel-zoom\n * @apioption chart.zooming.mouseWheel.enabled\n */\n/**\n * Adjust the sensitivity of the zoom. Sensitivity of mouse wheel or trackpad\n * scrolling. `1` is no sensitivity, while with `2`, one mouse wheel delta will\n * zoom in `50%`.\n *\n * @type      {number}\n * @default   1.1\n * @since 11.1.0\n * @requires  modules/mouse-wheel-zoom\n * @sample    {highcharts} highcharts/mouse-wheel-zoom/sensitivity\n *            Change mouse wheel zoom sensitivity\n * @sample    {highstock} stock/mouse-wheel-zoom/sensitivity\n *            Change mouse wheel zoom sensitivity\n * @apioption chart.zooming.mouseWheel.sensitivity\n */\n/**\n * Decides in what dimensions the user can zoom scrolling the wheel. Can be one\n * of `x`, `y` or `xy`. In Highcharts Core, if not specified here, it will\n * inherit the type from [chart.zooming.type](chart.zooming.type). In Highcharts\n * Stock, it defaults to `x`.\n *\n * Note that particularly with mouse wheel in the y direction, the zoom is\n * affected by the default [yAxis.startOnTick](#yAxis.startOnTick) and\n * [endOnTick]((#yAxis.endOnTick)) settings. In order to respect these settings,\n * the zoom level will adjust after the user has stopped zooming. To prevent\n * this, consider setting `startOnTick` and `endOnTick` to `false`.\n *\n * @type      {string}\n * @default   {highcharts} undefined\n * @default   {highstock} x\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @since 11.1.0\n * @requires  modules/mouse-wheel-zoom\n * @apioption chart.zooming.mouseWheel.type\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es-modules/masters/modules/mouse-wheel-zoom.src.js\n/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/mouse-wheel-zoom\n * @requires highcharts\n *\n * Mousewheel zoom module\n *\n * (c) 2023 Askel Eirik Johansson\n *\n * License: www.highcharts.com/license\n */\n\n\n\nconst mouse_wheel_zoom_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nmouse_wheel_zoom_src_G.MouseWheelZoom = mouse_wheel_zoom_src_G.MouseWheelZoom || MouseWheelZoom;\nmouse_wheel_zoom_src_G.MouseWheelZoom.compose(mouse_wheel_zoom_src_G.Chart);\n/* harmony default export */ const mouse_wheel_zoom_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es-modules/masters/modules/stock.src.js\n/**\n * @license Highstock JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/stock\n * @requires highcharts\n *\n * Highcharts Stock as a plugin for Highcharts\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst stock_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n// Classes\nstock_src_G.Navigator = stock_src_G.Navigator || Navigator_Navigator;\nstock_src_G.OrdinalAxis = stock_src_G.OrdinalAxis || Axis_OrdinalAxis;\nstock_src_G.RangeSelector = stock_src_G.RangeSelector || RangeSelector_RangeSelector;\nstock_src_G.Scrollbar = stock_src_G.Scrollbar || Scrollbar_Scrollbar;\n// Functions\nstock_src_G.stockChart = stock_src_G.stockChart || Chart_StockChart.stockChart;\nstock_src_G.StockChart = stock_src_G.StockChart || stock_src_G.stockChart;\nstock_src_G.extend(stock_src_G.StockChart, Chart_StockChart);\n// Compositions\nSeries_DataModifyComposition.compose(stock_src_G.Series, stock_src_G.Axis, stock_src_G.Point);\nFlags_FlagsSeries.compose(stock_src_G.Renderer);\nOHLC_OHLCSeries.compose(stock_src_G.Series);\nstock_src_G.Navigator.compose(stock_src_G.Chart, stock_src_G.Axis, stock_src_G.Series);\nstock_src_G.OrdinalAxis.compose(stock_src_G.Axis, stock_src_G.Series, stock_src_G.Chart);\nstock_src_G.RangeSelector.compose(stock_src_G.Axis, stock_src_G.Chart);\nstock_src_G.Scrollbar.compose(stock_src_G.Axis);\nstock_src_G.StockChart.compose(stock_src_G.Chart, stock_src_G.Axis, stock_src_G.Series, stock_src_G.SVGRenderer);\n/* harmony default export */ const stock_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","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__532__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__820__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__512__","__WEBPACK_EXTERNAL_MODULE__608__","__WEBPACK_EXTERNAL_MODULE__540__","__WEBPACK_EXTERNAL_MODULE__28__","__WEBPACK_EXTERNAL_MODULE__960__","__WEBPACK_EXTERNAL_MODULE__984__","__WEBPACK_EXTERNAL_MODULE__448__","__WEBPACK_EXTERNAL_MODULE__184__","NavigatorConstructor","RangeSelectorConstructor","AxisConstructor","wheelTimer","DataModifyComposition","ScrollbarAxis","OrdinalAxis","FlagsSymbols","OnSeriesComposition","BrokenAxis","DateTimeAxis","__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__","stock_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default","tooltipFormatter","pointTooltipFormatter","addEvent","arrayMax","arrayMin","correctFloat","defined","isArray","isNumber","isString","pick","setModifier","mode","modeState","redraw","isXAxis","series","forEach","setCompare","setCumulative","chart","pointFormat","point","numberFormatter","replace","value","tooltipOptions","changeDecimals","change","cumulativeSum","apply","afterInit","dataModify","compare","options","cumulative","Additions","initCompare","initCumulative","afterGetExtremes","e","dataExtremes","activeYData","extremes","modifyValue","dataMin","dataMax","length","getCumulativeExtremes","seriesSetCompare","userOptions","update","points","afterProcessData","compareColumn","getColumn","pointArrayMap","pointValKey","xAxis","processedXData","dataTable","rowCount","compareStart","i","compareValue","min","axisSetCompare","seriesSetCumulative","axisSetCumulative","compose","SeriesClass","AxisClass","PointClass","axisProto","pointProto","seriesProto","constructor","cumulativeDataMin","Infinity","cumulativeDataMax","reduce","prev","cur","sum","Math","max","index","compareBase","prevPoint","cumulativeStart","withinRange","x","Series_DataModifyComposition","isTouchDevice","ChartNavigatorComposition_addEvent","merge","ChartNavigatorComposition_pick","composedMembers","onChartAfterAddSeries","navigator","setBaseSeries","onChartAfterSetChartSize","legendOptions","yAxis","legend","scrollbarHeight","scrollButtonSize","inverted","left","opposite","chartWidth","height","spacing","top","plotTop","plotLeft","navigatorOptions","chartHeight","scrollbar","margin","rangeSelector","extraBottomMargin","getHeight","verticalAlign","layout","enabled","floating","legendHeight","titleOffset","setAxisSize","onChartAfterUpdate","event","scroller","animation","onChartBeforeRender","onChartBeforeShowResetZoom","chartOptions","zooming","type","pinchType","onChartCallback","getExtremes","render","onChartUpdate","scrollbarOptions","Navigator_ChartNavigatorComposition","ChartClass","NavigatorClass","pushUnique","chartProto","callbacks","push","NavigatorAxisComposition_isTouchDevice","NavigatorAxisComposition_addEvent","NavigatorAxisComposition_correctFloat","NavigatorAxisComposition_defined","NavigatorAxisComposition_isNumber","NavigatorAxisComposition_pick","onAxisInit","axis","navigatorAxis","NavigatorAxisAdditions","onAxisSetExtremes","zoomed","zoomType","trigger","range","previousZoom","preventDefault","keepProps","includes","destroy","toFixedRange","pxMin","pxMax","fixedMin","fixedMax","halfPointRange","pointRange","newMin","translate","horiz","newMax","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","parse","color","seriesTypes","NavigatorDefaults","maskInside","handles","width","borderRadius","symbols","lineWidth","backgroundColor","borderColor","maskFill","setOpacity","outlineColor","outlineWidth","areaspline","fillOpacity","sonification","dataGrouping","approximation","groupPixelWidth","firstAnchor","anchor","lastAnchor","units","dataLabels","zIndex","id","className","lineColor","marker","threshold","tickLength","gridLineColor","gridLineWidth","tickPixelInterval","labels","align","style","fontSize","opacity","textOutline","y","crosshair","startOnTick","endOnTick","minPadding","maxPadding","title","text","tickWidth","Symbols_defined","Symbols_isNumber","Symbols_pick","SVG_Symbols","rect","w","h","r","roundedRect","relativeLength","Navigator_NavigatorSymbols","_x","_y","halfWidth","markerPosition","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default","StockUtilities_defined","Utilities_StockUtilities","setFixedRange","fixedRange","setOptions","composed","getRendererType","NavigatorComposition_setFixedRange","NavigatorComposition_addEvent","extend","onSeriesAfterUpdate","isInternal","Navigator_NavigatorComposition","NavigatorAxisComposition","ScrollbarAxis_composed","ScrollbarAxis_addEvent","ScrollbarAxis_defined","ScrollbarAxis_pick","ScrollbarAxis_pushUnique","Scrollbar","axisMin","axisMax","scrollMin","scrollMax","onAxisAfterGetOffset","scrollbarsOffsets","axisOffset","size","onAxisAfterInit","vertical","renderer","to","from","unitedMin","unitedMax","reversed","shouldUpdateExtremes","DOMType","animate","setExtremes","setRange","onAxisAfterRender","offsetsIndex","offset","axisTitleMargin","axisMargin","position","xPosition","isNaN","interval","ScrollbarClass","Axis_ScrollbarAxis","Scrollbar_ScrollbarDefaults","barBorderRadius","buttonBorderRadius","buttonsEnabled","liveRedraw","minWidth","step","barBackgroundColor","barBorderWidth","barBorderColor","buttonArrowColor","buttonBackgroundColor","buttonBorderColor","buttonBorderWidth","rifleColor","trackBackgroundColor","trackBorderColor","trackBorderRadius","trackBorderWidth","defaultOptions","Scrollbar_addEvent","Scrollbar_correctFloat","crisp","Scrollbar_defined","destroyObjectProperties","fireEvent","Scrollbar_merge","Scrollbar_pick","removeEvent","swapXY","path","seg","temp","len","_events","chartX","chartY","scrollbarButtons","scrollbarLeft","scrollbarStrokeWidth","scrollbarTop","init","addEvents","buttonsOrder","buttons","bar","scrollbarGroup","element","track","mouseDownHandler","bind","mouseMoveHandler","mouseUpHandler","buttonToMinClick","buttonToMaxClick","trackClick","ownerDocument","args","updatePosition","DOMEvent","cursorToScrollbarPosition","normalizedEvent","minWidthDifference","calculatedWidth","xOffset","barWidth","yOffset","removeEvents","drawScrollbarButton","group","g","add","addClass","styledMode","attr","stroke","fill","strokeWidth","arrow","pointer","normalize","mousePosition","initPositions","grabbedCenter","direction","touches","chartPosition","hasDragged","method","rendered","show","translateX","translateY","hide","scrollbarRifles","fromPX","newSize","fullWidth","toPX","ceil","newPos","floor","newRiflesPos","showFull","eventType","svg","boosted","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default","Navigator_defaultOptions","Navigator_isTouchDevice","Navigator_addEvent","clamp","Navigator_correctFloat","Navigator_defined","Navigator_destroyObjectProperties","erase","Navigator_extend","find","Navigator_fireEvent","Navigator_isArray","Navigator_isNumber","Navigator_merge","Navigator_pick","Navigator_removeEvent","splat","numExt","extreme","numbers","filter","Navigator","isDirty","drawHandle","verb","round","parseInt","drawOutline","zoomedMin","zoomedMax","outline","halfOutline","outlineCorrection","navigatorSize","navigatorTop","lineTop","lineBtm","verticalMin","drawMasks","navigatorHeight","shades","shade","renderElements","mouseCursor","cursor","navigatorGroup","visibility","hasMask","css","handlesOptions","symbolName","symbolUrl","isImg","symbolFn","symbol","addMouseEvents","rotation","rotationOriginX","rotationOriginY","invertedUpdate","setOpposite","navigatorEnabled","adaptToUpdatedData","baseSeries","updatedDataHandler","eventsToUnbind","offsets","getXAxisOffsets","scrollbarXAxis","fake","minRange","maxRange","navigatorWidth","plotWidth","plotHeight","toPixels","abs","toValue","currentRange","grabbedLeft","grabbedRight","fixedWidth","container","onMouseMove","onMouseUp","getPartsEvents","renderTo","concat","modifyNavigatorAxisExtremes","eventName","events","name","navigatorItem","shadesMousedown","navigatorPosition","ext","dragOffset","reversedExtremes","getUnionExtremes","eventArguments","handlesMousedown","baseXAxis","reverse","otherHandlePos","fixedExtreme","pageX","setTimeout","unionExtremes","triggerOp","keys","unbind","removeBaseSeriesEvents","modifyBaseAxisExtremes","scrollbarEnabled","xAxisIndex","yAxisIndex","baseXaxis","isDirtyBox","breaks","ordinal","overscroll","keepOrdinalPadding","zoomEnabled","alignTicks","data","updateNavigatorSeries","unbindRedraw","scrollTrackWidth","valueRange","addBaseSeriesEvents","addChartEvents","Boolean","returnFalseOnNoBaseSeries","ret","baseAxis","time","navAxis","navAxisOptions","baseAxisOptions","baseSeriesOptions","s","showInNavigator","navSeriesMixin","enableMouseTracking","linkedTo","padXAxis","showInLegend","stacking","states","inactive","navigatorSeries","navSeries","base","indexOf","baseOptions","mergedNavSeriesOptions","chartNavigatorSeriesOptions","baseNavigatorOptions","linkedNavSeries","userNavOptions","visible","plotOptions","navigatorSeriesData","hasNavigatorData","slice","initSeries","setSortedData","userSeriesOptions","colors","setVisible","remove","getBaseSeriesMin","currentSeriesMin","baseExtremes","baseMin","baseMax","baseDataMin","baseDataMax","stickToMin","stickToMax","convertOverscroll","hasSetExtremes","eventArgs","xData","Number","MAX_VALUE","userMin","userMax","shouldStickToMax","shouldStickToMin","pointStart","setData","xDataMin","marginName","axes","coll","DataTableCore_fireEvent","DataTableCore_isArray","objectEach","uniqueKey","Data_DataTableCore","autoId","columns","modified","versionTag","column","columnName","applyRowCount","asReference","getColumns","columnNames","getRow","rowIndex","map","setColumn","eventDetail","setColumns","silent","setRow","row","insert","indexRowCount","cellValue","addColumns","Array","splice","OrdinalAxis_addEvent","OrdinalAxis_correctFloat","OrdinalAxis_defined","error","OrdinalAxis_isNumber","OrdinalAxis_pick","timeUnits","OrdinalAxis_isString","getTimeTicks","normalizedInterval","startOfWeek","positions","closestDistance","findHigherRanks","higherRanks","tickPixelIntervalOption","segmentStarts","end","segmentPositions","hasCrossedHigherRank","info","outsideMax","start","groupPositions","lastGroupPosition","arguments","posLength","shift","unitRange","hour","dateFormat","translatedArr","distances","itemToRemove","translated","lastTranslated","medianDistance","distance","sort","b","index2val","ordinalPositions","lin2val","val","localMin","old","localA","transA","getExtendedPositions","pixelVal","minPixelPadding","getIndexOfPoint","mantissa","leftNeighbour","rightNeighbour","getIndexInArray","findIndexOf","percent","onAxisFoundExtremes","originalOrdinalRange","onAxisAfterSetScale","isOrdinal","onAxisInitialAxisTranslation","beforeSetTickPositions","tickInterval","postProcessTickInterval","onChartPan","originalEvent","panning","runBase","trimmedRange","mouseDownX","hoverPoints","closestPointRange","overscrollPointsRange","movedUnits","translationSlope","slope","extendedOrdinalPositions","extendedAxis","val2lin","setState","test","onSeriesUpdatedData","toIndex","ordinalIndex","ordinalLength","originalPositionsReference","diff","approximateIndexOffset","ordinal2lin","hasBreaks","brokenAxis","uniqueOrdinalPositions","dist","minIndex","maxIndex","useOrdinal","adjustOrdinalExtremesPoints","isBoosted","distanceBetweenPoint","reserveSpace","takeOrdinalPosition","unshift","pop","forceOrdinal","getOverscrollPositions","groupIntervalFactor","sortedArray","indirectSearch","middle","withOverscroll","k","grouping","currentDataGrouping","count","unitName","fakeAxis","fakeSeries","applyGrouping","getGroupPixelWidth","getGroupIntervalFactor","destroyGroupedData","noop","getProcessedData","forced","processData","hasExtremesChanged","basePointRange","xMin","xMax","median","ordinalArray","minX","indexOfMin","extraRange","ordinalSlope","calculateOverscroll","overscrollPercentage","overscrollValue","pixelToPercent","limitedOverscrollValue","Axis_OrdinalAxis","RangeSelector_RangeSelectorDefaults","lang","rangeSelectorZoom","rangeSelectorFrom","rangeSelectorTo","allButtonsEnabled","buttonSpacing","dropdown","buttonTheme","padding","inputBoxBorderColor","inputBoxHeight","inputBoxWidth","inputDateFormat","inputDateParser","inputEditDateFormat","inputEnabled","inputPosition","inputSpacing","selected","buttonPosition","inputStyle","labelStyle","RangeSelectorComposition_defaultOptions","RangeSelectorComposition_composed","RangeSelectorComposition_addEvent","RangeSelectorComposition_defined","RangeSelectorComposition_extend","RangeSelectorComposition_isNumber","RangeSelectorComposition_merge","RangeSelectorComposition_pick","RangeSelectorComposition_pushUnique","chartDestroyEvents","axisMinFromRange","rangeOptions","getTrueRange","original","toParts","makeTime","MIN_VALUE","_offsetMin","updateRangeSelectorButtons","redrawElements","createRangeSelector","RangeSelectorComposition_onChartBeforeRender","deferredYTDClick","clickButton","extraTopMargin","redrawRangeSelector","alignTo","display","spacingBox","placed","onChartDestroy","iEnd","onChartGetMargins","rangeSelectorHeight","marginBottom","RangeSelectorComposition_onChartUpdate","optionsRangeSelector","extraBottomMarginWas","extraTopMarginWas","RangeSelector_RangeSelectorComposition","RangeSelectorClass","minFromRange","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default","RangeSelector_defaultOptions","RangeSelector_addEvent","createElement","RangeSelector_css","RangeSelector_defined","RangeSelector_destroyObjectProperties","diffObjects","discardElement","RangeSelector_extend","RangeSelector_fireEvent","RangeSelector_isNumber","RangeSelector_isString","RangeSelector_merge","RangeSelector_objectEach","RangeSelector_pick","RangeSelector_splat","preferredInputType","format","hasTimeKey","char","RegExp","fractionalSecondDigits","date","some","dateStyle","day","month","year","timeStyle","minute","second","RangeSelector","buttonOptions","defaultButtons","initialButtonGroupWidth","maxButtonWidth","buttonWidth","button","bBox","getBBox","baseXAxisOptions","_range","rangeMin","ctx","ytdExtremes","addOffsetMin","setSelected","forcedDataGrouping","setDataGrouping","frozenStates","preserveDataGrouping","hasData","getYTDExtremes","_offsetMax","selectedIndex","rangeSelectorButton","axisRangeUpdateEvent","selectedOption","blurInputs","minInput","maxInput","blur","computeButtonRange","createElements","updateButtonStates","dropdownLabel","actualRange","hasNoData","hasVisibleSeries","ytdMin","ytdMax","buttonStates","selectedExists","isSelectedTooGreat","offsetRange","isSelected","isTooGreatRange","isTooSmallRange","isYTDButNotSelected","isSameRange","prevOrdinalPosition","nextOrdinalPosition","disable","select","state","disabled","bbox","fixedTimes","millisecond","week","offsetMin","offsetMax","getInputValue","input","defaultInputDateParser","timezone","setInputValue","inputTime","dateBox","minDateBox","maxDateBox","setAttribute","hcTimeAttr","getAttribute","updatedTime","previousTime","inputTypeFormats","setInputExtremes","showInput","inputGroup","isTextInput","border","offsetWidth","offsetHeight","hideInput","inputDate","useUTC","drawInput","div","chartStyle","isMin","updateExtremes","chartAxis","currentExtreme","label","on","focus","boxShadow","textAlign","fontFamily","onfocus","onblur","doc","activeElement","keyDown","onchange","onkeypress","keyCode","onkeydown","onkeyup","getPosition","buttonTop","inputTop","inputsZIndex","renderButtons","parentNode","insertBefore","createInputs","minElems","minLabel","maxElems","maxLabel","zoomText","alignElements","_a","buttonGroup","userButtonTheme","paddingLeft","paddingRight","hover","mouseOver","isMS","mouseOut","textContent","textStr","createButtons","createButton","callDefaultEvent","buttonEvents","click","isActive","navButtonOptions","exporting","navigation","getXOffsetForExportButton","rightAligned","titleCollision","positionButtons","xOffsetForExportButton","alignButtonGroup","hasLoaded","handleCollision","alignTranslateY","alignAttr","groupHeight","marginTop","isCollapsed","newButtonsOptions","btnLength","btn","dropdownTranslateX","hasVisibleDropdown","buttonLeft","moveInputsDown","collapseButtons","expandButtons","showDropdown","hideDropdown","rangeSelectorGroup","yPosition","buttonPositionY","inputPositionY","minPosition","subtitle","rSelector","HTMLElement","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default","getOptions","StockChart_setFixedRange","StockChart_addEvent","StockChart_clamp","StockChart_crisp","StockChart_defined","StockChart_extend","StockChart_find","StockChart_isNumber","StockChart_isString","StockChart_merge","StockChart_pick","StockChart_splat","getDefaultAxisOptions","showLastLabel","categories","getForcedAxisOptions","Navigator_NavigatorDefaults","axisOptions","StockChart","callback","xAxisOptions","yAxisOptions","mouseWheel","tooltip","split","crosshairs","isStock","createAxis","onAxisAfterDrawCrosshair","cross","log","logarithmic","tickInside","tickPosition","snap","crossLabel","posx","posy","formatOption","formatFormat","limit","lin2log","labelAlign","shape","colorIndex","labelGroup","borderWidth","fontWeight","plotX","plotY","formatter","dateTime","isInside","isPointInside","crossBox","right","anchorX","anchorY","onAxisAfterHideCrosshair","onAxisAutoLabelAlign","panes","_labelPanes","labelOptions","side","onAxisDestroy","onAxisGetPlotLinePath","isLinked","linkedParent","axisLeft","axisTop","result","translatedValue","force","x1","y1","x2","y2","uniqueAxes","transVal","acrossPanes","A","getAxis","otherColl","opt","axis2","unique","pos","skip","transB","crispPolyLine","onSeriesSetOptions","overrides","is","shadow","radius","seriesForceCropping","dataGroupingOptions","allowDG","svgRendererCrispPolyLine","SVGRendererClass","forceCropping","stockChart","c","Chart_StockChart","pointClass","ColumnPoint","ColumnSeries","HLCSeries_crisp","HLCSeries_extend","HLCSeries_merge","HLCSeries","extendStem","halfStrokeWidth","getPointPath","graphic","crispX","shapeArgs","yBottom","plotHigh","close","plotClose","drawSinglePoint","pointAttribs","getClassName","drawPoints","attribs","toYData","high","low","names","charAt","toUpperCase","tooltipPos","stickyTracking","directTouch","keysAffectYAxis","pointAttrToOptions","registerSeriesType","hlc","OHLCPoint_HLCSeries","OHLCPoint","open","resolveUpColor","upColor","resolveColor","getZone","zone","applyOptions","OHLCSeries_composed","OHLCSeries_HLCSeries","OHLCSeries_addEvent","OHLCSeries_crisp","OHLCSeries_extend","OHLCSeries_merge","OHLCSeries_pushUnique","onSeriesAfterSetOptions","useOhlcData","onSeriesInit","eventOptions","OHLCSeries","_args","plotOpen","CandlestickSeries_ColumnSeries","ohlc","CandlestickSeries_OHLCSeries","CandlestickSeries_crisp","CandlestickSeries_merge","CandlestickSeries","isUp","upLineColor","stateOptions","reversedYAxis","topBox","bottomBox","hasTopWhisker","hasBottomWhisker","isNew","FlagsPoint_ColumnPoint","FlagsPoint_isNumber","Flags_FlagsPoint","ttBelow","isValid","hasNewShapeType","symbolKey","modifiedMembers","flag","circle","createPinSymbol","labelX","startSeg","endSeg","labelY","RendererClass","Flags_FlagsSymbols","highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_","highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default","OnSeriesComposition_composed","columnProto","OnSeriesComposition_defined","OnSeriesComposition_pushUnique","stableSort","getPlotBox","onSeries","optionsOnSeries","onData","lastPoint","onKey","leftPoint","lastX","rightPoint","distanceRatio","pointXOffset","barW","totalRange","substr","p0","p3","p1","controlPoints","p2","calculateCoord","t","pow","tMin","tMax","tMid","xMid","stackIndex","Series_OnSeriesComposition","distribute","Series","FlagsSeries_ColumnSeries","FlagsSeries_addEvent","FlagsSeries_defined","FlagsSeries_extend","FlagsSeries_isNumber","FlagsSeries_merge","FlagsSeries_objectEach","wrap","FlagsSeries","setClip","outsideRight","centered","optionsY","boxesMap","boxes","stackDistance","useHTML","markerGroup","allowOverlapX","target","maxDistance","box","proceed","drawTracker","unbindMouseOver","otherPoint","raised","fillColor","clip","sharedClipKey","sharedClips","forceCrop","invertible","noSharedTooltip","sorted","trackerGroups","buildKDTree","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default","BrokenAxis_addEvent","BrokenAxis_find","BrokenAxis_fireEvent","BrokenAxis_isArray","BrokenAxis_isNumber","BrokenAxis_pick","setBreaks","onAxisAfterSetOptions","onAxisAfterSetTickPositions","tickPositions","newPositions","isInAnyBreak","onSeriesAfterGeneratePoints","connectNulls","isPointInBreak","onSeriesAfterRender","drawBreaks","seriesDrawBreaks","breakArray","breaksOutOfRange","brk","isOut","otherBreak","seriesGappedPath","groupingSize","gapSize","current","next","gapUnit","xRange","isNull","stack","stacks","stackKey","stackLabels","total","getGraphPath","gappedPath","isInBreak","repeat","inclusive","lin2Val","nval","val2Lin","findBreakAt","testKeep","inbrk","keep","showPoints","forceRedraw","axisBreak","setAxisTranslation","unitLength","breakArrayT","pointRangePadding","inBrk","move","breakSize","staticScale","minPointOffset","Axis_BrokenAxis","G","Axis","DataGrouping_ApproximationRegistry","ApproximationDefaults_arrayMax","ApproximationDefaults_arrayMin","ApproximationDefaults_correctFloat","ApproximationDefaults_extend","ApproximationDefaults_isNumber","average","arr","hasNulls","ApproximationDefaults","averages","DataGrouping_DataGroupingDefaults","common","dateTimeLabelFormats","seriesSpecific","line","spline","area","arearange","columnrange","candlestick","heikinashi","DataGroupingAxisComposition_addEvent","DataGroupingAxisComposition_extend","DataGroupingAxisComposition_merge","DataGroupingAxisComposition_pick","hasProcessed","doGrouping","dataLength","dgOptions","plotSizeX","onAfterSetScale","seriesOptions","DataGrouping_DataGroupingAxisComposition","DateTimeAxis_addEvent","getMagnitude","normalizeTickInterval","DateTimeAxis_timeUnits","onAfterSetType","normalizeTimeTickInterval","unitsOption","unit","multiples","getXDateFormat","getDateFormat","resolveDTLFormat","main","Axis_DateTimeAxis","DataGroupingSeriesComposition_seriesProto","DataGroupingSeriesComposition_addEvent","DataGroupingSeriesComposition_defined","DataGroupingSeriesComposition_error","DataGroupingSeriesComposition_extend","DataGroupingSeriesComposition_isNumber","DataGroupingSeriesComposition_merge","DataGroupingSeriesComposition_pick","DataGroupingSeriesComposition_splat","baseGeneratePoints","generatePoints","DataGroupingSeriesComposition_applyGrouping","groupedXData","hasGroupedData","groupingEnabled","lastDataGrouping","croppedData","revertRequireSorting","requireSorting","skipDataGrouping","isCartesian","table","groupAll","groupedData","groupData","smoothed","groupMap","anchorPoints","groupedDataLastIndex","anchorIndexIterator","anchorFirstIndex","firstGroupEnd","groupStart","groupLength","firstPoint","lastGroupStart","shiftInterval","allGroupedTable","cropData","cropStart","preventGraphAnimation","getDGApproximation","yData","dataOptions","handleYData","values","pointArrayMapLength","extendedPointArrayMap","valueColumns","pointX","pointY","groupedY","approximationFn","valuesLen","dataGroupInfo","optionsToObject","groupedValuesArr","j","onAfterSetOptions","useCommonDataGrouping","DataGrouping_DataGroupingSeriesComposition","dataGroup","DataGrouping_format","DataGrouping_composed","DataGrouping_addEvent","DataGrouping_extend","DataGrouping_isNumber","DataGrouping_pick","DataGrouping_pushUnique","onTooltipHeaderFormatter","xDateFormat","xDateFormatEnd","labelFormats","formattedKey","formatString","isFooter","groupEnd","styledModeFormat","DataGroupingComposition","TooltipClass","datagrouping_src_G","approximationDefaults","approximations","DataGrouping","Tooltip","NavigationBindingsUtilities_defined","NavigationBindingsUtilities_isNumber","NavigationBindingsUtilities_pick","annotationsFieldsTypes","MouseWheelZoom_addEvent","isObject","MouseWheelZoom_pick","MouseWheelZoom_defined","MouseWheelZoom_merge","getAssignedAxis","MouseWheelZoom_getAssignedAxis","coords","coord","getFieldType","predefinedType","fieldType","composedClasses","MouseWheelZoom_defaultOptions","sensitivity","zoomBy","howMuch","mouseX","mouseY","hasZoomed","transform","clearTimeout","drop","onAfterGetContainer","wheelZoomOptions","allowZoom","inClass","isInsidePlot","wheelSensitivity","delta","detail","deltaY","xAxisCoords","getCoordinates","yAxisCoords","mouse_wheel_zoom_src_G","MouseWheelZoom","Chart","stock_src_G","Point","Flags_FlagsSeries","Renderer","OHLC_OHLCSeries","SVGRenderer"],"mappings":"CASA,AATA;;;;;;;;CAQC,EACA,SAA0CA,CAAI,CAAEC,CAAO,EACpD,AAAmB,UAAnB,OAAOC,SAAwB,AAAkB,UAAlB,OAAOC,OACxCA,OAAOD,OAAO,CAAGD,EAAQD,EAAK,WAAc,CAAEA,EAAK,WAAc,CAAC,IAAO,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,MAAS,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,cAAiB,CAAEA,EAAK,WAAc,CAAC,gBAAmB,CAAEA,EAAK,WAAc,CAAC,WAAc,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,MAAS,CAAC,KAAQ,CAAC,MAAS,CAAEA,EAAK,WAAc,CAAC,SAAY,EACzc,AAAkB,YAAlB,OAAOI,QAAyBA,OAAOC,GAAG,CACjDD,OAAO,2BAA4B,CAAC,wBAAwB,CAAE,SAAUE,CAAI,EAAG,OAAOL,EAAQK,EAAKA,EAAK,IAAO,CAACA,EAAK,KAAQ,CAACA,EAAK,MAAS,CAACA,EAAK,KAAQ,CAACA,EAAK,cAAiB,CAACA,EAAK,gBAAmB,CAACA,EAAK,WAAc,CAACA,EAAK,UAAa,CAACA,EAAK,KAAQ,CAACA,EAAK,UAAa,CAACA,EAAK,MAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAACA,EAAK,SAAY,CAAE,GACnU,AAAmB,UAAnB,OAAOJ,QACdA,OAAO,CAAC,2BAA2B,CAAGD,EAAQD,EAAK,WAAc,CAAEA,EAAK,WAAc,CAAC,IAAO,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,MAAS,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,cAAiB,CAAEA,EAAK,WAAc,CAAC,gBAAmB,CAAEA,EAAK,WAAc,CAAC,WAAc,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,KAAQ,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,MAAS,CAAC,KAAQ,CAAC,MAAS,CAAEA,EAAK,WAAc,CAAC,SAAY,EAEreA,EAAK,UAAa,CAAGC,EAAQD,EAAK,UAAa,CAAEA,EAAK,UAAa,CAAC,IAAO,CAAEA,EAAK,UAAa,CAAC,KAAQ,CAAEA,EAAK,UAAa,CAAC,MAAS,CAAEA,EAAK,UAAa,CAAC,KAAQ,CAAEA,EAAK,UAAa,CAAC,cAAiB,CAAEA,EAAK,UAAa,CAAC,gBAAmB,CAAEA,EAAK,UAAa,CAAC,WAAc,CAAEA,EAAK,UAAa,CAAC,UAAa,CAAEA,EAAK,UAAa,CAAC,KAAQ,CAAEA,EAAK,UAAa,CAAC,UAAa,CAAEA,EAAK,UAAa,CAAC,MAAS,CAAC,KAAQ,CAAC,MAAS,CAAEA,EAAK,UAAa,CAAC,SAAY,CACzc,EAAG,AAAkB,aAAlB,OAAOO,OAAyB,IAAI,CAAGA,OAAQ,CAACC,EAAkCC,EAAkCC,EAAkCC,EAAkCC,EAAkCC,EAAkCC,EAAkCC,EAAkCC,EAAiCC,EAAkCC,EAAkCC,EAAkCC,IAC1b,AAAC,CAAA,KACP,iBA0uBNC,EA6lLAC,EAy7KAC,EA86CAC,EA7qaM,IA+LNC,EA2xDAC,EAwzFAC,EAm6KAC,EA+HAC,EA6gBAC,EAymCAC,EA16XUC,EAAuB,CAE/B,IACC,AAAC7B,IAERA,EAAOD,OAAO,CAAGO,CAEX,EAEA,IACC,AAACN,IAERA,EAAOD,OAAO,CAAGe,CAEX,EAEA,IACC,AAACd,IAERA,EAAOD,OAAO,CAAGU,CAEX,EAEA,IACC,AAACT,IAERA,EAAOD,OAAO,CAAGQ,CAEX,EAEA,IACC,AAACP,IAERA,EAAOD,OAAO,CAAGY,CAEX,EAEA,GACC,AAACX,IAERA,EAAOD,OAAO,CAAGc,CAEX,EAEA,IACC,AAACb,IAERA,EAAOD,OAAO,CAAGa,CAEX,EAEA,IACC,AAACZ,IAERA,EAAOD,OAAO,CAAGiB,CAEX,EAEA,IACC,AAAChB,IAERA,EAAOD,OAAO,CAAGS,CAEX,EAEA,IACC,AAACR,IAERA,EAAOD,OAAO,CAAGW,CAEX,EAEA,IACC,AAACV,IAERA,EAAOD,OAAO,CAAGkB,CAEX,EAEA,IACC,AAACjB,IAERA,EAAOD,OAAO,CAAGgB,CAEX,EAEA,IACC,AAACf,IAERA,EAAOD,OAAO,CAAGM,CAEX,CAEI,EAGIyB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,CAAQ,EAEpC,IAAIC,EAAeH,CAAwB,CAACE,EAAS,CACrD,GAAIC,AAAiBC,KAAAA,IAAjBD,EACH,OAAOA,EAAalC,OAAO,CAG5B,IAAIC,EAAS8B,CAAwB,CAACE,EAAS,CAAG,CAGjDjC,QAAS,CAAC,CACX,EAMA,OAHA8B,CAAmB,CAACG,EAAS,CAAChC,EAAQA,EAAOD,OAAO,CAAEgC,GAG/C/B,EAAOD,OAAO,AACtB,CAMCgC,EAAoBI,CAAC,CAAG,AAACnC,IACxB,IAAIoC,EAASpC,GAAUA,EAAOqC,UAAU,CACvC,IAAOrC,EAAO,OAAU,CACxB,IAAOA,EAER,OADA+B,EAAoBO,CAAC,CAACF,EAAQ,CAAEG,EAAGH,CAAO,GACnCA,CACR,EAMAL,EAAoBO,CAAC,CAAG,CAACvC,EAASyC,KACjC,IAAI,IAAIC,KAAOD,EACXT,EAAoBW,CAAC,CAACF,EAAYC,IAAQ,CAACV,EAAoBW,CAAC,CAAC3C,EAAS0C,IAC5EE,OAAOC,cAAc,CAAC7C,EAAS0C,EAAK,CAAEI,WAAY,CAAA,EAAMC,IAAKN,CAAU,CAACC,EAAI,AAAC,EAGhF,EAKAV,EAAoBW,CAAC,CAAG,CAACK,EAAKC,IAAUL,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,EAAKC,GAI7F,IAAII,EAAsB,CAAC,EAG3BrB,EAAoBO,CAAC,CAACc,EAAqB,CACzC,QAAW,IAAqBC,EAClC,GAGA,IAAIC,EAAuEvB,EAAoB,KAC3FwB,EAA2FxB,EAAoBI,CAAC,CAACmB,GAEjHE,EAA2FzB,EAAoB,KAC/G0B,EAA+G1B,EAAoBI,CAAC,CAACqB,GAErIE,EAA+F3B,EAAoB,KACnH4B,EAAmH5B,EAAoBI,CAAC,CAACuB,GAEzIE,EAAmG7B,EAAoB,KACvH8B,EAAuH9B,EAAoBI,CAAC,CAACyB,GAcjJ,GAAM,CAAEE,iBAAkBC,CAAqB,CAAE,CAAG,AAACJ,IAAuGV,SAAS,CAG/J,CAAEe,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAEC,aAAAA,CAAY,CAAEC,QAAAA,CAAO,CAAEC,QAAAA,CAAO,CAAEC,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAEC,KAAAA,CAAI,CAAE,CAAIjB,KAOpG,AAAC,SAAUjC,CAAqB,EAoD5B,SAASmD,EAAYC,CAAI,CAAEC,CAAS,CAAEC,CAAM,EACpC,CAAC,IAAI,CAACC,OAAO,GACb,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,SAAUD,CAAM,EAC5BJ,AAAS,YAATA,GACA,AAAqB,WAArB,OAAOC,EACPG,EAAOE,UAAU,CAACL,EAAW,CAAA,GAEf,eAATD,GACJH,EAASI,IACVG,EAAOG,aAAa,CAACN,EAAW,CAAA,EAExC,GACIH,EAAKI,EAAQ,CAAA,IACb,IAAI,CAACM,KAAK,CAACN,MAAM,GAG7B,CAUA,SAASd,EAAiBqB,CAAW,EACjC,IAAMC,EAAQ,IAAI,CAAE,CAAEC,gBAAAA,CAAe,CAAE,CAAGD,EAAMN,MAAM,CAACI,KAAK,CAAEI,EAAU,SAAUC,CAAK,EACnFJ,EAAcA,EAAYG,OAAO,CAAC,UAAYC,EAAQ,IAAK,AAACH,CAAAA,CAAK,CAACG,EAAM,CAAG,GAAKA,AAAU,WAAVA,EAAqB,IAAM,EAAC,EACxGF,EAAgBD,CAAK,CAACG,EAAM,CAAEf,EAAKY,EAAMN,MAAM,CAACU,cAAc,CAACC,cAAc,CAAE,IACvF,EAOA,OANIrB,EAAQgB,EAAMM,MAAM,GACpBJ,EAAQ,UAERlB,EAAQgB,EAAMO,aAAa,GAC3BL,EAAQ,iBAELvB,EAAsB6B,KAAK,CAAC,IAAI,CAAE,CAACT,EAAY,CAC1D,CAUA,SAASU,QAEDC,EADJ,IAAMC,EAAU,IAAI,CAACC,OAAO,CAACD,OAAO,CAEhCA,CAAAA,AAAY,YAAZA,GACAA,AAAY,UAAZA,GACA,IAAI,CAACC,OAAO,CAACC,UAAU,AAAD,IACtBH,EAAa,IAAII,EAAU,IAAI,EAC3BH,AAAY,YAAZA,GAAyBA,AAAY,UAAZA,EAEzBD,EAAWK,WAAW,CAACJ,GAIvBD,EAAWM,cAAc,IAGjC,IAAI,CAACN,UAAU,CAAGA,CACtB,CAKA,SAASO,EAAiBC,CAAC,EACvB,IAAMC,EAAeD,EAAEC,YAAY,CAAEC,EAAcD,EAAaC,WAAW,CAC3E,GAAI,IAAI,CAACV,UAAU,EAAIS,EAAc,CACjC,IAAIE,CACA,CAAA,IAAI,CAACT,OAAO,CAACD,OAAO,CACpBU,EAAW,CACP,IAAI,CAACX,UAAU,CAACY,WAAW,CAACH,EAAaI,OAAO,EAChD,IAAI,CAACb,UAAU,CAACY,WAAW,CAACH,EAAaK,OAAO,EACnD,CAEI,IAAI,CAACZ,OAAO,CAACC,UAAU,EAC5B5B,EAAQmC,IAGRA,EAAYK,MAAM,EAAI,GACtBJ,CAAAA,EAAWP,EAAUY,qBAAqB,CAACN,EAAW,EAEtDC,IACAF,EAAaI,OAAO,CAAGzC,EAASuC,GAChCF,EAAaK,OAAO,CAAG3C,EAASwC,GAExC,CACJ,CAwBA,SAASM,EAAiBhB,CAAO,CAAEnB,CAAM,EAErC,IAAI,CAACoB,OAAO,CAACD,OAAO,CAAG,IAAI,CAACiB,WAAW,CAACjB,OAAO,CAAGA,EAElD,IAAI,CAACkB,MAAM,CAAC,CAAC,EAAGzC,EAAKI,EAAQ,CAAA,IACzB,IAAI,CAACkB,UAAU,EAAKC,CAAAA,AAAY,UAAZA,GAAuBA,AAAY,YAAZA,CAAoB,EAC/D,IAAI,CAACD,UAAU,CAACK,WAAW,CAACJ,GAI5B,IAAI,CAACmB,MAAM,CAACnC,OAAO,CAAC,AAACK,IACjB,OAAOA,EAAMM,MAAM,AACvB,EAER,CAQA,SAASyB,IACL,IAGAC,EAAgB,IAAI,CAACC,SAAS,CAAC,AAACvC,AAHjB,IAAI,CAGoBwC,aAAa,EAC/CxC,CAAAA,AAJU,IAAI,CAIPkB,OAAO,CAACuB,WAAW,EAAIzC,AAJpB,IAAI,CAIuByC,WAAW,AAAD,GAAO,IAAK,CAAA,GAChE,GAAIzC,AALW,IAAI,CAKR0C,KAAK,EACZJ,EAAcP,MAAM,EACpB/B,AAPW,IAAI,CAORgB,UAAU,CAAE,CACnB,IAAM2B,EAAiB3C,AARZ,IAAI,CAQeuC,SAAS,CAAC,IAAK,CAAA,GAAOR,EAAS/B,AARlD,IAAI,CAQqD4C,SAAS,CAACC,QAAQ,CAAEC,EAAe9C,AAAgC,CAAA,IAAhCA,AAR5F,IAAI,CAQ+FkB,OAAO,CAAC4B,YAAY,CAAY,EAAI,EAElJ,IAAK,IAAIC,EAAI,EAAGA,EAAIhB,EAASe,EAAcC,IAAK,CAC5C,IAAMC,EAAeV,CAAa,CAACS,EAAE,CACrC,GAAIvD,EAASwD,IACTA,AAAiB,IAAjBA,GACAL,CAAc,CAACI,EAAID,EAAa,EAAK9C,CAAAA,AAdlC,IAAI,CAcqC0C,KAAK,CAACO,GAAG,EAAI,CAAA,EAAI,CAC7DjD,AAfG,IAAI,CAeAgB,UAAU,CAACgC,YAAY,CAAGA,EACjC,KACJ,CACJ,CACJ,CACJ,CAoBA,SAASE,EAAejC,CAAO,CAAEnB,CAAM,EACnC,IAAI,CAACH,WAAW,CAAC,UAAWsB,EAASnB,EACzC,CAwBA,SAASqD,EAAoBhC,CAAU,CAAErB,CAAM,EAE3CqB,EAAazB,EAAKyB,EAAY,CAAA,GAE9B,IAAI,CAACD,OAAO,CAACC,UAAU,CAAG,IAAI,CAACe,WAAW,CAACf,UAAU,CAAGA,EAExD,IAAI,CAACgB,MAAM,CAAC,CAAC,EAAGzC,EAAKI,EAAQ,CAAA,IAEzB,IAAI,CAACkB,UAAU,CACf,IAAI,CAACA,UAAU,CAACM,cAAc,GAI9B,IAAI,CAACc,MAAM,CAACnC,OAAO,CAAC,AAACK,IACjB,OAAOA,EAAMO,aAAa,AAC9B,EAER,CAqBA,SAASuC,EAAkBjC,CAAU,CAAErB,CAAM,EACzC,IAAI,CAACH,WAAW,CAAC,aAAcwB,EAAYrB,EAC/C,CA9PAtD,EAAsB6G,OAAO,CAjB7B,SAAiBC,CAAW,CAAEC,CAAS,CAAEC,CAAU,EAC/C,IAAMC,EAAYF,EAAUpF,SAAS,CAAEuF,EAAaF,EAAWrF,SAAS,CAAEwF,EAAcL,EAAYnF,SAAS,CAc7G,OAbKwF,EAAYzD,UAAU,GACvByD,EAAYzD,UAAU,CAAG+B,EACzB0B,EAAYxD,aAAa,CAAGgD,EAC5BjE,EAASoE,EAAa,YAAavC,GACnC7B,EAASoE,EAAa,mBAAoB/B,GAC1CrC,EAASoE,EAAa,mBAAoBjB,IAEzCoB,EAAUvD,UAAU,GACrBuD,EAAUvD,UAAU,CAAGgD,EACvBO,EAAU9D,WAAW,CAAGA,EACxB8D,EAAUtD,aAAa,CAAGiD,EAC1BM,EAAW1E,gBAAgB,CAAGA,GAE3BsE,CACX,CAwQA,OAAMlC,EASFwC,YAAY5D,CAAM,CAAE,CAChB,IAAI,CAACA,MAAM,CAAGA,CAClB,CASA4B,aAAc,CACV,OAAO,CACX,CASA,OAAOI,sBAAsBN,CAAW,CAAE,CACtC,IAAImC,EAAoBC,IAAUC,EAAoB,CAACD,IAOvD,OANApC,EAAYsC,MAAM,CAAC,CAACC,EAAMC,KACtB,IAAMC,EAAMF,EAAOC,EAGnB,OAFAL,EAAoBO,KAAKnB,GAAG,CAACY,EAAmBM,EAAKF,GACrDF,EAAoBK,KAAKC,GAAG,CAACN,EAAmBI,EAAKF,GAC9CE,CACX,GACO,CAACN,EAAmBE,EAAkB,AACjD,CAQA1C,YAAYJ,CAAO,CAAE,CAEjB,IAAI,CAACW,WAAW,CAAG,SAAUnB,CAAK,CAAE6D,CAAK,EACvB,OAAV7D,GACAA,CAAAA,EAAQ,CAAA,EAEZ,IAAMuC,EAAe,IAAI,CAACA,YAAY,CACtC,GAAI,AAAiB,KAAA,IAAVvC,GACP,AAAwB,KAAA,IAAjBuC,EAA8B,CAYrC,GAVI/B,AAAY,UAAZA,EACAR,GAASuC,EAKTvC,EAAQ,AAAOA,EAAQuC,EAAf,IACHuB,CAAAA,AAAgB,MAFD,IAAI,CAACvE,MAAM,CAACkB,OAAO,CAACqD,WAAW,CAExB,EAAI,GAAE,EAGjC,AAAiB,KAAA,IAAVD,EAAuB,CAC9B,IAAMhE,EAAQ,IAAI,CAACN,MAAM,CAACoC,MAAM,CAACkC,EAAM,CACnChE,GACAA,CAAAA,EAAMM,MAAM,CAAGH,CAAI,CAE3B,CACA,OAAOA,CACX,CACA,OAAO,CACX,CACJ,CAKAa,gBAAiB,CAEb,IAAI,CAACM,WAAW,CAAG,SAAUnB,CAAK,CAAE6D,CAAK,EAIrC,GAHc,OAAV7D,GACAA,CAAAA,EAAQ,CAAA,EAERA,AAAU,KAAK,IAAfA,GAAoB6D,AAAU,KAAK,IAAfA,EAAkB,CACtC,IAAME,EAAYF,EAAQ,EACtB,IAAI,CAACtE,MAAM,CAACoC,MAAM,CAACkC,EAAQ,EAAE,CAAG,KAEhCE,GAAaA,EAAU3D,aAAa,EACpCJ,CAAAA,EAAQpB,EAAamF,EAAU3D,aAAa,CAAGJ,EAAK,EAGxD,IAAMH,EAAQ,IAAI,CAACN,MAAM,CAACoC,MAAM,CAACkC,EAAM,CACjCG,EAAkBnE,EAAMN,MAAM,CAACkB,OAAO,CAACuD,eAAe,CAAEC,EAAcpE,EAAMqE,CAAC,EAAI,IAAI,CAAC3E,MAAM,CAAC0C,KAAK,CAAC2B,GAAG,EACxG/D,EAAMqE,CAAC,EAAI,IAAI,CAAC3E,MAAM,CAAC0C,KAAK,CAACO,GAAG,CASpC,OARI3C,IACI,CAACmE,GAAmBC,EACpBpE,EAAMO,aAAa,CAAGJ,EAGtBH,EAAMO,aAAa,CAAG,KAAK,GAG5BJ,CACX,CACA,OAAO,CACX,CACJ,CACJ,CACAjE,EAAsB4E,SAAS,CAAGA,CACtC,EAAG5E,GAA0BA,CAAAA,EAAwB,CAAC,CAAA,GAMzB,IAAMoI,EAAgCpI,EAgH7D,CAAEqI,cAAAA,CAAa,CAAE,CAAIpG,IAErB,CAAES,SAAU4F,CAAkC,CAAEC,MAAAA,CAAK,CAAErF,KAAMsF,CAA8B,CAAE,CAAIvG,IAMjGwG,EAAkB,EAAE,CAgC1B,SAASC,IACD,IAAI,CAACC,SAAS,EAEd,IAAI,CAACA,SAAS,CAACC,aAAa,CAAC,KAAM,CAAA,EAE3C,CAQA,SAASC,QAEDC,EAAe5C,EAAO6C,EAD1B,IAAMC,EAAS,IAAI,CAACA,MAAM,CAAEL,EAAY,IAAI,CAACA,SAAS,CAEtD,GAAIA,EAAW,CACXG,EAAgBE,GAAUA,EAAOtE,OAAO,CACxCwB,EAAQyC,EAAUzC,KAAK,CACvB6C,EAAQJ,EAAUI,KAAK,CACvB,GAAM,CAAEE,gBAAAA,CAAe,CAAEC,iBAAAA,CAAgB,CAAE,CAAGP,CAE1C,CAAA,IAAI,CAACQ,QAAQ,EACbR,EAAUS,IAAI,CAAGT,EAAUU,QAAQ,CAC/B,IAAI,CAACC,UAAU,CAAGL,EACdN,EAAUY,MAAM,CACpB,IAAI,CAACC,OAAO,CAAC,EAAE,CAAGP,EACtBN,EAAUc,GAAG,CAAG,IAAI,CAACC,OAAO,CAAGR,IAG/BP,EAAUS,IAAI,CAAGZ,EAA+BtC,EAAMkD,IAAI,CAAE,IAAI,CAACO,QAAQ,CAAGT,GAC5EP,EAAUc,GAAG,CAAGd,EAAUiB,gBAAgB,CAACH,GAAG,EAC1C,IAAI,CAACI,WAAW,CACZlB,EAAUY,MAAM,CAChBN,EACC,CAAA,IAAI,CAACa,SAAS,EAAEpF,QAAQqF,QAAU,CAAA,EACnC,IAAI,CAACP,OAAO,CAAC,EAAE,CACd,CAAA,IAAI,CAACQ,aAAa,EAAI,IAAI,CAACC,iBAAiB,CACzC,IAAI,CAACD,aAAa,CAACE,SAAS,GAC5B,CAAA,EACH,CAAA,AAACpB,GACEA,AAAgC,WAAhCA,EAAcqB,aAAa,EAC3BrB,AAAyB,cAAzBA,EAAcsB,MAAM,EACpBtB,EAAcuB,OAAO,EACrB,CAACvB,EAAcwB,QAAQ,CACvBtB,EAAOuB,YAAY,CACf/B,EAA+BM,EAAciB,MAAM,CAAE,IACzD,CAAA,EACH,CAAA,IAAI,CAACS,WAAW,CAAG,IAAI,CAACA,WAAW,CAAC,EAAE,CAAG,CAAA,GAElDtE,GAAS6C,IACL,IAAI,CAACI,QAAQ,CACbjD,EAAMxB,OAAO,CAAC0E,IAAI,CAAGL,EAAMrE,OAAO,CAAC0E,IAAI,CAAGT,EAAUS,IAAI,CAGxDlD,EAAMxB,OAAO,CAAC+E,GAAG,CAAGV,EAAMrE,OAAO,CAAC+E,GAAG,CAAGd,EAAUc,GAAG,CAEzDvD,EAAMuE,WAAW,GACjB1B,EAAM0B,WAAW,GAEzB,CACJ,CAKA,SAASC,GAAmBC,CAAK,EACzB,CAAC,IAAI,CAAChC,SAAS,EAAI,CAAC,IAAI,CAACiC,QAAQ,EAChC,CAAA,IAAI,CAAClG,OAAO,CAACiE,SAAS,CAAC0B,OAAO,EAC3B,IAAI,CAAC3F,OAAO,CAACoF,SAAS,CAACO,OAAO,AAAD,IACjC,IAAI,CAACO,QAAQ,CAAG,IAAI,CAACjC,SAAS,CAAG,IAAI/I,EAAqB,IAAI,EAC1D4I,EAA+BmC,EAAMrH,MAAM,CAAE,CAAA,IAC7C,IAAI,CAACA,MAAM,CAACqH,EAAME,SAAS,EAGvC,CAKA,SAASC,KACL,IAAMpG,EAAU,IAAI,CAACA,OAAO,CACxBA,CAAAA,EAAQiE,SAAS,CAAC0B,OAAO,EACzB3F,EAAQoF,SAAS,CAACO,OAAO,AAAD,GACxB,CAAA,IAAI,CAACO,QAAQ,CAAG,IAAI,CAACjC,SAAS,CAAG,IAAI/I,EAAqB,IAAI,CAAA,CAEtE,CAOA,SAASmL,KACL,IAAMC,EAAe,IAAI,CAACtG,OAAO,CAAEiE,EAAYqC,EAAarC,SAAS,CAAEqB,EAAgBgB,EAAahB,aAAa,CACjH,GAAI,AAAC,CAAA,AAACrB,GAAaA,EAAU0B,OAAO,EAC/BL,GAAiBA,EAAcK,OAAO,GACtC,CAAA,AAAC,CAAChC,GACC,AAAsB,MAAtB,IAAI,CAAC4C,OAAO,CAACC,IAAI,EAChB7C,GAAiB,AAA2B,MAA3B,IAAI,CAAC4C,OAAO,CAACE,SAAS,AAAQ,EACpD,MAAO,CAAA,CAEf,CAIA,SAASC,GAAgBxH,CAAK,EAC1B,IAAM+E,EAAY/E,EAAM+E,SAAS,CAEjC,GAAIA,GAAa/E,EAAMsC,KAAK,CAAC,EAAE,CAAE,CAC7B,IAAMf,EAAWvB,EAAMsC,KAAK,CAAC,EAAE,CAACmF,WAAW,GAC3C1C,EAAU2C,MAAM,CAACnG,EAASsB,GAAG,CAAEtB,EAAS0C,GAAG,CAC/C,CACJ,CAKA,SAAS0D,GAAcvG,CAAC,EACpB,IAAM4E,EAAoB5E,EAAEN,OAAO,CAACiE,SAAS,EAAI,CAAC,EAAI6C,EAAoBxG,EAAEN,OAAO,CAACoF,SAAS,EAAI,CAAC,CAC9F,EAAC,IAAI,CAACnB,SAAS,EAAI,CAAC,IAAI,CAACiC,QAAQ,EAChChB,CAAAA,EAAiBS,OAAO,EAAImB,EAAiBnB,OAAO,AAAD,IACpD9B,EAAM,CAAA,EAAM,IAAI,CAAC7D,OAAO,CAACiE,SAAS,CAAEiB,GACpCrB,EAAM,CAAA,EAAM,IAAI,CAAC7D,OAAO,CAACoF,SAAS,CAAE0B,GACpC,OAAOxG,EAAEN,OAAO,CAACiE,SAAS,CAC1B,OAAO3D,EAAEN,OAAO,CAACoF,SAAS,CAElC,CAS6B,IAAM2B,GAHD,CAC9B5E,QAvJJ,SAAiB6E,CAAU,CAAEC,CAAc,EACvC,GAAI1J,IAA8E2J,UAAU,CAACnD,EAAiBiD,GAAa,CACvH,IAAMG,EAAaH,EAAW/J,SAAS,CACvC/B,EAAuB+L,EACvBE,EAAWC,SAAS,CAACC,IAAI,CAACX,IAC1B9C,EAAmCoD,EAAY,iBAAkBhD,GACjEJ,EAAmCoD,EAAY,oBAAqB7C,GACpEP,EAAmCoD,EAAY,cAAehB,IAC9DpC,EAAmCoD,EAAY,eAAgBZ,IAC/DxC,EAAmCoD,EAAY,sBAAuBX,IACtEzC,EAAmCoD,EAAY,SAAUH,GAC7D,CACJ,CA4IA,EAeM,CAAElD,cAAe2D,EAAsC,CAAE,CAAI/J,IAE7D,CAAES,SAAUuJ,EAAiC,CAAEpJ,aAAcqJ,EAAqC,CAAEpJ,QAASqJ,EAAgC,CAAEnJ,SAAUoJ,EAAiC,CAAElJ,KAAMmJ,EAA6B,CAAE,CAAIpK,IAS3O,SAASqK,KAEAC,AADQ,IAAI,CACPC,aAAa,EACnBD,CAAAA,AAFS,IAAI,CAERC,aAAa,CAAG,IAAIC,GAFhB,IAAI,CAEuC,CAE5D,CAOA,SAASC,GAAkB1H,CAAC,MAEpB2H,EADJ,IAAmB/I,EAAQ2I,AAAd,IAAI,CAAe3I,KAAK,CAAEoH,EAAepH,EAAMc,OAAO,CAAEiE,EAAYqC,EAAarC,SAAS,CAAE6D,EAAgBD,AAA5G,IAAI,CAA6GC,aAAa,CAAErB,EAAYvH,EAAMqH,OAAO,CAACE,SAAS,CAAEnB,EAAgBgB,EAAahB,aAAa,CAAE4C,EAAWhJ,EAAMqH,OAAO,CAACC,IAAI,CAE3P,GAAIqB,AAFS,IAAI,CAERhJ,OAAO,EACXoF,CAAAA,GAAW0B,SAAWL,GAAeK,OAAM,GAE5C,GAAIuC,AAAa,MAAbA,GAAoB5H,AAAc,SAAdA,EAAE6H,OAAO,CAC7BF,EAAS,CAAA,OAMR,GAAI,AAAC,CAAA,AAAe,SAAd3H,EAAE6H,OAAO,EAAeD,AAAa,OAAbA,GAC9BZ,IAA0Cb,AAAc,OAAdA,CAAkB,GAC7DoB,AAdK,IAAI,CAcJ7H,OAAO,CAACoI,KAAK,CAAE,CACpB,IAAMC,EAAeP,EAAcO,YAAY,CAE3CZ,GAAiCnH,EAAEyB,GAAG,EACtC+F,EAAcO,YAAY,CAAG,CAACR,AAlB7B,IAAI,CAkB8B9F,GAAG,CAAE8F,AAlBvC,IAAI,CAkBwC1E,GAAG,CAAC,CAG5CkF,IACL/H,EAAEyB,GAAG,CAAGsG,CAAY,CAAC,EAAE,CACvB/H,EAAE6C,GAAG,CAAGkF,CAAY,CAAC,EAAE,CACvBP,EAAcO,YAAY,CAAG,KAAK,EAE1C,EAEkB,KAAA,IAAXJ,GACP3H,EAAEgI,cAAc,EAExB,CAUA,MAAMP,GASF,OAAO5F,QAAQE,CAAS,CAAE,CACjBA,EAAUkG,SAAS,CAACC,QAAQ,CAAC,mBAC9BnG,EAAUkG,SAAS,CAAClB,IAAI,CAAC,iBACzBE,GAAkClF,EAAW,OAAQuF,IACrDL,GAAkClF,EAAW,cAAe2F,IAEpE,CAMAtF,YAAYmF,CAAI,CAAE,CACd,IAAI,CAACA,IAAI,CAAGA,CAChB,CASAY,SAAU,CACN,IAAI,CAACZ,IAAI,CAAG,KAAK,CACrB,CAQAa,aAAaC,CAAK,CAAEC,CAAK,CAAEC,CAAQ,CAAEC,CAAQ,CAAE,CAC3C,IAAMjB,EAAO,IAAI,CAACA,IAAI,CAAEkB,EAAiB,AAAClB,CAAAA,EAAKmB,UAAU,EAAI,CAAA,EAAK,EAC9DC,EAAStB,GAA8BkB,EAAUhB,EAAKqB,SAAS,CAACP,EAAO,CAAA,EAAM,CAACd,EAAKsB,KAAK,GAAIC,EAASzB,GAA8BmB,EAAUjB,EAAKqB,SAAS,CAACN,EAAO,CAAA,EAAM,CAACf,EAAKsB,KAAK,GAWxL,OATK1B,GAAiCoB,IAClCI,CAAAA,EAASzB,GAAsCyB,EAASF,EAAc,EAErEtB,GAAiCqB,IAClCM,CAAAA,EAAS5B,GAAsC4B,EAASL,EAAc,EAErErB,GAAkCuB,IAAYvB,GAAkC0B,IACjFH,CAAAA,EAASG,EAAS,KAAK,CAAA,EAEpB,CACHrH,IAAKkH,EACL9F,IAAKiG,CACT,CACJ,CACJ,CASA,IAAIC,GAA+FtN,EAAoB,KACnHuN,GAAmHvN,EAAoBI,CAAC,CAACkN,IAEzIE,GAAmIxN,EAAoB,KACvJyN,GAAuJzN,EAAoBI,CAAC,CAACoN,IAajL,GAAM,CAAEE,MAAOC,EAAK,CAAE,CAAIJ,KAEpB,CAAEK,YAAAA,EAAW,CAAE,CAAIH,KAcnBI,GAAoB,CAuDtB/E,OAAQ,GAORQ,OAAQ,GAURwE,WAAY,CAAA,EAOZC,QAAS,CASLC,MAAO,EASPC,aAAc,EASdnF,OAAQ,GAqBRoF,QAAS,CAAC,mBAAoB,mBAAmB,CAMjDtE,QAAS,CAAA,EAUTuE,UAAW,EAMXC,gBAAiB,UAMjBC,YAAa,SACjB,EAgBAC,SAAUX,GAAM,WAA0CY,UAAU,CAAC,IAAKxN,GAAG,GAW7EyN,aAAc,UAadC,aAAc,EAkCd1L,OAAQ,CAeJ0H,KAAO,AAAkC,KAAA,IAA3BmD,GAAYc,UAAU,CAChC,OACA,aAIJC,YAAa,IAIbR,UAAW,EAIXnK,QAAS,KAIT4K,aAAc,CACVhF,QAAS,CAAA,CACb,EAcAiF,aAAc,CACVC,cAAe,UACflF,QAAS,CAAA,EACTmF,gBAAiB,EAEjBC,YAAa,aACbC,OAAQ,SACRC,WAAY,YAEZC,MAAO,CACH,CAAC,cAAe,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAI,CAAC,CACzD,CAAC,SAAU,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CAAC,CACjC,CAAC,SAAU,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CAAC,CACjC,CAAC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,CAAC,CAChC,CAAC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAE,CAAC,CACrB,CAAC,OAAQ,CAAC,EAAG,EAAG,EAAE,CAAC,CACnB,CAAC,QAAS,CAAC,EAAG,EAAG,EAAE,CAAC,CACpB,CAAC,OAAQ,KAAK,CACjB,AACL,EAOAC,WAAY,CACRxF,QAAS,CAAA,EACTyF,OAAQ,CACZ,EACAC,GAAI,8BACJC,UAAW,8BAaXC,UAAW,KACXC,OAAQ,CACJ7F,QAAS,CAAA,CACb,EAkBA8F,UAAW,IACf,EAqCAjK,MAAO,CAuBH8J,UAAW,6BACXI,WAAY,EACZxB,UAAW,EACXyB,cAAe,UACfN,GAAI,mBACJO,cAAe,EACfC,kBAAmB,IACnBC,OAAQ,CACJC,MAAO,OAIPC,MAAO,CAEHtC,MAAO,UAEPuC,SAAU,QAEVC,QAAS,GAETC,YAAa,cACjB,EACA1I,EAAG,EACH2I,EAAG,EACP,EACAC,UAAW,CAAA,CACf,EA0BAhI,MAAO,CACHiH,UAAW,6BACXM,cAAe,EACfU,YAAa,CAAA,EACbC,UAAW,CAAA,EACXC,WAAY,GACZnB,GAAI,mBACJoB,WAAY,GACZX,OAAQ,CACJnG,QAAS,CAAA,CACb,EACA0G,UAAW,CAAA,EACXK,MAAO,CACHC,KAAM,IACV,EACAjB,WAAY,EACZkB,UAAW,CACf,CACJ,EAsCM,CAAExO,QAASyO,EAAe,CAAEvO,SAAUwO,EAAgB,CAAEtO,KAAMuO,EAAY,CAAE,CAAIxP,IAwOnDyP,GAhBnB,CAKZC,KAzDJ,SAAcxJ,CAAC,CAAE2I,CAAC,CAAEc,CAAC,CAAEC,CAAC,CAAEnN,CAAO,SAC7B,AAAIA,GAAWA,EAAQoN,CAAC,CACbC,AAaf,SAAqB5J,CAAC,CAAE2I,CAAC,CAAEc,CAAC,CAAEC,CAAC,CAAEnN,CAAO,EACpC,IAAMoN,EAAIpN,GAASoN,GAAK,EACxB,MAAO,CACH,CAAC,IAAK3J,EAAI2J,EAAGhB,EAAE,CACf,CAAC,IAAK3I,EAAIyJ,EAAIE,EAAGhB,EAAE,CACnB,CAAC,IAAKgB,EAAGA,EAAG,EAAG,EAAG,EAAG3J,EAAIyJ,EAAGd,EAAIgB,EAAE,CAClC,CAAC,IAAK3J,EAAIyJ,EAAGd,EAAIe,EAAIC,EAAE,CACvB,CAAC,IAAKA,EAAGA,EAAG,EAAG,EAAG,EAAG3J,EAAIyJ,EAAIE,EAAGhB,EAAIe,EAAE,CACtC,CAAC,IAAK1J,EAAI2J,EAAGhB,EAAIe,EAAE,CACnB,CAAC,IAAKC,EAAGA,EAAG,EAAG,EAAG,EAAG3J,EAAG2I,EAAIe,EAAIC,EAAE,CAClC,CAAC,IAAK3J,EAAG2I,EAAIgB,EAAE,CACf,CAAC,IAAKA,EAAGA,EAAG,EAAG,EAAG,EAAG3J,EAAI2J,EAAGhB,EAAE,CAC9B,CAAC,IAAI,CACR,AACL,EA3B2B3I,EAAG2I,EAAGc,EAAGC,EAAGnN,GAE5B,CACH,CAAC,IAAKyD,EAAG2I,EAAE,CACX,CAAC,IAAK3I,EAAIyJ,EAAGd,EAAE,CACf,CAAC,IAAK3I,EAAIyJ,EAAGd,EAAIe,EAAE,CACnB,CAAC,IAAK1J,EAAG2I,EAAIe,EAAE,CACf,CAAC,IAAI,CACR,AACL,CAmDA,EAqBM,CAAEG,eAAAA,EAAc,CAAE,CAAI/P,IA6BOgQ,GAHV,CACrB,mBAjBJ,SAAyBC,CAAE,CAAEC,CAAE,CAAE1D,CAAK,CAAElF,CAAM,CAAE7E,EAAU,CAAC,CAAC,EACxD,IAAM0N,EAAY1N,EAAQ+J,KAAK,CAAG/J,EAAQ+J,KAAK,CAAG,EAAIA,EAA6BqD,EAAIE,GAAetN,EAAQgK,YAAY,EAAI,EAAG9G,KAAKnB,GAAG,CAAC2L,AAAY,EAAZA,EAAe7I,IAEzJ,MAAO,CACH,CAAC,IAAK,KAAiBA,AAF3BA,CAAAA,EAAS7E,EAAQ6E,MAAM,EAAIA,CAAK,EAEI,EAAI,IAAI,CACxC,CAAC,IAAK,KAAiBA,EAAS,EAAI,IAAI,CACxC,CAAC,IAAK8I,GAAoB9I,EAAS,EAAI,IAAI,CAC3C,CAAC,IAAK8I,GAAoB9I,EAAS,EAAI,IAAI,IACxCmI,GAAYC,IAAI,CAAC,CAACS,EAAY,EAAG,GAAKA,AAAY,EAAZA,EAAgB,EAAG7I,EAAQ,CAAEuI,CAAE,GAC3E,AACL,CAQA,EAIA,IAAIQ,GAA2I7R,EAAoB,KAC/J8R,GAA+J9R,EAAoBI,CAAC,CAACyR,IAazL,GAAM,CAAExP,QAAS0P,EAAsB,CAAE,CAAIvQ,IA6BVwQ,GAHZ,CACnBC,cAZJ,SAAuB5F,CAAK,EACxB,IAAM5G,EAAQ,IAAI,CAACA,KAAK,CAAC,EAAE,AACvBsM,CAAAA,GAAuBtM,EAAMZ,OAAO,GACpCkN,GAAuBtM,EAAMb,OAAO,GACpCyH,EACA,IAAI,CAAC6F,UAAU,CAAG/K,KAAKnB,GAAG,CAACqG,EAAO5G,EAAMZ,OAAO,CAAGY,EAAMb,OAAO,EAG/D,IAAI,CAACsN,UAAU,CAAG7F,CAE1B,CAGA,EAeM,CAAE8F,WAAAA,EAAU,CAAE,CAAI3Q,IAElB,CAAE4Q,SAAAA,EAAQ,CAAE,CAAI5Q,IAKhB,CAAE6Q,gBAAAA,EAAe,CAAE,CAAIP,KAEvB,CAAEG,cAAeK,EAAkC,CAAE,CAAGN,GAExD,CAAE/P,SAAUsQ,EAA6B,CAAEC,OAAAA,EAAM,CAAErH,WAAAA,EAAU,CAAE,CAAI3J,IA2BzE,SAASiR,KACD,IAAI,CAACtP,KAAK,CAAC+E,SAAS,EAAI,CAAC,IAAI,CAACjE,OAAO,CAACyO,UAAU,EAChD,IAAI,CAACvP,KAAK,CAAC+E,SAAS,CAACC,aAAa,CAAC,KAAM,CAAA,EAEjD,CAS6B,IAAMwK,GAHN,CACzBvM,QAxBJ,SAAsC6E,CAAU,CAAE3E,CAAS,CAAED,CAAW,EACpEuM,AA/4B2D5G,GA+4BlC5F,OAAO,CAACE,GAC7B6E,GAAWiH,GAAU,eACrBnH,EAAW/J,SAAS,CAAC+Q,aAAa,CAAGK,GACrCE,GAAOH,KAAkBnR,SAAS,CAACgN,OAAO,CAAEsD,IAC5Ce,GAA8BlM,EAAa,cAAeoM,IAC1DN,GAAW,CAAEjK,UA/Y6C2F,EA+YN,GAE5D,CAiBA,EAeM,CAAEuE,SAAUS,EAAsB,CAAE,CAAIrR,IAExC,CAAES,SAAU6Q,EAAsB,CAAEzQ,QAAS0Q,EAAqB,CAAEtQ,KAAMuQ,EAAkB,CAAE7H,WAAY8H,EAAwB,CAAE,CAAIzR,KAO9I,AAAC,SAAUhC,CAAa,EAMpB,IAAI0T,EA2BJ,SAAStI,EAAYkB,CAAI,EACrB,IAAMqH,EAAUH,GAAmBlH,EAAK7H,OAAO,EAAI6H,EAAK7H,OAAO,CAAC+B,GAAG,CAAE8F,EAAK9F,GAAG,EACvEoN,EAAUJ,GAAmBlH,EAAK7H,OAAO,EAAI6H,EAAK7H,OAAO,CAACmD,GAAG,CAAE0E,EAAK1E,GAAG,EAC7E,MAAO,CACH+L,QAAAA,EACAC,QAAAA,EACAC,UAAWN,GAAsBjH,EAAKlH,OAAO,EACzCuC,KAAKnB,GAAG,CAACmN,EAASrH,EAAK9F,GAAG,CAAE8F,EAAKlH,OAAO,CAAEoO,GAAmBlH,EAAK4D,SAAS,CAAE7I,MAAasM,EAC9FG,UAAWP,GAAsBjH,EAAKjH,OAAO,EACzCsC,KAAKC,GAAG,CAACgM,EAAStH,EAAK1E,GAAG,CAAE0E,EAAKjH,OAAO,CAAEmO,GAAmBlH,EAAK4D,SAAS,CAAE,CAAC7I,MAAauM,CACnG,CACJ,CAKA,SAASG,IACL,IAAmBlK,EAAYyC,AAAlB,IAAI,CAAmBzC,SAAS,CAAET,EAAWS,GAAa,CAACA,EAAUpF,OAAO,CAAC2E,QAAQ,CAAEvB,EAAQyE,AAA/F,IAAI,CAAgGsB,KAAK,CAAG,EAAIxE,EAAW,EAAI,EACxIS,IAEAyC,AAHS,IAAI,CAGR3I,KAAK,CAACqQ,iBAAiB,CAAG,CAAC,EAAG,EAAE,CACrC1H,AAJS,IAAI,CAIR3I,KAAK,CAACsQ,UAAU,CAACpM,EAAM,EACxBgC,EAAUqK,IAAI,CAAIrK,CAAAA,EAAUpF,OAAO,CAACqF,MAAM,EAAI,CAAA,EAE1D,CAKA,SAASqK,IACL,IAAM7H,EAAO,IAAI,AACbA,CAAAA,EAAK7H,OAAO,EACZ6H,EAAK7H,OAAO,CAACoF,SAAS,EACtByC,EAAK7H,OAAO,CAACoF,SAAS,CAACO,OAAO,GAE9BkC,EAAK7H,OAAO,CAACoF,SAAS,CAACuK,QAAQ,CAAG,CAAC9H,EAAKsB,KAAK,CAC7CtB,EAAK7H,OAAO,CAACsM,WAAW,CAAGzE,EAAK7H,OAAO,CAACuM,SAAS,CAAG,CAAA,EACpD1E,EAAKzC,SAAS,CAAG,IAAI6J,EAAUpH,EAAK3I,KAAK,CAAC0Q,QAAQ,CAAE/H,EAAK7H,OAAO,CAACoF,SAAS,CAAEyC,EAAK3I,KAAK,EACtF2P,GAAuBhH,EAAKzC,SAAS,CAAE,UAAW,SAAU9E,CAAC,MAErDuP,EAAIC,EADR,GAAM,CAAEZ,QAAAA,CAAO,CAAEC,QAAAA,CAAO,CAAEC,UAAWW,CAAS,CAAEV,UAAWW,CAAS,CAAE,CAAGrJ,EAAYkB,GAAOO,EAAQ4H,EAAYD,EAGhH,GAAI,AAACjB,GAAsBI,IAAaJ,GAAsBK,IAc9D,GAXI,AAACtH,EAAKsB,KAAK,EAAI,CAACtB,EAAKoI,QAAQ,EAC5B,CAACpI,EAAKsB,KAAK,EAAItB,EAAKoI,QAAQ,EAC7BJ,EAAKE,EAAY3H,EAAQ,IAAI,CAACyH,EAAE,CAChCC,EAAOC,EAAY3H,EAAQ,IAAI,CAAC0H,IAAI,GAKpCD,EAAKE,EAAY3H,EAAS,CAAA,EAAI,IAAI,CAAC0H,IAAI,AAAD,EACtCA,EAAOC,EAAY3H,EAAS,CAAA,EAAI,IAAI,CAACyH,EAAE,AAAD,GAEtC,IAAI,CAACK,oBAAoB,CAAC5P,EAAE6P,OAAO,EAAG,CAEtC,IAAMC,EAAU9P,AAAc,cAAdA,EAAE6P,OAAO,EACrB7P,AAAc,cAAdA,EAAE6P,OAAO,EAA2B,KAAK,EAC7CtI,EAAKwI,WAAW,CAACP,EAAMD,EAAI,CAAA,EAAMO,EAAS9P,EAC9C,MAII,IAAI,CAACgQ,QAAQ,CAAC,IAAI,CAACR,IAAI,CAAE,IAAI,CAACD,EAAE,EAExC,GAER,CAKA,SAASU,QAEDC,EAAcV,EAAMD,EADxB,GAAmB,CAAET,UAAAA,CAAS,CAAEC,UAAAA,CAAS,CAAE,CAAG1I,EAAjC,IAAI,EAAgDvB,EAAYyC,AAAhE,IAAI,CAAiEzC,SAAS,CAAEqL,EAAU5I,AAA1F,IAAI,CAA2F6I,eAAe,CAAI7I,CAAAA,AAAlH,IAAI,CAAmH/B,WAAW,EAAI,CAAA,EAAKyJ,EAAoB1H,AAA/J,IAAI,CAAgK3I,KAAK,CAACqQ,iBAAiB,CAAEoB,EAAa9I,AAA1M,IAAI,CAA2M7H,OAAO,CAACqF,MAAM,EAAI,EAE9O,GAAID,GAAamK,EAAmB,CAChC,GAAI1H,AAHK,IAAI,CAGJsB,KAAK,CAELtB,AALA,IAAI,CAKClD,QAAQ,EACd4K,CAAAA,CAAiB,CAAC,EAAE,EAAIkB,CAAK,EAEjCrL,EAAUwL,QAAQ,CAAC/I,AARd,IAAI,CAQenD,IAAI,CAAGmD,AAR1B,IAAI,CAQ2B9C,GAAG,CACnC8C,AATC,IAAI,CASAhD,MAAM,CACX,EACA0K,CAAiB,CAAC,EAAE,CACnB1H,CAAAA,AAZA,IAAI,CAYClD,QAAQ,CAAGgM,EAAa,CAAA,EAAK9I,AAZlC,IAAI,CAYmCkC,KAAK,CAAElC,AAZ9C,IAAI,CAY+ChD,MAAM,EAEzDgD,AAdA,IAAI,CAcClD,QAAQ,EACd4K,CAAAA,CAAiB,CAAC,EAAE,EAAIoB,CAAS,EAErCH,EAAe,MAEd,KAKGK,CAHAhJ,CArBC,IAAI,CAqBAlD,QAAQ,EACb4K,CAAAA,CAAiB,CAAC,EAAE,EAAIkB,CAAK,EAO7BI,EAJCzL,EAAUpF,OAAO,CAAC2E,QAAQ,CAIfkD,AA7BX,IAAI,CA6BYnD,IAAI,CACjBmD,AA9BH,IAAI,CA8BIkC,KAAK,CACV,EACAwF,CAAiB,CAAC,EAAE,CACnB1H,CAAAA,AAjCJ,IAAI,CAiCKlD,QAAQ,CAAG,EAAIgM,CAAS,EAPtB9I,AA1BX,IAAI,CA0BYlD,QAAQ,CAAG,EAAIgM,EASpCvL,EAAUwL,QAAQ,CAACC,EAAWhJ,AAnCzB,IAAI,CAmC0B9C,GAAG,CAAE8C,AAnCnC,IAAI,CAmCoCkC,KAAK,CAAElC,AAnC/C,IAAI,CAmCgDhD,MAAM,EAE3DgD,AArCC,IAAI,CAqCAlD,QAAQ,EACb4K,CAAAA,CAAiB,CAAC,EAAE,EAAIoB,CAAS,EAErCH,EAAe,CACnB,CAGA,GAFAjB,CAAiB,CAACiB,EAAa,EAAIpL,EAAUqK,IAAI,CAC5CrK,CAAAA,EAAUpF,OAAO,CAACqF,MAAM,EAAI,CAAA,EAC7ByL,MAAM1B,IACN0B,MAAMzB,IACN,CAACP,GAAsBjH,AA9ClB,IAAI,CA8CmB9F,GAAG,GAC/B,CAAC+M,GAAsBjH,AA/ClB,IAAI,CA+CmB1E,GAAG,GAC/B0E,AAhDK,IAAI,CAgDJlH,OAAO,GAAKkH,AAhDZ,IAAI,CAgDajH,OAAO,CAK7BwE,EAAUkL,QAAQ,CAAC,EAAG,QAErB,GAAIzI,AAvDA,IAAI,CAuDC9F,GAAG,GAAK8F,AAvDb,IAAI,CAuDc1E,GAAG,CAAE,CAI5B,IAAM4N,EAAWlJ,AA3DZ,IAAI,CA2DamB,UAAU,CAAInB,CAAAA,AA3D/B,IAAI,CA2DgCjH,OAAO,CAC5C,CAAA,EACJkP,EAAOiB,EAAWlJ,AA7Db,IAAI,CA6Dc9F,GAAG,CAC1B8N,EAAKkB,EAAYlJ,CAAAA,AA9DZ,IAAI,CA8Da1E,GAAG,CAAG,CAAA,EAC5BiC,EAAUkL,QAAQ,CAACR,EAAMD,EAC7B,MAEIC,EAAQ,AAACjI,CAAAA,AAlEJ,IAAI,CAkEK9F,GAAG,CAAGqN,CAAQ,EACvBC,CAAAA,EAAYD,CAAQ,EACzBS,EAAM,AAAChI,CAAAA,AApEF,IAAI,CAoEG1E,GAAG,CAAGiM,CAAQ,EACrBC,CAAAA,EAAYD,CAAQ,EACrB,AAACvH,AAtEA,IAAI,CAsECsB,KAAK,EAAI,CAACtB,AAtEf,IAAI,CAsEgBoI,QAAQ,EAC5B,CAACpI,AAvED,IAAI,CAuEEsB,KAAK,EAAItB,AAvEf,IAAI,CAuEgBoI,QAAQ,CAC7B7K,EAAUkL,QAAQ,CAACR,EAAMD,GAIzBzK,EAAUkL,QAAQ,CAAC,EAAIT,EAAI,EAAIC,EAG3C,CACJ,CA7JAvU,EAAc4G,OAAO,CARrB,SAAiBE,CAAS,CAAE2O,CAAc,EAClChC,GAAyBJ,GAAwB,oBACjDK,EAAY+B,EACZnC,GAAuBxM,EAAW,iBAAkBiN,GACpDT,GAAuBxM,EAAW,YAAaqN,GAC/Cb,GAAuBxM,EAAW,cAAekO,GAEzD,CA+JJ,EAAGhV,GAAkBA,CAAAA,EAAgB,CAAC,CAAA,GAMT,IAAM0V,GAAsB1V,EA+NtB2V,GAvLT,CAWtBrM,OAAQ,GAORsM,gBAAiB,EAOjBC,mBAAoB,EAMpBC,eAAgB,CAAA,EAsBhBC,WAAY,KAAK,EAQjBjM,OAAQ,KAAK,EAMbkM,SAAU,EAEV5M,SAAU,CAAA,EASV6M,KAAM,GAINpG,OAAQ,EASRqG,mBAAoB,UAOpBC,eAAgB,EAMhBC,eAAgB,UAShBC,iBAAkB,UASlBC,sBAAuB,UASvBC,kBAAmB,UAOnBC,kBAAmB,EAMnBC,WAAY,OASZC,qBAAsB,6BAStBC,iBAAkB,UAOlBC,kBAAmB,EAOnBC,iBAAkB,CACtB,EAoBM,CAAEC,eAAAA,EAAc,CAAE,CAAI9U,IAKtB,CAAES,SAAUsU,EAAkB,CAAEnU,aAAcoU,EAAsB,CAAEC,MAAAA,EAAK,CAAEpU,QAASqU,EAAiB,CAAEC,wBAAAA,EAAuB,CAAEC,UAAAA,EAAS,CAAE9O,MAAO+O,EAAe,CAAEpU,KAAMqU,EAAc,CAAEC,YAAAA,EAAW,CAAE,CAAIvV,GAkBlN,OAAM0R,GAMF,OAAO9M,QAAQE,CAAS,CAAE,CACtB4O,GAAmB9O,OAAO,CAACE,EAAW4M,GAC1C,CAkBA,OAAO8D,OAAOC,CAAI,CAAErD,CAAQ,CAAE,CAc1B,OAbIA,GACAqD,EAAKjU,OAAO,CAAC,AAACkU,QAENC,EADJ,IAAMC,EAAMF,EAAIpS,MAAM,CAEtB,IAAK,IAAIgB,EAAI,EAAGA,EAAIsR,EAAKtR,GAAK,EAEN,UAAhB,MADJqR,CAAAA,EAAOD,CAAG,CAACpR,EAAI,EAAE,AAAD,IAEZoR,CAAG,CAACpR,EAAI,EAAE,CAAGoR,CAAG,CAACpR,EAAI,EAAE,CACvBoR,CAAG,CAACpR,EAAI,EAAE,CAAGqR,EAGzB,GAEGF,CACX,CAMAtQ,YAAYkN,CAAQ,CAAE5P,CAAO,CAAEd,CAAK,CAAE,CAMlC,IAAI,CAACkU,OAAO,CAAG,EAAE,CACjB,IAAI,CAACC,MAAM,CAAG,EACd,IAAI,CAACC,MAAM,CAAG,EACd,IAAI,CAACxD,IAAI,CAAG,EACZ,IAAI,CAACyD,gBAAgB,CAAG,EAAE,CAC1B,IAAI,CAACC,aAAa,CAAG,EACrB,IAAI,CAACC,oBAAoB,CAAG,EAC5B,IAAI,CAACC,YAAY,CAAG,EACpB,IAAI,CAACjE,IAAI,CAAG,EACZ,IAAI,CAACI,EAAE,CAAG,EACV,IAAI,CAACuC,gBAAgB,CAAG,EACxB,IAAI,CAAC3O,CAAC,CAAG,EACT,IAAI,CAAC2I,CAAC,CAAG,EACT,IAAI,CAACuH,IAAI,CAAC/D,EAAU5P,EAASd,EACjC,CAYA0U,WAAY,CACR,IAAMC,EAAe,IAAI,CAAC7T,OAAO,CAACyE,QAAQ,CAAG,CAAC,EAAG,EAAE,CAAG,CAAC,EAAG,EAAE,CAAEqP,EAAU,IAAI,CAACP,gBAAgB,CAAEQ,EAAM,IAAI,CAACC,cAAc,CAACC,OAAO,CAAEC,EAAQ,IAAI,CAACA,KAAK,CAACD,OAAO,CAAEE,EAAmB,IAAI,CAACA,gBAAgB,CAACC,IAAI,CAAC,IAAI,EAAGC,EAAmB,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,EAAGE,EAAiB,IAAI,CAACA,cAAc,CAACF,IAAI,CAAC,IAAI,EAChThB,EAAU,CAEZ,CACIU,CAAO,CAACD,CAAY,CAAC,EAAE,CAAC,CAACI,OAAO,CAChC,QACA,IAAI,CAACM,gBAAgB,CAACH,IAAI,CAAC,IAAI,EAClC,CACD,CACIN,CAAO,CAACD,CAAY,CAAC,EAAE,CAAC,CAACI,OAAO,CAChC,QACA,IAAI,CAACO,gBAAgB,CAACJ,IAAI,CAAC,IAAI,EAClC,CACD,CAACF,EAAO,QAAS,IAAI,CAACO,UAAU,CAACL,IAAI,CAAC,IAAI,EAAE,CAC5C,CAACL,EAAK,YAAaI,EAAiB,CACpC,CAACJ,EAAIW,aAAa,CAAE,YAAaL,EAAiB,CAClD,CAACN,EAAIW,aAAa,CAAE,UAAWJ,EAAe,CAE9C,CAACP,EAAK,aAAcI,EAAiB,CACrC,CAACJ,EAAIW,aAAa,CAAE,YAAaL,EAAiB,CAClD,CAACN,EAAIW,aAAa,CAAE,WAAYJ,EAAe,CAClD,CAEDlB,EAAQrU,OAAO,CAAC,SAAU4V,CAAI,EAC1BrC,GAAmB1S,KAAK,CAAC,KAAM+U,EACnC,GACA,IAAI,CAACvB,OAAO,CAAGA,CACnB,CACAoB,iBAAiBlU,CAAC,CAAE,CAEhB,IAAM8H,EAAS,AAAClC,CAAAA,AADC,IAAI,CACI2J,EAAE,CAAG3J,AADb,IAAI,CACkB4J,IAAI,AAAD,EACtC+C,GAAe3M,AAFF,IAAI,CAEOlG,OAAO,CAACwR,IAAI,CAAE,IAC1CtL,AAHiB,IAAI,CAGZ0O,cAAc,CAAC1O,AAHP,IAAI,CAGY4J,IAAI,CAAG1H,EAAOlC,AAH9B,IAAI,CAGmC2J,EAAE,CAAGzH,GAC7DuK,GAJiB,IAAI,CAID,UAAW,CAC3B7C,KAAM5J,AALO,IAAI,CAKF4J,IAAI,CACnBD,GAAI3J,AANS,IAAI,CAMJ2J,EAAE,CACf1H,QAAS,YACT0M,SAAUvU,CACd,EACJ,CACAiU,iBAAiBjU,CAAC,CAAE,CAEhB,IAAM8H,EAAQmK,GAAuBrM,AADpB,IAAI,CACyB2J,EAAE,CAAG3J,AADlC,IAAI,CACuC4J,IAAI,EAC5D+C,GAAe3M,AAFF,IAAI,CAEOlG,OAAO,CAACwR,IAAI,CAAE,IAC1CtL,AAHiB,IAAI,CAGZ0O,cAAc,CAACrC,GAAuBrM,AAH9B,IAAI,CAGmC4J,IAAI,CAAG1H,GAAQmK,GAAuBrM,AAH7E,IAAI,CAGkF2J,EAAE,CAAGzH,IAC5GuK,GAJiB,IAAI,CAID,UAAW,CAC3B7C,KAAM5J,AALO,IAAI,CAKF4J,IAAI,CACnBD,GAAI3J,AANS,IAAI,CAMJ2J,EAAE,CACf1H,QAAS,YACT0M,SAAUvU,CACd,EACJ,CAaAwU,0BAA0BC,CAAe,CAAE,CACvC,IAAuB/U,EAAUkG,AAAhB,IAAI,CAAqBlG,OAAO,CAAEgV,EAAqBhV,EAAQuR,QAAQ,CAAGrL,AAA1E,IAAI,CAA+E+O,eAAe,CAC/GjV,EAAQuR,QAAQ,CAChB,EACJ,MAAO,CACH8B,OAAQ,AAAC0B,CAAAA,EAAgB1B,MAAM,CAAGnN,AAJrB,IAAI,CAI0BzC,CAAC,CACxCyC,AALS,IAAI,CAKJgP,OAAO,AAAD,EACdhP,CAAAA,AANQ,IAAI,CAMHiP,QAAQ,CAAGH,CAAiB,EAC1C1B,OAAQ,AAACyB,CAAAA,EAAgBzB,MAAM,CAAGpN,AAPrB,IAAI,CAO0BkG,CAAC,CACxClG,AARS,IAAI,CAQJkP,OAAO,AAAD,EACdlP,CAAAA,AATQ,IAAI,CASHiP,QAAQ,CAAGH,CAAiB,CAC9C,CACJ,CAOAvM,SAAU,CACN,IAAMvC,EAAW,IAAI,CAAEjC,EAAYiC,EAAShH,KAAK,CAACgH,QAAQ,CAE1DA,EAASmP,YAAY,GAErB,CACI,QACA,kBACA,YACA,iBACA,QACH,CAACtW,OAAO,CAAC,SAAU/B,CAAI,EAChBkJ,CAAQ,CAAClJ,EAAK,EAAIkJ,CAAQ,CAAClJ,EAAK,CAACyL,OAAO,EACxCvC,CAAAA,CAAQ,CAAClJ,EAAK,CAAGkJ,CAAQ,CAAClJ,EAAK,CAACyL,OAAO,EAAC,CAEhD,GAEIxE,GAAaiC,IAAajC,EAAUmB,SAAS,GAC7CnB,EAAUmB,SAAS,CAAG,KAEtBsN,GAAwBzO,EAAUsP,gBAAgB,EAE1D,CASA+B,oBAAoBlS,CAAK,CAAE,CACvB,IAAuBwM,EAAW1J,AAAjB,IAAI,CAAsB0J,QAAQ,CAAE2D,EAAmBrN,AAAvD,IAAI,CAA4DqN,gBAAgB,CAAEvT,EAAUkG,AAA5F,IAAI,CAAiGlG,OAAO,CAAEyP,EAAOvJ,AAArH,IAAI,CAA0HuJ,IAAI,CAAE8F,EAAQ3F,EAAS4F,CAAC,GAAGC,GAAG,CAACvP,AAA7J,IAAI,CAAkKqP,KAAK,EAE5L,GADAhC,EAAiBlM,IAAI,CAACkO,GAClBvV,EAAQqR,cAAc,CAAE,CAExB,IAAMpE,EAAO2C,EAAS3C,IAAI,GACrByI,QAAQ,CAAC,+BACTD,GAAG,CAACF,EAEJrP,CARQ,IAAI,CAQHhH,KAAK,CAACyW,UAAU,EAC1B1I,EAAK2I,IAAI,CAAC,CACNC,OAAQ7V,EAAQ8R,iBAAiB,CACjC,eAAgB9R,EAAQ+R,iBAAiB,CACzC+D,KAAM9V,EAAQ6R,qBAAqB,AACvC,GAGJ5E,EAAK2I,IAAI,CAAC3I,EAAKuF,KAAK,CAAC,CACjB/O,EAAG,IACH2I,EAAG,IACHrC,MAAO0F,EACP5K,OAAQ4K,EACRrC,EAAGpN,EAAQoR,kBAAkB,AACjC,EAAGnE,EAAK8I,WAAW,KAEnB,IAAMC,EAAQpG,EACToD,IAAI,CAAC/D,GAAU8D,MAAM,CAAC,CAAC,CACpB,IACAtD,EAAO,EAAKrM,CAAAA,EAAQ,GAAK,CAAA,EACzBqM,EAAO,EAAI,EACd,CAAE,CACC,IACAA,EAAO,EAAKrM,CAAAA,EAAQ,GAAK,CAAA,EACzBqM,EAAO,EAAI,EACd,CAAE,CACC,IACAA,EAAO,EAAKrM,CAAAA,EAAQ,EAAI,EAAC,EACzBqM,EAAO,EACV,CAAC,CAAEzP,EAAQ2P,QAAQ,GACnB+F,QAAQ,CAAC,8BACTD,GAAG,CAAClC,CAAgB,CAACnQ,EAAM,CAC3B8C,CAxCQ,IAAI,CAwCHhH,KAAK,CAACyW,UAAU,EAC1BK,EAAMJ,IAAI,CAAC,CACPE,KAAM9V,EAAQ4R,gBAAgB,AAClC,EAER,CACJ,CAQA+B,KAAK/D,CAAQ,CAAE5P,CAAO,CAAEd,CAAK,CAAE,CAE3BgH,AADiB,IAAI,CACZqN,gBAAgB,CAAG,EAAE,CAC9BrN,AAFiB,IAAI,CAEZ0J,QAAQ,CAAGA,EACpB1J,AAHiB,IAAI,CAGZlF,WAAW,CAAGhB,EACvBkG,AAJiB,IAAI,CAIZlG,OAAO,CAAG4S,GAAgB1B,GAA6BmB,GAAejN,SAAS,CAAEpF,GAC1FkG,AALiB,IAAI,CAKZlG,OAAO,CAACqF,MAAM,CAAGwN,GAAe3M,AALxB,IAAI,CAK6BlG,OAAO,CAACqF,MAAM,CAAE,IAClEa,AANiB,IAAI,CAMZhH,KAAK,CAAGA,EAEjBgH,AARiB,IAAI,CAQZuJ,IAAI,CAAGoD,GAAe3M,AARd,IAAI,CAQmBlG,OAAO,CAACyP,IAAI,CAAEvJ,AARrC,IAAI,CAQ0ClG,OAAO,CAAC6E,MAAM,EAEzE7E,EAAQ2F,OAAO,GACfO,AAXa,IAAI,CAWRU,MAAM,GACfV,AAZa,IAAI,CAYR0N,SAAS,GAE1B,CACAO,iBAAiB7T,CAAC,CAAE,CAChB,IAAuByU,EAAkB7O,AAAxB,IAAI,CAA6BhH,KAAK,CAAC+W,OAAO,EAAEC,UAAU5V,IAAMA,EAAG6V,EAAgBjQ,AAAnF,IAAI,CAAwF4O,yBAAyB,CAACC,EACvI7O,CADiB,IAAI,CACZmN,MAAM,CAAG8C,EAAc9C,MAAM,CACtCnN,AAFiB,IAAI,CAEZoN,MAAM,CAAG6C,EAAc7C,MAAM,CACtCpN,AAHiB,IAAI,CAGZkQ,aAAa,CAAG,CAAClQ,AAHT,IAAI,CAGc4J,IAAI,CAAE5J,AAHxB,IAAI,CAG6B2J,EAAE,CAAC,CACrD3J,AAJiB,IAAI,CAIZmQ,aAAa,CAAG,CAAA,CAC7B,CAKAhC,iBAAiB/T,CAAC,CAAE,KAGmBZ,EAFnC,IAAuBqV,EAAkB7O,AAAxB,IAAI,CAA6BhH,KAAK,CAAC+W,OAAO,EAAEC,UAAU5V,IAAMA,EAA+BgW,EAAYtW,AAA9BkG,AAA7E,IAAI,CAAkFlG,OAAO,CAAsB2P,QAAQ,CACxI,SAAW,SAAUyG,EAAgBlQ,AADxB,IAAI,CAC6BkQ,aAAa,EAAI,EAAE,AAKjElQ,CANa,IAAI,CAMRmQ,aAAa,EAErB,CAAA,CAAC/V,EAAEiW,OAAO,EAAIjW,AAA4B,IAA5BA,EAAEiW,OAAO,CAAC,EAAE,CAACD,EAAU,AAAK,IAG3C5W,EAAS8W,AAFOtQ,AATH,IAAI,CASQ4O,yBAAyB,CAACC,EAAgB,CAACuB,EAAU,CAC7DpQ,AAVJ,IAAI,AAUQ,CAACoQ,EAAU,CAEpCpQ,AAZa,IAAI,CAYRuQ,UAAU,CAAG,CAAA,EACtBvQ,AAba,IAAI,CAaR0O,cAAc,CAACwB,CAAa,CAAC,EAAE,CAAG1W,EAAQ0W,CAAa,CAAC,EAAE,CAAG1W,GAClEwG,AAdS,IAAI,CAcJuQ,UAAU,EACnB9D,GAfS,IAAI,CAeO,UAAW,CAC3B7C,KAAM5J,AAhBD,IAAI,CAgBM4J,IAAI,CACnBD,GAAI3J,AAjBC,IAAI,CAiBI2J,EAAE,CACf1H,QAAS,YACTgI,QAAS7P,EAAEkG,IAAI,CACfqO,SAAUvU,CACd,GAGZ,CAKAgU,eAAehU,CAAC,CAAE,CAEV4F,AADa,IAAI,CACRuQ,UAAU,EACnB9D,GAFa,IAAI,CAEG,UAAW,CAC3B7C,KAAM5J,AAHG,IAAI,CAGE4J,IAAI,CACnBD,GAAI3J,AAJK,IAAI,CAIA2J,EAAE,CACf1H,QAAS,YACTgI,QAAS7P,EAAEkG,IAAI,CACfqO,SAAUvU,CACd,GAEJ4F,AAViB,IAAI,CAUZmQ,aAAa,CAClBnQ,AAXa,IAAI,CAWRuQ,UAAU,CACfvQ,AAZS,IAAI,CAYJmN,MAAM,CACXnN,AAbK,IAAI,CAaAoN,MAAM,CAAG,IAClC,CAgBA1C,SAASnN,CAAC,CAAE2I,CAAC,CAAErC,CAAK,CAAElF,CAAM,CAAE,CAC1B,GAAmD,CAAEwM,eAAAA,CAAc,CAAEhM,OAAAA,EAAS,CAAC,CAAEsK,SAAAA,CAAQ,CAAE,CAA1DzJ,AAAhB,IAAI,CAAqBlG,OAAO,CAAsD0W,EAASxQ,AAA/F,IAAI,CAAoGyQ,QAAQ,CAAG,UAAY,OAC5IzB,EAAUrQ,EAAQuQ,EAAU,EAEhClP,AAHiB,IAAI,CAGZqP,KAAK,CAACqB,IAAI,GACnB1Q,AAJiB,IAAI,CAIZzC,CAAC,CAAGA,EACbyC,AALiB,IAAI,CAKZkG,CAAC,CAAGA,EAAI,IAAI,CAACgG,gBAAgB,CACtClM,AANiB,IAAI,CAMZ6D,KAAK,CAAGA,EACjB7D,AAPiB,IAAI,CAOZrB,MAAM,CAAGA,EAClBqB,AARiB,IAAI,CAQZgP,OAAO,CAAGA,EACnBhP,AATiB,IAAI,CASZkP,OAAO,CAAGA,EAEfzF,GACAzJ,AAZa,IAAI,CAYR6D,KAAK,CAAG7D,AAZJ,IAAI,CAYSkP,OAAO,CAAGrL,EAAQqL,EAAUlP,AAZzC,IAAI,CAY8CuJ,IAAI,CACnEvJ,AAba,IAAI,CAaRgP,OAAO,CAAGA,EAAU,EAC7BhP,AAda,IAAI,CAcRkP,OAAO,CAAGA,EAAU/D,EAAiBnL,AAdjC,IAAI,CAcsCuJ,IAAI,CAAG,EAE9DvJ,AAhBa,IAAI,CAgBRiP,QAAQ,CAAGtQ,EAAUwM,CAAAA,EAAiBtH,AAAQ,EAARA,EAAY,CAAA,EAC3D7D,AAjBa,IAAI,CAiBRzC,CAAC,CAAGA,GAAQ4B,IAGrBa,AApBa,IAAI,CAoBRrB,MAAM,CAAGA,EAASqB,AApBd,IAAI,CAoBmBuJ,IAAI,CACxCvJ,AArBa,IAAI,CAqBRgP,OAAO,CAAGA,EAAU7D,EAAiBnL,AArBjC,IAAI,CAqBsCuJ,IAAI,CAAG,EAE9DvJ,AAvBa,IAAI,CAuBRiP,QAAQ,CAAGpL,EAASsH,CAAAA,EAAiBxM,AAAS,EAATA,EAAa,CAAA,EAC3DqB,AAxBa,IAAI,CAwBRkG,CAAC,CAAGlG,AAxBA,IAAI,CAwBKkG,CAAC,CAAG/G,GAG9Ba,AA3BiB,IAAI,CA2BZqP,KAAK,CAACmB,EAAO,CAAC,CACnBG,WAAYpT,EACZqT,WAAY5Q,AA7BC,IAAI,CA6BIkG,CAAC,AAC1B,GAEAlG,AAhCiB,IAAI,CAgCZgO,KAAK,CAACwC,EAAO,CAAC,CACnB3M,MAAOA,EACPlF,OAAQA,CACZ,GAEAqB,AArCiB,IAAI,CAqCZqN,gBAAgB,CAAC,EAAE,CAACmD,EAAO,CAAC,CACjCG,WAAYlH,EAAW,EAAI5F,EAAQmL,EACnC4B,WAAYnH,EAAW9K,EAASuQ,EAAU,CAC9C,EACJ,CAOAC,cAAe,CACX,IAAI,CAACjC,OAAO,CAACrU,OAAO,CAAC,SAAU4V,CAAI,EAC/B7B,GAAYlT,KAAK,CAAC,KAAM+U,EAC5B,GACA,IAAI,CAACvB,OAAO,CAACvS,MAAM,CAAG,CAC1B,CAOA+F,QAAS,CACL,IAAuBgJ,EAAW1J,AAAjB,IAAI,CAAsB0J,QAAQ,CAAE5P,EAAUkG,AAA9C,IAAI,CAAmDlG,OAAO,CAAEyP,EAAOvJ,AAAvE,IAAI,CAA4EuJ,IAAI,CAAEkG,EAAazP,AAAnG,IAAI,CAAwGhH,KAAK,CAACyW,UAAU,CAAEJ,EAAQ3F,EAAS4F,CAAC,CAAC,aAC7JI,IAAI,CAAC,CACNxK,OAAQpL,EAAQoL,MAAM,AAC1B,GACK2L,IAAI,GACJtB,GAAG,EAERvP,CAPiB,IAAI,CAOZqP,KAAK,CAAGA,EAEjBrP,AATiB,IAAI,CASZgO,KAAK,CAAGtE,EAAS3C,IAAI,GACzByI,QAAQ,CAAC,8BACTE,IAAI,CAAC,CACNxI,EAAGpN,EAAQmS,iBAAiB,EAAI,EAChCtN,OAAQ4K,EACR1F,MAAO0F,CACX,GAAGgG,GAAG,CAACF,GACFI,GACDzP,AAjBa,IAAI,CAiBRgO,KAAK,CAAC0B,IAAI,CAAC,CAChBE,KAAM9V,EAAQiS,oBAAoB,CAClC4D,OAAQ7V,EAAQkS,gBAAgB,CAChC,eAAgBlS,EAAQoS,gBAAgB,AAC5C,GAEJ,IAAMA,EAAmBlM,AAvBR,IAAI,CAuBakM,gBAAgB,CAC9ClM,AAxBa,IAAI,CAwBRgO,KAAK,CAAC6B,WAAW,GAC9B7P,AAzBiB,IAAI,CAyBZgO,KAAK,CAAC0B,IAAI,CAAC,CAChBnS,EAAG,CAAC+O,GAAM,EAAGJ,GACbhG,EAAG,CAACoG,GAAM,EAAGJ,EACjB,GAEAlM,AA9BiB,IAAI,CA8BZ8N,cAAc,CAAGpE,EAAS4F,CAAC,GAAGC,GAAG,CAACF,GAC3CrP,AA/BiB,IAAI,CA+BZd,SAAS,CAAGwK,EAAS3C,IAAI,GAC7ByI,QAAQ,CAAC,8BACTE,IAAI,CAAC,CACN/Q,OAAQ4K,EAAO2C,EACfrI,MAAO0F,EAAO2C,EACdhF,EAAGpN,EAAQmR,eAAe,EAAI,CAClC,GAAGsE,GAAG,CAACvP,AArCU,IAAI,CAqCL8N,cAAc,EAC9B9N,AAtCiB,IAAI,CAsCZ8Q,eAAe,CAAGpH,EACtBoD,IAAI,CAAC/D,GAAU8D,MAAM,CAAC,CACvB,CAAC,IAAK,GAAItD,EAAO,EAAE,CACnB,CAAC,IAAK,GAAI,EAAIA,EAAO,EAAE,CACvB,CAAC,IAAK,EAAGA,EAAO,EAAE,CAClB,CAAC,IAAK,EAAG,EAAIA,EAAO,EAAE,CACtB,CAAC,IAAK,EAAGA,EAAO,EAAE,CAClB,CAAC,IAAK,EAAG,EAAIA,EAAO,EAAE,CACzB,CAAEzP,EAAQ2P,QAAQ,GACd+F,QAAQ,CAAC,+BACTD,GAAG,CAACvP,AAhDQ,IAAI,CAgDH8N,cAAc,EAC3B2B,IACDzP,AAlDa,IAAI,CAkDRd,SAAS,CAACwQ,IAAI,CAAC,CACpBE,KAAM9V,EAAQyR,kBAAkB,CAChCoE,OAAQ7V,EAAQ2R,cAAc,CAC9B,eAAgB3R,EAAQ0R,cAAc,AAC1C,GACAxL,AAvDa,IAAI,CAuDR8Q,eAAe,CAACpB,IAAI,CAAC,CAC1BC,OAAQ7V,EAAQgS,UAAU,CAC1B,eAAgB,CACpB,IAEJ9L,AA5DiB,IAAI,CA4DZuN,oBAAoB,CAAGvN,AA5Df,IAAI,CA4DoBd,SAAS,CAAC2Q,WAAW,GAC9D7P,AA7DiB,IAAI,CA6DZ8N,cAAc,CAAC9K,SAAS,CAAC,CAACsJ,GAAM,EAAGtM,AA7D3B,IAAI,CA6DgCuN,oBAAoB,EAAG,CAACjB,GAAM,EAAGtM,AA7DrE,IAAI,CA6D0EuN,oBAAoB,GAEnHvN,AA/DiB,IAAI,CA+DZoP,mBAAmB,CAAC,GAC7BpP,AAhEiB,IAAI,CAgEZoP,mBAAmB,CAAC,EACjC,CAWAhF,SAASR,CAAI,CAAED,CAAE,CAAE,KAQXoH,EAAQC,EAPZ,IAAuBlX,EAAUkG,AAAhB,IAAI,CAAqBlG,OAAO,CAAE2P,EAAW3P,EAAQ2P,QAAQ,CAAE4B,EAAWvR,EAAQuR,QAAQ,CAAE4F,EAAYjR,AAAxG,IAAI,CAA6GiP,QAAQ,CAAEuB,EAAS,AAAC,CAAA,IAAI,CAACC,QAAQ,EAC9J,IAAI,CAACF,UAAU,EACd,IAAI,CAACvX,KAAK,CAAC+E,SAAS,EAAI,IAAI,CAAC/E,KAAK,CAAC+E,SAAS,CAACwS,UAAU,CAAiB,OAAZ,UAClE,GAAI,CAAChE,GAAkB0E,GACnB,OAEJ,IAAMC,EAAOD,EAAYjU,KAAKnB,GAAG,CAAC8N,EAAI,GAGtCoH,EAAS/T,KAAKmU,IAAI,CAACF,EADnBrH,CAAAA,EAAO5M,KAAKC,GAAG,CAAC2M,EAAM,EAAC,GAEvB5J,AAViB,IAAI,CAUZ+O,eAAe,CAAGiC,EAAU3E,GAAuB6E,EAAOH,GAE/DC,EAAU3F,IACV0F,EAAS,AAACE,CAAAA,EAAY5F,EAAW2F,CAAM,EAAKpH,EAC5CoH,EAAU3F,GAEd,IAAM+F,EAASpU,KAAKqU,KAAK,CAACN,EAAS/Q,AAhBlB,IAAI,CAgBuBgP,OAAO,CAAGhP,AAhBrC,IAAI,CAgB0CkP,OAAO,EAChEoC,EAAeN,EAAU,EAAI,EAEnChR,CAnBiB,IAAI,CAmBZ4J,IAAI,CAAGA,EAChB5J,AApBiB,IAAI,CAoBZ2J,EAAE,CAAGA,EACTF,GAcDzJ,AAnCa,IAAI,CAmCR8N,cAAc,CAAC0C,EAAO,CAAC,CAC5BI,WAAYQ,CAChB,GACApR,AAtCa,IAAI,CAsCRd,SAAS,CAACsR,EAAO,CAAC,CACvB7R,OAAQqS,CACZ,GACAhR,AAzCa,IAAI,CAyCR8Q,eAAe,CAACN,EAAO,CAAC,CAC7BI,WAAYU,CAChB,GACAtR,AA5Ca,IAAI,CA4CRwN,YAAY,CAAG4D,EACxBpR,AA7Ca,IAAI,CA6CRsN,aAAa,CAAG,IAvBzBtN,AAtBa,IAAI,CAsBR8N,cAAc,CAAC0C,EAAO,CAAC,CAC5BG,WAAYS,CAChB,GACApR,AAzBa,IAAI,CAyBRd,SAAS,CAACsR,EAAO,CAAC,CACvB3M,MAAOmN,CACX,GACAhR,AA5Ba,IAAI,CA4BR8Q,eAAe,CAACN,EAAO,CAAC,CAC7BG,WAAYW,CAChB,GACAtR,AA/Ba,IAAI,CA+BRsN,aAAa,CAAG8D,EACzBpR,AAhCa,IAAI,CAgCRwN,YAAY,CAAG,GAexBwD,GAAW,GACXhR,AAhDa,IAAI,CAgDR8Q,eAAe,CAACD,IAAI,GAG7B7Q,AAnDa,IAAI,CAmDR8Q,eAAe,CAACJ,IAAI,GAGR,CAAA,IAArB5W,EAAQyX,QAAQ,GACZ3H,GAAQ,GAAKD,GAAM,EACnB3J,AAxDS,IAAI,CAwDJqP,KAAK,CAACwB,IAAI,GAGnB7Q,AA3DS,IAAI,CA2DJqP,KAAK,CAACqB,IAAI,IAG3B1Q,AA9DiB,IAAI,CA8DZyQ,QAAQ,CAAG,CAAA,CACxB,CAQAzG,qBAAqBwH,CAAS,CAAE,CAC5B,OAAQ7E,GAAe,IAAI,CAAC7S,OAAO,CAACsR,UAAU,CAAE,AAAC/T,IAA+Eoa,GAAG,EAC/H,CAAC,AAACpa,IAA+EoG,aAAa,EAC9F,CAAC,IAAI,CAACzE,KAAK,CAAC0Y,OAAO,GAEnBF,AAAc,YAAdA,GACAA,AAAc,aAAdA,GAEA,CAACjF,GAAkBiF,EAC3B,CACAjD,WAAWnU,CAAC,CAAE,CAEV,IAAMyU,EAAkB7O,AADP,IAAI,CACYhH,KAAK,CAAC+W,OAAO,EAAEC,UAAU5V,IAAMA,EAAG8H,EAAQlC,AAD1D,IAAI,CAC+D2J,EAAE,CAAG3J,AADxE,IAAI,CAC6E4J,IAAI,CAAE/K,EAAMmB,AAD7F,IAAI,CACkGkG,CAAC,CAAGlG,AAD1G,IAAI,CAC+GwN,YAAY,CAAEhP,EAAOwB,AADxI,IAAI,CAC6IzC,CAAC,CAAGyC,AADrJ,IAAI,CAC0JsN,aAAa,AACxL,AAACtN,CAFY,IAAI,CAEPlG,OAAO,CAAC2P,QAAQ,EAAIoF,EAAgBzB,MAAM,CAAGvO,GACtD,CAACmB,AAHW,IAAI,CAGNlG,OAAO,CAAC2P,QAAQ,EAAIoF,EAAgB1B,MAAM,CAAG3O,EAExDwB,AALa,IAAI,CAKR0O,cAAc,CAAC1O,AALX,IAAI,CAKgB4J,IAAI,CAAG1H,EAAOlC,AALlC,IAAI,CAKuC2J,EAAE,CAAGzH,GAI7DlC,AATa,IAAI,CASR0O,cAAc,CAAC1O,AATX,IAAI,CASgB4J,IAAI,CAAG1H,EAAOlC,AATlC,IAAI,CASuC2J,EAAE,CAAGzH,GAEjEuK,GAXiB,IAAI,CAWD,UAAW,CAC3B7C,KAAM5J,AAZO,IAAI,CAYF4J,IAAI,CACnBD,GAAI3J,AAbS,IAAI,CAaJ2J,EAAE,CACf1H,QAAS,YACT0M,SAAUvU,CACd,EACJ,CAQAW,OAAOjB,CAAO,CAAE,CACZ,IAAI,CAACyI,OAAO,GACZ,IAAI,CAACkL,IAAI,CAAC,IAAI,CAACzU,KAAK,CAAC0Q,QAAQ,CAAEgD,GAAgB,CAAA,EAAM,IAAI,CAAC5S,OAAO,CAAEA,GAAU,IAAI,CAACd,KAAK,CAC3F,CASA0V,eAAe9E,CAAI,CAAED,CAAE,CAAE,CACjBA,EAAK,IACLC,EAAOyC,GAAuB,EAAIA,GAAuB1C,EAAKC,IAC9DD,EAAK,GAELC,EAAO,IACPD,EAAK0C,GAAuB1C,EAAKC,GACjCA,EAAO,GAEX,IAAI,CAACA,IAAI,CAAGA,EACZ,IAAI,CAACD,EAAE,CAAGA,CACd,CACJ,CAMAZ,GAAUoD,cAAc,CAAGnB,GAM3BmB,GAAejN,SAAS,CAAGwN,GAAgB,CAAA,EAAM3D,GAAUoD,cAAc,CAAEA,GAAejN,SAAS,EASnG,IAAIyS,GAAuH9b,EAAoB,KAC3I+b,GAA2I/b,EAAoBI,CAAC,CAAC0b,IAerK,GAAM,CAAExF,eAAgB0F,EAAwB,CAAE,CAAIxa,IAEhD,CAAEoG,cAAeqU,EAAuB,CAAE,CAAIza,IAK9C,CAAEN,UAAW,CAAEgN,QAAAA,EAAO,CAAE,CAAE,CAAI6N,KAE9B,CAAE9Z,SAAUia,EAAkB,CAAEC,MAAAA,EAAK,CAAE/Z,aAAcga,EAAsB,CAAE/Z,QAASga,EAAiB,CAAE1F,wBAAyB2F,EAAiC,CAAEC,MAAAA,EAAK,CAAE/J,OAAQgK,EAAgB,CAAEC,KAAAA,EAAI,CAAE7F,UAAW8F,EAAmB,CAAEpa,QAASqa,EAAiB,CAAEpa,SAAUqa,EAAkB,CAAE9U,MAAO+U,EAAe,CAAEpa,KAAMqa,EAAc,CAAE/F,YAAagG,EAAqB,CAAEC,MAAAA,EAAK,CAAE,CAAIxb,IAYzY,SAASyb,GAAOC,CAAO,CAAE,GAAGtE,CAAI,EAC5B,IAAMuE,EAAU,EAAE,CAACC,MAAM,CAAChc,IAAI,CAACwX,EAAMgE,IACrC,GAAIO,EAAQrY,MAAM,CACd,OAAOqC,IAAI,CAAC+V,EAAQ,CAACrZ,KAAK,CAAC,EAAGsZ,EAEtC,CAgBA,MAAME,GAMF,OAAOjX,QAAQ6E,CAAU,CAAE3E,CAAS,CAAED,CAAW,CAAE,CAC/C2E,GAAoC5E,OAAO,CAAC6E,EAAYoS,IACxD1K,GAA+BvM,OAAO,CAAC6E,EAAY3E,EAAWD,EAClE,CAMAM,YAAYxD,CAAK,CAAE,CACf,IAAI,CAACma,OAAO,CAAG,CAAA,EACf,IAAI,CAAC9U,eAAe,CAAG,EACvB,IAAI,CAACoP,IAAI,CAACzU,EACd,CAwBAoa,WAAW7V,CAAC,CAAEL,CAAK,CAAEqB,CAAQ,CAAE8U,CAAI,CAAE,CACjC,IAAwB1U,EAASZ,AAAf,IAAI,CAAqBiB,gBAAgB,CAAC4E,OAAO,CAACjF,MAAM,CAE1EZ,AAFkB,IAAI,CAEZ6F,OAAO,CAAC1G,EAAM,CAACmW,EAAK,CAAC9U,EAAW,CACtCoS,WAAY3T,KAAKsW,KAAK,CAACvV,AAHT,IAAI,CAGeS,IAAI,CAAGT,AAH1B,IAAI,CAGgCY,MAAM,CAAG,GAC3DiS,WAAY5T,KAAKsW,KAAK,CAACvV,AAJT,IAAI,CAIec,GAAG,CAAG0U,SAAShW,EAAG,IAAM,GAAMoB,EACnE,EAAI,CACAgS,WAAY3T,KAAKsW,KAAK,CAACvV,AANT,IAAI,CAMeS,IAAI,CAAG+U,SAAShW,EAAG,KACpDqT,WAAY5T,KAAKsW,KAAK,CAACvV,AAPT,IAAI,CAOec,GAAG,CAAGd,AAPzB,IAAI,CAO+BY,MAAM,CAAG,EAAIA,EAAS,EAAI,EAC/E,EACJ,CAmBA6U,YAAYC,CAAS,CAAEC,CAAS,CAAEnV,CAAQ,CAAE8U,CAAI,CAAE,CAC9C,IAAwB1P,EAAa5F,AAAnB,IAAI,CAAyBiB,gBAAgB,CAAC2E,UAAU,CAAEW,EAAevG,AAAzE,IAAI,CAA+E4V,OAAO,CAAC9D,WAAW,GAAI+D,EAActP,EAAe,EAAGuP,EAAoB,AAACvP,EAAe,EAAK,EACrMhG,EAAmBP,AADD,IAAI,CACOO,gBAAgB,CAAEwV,EAAgB/V,AAD7C,IAAI,CACmDwL,IAAI,CAAEwK,EAAehW,AAD5E,IAAI,CACkFc,GAAG,CAAEF,EAASZ,AADpG,IAAI,CAC0GY,MAAM,CAAEqV,EAAUD,EAAeH,EAAaK,EAAUF,EAAepV,EACnMH,EAAOT,AAFO,IAAI,CAEDS,IAAI,CAAE0V,EAAapH,EACpCvO,GACA2V,EAAcH,EAAeL,EAAYG,EACzCH,EAAYK,EAAeN,EAAYI,EACvC/G,EAAO,CACH,CACI,IACAtO,EAAOG,EACPoV,EAAezV,EAAmBuV,EACrC,CAED,CAAC,IAAKrV,EAAOG,EAAQuV,EAAY,CACjC,CAAC,IAAK1V,EAAM0V,EAAY,CACxB,CAAC,IAAK1V,EAAMkV,EAAU,CACtB,CAAC,IAAKlV,EAAOG,EAAQ+U,EAAU,CAC/B,CACI,IACAlV,EAAOG,EACPoV,EAAeD,EAAgBxV,EAClC,CACJ,CACGqF,GACAmJ,EAAK3L,IAAI,CAET,CAAC,IAAK3C,EAAOG,EAAQuV,EAAcN,EAAY,CAE/C,CACI,IACApV,EAAOG,EACP+U,EAAYE,EACf,IAILpV,GAAQF,EACRmV,GAAajV,EAAOF,EAAmBuV,EACvCH,GAAalV,EAAOF,EAAmBuV,EACvC/G,EAAO,CAEH,CAAC,IAAKtO,EAAMwV,EAAQ,CAEpB,CAAC,IAAKP,EAAWO,EAAQ,CAEzB,CAAC,IAAKP,EAAWQ,EAAQ,CAEzB,CAAC,IAAKP,EAAWO,EAAQ,CAEzB,CAAC,IAAKP,EAAWM,EAAQ,CAEzB,CACI,IACAxV,EAAOsV,EAAgBxV,AAAmB,EAAnBA,EACvB0V,EACH,CACJ,CACGrQ,GACAmJ,EAAK3L,IAAI,CAET,CAAC,IAAKsS,EAAYG,EAAaI,EAAQ,CAEvC,CAAC,IAAKN,EAAYE,EAAaI,EAAQ,GAG/CjW,AAjEkB,IAAI,CAiEZ4V,OAAO,CAACN,EAAK,CAAC,CACpBjd,EAAG0W,CACP,EACJ,CAmBAqH,UAAUV,CAAS,CAAEC,CAAS,CAAEnV,CAAQ,CAAE8U,CAAI,CAAE,KAExC1U,EAAQkF,EAAOtG,EAAG2I,EADtB,IAAwB1H,EAAOT,AAAb,IAAI,CAAmBS,IAAI,CAAEK,EAAMd,AAAnC,IAAI,CAAyCc,GAAG,CAAEuV,EAAkBrW,AAApE,IAAI,CAA0EY,MAAM,CAIlGJ,GACAhB,EAAI,CAACiB,EAAMA,EAAMA,EAAK,CACtB0H,EAAI,CAACrH,EAAKA,EAAM4U,EAAW5U,EAAM6U,EAAU,CAC3C7P,EAAQ,CAACuQ,EAAiBA,EAAiBA,EAAgB,CAC3DzV,EAAS,CACL8U,EACAC,EAAYD,EACZ1V,AAXU,IAAI,CAWJwL,IAAI,CAAGmK,EACpB,GAGDnW,EAAI,CAACiB,EAAMA,EAAOiV,EAAWjV,EAAOkV,EAAU,CAC9CxN,EAAI,CAACrH,EAAKA,EAAKA,EAAI,CACnBgF,EAAQ,CACJ4P,EACAC,EAAYD,EACZ1V,AApBU,IAAI,CAoBJwL,IAAI,CAAGmK,EACpB,CACD/U,EAAS,CAACyV,EAAiBA,EAAiBA,EAAgB,EAEhErW,AAxBkB,IAAI,CAwBZsW,MAAM,CAACxb,OAAO,CAAC,CAACyb,EAAO3Y,KAC7B2Y,CAAK,CAACjB,EAAK,CAAC,CACR9V,EAAGA,CAAC,CAAC5B,EAAE,CACPuK,EAAGA,CAAC,CAACvK,EAAE,CACPkI,MAAOA,CAAK,CAAClI,EAAE,CACfgD,OAAQA,CAAM,CAAChD,EAAE,AACrB,EACJ,EACJ,CAeA4Y,gBAAiB,CACb,IAAMxW,EAAY,IAAI,CAAEiB,EAAmBjB,EAAUiB,gBAAgB,CAAE2E,EAAa3E,EAAiB2E,UAAU,CAAE3K,EAAQ+E,EAAU/E,KAAK,CAAEuF,EAAWvF,EAAMuF,QAAQ,CAAEmL,EAAW1Q,EAAM0Q,QAAQ,CAAE8K,EAAc,CAC1MC,OAAQlW,EAAW,YAAc,WACrC,EAEAmW,EAAiB3W,EAAU2W,cAAc,EACpC3W,CAAAA,EAAU2W,cAAc,CAAGhL,EACvB4F,CAAC,CAAC,aACFI,IAAI,CAAC,CACNxK,OAAQ,EACRyP,WAAY,QAChB,GACKpF,GAAG,EAAC,EAkCb,GAhCA,CACI,CAAC5L,EACDA,EACA,CAACA,EACJ,CAAC9K,OAAO,CAAC,CAAC+b,EAAS1X,KAChB,IAAMoX,EAAQvW,EAAUsW,MAAM,CAACnX,EAAM,EAChCa,CAAAA,EAAUsW,MAAM,CAACnX,EAAM,CAAGwM,EAAS3C,IAAI,GACnCyI,QAAQ,CAAC,4BACTtS,CAAAA,AAAU,IAAVA,EAAc,UAAY,UAAS,GACnCqS,GAAG,CAACmF,EAAc,CACtB1b,CAAAA,EAAMyW,UAAU,GACjB6E,EAAM5E,IAAI,CAAC,CACPE,KAAMgF,EAAU5V,EAAiBmF,QAAQ,CAAG,eAChD,GACc,IAAVjH,GACAoX,EAAMO,GAAG,CAACL,GAGtB,GAEKzW,EAAU4V,OAAO,EAClB5V,CAAAA,EAAU4V,OAAO,CAAGjK,EAASoD,IAAI,GAC5B0C,QAAQ,CAAC,gCACTD,GAAG,CAACmF,EAAc,EAEtB1b,EAAMyW,UAAU,EACjB1R,EAAU4V,OAAO,CAACjE,IAAI,CAAC,CACnB,eAAgB1Q,EAAiBsF,YAAY,CAC7CqL,OAAQ3Q,EAAiBqF,YAAY,AACzC,GAGArF,EAAiB4E,OAAO,EAAEnE,QAAS,CACnC,IAAMqV,EAAiB9V,EAAiB4E,OAAO,CAAE,CAAEjF,OAAAA,CAAM,CAAEkF,MAAAA,CAAK,CAAE,CAAGiR,EACrE,CAAC,EAAG,EAAE,CAACjc,OAAO,CAAC,AAACqE,IACZ,IAAM6X,EAAaD,EAAe/Q,OAAO,CAAC7G,EAAM,CAChD,GAAI,AAACa,EAAU6F,OAAO,CAAC1G,EAAM,EACzBa,EAAU6F,OAAO,CAAC1G,EAAM,CAAC8X,SAAS,GAAKD,EAatC,CAAA,GAAI,CAAChX,EAAU6F,OAAO,CAAC1G,EAAM,CAAC+X,KAAK,EACpClX,EAAU6F,OAAO,CAAC1G,EAAM,CAAC6X,UAAU,GAAKA,EAAY,CACpD,IAAsCjI,EAAOoI,AAA5BnR,EAAO,CAACgR,EAAW,CAAkB9d,IAAI,CAAC8M,GAAS,CAACF,EAAQ,EAAI,EAAG,EAAGA,EAAOlF,GAC9FZ,EAAU6F,OAAO,CAAC1G,EAAM,CAACwS,IAAI,CAAC,CAC1BtZ,EAAG0W,CACP,GACA/O,EAAU6F,OAAO,CAAC1G,EAAM,CAAC6X,UAAU,CAAGA,CAC1C,CAAA,MAlBIhX,EAAU6F,OAAO,CAAC1G,EAAM,EAAEqF,UAC1BxE,EAAU6F,OAAO,CAAC1G,EAAM,CAAGwM,EAASyL,MAAM,CAACJ,EAAY,CAAClR,EAAQ,EAAI,EAAG,EAAGA,EAAOlF,EAAQmW,GAGzF/W,EAAU6F,OAAO,CAAC1G,EAAM,CAACwS,IAAI,CAAC,CAAExK,OAAQ,EAAIhI,CAAM,GAC7CsS,QAAQ,CAAC,2DAEV,CAAC,OAAQ,QAAQ,CAACtS,EAAM,EAAEqS,GAAG,CAACmF,GAClC3W,EAAUqX,cAAc,EAWxBpc,CAAAA,EAAMuF,QAAQ,EACdR,EAAU6F,OAAO,CAAC1G,EAAM,CAACwS,IAAI,CAAC,CAC1B2F,SAAU,GACVC,gBAAiBtY,KAAKqU,KAAK,CAAC,CAACxN,EAAQ,GACrC0R,gBAAiB,AAAC5W,CAAAA,EAASkF,CAAI,EAAK,CACxC,GAEC7K,EAAMyW,UAAU,EACjB1R,EAAU6F,OAAO,CAAC1G,EAAM,CACnBwS,IAAI,CAAC,CACNE,KAAMkF,EAAe7Q,eAAe,CACpC0L,OAAQmF,EAAe5Q,WAAW,CAClC,eAAgB4Q,EAAe9Q,SAAS,CACxCH,MAAOiR,EAAejR,KAAK,CAC3BlF,OAAQmW,EAAenW,MAAM,CAC7BpB,EAAG,CAACsG,EAAQ,EAAI,EAChBqC,EAAG,CACP,GACK2O,GAAG,CAACL,EAEjB,EACJ,CACJ,CAUAzZ,OAAOjB,CAAO,CAAEpB,EAAS,CAAA,CAAK,CAAE,CAC5B,IAAMM,EAAQ,IAAI,CAACA,KAAK,CAAEwc,EAAiBxc,EAAMc,OAAO,CAACd,KAAK,CAACuF,QAAQ,GACnEvF,EAAMkG,SAAS,EAAEpF,QAAQ2P,SAK7B,GAJAiJ,GAAgB,CAAA,EAAM1Z,EAAMc,OAAO,CAACiE,SAAS,CAAEjE,GAC/C,IAAI,CAACkF,gBAAgB,CAAGhG,EAAMc,OAAO,CAACiE,SAAS,EAAI,CAAC,EACpD,IAAI,CAAC0X,WAAW,GAEZvD,GAAkBpY,EAAQ2F,OAAO,GAAK+V,EAGtC,OAFA,IAAI,CAACjT,OAAO,GACZ,IAAI,CAACmT,gBAAgB,CAAG5b,EAAQ2F,OAAO,EAAI,IAAI,CAACiW,gBAAgB,CACzD,IAAI,CAACjI,IAAI,CAACzU,GAErB,GAAI,IAAI,CAAC0c,gBAAgB,GACrB,IAAI,CAACvC,OAAO,CAAG,CAAA,EACoB,CAAA,IAA/BrZ,EAAQ6b,kBAAkB,EAC1B,IAAI,CAACC,UAAU,CAAC/c,OAAO,CAAC,AAACD,IACrBga,GAAsBha,EAAQ,cAAe,IAAI,CAACid,kBAAkB,CACxE,EAAG,IAAI,EAEP/b,EAAQ6b,kBAAkB,EAC1B,IAAI,CAACC,UAAU,CAAC/c,OAAO,CAAC,AAACD,IACrBA,EAAOkd,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmBnZ,EAAQ,cAAe,IAAI,CAACid,kBAAkB,EAChG,EAAG,IAAI,EAGP/b,CAAAA,EAAQlB,MAAM,EAAIkB,EAAQ8b,UAAU,AAAD,GACnC,IAAI,CAAC5X,aAAa,CAAC,KAAK,EAAG,CAAA,GAG3BlE,EAAQ6E,MAAM,EAAI7E,EAAQwB,KAAK,EAAIxB,EAAQqE,KAAK,EAAE,CAClD,IAAI,CAACQ,MAAM,CAAG7E,EAAQ6E,MAAM,EAAI,IAAI,CAACA,MAAM,CAC3C,IAAMoX,EAAU,IAAI,CAACC,eAAe,GACpC,IAAI,CAAC1a,KAAK,CAACP,MAAM,CAAC,CACd,GAAGjB,EAAQwB,KAAK,CAChBya,QAAAA,EACA,CAAC/c,EAAMuF,QAAQ,CAAG,QAAU,SAAS,CAAE,IAAI,CAACI,MAAM,CAClD,CAAC3F,EAAMuF,QAAQ,CAAG,SAAW,QAAQ,CAAE,KAAK,CAChD,EAAG,CAAA,GACH,IAAI,CAACJ,KAAK,CAACpD,MAAM,CAAC,CACd,GAAGjB,EAAQqE,KAAK,CAChB,CAACnF,EAAMuF,QAAQ,CAAG,QAAU,SAAS,CAAE,IAAI,CAACI,MAAM,AACtD,EAAG,CAAA,EACP,CAEAjG,GACAM,EAAMN,MAAM,EAEpB,CAeAgI,OAAO7E,CAAG,CAAEoB,CAAG,CAAEwF,CAAK,CAAEC,CAAK,CAAE,CAC3B,IAAwB1J,EAAQ+E,AAAd,IAAI,CAAoB/E,KAAK,CAAEsC,EAAQyC,AAAvC,IAAI,CAA6CzC,KAAK,CAAEwH,EAAaxH,EAAMwH,UAAU,EAAI,EAAGmT,EAAiB3a,EAAMsG,aAAa,CAACsU,IAAI,CAAGld,EAAMsC,KAAK,CAAC,EAAE,CAAGA,EAAOoa,EAAmB3X,AAAnL,IAAI,CAAyL2X,gBAAgB,CAAEjF,EAAW1S,AAA1N,IAAI,CAAgO0S,QAAQ,CAAElS,EAAWvF,EAAMuF,QAAQ,CAAE4X,EAAWnd,EAAMsC,KAAK,CAAC,EAAE,CAAC6a,QAAQ,CAAEC,EAAWpd,EAAMsC,KAAK,CAAC,EAAE,CAACxB,OAAO,CAACsc,QAAQ,CAAE9X,EAAmBP,AAA5W,IAAI,CAAkXO,gBAAgB,CACpZ+X,EAAgB/I,EAAeE,EAAcnP,EAAkBN,AADjD,IAAI,CACuDM,eAAe,CAAEyV,EAAeT,EAE7G,GAAI,IAAI,CAAC9C,UAAU,EAAI,CAAC2B,GAAkBzP,GACtC,OASJ,GAPI,IAAI,CAAC0Q,OAAO,EAEZ,IAAI,CAACoB,cAAc,GAEvB1Y,EAAMoW,GAAuBpW,EAAMiH,EAAa,GAChD7F,EAAMgV,GAAuBhV,EAAM6F,EAAa,GAE5C,CAAC2P,GAAmB5W,IAAQ,CAAC4W,GAAmBxV,GAAM,CAGtD,IAAIwT,EAKA,OAJAhO,EAAQ,EACRC,EAAQiQ,GAAerX,EAAMuI,KAAK,CAAEoS,EAAepS,KAAK,CAKhE,CACA9F,AAxBkB,IAAI,CAwBZS,IAAI,CAAGmU,GAAerX,EAAMkD,IAAI,CAE1CxF,EAAM+F,QAAQ,CAAGT,EACZC,CAAAA,EAAWvF,EAAMsd,SAAS,CAAG,CAAA,GAClC,IAAI5C,EAAY3V,AA5BE,IAAI,CA4BIwL,IAAI,CAAGuK,EAAgBnB,GAAerX,EAAM2R,GAAG,CAAE,AAAC1O,CAAAA,EAAWvF,EAAMud,UAAU,CAAGvd,EAAMsd,SAAS,AAAD,EACpH,EAAIhY,GAEJ+X,EADA9X,EACiBF,EAGAyV,EAAgB,EAAIxV,EAGzCmE,EAAQkQ,GAAelQ,EAAOnH,EAAMkb,QAAQ,CAAC3a,EAAK,CAAA,IAClD6G,EAAQiQ,GAAejQ,EAAOpH,EAAMkb,QAAQ,CAACvZ,EAAK,CAAA,IAE7CwV,GAAmBhQ,IAAUzF,KAAKyZ,GAAG,CAAChU,KAAW/F,MAClD+F,EAAQ,EACRC,EAAQ2T,GAGZ,IAAMtT,EAASzH,EAAMob,OAAO,CAACjU,EAAO,CAAA,GAAOS,EAAS5H,EAAMob,OAAO,CAAChU,EAAO,CAAA,GAAOiU,EAAe3Z,KAAKyZ,GAAG,CAACxE,GAAuB/O,EAASH,GACpI4T,CAAAA,EAAeR,EACX,IAAI,CAACS,WAAW,CAChBnU,EAAQnH,EAAMkb,QAAQ,CAACtT,EAASiT,EAAWrT,EAAY,CAAA,GAElD,IAAI,CAAC+T,YAAY,EACtBnU,CAAAA,EAAQpH,EAAMkb,QAAQ,CAACzT,EAASoT,EAAWrT,EAAY,CAAA,EAAI,EAG1DoP,GAAkBkE,IACvBnE,GAAuB0E,EAAe7T,GAAcsT,IAChD,IAAI,CAACQ,WAAW,CAChBnU,EAAQnH,EAAMkb,QAAQ,CAACtT,EAASkT,EAAWtT,EAAY,CAAA,GAElD,IAAI,CAAC+T,YAAY,EACtBnU,CAAAA,EAAQpH,EAAMkb,QAAQ,CAACzT,EAASqT,EAAWtT,EAAY,CAAA,EAAI,GAInE/E,AAhEkB,IAAI,CAgEZ2V,SAAS,CAAG1B,GAAMhV,KAAKC,GAAG,CAACwF,EAAOC,GAAQ,EAAGgR,GACvD3V,AAjEkB,IAAI,CAiEZ0V,SAAS,CAAGzB,GAAMjU,AAjEV,IAAI,CAiEgB+Y,UAAU,CAC5C/Y,AAlEc,IAAI,CAkER2V,SAAS,CAAG3V,AAlER,IAAI,CAkEc+Y,UAAU,CAC1C9Z,KAAKnB,GAAG,CAAC4G,EAAOC,GAAQ,EAAGgR,GAC/B3V,AApEkB,IAAI,CAoEZmE,KAAK,CAAGnE,AApEA,IAAI,CAoEM2V,SAAS,CAAG3V,AApEtB,IAAI,CAoE4B0V,SAAS,CAC3DC,EAAY1W,KAAKsW,KAAK,CAACvV,AArEL,IAAI,CAqEW2V,SAAS,EAC1C,IAAMD,EAAYzW,KAAKsW,KAAK,CAACvV,AAtEX,IAAI,CAsEiB0V,SAAS,EAC5CiC,IACA3X,AAxEc,IAAI,CAwER2W,cAAc,CAAChF,IAAI,CAAC,CAC1BiF,WAAY,SAChB,GAEAtB,EAAO5C,GAAY,CAAC1S,AA5EN,IAAI,CA4EYwS,UAAU,CAAG,UAAY,OACvDxS,AA7Ec,IAAI,CA6ERoW,SAAS,CAACV,EAAWC,EAAWnV,EAAU8U,GACpDtV,AA9Ec,IAAI,CA8ERyV,WAAW,CAACC,EAAWC,EAAWnV,EAAU8U,GAClDtV,AA/EU,IAAI,CA+EJiB,gBAAgB,CAAC4E,OAAO,CAACnE,OAAO,GAC1C1B,AAhFU,IAAI,CAgFJqV,UAAU,CAACK,EAAW,EAAGlV,EAAU8U,GAC7CtV,AAjFU,IAAI,CAiFJqV,UAAU,CAACM,EAAW,EAAGnV,EAAU8U,KAGjDtV,AApFc,IAAI,CAoFRmB,SAAS,GACfX,GACAiP,EAAezP,AAtFL,IAAI,CAsFWc,GAAG,CAAGP,EAC/BgP,EAAgBvP,AAvFN,IAAI,CAuFYS,IAAI,CAAGH,EAC5BqX,CAAAA,GAAoB,CAACO,EAAexX,QAAQ,CAAG,EAE5C,AAACwX,CAAAA,EAAerW,WAAW,EAAI,CAAA,EAE3BqW,EAAezL,eAAe,AAAD,EACzCnM,EAAkByV,EAAgB,EAAIxV,IAGtCkP,EAAezP,AAhGL,IAAI,CAgGWc,GAAG,CAAI6W,CAAAA,EAC5B3X,AAjGM,IAAI,CAiGAY,MAAM,CAChB,CAACN,CAAc,EACnBiP,EAAgBvP,AAnGN,IAAI,CAmGYS,IAAI,CAAGF,GAGrCP,AAtGc,IAAI,CAsGRmB,SAAS,CAACwL,QAAQ,CAAC4C,EAAeE,EAAc6I,EAAgBhY,GAE1EN,AAxGc,IAAI,CAwGRmB,SAAS,CAACkL,QAAQ,CAG5BrM,AA3Gc,IAAI,CA2GR0V,SAAS,CAAIK,CAAAA,GAAiB,CAAA,EAAI/V,AA3G9B,IAAI,CA2GoC2V,SAAS,CAAII,CAAAA,GAAiB,CAAA,IAExF/V,AA7GkB,IAAI,CA6GZ0S,QAAQ,CAAG,CAAA,EACrB,IAAI,CAAC0C,OAAO,CAAG,CAAA,EACfZ,GAAoB,IAAI,CAAE,cAC9B,CAOA6C,gBAAiB,CACb,IAAMrX,EAAY,IAAI,CAAE/E,EAAQ+E,EAAU/E,KAAK,CAAE+d,EAAY/d,EAAM+d,SAAS,CACxEjB,EAAiB,EAAE,CAAE3H,EAAkBC,CAK3CrQ,CAAAA,EAAUoQ,gBAAgB,CAAGA,EAAmB,SAAU/T,CAAC,EACvD2D,EAAUiZ,WAAW,CAAC5c,EAC1B,EACA2D,EAAUqQ,cAAc,CAAGA,EAAiB,SAAUhU,CAAC,EACnD2D,EAAUkZ,SAAS,CAAC7c,EACxB,EAGA0b,AADAA,CAAAA,EAAiB/X,EAAUmZ,cAAc,CAAC,YAAW,EACtC/V,IAAI,CAInB4Q,GAAmB/Y,EAAMme,QAAQ,CAAE,YAAahJ,GAAmB4D,GAAmBgF,EAAUvI,aAAa,CAAE,UAAWJ,GAE1H2D,GAAmB/Y,EAAMme,QAAQ,CAAE,YAAahJ,GAAmB4D,GAAmBgF,EAAUvI,aAAa,CAAE,WAAYJ,IAC3H0H,EAAesB,MAAM,CAACrZ,EAAUmZ,cAAc,CAAC,eAC/CnZ,EAAU+X,cAAc,CAAGA,EAEvB/X,EAAUnF,MAAM,EAAImF,EAAUnF,MAAM,CAAC,EAAE,EACvCkd,EAAe3U,IAAI,CAAC4Q,GAAmBhU,EAAUnF,MAAM,CAAC,EAAE,CAAC0C,KAAK,CAAE,gBAAiB,WAC/EtC,EAAM+E,SAAS,CAACsZ,2BAA2B,EAC/C,GAER,CAcAH,eAAeI,CAAS,CAAE,CACtB,IAAMvZ,EAAY,IAAI,CAAEwZ,EAAS,EAAE,CAQnC,MAPA,CAAC,SAAU,UAAU,CAAC1e,OAAO,CAAC,SAAU2e,CAAI,EACxCzZ,CAAS,CAACyZ,EAAK,CAAC3e,OAAO,CAAC,SAAU4e,CAAa,CAAEva,CAAK,EAClDqa,EAAOpW,IAAI,CAAC4Q,GAAmB0F,EAAc1J,OAAO,CAAEuJ,EAAW,SAAUld,CAAC,EACxE2D,CAAS,CAACyZ,EAAO,YAAY,CAACpd,EAAG8C,EACrC,GACJ,EACJ,GACOqa,CACX,CAiBAG,gBAAgBtd,CAAC,CAAE8C,CAAK,CAAE,CACtB9C,EAAI,IAAI,CAACpB,KAAK,CAAC+W,OAAO,EAAEC,UAAU5V,IAAMA,EACxC,IAAwBpB,EAAQ+E,AAAd,IAAI,CAAoB/E,KAAK,CAAEsC,EAAQyC,AAAvC,IAAI,CAA6CzC,KAAK,CAAEmY,EAAY1V,AAApE,IAAI,CAA0E0V,SAAS,CAAEK,EAAgB/V,AAAzG,IAAI,CAA+GwL,IAAI,CAAErH,EAAQnE,AAAjI,IAAI,CAAuImE,KAAK,CAC9JyV,EAAoB5Z,AADN,IAAI,CACYS,IAAI,CAAE2O,EAAS/S,EAAE+S,MAAM,CAAEvK,EAAUD,EAAUiV,EAAKpZ,CAEhFxF,CAAAA,EAAMuF,QAAQ,GACd4O,EAAS/S,EAAEgT,MAAM,CACjBuK,EAAoB5Z,AALN,IAAI,CAKYc,GAAG,EAEjC3B,AAAU,IAAVA,GAEAa,AATc,IAAI,CASRoS,aAAa,CAAGhD,EAC1BpP,AAVc,IAAI,CAUR+Y,UAAU,CAAG5U,EACvBnE,AAXc,IAAI,CAWR8Z,UAAU,CAAG1K,EAASsG,IAIhCjV,EAAO2O,EAASwK,EAAoBzV,EAAQ,EACxChF,AAAU,IAAVA,EACAsB,EAAOxB,KAAKC,GAAG,CAAC,EAAGuB,GAEJ,IAAVtB,GAAesB,EAAO0D,GAAS4R,IACpCtV,EAAOsV,EAAgB5R,EACnBnE,AArBM,IAAI,CAqBA+Z,gBAAgB,EAE1BtZ,GAAQ0D,EACRS,EAAW5E,AAxBL,IAAI,CAwBWga,gBAAgB,GAAGtd,OAAO,EAI/CmI,EAAW7E,AA5BL,IAAI,CA4BWga,gBAAgB,GAAGrd,OAAO,EAGnD8D,IAASiV,IACT1V,AAhCU,IAAI,CAgCJ+Y,UAAU,CAAG5U,EAEnBgQ,GAAkB0F,AADtBA,CAAAA,EAAMtc,EAAMsG,aAAa,CAACY,YAAY,CAAChE,EAAMA,EAAO0D,EAAOS,EAAUC,EAAQ,EACnD/G,GAAG,GACzB0W,GAAoB,IAAI,CAAE,WAAY,CAClC1W,IAAKmB,KAAKnB,GAAG,CAAC+b,EAAI/b,GAAG,CAAE+b,EAAI3a,GAAG,EAC9BA,IAAKD,KAAKC,GAAG,CAAC2a,EAAI/b,GAAG,CAAE+b,EAAI3a,GAAG,EAC9BvE,OAAQ,CAAA,EACRsf,eAAgB,CACZ/V,QAAS,WACb,CACJ,IAIhB,CAYAgW,iBAAiB7d,CAAC,CAAE8C,CAAK,CAAE,CACvB9C,EAAI,IAAI,CAACpB,KAAK,CAAC+W,OAAO,EAAEC,UAAU5V,IAAMA,EACxC,IAAwBpB,EAAQ+E,AAAd,IAAI,CAAoB/E,KAAK,CAAEkf,EAAYlf,EAAMsC,KAAK,CAAC,EAAE,CAG3E6c,EAAUpa,AAHQ,IAAI,CAGF+Z,gBAAgB,AAChC5a,AAAU,CAAA,IAAVA,GAEAa,AANc,IAAI,CAMR6Y,WAAW,CAAG,CAAA,EACxB7Y,AAPc,IAAI,CAORqa,cAAc,CAAGra,AAPb,IAAI,CAOmB2V,SAAS,CAC9C3V,AARc,IAAI,CAQRsa,YAAY,CAAGF,EAAUD,EAAUrc,GAAG,CAAGqc,EAAUjb,GAAG,GAIhEc,AAZc,IAAI,CAYR8Y,YAAY,CAAG,CAAA,EACzB9Y,AAbc,IAAI,CAaRqa,cAAc,CAAGra,AAbb,IAAI,CAamB0V,SAAS,CAC9C1V,AAdc,IAAI,CAcRsa,YAAY,CAAGF,EAAUD,EAAUjb,GAAG,CAAGib,EAAUrc,GAAG,EAEpE7C,EAAM8O,aAAa,CAAC,KAAK,EAC7B,CAUAkP,YAAY5c,CAAC,CAAE,CACX,IAAM2D,EAAY,IAAI,CAAE/E,EAAQ+E,EAAU/E,KAAK,CAAE8a,EAAgB/V,EAAU+V,aAAa,CAAE5R,EAAQnE,EAAUmE,KAAK,CAAE2V,EAAa9Z,EAAU8Z,UAAU,CAAEtZ,EAAWvF,EAAMuF,QAAQ,CAC3KC,EAAOT,EAAUS,IAAI,CAAE2O,EAIvB,CAAA,CAAC/S,EAAEiW,OAAO,EAAIjW,AAAuB,IAAvBA,EAAEiW,OAAO,CAAC,EAAE,CAACiI,KAAK,AAAK,IAErCnL,EAAS/S,AADTA,CAAAA,EAAIpB,EAAM+W,OAAO,EAAEC,UAAU5V,IAAMA,CAAAA,EACxB+S,MAAM,CAEb5O,IACAC,EAAOT,EAAUc,GAAG,CACpBsO,EAAS/S,EAAEgT,MAAM,EAGjBrP,EAAU6Y,WAAW,EACrB7Y,EAAUwS,UAAU,CAAG,CAAA,EACvBxS,EAAU2C,MAAM,CAAC,EAAG,EAAGyM,EAAS3O,EAAMT,EAAUqa,cAAc,GAGzDra,EAAU8Y,YAAY,EAC3B9Y,EAAUwS,UAAU,CAAG,CAAA,EACvBxS,EAAU2C,MAAM,CAAC,EAAG,EAAG3C,EAAUqa,cAAc,CAAEjL,EAAS3O,IAGrDT,EAAUoS,aAAa,GAC5BpS,EAAUwS,UAAU,CAAG,CAAA,EACnBpD,EAAS0K,EACT1K,EAAS0K,EAGJ1K,EACL2G,EAAgB+D,EAAa3V,GAC7BiL,CAAAA,EAAS2G,EAAgB+D,EAAa3V,CAAI,EAE9CnE,EAAU2C,MAAM,CAAC,EAAG,EAAGyM,EAAS0K,EAAY1K,EAAS0K,EAAa3V,IAElEnE,EAAUwS,UAAU,EACpBxS,EAAUmB,SAAS,EACnByT,GAAe5U,EAAUmB,SAAS,CAACpF,OAAO,CAACsR,UAAU,CAGrD,CAAC0G,IACG,CAAC,IAAI,CAAC9Y,KAAK,CAAC0Y,OAAO,IACvBtX,EAAE6P,OAAO,CAAG7P,EAAEkG,IAAI,CAClBiY,WAAW,WACPxa,EAAUkZ,SAAS,CAAC7c,EACxB,EAAG,IAGf,CASA6c,UAAU7c,CAAC,CAAE,KAGLsZ,EAAWD,EAAW+E,EAAe7V,EAAUC,EAAUgV,EAF7D,IAAwB5e,EAAQ+E,AAAd,IAAI,CAAoB/E,KAAK,CAAEsC,EAAQyC,AAAvC,IAAI,CAA6CzC,KAAK,CAAE4D,EAAYnB,AAApE,IAAI,CAA0EmB,SAAS,CAAEyP,EAAWvU,EAAEuU,QAAQ,EAAIvU,EAAGmE,EAAWvF,EAAMuF,QAAQ,CAAE8U,EAAOtV,AAAvJ,IAAI,CAA6J0S,QAAQ,EAAI,CAAC1S,AAA9K,IAAI,CAAoLwS,UAAU,CAChN,UAAY,OAMhB,CAAA,AAACxS,AAPiB,IAAI,CAOXwS,UAAU,EAAK,CAAA,CAACrR,GAAa,CAACA,EAAUqR,UAAU,AAAD,GACxDnW,AAAc,cAAdA,EAAE6H,OAAO,AAAe,IACxBuW,EAAgBza,AATF,IAAI,CASQga,gBAAgB,GAEtCha,AAXU,IAAI,CAWJ0V,SAAS,GAAK1V,AAXd,IAAI,CAWoBqa,cAAc,CAChDzV,EAAW5E,AAZD,IAAI,CAYOsa,YAAY,CAE5Bta,AAdK,IAAI,CAcC2V,SAAS,GAAK3V,AAdnB,IAAI,CAcyBqa,cAAc,EACrDxV,CAAAA,EAAW7E,AAfD,IAAI,CAeOsa,YAAY,AAAD,EAGhCta,AAlBU,IAAI,CAkBJ2V,SAAS,GAAK3V,AAlBd,IAAI,CAkBoBwL,IAAI,EACtC3G,CAAAA,EAAW7E,AAnBD,IAAI,CAmBO+Z,gBAAgB,CACjCU,EAAc/d,OAAO,CACrB+d,EAAc9d,OAAO,AAAD,EAGA,IAAxBqD,AAxBU,IAAI,CAwBJ0V,SAAS,EACnB9Q,CAAAA,EAAW5E,AAzBD,IAAI,CAyBO+Z,gBAAgB,CACjCU,EAAc9d,OAAO,CACrB8d,EAAc/d,OAAO,AAAD,EAGxByX,GAAkB0F,AADtBA,CAAAA,EAAMtc,EAAMsG,aAAa,CAACY,YAAY,CAACzE,AA7BzB,IAAI,CA6B+B0V,SAAS,CAAE1V,AA7B9C,IAAI,CA6BoD2V,SAAS,CAAE/Q,EAAUC,EAAQ,EACzE/G,GAAG,GACzB0W,GAAoB,IAAI,CAAE,WAAY,CAClC1W,IAAKmB,KAAKnB,GAAG,CAAC+b,EAAI/b,GAAG,CAAE+b,EAAI3a,GAAG,EAC9BA,IAAKD,KAAKC,GAAG,CAAC2a,EAAI/b,GAAG,CAAE+b,EAAI3a,GAAG,EAC9BvE,OAAQ,CAAA,EACRuH,UAAWlC,CAAAA,AAnCL,IAAI,CAmCWwS,UAAU,EAAW,KAC1CyH,eAAgB,CACZ/V,QAAS,YACTwW,UAAW,iBACX9J,SAAUA,CACd,CACJ,IAGU,cAAdvU,EAAE6P,OAAO,EACT7P,AAAc,cAAdA,EAAE6P,OAAO,EACTlM,CAAAA,AA9Cc,IAAI,CA8CR6Y,WAAW,CAAG7Y,AA9CV,IAAI,CA8CgB8Y,YAAY,CAC1C9Y,AA/CU,IAAI,CA+CJoS,aAAa,CAAGpS,AA/ChB,IAAI,CA+CsB+Y,UAAU,CAC1C/Y,AAhDM,IAAI,CAgDAsa,YAAY,CAAGta,AAhDnB,IAAI,CAgDyBqa,cAAc,CAC7Cra,AAjDE,IAAI,CAiDIwS,UAAU,CAAGxS,AAjDrB,IAAI,CAiD2B8Z,UAAU,CAAG,IAAG,EAG7D9Z,AApDc,IAAI,CAoDR2X,gBAAgB,EAC1BjD,GAAmB1U,AArDL,IAAI,CAqDW0V,SAAS,GACtChB,GAAmB1U,AAtDL,IAAI,CAsDW2V,SAAS,IACtCD,EAAYzW,KAAKsW,KAAK,CAACvV,AAvDT,IAAI,CAuDe0V,SAAS,EAC1CC,EAAY1W,KAAKsW,KAAK,CAACvV,AAxDT,IAAI,CAwDe2V,SAAS,EACtC3V,AAzDU,IAAI,CAyDJsW,MAAM,EAChBtW,AA1DU,IAAI,CA0DJoW,SAAS,CAACV,EAAWC,EAAWnV,EAAU8U,GAEpDtV,AA5DU,IAAI,CA4DJ4V,OAAO,EACjB5V,AA7DU,IAAI,CA6DJyV,WAAW,CAACC,EAAWC,EAAWnV,EAAU8U,GAEtDtV,AA/DU,IAAI,CA+DJiB,gBAAgB,CAAC4E,OAAO,CAACnE,OAAO,EAC1ChJ,OAAOiiB,IAAI,CAAC3a,AAhEF,IAAI,CAgEQ6F,OAAO,EAAEjJ,MAAM,GACjCoD,AAjEM,IAAI,CAiEA6F,OAAO,CAACjJ,MAAM,GAC5BoD,AAlEU,IAAI,CAkEJqV,UAAU,CAACK,EAAW,EAAGlV,EAAU8U,GAC7CtV,AAnEU,IAAI,CAmEJqV,UAAU,CAACM,EAAW,EAAGnV,EAAU8U,IAGzD,CAOAlE,cAAe,CACP,IAAI,CAAC2G,cAAc,GACnB,IAAI,CAACA,cAAc,CAACjd,OAAO,CAAC,SAAU8f,CAAM,EACxCA,GACJ,GACA,IAAI,CAAC7C,cAAc,CAAG,KAAK,GAE/B,IAAI,CAAC8C,sBAAsB,EAC/B,CAOAA,wBAAyB,CACrB,IAAMhD,EAAa,IAAI,CAACA,UAAU,EAAI,EAAE,AACpC,CAAA,IAAI,CAACF,gBAAgB,EAAIE,CAAU,CAAC,EAAE,GACW,CAAA,IAA7C,IAAI,CAAC5W,gBAAgB,CAAC2W,kBAAkB,EACxCC,EAAW/c,OAAO,CAAC,SAAUD,CAAM,EAC/Bga,GAAsBha,EAAQ,cAAe,IAAI,CAACid,kBAAkB,CACxE,EAAG,IAAI,EAGPD,CAAU,CAAC,EAAE,CAACta,KAAK,EACnBsX,GAAsBgD,CAAU,CAAC,EAAE,CAACta,KAAK,CAAE,gBAAiB,IAAI,CAACud,sBAAsB,EAGnG,CAMA7C,iBAAkB,CACd,OAAQ,IAAI,CAAChd,KAAK,CAACuF,QAAQ,CACvB,CAAC,IAAI,CAACD,gBAAgB,CAAE,EAAG,CAAC,IAAI,CAACA,gBAAgB,CAAE,EAAE,CACrD,CAAC,EAAG,CAAC,IAAI,CAACA,gBAAgB,CAAE,EAAG,IAAI,CAACA,gBAAgB,CAAC,AAC7D,CAOAmP,KAAKzU,CAAK,CAAE,CACR,IAAMoH,EAAepH,EAAMc,OAAO,CAAEkF,EAAmBoB,EAAarC,SAAS,EAAI,CAAC,EAAG2X,EAAmB1W,EAAiBS,OAAO,CAAEmB,EAAmBR,EAAalB,SAAS,EAAI,CAAC,EAAG4Z,EAAmBlY,EAAiBnB,OAAO,CAAEd,EAAS+W,GAAoB1W,EAAiBL,MAAM,EAAI,EAAGN,EAAkBya,GAAoBlY,EAAiBjC,MAAM,EAAI,EAAGL,EAAmBsC,EAAiBuK,cAAc,EAAI9M,GAAmB,CACxa,CAAA,IAAI,CAACuF,OAAO,CAAG,EAAE,CACjB,IAAI,CAACyQ,MAAM,CAAG,EAAE,CAChB,IAAI,CAACrb,KAAK,CAAGA,EACb,IAAI,CAACgF,aAAa,GAClB,IAAI,CAACW,MAAM,CAAGA,EACd,IAAI,CAACN,eAAe,CAAGA,EACvB,IAAI,CAACC,gBAAgB,CAAGA,EACxB,IAAI,CAACwa,gBAAgB,CAAGA,EACxB,IAAI,CAACpD,gBAAgB,CAAGA,EACxB,IAAI,CAAC1W,gBAAgB,CAAGA,EACxB,IAAI,CAAC4B,gBAAgB,CAAGA,EACxB,IAAI,CAAC6U,WAAW,GAChB,IAAM1X,EAAY,IAAI,CAAE6X,EAAa7X,EAAU6X,UAAU,CAAEmD,EAAa/f,EAAMsC,KAAK,CAACX,MAAM,CAAEqe,EAAahgB,EAAMmF,KAAK,CAACxD,MAAM,CAAEse,EAAYrD,GAAcA,CAAU,CAAC,EAAE,EAAIA,CAAU,CAAC,EAAE,CAACta,KAAK,EACvLtC,EAAMsC,KAAK,CAAC,EAAE,EAAI,CAAExB,QAAS,CAAC,CAAE,EAEpC,GADAd,EAAMkgB,UAAU,CAAG,CAAA,EACfnb,EAAU2X,gBAAgB,CAAE,CAC5B,IAAMK,EAAU,IAAI,CAACC,eAAe,EAEpCjY,CAAAA,EAAUzC,KAAK,CAAG,GAAK/D,CAAAA,GAAgG,EAAGyB,EAAO0Z,GAAgB,CAE7IyG,OAAQF,EAAUnf,OAAO,CAACqf,MAAM,CAChCC,QAASH,EAAUnf,OAAO,CAACsf,OAAO,CAClCC,WAAYJ,EAAUnf,OAAO,CAACuf,UAAU,AAC5C,EAAGra,EAAiB1D,KAAK,CAAE,CACvBgF,KAAM,WACNnC,MAAOa,EAAiBb,KAAK,EAAEgH,GAC/BjI,MAAO6b,EACPxQ,WAAY,CAAA,EACZgC,OAAQ,EACR+O,mBAAoB,CAAA,EACpBlT,YAAa,CAAA,EACbC,UAAW,CAAA,EAEXC,WAAY2S,EAAUnf,OAAO,CAACsf,OAAO,CAAG,EACpCH,EAAUnf,OAAO,CAACwM,UAAU,CAChCC,WAAY0S,EAAUnf,OAAO,CAACsf,OAAO,CAAG,EACpCH,EAAUnf,OAAO,CAACyM,UAAU,CAChCgT,YAAa,CAAA,CACjB,EAAGvgB,EAAMuF,QAAQ,CAAG,CAChBwX,QAAAA,EACAlS,MAAOlF,CACX,EAAI,CACAoX,QAAAA,EACApX,OAAAA,CACJ,GAAI,SACJZ,EAAUI,KAAK,CAAG,GAAK5G,CAAAA,GAAgG,EAAGyB,EAAO0Z,GAAgB1T,EAAiBb,KAAK,CAAE,CACrKqb,WAAY,CAAA,EACZjP,OAAQ,EACRrN,MAAO8b,EACPzQ,WAAY,CAAA,EACZwB,SAAU4I,GAAgB3T,EAAiBb,KAAK,EAC5Ca,EAAiBb,KAAK,CAAC4L,QAAQ,CAAI/Q,EAAMmF,KAAK,CAAC,EAAE,EAAInF,EAAMmF,KAAK,CAAC,EAAE,CAAC4L,QAAQ,CAAG,CAAA,GACnFwP,YAAa,CAAA,CACjB,EAAGvgB,EAAMuF,QAAQ,CAAG,CAChBsF,MAAOlF,CACX,EAAI,CACAA,OAAQA,CACZ,GAAI,SAEAiX,GAAc5W,EAAiBpG,MAAM,CAAC6gB,IAAI,CAC1C1b,EAAU2b,qBAAqB,CAAC,CAAA,GAGH,IAAxB1gB,EAAMJ,MAAM,CAAC+B,MAAM,EACxBoD,CAAAA,EAAU4b,YAAY,CAAG5H,GAAmB/Y,EAAO,eAAgB,WAE3DA,EAAMJ,MAAM,CAAC+B,MAAM,CAAG,GAAK,CAACoD,EAAUnF,MAAM,GAC5CmF,EAAUC,aAAa,GACvBD,EAAU4b,YAAY,GAE9B,EAAC,EAEL5b,EAAU+Z,gBAAgB,CAAG,AAAC9e,EAAMuF,QAAQ,EAAI,CAACR,EAAUzC,KAAK,CAACyO,QAAQ,EAAM,CAAC/Q,EAAMuF,QAAQ,EAAIR,EAAUzC,KAAK,CAACyO,QAAQ,CAE1HhM,EAAUwW,cAAc,GAExBxW,EAAUqX,cAAc,EAE5B,MAEIrX,EAAUzC,KAAK,CAAG,CACdtC,MAAAA,EACA4I,cAAe,CACXsU,KAAM,CAAA,CACV,EACAlT,UAAW,SAAU3J,CAAK,CAAE8e,CAAO,EAC/B,IAAMxW,EAAO3I,EAAMsC,KAAK,CAAC,EAAE,CAAEsc,EAAMjW,EAAKlB,WAAW,GAAImZ,EAAmBjY,EAAKsL,GAAG,CAAG,EAAI3O,EAAkBzC,EAAMiX,GAAO,MAAOnR,EAAK7H,OAAO,CAAC+B,GAAG,CAAE+b,EAAInd,OAAO,EAAGof,EAAa/G,GAAO,MAAOnR,EAAK7H,OAAO,CAACmD,GAAG,CAAE2a,EAAIld,OAAO,EAAImB,EAC3N,OAAOsc,EAEH,AAAC9e,EAAQwgB,EAAaD,EAAoB/d,EAE1C+d,EAAoBvgB,CAAAA,EAAQwC,CAAE,EAAKge,CAC3C,EACArD,SAAU,SAAUnd,CAAK,EACrB,OAAO,IAAI,CAAC2J,SAAS,CAAC3J,EAC1B,EACAqd,QAAS,SAAUrd,CAAK,EACpB,OAAO,IAAI,CAAC2J,SAAS,CAAC3J,EAAO,CAAA,EACjC,CACJ,EACA0E,EAAUzC,KAAK,CAACsG,aAAa,CAACD,IAAI,CAAG5D,EAAUzC,KAAK,CACpDyC,EAAUzC,KAAK,CAACsG,aAAa,CAACY,YAAY,CAAIiG,AA/9FK5G,GA+9FoB9K,SAAS,CAACyL,YAAY,CAAC0L,IAAI,CAACnQ,EAAUzC,KAAK,CAACsG,aAAa,EAGpI,GAAI5I,EAAMc,OAAO,CAACoF,SAAS,CAACO,OAAO,CAAE,CACjC,IAAM3F,EAAU4Y,GAAgB1Z,EAAMc,OAAO,CAACoF,SAAS,CAAE,CAAEuK,SAAUzQ,EAAMuF,QAAQ,AAAC,EAChF,EAACkU,GAAmB3Y,EAAQqF,MAAM,GAAKpB,EAAU2X,gBAAgB,EACjE5b,CAAAA,EAAQqF,MAAM,CAAGnG,EAAMuF,QAAQ,CAAG,GAAK,CAAA,EAE3CvF,EAAMkG,SAAS,CAAGnB,EAAUmB,SAAS,CAAG,IAh/BM6J,GAg/BkB/P,EAAM0Q,QAAQ,CAAE5P,EAASd,GACzF+Y,GAAmBhU,EAAUmB,SAAS,CAAE,UAAW,SAAU9E,CAAC,EAC1D,IAAM8H,EAAQnE,EAAUwL,IAAI,CAAEI,EAAKzH,EAAQ,IAAI,CAACyH,EAAE,CAAEC,EAAO1H,EAAQ,IAAI,CAAC0H,IAAI,AAC5E7L,CAAAA,EAAUwS,UAAU,CAAGxS,EAAUmB,SAAS,CAACqR,UAAU,CACrDxS,EAAU2C,MAAM,CAAC,EAAG,EAAGkJ,EAAMD,GACzB,IAAI,CAACK,oBAAoB,CAAC5P,EAAE6P,OAAO,GACnCsO,WAAW,WACPxa,EAAUkZ,SAAS,CAAC7c,EACxB,EAER,EACJ,CAEA2D,EAAU+b,mBAAmB,GAE7B/b,EAAUgc,cAAc,EAC5B,CAMAtE,aAAc,CACV,IAAMzW,EAAmB,IAAI,CAACA,gBAAgB,CAAE0W,EAAmB,IAAI,CAACA,gBAAgB,CAAE1c,EAAQ,IAAI,CAACA,KAAK,AAC5G,CAAA,IAAI,CAACyF,QAAQ,CAAGkU,GAAe3T,EAAiBP,QAAQ,CAAEub,CAAAA,CAAQ,CAAA,CAACtE,GAAoB1c,EAAMuF,QAAQ,AAAD,EACxG,CAQAwZ,iBAAiBkC,CAAyB,CAAE,KAEpCC,EADJ,IAAMC,EAAW,IAAI,CAACnhB,KAAK,CAACsC,KAAK,CAAC,EAAE,CAAE8e,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAAEC,EAAU,IAAI,CAAC/e,KAAK,CAAEgf,EAAiBD,EAAQvgB,OAAO,CAAEygB,EAAkBJ,EAASrgB,OAAO,CASxJ,OAPKmgB,GAA6BE,AAAqB,OAArBA,EAAS1f,OAAO,EAC9Cyf,CAAAA,EAAM,CACFzf,QAASkY,GACTyH,EAAK7W,KAAK,CAAC+W,GAAgBze,KAAMiX,GAAO,MAAOsH,EAAK7W,KAAK,CAACgX,EAAgB1e,GAAG,EAAGse,EAAS1f,OAAO,CAAE4f,EAAQ5f,OAAO,CAAE4f,EAAQxe,GAAG,GAC9HnB,QAASiY,GAAeyH,EAAK7W,KAAK,CAAC+W,GAAgBrd,KAAM6V,GAAO,MAAOsH,EAAK7W,KAAK,CAACgX,EAAgBtd,GAAG,EAAGkd,EAASzf,OAAO,CAAE2f,EAAQ3f,OAAO,CAAE2f,EAAQpd,GAAG,EAC1J,CAAA,EAEGid,CACX,CAaAlc,cAAcwc,CAAiB,CAAE9hB,CAAM,CAAE,CACrC,IAAMM,EAAQ,IAAI,CAACA,KAAK,CAAE4c,EAAa,IAAI,CAACA,UAAU,CAAG,EAAE,CAC3D4E,EAAqBA,GACjBxhB,EAAMc,OAAO,EAAId,EAAMc,OAAO,CAACiE,SAAS,CAAC6X,UAAU,EAClD5c,CAAAA,EAAMJ,MAAM,CAAC+B,MAAM,CAEhB2X,GAAKtZ,EAAMJ,MAAM,CAAE,AAAC6hB,GAAO,CAACA,EAAE3gB,OAAO,CAACyO,UAAU,EAAGrL,KAAK,CACxD,CAAA,EAGR,AAAClE,CAAAA,EAAMJ,MAAM,EAAI,EAAE,AAAD,EAAGC,OAAO,CAAC,CAACD,EAAQ+C,KAGlC,CAAC/C,EAAOkB,OAAO,CAACyO,UAAU,EACrB3P,CAAAA,EAAOkB,OAAO,CAAC4gB,eAAe,EAC3B,AAAC/e,CAAAA,IAAM6e,GACH5hB,EAAOkB,OAAO,CAACqL,EAAE,GAAKqV,CAAgB,GACtC5hB,AAAmC,CAAA,IAAnCA,EAAOkB,OAAO,CAAC4gB,eAAe,AAAS,GAC/C9E,EAAWzU,IAAI,CAACvI,EAExB,GAEI,IAAI,CAAC0C,KAAK,EAAI,CAAC,IAAI,CAACA,KAAK,CAACsG,aAAa,CAACsU,IAAI,EAC5C,IAAI,CAACwD,qBAAqB,CAAC,CAAA,EAAMhhB,EAEzC,CAQAghB,sBAAsBhM,CAAS,CAAEhV,CAAM,CAAE,CACrC,IAAMqF,EAAY,IAAI,CAAE/E,EAAQ+E,EAAU/E,KAAK,CAAE4c,EAAa7X,EAAU6X,UAAU,CAAE+E,EAAiB,CACjGC,oBAAqB,CAAA,EACrB1d,MAAO,KACP2d,SAAU,KACVxL,MAAO,MACPyL,SAAU,CAAA,EACVxf,MAAO,IAAI,CAAC0D,gBAAgB,CAAC1D,KAAK,EAAE6J,GACpChH,MAAO,IAAI,CAACa,gBAAgB,CAACb,KAAK,EAAEgH,GACpC4V,aAAc,CAAA,EACdC,SAAU,KAAK,EACfzS,WAAY,CAAA,EACZ0S,OAAQ,CACJC,SAAU,CACNlV,QAAS,CACb,CACJ,CACJ,EAEAmV,EAAkBpd,EAAUnF,MAAM,CAC9B,AAACmF,CAAAA,EAAUnF,MAAM,EAAI,EAAE,AAAD,EAAGqa,MAAM,CAAC,AAACmI,IAC7B,IAAMC,EAAOD,EAAUxF,UAAU,OACjC,CAAIA,CAAAA,AAA2B,EAA3BA,EAAW0F,OAAO,CAACD,EAAQ,IAGvBA,IACAzI,GAAsByI,EAAM,cAAetd,EAAU8X,kBAAkB,EACvE,OAAOwF,EAAKF,eAAe,EAI3BC,EAAUpiB,KAAK,EACfoiB,EAAU7Y,OAAO,GAEd,CAAA,EAGf,GACAgZ,EAAaC,EAAwBC,EAA8B1d,EAAUiB,gBAAgB,CAACpG,MAAM,CAAE8iB,EAGtG9F,GAAcA,EAAWjb,MAAM,EAC/Bib,EAAW/c,OAAO,CAAC,AAACwiB,IAChB,IAAMM,EAAkBN,EAAKF,eAAe,CAAES,EAAiBvJ,GAE/D,CACI7O,MAAO6X,EAAK7X,KAAK,CACjBqY,QAASR,EAAKQ,OAAO,AACzB,EAAG,AAACrJ,GAAkBiJ,GAElB5J,GAAyB9T,SAAS,CAACnF,MAAM,CADzC6iB,GAIJ,GAAIE,GACA5d,AAAkD,CAAA,IAAlDA,EAAUiB,gBAAgB,CAAC2W,kBAAkB,CAC7C,MAEJgF,CAAAA,EAAenD,IAAI,CAAG,aAAe5B,EAAWjb,MAAM,CAEtD+gB,EAAuBH,AADvBA,CAAAA,EAAcF,EAAKvhB,OAAO,EAAI,CAAC,CAAA,EACIkF,gBAAgB,EAAI,CAAC,EAGxD4c,EAAe3W,UAAU,CAAG4N,GAAM+I,EAAe3W,UAAU,EAG3DuW,AAFAA,CAAAA,EAAyB9I,GAAgB6I,EAAaZ,EAAgBiB,EAAgBF,EAAoB,EAEnF5Y,UAAU,CAAG6P,GAEpCiJ,EAAe9Y,UAAU,CAAE4Y,EAAqB5Y,UAAU,CAE1D+O,GAAyBiK,WAAW,CAACN,EAAuBlb,IAAI,EAAI,OAAO,CAACwC,UAAU,EAGtF,IAAMiZ,EAAsBL,EAAqBjC,IAAI,EAAImC,EAAenC,IAAI,AAC5E1b,CAAAA,EAAUie,gBAAgB,CACtBje,EAAUie,gBAAgB,EAAI,CAAC,CAACD,EACpCP,EAAuB/B,IAAI,CAAIsC,GAC3BR,EAAY9B,IAAI,EAAEwC,MAAM,GAExBN,GAAmBA,EAAgB7hB,OAAO,CAC1C6hB,EAAgB5gB,MAAM,CAACygB,EAAwB9iB,IAG/C2iB,EAAKF,eAAe,CAAGniB,EAAMkjB,UAAU,CAACV,GAExCxiB,EAAMmjB,aAAa,GACnBd,EAAKF,eAAe,CAACvF,UAAU,CAAGyF,EAClCF,EAAgBha,IAAI,CAACka,EAAKF,eAAe,EAEjD,GAKAM,CAAAA,EAA4BhC,IAAI,EAChC,CAAE7D,CAAAA,GAAcA,EAAWjb,MAAM,AAAD,GAChC6X,GAAkBiJ,EAA2B,IAC7C1d,EAAUie,gBAAgB,CAAG,CAAA,EAI7BP,AAFAA,CAAAA,EACI5I,GAAM4I,EAA2B,EACT5iB,OAAO,CAAC,CAACujB,EAAmBzgB,KACpDgf,EAAenD,IAAI,CACf,aAAgB2D,CAAAA,EAAgBxgB,MAAM,CAAG,CAAA,EAc7C6gB,AAbAA,CAAAA,EAAyB9I,GAAgBb,GAAyB9T,SAAS,CAACnF,MAAM,CAAE,CAOhF4K,MAAOxK,EAAMJ,MAAM,CAAC+C,EAAE,EAClB,CAAC3C,EAAMJ,MAAM,CAAC+C,EAAE,CAAC7B,OAAO,CAACyO,UAAU,EACnCvP,EAAMJ,MAAM,CAAC+C,EAAE,CAAC6H,KAAK,EACrBxK,EAAMc,OAAO,CAACuiB,MAAM,CAAC1gB,EAAE,EACvB3C,EAAMc,OAAO,CAACuiB,MAAM,CAAC,EAAE,AAC/B,EAAG1B,EAAgByB,EAAiB,EACb3C,IAAI,CAAG2C,EAAkB3C,IAAI,CAChD+B,EAAuB/B,IAAI,GAC3B1b,EAAUie,gBAAgB,CAAG,CAAA,EAC7Bb,EAAgBha,IAAI,CAACnI,EAAMkjB,UAAU,CAACV,IAE9C,IAEA9N,GACA,IAAI,CAACoM,mBAAmB,EAEhC,CAQAA,qBAAsB,CAClB,IAAM/b,EAAY,IAAI,CAAE6X,EAAa7X,EAAU6X,UAAU,EAAI,EAAE,AAK3DA,CAAAA,CAAU,CAAC,EAAE,EAAIA,CAAU,CAAC,EAAE,CAACta,KAAK,EACpCsa,CAAU,CAAC,EAAE,CAACE,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmB6D,CAAU,CAAC,EAAE,CAACta,KAAK,CAAE,gBAAiB,IAAI,CAACud,sBAAsB,GAE1HjD,EAAW/c,OAAO,CAAC,AAACwiB,IAEhBA,EAAKvF,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmBsJ,EAAM,OAAQ,WAClD,IAAI,CAACF,eAAe,EACpB,IAAI,CAACA,eAAe,CAACmB,UAAU,CAAC,CAAA,EAAM,CAAA,EAE9C,IACAjB,EAAKvF,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmBsJ,EAAM,OAAQ,WAClD,IAAI,CAACF,eAAe,EACpB,IAAI,CAACA,eAAe,CAACmB,UAAU,CAAC,CAAA,EAAO,CAAA,EAE/C,IAGiD,CAAA,IAA7C,IAAI,CAACtd,gBAAgB,CAAC2W,kBAAkB,EACpC0F,EAAK/f,KAAK,EACV+f,EAAKvF,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmBsJ,EAAM,cAAe,IAAI,CAACxF,kBAAkB,GAIhGwF,EAAKvF,cAAc,CAAC3U,IAAI,CAAC4Q,GAAmBsJ,EAAM,SAAU,WACpDzF,GACAxD,GAAMwD,EAAYyF,GAElB,IAAI,CAACF,eAAe,EAAIpd,EAAUnF,MAAM,GACxCwZ,GAAMrU,EAAUnF,MAAM,CAAE,IAAI,CAACuiB,eAAe,EACxCjJ,GAAkB,IAAI,CAACiJ,eAAe,CAACrhB,OAAO,GAC9C,IAAI,CAACqhB,eAAe,CAACoB,MAAM,CAAC,CAAA,GAEhC,OAAO,IAAI,CAACpB,eAAe,CAEnC,GACJ,EACJ,CASAqB,iBAAiBC,CAAgB,CAAE,CAC/B,OAAO,IAAI,CAAC7G,UAAU,CAAChZ,MAAM,CAAC,SAAUf,CAAG,CAAEjD,CAAM,EAE/C,OAAOoE,KAAKnB,GAAG,CAACA,EAAKjD,EAAOuC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAIU,EACrD,EAAG4gB,EACP,CASApF,6BAA8B,CAC1B,IAAM/b,EAAQ,IAAI,CAACA,KAAK,CACxB,GAAI,AAA6B,KAAA,IAAtBA,EAAMmF,WAAW,CAAkB,CAC1C,IAAM+X,EAAgB,IAAI,CAACT,gBAAgB,CAAC,CAAA,GACxCS,GACCA,CAAAA,EAAc/d,OAAO,GAAKa,EAAMO,GAAG,EAChC2c,EAAc9d,OAAO,GAAKY,EAAM2B,GAAG,AAAD,IACtC3B,EAAMO,GAAG,CAAG2c,EAAc/d,OAAO,CACjCa,EAAM2B,GAAG,CAAGub,EAAc9d,OAAO,CAEzC,CACJ,CAOAme,wBAAyB,KAOjB3V,EAAQH,EANZ,IAAwBhF,EAAYma,AAAlB,IAAI,CAAwBlf,KAAK,CAAC+E,SAAS,CAAE2e,EAAexE,AAA5D,IAAI,CAAkEzX,WAAW,GAAIkc,EAAUD,EAAa7gB,GAAG,CAAE+gB,EAAUF,EAAazf,GAAG,CAAE4f,EAAcH,EAAajiB,OAAO,CAAEqiB,EAAcJ,EAAahiB,OAAO,CAAEwH,EAAQ0a,EAAUD,EAASI,EAAahf,EAAUgf,UAAU,CAAEC,EAAajf,EAAUif,UAAU,CAAE3D,EAAa1G,GAAeuF,AAAlV,IAAI,CAAwVkB,OAAO,EAAE6D,kBAAkB/E,AAAvX,IAAI,CAA6Xpe,OAAO,CAACuf,UAAU,EAAG,GAAI8B,EAAkBpd,EAAUnF,MAAM,EAAImF,EAAUnF,MAAM,CAAC,EAAE,CAAEskB,EAAiB,CAAC,CAAChF,AAAxe,IAAI,CAA8e/N,WAAW,AAO3gB,EAHQ+N,CAAAA,AAJM,IAAI,CAIAiF,SAAS,EAC3BjF,AAAgC,wBAAhCA,AALc,IAAI,CAKRiF,SAAS,CAAClb,OAAO,AAAyB,IAKhD8a,GAEA7Z,CAAAA,EAASH,AADTA,CAAAA,EAAS8Z,CAAU,EACD3a,CAAI,EAItB8a,IACA9Z,EAAS4Z,EAAczD,EAElB0D,GACDha,CAAAA,EAAS/F,KAAKC,GAAG,CAAC4f,EAClB3Z,EAAShB,EAAOnE,EAAUye,gBAAgB,CAACrB,GAAmBA,EAAgBiC,KAAK,CAC/EjC,EAAgBiC,KAAK,CAAC,EAAE,CACxB,CAACC,OAAOC,SAAS,EAAC,GAI1BJ,GAAmBH,CAAAA,GAAcC,CAAS,GACtCvK,GAAmB1P,KACnBmV,AA7BM,IAAI,CA6BArc,GAAG,CAAGqc,AA7BV,IAAI,CA6BgBqF,OAAO,CAAGxa,EACpCmV,AA9BM,IAAI,CA8BAjb,GAAG,CAAGib,AA9BV,IAAI,CA8BgBsF,OAAO,CAAGta,IAKhDnF,EAAUgf,UAAU,CAChBhf,EAAUif,UAAU,CAAG,IAC/B,CASAnH,oBAAqB,CACjB,IAAM9X,EAAY,IAAI,CAAC/E,KAAK,CAAC+E,SAAS,CAAqBod,EAAkB,IAAI,CAACA,eAAe,CAAEsC,EAAmB1f,EAAU+Z,gBAAgB,CAC5I9a,AAAoC,IAApCA,KAAKsW,KAAK,CAACvV,EAAU0V,SAAS,EAC9BzW,KAAKsW,KAAK,CAACvV,EAAU2V,SAAS,GAAK1W,KAAKsW,KAAK,CAACvV,EAAUwL,IAAI,CAGhExL,CAAAA,EAAUif,UAAU,CAAGrK,GAAe,IAAI,CAAC3Z,KAAK,CAACc,OAAO,CAACiE,SAAS,EAC9D,IAAI,CAAC/E,KAAK,CAACc,OAAO,CAACiE,SAAS,CAACif,UAAU,CAAES,GAC7C1f,EAAUgf,UAAU,CAAGhf,EAAU2f,gBAAgB,CAPI,IAAI,CAOK3f,GAE1Dod,GAAmB,CAACpd,EAAUie,gBAAgB,GAC9Cb,EAAgBrhB,OAAO,CAAC6jB,UAAU,CAAG/H,AAVY,IAAI,CAULza,SAAS,CAAC,IAAI,CAAC,EAAE,CACjEggB,EAAgByC,OAAO,CAAChI,AAXyB,IAAI,CAWlB9b,OAAO,CAAC2f,IAAI,CAAE,CAAA,EAAO,KAAM,CAAA,GAEtE,CAOAiE,iBAAiB9H,CAAU,CAAE7X,CAAS,CAAE,CACpC,IAAM8f,EAAW9f,EAAUye,gBAAgB,CAAC5G,EAAWza,SAAS,CAAC,IAAI,CAAC,EAAE,EAAGG,EAAQsa,EAAWta,KAAK,CAAE2B,EAAM3B,EAAM2B,GAAG,CAAEpB,EAAMP,EAAMO,GAAG,CAAEqG,EAAQ5G,EAAMxB,OAAO,CAACoI,KAAK,CAiBlK,QAfIuQ,CAAAA,GAAmBxV,IAAQwV,GAAmB5W,EAAG,IAG7CqG,GAASjF,EAAM4gB,EAAW,EACb5gB,EAAM4gB,EAAW3b,EAKjBrG,GAAOgiB,EAOhC,CAOA9D,gBAAiB,CACR,IAAI,CAACjE,cAAc,EACpB,CAAA,IAAI,CAACA,cAAc,CAAG,EAAE,AAAD,EAE3B,IAAI,CAACA,cAAc,CAAC3U,IAAI,CAGxB4Q,GAAmB,IAAI,CAAC/Y,KAAK,CAAE,SAAU,WACrC,IAAM+E,EAAY,IAAI,CAACA,SAAS,CAAEzC,EAAQyC,GAAcA,CAAAA,EAAU6X,UAAU,EACxE7X,EAAU6X,UAAU,CAAC,EAAE,EACvB7X,EAAU6X,UAAU,CAAC,EAAE,CAACta,KAAK,EAC7B,IAAI,CAACA,KAAK,CAAC,EAAE,AAAD,EACZA,GACAyC,EAAU2C,MAAM,CAACpF,EAAMO,GAAG,CAAEP,EAAM2B,GAAG,CAE7C,GAEA8U,GAAmB,IAAI,CAAC/Y,KAAK,CAAE,aAAc,WACzC,IAAoB+E,EAAY/E,AAAlB,IAAI,CAAoB+E,SAAS,CAC3C+f,EAAa/f,EAAUU,QAAQ,CAC/B,UAAY,cACZzF,CAHU,IAAI,CAGRuF,QAAQ,EACduf,CAAAA,EAAa/f,EAAUU,QAAQ,CAC3B,cAAgB,UAAS,EAEjCzF,AAPc,IAAI,AAOb,CAAC8kB,EAAW,CACb,AAAC9kB,CAAAA,AARS,IAAI,AAQR,CAAC8kB,EAAW,EAAI,CAAA,EAAM/f,CAAAA,EAAU2X,gBAAgB,EAAI,CAAC1c,AARjD,IAAI,CAQmDuF,QAAQ,CACrER,EAAUY,MAAM,CAAGZ,EAAUM,eAAe,CAC5C,CAAA,EAAKN,EAAUiB,gBAAgB,CAACG,MAAM,AAClD,GAAI4S,GAAmBmB,GAAW,WAAY,SAAU9Y,CAAC,EACrD,IAAI,CAACpB,KAAK,CAACsC,KAAK,CAAC,EAAE,CAAC6O,WAAW,CAAC/P,EAAEyB,GAAG,CAAEzB,EAAE6C,GAAG,CAAE7C,EAAE1B,MAAM,CAAE0B,EAAE6F,SAAS,CAAE7F,EAAE4d,cAAc,CACzF,GACJ,CAOAzV,SAAU,CAEN,IAAI,CAAC4M,YAAY,GACb,IAAI,CAAC7T,KAAK,GACV8W,GAAM,IAAI,CAACpZ,KAAK,CAACsC,KAAK,CAAE,IAAI,CAACA,KAAK,EAClC8W,GAAM,IAAI,CAACpZ,KAAK,CAAC+kB,IAAI,CAAE,IAAI,CAACziB,KAAK,GAEjC,IAAI,CAAC6C,KAAK,GACViU,GAAM,IAAI,CAACpZ,KAAK,CAACmF,KAAK,CAAE,IAAI,CAACA,KAAK,EAClCiU,GAAM,IAAI,CAACpZ,KAAK,CAAC+kB,IAAI,CAAE,IAAI,CAAC5f,KAAK,GAGrC,AAAC,CAAA,IAAI,CAACvF,MAAM,EAAI,EAAE,AAAD,EAAGC,OAAO,CAAC,AAAC4hB,IACrBA,EAAElY,OAAO,EACTkY,EAAElY,OAAO,EAEjB,GAEA,CACI,SAAU,QAAS,QAAS,SAAU,UAAW,iBACjD,kBAAmB,iBAAkB,YAAa,iBAClD,WACH,CAAC1J,OAAO,CAAC,AAAC/B,IACH,IAAI,CAACA,EAAK,EAAI,IAAI,CAACA,EAAK,CAACyL,OAAO,EAChC,IAAI,CAACzL,EAAK,CAACyL,OAAO,GAEtB,IAAI,CAACzL,EAAK,CAAG,IACjB,GAEA,CAAC,IAAI,CAAC8M,OAAO,CAAC,CAAC/K,OAAO,CAAC,AAACmlB,IACpB7L,GAAkC6L,EACtC,GACA,IAAI,CAACtI,gBAAgB,CAAG,CAAA,CAC5B,CACJ,CAyBA,GAAM,CAAEjJ,UAAWwR,EAAuB,CAAE9lB,QAAS+lB,EAAqB,CAAEC,WAAAA,EAAU,CAAEC,UAAAA,EAAS,CAAE,CAAI/mB,IAmOpEgnB,GAlNnC,MAiBI7hB,YAAY1C,EAAU,CAAC,CAAC,CAAE,CAOtB,IAAI,CAACwkB,MAAM,CAAG,CAACxkB,EAAQqL,EAAE,CACzB,IAAI,CAACoZ,OAAO,CAAG,CAAC,EAOhB,IAAI,CAACpZ,EAAE,CAAIrL,EAAQqL,EAAE,EAAIiZ,KACzB,IAAI,CAACI,QAAQ,CAAG,IAAI,CACpB,IAAI,CAAC/iB,QAAQ,CAAG,EAChB,IAAI,CAACgjB,UAAU,CAAGL,KAClB,IAAI3iB,EAAW,EACf0iB,GAAWrkB,EAAQykB,OAAO,EAAI,CAAC,EAAG,CAACG,EAAQC,KACvC,IAAI,CAACJ,OAAO,CAACI,EAAW,CAAGD,EAAOzC,KAAK,GACvCxgB,EAAWuB,KAAKC,GAAG,CAACxB,EAAUijB,EAAO/jB,MAAM,CAC/C,GACA,IAAI,CAACikB,aAAa,CAACnjB,EACvB,CAaAmjB,cAAcnjB,CAAQ,CAAE,CACpB,IAAI,CAACA,QAAQ,CAAGA,EAChB0iB,GAAW,IAAI,CAACI,OAAO,CAAE,AAACG,IAClBR,GAAsBQ,IACtBA,CAAAA,EAAO/jB,MAAM,CAAGc,CAAO,CAE/B,EACJ,CAWAN,UAAUwjB,CAAU,CAEpBE,CAAW,CAAE,CACT,OAAO,IAAI,CAACN,OAAO,CAACI,EAAW,AACnC,CAYAG,WAAWC,CAAW,CAEtBF,CAAW,CAAE,CACT,MAAO,AAACE,CAAAA,GAAetoB,OAAOiiB,IAAI,CAAC,IAAI,CAAC6F,OAAO,CAAA,EAAG3hB,MAAM,CAAC,CAAC2hB,EAASI,KAC/DJ,CAAO,CAACI,EAAW,CAAG,IAAI,CAACJ,OAAO,CAACI,EAAW,CACvCJ,GACR,CAAC,EACR,CAaAS,OAAOC,CAAQ,CAAEF,CAAW,CAAE,CAC1B,MAAO,AAACA,CAAAA,GAAetoB,OAAOiiB,IAAI,CAAC,IAAI,CAAC6F,OAAO,CAAA,EAAGW,GAAG,CAAC,AAAC3oB,GAAQ,IAAI,CAACgoB,OAAO,CAAChoB,EAAI,EAAE,CAAC0oB,EAAS,CAChG,CAmBAE,UAAUR,CAAU,CAAED,EAAS,EAAE,CAAEO,EAAW,CAAC,CAAEG,CAAW,CAAE,CAC1D,IAAI,CAACC,UAAU,CAAC,CAAE,CAACV,EAAW,CAAED,CAAO,EAAGO,EAAUG,EACxD,CAkBAC,WAAWd,CAAO,CAAEU,CAAQ,CAAEG,CAAW,CAAE,CACvC,IAAI3jB,EAAW,IAAI,CAACA,QAAQ,CAC5B0iB,GAAWI,EAAS,CAACG,EAAQC,KACzB,IAAI,CAACJ,OAAO,CAACI,EAAW,CAAGD,EAAOzC,KAAK,GACvCxgB,EAAWijB,EAAO/jB,MAAM,AAC5B,GACA,IAAI,CAACikB,aAAa,CAACnjB,GACd2jB,GAAaE,SACdrB,GAAwB,IAAI,CAAE,mBAC9B,IAAI,CAACQ,UAAU,CAAGL,KAE1B,CAoBAmB,OAAOC,CAAG,CAAEP,EAAW,IAAI,CAACxjB,QAAQ,CAAEgkB,CAAM,CAAEL,CAAW,CAAE,CACvD,GAAM,CAAEb,QAAAA,CAAO,CAAE,CAAG,IAAI,CAAEmB,EAAgBD,EAAS,IAAI,CAAChkB,QAAQ,CAAG,EAAIwjB,EAAW,EAClFd,GAAWqB,EAAK,CAACG,EAAWhB,KACxB,IAAMD,EAASH,CAAO,CAACI,EAAW,EAC9BS,GAAaQ,aAAe,CAAA,GAAS,AAAIC,MAAMH,GAC/ChB,IACIe,EACAf,EAAOoB,MAAM,CAACb,EAAU,EAAGU,GAG3BjB,CAAM,CAACO,EAAS,CAAGU,EAEvBpB,CAAO,CAACI,EAAW,CAAGD,EAE9B,GACIgB,EAAgB,IAAI,CAACjkB,QAAQ,EAC7B,IAAI,CAACmjB,aAAa,CAACc,GAElBN,GAAaE,SACdrB,GAAwB,IAAI,CAAE,gBAC9B,IAAI,CAACQ,UAAU,CAAGL,KAE1B,CACJ,EAqDM,CAAEtmB,SAAUioB,EAAoB,CAAE9nB,aAAc+nB,EAAwB,CAAEnL,IAAAA,EAAG,CAAE3c,QAAS+nB,EAAmB,CAAEC,MAAAA,EAAK,CAAE9nB,SAAU+nB,EAAoB,CAAE7nB,KAAM8nB,EAAgB,CAAEC,UAAAA,EAAS,CAAEhoB,SAAUioB,EAAoB,CAAE,CAAIjpB,KAWjO,AAAC,SAAU/B,CAAW,EAuDlB,SAASirB,EAAaC,CAAkB,CAAE3kB,CAAG,CAAEoB,CAAG,CAAEwjB,CAAW,CAAEC,EAAY,EAAE,CAAEC,EAAkB,CAAC,CAAEC,CAAe,EACjH,IAAMC,EAAc,CAAC,EAAGC,EAA0B,IAAI,CAAChnB,OAAO,CAAC6L,iBAAiB,CAAEyU,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAGxG2G,EAAgB,EAAE,CACdC,EAAKC,EAAkBC,EAAsBC,EAAMC,EAAYC,EAAQ,EAAGC,EAAiB,EAAE,CAAEC,EAAoB,CAAClE,OAAOC,SAAS,CAGxI,GAAI,AAAC,CAAC,IAAI,CAACxjB,OAAO,CAACsf,OAAO,EAAI,CAAC,IAAI,CAACtf,OAAO,CAACqf,MAAM,EAC9C,CAACuH,GACDA,EAAU/lB,MAAM,CAAG,GACnB,AAAe,KAAA,IAARkB,EACP,OAAOue,EAAKmG,YAAY,CAAC7mB,KAAK,CAAC0gB,EAAMoH,WAMzC,IAAMC,EAAYf,EAAU/lB,MAAM,CAClC,IAAKqmB,EAAM,EAAGA,EAAMS,EAAWT,IAAO,CAKlC,GAJAI,EAAaJ,GAAON,CAAS,CAACM,EAAM,EAAE,CAAG/jB,EACrCyjB,CAAS,CAACM,EAAI,CAAGnlB,GACjBwlB,CAAAA,EAAQL,CAAE,EAEVA,IAAQS,EAAY,GACpBf,CAAS,CAACM,EAAM,EAAE,CAAGN,CAAS,CAACM,EAAI,CAAGL,AAAkB,EAAlBA,GACtCS,EAAY,CAIZ,GAAIV,CAAS,CAACM,EAAI,CAAGO,EAAmB,CAIpC,IAHAN,EAAmB7G,EAAKmG,YAAY,CAACC,EAAoBE,CAAS,CAACW,EAAM,CAAEX,CAAS,CAACM,EAAI,CAAEP,GAGpFQ,EAAiBtmB,MAAM,EAC1BsmB,CAAgB,CAAC,EAAE,EAAIM,GACvBN,EAAiBS,KAAK,EAEtBT,CAAAA,EAAiBtmB,MAAM,EACvB4mB,CAAAA,EACIN,CAAgB,CAACA,EAAiBtmB,MAAM,CAAG,EAAE,AAAD,EAEpDomB,EAAc5f,IAAI,CAACmgB,EAAe3mB,MAAM,EACxC2mB,EAAiBA,EAAelK,MAAM,CAAC6J,EAC3C,CAEAI,EAAQL,EAAM,CAClB,CACA,GAAII,EACA,KAER,CAGA,GAAIH,EAAkB,CAIlB,GAHAE,EAAOF,EAAiBE,IAAI,CAGxBP,GAAmBO,EAAKQ,SAAS,EAAItB,GAAUuB,IAAI,CAAE,CAGrD,IAAKP,EAAQ,EAFbL,EAAMM,EAAe3mB,MAAM,CAAG,EAEd0mB,EAAQL,EAAKK,IACrBjH,EAAKyH,UAAU,CAAC,KAAMP,CAAc,CAACD,EAAM,IAC3CjH,EAAKyH,UAAU,CAAC,KAAMP,CAAc,CAACD,EAAQ,EAAE,IAC/CR,CAAW,CAACS,CAAc,CAACD,EAAM,CAAC,CAAG,MACrCH,EAAuB,CAAA,GAK3BA,GACAL,CAAAA,CAAW,CAACS,CAAc,CAAC,EAAE,CAAC,CAAG,KAAI,EAEzCH,EAAKN,WAAW,CAAGA,CACvB,CAEAM,EAAKJ,aAAa,CAAGA,EACrBO,EAAeH,IAAI,CAAGA,CAC1B,MAEIjB,GAAM,GAAI,CAAA,EAAO,IAAI,CAAClnB,KAAK,EAK/B,GAAI4nB,GAAmBX,GAAoBa,GAA0B,CACjE,IAAMnmB,EAAS2mB,EAAe3mB,MAAM,CAAEmnB,EAAgB,EAAE,CAAEC,EAAY,EAAE,CACpEC,EAAcC,EAAYC,EAAgBC,EAAgBC,EAAUzmB,EAAIhB,EAG5E,KAAOgB,KACHsmB,EAAa,IAAI,CAACjf,SAAS,CAACse,CAAc,CAAC3lB,EAAE,EACzCumB,GACAH,CAAAA,CAAS,CAACpmB,EAAE,CAAGumB,EAAiBD,CAAS,EAE7CH,CAAa,CAACnmB,EAAE,CAAGumB,EAAiBD,EAUxC,IARAF,EAAUM,IAAI,CAAC,CAAChsB,EAAGisB,IAAMjsB,EAAIisB,GAC7BH,CAAAA,EAAiBJ,CAAS,CAAC/kB,KAAKqU,KAAK,CAAC0Q,EAAUpnB,MAAM,CAAG,GAAG,AAAD,EACtCmmB,AAA0B,GAA1BA,GACjBqB,CAAAA,EAAiB,IAAG,EAGxBxmB,EAAI2lB,CAAc,CAAC3mB,EAAS,EAAE,CAAGsC,EAAMtC,EAAS,EAAIA,EACpDunB,EAAiB,KAAK,EACfvmB,KAEHymB,EAAWplB,KAAKyZ,GAAG,CAACyL,EADpBD,CAAAA,EAAaH,CAAa,CAACnmB,EAAE,AAAD,GAQxBumB,GACAE,EAAWtB,AAA0B,GAA1BA,GACVqB,CAAAA,AAAmB,OAAnBA,GAA2BC,EAAWD,AAAiB,GAAjBA,CAAmB,GAGtDtB,CAAW,CAACS,CAAc,CAAC3lB,EAAE,CAAC,EAC9B,CAACklB,CAAW,CAACS,CAAc,CAAC3lB,EAAI,EAAE,CAAC,EAGnCqmB,EAAermB,EAAI,EACnBumB,EAAiBD,GAIjBD,EAAermB,EAEnB2lB,EAAexB,MAAM,CAACkC,EAAc,IAGpCE,EAAiBD,CAG7B,CACA,OAAOX,CACX,CAUA,SAASiB,EAAUrlB,CAAK,EACpB,IAEAslB,EAAmBpJ,AAFUzX,AAAhB,IAAI,CAAiByX,OAAO,CAEdsH,SAAS,CAEpC,GAAI,CAAC8B,EACD,OAAOtlB,EAEX,IAAIvB,EAAI6mB,EAAiB7nB,MAAM,CAAG,EAAGynB,QAWrC,CAVIllB,EAAQ,EACRA,EAAQslB,CAAgB,CAAC,EAAE,CAEtBtlB,EAAQvB,EACbuB,EAAQslB,CAAgB,CAAC7mB,EAAE,EAG3BA,EAAIqB,KAAKqU,KAAK,CAACnU,GACfklB,EAAWllB,EAAQvB,GAEnB,AAAoB,KAAA,IAAbymB,GACP,AAA+B,KAAA,IAAxBI,CAAgB,CAAC7mB,EAAE,EACnB6mB,CAAgB,CAAC7mB,EAAE,CAAIymB,CAAAA,EAC1BA,EACKI,CAAAA,CAAgB,CAAC7mB,EAAI,EAAE,CAAG6mB,CAAgB,CAAC7mB,EAAE,AAAD,EACjD,CAAA,EAEDuB,CACX,CASA,SAASulB,EAAQC,CAAG,EAChB,IAAmBtJ,EAAUzX,AAAhB,IAAI,CAAiByX,OAAO,CAAEuJ,EAAWhhB,AAAzC,IAAI,CAA0CihB,GAAG,CAAGjhB,AAApD,IAAI,CAAqDihB,GAAG,CAAC/mB,GAAG,CAAG8F,AAAnE,IAAI,CAAoE9F,GAAG,CAAEgnB,EAASlhB,AAAtF,IAAI,CAAuFihB,GAAG,CAAGjhB,AAAjG,IAAI,CAAkGihB,GAAG,CAACE,MAAM,CAAGnhB,AAAnH,IAAI,CAAoHmhB,MAAM,CAErIpC,EAAYtH,EAAQ2J,oBAAoB,GAG9C,GAAIrC,GAAW/lB,OAAQ,CAEnB,IAAMqoB,EAAWhD,GAAyB,AAAC0C,CAAAA,EAAMC,CAAO,EAAKE,EACzDlhB,AARK,IAAI,CAQJshB,eAAe,EAAG/lB,EAAQ8iB,GAAyB5G,EAAQ8J,eAAe,CAACF,EAAUtC,IAAayC,EAAWnD,GAAyB9iB,EAAQ,GAGvJ,GAAIA,GAAS,GAAKA,GAASwjB,EAAU/lB,MAAM,CAAG,EAAG,CAC7C,IAAMyoB,EAAgB1C,CAAS,CAAC1jB,KAAKqU,KAAK,CAACnU,GAAO,CAAEmmB,EAAiB3C,CAAS,CAAC1jB,KAAKmU,IAAI,CAACjU,GAAO,CAChG,OAAOwjB,CAAS,CAAC1jB,KAAKqU,KAAK,CAACnU,GAAO,CAAGimB,EADuEE,CAAAA,EAAiBD,CAAY,CAE9I,CACJ,CAEA,OAAOV,CACX,CAMA,SAASY,EAAgBd,CAAgB,CAAEE,CAAG,EAC1C,IAAMxlB,EAAQ5H,EAAY0E,SAAS,CAACupB,WAAW,CAACf,EAAkBE,EAAK,CAAA,GACvE,GAAIF,CAAgB,CAACtlB,EAAM,GAAKwlB,EAC5B,OAAOxlB,EAEX,IAAMsmB,EAAU,AAACd,CAAAA,EAAMF,CAAgB,CAACtlB,EAAM,AAAD,EACxCslB,CAAAA,CAAgB,CAACtlB,EAAQ,EAAE,CAAGslB,CAAgB,CAACtlB,EAAM,AAAD,EACzD,OAAOA,EAAQsmB,CACnB,CAIA,SAASha,IAEA7H,AADQ,IAAI,CACPyX,OAAO,EACbzX,CAAAA,AAFS,IAAI,CAERyX,OAAO,CAAG,IAAI9jB,EAAY0E,SAAS,CAF/B,IAAI,CAEgC,CAErD,CAIA,SAASypB,IACL,GAAmB,CAAEtG,UAAAA,CAAS,CAAErjB,QAAAA,CAAO,CAAE,CAA5B,IAAI,CACjB,GAAI6H,AADS,IAAI,CACRhJ,OAAO,EACZsnB,GAAoBnmB,EAAQuf,UAAU,GACtCvf,AAAuB,IAAvBA,EAAQuf,UAAU,EAClB8G,GAAqBxe,AAJZ,IAAI,CAIa1E,GAAG,GAC7BkjB,GAAqBxe,AALZ,IAAI,CAKa9F,GAAG,IACzB8F,AANK,IAAI,CAMJ7H,OAAO,CAACsf,OAAO,EAAI,CAACzX,AANpB,IAAI,CAMqByX,OAAO,CAACsK,oBAAoB,EAE1D/hB,AARK,IAAI,CAQJyX,OAAO,CAAC2J,oBAAoB,CAAC,CAAA,GAElCphB,AAVK,IAAI,CAUJ1E,GAAG,GAAK0E,AAVR,IAAI,CAUSjH,OAAO,EAIzByiB,CAAAA,GAAWlb,UAAY,OACnBN,AAfC,IAAI,CAeA4G,UAAU,AAAD,GAElB4U,GAAWlb,UAAY,aAAa,CACpC,IAAMoX,EAAa1X,AAlBd,IAAI,CAkBeyX,OAAO,CAAC6D,iBAAiB,CAACnjB,EAAQuf,UAAU,CACpE1X,CAnBK,IAAI,CAmBJ1E,GAAG,EAAIoc,EAER,CAAC1X,AArBA,IAAI,CAqBC4G,UAAU,EAChB0X,GAAoBte,AAtBnB,IAAI,CAsBoB4b,OAAO,GAChCJ,GAAWlb,UAAY,cACvBN,CAAAA,AAxBC,IAAI,CAwBA9F,GAAG,EAAIwd,CAAS,CAE7B,CAER,CAOA,SAASsK,IAEDhiB,AADS,IAAI,CACRsB,KAAK,EAAI,CAACtB,AADN,IAAI,CACOwR,OAAO,EAC3BxR,CAAAA,AAFS,IAAI,CAERwR,OAAO,CAAGxR,AAFN,IAAI,CAEOiiB,SAAS,EACzBjiB,AAHK,IAAI,CAGJ3I,KAAK,CAAC+E,SAAS,EACpB,CAAC4D,AAJI,IAAI,CAIH3I,KAAK,CAAC+E,SAAS,CAAC4X,kBAAkB,AAAD,CAEnD,CAIA,SAASkO,IAEDliB,AADS,IAAI,CACRyX,OAAO,GACZzX,AAFS,IAAI,CAERyX,OAAO,CAAC0K,sBAAsB,GACnCniB,AAHS,IAAI,CAGRoiB,YAAY,CAAGpiB,AAHX,IAAI,CAGYyX,OAAO,CAAC4K,uBAAuB,CAACriB,AAHhD,IAAI,CAGiDoiB,YAAY,EAElF,CAKA,SAASE,EAAW7pB,CAAC,EACjB,IAAoBkB,EAAQtC,AAAd,IAAI,CAAgBsC,KAAK,CAAC,EAAE,CAAE+d,EAAa/d,EAAM8d,OAAO,CAAC6D,iBAAiB,CAAC3hB,EAAMxB,OAAO,CAACuf,UAAU,EAAGlM,EAAS/S,EAAE8pB,aAAa,CAAC/W,MAAM,CAAEgX,EAAUnrB,AAAjJ,IAAI,CAAmJc,OAAO,CAACd,KAAK,CAACmrB,OAAO,CACtLC,EAAU,CAAA,EACd,GAAID,GACAA,AAAiB,MAAjBA,EAAQ7jB,IAAI,EACZhF,EAAMxB,OAAO,CAACsf,OAAO,EACrB9d,EAAM1C,MAAM,CAAC+B,MAAM,EAElB,CAAA,CAACP,EAAEiW,OAAO,EAAIjW,EAAEiW,OAAO,CAAC1V,MAAM,EAAI,CAAA,EAAI,KAanC0pB,EAAc7B,EAZlB,IAAM8B,EAAatrB,AART,IAAI,CAQWsrB,UAAU,CAAE/pB,EAAWe,EAAMmF,WAAW,GAAIhG,EAAUF,EAASE,OAAO,CAAEC,EAAUH,EAASG,OAAO,CAAEmB,EAAMtB,EAASsB,GAAG,CAAEoB,EAAM1C,EAAS0C,GAAG,CAAEsnB,EAAcvrB,AARzK,IAAI,CAQ2KurB,WAAW,CAAEC,EAAqBlpB,EAAMkpB,iBAAiB,EAC7OlpB,EAAM8d,OAAO,EAAI9d,EAAM8d,OAAO,CAACqL,qBAAqB,CAGzDC,EAAa1nB,KAAKsW,KAAK,CAAC,AAACgR,CAAAA,EAAanX,CAAK,EAHqC7R,CAAAA,EAAMqpB,gBAAgB,CACjGrpB,CAAAA,EAAM8d,OAAO,CAACwL,KAAK,EAAIJ,CAAgB,CAAC,GAI7CK,EAA2BvpB,EAAM8d,OAAO,CAAC2J,oBAAoB,GAAI+B,EAAe,CAC5E1L,QAAS,CACLsH,UAAWmE,EACXA,yBAA0BA,CAC9B,CACJ,EAAGtC,EAAYjnB,EAAMinB,SAAS,CAAEwC,EAAUzpB,EAAMypB,OAAO,CAGvD,GAAI,AAAClpB,GAAOpB,GAAWiqB,EAAa,GAC/BznB,EAAMoc,GAAc3e,GAAWgqB,EAAa,EAC7C,MAGCI,CAAAA,EAAa1L,OAAO,CAACsH,SAAS,CAG1B1jB,KAAKyZ,GAAG,CAACiO,GAAc,IAExBH,GACAA,EAAY1rB,OAAO,CAAC,SAAUK,CAAK,EAC/BA,EAAM8rB,QAAQ,EAClB,GAOAtqB,EACA8nB,AAFJA,CAAAA,EAAmBsC,EAAa1L,OAAO,CAACsH,SAAS,AAAD,CAE5B,CAAC8B,EAAiB7nB,MAAM,CAAG,EAAE,EAC7C6nB,EAAiBrhB,IAAI,CAACzG,GAO1B1B,AAnDM,IAAI,CAmDJ8O,aAAa,CAAC7K,EAAMpB,GAUtBwoB,AATJA,CAAAA,EAAe/oB,EAAMsG,aAAa,CAC7BY,YAAY,CAAC,KAAK,EAAG,KAAK,EAAG+f,EAAU7oB,KAAK,CAACorB,EAAc,CAC5DC,EAAQrrB,KAAK,CAACorB,EAAc,CAACjpB,EAAK,CAAA,EAAK,EACnC6oB,EACP,EAAGnC,EAAU7oB,KAAK,CAACorB,EAAc,CAC9BC,EAAQrrB,KAAK,CAACorB,EAAc,CAAC7nB,EAAK,CAAA,EAAK,EACnCynB,EACP,EAAC,EAEe7oB,GAAG,EAAImB,KAAKnB,GAAG,CAAC2mB,CAAgB,CAAC,EAAE,CAAE3mB,IAClDwoB,EAAapnB,GAAG,EAAID,KAAKC,GAAG,CAACulB,CAAgB,CAACA,EAAiB7nB,MAAM,CAAG,EAAE,CAAEsC,GAAOoc,GACnF/d,EAAM6O,WAAW,CAACka,EAAaxoB,GAAG,CAAEwoB,EAAapnB,GAAG,CAAE,CAAA,EAAM,CAAA,EAAO,CAAEgF,QAAS,KAAM,GAExFjJ,AAjEM,IAAI,CAiEJsrB,UAAU,CAAGnX,EACnB0H,GAAI7b,AAlEE,IAAI,CAkEA+d,SAAS,CAAE,CAAEtC,OAAQ,MAAO,IAtCtC2P,EAAU,CAAA,CAwClB,MAEIA,EAAU,CAAA,CAGVA,CAAAA,GAAYD,GAAW,IAAIc,IAAI,CAACd,EAAQ7jB,IAAI,EACxC+Y,GACA/d,CAAAA,EAAM2B,GAAG,CAAG3B,EAAMZ,OAAO,CAAG2e,CAAS,EAIzCjf,EAAEgI,cAAc,EAExB,CAIA,SAAS8iB,IACL,IAAM5pB,EAAQ,IAAI,CAACA,KAAK,CAGpBA,GAASA,EAAMxB,OAAO,CAACsf,OAAO,GAC9B,OAAO9d,EAAM8d,OAAO,CAAClc,KAAK,CAC1B,OAAO5B,EAAM8d,OAAO,CAACsK,oBAAoB,CAEjD,CAcA,SAASqB,EAAQrC,CAAG,CAAEyC,CAAO,MAOrBC,EANJ,IAAmBhM,EAAUzX,AAAhB,IAAI,CAAiByX,OAAO,CAAEoJ,EAAmBpJ,EAAQsH,SAAS,CAC3EkE,EAAQxL,EAAQwL,KAAK,CAAEC,EAC3B,GAAI,CAACrC,EACD,OAAOE,EAEX,IAAM2C,EAAgB7C,EAAiB7nB,MAAM,CAI7C,GAAI6nB,CAAgB,CAAC,EAAE,EAAIE,GACvBF,CAAgB,CAAC6C,EAAgB,EAAE,EAAI3C,EACvC0C,EAAe9B,EAAgBd,EAAkBE,OAGhD,CAID,GAAI,CAAEmC,CAAAA,AAHNA,CAAAA,EACIzL,EAAQ2J,oBAAoB,EACxB3J,EAAQ2J,oBAAoB,EAAC,GACH8B,EAAyBlqB,MAAM,AAAD,EAC5D,OAAO+nB,EAEX,IAAM/nB,EAASkqB,EAAyBlqB,MAAM,CACzCiqB,GACDA,CAAAA,EACI,AAACC,CAAAA,CAAwB,CAAClqB,EAAS,EAAE,CACjCkqB,CAAwB,CAAC,EAAE,AAAD,EAC1BlqB,CAAK,EAIjB,IAAM2qB,EAA6BhC,EAAgBuB,EAA0BrC,CAAgB,CAAC,EAAE,EAGhG,GAAIE,GAAOmC,CAAwB,CAAC,EAAE,EAClCnC,GACImC,CAAwB,CAAClqB,EAAS,EAAE,CAExCyqB,EAAe9B,EAAgBuB,EAA0BnC,GACrD4C,MAEH,CACD,GAAI,CAACH,EAGD,OAAOzC,EAQP0C,EAFA1C,EAAMmC,CAAwB,CAAC,EAAE,CAG7B,CAACS,EAFoEC,AAA5DV,CAAAA,CAAwB,CAAC,EAAE,CAAGnC,CAAE,EAAmCkC,EAS5EY,AAHS9C,CAAAA,EACTmC,CAAwB,CAAClqB,EAAS,EAAE,AAAD,EAAmCiqB,EAGlEjqB,EACA2qB,CAEhB,CACJ,CACA,OAAOH,EAAUC,EAAeR,EAASQ,CAAAA,GAAgB,CAAA,EACrDhM,EAAQ7O,MAAM,AACtB,CA5dAjV,EAAY2G,OAAO,CAnBnB,SAAiBE,CAAS,CAAED,CAAW,CAAE4E,CAAU,EAC/C,IAAMzE,EAAYF,EAAUpF,SAAS,CAgBrC,OAfKsF,EAAUopB,WAAW,GACtBppB,EAAUkkB,YAAY,CAAGA,EACzBlkB,EAAUkmB,SAAS,CAAGA,EACtBlmB,EAAUomB,OAAO,CAAGA,EACpBpmB,EAAU0oB,OAAO,CAAGA,EAEpB1oB,EAAUopB,WAAW,CAAGppB,EAAU0oB,OAAO,CACzChF,GAAqB5jB,EAAW,YAAaqN,GAC7CuW,GAAqB5jB,EAAW,gBAAiBsnB,GACjD1D,GAAqB5jB,EAAW,gBAAiBwnB,GACjD5D,GAAqB5jB,EAAW,yBAA0B0nB,GAC1D9D,GAAqBjf,EAAY,MAAOmjB,GACxClE,GAAqBjf,EAAY,WAAYmjB,GAC7ClE,GAAqB7jB,EAAa,cAAegpB,IAE9C/oB,CACX,EAs7BA7G,EAAY0E,SAAS,CAhdrB,MASIwC,YAAYmF,CAAI,CAAE,CACd,IAAI,CAACzE,KAAK,CAAG,CAAC,EACd,IAAI,CAACyE,IAAI,CAAGA,CAChB,CAUAmiB,wBAAyB,CACrB,IAAMniB,EAAO,IAAI,CAACA,IAAI,CAAEyX,EAAUzX,EAAKyX,OAAO,CAAE7e,EAAWoH,EAAKlB,WAAW,GAAI5E,EAAMtB,EAASsB,GAAG,CAAEoB,EAAM1C,EAAS0C,GAAG,CAAEyoB,EAAY/jB,EAAKgkB,UAAU,EAAED,UAAW9B,EAAYjiB,EAAK7H,OAAO,CAACsf,OAAO,CAC3LnM,EAAK2Y,EAAwBC,EAAMC,EAAUC,EAAUnB,EAAOjpB,EAAG6mB,EAAmB,EAAE,CAAEiC,EAAwBpH,OAAOC,SAAS,CAAE0I,EAAa,CAAA,EAAOC,EAA8B,CAAA,EAAOC,EAAY,CAAA,EAE3M,GAAItC,GAAa8B,EAAW,CACxB,IAAIS,EAAuB,EAkE3B,GAjEAxkB,EAAK/I,MAAM,CAACC,OAAO,CAAC,SAAUD,CAAM,CAAE+C,CAAC,EACnC,IAAMyhB,EAAQxkB,EAAOuC,SAAS,CAAC,IAAK,CAAA,GAapC,GAZAyqB,EAAyB,EAAE,CAGvBjqB,EAAI,GACJ/C,AAAsB,gCAAtBA,EAAOkB,OAAO,CAACqL,EAAE,EACjBiY,EAAMziB,MAAM,CAAG,GACfsrB,CAAAA,EAA+BE,IAAyB/I,CAAK,CAAC,EAAE,CAAGA,CAAK,CAAC,EAAE,EAE/E+I,EAAuB/I,CAAK,CAAC,EAAE,CAAGA,CAAK,CAAC,EAAE,CACtCxkB,EAAO8Y,OAAO,EACdwU,CAAAA,EAAYttB,EAAO8Y,OAAO,AAAD,EAEzB9Y,EAAOwtB,YAAY,IAClBxtB,CAAAA,AAC4B,CAAA,IAD5BA,EACIytB,mBAAmB,EAAcX,CAAQ,IAI9CzY,EAAMuV,AADNA,CAAAA,EAAmBA,EAAiBpL,MAAM,CAACgG,EAAK,EACzBziB,MAAM,CAE7B6nB,EAAiBH,IAAI,CAAC,SAAUhsB,CAAC,CAAEisB,CAAC,EAEhC,OAAOjsB,EAAIisB,CACf,GACAmC,EAAwBznB,KAAKnB,GAAG,CAAC4oB,EAAuBrE,GAExDxnB,EAAO4rB,iBAAiB,CAAEC,IACtBxX,GAAK,CAEL,IADAtR,EAAI,EACGA,EAAIsR,EAAM,GACTuV,CAAgB,CAAC7mB,EAAE,GACnB6mB,CAAgB,CAAC7mB,EAAI,EAAE,EACvBiqB,EAAuBzkB,IAAI,CAACqhB,CAAgB,CAAC7mB,EAAI,EAAE,EAEvDA,GAGAiqB,CAAAA,CAAsB,CAAC,EAAE,GACzBpD,CAAgB,CAAC,EAAE,EACnBoD,EAAuBU,OAAO,CAAC9D,CAAgB,CAAC,EAAE,EAEtDA,EAAmBoD,CACvB,CAER,GACKjkB,EAAKyX,OAAO,CAACsK,oBAAoB,EAElC/hB,CAAAA,EAAKyX,OAAO,CAACsK,oBAAoB,CAC7B,AAAClB,CAAAA,EAAiB7nB,MAAM,CAAG,CAAA,EAAK8pB,CAAoB,EAMxDwB,GAA+BC,IAC/B1D,EAAiB+D,GAAG,GACpB/D,EAAiBd,KAAK,IAOtBzU,AAJJA,CAAAA,EAAMuV,EAAiB7nB,MAAM,AAAD,EAIlB,EAAG,CAGT,IAFAkrB,EAAOrD,CAAgB,CAAC,EAAE,CAAGA,CAAgB,CAAC,EAAE,CAChD7mB,EAAIsR,EAAM,EACHtR,KAAO,CAACqqB,GACPxD,CAAgB,CAAC7mB,EAAI,EAAE,CAAG6mB,CAAgB,CAAC7mB,EAAE,GAC7CkqB,GACAG,CAAAA,EAAa,CAAA,CAAG,CAMpB,EAACrkB,EAAK7H,OAAO,CAACwf,kBAAkB,EAC/BkJ,CAAAA,CAAgB,CAAC,EAAE,CAAG3mB,EAAMgqB,GACzB,AAAC5oB,EACGulB,CAAgB,CAACA,EAAiB7nB,MAAM,CAAG,EAAE,CAAIkrB,CAAG,GAC5DG,CAAAA,EAAa,CAAA,CAAG,CAExB,MACSrkB,EAAK7H,OAAO,CAACuf,UAAU,GACxBpM,AAAQ,IAARA,EAEAwX,EACIjC,CAAgB,CAAC,EAAE,CAAGA,CAAgB,CAAC,EAAE,CAExCvV,AAAQ,IAARA,GAGLwX,EAAwB9iB,EAAKyX,OAAO,CAAC6D,iBAAiB,CAACtb,EAAK7H,OAAO,CAACuf,UAAU,EAC9EmJ,EAAmB,CACfA,CAAgB,CAAC,EAAE,CACnBA,CAAgB,CAAC,EAAE,CAAGiC,EACzB,EAKDA,EAAwBrL,EAAQqL,qBAAqB,CAOzDuB,CAAAA,GAAcrkB,EAAK6kB,YAAY,EAC3B7kB,EAAK7H,OAAO,CAACuf,UAAU,GACvBD,EAAQqL,qBAAqB,CAAGA,EAChCjC,EAAmBA,EAAiBpL,MAAM,CAACgC,EAAQqN,sBAAsB,KAG7ErN,EAAQsH,SAAS,CAAG8B,EAIpBsD,EAAWnkB,EAAK8jB,WAAW,CAC3BzoB,KAAKC,GAAG,CAACpB,EAAK2mB,CAAgB,CAAC,EAAE,EAAG,CAAA,GACpCuD,EAAW/oB,KAAKC,GAAG,CAAC0E,EAAK8jB,WAAW,CAACzoB,KAAKnB,GAAG,CAACoB,EAAKulB,CAAgB,CAACA,EAAiB7nB,MAAM,CAAG,EAAE,EAAG,CAAA,GAAO,GAG1Gye,EAAQwL,KAAK,CAAGA,EACZ,AAAC3nB,CAAAA,EAAMpB,CAAE,EAAMkqB,CAAAA,EAAWD,CAAO,EACrC1M,EAAQ7O,MAAM,CAAG1O,EAAOiqB,EAAWlB,IAGnCxL,EAAQqL,qBAAqB,CAAGrE,GAAiBze,EAAK6iB,iBAAiB,CAAEpL,EAAQqL,qBAAqB,EACtGrL,EAAQsH,SAAS,CAAG/e,EAAKyX,OAAO,CAACwL,KAAK,CAAGxL,EAAQ7O,MAAM,CACnD,KAAK,EAEjB,CACA5I,EAAKiiB,SAAS,CAAGA,GAAaoC,EAC9B5M,EAAQsN,mBAAmB,CAAG,IAClC,CAcA,OAAOnD,YAAYoD,CAAW,CAAEpwB,CAAG,CAAEqwB,CAAc,CAAE,CACjD,IAAIvF,EAAQ,EAAGL,EAAM2F,EAAYhsB,MAAM,CAAG,EAAGksB,EAC7C,KAAOxF,EAAQL,GAGP2F,CAAW,CAFfE,EAAS7pB,KAAKmU,IAAI,CAAC,AAACkQ,CAAAA,EAAQL,CAAE,EAAK,GAEZ,EAAIzqB,EAEvB8qB,EAAQwF,EAIR7F,EAAM6F,EAAS,SAGvB,AAAIF,CAAW,CAACtF,EAAM,GAAK9qB,EAChB8qB,EAGJ,AAACuF,EAAsBvF,EAAL,EAC7B,CAUA0B,qBAAqB+D,EAAiB,CAAA,CAAI,CAAE,CACxC,IAAM1N,EAAU,IAAI,CAAEzX,EAAOyX,EAAQzX,IAAI,CAAEtF,EAAYsF,EAAKnF,WAAW,CAACzF,SAAS,CAAEiC,EAAQ2I,EAAK3I,KAAK,CAAEzC,EAAMoL,EAAK/I,MAAM,CAACgE,MAAM,CAAC,CAACmqB,EAAGnuB,KAChI,IAAMouB,EAAWpuB,EAAOquB,mBAAmB,CAC3C,OAAQF,EACHC,CAAAA,EAAWA,EAASE,KAAK,CAAGF,EAASG,QAAQ,CAAG,KAAI,CAC7D,EAAG,IAAK9N,EAAayN,EACjBnlB,EAAKyX,OAAO,CAAC6D,iBAAiB,CAACtb,EAAK7H,OAAO,CAACuf,UAAU,EAAI,EAAG9e,EAAWoH,EAAKlB,WAAW,GACxF2mB,EAAUC,EAAqBjC,EAAehM,EAAQlc,KAAK,CAgG/D,OA5FKkoB,GACDA,CAAAA,EAAehM,EAAQlc,KAAK,CAAG,CAAC,CAAA,EAEhC,CAACkoB,CAAY,CAAC7uB,EAAI,GA0BlB6wB,AAvBAA,CAAAA,EAAW,CACPxuB,OAAQ,EAAE,CACVI,MAAOA,EACPwtB,aAAc,CAAA,EACd/lB,YAAa,WACT,MAAO,CACH5E,IAAKtB,EAASE,OAAO,CACrBwC,IAAK1C,EAASG,OAAO,CAAG2e,CAC5B,CACJ,EACAiO,cAAejrB,EAAUirB,aAAa,CACtCC,mBAAoBlrB,EAAUkrB,kBAAkB,CAChDhH,aAAclkB,EAAUkkB,YAAY,CACpCzmB,QAAS,CACLsf,QAAS,CAAA,CACb,EACAA,QAAS,CACLoO,uBAAwB,IAAI,CAACA,sBAAsB,AACvD,EACA/B,YAAappB,EAAUopB,WAAW,CAClCvC,gBAAiB7mB,EAAU6mB,eAAe,CAC1C6B,QAAS1oB,EAAU0oB,OAAO,AAC9B,CAAA,EACS3L,OAAO,CAACzX,IAAI,CAAGylB,EAGxBzlB,EAAK/I,MAAM,CAACC,OAAO,CAAC,AAACD,IACjByuB,EAAa,CACT/rB,MAAO8rB,EACPpuB,MAAOA,EACP4L,gBAAiBhM,EAAOgM,eAAe,CACvC6iB,mBAAoB,AAACpwB,IAA+EqwB,IAAI,CACxGvsB,UAAWvC,EAAOuC,SAAS,CAC3BmsB,cAAe1uB,EAAO0uB,aAAa,CACnCK,iBAAkB/uB,EAAO+uB,gBAAgB,CACzCvB,aAAcxtB,EAAOwtB,YAAY,CACjCvK,QAASjjB,EAAOijB,OAAO,AAC3B,EACA,IAAMuB,EAAQxkB,EAAOuC,SAAS,CAAC,KAAKic,MAAM,CAAC0P,EACvC1N,EAAQqN,sBAAsB,GAC9B,EAAE,CACNY,CAAAA,EAAW7rB,SAAS,CAAG,IAAI6iB,GAAmB,CAC1CE,QAAS,CACLhhB,EAAG6f,CACP,CACJ,GACAiK,EAAWvtB,OAAO,CAAG,CACjB,GAAGlB,EAAOkB,OAAO,CACjB4K,aAAc9L,EAAOquB,mBAAmB,CAAG,CACvCpiB,YAAajM,EAAOkB,OAAO,CAAC4K,YAAY,EAAEG,YAC1CC,OAAQlM,EAAOkB,OAAO,CAAC4K,YAAY,EAAEI,OACrCC,WAAYnM,EAAOkB,OAAO,CAAC4K,YAAY,EAAEG,YACzCpF,QAAS,CAAA,EACTmoB,OAAQ,CAAA,EACRjjB,cAAe,OACfK,MAAO,CAAC,CACApM,EAAOquB,mBAAmB,CAACE,QAAQ,CACnC,CAACvuB,EAAOquB,mBAAmB,CAACC,KAAK,CAAC,CACrC,CAAC,AACV,EAAI,CACAznB,QAAS,CAAA,CACb,CACJ,EACA2nB,EAASxuB,MAAM,CAACuI,IAAI,CAACkmB,GACrBzuB,EAAOivB,WAAW,CAACnuB,KAAK,CAAC2tB,EAC7B,GACAD,EAASE,aAAa,CAAC,CAAEQ,mBAAoB,CAAA,CAAK,GAG7CT,GAAY7C,oBACb6C,GAAYU,gBACZV,EAAWJ,mBAAmB,EAC9BG,CAAAA,EAASZ,YAAY,CAAG,CAAA,CAAG,EAG/B7kB,EAAKyX,OAAO,CAAC0K,sBAAsB,CAACpqB,KAAK,CAAC,CAAEiI,KAAMylB,CAAS,GACvD,CAACzlB,EAAKyX,OAAO,CAACsK,oBAAoB,EAClC0D,EAAShO,OAAO,CAACsK,oBAAoB,EACrC/hB,CAAAA,EAAKyX,OAAO,CAACsK,oBAAoB,CAC7B0D,EAAShO,OAAO,CAACsK,oBAAoB,AAAD,EAGxC0D,EAAShO,OAAO,CAACsH,SAAS,EAC1B0E,CAAAA,CAAY,CAAC7uB,EAAI,CAAG6wB,EAAShO,OAAO,CAACsH,SAAS,AAAD,GAG9C0E,CAAY,CAAC7uB,EAAI,AAC5B,CAwBAixB,uBAAuBQ,CAAI,CAAEC,CAAI,CAAErvB,CAAM,CAAE,CACvC,IAAsB2C,EAAiB3C,EAAOuC,SAAS,CAAC,IAAK,CAAA,GAAO8R,EAAM1R,EAAeZ,MAAM,CAAEonB,EAAY,EAAE,CAC3GmG,EAAQvsB,EAAG+qB,EAAsBtN,AADrB,IAAI,CACyBsN,mBAAmB,CAGhE,GAAI,CAACA,EAAqB,CAEtB,IAAK/qB,EAAI,EAAGA,EAAIsR,EAAM,EAAGtR,IACrBomB,CAAS,CAACpmB,EAAE,CAAIJ,CAAc,CAACI,EAAI,EAAE,CACjCJ,CAAc,CAACI,EAAE,CAGzBomB,EAAUM,IAAI,CAAC,SAAUhsB,CAAC,CAAEisB,CAAC,EACzB,OAAOjsB,EAAIisB,CACf,GACA4F,EAASnG,CAAS,CAAC/kB,KAAKqU,KAAK,CAACpE,EAAM,GAAG,CAGvC+a,EAAOhrB,KAAKC,GAAG,CAAC+qB,EAAMzsB,CAAc,CAAC,EAAE,EACvC0sB,EAAOjrB,KAAKnB,GAAG,CAACosB,EAAM1sB,CAAc,CAAC0R,EAAM,EAAE,EAC7CmM,AAnBY,IAAI,CAmBRsN,mBAAmB,CAAGA,EAC1B,AAACzZ,EAAMib,EAAWD,CAAAA,EAAOD,CAAG,CACpC,CAEA,OAAOtB,CACX,CAaAxD,gBAAgBF,CAAQ,CAAEmF,CAAY,CAAE,CACpC,IAAsBxmB,EAAOyX,AAAb,IAAI,CAAiBzX,IAAI,CAAE9F,EAAM8F,EAAK9F,GAAG,CAAEusB,EAAOzmB,EAAKshB,eAAe,CAMtF,OAAOoF,AAN8F/E,EAAgB6E,EAActsB,GAKhHmkB,GAAyB,AAACgD,CAAAA,EAAWoF,CAAG,EAJzBzmB,CAAAA,EAAKgjB,gBAAgB,CAClDvL,CAAAA,AAFW,IAAI,CAEPwL,KAAK,EACVjjB,EAAK6iB,iBAAiB,EACtBpL,AAJQ,IAAI,CAIJqL,qBAAqB,AAAD,CAAC,EAGzC,CAUAgC,wBAAyB,CACrB,IAAsB9kB,EAAOyX,AAAb,IAAI,CAAiBzX,IAAI,CAAE2mB,EAAalP,AAAxC,IAAI,CAA4C6D,iBAAiB,CAACtb,EAAK7H,OAAO,CAACuf,UAAU,EAAG+I,EAAWhJ,AAAvG,IAAI,CAA2GqL,qBAAqB,CAAE/D,EAAY,EAAE,CAChKzjB,EAAM0E,EAAKjH,OAAO,CACtB,GAAIulB,GAAoBmC,GAEpB,KAAOnlB,EAAM0E,EAAKjH,OAAO,CAAG4tB,GAExB5H,EAAUvf,IAAI,CADdlE,GAAOmlB,GAIf,OAAO1B,CACX,CAMAsD,wBAAwBD,CAAY,CAAE,CAOlC,IAAsBpiB,EAAOyX,AAAb,IAAI,CAAiBzX,IAAI,CAAE4mB,EAAenP,AAA1C,IAAI,CAA8CwL,KAAK,CAAEJ,EAAoB7iB,EAAK6iB,iBAAiB,CAcnH,OAZI+D,GAAgB/D,EACX7iB,EAAK7H,OAAO,CAACqf,MAAM,CAKdqL,GAAqBT,EAJpBA,EACFwE,CAAAA,EAAe/D,CAAgB,EAOlCT,CAGd,CAUA9G,kBAAkB5D,EAAa,CAAC,CAAE,CAC9B,IAAMD,EAAU,IAAI,CAAEzX,EAAOyX,EAAQzX,IAAI,CAAE6mB,EAAsB,SAAUC,CAAoB,EAC3F,OAAOrI,GAAiBhH,EAAQsK,oBAAoB,CAAEzD,GAAoBte,EAAKjH,OAAO,GAAKulB,GAAoBte,EAAKlH,OAAO,EACvHkH,EAAKjH,OAAO,CAAGiH,EAAKlH,OAAO,CAAG,GAAKguB,CAC3C,EACA,GAAInI,GAAqBjH,GAAa,CAClC,IAAMqP,EAAkBnV,SAAS8F,EAAY,IAC7C,GAAI,KAAK4L,IAAI,CAAC5L,GAEV,OAAOmP,EAAoBE,EAAkB,KAEjD,GAAI,KAAKzD,IAAI,CAAC5L,GAAa,CAGvB,IAA0EsP,EAAiBC,AAA5D5rB,KAAKnB,GAAG,CAAC6sB,EAAiB/mB,AAAW,GAAXA,EAAKsL,GAAG,EAAmDtL,EAAKsL,GAAG,CAC5H,OAAOub,EAAoBG,EAAkB,CAAA,EAAIA,CAAa,EAClE,CAGA,OAAO,CACX,CACA,OAAOtP,CACX,CACJ,CAEJ,EAAG/jB,GAAgBA,CAAAA,EAAc,CAAC,CAAA,GAML,IAAMuzB,GAAoBvzB,EA4iBpBwzB,GAJL,CAC1BC,KAxgBS,CAMTC,kBAAmB,OAQnBC,kBAAmB,GAMnBC,gBAAiB,GACrB,EAofI9pB,cA1ekB,CAYlB+pB,kBAAmB,CAAA,EA0CnBvb,QAAS,CAAC,CACFtN,KAAM,QACN4mB,MAAO,EACPzgB,KAAM,KACND,MAAO,cACX,EAAG,CACClG,KAAM,QACN4mB,MAAO,EACPzgB,KAAM,KACND,MAAO,eACX,EAAG,CACClG,KAAM,QACN4mB,MAAO,EACPzgB,KAAM,KACND,MAAO,eACX,EAAG,CACClG,KAAM,MACNmG,KAAM,MACND,MAAO,mBACX,EAAG,CACClG,KAAM,OACN4mB,MAAO,EACPzgB,KAAM,KACND,MAAO,aACX,EAAG,CACClG,KAAM,MACNmG,KAAM,MACND,MAAO,UACX,EAAE,CAqGN4iB,cAAe,EAgBfC,SAAU,aAWV5pB,QAAS,KAAK,EAadF,cAAe,MAqBf+pB,YAAa,CAETzlB,MAAO,GAEPlF,OAAQ,GAER4qB,QAAS,EAETrkB,OAAQ,CACZ,EAWAxF,SAAU,CAAA,EAOVnC,EAAG,EAOH2I,EAAG,EASHvH,OAAQ,KAAK,EAUb6qB,oBAAqB,OASrBC,eAAgB,GAWhBC,cAAe,KAAK,EAgBpBC,gBAAiB,SAkBjBC,gBAAiB,KAAK,EActBC,oBAAqB,WAIrBC,aAAc,CAAA,EAOdC,cAAe,CAcXlkB,MAAO,QAIPtI,EAAG,EAIH2I,EAAG,CACP,EAOA8jB,aAAc,EAQdC,SAAU,KAAK,EAMfC,eAAgB,CAcZrkB,MAAO,OAIPtI,EAAG,EAIH2I,EAAG,CACP,EAcAikB,WAAY,CAER3mB,MAAO,UAEPiR,OAAQ,UAER1O,SAAU,OACd,EAYAqkB,WAAY,CAER5mB,MAAO,UAEPuC,SAAU,OACd,CACJ,CASA,EAeM,CAAEoG,eAAgBke,EAAuC,CAAE,CAAIhzB,IAE/D,CAAE4Q,SAAUqiB,EAAiC,CAAE,CAAIjzB,IAGnD,CAAES,SAAUyyB,EAAiC,CAAEryB,QAASsyB,EAAgC,CAAEniB,OAAQoiB,EAA+B,CAAEryB,SAAUsyB,EAAiC,CAAE/sB,MAAOgtB,EAA8B,CAAEryB,KAAMsyB,EAA6B,CAAE5pB,WAAY6pB,EAAmC,CAAE,CAAIxzB,IAMjTyzB,GAAqB,EAAE,CAuB7B,SAASC,SA2BDlvB,EAAKqG,EA1BT,IAAM8oB,EAAe,IAAI,CAAC9oB,KAAK,CAAE5B,EAAO0qB,EAAa1qB,IAAI,CAAErD,EAAM,IAAI,CAACA,GAAG,CAAEmd,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAEjG6Q,EAAe,SAAU5P,CAAI,CAAE6L,CAAK,EAChC,IAAMgE,EAAW9Q,EAAK+Q,OAAO,CAAC9P,GAAOmD,EAAW0M,EAASjP,KAAK,EAC1D3b,AAAS,CAAA,SAATA,EACAke,CAAQ,CAAC,EAAE,EAAI0I,EAGf1I,CAAQ,CAAC,EAAE,EAAI0I,EAEnB,IAAI9wB,EAAIgkB,EAAKgR,QAAQ,CAAC1xB,KAAK,CAAC0gB,EAAMoE,GAC5BxL,EAAUoH,EAAK+Q,OAAO,CAAC/0B,GAa7B,MATa,UAATkK,GACA4qB,CAAQ,CAAC,EAAE,GAAKlY,CAAO,CAAC,EAAE,EAC1BhW,AAAoB,IAApBA,KAAKyZ,GAAG,CAACyQ,KACT1I,CAAQ,CAAC,EAAE,CAAG0M,CAAQ,CAAC,EAAE,CACzB1M,CAAQ,CAAC,EAAE,CAAG0M,CAAQ,CAAC,EAAE,CAEzB1M,CAAQ,CAAC,EAAE,CAAG,GAGXpoB,AADPA,CAAAA,EAAIgkB,EAAKgR,QAAQ,CAAC1xB,KAAK,CAAC0gB,EAAMoE,EAAQ,EAC3BnD,CACf,EAEIqP,GAAkCM,IAClCnvB,EAAMoB,EAAM+tB,EACZ9oB,EAAQ8oB,GAEHA,IACLnvB,EAAMoB,EAAMguB,EAAahuB,EAAK,CAAE+tB,CAAAA,EAAa9D,KAAK,EAAI,CAAA,GAElD,IAAI,CAACluB,KAAK,EACV,IAAI,CAACA,KAAK,CAAC8O,aAAa,CAAC7K,EAAMpB,IAGvC,IAAMpB,EAAUmwB,GAA8B,IAAI,CAACnwB,OAAO,CAAE4iB,OAAOgO,SAAS,EAmB5E,OAlBKX,GAAkC7uB,IACnCA,CAAAA,EAAMpB,CAAM,EAEZoB,GAAOpB,IACPoB,EAAMpB,EACe,KAAA,IAAVyH,GACPA,CAAAA,EAAQ+oB,EAAapvB,EAAKmvB,EAAa9D,KAAK,CAAA,EAEhD,IAAI,CAAChkB,MAAM,CAAGlG,KAAKnB,GAAG,CAACA,EAAMqG,EAAO0oB,GAA8B,IAAI,CAAClwB,OAAO,CAAE2iB,OAAOC,SAAS,IAE/FoN,GAAkCztB,GAG9B,CAACytB,GAAkCM,IACxCA,GACAA,EAAaM,UAAU,EACvBzvB,CAAAA,GAAOmvB,EAAaM,UAAU,AAAD,EAL7BzvB,EAAM,KAAK,EAORA,CACX,CAIA,SAAS0vB,KACL,IAAI,CAACnsB,aAAa,EAAEosB,gBACxB,CAyBA,SAASC,KACD,IAAI,CAAC3xB,OAAO,CAACsF,aAAa,EAC1B,IAAI,CAACtF,OAAO,CAACsF,aAAa,CAACK,OAAO,EAClC,CAAA,IAAI,CAACL,aAAa,CAAG,IAAInK,EAAyB,IAAI,CAAA,CAE9D,CAIA,SAASy2B,KACL,IAAoBtsB,EAAgBpG,AAAtB,IAAI,CAAwBoG,aAAa,CACvD,GAAIA,EAAe,CACXsrB,GAAkCtrB,EAAcusB,gBAAgB,IAChEvsB,EAAcwsB,WAAW,CAACxsB,EAAcusB,gBAAgB,EACxD,OAAOvsB,EAAcusB,gBAAgB,EAEzC,IAAMpsB,EAAgBH,EAActF,OAAO,CAACyF,aAAa,AACpDH,CAAAA,EAActF,OAAO,CAAC4F,QAAQ,GAC3BH,AAAkB,WAAlBA,EACA,IAAI,CAACF,iBAAiB,CAAG,CAAA,EAEF,QAAlBE,GACL,CAAA,IAAI,CAACssB,cAAc,CAAG,CAAA,CAAG,EAGrC,CACJ,CACA,SAASC,SAMDC,EAJJ,IAAM3sB,EAAgB,IAAI,CAACA,aAAa,CACxC,GAAI,CAACA,EACD,OAGJ,IAAM7E,EAAWvB,AANH,IAAI,CAMKsC,KAAK,CAAC,EAAE,CAACmF,WAAW,GACrCrC,EAASpF,AAPD,IAAI,CAOGoF,MAAM,CACrBmB,EAAiBH,GACnBA,EAActF,OAAO,CAACyF,aAAa,CACnCmrB,GAAkCnwB,EAASsB,GAAG,GAC9CuD,EAAcsB,MAAM,CAACnG,EAASsB,GAAG,CAAEtB,EAAS0C,GAAG,EAG/CmB,EAAO4tB,OAAO,EACdzsB,AAAkB,QAAlBA,GACAA,IAAkBnB,EAAOtE,OAAO,CAACyF,aAAa,GAE9CwsB,EAAUpB,GAA+B3xB,AAlB/B,IAAI,CAkBiCizB,UAAU,EACrD7tB,AAA0B,aAA1BA,EAAOtE,OAAO,CAAC0F,MAAM,CACrBusB,EAAQ7lB,CAAC,CAAGlN,AApBN,IAAI,CAoBQ8F,OAAO,CAGzBitB,EAAQ7lB,CAAC,EAAI9G,EAAcE,SAAS,GAExClB,EAAOiR,KAAK,CAAC6c,MAAM,CAAG,CAAA,EACtB9tB,EAAOyH,KAAK,CAACkmB,GAErB,CAKA,SAASI,KACL,IAAK,IAAIxwB,EAAI,EAAGywB,EAAOtB,GAAmBnwB,MAAM,CAAEgB,EAAIywB,EAAM,EAAEzwB,EAAG,CAC7D,IAAM4b,EAASuT,EAAkB,CAACnvB,EAAE,CACpC,GAAI4b,CAAM,CAAC,EAAE,GAAK,IAAI,CAAE,CACpBA,CAAM,CAAC,EAAE,CAAC1e,OAAO,CAAC,AAAC8f,GAAWA,KAC9BmS,GAAmBhL,MAAM,CAACnkB,EAAG,GAC7B,MACJ,CACJ,CACJ,CAIA,SAAS0wB,KACL,IAAMjtB,EAAgB,IAAI,CAACA,aAAa,CACxC,GAAIA,GAAetF,SAAS2F,QAAS,CACjC,IAAM6sB,EAAsBltB,EAAcE,SAAS,GAC7CC,EAAgBH,EAActF,OAAO,CAACyF,aAAa,AACpDH,CAAAA,EAActF,OAAO,CAAC4F,QAAQ,GAC3BH,AAAkB,WAAlBA,EACA,IAAI,CAACgtB,YAAY,EAAID,EAEE,WAAlB/sB,GACL,CAAA,IAAI,CAACT,OAAO,EAAIwtB,CAAkB,EAG9C,CACJ,CAIA,SAASE,GAAuCpyB,CAAC,EAC7C,IAAyCqyB,EAAuB3yB,AAAlCM,EAAEN,OAAO,CAAiCsF,aAAa,CAAEstB,EAAuB,IAAI,CAACrtB,iBAAiB,CAAEstB,EAAoB,IAAI,CAACd,cAAc,CACzKzsB,EAAgBpG,AADN,IAAI,CACQoG,aAAa,CAUvC,GATIqtB,GACAA,EAAqBhtB,OAAO,EAC5B,CAAC+qB,GAAiCprB,IAClC,IAAI,CAACtF,OAAO,CAACsF,aAAa,GAC1B,IAAI,CAACtF,OAAO,CAACsF,aAAa,CAACK,OAAO,CAAG,CAAA,EACrC,IAAI,CAACL,aAAa,CAAGA,EAAgB,IAAInK,EAAyB,IAAI,GAE1E,IAAI,CAACoK,iBAAiB,CAAG,CAAA,EACzB,IAAI,CAACwsB,cAAc,CAAG,CAAA,EAClBzsB,EAAe,CACf,IAAMG,EAAgB,AAACktB,GACnBA,EAAqBltB,aAAa,EAAMH,EAActF,OAAO,EAAIsF,EAActF,OAAO,CAACyF,aAAa,AACnGH,CAAAA,EAActF,OAAO,CAAC4F,QAAQ,GAC3BH,AAAkB,WAAlBA,EACA,IAAI,CAACF,iBAAiB,CAAG,CAAA,EAEF,WAAlBE,GACL,CAAA,IAAI,CAACssB,cAAc,CAAG,CAAA,CAAG,GAG7B,CAAA,IAAI,CAACxsB,iBAAiB,GAAKqtB,GAC3B,IAAI,CAACb,cAAc,GAAKc,CAAgB,GACxC,CAAA,IAAI,CAACzT,UAAU,CAAG,CAAA,CAAG,CAE7B,CACJ,CAS6B,IAAM0T,GAHF,CAC7B3wB,QApJJ,SAA0CE,CAAS,CAAE2E,CAAU,CAAE+rB,CAAkB,EAE/E,GADA53B,EAA2B43B,EACvBhC,GAAoCP,GAAmC,iBAAkB,CACzF,IAAMrpB,EAAaH,EAAW/J,SAAS,AACvCoF,CAAAA,EAAUpF,SAAS,CAAC+1B,YAAY,CAAG/B,GACnCR,GAAkCzpB,EAAY,oBAAqB2qB,IACnElB,GAAkCzpB,EAAY,eAAgB4qB,IAC9DnB,GAAkCzpB,EAAY,UAAWqrB,IACzD5B,GAAkCzpB,EAAY,aAAcurB,IAC5D9B,GAAkCzpB,EAAY,SAAUgrB,IACxDvB,GAAkCzpB,EAAY,SAAU0rB,IACxDjC,GAAkCzpB,EAAY,eAAgByqB,IAC9DtqB,EAAWC,SAAS,CAACC,IAAI,CAAC2qB,IAC1BrB,GAAgCJ,GAAyC,CAAEjrB,cAAe0pB,GAAoC1pB,aAAa,AAAC,GAC5IqrB,GAAgCJ,GAAwCtB,IAAI,CAAED,GAAoCC,IAAI,CAC1H,CACJ,CAqIA,EAIA,IAAIgE,GAAmHl3B,EAAoB,IACvIm3B,GAAuIn3B,EAAoBI,CAAC,CAAC82B,IAcjK,GAAM,CAAE5gB,eAAgB8gB,EAA4B,CAAE,CAAI51B,IAMpD,CAAES,SAAUo1B,EAAsB,CAAEC,cAAAA,EAAa,CAAEtY,IAAKuY,EAAiB,CAAEl1B,QAASm1B,EAAqB,CAAE7gB,wBAAyB8gB,EAAqC,CAAEC,YAAAA,EAAW,CAAEC,eAAAA,EAAc,CAAEnlB,OAAQolB,EAAoB,CAAEhhB,UAAWihB,EAAuB,CAAEt1B,SAAUu1B,EAAsB,CAAEt1B,SAAUu1B,EAAsB,CAAEjwB,MAAOkwB,EAAmB,CAAE1P,WAAY2P,EAAwB,CAAEx1B,KAAMy1B,EAAkB,CAAElb,MAAOmb,EAAmB,CAAE,CAAI32B,IAYhd,SAAS42B,GAAmBC,CAAM,EAC9B,IAAMC,EAAa,AAACC,GAAS,AAAIC,OAAO,CAAC,WAAW,EAAED,EAAK,CAAC,EAAEnJ,IAAI,CAACiJ,GAKnE,GAJWN,GAAuBM,GAC9BA,AAAyB,KAAzBA,EAAO5S,OAAO,CAAC,MAEf4S,EAAOI,sBAAsB,CAE7B,MAAO,OAEX,IAAMC,EAAOX,GAAuBM,GAChC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAClDM,IAAI,CAACL,GACVD,EAAOO,SAAS,EAAIP,EAAOQ,GAAG,EAAIR,EAAOS,KAAK,EAAIT,EAAOU,IAAI,CAC3DxU,EAAOwT,GAAuBM,GAChC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAACM,IAAI,CAACL,GACpCD,EAAOW,SAAS,EAAIX,EAAOtM,IAAI,EAAIsM,EAAOY,MAAM,EAAIZ,EAAOa,MAAM,QACrE,AAAIR,GAAQnU,EACD,iBAEPmU,EACO,OAEPnU,EACO,OAEJ,MACX,CAcA,MAAM4U,GASF,OAAO/yB,QAAQE,CAAS,CAAE2E,CAAU,CAAE,CAClC8rB,GAAuC3wB,OAAO,CAACE,EAAW2E,EAAYkuB,GAC1E,CAMAxyB,YAAYxD,CAAK,CAAE,CACf,IAAI,CAACma,OAAO,CAAG,CAAA,EACf,IAAI,CAAC8b,aAAa,CAAGD,GAAcj4B,SAAS,CAACm4B,cAAc,CAC3D,IAAI,CAACC,uBAAuB,CAAG,EAC/B,IAAI,CAACC,cAAc,CAAG,KAClB,IAAIC,EAAc,EAOlB,OANA,IAAI,CAACzhB,OAAO,CAAC/U,OAAO,CAAC,AAACy2B,IAClB,IAAMC,EAAOD,EAAOE,OAAO,EACvBD,CAAAA,EAAK1rB,KAAK,CAAGwrB,GACbA,CAAAA,EAAcE,EAAK1rB,KAAK,AAAD,CAE/B,GACOwrB,CACX,EACA,IAAI,CAAC5hB,IAAI,CAACzU,EACd,CAgBA4yB,YAAYjwB,CAAC,CAAEjD,CAAM,CAAE,CACnB,IAA4BM,EAAQoG,AAAd,IAAI,CAAwBpG,KAAK,CAAEgyB,EAAe5rB,AAAlD,IAAI,CAA4D6vB,aAAa,CAACtzB,EAAE,CAAEwe,EAAWnhB,EAAMsC,KAAK,CAAC,EAAE,CAAEkd,EAAgB,AAACxf,EAAMgH,QAAQ,EAAIhH,EAAMgH,QAAQ,CAAC+X,gBAAgB,IAAOoC,GAAY,CAAC,EAAG7Z,EAAO0qB,EAAa1qB,IAAI,CAAEoE,EAAesmB,EAAatmB,YAAY,CAC1RjK,EAAU+d,EAAc/d,OAAO,CAAEC,EAAU8d,EAAc9d,OAAO,CAAEqI,EAAQG,EAASyqB,GAAuBxT,GAAUld,KAAOD,KAAKsW,KAAK,CAACtW,KAAKnB,GAAG,CAACse,EAASld,GAAG,CAAEvC,GAAWyf,EAASld,GAAG,GAAK,KAAK,EAClMwyB,EAAkBvtB,EAAQ8oB,EAAa0E,MAAM,CAAEC,EAAUC,EAAKC,EAAaC,EAAe,CAAA,EAE1F,GAAIr1B,AAAY,OAAZA,GAAoBC,AAAY,OAAZA,GAWxB,GARA0E,AAPsB,IAAI,CAOZ2wB,WAAW,CAACp0B,GAEtB+I,IACA,IAAI,CAACsrB,kBAAkB,CAAG,CAAA,EAC1Bz4B,IAAkGR,SAAS,CAACk5B,eAAe,CAACh5B,IAAI,CAACkjB,GAAY,CAAEnhB,MAAO,IAAI,CAACA,KAAK,AAAC,EAAG0L,EAAc,CAAA,GAClL,IAAI,CAACwrB,YAAY,CAAGlF,EAAamF,oBAAoB,EAGrD7vB,AAAS,UAATA,GAAoBA,AAAS,SAATA,EACf6Z,GAMDyV,EAAM,CACF1tB,MAAO8oB,EACP/tB,IAAKiG,EACLlK,MAAOA,EACPyB,QAASA,EACTC,QAASA,CACb,EACAqI,EAASoX,EAAS2S,YAAY,CAAC71B,IAAI,CAAC24B,GAChCjC,GAAuBiC,EAAI1sB,MAAM,GACjCA,CAAAA,EAAS0sB,EAAI1sB,MAAM,AAAD,EAItB4sB,EAAe,CAAA,GAhBf5tB,EAAQ8oB,OAoBX,GAAI9oB,EACDyrB,GAAuBzqB,KAEvBA,EAASlG,KAAKnB,GAAG,CAACkH,AADlBA,CAAAA,EAAS/F,KAAKC,GAAG,CAACiG,EAAShB,EAAOzH,EAAO,EACdyH,EAAOxH,GAClCo1B,EAAe,CAAA,QAGlB,GAAIxvB,AAAS,QAATA,GAGL,GAAI6Z,GAMIA,EAASiW,OAAO,IAAO,AAACzC,GAAuBjzB,IAC9CizB,GAAuBlzB,KACxBA,EAAU4iB,OAAOC,SAAS,CAC1B5iB,EAAU,CAAC2iB,OAAOC,SAAS,CAC3BtkB,EAAMJ,MAAM,CAACC,OAAO,CAAC,AAACD,IAElB,IAAMwkB,EAAQxkB,EAAOuC,SAAS,CAAC,IAC3BiiB,CAAAA,EAAMziB,MAAM,GACZF,EAAUuC,KAAKnB,GAAG,CAACuhB,CAAK,CAAC,EAAE,CAAE3iB,GAC7BC,EAAUsC,KAAKC,GAAG,CAACmgB,CAAK,CAACA,EAAMziB,MAAM,CAAG,EAAE,CAAED,GAEpD,GACAhC,EAAS,CAAA,GAETi1B,GAAuBjzB,IAAYizB,GAAuBlzB,KAE1DsI,EAAS4sB,EAAWE,AADpBA,CAAAA,EAAczwB,AAtEJ,IAAI,CAsEcixB,cAAc,CAAC31B,EAASD,EAAO,EAC3BoB,GAAG,CACnCqH,EAAS2sB,EAAY5yB,GAAG,MAM3B,CACDmC,AA/Ec,IAAI,CA+EJusB,gBAAgB,CAAGhwB,EACjC,MACJ,MAEc,QAAT2E,GAAkB6Z,IAGnBnhB,EAAM+E,SAAS,EAAI/E,EAAM+E,SAAS,CAAC6X,UAAU,CAAC,EAAE,EAChD5c,CAAAA,EAAM+E,SAAS,CAAC6X,UAAU,CAAC,EAAE,CAACta,KAAK,CAACxB,OAAO,CAACoI,KAAK,CAAG,KAAK,CAAA,EAE7Da,EAAStI,EACTyI,EAASxI,GAYb,GAVIo1B,GAAgB9E,EAAaM,UAAU,EAAI+B,GAAsBtqB,IACjEA,CAAAA,GAAUioB,EAAaM,UAAU,AAAD,EAEhCN,EAAasF,UAAU,EAAIjD,GAAsBnqB,IACjDA,CAAAA,GAAU8nB,EAAasF,UAAU,AAAD,EAEhC,IAAI,CAACjH,QAAQ,EACb,CAAA,IAAI,CAACA,QAAQ,CAACkH,aAAa,CAAG50B,EAAI,CAAA,EAGjCwe,EAkBIwT,GAAuB5qB,IAAW4qB,GAAuBzqB,KAE9DiX,EAAShQ,WAAW,CAACpH,EAAQG,EAAQ6qB,GAAmBr1B,EAAQ,CAAA,GAAO,KAAK,EAC5E,CACIuJ,QAAS,sBACTuuB,oBAAqBxF,CACzB,GACAhyB,EAAM8O,aAAa,CAACkjB,EAAa0E,MAAM,OAzB5B,CAIXD,EAAmBzB,GAAoBh1B,EAAMc,OAAO,CAACwB,KAAK,EAAI,CAAC,EAAE,CAAC,EAAE,CACpE,IAAMm1B,EAAuBvD,GAAuBl0B,EAAO,kBAAmB,WAC1E,IAAMsC,EAAQtC,EAAMsC,KAAK,CAAC,EAAE,AAC5BA,CAAAA,EAAM4G,KAAK,CAAG5G,EAAMxB,OAAO,CAACoI,KAAK,CAAGA,EACpC5G,EAAMO,GAAG,CAAGP,EAAMxB,OAAO,CAAC+B,GAAG,CAAG8zB,CACpC,GACAzC,GAAuBl0B,EAAO,OAAQ,WAClC,IAAMsC,EAAQtC,EAAMsC,KAAK,CAAC,EAAE,CAC5BtC,EAAM8O,aAAa,CAACkjB,EAAa0E,MAAM,EACvCp0B,EAAMxB,OAAO,CAACoI,KAAK,CAAGutB,EAAiBvtB,KAAK,CAC5C5G,EAAMxB,OAAO,CAAC+B,GAAG,CAAG4zB,EAAiB5zB,GAAG,CACxC40B,GACJ,EACJ,CAUA/C,GAAwB,IAAI,CAAE,iBAClC,CASAqC,YAAY9F,CAAQ,CAAE,CAClB,IAAI,CAACA,QAAQ,CAAG,IAAI,CAACnwB,OAAO,CAACmwB,QAAQ,CAAGA,CAC5C,CAQAxc,KAAKzU,CAAK,CAAE,CACR,IAAMoG,EAAgB,IAAI,CAAEtF,EAAUd,EAAMc,OAAO,CAACsF,aAAa,CAAE6vB,EAAgBn1B,EAAQ8T,OAAO,CAAE8iB,EAAiB52B,EAAQmwB,QAAQ,CAAE0G,EAAa,WAChJ,IAAMC,EAAWxxB,EAAcwxB,QAAQ,CAAEC,EAAWzxB,EAAcyxB,QAAQ,CAEtED,GAAcA,EAASE,IAAI,EAC3BpD,GAAwBkD,EAAU,QAElCC,GAAcA,EAASC,IAAI,EAC3BpD,GAAwBmD,EAAU,OAE1C,CACAzxB,CAAAA,EAAcpG,KAAK,CAAGA,EACtBoG,EAActF,OAAO,CAAGA,EACxBsF,EAAcwO,OAAO,CAAG,EAAE,CAC1BxO,EAAc6vB,aAAa,CAAGA,EAC9B,IAAI,CAACnZ,cAAc,CAAG,EAAE,CACxB,IAAI,CAACA,cAAc,CAAC3U,IAAI,CAAC+rB,GAAuBl0B,EAAM+d,SAAS,CAAE,YAAa4Z,IAC9E,IAAI,CAAC7a,cAAc,CAAC3U,IAAI,CAAC+rB,GAAuBl0B,EAAO,SAAU23B,IAEjE1B,EAAcp2B,OAAO,CAACuG,EAAc2xB,kBAAkB,EAExB,KAAA,IAAnBL,GACPzB,CAAa,CAACyB,EAAe,EAC7B,IAAI,CAAC9E,WAAW,CAAC8E,EAAgB,CAAA,GAErC,IAAI,CAAC5a,cAAc,CAAC3U,IAAI,CAAC+rB,GAAuBl0B,EAAO,OAAQ,WAGvDA,EAAMsC,KAAK,EAAItC,EAAMsC,KAAK,CAAC,EAAE,EAC7B4xB,GAAuBl0B,EAAMsC,KAAK,CAAC,EAAE,CAAE,cAAe,SAAUlB,CAAC,EACzDuzB,GAAuB,IAAI,CAAC1wB,GAAG,GAC/B0wB,GAAuB,IAAI,CAAC9xB,GAAG,GAC/B,IAAI,CAACoB,GAAG,CAAG,IAAI,CAACpB,GAAG,GAAK7C,EAAM+O,UAAU,EACxC3N,AAAc,wBAAdA,EAAE6H,OAAO,EACT7H,AAAc,gBAAdA,EAAE6H,OAAO,EACT7C,EAAc4wB,kBAAkB,EAChC,CAAC5wB,EAAc8wB,YAAY,EAC3B,IAAI,CAACD,eAAe,CAAC,CAAA,EAAO,CAAA,EAEpC,EAER,IACA,IAAI,CAACe,cAAc,EACvB,CAQAC,oBAAqB,CACjB,IAAM7xB,EAAgB,IAAI,CAAEpG,EAAQ,IAAI,CAACA,KAAK,CAAEqwB,EAAW,IAAI,CAACA,QAAQ,CAAE6H,EAAgB,IAAI,CAACA,aAAa,CAAE/W,EAAWnhB,EAAMsC,KAAK,CAAC,EAAE,CAAE61B,EAAcn0B,KAAKsW,KAAK,CAAC6G,EAASld,GAAG,CAAGkd,EAASte,GAAG,EAAGu1B,EAAY,CAACjX,EAASkX,gBAAgB,CAAE3C,EAAM,GAAK,KACnPlW,EAAgB,AAACxf,EAAMgH,QAAQ,EAC3BhH,EAAMgH,QAAQ,CAAC+X,gBAAgB,IAAOoC,EAAU1f,EAAU+d,EAAc/d,OAAO,CAAEC,EAAU8d,EAAc9d,OAAO,CAAEm1B,EAAczwB,EAAcixB,cAAc,CAAC31B,EAASD,GAAU62B,EAASzB,EAAYh0B,GAAG,CAAE01B,EAAS1B,EAAY5yB,GAAG,CAAEgtB,EAAW7qB,EAAc6qB,QAAQ,CAAEd,EAAoB/pB,EAActF,OAAO,CAACqvB,iBAAiB,CAAEqI,EAAe,AAAI3R,MAAMzgB,EAAc6vB,aAAa,CAACt0B,MAAM,EAC9XiV,IAAI,CAAC,GAAI6hB,EAAiB9D,GAAuB1D,GAAWrc,EAAUxO,EAAcwO,OAAO,CAC5F8jB,EAAqB,CAAA,EAAOnB,EAAgB,KAChDnxB,EAAc6vB,aAAa,CAACp2B,OAAO,CAAC,CAACmyB,EAAcrvB,KAC/C,IAAMuG,EAAQ8oB,EAAa0E,MAAM,CAAEpvB,EAAO0qB,EAAa1qB,IAAI,CAAE4mB,EAAQ8D,EAAa9D,KAAK,EAAI,EAAGyK,EAAc3G,EAAasF,UAAU,CAC/HtF,EAAaM,UAAU,CAAEsG,EAAaj2B,IAAMsuB,EAGhD4H,EAAkB3vB,EACdxH,EAAUD,EAGdq3B,EAAkB5vB,EAAQiY,EAAShE,QAAQ,CAEvC4b,EAAsB,CAAA,EAE1BC,EAAc9vB,IAAUivB,EAIxB,GAHIS,GAAcC,GACdH,CAAAA,EAAqB,CAAA,CAAG,EAExBvX,EAASyJ,SAAS,EAClBzJ,EAASf,OAAO,EAAEsH,WAClBxe,GACAivB,EAAcjvB,EAAO,CAErB,IAAMwe,EAAYvG,EAASf,OAAO,CAACsH,SAAS,CAAEuR,EAAsBpJ,GAAiB7uB,SAAS,CAACupB,WAAW,CAAC7C,EAAWvG,EAASte,GAAG,CAAE,CAAA,GAAOq2B,EAAsBl1B,KAAKnB,GAAG,CAACgtB,GAAiB7uB,SAAS,CAACupB,WAAW,CAAC7C,EAAWvG,EAASld,GAAG,CAAE,CAAA,GAAQ,EAAGyjB,EAAU/lB,MAAM,CAAG,EACpQ+lB,CAAAA,CAAS,CAACwR,EAAoB,CAC9BxR,CAAS,CAACuR,EAAoB,CAAG/vB,GACjC8vB,CAAAA,EAAc,CAAA,CAAG,CAEzB,KAGA,AAAC1xB,CAAAA,AAAS,UAATA,GAAoBA,AAAS,SAATA,CAAc,GAC9B6wB,EAAc,MACX,CAAA,CAAExC,MAAO,GAAIC,KAAM,GAAI,CAAA,CAAC,CAACtuB,EAAK,CAAGouB,EAAMxH,EAAQyK,GAClDR,EAAc,MACX,CAAA,CAAExC,MAAO,GAAIC,KAAM,GAAI,CAAA,CAAC,CAACtuB,EAAK,CAAGouB,EAAMxH,EAAQyK,EACnDK,EAAc,CAAA,EAET1xB,AAAS,QAATA,GACL0xB,EAAc,AAACT,EAASD,EAASK,IAAiBR,EAClDY,EAAsB,CAACH,GAET,QAATtxB,GACL0xB,CAAAA,EAAe7X,EAASld,GAAG,CAAGkd,EAASte,GAAG,EACtCnB,EAAUD,CAAO,EAMzB,IAAM03B,EAAW,CAAChJ,GACd,CAAEuI,CAAAA,GAAsBpxB,AAAS,QAATA,CAAa,GACpCuxB,CAAAA,GACGC,GACAV,CAAQ,EACVgB,EAAU,AAACV,GAAsBpxB,AAAS,QAATA,GAClCyxB,CAAAA,GAA8BC,GAC9BJ,GAAcxyB,EAAc8wB,YAAY,CACzCiC,EACAX,CAAY,CAAC71B,EAAE,CAAG,EAEby2B,GACD,CAAA,CAACX,GAAkB91B,IAAMsuB,CAAO,GAChCsG,CAAAA,EAAgB50B,CAAAA,CAG5B,GACI40B,AAAkB,OAAlBA,GACAiB,CAAY,CAACjB,EAAc,CAAG,EAC9BnxB,EAAc2wB,WAAW,CAACQ,GACtB,IAAI,CAAClH,QAAQ,EACb,CAAA,IAAI,CAACA,QAAQ,CAACkH,aAAa,CAAGA,EAAgB,CAAA,IAIlDnxB,EAAc2wB,WAAW,GACrB,IAAI,CAAC1G,QAAQ,EACb,CAAA,IAAI,CAACA,QAAQ,CAACkH,aAAa,CAAG,EAAC,EAE/BW,IACAA,EAAclM,QAAQ,CAAC,GACvBkM,EAAcxhB,IAAI,CAAC,CACfjJ,KAAM,AAACwmB,CAAAA,GAA6BlE,IAAI,CAACC,iBAAiB,EAAI,EAAC,EAAK,IACxE,KAGR,IAAK,IAAIrtB,EAAI,EAAGA,EAAI61B,EAAa72B,MAAM,CAAEgB,IAAK,CAC1C,IAAM02B,EAAQb,CAAY,CAAC71B,EAAE,CACvB2zB,EAAS1hB,CAAO,CAACjS,EAAE,CACzB,GAAI2zB,EAAO+C,KAAK,GAAKA,IACjB/C,EAAOtK,QAAQ,CAACqN,GACZhJ,GAAU,CACVA,EAASvvB,OAAO,CAAC6B,EAAI,EAAE,CAAC22B,QAAQ,CAAID,AAAU,IAAVA,EACtB,IAAVA,IACInB,IACAA,EAAclM,QAAQ,CAAC,GACvBkM,EAAcxhB,IAAI,CAAC,CACfjJ,KAAMrH,EAAc6vB,aAAa,CAACtzB,EAAE,CAAC8K,IAAI,CAAG,IAChD,IAEJ4iB,EAASkH,aAAa,CAAG50B,EAAI,GAEjC,IAAM42B,EAAOrB,EAAc1B,OAAO,GAClCpC,GAAkB/D,EAAU,CACxBxlB,MAAO,CAAC,EAAE0uB,EAAK1uB,KAAK,CAAC,EAAE,CAAC,CACxBlF,OAAQ,CAAC,EAAE4zB,EAAK5zB,MAAM,CAAC,EAAE,CAAC,AAC9B,EACJ,CAER,CACJ,CAQAoyB,mBAAmB/F,CAAY,CAAE,CAC7B,IAAM1qB,EAAO0qB,EAAa1qB,IAAI,CAAE4mB,EAAQ8D,EAAa9D,KAAK,EAAI,EAG9DsL,EAAa,CACTC,YAAa,EACb1D,OAAQ,IACRD,OAAQ,IACRlN,KAAM,KACN8M,IAAK,MACLgE,KAAM,MACV,CAEIF,CAAAA,CAAU,CAAClyB,EAAK,CAChB0qB,EAAa0E,MAAM,CAAG8C,CAAU,CAAClyB,EAAK,CAAG4mB,EAEpC5mB,CAAAA,AAAS,UAATA,GAAoBA,AAAS,SAATA,CAAc,GACvC0qB,CAAAA,EAAa0E,MAAM,CAAG,AAGZ,GAHY,CAAA,CAClBf,MAAO,GACPC,KAAM,GACV,CAAA,CAAC,CAACtuB,EAAK,CAAQ,KAAO4mB,CAAI,EAE9B8D,EAAaM,UAAU,CAAGyC,GAAmB/C,EAAa2H,SAAS,CAAE,GACrE3H,EAAasF,UAAU,CAAGvC,GAAmB/C,EAAa4H,SAAS,CAAE,GACrE5H,EAAa0E,MAAM,EACf1E,EAAasF,UAAU,CAAGtF,EAAaM,UAAU,AACzD,CAOAuH,cAAcrb,CAAI,CAAE,CAChB,IAAMsb,EAAQtb,AAAS,QAATA,EAAiB,IAAI,CAACoZ,QAAQ,CAAG,IAAI,CAACC,QAAQ,CACtD/2B,EAAU,IAAI,CAACd,KAAK,CAACc,OAAO,CAC7BsF,aAAa,CACZgb,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,QAC5B,AAAI0Y,EACO,AAAC,CAAA,AAAgB,SAAfA,EAAMxyB,IAAI,EAAexG,EAAQ8vB,eAAe,EACrD,IAAI,CAACmJ,sBAAsB,AAAD,EAAGD,EAAMz5B,KAAK,CAAE+gB,AAAkB,QAAlBA,EAAK4Y,QAAQ,CAAY5Y,GAEpE,CACX,CAOA6Y,cAAczb,CAAI,CAAE0b,CAAS,CAAE,CAC3B,IAAMp5B,EAAU,IAAI,CAACA,OAAO,CAAEsgB,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAAE0Y,EAAQtb,AAAS,QAATA,EAAiB,IAAI,CAACoZ,QAAQ,CAAG,IAAI,CAACC,QAAQ,CAAEsC,EAAU3b,AAAS,QAATA,EAAiB,IAAI,CAAC4b,UAAU,CAAG,IAAI,CAACC,UAAU,CAC1K,GAAIP,EAAO,CACPA,EAAMQ,YAAY,CAAC,OAAQrF,GAAmBn0B,EAAQ6vB,eAAe,EAAI,aACzE,IAAM4J,EAAaT,EAAMU,YAAY,CAAC,gBAClCC,EAAcpG,GAAsBkG,GAAclW,OAAOkW,GAAc,KAAK,EAChF,GAAIlG,GAAsB6F,GAAY,CAClC,IAAMQ,EAAeD,EACjBpG,GAAsBqG,IACtBZ,EAAMQ,YAAY,CAAC,wBAAyBI,GAEhDZ,EAAMQ,YAAY,CAAC,eAAgBJ,GACnCO,EAAcP,CAClB,CACAJ,EAAMz5B,KAAK,CAAG+gB,EAAKyH,UAAU,CAAE,IAAI,CAAC8R,gBAAgB,CAACb,EAAMxyB,IAAI,CAAC,EAC5DxG,EAAQ+vB,mBAAmB,CAAG4J,GAC9BN,GACAA,EAAQzjB,IAAI,CAAC,CACTjJ,KAAM2T,EAAKyH,UAAU,CAAC/nB,EAAQ6vB,eAAe,CAAE8J,EACnD,EAER,CACJ,CAOAG,iBAAiBpc,CAAI,CAAE3b,CAAG,CAAEoB,CAAG,CAAE,CAC7B,IAAM61B,EAAQtb,AAAS,QAATA,EAAiB,IAAI,CAACoZ,QAAQ,CAAG,IAAI,CAACC,QAAQ,CAC5D,GAAIiC,EAAO,CACP,IAAM5E,EAAS,IAAI,CAACyF,gBAAgB,CAACb,EAAMxyB,IAAI,CAAC,CAC1C8Z,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAC5B,GAAI8T,EAAQ,CACR,IAAMnrB,EAASqX,EAAKyH,UAAU,CAACqM,EAAQryB,EACnCi3B,CAAAA,EAAMj3B,GAAG,GAAKkH,GACd+vB,CAAAA,EAAMj3B,GAAG,CAAGkH,CAAK,EAErB,IAAMG,EAASkX,EAAKyH,UAAU,CAACqM,EAAQjxB,EACnC61B,CAAAA,EAAM71B,GAAG,GAAKiG,GACd4vB,CAAAA,EAAM71B,GAAG,CAAGiG,CAAK,CAEzB,CACJ,CACJ,CAMA2wB,UAAUrc,CAAI,CAAE,CACZ,IAAM2b,EAAU3b,AAAS,QAATA,EAAiB,IAAI,CAAC4b,UAAU,CAAG,IAAI,CAACC,UAAU,CAAEP,EAAQtb,AAAS,QAATA,EAAiB,IAAI,CAACoZ,QAAQ,CAAG,IAAI,CAACC,QAAQ,CAC1H,GAAIiC,GAASK,GAAW,IAAI,CAACW,UAAU,CAAE,CACrC,IAAMC,EAAcjB,AAAe,SAAfA,EAAMxyB,IAAI,CAAa,CAAEqQ,WAAAA,EAAa,CAAC,CAAEC,WAAAA,EAAa,CAAC,CAAE,CAAG,IAAI,CAACkjB,UAAU,CAAE,CAAEv2B,EAAAA,EAAI,CAAC,CAAEsG,MAAAA,EAAQ,CAAC,CAAElF,OAAAA,EAAS,CAAC,CAAE,CAAGw0B,EAAS,CAAEzJ,cAAAA,CAAa,CAAE,CAAG,IAAI,CAAC5vB,OAAO,CAC7KszB,GAAkB0F,EAAO,CACrBjvB,MAAOkwB,EACF,AAAClwB,EAAS6lB,CAAAA,EAAgB,GAAK,EAAC,EAAM,KACvC,OACJ/qB,OAAQ,AAACA,EAAS,EAAK,KACvBq1B,OAAQ,kBACZ,GACID,GAAerK,EACf0D,GAAkB0F,EAAO,CACrBt0B,KAAM,AAACmS,EAAapT,EAAK,KACzBsB,IAAK+R,EAAa,IACtB,GAKAwc,GAAkB0F,EAAO,CACrBt0B,KAAMxB,KAAKnB,GAAG,CAACmB,KAAKsW,KAAK,CAAC/V,EACtBoT,EACA,AAACmiB,CAAAA,EAAMmB,WAAW,CAAGpwB,CAAI,EAAK,GAAI,IAAI,CAAC7K,KAAK,CAAC0F,UAAU,CAAGo0B,EAAMmB,WAAW,EAAI,KACnFp1B,IAAK,AAAC+R,EAAa,AAACkiB,CAAAA,EAAMoB,YAAY,CAAGv1B,CAAK,EAAK,EAAK,IAC5D,EAER,CACJ,CAMAw1B,UAAU3c,CAAI,CAAE,CACZ,IAAMsb,EAAQtb,AAAS,QAATA,EAAiB,IAAI,CAACoZ,QAAQ,CAAG,IAAI,CAACC,QAAQ,CACxDiC,GACA1F,GAAkB0F,EAAO,CACrBj0B,IAAK,UACLm1B,OAAQ,EACRnwB,MAAO,MACPlF,OAAQ,KACZ,EAER,CAKAo0B,uBAAuBqB,CAAS,CAAEC,CAAM,CAAEja,CAAI,CAAE,CAC5C,OAAOA,GAAM7W,MAAM6wB,IAAc,CACrC,CAOAE,UAAU9c,CAAI,CAAE,CACZ,GAAM,CAAExe,MAAAA,CAAK,CAAEu7B,IAAAA,CAAG,CAAET,WAAAA,CAAU,CAAE,CAAG,IAAI,CACjC10B,EAAgB,IAAI,CAAEo1B,EAAax7B,EAAM0Q,QAAQ,CAAC5D,KAAK,EAAI,CAAC,EAAG4D,EAAW1Q,EAAM0Q,QAAQ,CAAE5P,EAAUd,EAAMc,OAAO,CAACsF,aAAa,CAAE2pB,EAAOkE,GAA6BlE,IAAI,CAAE0L,EAAQjd,AAAS,QAATA,EAIzL,SAASkd,EAAeld,CAAI,EACxB,GAAM,CAAEqZ,SAAAA,CAAQ,CAAED,SAAAA,CAAQ,CAAE,CAAGxxB,EAAeu1B,EAAY37B,EAAMsC,KAAK,CAAC,EAAE,CAAEkd,EAAgBxf,EAAMgH,QAAQ,EAAE+X,oBAAsB4c,EAAWl6B,EAAU+d,EAAc/d,OAAO,CAAEC,EAAU8d,EAAc9d,OAAO,CAAEk6B,EAAiB57B,EAAMsC,KAAK,CAAC,EAAE,CAACmF,WAAW,EAAE,CAAC+W,EAAK,CAC5Pne,EAAQ+F,EAAcyzB,aAAa,CAACrb,GACpCmW,GAAuBt0B,IAAUA,IAAUu7B,IAGvCH,GAAS5D,GAAYlD,GAAuBlzB,GACxCpB,EAAQgkB,OAAOwT,EAAS2C,YAAY,CAAC,iBACrCn6B,EAAQ,KAAK,EAERA,EAAQoB,GACbpB,CAAAA,EAAQoB,CAAM,EAGbm2B,GAAYjD,GAAuBjzB,KACpCrB,EAAQgkB,OAAOuT,EAAS4C,YAAY,CAAC,iBACrCn6B,EAAQ,KAAK,EAERA,EAAQqB,GACbrB,CAAAA,EAAQqB,CAAM,GAID,KAAA,IAAVrB,GACPs7B,EAAUxqB,WAAW,CAACsqB,EAAQp7B,EAAQs7B,EAAU94B,GAAG,CAAE44B,EAAQE,EAAU13B,GAAG,CAAG5D,EAAO,KAAK,EAAG,KAAK,EAAG,CAAE4I,QAAS,oBAAqB,GAGhJ,CAEA,IAAMwE,EAAOsiB,CAAI,CAAC0L,EAAQ,oBAAsB,kBAAkB,EAAI,GAChEI,EAAQnrB,EACTmrB,KAAK,CAACpuB,EAAM,GACZ+I,QAAQ,CAAC,0BACTE,IAAI,CAAC,CACN6Z,QAAS9iB,EAAO,EAAI,EACpB9H,OAAQ8H,EAAO3M,EAAQ2vB,cAAc,CAAG,CAC5C,GACKla,GAAG,CAACukB,GAGHX,EAAUzpB,EACXmrB,KAAK,CAAC,GAAI,GACVrlB,QAAQ,CAAC,0BACTE,IAAI,CAAC,CACN6Z,QAAS,EACT1lB,MAAO/J,EAAQ4vB,aAAa,CAC5B/qB,OAAQ7E,EAAQ2vB,cAAc,CAC9B,aAAc,QAClB,GACKqL,EAAE,CAAC,QAAS,WAGb11B,EAAcy0B,SAAS,CAACrc,GACxBpY,CAAa,CAACoY,EAAO,QAAQ,CAACud,KAAK,EACvC,EACK/7B,CAAAA,EAAMyW,UAAU,EACjB0jB,EAAQzjB,IAAI,CAAC,CACTC,OAAQ7V,EAAQ0vB,mBAAmB,CACnC,eAAgB,CACpB,GAEJ2J,EAAQ5jB,GAAG,CAACukB,GAGZ,IAAMhB,EAAQ3F,GAAc,QAAS,CACjC3V,KAAMA,EACNpS,UAAW,2BACf,EAAG,KAAK,EAAGmvB,GAGXzB,EAAMQ,YAAY,CAAC,OAAQrF,GAAmBn0B,EAAQ6vB,eAAe,EAAI,aACpE3wB,EAAMyW,UAAU,GAEjBolB,EAAMhgB,GAAG,CAACgZ,GAAoB2G,EAAY16B,EAAQswB,UAAU,GAC5D+I,EAAQte,GAAG,CAACgZ,GAAoB,CAC5BrqB,MAAO,SACX,EAAGgxB,EAAY16B,EAAQqwB,UAAU,GACjCiD,GAAkB0F,EAAOrF,GAAqB,CAC1C/iB,SAAU,WACVspB,OAAQ,EACRgB,UAAW,2BACXnxB,MAAO,MACPlF,OAAQ,MACR4qB,QAAS,EACT0L,UAAW,SACXlvB,SAAUyuB,EAAWzuB,QAAQ,CAC7BmvB,WAAYV,EAAWU,UAAU,CACjCr2B,IAAK,SACT,EAAG/E,EAAQqwB,UAAU,IAGzB2I,EAAMqC,OAAO,CAAG,KACZ/1B,EAAcy0B,SAAS,CAACrc,EAC5B,EAEAsb,EAAMsC,MAAM,CAAG,KAEPtC,IAAU,AAACz7B,IAA+Eg+B,GAAG,CAACC,aAAa,EAG3GZ,EAAeld,GAGnBpY,EAAc+0B,SAAS,CAAC3c,GACxBpY,EAAc6zB,aAAa,CAACzb,GAC5Bsb,EAAMhC,IAAI,EACd,EACA,IAAIyE,EAAU,CAAA,EA4Bd,OA1BAzC,EAAM0C,QAAQ,CAAG,KAERD,IACDb,EAAeld,GACfpY,EAAc+0B,SAAS,CAAC3c,GACxBsb,EAAMhC,IAAI,GAElB,EACAgC,EAAM2C,UAAU,CAAG,AAAC11B,IAEM,KAAlBA,EAAM21B,OAAO,EACbhB,EAAeld,EAEvB,EACAsb,EAAM6C,SAAS,CAAG,AAAC51B,IACfw1B,EAAU,CAAA,EAENx1B,CAAAA,AAAc,YAAdA,EAAMxJ,GAAG,EACTwJ,AAAc,cAAdA,EAAMxJ,GAAG,EACTwJ,AAAc,QAAdA,EAAMxJ,GAAG,AAAS,GAClBm+B,EAAeld,EAEvB,EACAsb,EAAM8C,OAAO,CAAG,KACZL,EAAU,CAAA,CACd,EACO,CAAEpC,QAAAA,EAASL,MAAAA,EAAO+B,MAAAA,CAAM,CACnC,CAQAgB,aAAc,CACV,IAAM78B,EAAQ,IAAI,CAACA,KAAK,CAAEc,EAAUd,EAAMc,OAAO,CAACsF,aAAa,CAAEP,EAAM/E,AAA0B,QAA1BA,EAAQyF,aAAa,CACxFvG,EAAM8F,OAAO,CAAG9F,EAAMsQ,UAAU,CAAC,EAAE,CACnC,EACJ,MAAO,CACHwsB,UAAWj3B,EAAM/E,EAAQowB,cAAc,CAAChkB,CAAC,CACzC6vB,SAAUl3B,EAAM/E,EAAQiwB,aAAa,CAAC7jB,CAAC,CAAG,EAC9C,CACJ,CAWAmqB,eAAe31B,CAAO,CAAED,CAAO,CAAE,CAC7B,IAAM2f,EAAO,IAAI,CAACphB,KAAK,CAACohB,IAAI,CAAEwU,EAAOxU,EAAK+Q,OAAO,CAACzwB,EAAQ,CAAC,EAAE,CAC7D,MAAO,CACHuC,IAAKvC,EACLmB,IAAKmB,KAAKC,GAAG,CAACxC,EAH2D2f,EAAKgR,QAAQ,CAACwD,EAAM,GAIjG,CACJ,CACAoC,gBAAiB,CACb,IAAMh4B,EAAQ,IAAI,CAACA,KAAK,CAAE0Q,EAAW1Q,EAAM0Q,QAAQ,CAAEqN,EAAY/d,EAAM+d,SAAS,CAAE3W,EAAepH,EAAMc,OAAO,CAAEA,EAAUsG,EAAahB,aAAa,CAAE0qB,EAAehwB,EAAQgwB,YAAY,CAAEkM,EAAejI,GAAmB3tB,EAAapH,KAAK,CAAC8M,KAAK,EAAEZ,OAAQ,GAAK,CAC5O,EAAA,IAApBpL,EAAQ2F,OAAO,GAGnB,IAAI,CAAC4P,KAAK,CAAG3F,EAAS4F,CAAC,CAAC,wBACnBI,IAAI,CAAC,CACNxK,OAAQ,CACZ,GACKqK,GAAG,GACR,IAAI,CAACglB,GAAG,CAAGpH,GAAc,MAAO,KAAK,EAAG,CACpCziB,SAAU,WACV/L,OAAQ,EACRuG,OAAQ8wB,CACZ,GACI,IAAI,CAAC/G,aAAa,CAACt0B,MAAM,EACzB,IAAI,CAACs7B,aAAa,GAIlBlf,EAAUmf,UAAU,EACpBnf,EAAUmf,UAAU,CAACC,YAAY,CAAC,IAAI,CAAC5B,GAAG,CAAExd,GAE5C+S,GACA,IAAI,CAACsM,YAAY,GAEzB,CAKAA,cAAe,CACX,IAAI,CAACtC,UAAU,CAAG,IAAI,CAAC96B,KAAK,CAAC0Q,QAAQ,CAAC4F,CAAC,CAAC,eAAeC,GAAG,CAAC,IAAI,CAACF,KAAK,EACrE,IAAMgnB,EAAW,IAAI,CAAC/B,SAAS,CAAC,MAChC,CAAA,IAAI,CAAClB,UAAU,CAAGiD,EAASlD,OAAO,CAClC,IAAI,CAACmD,QAAQ,CAAGD,EAASxB,KAAK,CAC9B,IAAI,CAACjE,QAAQ,CAAGyF,EAASvD,KAAK,CAC9B,IAAMyD,EAAW,IAAI,CAACjC,SAAS,CAAC,MAChC,CAAA,IAAI,CAACjB,UAAU,CAAGkD,EAASpD,OAAO,CAClC,IAAI,CAACqD,QAAQ,CAAGD,EAAS1B,KAAK,CAC9B,IAAI,CAAChE,QAAQ,CAAG0F,EAASzD,KAAK,AAClC,CAaApyB,OAAO7E,CAAG,CAAEoB,CAAG,CAAE,CACb,GAAI,AAAyB,CAAA,IAAzB,IAAI,CAACnD,OAAO,CAAC2F,OAAO,CACpB,OAEJ,IAAMzG,EAAQ,IAAI,CAACA,KAAK,CAAgCc,EAAUsG,AAAzBpH,EAAMc,OAAO,CAAyBsF,aAAa,CAG5F,GADetF,EAAQgwB,YAAY,CACjB,CACT,IAAI,CAACgK,UAAU,EAChB,IAAI,CAACsC,YAAY,GAGrB,IAAI,CAACnD,aAAa,CAAC,MAAOp3B,GAC1B,IAAI,CAACo3B,aAAa,CAAC,MAAOh2B,GACrB,IAAI,CAACjE,KAAK,CAACyW,UAAU,GACtB,IAAI,CAAC+mB,QAAQ,EAAE3hB,IAAI/a,EAAQswB,UAAU,EACrC,IAAI,CAACkM,QAAQ,EAAEzhB,IAAI/a,EAAQswB,UAAU,GAEzC,IAAM5R,EAAgB,AAACxf,EAAMgH,QAAQ,EAAIhH,EAAMgH,QAAQ,CAAC+X,gBAAgB,IAAO/e,EAAMsC,KAAK,CAAC,EAAE,EAAI,CAAC,EAClG,GAAI+xB,GAAsB7U,EAAc/d,OAAO,GAC3C4yB,GAAsB7U,EAAc9d,OAAO,EAAG,CAC9C,IAAMyb,EAAWnd,EAAMsC,KAAK,CAAC,EAAE,CAAC6a,QAAQ,EAAI,EAC5C,IAAI,CAACyd,gBAAgB,CAAC,MAAOpb,EAAc/d,OAAO,CAAEuC,KAAKnB,GAAG,CAAC2c,EAAc9d,OAAO,CAAE,IAAI,CAACm4B,aAAa,CAAC,QAAU1c,GACjH,IAAI,CAACyd,gBAAgB,CAAC,MAAO52B,KAAKC,GAAG,CAACub,EAAc/d,OAAO,CAAE,IAAI,CAACo4B,aAAa,CAAC,QAAU1c,EAAUqC,EAAc9d,OAAO,CAC7H,CAEA,GAAI,IAAI,CAACo5B,UAAU,CAAE,CACjB,IAAIv2B,EAAI,EACR,CACI,IAAI,CAAC+4B,QAAQ,CACb,IAAI,CAAClD,UAAU,CACf,IAAI,CAACoD,QAAQ,CACb,IAAI,CAACnD,UAAU,CAClB,CAACx6B,OAAO,CAAC,AAACg8B,IACP,GAAIA,EAAO,CACP,GAAM,CAAEhxB,MAAAA,CAAK,CAAE,CAAGgxB,EAAMrF,OAAO,GAC3B3rB,IACAgxB,EAAMnlB,IAAI,CAAC,CAAEnS,EAAAA,CAAE,GACfA,GAAKsG,EAAQ/J,EAAQkwB,YAAY,CAEzC,CACJ,EACJ,CACJ,MAEQ,IAAI,CAAC8J,UAAU,GACf,IAAI,CAACA,UAAU,CAACvxB,OAAO,GACvB,OAAO,IAAI,CAACuxB,UAAU,CAG1B,EAAC,IAAI,CAAC96B,KAAK,CAACyW,UAAU,EAClB,IAAI,CAACgnB,QAAQ,EACb,IAAI,CAACA,QAAQ,CAAC5hB,GAAG,CAAC/a,EAAQswB,UAAU,EAG5C,IAAI,CAACsM,aAAa,GAClB,IAAI,CAACzF,kBAAkB,EAC3B,CAQAgF,eAAgB,CACZ,IAAIU,EACJ,GAAM,CAAE39B,MAAAA,CAAK,CAAEc,QAAAA,CAAO,CAAE,CAAG,IAAI,CACzBivB,EAAOkE,GAA6BlE,IAAI,CACxCrf,EAAW1Q,EAAM0Q,QAAQ,CACzB4f,EAAcuE,GAAoB/zB,EAAQwvB,WAAW,EACrDrO,EAASqO,GAAeA,EAAYrO,MAAM,AAIhD,QAAOqO,EAAYzlB,KAAK,CACxB,OAAOylB,EAAYrO,MAAM,CACzB,IAAI,CAAC2b,WAAW,CAAGltB,EAAS4F,CAAC,CAAC,0BAA0BC,GAAG,CAAC,IAAI,CAACF,KAAK,EACtE,IAAMga,EAAW,IAAI,CAACA,QAAQ,CAAG8D,GAAc,SAAU,KAAK,EAAG,CAC7DziB,SAAU,WACV6e,QAAS,EACTyK,OAAQ,EACRvf,OAAQ,UACRzO,QAAS,IACb,EAAG,IAAI,CAACuuB,GAAG,EAELsC,EAAkB79B,EAAM8B,WAAW,CAACsE,aAAa,EAAEkqB,WACzD,CAAA,IAAI,CAAC4H,aAAa,CAAGxnB,EAAS4lB,MAAM,CAAC,GAAI,EAAG,EAAG,KAAQ,EAAGzB,GAAoBvE,EAAa,CACvF,eAAgByE,GAAmBzE,CAAW,CAAC,eAAe,CAAE,GAChEzlB,MAAO,OACPizB,YAAa/I,GAAmBj0B,EAAQwvB,WAAW,CAACwN,WAAW,CAAED,GAAiBtN,QAAS,GAC3FwN,aAAchJ,GAAmBj0B,EAAQwvB,WAAW,CAACyN,YAAY,CAAEF,GAAiBtN,QAAS,EACjG,GAAItO,GAAUA,EAAO+b,KAAK,CAAE/b,GAAUA,EAAOmX,MAAM,CAAEnX,GAAUA,EAAOqX,QAAQ,EACzEzhB,IAAI,GACJtB,GAAG,CAAC,IAAI,CAACF,KAAK,EAEnB6d,GAAuB7D,EAAU,aAAc,KAC3CA,EAASvjB,KAAK,CAACC,QAAQ,CAAG,MAC9B,GAEA,IAAMkxB,EAAY,AAAC5/B,IAA+E6/B,IAAI,CAAG,YAAc,aAAcC,EAAW,AAAC9/B,IAA+E6/B,IAAI,CAAG,WAAa,aACpPhK,GAAuB7D,EAAU4N,EAAW,KACxCvJ,GAAwB,IAAI,CAACwD,aAAa,CAACnjB,OAAO,CAAEkpB,EACxD,GACA/J,GAAuB7D,EAAU8N,EAAU,KACvCzJ,GAAwB,IAAI,CAACwD,aAAa,CAACnjB,OAAO,CAAEopB,EACxD,GACAjK,GAAuB7D,EAAU,SAAU,KAEvCqE,GAAwB4B,AADT,IAAI,CAAC1hB,OAAO,CAACyb,EAASkH,aAAa,CAAG,EAAE,CACxBxiB,OAAO,CAAE,QAC5C,GACA,IAAI,CAAC0oB,QAAQ,CAAG/sB,EACXmrB,KAAK,CAAC9L,EAAKC,iBAAiB,EAAI,GAAI,GACpCtZ,IAAI,CAAC,CACN6Z,QAASzvB,EAAQwvB,WAAW,CAACC,OAAO,CACpC5qB,OAAQ7E,EAAQwvB,WAAW,CAAC3qB,MAAM,CAClCm4B,YAAa,EACbC,aAAc,CAClB,GACKxnB,GAAG,CAAC,IAAI,CAACqnB,WAAW,EACpB,IAAI,CAAC59B,KAAK,CAACyW,UAAU,GACtB,IAAI,CAACgnB,QAAQ,CAAC5hB,GAAG,CAAC/a,EAAQswB,UAAU,EACpC,AAACuM,CAAAA,EAAK78B,EAAQwvB,WAAW,AAAD,CAAE,CAAC,eAAe,EAAKqN,CAAAA,CAAE,CAAC,eAAe,CAAG,CAAA,GAExExJ,GAAc,SAAU,CACpBiK,YAAa,IAAI,CAACX,QAAQ,CAACY,OAAO,CAClC/E,SAAU,CAAA,CACd,EAAG,KAAK,EAAGjJ,GACX,IAAI,CAACiO,aAAa,EACtB,CACAA,eAAgB,CACZ,GAAM,CAAEx9B,QAAAA,CAAO,CAAE,CAAG,IAAI,CAClBwvB,EAAcuE,GAAoB/zB,EAAQwvB,WAAW,EACrDrO,EAASqO,GAAeA,EAAYrO,MAAM,CAI1CpX,EAAQylB,EAAYzlB,KAAK,EAAI,EACnC,QAAOylB,EAAYzlB,KAAK,CACxB,OAAOylB,EAAYrO,MAAM,CACzB,IAAI,CAACgU,aAAa,CAACp2B,OAAO,CAAC,CAACmyB,EAAcrvB,KACtC,IAAI,CAAC47B,YAAY,CAACvM,EAAcrvB,EAAGkI,EAAOoX,EAC9C,EACJ,CACAsc,aAAavM,CAAY,CAAErvB,CAAC,CAAEkI,CAAK,CAAEoX,CAAM,CAAE,CACzC,GAAM,CAAEoO,SAAAA,CAAQ,CAAEzb,QAAAA,CAAO,CAAE5U,MAAAA,CAAK,CAAEc,QAAAA,CAAO,CAAE,CAAG,IAAI,CAC5C4P,EAAW1Q,EAAM0Q,QAAQ,CACzB4f,EAAcuE,GAAoB/zB,EAAQwvB,WAAW,EAC3DD,GAAU9Z,IAAI4d,GAAc,SAAU,CAClCiK,YAAapM,EAAaxkB,KAAK,EAAIwkB,EAAavkB,IAAI,AACxD,GAAI9K,EAAI,GACRiS,CAAO,CAACjS,EAAE,CAAG+N,EACR4lB,MAAM,CAACtE,EAAavkB,IAAI,CAAE,EAAG,EAAG,AAACrM,QAG9Bo9B,EADJ,IAAMC,EAAgBzM,EAAazT,MAAM,EAAIyT,EAAazT,MAAM,CAACmgB,KAAK,CAElED,GACAD,CAAAA,EACIC,EAAaxgC,IAAI,CAAC+zB,EAAc5wB,EAAC,EAEhB,CAAA,IAArBo9B,GACA,IAAI,CAAC5L,WAAW,CAACjwB,GAErB,IAAI,CAACg8B,QAAQ,CAAG,CAAA,CACpB,EAAGrO,EAAarO,GAAUA,EAAO+b,KAAK,CAAE/b,GAAUA,EAAOmX,MAAM,CAAEnX,GAAUA,EAAOqX,QAAQ,EACrF5iB,IAAI,CAAC,CACN,aAAc,SACd7L,MAAAA,CACJ,GACK0L,GAAG,CAAC,IAAI,CAACqnB,WAAW,EACrB5L,EAAaxkB,KAAK,EAClBoH,CAAO,CAACjS,EAAE,CAAC+T,IAAI,CAAC,QAASsb,EAAaxkB,KAAK,CAEnD,CAOAkwB,eAAgB,CACZ,GAAM,CAAEE,YAAAA,CAAW,CAAEhpB,QAAAA,CAAO,CAAE5U,MAAAA,CAAK,CAAEqW,MAAAA,CAAK,CAAEykB,WAAAA,CAAU,CAAEh6B,QAAAA,CAAO,CAAE28B,SAAAA,CAAQ,CAAE,CAAG,IAAI,CAC5Er2B,EAAepH,EAAMc,OAAO,CAC5B89B,EAAoBx3B,EAAay3B,SAAS,EAC5Cz3B,AAAmC,CAAA,IAAnCA,EAAay3B,SAAS,CAACp4B,OAAO,EAC9BW,EAAa03B,UAAU,EACvB13B,EAAa03B,UAAU,CAAC7I,aAAa,CACnC,CAAE/E,eAAAA,CAAc,CAAEH,cAAAA,CAAa,CAAExqB,cAAAA,CAAa,CAAE,CAAGzF,EAGnDi+B,EAA4B,CAAC1oB,EAAO3E,EAAUstB,IAChD,AAAIJ,GACA,IAAI,CAACK,cAAc,CAACj/B,IACpBuG,AAAkB,QAAlBA,GACAy4B,GAAiB,AAACttB,EAASxE,CAAC,CAC5BmJ,EAAMmgB,OAAO,GAAG7wB,MAAM,CAAG,GACxB,AAACi5B,CAAAA,EAAiB1xB,CAAC,EAAI,CAAA,EACnB0xB,CAAAA,EAAiBj5B,MAAM,EAAI,CAAA,EAC5B3F,EAAM4F,OAAO,CAAC,EAAE,CACb,IAEJ,EAEPG,EAAW/F,EAAM+F,QAAQ,CAC7B,GAAIsQ,GAAS6a,GAAkBH,EAAe,CAC1C,IAAIpZ,EAAauZ,EAAe3sB,CAAC,CAAGvE,EAAM4F,OAAO,CAAC,EAAE,CACpD,GAAIg4B,EAAa,CAEb,GADA,IAAI,CAACsB,eAAe,GAChB,CAAC,IAAI,CAAC/I,uBAAuB,CAAE,CAC/B,IAAItrB,EAAQ,EACR4yB,GACA5yB,CAAAA,GAAS4yB,EAASjH,OAAO,GAAG3rB,KAAK,CAAG,CAAA,EAExC+J,EAAQ/U,OAAO,CAAC,CAACy2B,EAAQ3zB,KACrBkI,GAASyrB,EAAOzrB,KAAK,EAAI,EACrBlI,IAAMiS,EAAQjT,MAAM,CAAG,GACvBkJ,CAAAA,GAAS/J,EAAQsvB,aAAa,AAAD,CAErC,GACA,IAAI,CAAC+F,uBAAuB,CAAGtrB,CACnC,CACA9E,GAAY/F,EAAM4F,OAAO,CAAC,EAAE,CAE5B,IAAMu5B,EAAyBJ,EAA0BnB,EAAa1M,EAAgBA,AAAyB,UAAzBA,EAAerkB,KAAK,EACtGkkB,AAAwB,UAAxBA,EAAclkB,KAAK,EACvB,IAAI,CAACuyB,gBAAgB,CAACD,GAClB,IAAI,CAACvB,WAAW,EAAEhmB,YAClB,IAAI,CAACsgB,aAAa,CACbxhB,IAAI,CAAC,CAAExJ,EAAG,IAAI,CAAC0wB,WAAW,CAAChmB,UAAU,AAAC,GAG/CvB,EAAM6c,MAAM,CAAG0K,EAAY1K,MAAM,CAAGlzB,EAAMq/B,SAAS,AACvD,CACA,IAAIF,EAAyB,CACzBr+B,CAAAA,EAAQgwB,YAAY,EAAIgK,IAExBqE,EAAyBJ,EAA0BjE,EAAY/J,EAAeG,AAAyB,UAAzBA,EAAerkB,KAAK,EAC9FkkB,AAAwB,UAAxBA,EAAclkB,KAAK,EACnBkkB,AAAwB,SAAxBA,EAAclkB,KAAK,CACnB8K,EAAa5R,EAEgB,UAAxBgrB,EAAclkB,KAAK,EACxB8K,CAAAA,EAAa,CAAC3T,KAAKC,GAAG,CAACjE,EAAMsQ,UAAU,CAAC,EAAE,CAAE,CAAC6uB,EAAsB,EAGvErE,EAAWjuB,KAAK,CAAC,CACbK,EAAG6jB,EAAc7jB,CAAC,CAClBrC,MAAOiwB,EAAWtE,OAAO,GAAG3rB,KAAK,CACjCgC,MAAOkkB,EAAclkB,KAAK,CAE1BtI,EAAGwsB,EAAcxsB,CAAC,CAAGoT,EAAa,CACtC,EAAG,CAAA,EAAM3X,EAAMizB,UAAU,EAEzB6H,EAAW5H,MAAM,CAAGlzB,EAAMq/B,SAAS,EAEvC,IAAI,CAACC,eAAe,CAACH,GAErB9oB,EAAMxJ,KAAK,CAAC,CACRtG,cAAAA,CACJ,EAAG,CAAA,EAAMvG,EAAMizB,UAAU,EACzB,IAAMsM,EAAkBlpB,EAAMmpB,SAAS,CAAC5nB,UAAU,CAE9C6nB,EAAcppB,EAAMmgB,OAAO,GAAG7wB,MAAM,CAAG,GACvCiS,EAAa,EAEjB,GAAIrR,AAAkB,WAAlBA,EAA4B,CAC5B,IAAMrB,EAAgBlF,EAAMoF,MAAM,EAAIpF,EAAMoF,MAAM,CAACtE,OAAO,CAS1D8W,EAAc2nB,EADdE,CAAAA,EAAcA,EAPQv6B,CAAAA,GAClBA,AAAgC,WAAhCA,EAAcqB,aAAa,EAC3BrB,EAAcuB,OAAO,EACrB,CAACvB,EAAcwB,QAAQ,CACtB1G,EAAMoF,MAAM,CAACuB,YAAY,CACtBouB,GAAmB7vB,EAAciB,MAAM,CAAE,IAC7C,CAAA,EACuC,EAAC,EAGvCrF,CAAAA,EAAQ4F,QAAQ,CAAG,EAAI5F,EAAQoM,CAAC,AAADA,EAC/BlN,CAAAA,EAAM4G,WAAW,CAAG5G,EAAM4G,WAAW,CAAC,EAAE,CAAG,CAAA,EAC5C,EAER,CACIL,AAAkB,QAAlBA,GACIzF,EAAQ4F,QAAQ,EAChBkR,CAAAA,EAAa,CAAA,EAEb5X,EAAM4G,WAAW,EAAI5G,EAAM4G,WAAW,CAAC,EAAE,EACzCgR,CAAAA,EAAa5X,EAAM4G,WAAW,CAAC,EAAE,AAAD,EAEpCgR,GAAe,AAAC5X,EAAMmG,MAAM,CAAC,EAAE,CAAGnG,EAAM4F,OAAO,CAAC,EAAE,EAAK,GAEhC,WAAlBW,IACDwqB,EAAc7jB,CAAC,GAAKgkB,EAAehkB,CAAC,CACpC0K,EAAa2nB,EAERxO,CAAAA,EAAc7jB,CAAC,EAAIgkB,EAAehkB,CAAC,AAADA,IACnC6jB,EAAc7jB,CAAC,CAAG,GAClBgkB,EAAehkB,CAAC,CAAG,EACnB0K,GAAc5T,KAAKnB,GAAG,CAACkuB,EAAc7jB,CAAC,CAAEgkB,EAAehkB,CAAC,EAGxD0K,EAAa2nB,EAAkBE,IAI3CppB,EAAMrM,SAAS,CAAClJ,EAAQyD,CAAC,CAAEzD,EAAQoM,CAAC,CAAGlJ,KAAKqU,KAAK,CAACT,IAElD,GAAM,CAAEggB,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAExH,SAAAA,CAAQ,CAAE,CAAG,IAAI,AACzCvvB,CAAAA,EAAQgwB,YAAY,EAAI8G,GAAYC,IACpCD,EAAS9qB,KAAK,CAAC4yB,SAAS,CAAGrpB,EAAMuB,UAAU,CAAG,KAC9CigB,EAAS/qB,KAAK,CAAC4yB,SAAS,CAAGrpB,EAAMuB,UAAU,CAAG,MAE9CyY,GACAA,CAAAA,EAASvjB,KAAK,CAAC4yB,SAAS,CAAGrpB,EAAMuB,UAAU,CAAG,IAAG,CAEzD,CACJ,CAIA4a,gBAAiB,CACb,IAAMxyB,EAAQ,IAAI,CAACA,KAAK,CAAE,CAAEywB,eAAAA,CAAc,CAAED,oBAAAA,CAAmB,CAAE,CAAG,IAAI,CAAC1vB,OAAO,CAehF,GAdA,IAAI,CAACu5B,UAAU,EAAE3jB,KAAK,CAClB/Q,OAAQ8qB,CACZ,GACA,IAAI,CAAC2J,UAAU,EAAE1jB,KAAK,CAClB/Q,OAAQ8qB,CACZ,GACKzwB,EAAMyW,UAAU,GACjB,IAAI,CAAC4jB,UAAU,EAAE3jB,KAAK,CAClBC,OAAQ6Z,CACZ,GACA,IAAI,CAAC4J,UAAU,EAAE1jB,KAAK,CAClBC,OAAQ6Z,CACZ,IAEA,IAAI,CAACrW,OAAO,CAAE,CACd,IAAI,CAACA,OAAO,CAAG,CAAA,EAEf,IAAI,CAACwlB,WAAW,CAAG,KAAK,EACxB,IAAMC,EAAoB,IAAI,CAAC9+B,OAAO,CAAC8T,OAAO,EAAI,EAAE,CAC9CirB,EAAY77B,KAAKnB,GAAG,CAAC+8B,EAAkBj+B,MAAM,CAAE,IAAI,CAACs0B,aAAa,CAACt0B,MAAM,EACxE,CAAE0uB,SAAAA,CAAQ,CAAEvvB,QAAAA,CAAO,CAAE,CAAG,IAAI,CAC5BwvB,EAAcuE,GAAoB/zB,EAAQwvB,WAAW,EACrDrO,EAASqO,GAAeA,EAAYrO,MAAM,CAI1CpX,EAAQylB,EAAYzlB,KAAK,EAAI,GAEnC,GAAI+0B,EAAkBj+B,MAAM,CAAG,IAAI,CAACs0B,aAAa,CAACt0B,MAAM,CACpD,IAAK,IAAIgB,EAAI,IAAI,CAACszB,aAAa,CAACt0B,MAAM,CAAG,EAAGgB,GAAKi9B,EAAkBj+B,MAAM,CAAEgB,IAAK,CAC5E,IAAMm9B,EAAM,IAAI,CAAClrB,OAAO,CAAC2Y,GAAG,GAC5BuS,GAAKv2B,UACL,IAAI,CAAC8mB,QAAQ,EAAEvvB,QAAQyiB,OAAO5gB,EAAI,EACtC,CAGJ,IAAK,IAAIA,EAAIk9B,EAAY,EAAGl9B,GAAK,EAAGA,IAEhC,GAAIlF,AAA6B,IAA7BA,OAAOiiB,IAAI,CADF6U,GAAYqL,CAAiB,CAACj9B,EAAE,CAAE,IAAI,CAACszB,aAAa,CAACtzB,EAAE,GAC9ChB,MAAM,CAAQ,CAChC,IAAMqwB,EAAe4N,CAAiB,CAACj9B,EAAE,CACzC,IAAI,CAACiS,OAAO,CAACjS,EAAE,CAAC4G,OAAO,GACvB8mB,GAAUvvB,QAAQyiB,OAAO5gB,EAAI,GAC7B,IAAI,CAAC47B,YAAY,CAACvM,EAAcrvB,EAAGkI,EAAOoX,GAC1C,IAAI,CAAC8V,kBAAkB,CAAC/F,EAC5B,CAGJ,GAAI4N,EAAkBj+B,MAAM,CAAG,IAAI,CAACs0B,aAAa,CAACt0B,MAAM,CACpD,IAAK,IAAIgB,EAAI,IAAI,CAACszB,aAAa,CAACt0B,MAAM,CAAEgB,EAAIi9B,EAAkBj+B,MAAM,CAAEgB,IAClE,IAAI,CAAC47B,YAAY,CAACqB,CAAiB,CAACj9B,EAAE,CAAEA,EAAGkI,EAAOoX,GAClD,IAAI,CAAC8V,kBAAkB,CAAC6H,CAAiB,CAACj9B,EAAE,CAGpD,CAAA,IAAI,CAACszB,aAAa,CAAG,IAAI,CAACn1B,OAAO,CAAC8T,OAAO,EAAI,EAAE,CAC3Cyf,GAAsB,IAAI,CAACvzB,OAAO,CAACmwB,QAAQ,GAAK,IAAI,CAACrc,OAAO,CAACjT,MAAM,EACnE,IAAI,CAACixB,WAAW,CAAC,IAAI,CAAC9xB,OAAO,CAACmwB,QAAQ,CAAE,CAAA,EAEhD,CACJ,CASAmO,iBAAiBD,CAAsB,CAAEt0B,CAAK,CAAE,CAC5C,GAAM,CAAE7K,MAAAA,CAAK,CAAEc,QAAAA,CAAO,CAAE88B,YAAAA,CAAW,CAAEvN,SAAAA,CAAQ,CAAE6H,cAAAA,CAAa,CAAE,CAAG,IAAI,CAC/D,CAAEhH,eAAAA,CAAc,CAAE,CAAGpwB,EACrBiF,EAAW/F,EAAM+F,QAAQ,CAAG/F,EAAM4F,OAAO,CAAC,EAAE,CAC9C+R,EAAauZ,EAAe3sB,CAAC,CAAGvE,EAAM4F,OAAO,CAAC,EAAE,CAChDm6B,EAAqB//B,EAAM+F,QAAQ,AACnCmrB,AAAyB,CAAA,UAAzBA,EAAerkB,KAAK,EACpB8K,GAAcwnB,EAAyBp5B,EACnC,IAAI,CAACi6B,kBAAkB,EACvBD,CAAAA,EAAqB//B,EAAM0F,UAAU,CACjCy5B,EACA,IAAI,CAAC/I,cAAc,GAAK,EAAC,GAGH,WAAzBlF,EAAerkB,KAAK,GACzB8K,GAAc5R,EAAW,EACrB,IAAI,CAACi6B,kBAAkB,EACvBD,CAAAA,EAAqB//B,EAAM0F,UAAU,CAAG,EACpC,IAAI,CAAC0wB,cAAc,EAAC,GAG5B/F,GACA+D,GAAkB/D,EAAU,CACxB7qB,KAAMu6B,EAAqB,KAC3Bl6B,IAAK+3B,GAAahmB,WAAa,IACnC,GAEJsgB,GAAexhB,KAAK,CAChBnS,EAAGw7B,CACP,GACInC,GAEAA,EAAY/wB,KAAK,CAAC,CACdK,EAAGgkB,EAAehkB,CAAC,CACnBrC,MAAOkqB,GAAmBlqB,EAAO,IAAI,CAACsrB,uBAAuB,EAC7DtpB,MAAOqkB,EAAerkB,KAAK,CAC3BtI,EAAGoT,CACP,EAAG,CAAA,EAAM3X,EAAMizB,UAAU,CAEjC,CAKAiM,iBAAkB,CACd,GAAM,CAAEtqB,QAAAA,CAAO,CAAE5U,MAAAA,CAAK,CAAEc,QAAAA,CAAO,CAAE28B,SAAAA,CAAQ,CAAE,CAAG,IAAI,CAC5CpjB,EAAOra,EAAMq/B,SAAS,CAAG,UAAY,OACrC,CAAEnO,eAAAA,CAAc,CAAE,CAAGpwB,EACrBiF,EAAW/F,EAAM+F,QAAQ,CAC3Bk6B,EAAal6B,EACb03B,GAAYA,AAAwB,WAAxBA,EAAS9hB,UAAU,GAE/B8hB,CAAQ,CAACpjB,EAAK,CAAC,CACX9V,EAAGwwB,GAAmBhvB,EAAWmrB,EAAe3sB,CAAC,CAAEwB,EACvD,GAEAk6B,GAAc/O,EAAe3sB,CAAC,CAC1Bk5B,EAASjH,OAAO,GAAG3rB,KAAK,CAAG,GAEnC,IAAK,IAAIlI,EAAI,EAAGywB,EAAO,IAAI,CAAC6C,aAAa,CAACt0B,MAAM,CAAEgB,EAAIywB,EAAM,EAAEzwB,EACtDiS,AAA0B,WAA1BA,CAAO,CAACjS,EAAE,CAACgZ,UAAU,EACrB/G,CAAO,CAACjS,EAAE,CAAC0X,EAAK,CAAC,CAAE9V,EAAG07B,CAAW,GAEjCA,GAAc,AAACrrB,CAAAA,CAAO,CAACjS,EAAE,CAACkI,KAAK,EAAI,CAAA,EAAK/J,EAAQsvB,aAAa,EAG7Dxb,CAAO,CAACjS,EAAE,CAAC0X,EAAK,CAAC,CAAE9V,EAAGwB,CAAS,EAG3C,CAWAu5B,gBAAgBH,CAAsB,CAAE,CACpC,GAAM,CAAEn/B,MAAAA,CAAK,CAAE49B,YAAAA,CAAW,CAAE9C,WAAAA,CAAU,CAAE3E,wBAAAA,CAAuB,CAAE,CAAG,IAAI,CAClE,CAAEjF,eAAAA,CAAc,CAAEb,SAAAA,CAAQ,CAAEU,cAAAA,CAAa,CAAE,CAAG,IAAI,CAACjwB,OAAO,CAC1Do/B,EAAiB,KACfpF,GAAc8C,GACd9C,EAAWpkB,IAAI,CAAC,CACZiB,WAAYmjB,EAAW0E,SAAS,CAAC7nB,UAAU,CAAI3X,CAAAA,EAAMsQ,UAAU,CAAC,EAAE,EAAI,CAAC6uB,EACnE,EACA,CAACA,CAAqB,EAC1BvnB,WAAYkjB,EAAW0E,SAAS,CAAC5nB,UAAU,CACvCgmB,EAAYpH,OAAO,GAAG7wB,MAAM,CAAG,EACvC,EAER,CAEIm1B,CAAAA,GAAc8C,EACV7M,EAAclkB,KAAK,GAAKqkB,EAAerkB,KAAK,EAC5CqzB,IACI/J,EACAn2B,EAAMsd,SAAS,CAAG6hB,EAAyB,GAC3C,IAAI,CAACgB,eAAe,GAGpB,IAAI,CAACC,aAAa,IAGjBjK,EACLgJ,EACArE,EAAWtE,OAAO,GAAG3rB,KAAK,CAC1B7K,EAAMsd,SAAS,CACX+S,AAAa,eAAbA,EACA,IAAI,CAAC8P,eAAe,GAGpBD,IAIJ,IAAI,CAACE,aAAa,GAGjBxC,GAAevN,AAAa,eAAbA,IAChB8F,EAA0Bn2B,EAAMsd,SAAS,CACzC,IAAI,CAAC6iB,eAAe,GAGpB,IAAI,CAACC,aAAa,IAItBxC,IACiB,WAAbvN,GACA,IAAI,CAAC8P,eAAe,GAEP,UAAb9P,GACA,IAAI,CAAC+P,aAAa,IAG1B,IAAI,CAAChB,gBAAgB,CAACD,EAC1B,CAQAgB,iBAAkB,CACd,GAAM,CAAEvrB,QAAAA,CAAO,CAAE6oB,SAAAA,CAAQ,CAAE,CAAG,IAAI,AACT,EAAA,IAArB,IAAI,CAACkC,WAAW,GAGpB,IAAI,CAACA,WAAW,CAAG,CAAA,EACnBlC,EAAS5lB,IAAI,GACbjD,EAAQ/U,OAAO,CAAC,AAACy2B,GAAW,KAAKA,EAAOze,IAAI,IAC5C,IAAI,CAACwoB,YAAY,GACrB,CAOAD,eAAgB,CACZ,GAAM,CAAExrB,QAAAA,CAAO,CAAE6oB,SAAAA,CAAQ,CAAE,CAAG,IAAI,AACT,EAAA,IAArB,IAAI,CAACkC,WAAW,GAGpB,IAAI,CAACA,WAAW,CAAG,CAAA,EACnB,IAAI,CAACW,YAAY,GACjB7C,EAAS/lB,IAAI,GACb9C,EAAQ/U,OAAO,CAAC,AAACy2B,GAAW,KAAKA,EAAO5e,IAAI,IAC5C,IAAI,CAACwnB,eAAe,GACxB,CAOAmB,cAAe,CACX,GAAM,CAAEzC,YAAAA,CAAW,CAAE1F,cAAAA,CAAa,CAAE7H,SAAAA,CAAQ,CAAE,CAAG,IAAI,CACjDuN,GAAevN,IACf6H,EAAcxgB,IAAI,GAClB0c,GAAkB/D,EAAU,CAAE1U,WAAY,SAAU,GACpD,IAAI,CAACqkB,kBAAkB,CAAG,CAAA,EAElC,CAKAM,cAAe,CACX,GAAM,CAAEjQ,SAAAA,CAAQ,CAAE,CAAG,IAAI,CACrBA,IACA,IAAI,CAAC6H,aAAa,CAACrgB,IAAI,GACvBuc,GAAkB/D,EAAU,CACxB1U,WAAY,SACZ9Q,MAAO,MACPlF,OAAQ,KACZ,GACA,IAAI,CAACq6B,kBAAkB,CAAG,CAAA,EAElC,CASA15B,WAAY,CACR,IAA4BxF,EAAUsF,AAAhB,IAAI,CAA0BtF,OAAO,CAAEy/B,EAAqBn6B,AAA5D,IAAI,CAAsEiQ,KAAK,CAAE0a,EAAgBjwB,EAAQiwB,aAAa,CAAEG,EAAiBpwB,EAAQowB,cAAc,CAAEsP,EAAY1/B,EAAQoM,CAAC,CAAEuzB,EAAkBvP,EAAehkB,CAAC,CAAEwzB,EAAiB3P,EAAc7jB,CAAC,CAC9QomB,EAAsB,EAC1B,GAAIxyB,EAAQ6E,MAAM,CACd,OAAO7E,EAAQ6E,MAAM,CAIzB,IAAI,CAAC+3B,aAAa,GAClBpK,EAAsBiN,EAElB,AAACA,EAAmB/J,OAAO,CAAC,CAAA,GAAM7wB,MAAM,CAAI,GACxC66B,EACJ,EACJ,IAAMG,EAAc38B,KAAKnB,GAAG,CAAC69B,EAAgBD,GAK7C,MAJI,CAAA,AAACC,EAAiB,GAAKD,EAAkB,GACxCC,EAAiB,GAAKD,EAAkB,CAAC,GAC1CnN,CAAAA,GAAuBtvB,KAAKyZ,GAAG,CAACkjB,EAAW,EAExCrN,CACX,CASA2L,eAAej/B,CAAK,CAAE,CAClB,MAAO,CAAEA,CAAAA,EAAMc,OAAO,CAAC0M,KAAK,CAACC,IAAI,EAC7BzN,EAAMc,OAAO,CAAC8/B,QAAQ,CAACnzB,IAAI,AAAD,CAClC,CAQA1L,OAAOjB,CAAO,CAAEpB,EAAS,CAAA,CAAI,CAAE,CAC3B,IAAMM,EAAQ,IAAI,CAACA,KAAK,CAOxB,GANA60B,GAAoB,CAAA,EAAM,IAAI,CAAC/zB,OAAO,CAAEA,GACpC,IAAI,CAACA,OAAO,CAACmwB,QAAQ,EACrB,IAAI,CAACnwB,OAAO,CAACmwB,QAAQ,EAAI,IAAI,CAACnwB,OAAO,CAAC8T,OAAO,CAACjT,MAAM,GACpD,IAAI,CAACb,OAAO,CAACmwB,QAAQ,CAAG,KAAK,EAC7BjxB,EAAMc,OAAO,CAACsF,aAAa,CAAC6qB,QAAQ,CAAG,KAAK,GAE5CoD,GAAsBvzB,EAAQ2F,OAAO,EAErC,OADA,IAAI,CAAC8C,OAAO,GACL,IAAI,CAACkL,IAAI,CAACzU,EAErB,CAAA,IAAI,CAACma,OAAO,CAAG,CAAC,CAACrZ,EAAQ8T,OAAO,CAC5BlV,GACA,IAAI,CAACgI,MAAM,EAEnB,CAOA6B,SAAU,CACN,IAAMs3B,EAAY,IAAI,CAAEjJ,EAAWiJ,EAAUjJ,QAAQ,CAAEC,EAAWgJ,EAAUhJ,QAAQ,AAChFgJ,CAAAA,EAAU/jB,cAAc,GACxB+jB,EAAU/jB,cAAc,CAACjd,OAAO,CAAC,AAAC8f,GAAWA,KAC7CkhB,EAAU/jB,cAAc,CAAG,KAAK,GAGpCwX,GAAsCuM,EAAUjsB,OAAO,EAEnDgjB,GACAA,CAAAA,EAASuE,OAAO,CAAGvE,EAASwE,MAAM,CAAGxE,EAAS4E,QAAQ,CAAG,IAAG,EAE5D3E,GACAA,CAAAA,EAASsE,OAAO,CAAGtE,EAASuE,MAAM,CAAGvE,EAAS2E,QAAQ,CAAG,IAAG,EAGhE1H,GAAyB+L,EAAW,SAAUnX,CAAG,CAAEnsB,CAAG,EAC9CmsB,GAAOnsB,AAAQ,UAARA,IACHmsB,aAAgBsK,KAEhBtK,EAAIngB,OAAO,GAENmgB,aAAexuB,OAAO4lC,WAAW,EAEtCtM,GAAe9K,GAEnB,OAAOmX,CAAS,CAACtjC,EAAI,EAErBmsB,IAAQsM,GAAcj4B,SAAS,CAACR,EAAI,EACpCsjC,CAAAA,CAAS,CAACtjC,EAAI,CAAG,IAAG,CAE5B,EAAG,IAAI,EACP,IAAI,CAACqX,OAAO,CAAG,EAAE,AACrB,CACJ,CACA6f,GAAqBuB,GAAcj4B,SAAS,CAAE,CAK1C48B,iBAAkB,CACd,iBAAkB,oBAClB,KAAQ,WACR,KAAQ,UACZ,CACJ,GA2CA,IAAIoG,GAA+FlkC,EAAoB,KACnHmkC,GAAmHnkC,EAAoBI,CAAC,CAAC8jC,IAEzIE,GAAmHpkC,EAAoB,KACvIqkC,GAAuIrkC,EAAoBI,CAAC,CAACgkC,IAcjK,GAAM,CAAE/L,OAAAA,EAAM,CAAE,CAAIgM,KAEd,CAAEC,WAAAA,EAAU,CAAE,CAAI9iC,IAKlB,CAAEyQ,cAAesyB,EAAwB,CAAE,CAAGvyB,GAE9C,CAAE/P,SAAUuiC,EAAmB,CAAEroB,MAAOsoB,EAAgB,CAAEhuB,MAAOiuB,EAAgB,CAAEriC,QAASsiC,EAAkB,CAAEnyB,OAAQoyB,EAAiB,CAAEnoB,KAAMooB,EAAe,CAAEtiC,SAAUuiC,EAAmB,CAAEtiC,SAAUuiC,EAAmB,CAAEj9B,MAAOk9B,EAAgB,CAAEviC,KAAMwiC,EAAe,CAAEjoB,MAAOkoB,EAAgB,CAAE,CAAI1jC,IAYnT,SAAS2jC,GAAsBhd,CAAI,CAAElkB,CAAO,CAAEqS,CAAc,QACxD,AAAI6R,AAAS,UAATA,EACO,CACH1X,WAAY,EACZC,WAAY,EACZ8S,WAAY,EACZD,QAAS,CAAA,CACb,EAEA4E,AAAS,UAATA,EACO,CACHpY,OAAQ,CACJM,EAAG,EACP,EACAzH,SAAU0N,EAAe1N,QAAQ,EAAI3E,EAAQ2E,QAAQ,EAAI,CAAA,EACzDw8B,cAAe,CAAC,CAEhBnhC,CAAAA,EAAQohC,UAAU,EACdphC,AAAiB,aAAjBA,EAAQwG,IAAI,AAAc,EAC9BkG,MAAO,CACHC,KAAM0F,EAAe3F,KAAK,EAAEC,OAAS,SACjC0F,EAAe3F,KAAK,EAAEC,KACtB,IACR,CACJ,EAEG,CAAC,CACZ,CAOA,SAAS00B,GAAqB76B,CAAI,CAAEF,CAAY,EAC5C,GAAIE,AAAS,UAATA,EAAkB,CAGlB,IAAMoV,EAAmBolB,GAAgB16B,EAAarC,SAAS,EAAIqC,EAAarC,SAAS,CAAC0B,OAAO,CAAE27B,AAnpNzC13B,GAmpNqEjE,OAAO,CAAE,CAAA,GAClI47B,EAAc,CAChB/6B,KAAM,WACN46B,WAAY,KAAK,CACrB,EAKA,OAJIxlB,IACA2lB,EAAYj1B,WAAW,CAAG,CAAA,EAC1Bi1B,EAAYh1B,SAAS,CAAG,CAAA,GAErBg1B,CACX,CACA,MAAO,CAAC,CACZ,CAeA,MAAMC,WAAoBtB,KAuBtBvsB,KAAK3S,CAAW,CAAEygC,CAAQ,CAAE,CACxB,IAAMpvB,EAAiBguB,KAAcqB,EAAe1gC,EAAYQ,KAAK,CAAEmgC,EAAe3gC,EAAYqD,KAAK,CAGvGuX,EAAmBolB,GAAgBhgC,EAAYiD,SAAS,EAAIjD,EAAYiD,SAAS,CAAC0B,OAAO,CAAE27B,AAzsNjC13B,GAysN6DjE,OAAO,CAAE,CAAA,EAEhI3E,CAAAA,EAAYQ,KAAK,CAAGR,EAAYqD,KAAK,CAAG,KAAK,EAC7C,IAAMrE,EAAU+gC,GAAiB,CAC7B7hC,MAAO,CACHmrB,QAAS,CACL1kB,QAAS,CAAA,EACTa,KAAM,GACV,EACAD,QAAS,CACLE,UAAW,IACXm7B,WAAY,CACRp7B,KAAM,GACV,CACJ,CACJ,EACAvC,UAAW,CACP0B,QAASiW,CACb,EACAxW,UAAW,CAEPO,QAASq7B,GAAgB9vB,GAA4BvL,OAAO,CAAE,CAAA,EAClE,EACAL,cAAe,CAEXK,QAASq7B,GAAgBhS,GAAoC1pB,aAAa,CAACK,OAAO,CAAE,CAAA,EACxF,EACA+G,MAAO,CACHC,KAAM,IACV,EACAk1B,QAAS,CACLC,MAAOd,GAAgB3uB,EAAewvB,OAAO,EAAIxvB,EAAewvB,OAAO,CAACC,KAAK,CAAE,CAAA,GAC/EC,WAAY,CAAA,CAChB,EACAz9B,OAAQ,CACJqB,QAAS,CAAA,CACb,CACJ,EAAG3E,EACH,CACIghC,QAAS,CAAA,CACb,EACAhhC,CAAAA,EAAYQ,KAAK,CAAGkgC,EACpB1gC,EAAYqD,KAAK,CAAGs9B,EAEpB3hC,EAAQwB,KAAK,CAAGy/B,GAAiBjgC,EAAYQ,KAAK,EAAI,CAAC,GAAG4jB,GAAG,CAAC,AAACsc,GAAiBX,GAAiBG,GAAsB,QAASQ,EAAcrvB,EAAe7Q,KAAK,EAElKkgC,EACAL,GAAqB,QAASrgC,KAE9BhB,EAAQqE,KAAK,CAAG48B,GAAiBjgC,EAAYqD,KAAK,EAAI,CAAC,GAAG+gB,GAAG,CAAC,AAACuc,GAAiBZ,GAAiBG,GAAsB,QAASS,EAActvB,EAAehO,KAAK,EAElKs9B,IAEA,KAAK,CAAChuB,KAAK3T,EAASyhC,EACxB,CAYAQ,WAAW/d,CAAI,CAAElkB,CAAO,CAAE,CAEtB,OADAA,EAAQ6H,IAAI,CAAGk5B,GAAiBG,GAAsBhd,EAAMlkB,EAAQ6H,IAAI,CAAEw4B,IAAY,CAACnc,EAAK,EAAGlkB,EAAQ6H,IAAI,CAAEw5B,GAAqBnd,EAAM,IAAI,CAACljB,WAAW,GACjJ,KAAK,CAACihC,WAAW/d,EAAMlkB,EAClC,CACJ,CACAugC,GAAqBL,KAAwG,SAAU,SAAU5/B,CAAC,EAC9I,IAAoBN,EAAUM,EAAEN,OAAO,AAInC,CAAA,cAAeA,GAAWd,AAJhB,IAAI,CAIkB+E,SAAS,GACzC88B,GAAiB,CAAA,EAAM7hC,AALb,IAAI,CAKec,OAAO,CAACoF,SAAS,CAAEpF,EAAQoF,SAAS,EACjElG,AANU,IAAI,CAMR+E,SAAS,CAAChD,MAAM,CAAC,CAAE0E,QAAS,CAAC,CAACzG,AAN1B,IAAI,CAM4B+E,SAAS,CAAC2X,gBAAgB,AAAC,GACrE,OAAO5b,EAAQoF,SAAS,CAEhC,GAMA,AAAC,SAAUo8B,CAAU,EA0BjB,SAASU,EAAyBj8B,CAAK,EAGnC,GAAI,CAAE4B,CAAAA,AAFO,IAAI,CAENwE,SAAS,EAAE0uB,OAAOp1B,SACzBkC,AAHS,IAAI,CAGRs6B,KAAK,EACVtB,GAAoBh5B,AAJX,IAAI,CAIY9F,GAAG,GAC5B8+B,GAAoBh5B,AALX,IAAI,CAKY1E,GAAG,CAAA,EAC5B,OAEJ,IAAMjE,EAAQ2I,AARD,IAAI,CAQE3I,KAAK,CAAEkjC,EAAMv6B,AARnB,IAAI,CAQoBw6B,WAAW,CAAEriC,EAAU6H,AAR/C,IAAI,CAQgDwE,SAAS,CAAC0uB,KAAK,CAChF5xB,EAAQtB,AATK,IAAI,CASJsB,KAAK,CAClBxE,EAAWkD,AAVE,IAAI,CAUDlD,QAAQ,CACxBD,EAAOmD,AAXM,IAAI,CAWLnD,IAAI,CAChBK,EAAM8C,AAZO,IAAI,CAYN9C,GAAG,CACdgF,EAAQlC,AAbK,IAAI,CAaJkC,KAAK,CAAEu4B,EAAaz6B,AAA8B,WAA9BA,AAbpB,IAAI,CAaqB7H,OAAO,CAACuiC,YAAY,CAAeC,EAAO36B,AAAwB,CAAA,IAAxBA,AAbnE,IAAI,CAaoEwE,SAAS,CAACm2B,IAAI,CAAYliC,EAAI2F,EAAM3F,CAAC,EAAKuH,AAblH,IAAI,CAamHs6B,KAAK,EAAE7hC,EAAIlB,EAAQ6G,EAAM7G,KAAK,CAC9JqjC,EAAa56B,AAdJ,IAAI,CAcK46B,UAAU,CAChCC,EAAMC,EAAMC,EAAe5iC,EAAQo0B,MAAM,CAAEyO,EAAe,GAAIC,EAAOryB,EAAS,EAE9E1O,EAAM8F,AAjBO,IAAI,CAiBN9F,GAAG,CAAEoB,EAAM0E,AAjBT,IAAI,CAiBU1E,GAAG,CAC1Bi/B,IACArgC,EAAMqgC,EAAIW,OAAO,CAACl7B,AAnBT,IAAI,CAmBU9F,GAAG,EAC1BoB,EAAMi/B,EAAIW,OAAO,CAACl7B,AApBT,IAAI,CAoBU1E,GAAG,GAE9B,IAAM4I,EAAS5C,EAAQ,SAAWxE,EAC7BkD,AAAoB,UAApBA,AAvBQ,IAAI,CAuBPm7B,UAAU,CAAe,QAAU,OACxCn7B,AAAoB,SAApBA,AAxBQ,IAAI,CAwBPm7B,UAAU,CAAc,OAAS,SAEtCP,IACDA,EAAa56B,AA3BJ,IAAI,CA2BK46B,UAAU,CAAGvjC,EAAM0Q,QAAQ,CACxCmrB,KAAK,CAAC,GAAI,EAAG,KAAK,EAAG/6B,EAAQijC,KAAK,EAAI,WACtCvtB,QAAQ,CAAC,+CAAkDtW,CAAAA,GAASA,EAAMN,MAAM,CACjFM,EAAMN,MAAM,CAACokC,UAAU,CACvBr7B,AA/BK,IAAI,CA+BJ/I,MAAM,CAAC,EAAE,EAAI,IAAI,CAACA,MAAM,CAAC,EAAE,CAACokC,UAAU,AAAD,GACzCttB,IAAI,CAAC,CACN7J,MAAO/L,EAAQ+L,KAAK,EAAIA,EACxB0jB,QAASuR,GAAgBhhC,EAAQyvB,OAAO,CAAE,GAC1CriB,EAAG4zB,GAAgBhhC,EAAQgK,YAAY,CAAE,GACzCoB,OAAQ,CACZ,GACKqK,GAAG,CAAC5N,AAtCA,IAAI,CAsCCs7B,UAAU,EAEnBjkC,EAAMyW,UAAU,EACjB8sB,EACK7sB,IAAI,CAAC,CACNE,KAAM9V,EAAQmK,eAAe,EAEzB/K,GAASA,EAAMN,MAAM,EACjBM,EAAMN,MAAM,CAAC4K,KAAK,EACtB,UACJmM,OAAQ7V,EAAQoK,WAAW,EAAI,GAC/B,eAAgBpK,EAAQojC,WAAW,EAAI,CAC3C,GACKroB,GAAG,CAAC4lB,GAAkB,CACvBj3B,MAAO,UACP25B,WAAY,SACZp3B,SAAU,QACVkvB,UAAW,QACf,EAAGn7B,EAAQgM,KAAK,EAAI,CAAC,KAGzB7C,GACAu5B,EAAOF,EAAO,AAACpjC,CAAAA,EAAMkkC,KAAK,EAAI,CAAA,EAAK5+B,EAAOpE,EAAE+S,MAAM,CAClDsvB,EAAO59B,EAAOJ,CAAAA,EAAW,EAAIkD,AA7DpB,IAAI,CA6DqBhD,MAAM,AAAD,IAGvC69B,EAAOh+B,EAAOmD,AAhEL,IAAI,CAgEM4I,MAAM,CAAI9L,CAAAA,EAAWoF,EAAQ,CAAA,EAChD44B,EAAOH,EAAO,AAACpjC,CAAAA,EAAMmkC,KAAK,EAAI,CAAA,EAAKx+B,EAAMzE,EAAEgT,MAAM,EAEhDsvB,GAAiB5iC,EAAQwjC,SAAS,GAC/B37B,AApEK,IAAI,CAoEJ47B,QAAQ,EACbZ,CAAAA,EAAe,WAAU,EAE7BD,EACI,SAAYC,CAAAA,EAAe,IAAMA,EAAe,EAAC,EAAK,KAG9D,IAAMtjC,EAAQijC,EACT36B,AA5EQ,IAAI,CA4EPhJ,OAAO,CAAGO,EAAMqE,CAAC,CAAGrE,EAAMgN,CAAC,CACjCvE,AA7ES,IAAI,CA6ER+U,OAAO,CAACzT,EAAQ7I,EAAE+S,MAAM,CAAG/S,EAAEgT,MAAM,EAGtCowB,EAAWtkC,GAASA,EAAMN,MAAM,CAClCM,EAAMN,MAAM,CAAC6kC,aAAa,CAACvkC,GAC1ByhC,GAAoBthC,IAAUA,EAAQwC,GAAOxC,EAAQ4D,EACtDwJ,EAAO,GACPi2B,EACAj2B,EAAOynB,GAAOwO,EAAc,CAAErjC,MAAAA,CAAM,EAAGL,GAElCc,EAAQwjC,SAAS,EAAI3C,GAAoBthC,IAC9CoN,CAAAA,EAAO3M,EAAQwjC,SAAS,CAACrmC,IAAI,CAxFpB,IAAI,CAwFuBoC,EAAK,EAE7CkjC,EAAW7sB,IAAI,CAAC,CACZjJ,KAAAA,EACAlJ,EAAGi/B,EACHt2B,EAAGu2B,EACH9nB,WAAY6oB,EAAW,UAAY,QACvC,GACA,IAAME,EAAWnB,EAAW/M,OAAO,IAE/BmL,GAAoB4B,EAAWh/B,CAAC,GAAM0F,GAAUxE,GAChD+9B,CAAAA,EAAOD,EAAWh/B,CAAC,CAAImgC,EAAS75B,KAAK,CAAG,CAAC,EAEzC82B,GAAoB4B,EAAWr2B,CAAC,IAC5BjD,EACI,CAAA,AAACm5B,GAAc,CAAC39B,GAAc,CAAC29B,GAAc39B,CAAQ,GACrDg+B,CAAAA,EAAOF,EAAWr2B,CAAC,CAAGw3B,EAAS/+B,MAAM,AAAD,EAIxC89B,EAAOF,EAAWr2B,CAAC,CAAIw3B,EAAS/+B,MAAM,CAAG,GAK7Ci+B,EADA35B,EACQ,CACJzE,KAAAA,EACAm/B,MAAOn/B,EAAOmD,AAnHT,IAAI,CAmHUkC,KAAK,AAC5B,EAGQ,CACJrF,KAAMmD,AAAoB,SAApBA,AAxHD,IAAI,CAwHEm7B,UAAU,CAAct+B,EAAO,EAC1Cm/B,MAAOh8B,AAAoB,UAApBA,AAzHF,IAAI,CAyHGm7B,UAAU,CAClBt+B,EAAOmD,AA1HN,IAAI,CA0HOkC,KAAK,CACjB7K,EAAM0F,UAAU,AACxB,EAEJ,IAAMiS,EAAa4rB,EAAW5rB,UAAU,EAAI,EAExCA,EAAaisB,EAAMp+B,IAAI,EACvB+L,CAAAA,EAASqyB,EAAMp+B,IAAI,CAAGmS,CAAS,EAG/BA,EAAa+sB,EAAS75B,KAAK,EAAI+4B,EAAMe,KAAK,EAC1CpzB,CAAAA,EAAS,CAAEoG,CAAAA,EAAa+sB,EAAS75B,KAAK,CAAG+4B,EAAMe,KAAK,AAAD,CAAC,EAGxDpB,EAAW7sB,IAAI,CAAC,CACZnS,EAAGP,KAAKC,GAAG,CAAC,EAAGu/B,EAAOjyB,GACtBrE,EAAGlJ,KAAKC,GAAG,CAAC,EAAGw/B,GAGfmB,QAAS36B,EACLu5B,EACC76B,AA/II,IAAI,CA+IHlD,QAAQ,CAAG,EAAIzF,EAAM0F,UAAU,CACzCm/B,QAAS56B,EACJtB,AAjJI,IAAI,CAiJHlD,QAAQ,CAAGzF,EAAMiG,WAAW,CAAG,EACrCw9B,EAAOiB,EAAS/+B,MAAM,CAAG,CACjC,EACJ,CAKA,SAASm/B,IAEDn8B,AADS,IAAI,CACR46B,UAAU,EACf56B,CAAAA,AAFS,IAAI,CAER46B,UAAU,CAAG56B,AAFT,IAAI,CAEU46B,UAAU,CAAC1rB,IAAI,EAAC,CAE/C,CAMA,SAASktB,EAAqB3jC,CAAC,EAC3B,IAAmBpB,EAAQ2I,AAAd,IAAI,CAAe3I,KAAK,CAAEc,EAAU6H,AAApC,IAAI,CAAqC7H,OAAO,CAAEkkC,EAAQhlC,EAAMilC,WAAW,CAAGjlC,EAAMilC,WAAW,EAAI,CAAC,EAAGC,EAAepkC,EAAQ8L,MAAM,CACjJ,GAAI5M,EAAMc,OAAO,CAACgiC,OAAO,EAAIn6B,AAAc,UAAdA,AADhB,IAAI,CACiBqc,IAAI,CAAc,CAChD,IAAMznB,EAAMuD,EAAQ+E,GAAG,CAAG,IAAM/E,EAAQ6E,MAAM,AAE1C,EAACq/B,CAAK,CAACznC,EAAI,EAAI2nC,EAAaz+B,OAAO,GACL,KAA1By+B,EAAa9b,QAAQ,EACrBzgB,AAAc,IAAdA,AANC,IAAI,CAMAw8B,IAAI,EACTD,CAAAA,EAAa9b,QAAQ,CAAG,CAAA,EAEM,KAAA,IAAvB8b,EAAar4B,KAAK,EACzBq4B,CAAAA,EAAar4B,KAAK,CAAG,OAAM,EAE/Bm4B,CAAK,CAACznC,EAAI,CAZL,IAAI,CAaT6D,EAAEyL,KAAK,CAAG,QACVzL,EAAEgI,cAAc,GAExB,CACJ,CAKA,SAASg8B,IACL,IAAmBplC,EAAQ2I,AAAd,IAAI,CAAe3I,KAAK,CAAEzC,EAAOoL,AAAjC,IAAI,CAAkC7H,OAAO,EACrD6H,AADQ,IAAI,CACP7H,OAAO,CAAC+E,GAAG,CAAG,IAAM8C,AADjB,IAAI,CACkB7H,OAAO,CAAC6E,MAAM,CAC7CpI,GAAOyC,EAAMilC,WAAW,EAAIjlC,EAAMilC,WAAW,CAAC1nC,EAAI,GAFzC,IAAI,EAGb,OAAOyC,EAAMilC,WAAW,CAAC1nC,EAAI,AAErC,CAKA,SAAS8nC,EAAsBjkC,CAAC,EAC5B,IAAMuH,EAAO,IAAI,CAAE/I,EAAU+I,EAAK28B,QAAQ,EAAI,CAAC38B,EAAK/I,MAAM,EAAI+I,EAAK48B,YAAY,CAC3E58B,EAAK48B,YAAY,CAAC3lC,MAAM,CACxB+I,EAAK/I,MAAM,CAAGI,EAAQ2I,EAAK3I,KAAK,CAAE0Q,EAAW1Q,EAAM0Q,QAAQ,CAAE80B,EAAW78B,EAAKnD,IAAI,CAAEigC,EAAU98B,EAAK9C,GAAG,CAAE6/B,EAAS,EAAE,CAAEC,EAAkBvkC,EAAEukC,eAAe,CAAEtlC,EAAQe,EAAEf,KAAK,CAAEulC,EAAQxkC,EAAEwkC,KAAK,CAmBzLC,EAAIC,EAAIC,EAAIC,EAAIjhB,EAAO,EAAE,CACtBkhB,EAAYC,EACnB,GAEA,AAAClmC,EAAMc,OAAO,CAACgiC,OAAO,EAAI1hC,AAAkB,CAAA,IAAlBA,EAAE+kC,WAAW,EAEnCx9B,AAAc,UAAdA,EAAKqc,IAAI,EAAgBrc,AAAc,UAAdA,EAAKqc,IAAI,CAAc,CAMhD,IAAK,IAAMohB,KALXhlC,EAAEgI,cAAc,GAEhB2b,EAAOshB,AAtBD,CAAA,AAACrhB,IACP,IAAMshB,EAAYthB,AAAS,UAATA,EAAmB,QAAU,QAASuhB,EAAM59B,EAAK7H,OAAO,CAACwlC,EAAU,QAErF,AAAI3E,GAAoB4E,GACb,CAACvmC,CAAK,CAACsmC,EAAU,CAACC,EAAI,CAAC,CAG9B3E,GAAoB2E,GACb,CAACvmC,EAAMpC,GAAG,CAAC2oC,GAAK,CAGpB3mC,EAAOsmB,GAAG,CAAC,AAACzE,GAAMA,CAAC,CAAC6kB,EAAU,CACzC,CAAA,EAUmB39B,EAAKqc,IAAI,EAEfrc,EAAKhJ,OAAO,CAAGK,EAAMmF,KAAK,CAAGnF,EAAMsC,KAAK,EAE7C,GAAI,CAAC8jC,EAAEtlC,OAAO,CAACyO,UAAU,CAAE,CACvB,IAAMlS,EAAK+oC,EAAEzmC,OAAO,CAAG,QAAU,QAG7BgJ,IAHsD64B,CAAAA,GAAmB4E,EAAEtlC,OAAO,CAACzD,EAAE,EACrF2C,CAAK,CAAC3C,EAAE,CAAC+oC,EAAEtlC,OAAO,CAACzD,EAAE,CAAC,CACtB2C,CAAK,CAAC3C,EAAE,CAAC,EAAE,AAAD,GAEV0nB,EAAK5c,IAAI,CAACi+B,EAElB,CAQJ,IAAK,IAAMI,KAHXP,EAAalhB,EAAKpjB,MAAM,CACpB,EAAE,CACF,CAACgH,EAAKhJ,OAAO,CAAGK,EAAMmF,KAAK,CAAC,EAAE,CAAGnF,EAAMsC,KAAK,CAAC,EAAE,CAAC,CAChCyiB,GACkB,KAA9BkhB,EAAW3jB,OAAO,CAACkkB,IAElB9E,GAAgBuE,EAAY,AAACQ,GAAYA,EAAOC,GAAG,GAAKF,EAAME,GAAG,EAC9DD,EAAOxyB,GAAG,GAAKuyB,EAAMvyB,GAAG,GAC5BgyB,EAAW99B,IAAI,CAACq+B,GAIxB,GAAI7E,GADJuE,EAAWpE,GAAgB6D,EAAiBh9B,EAAKqB,SAAS,CAAC3J,GAAS,EAAG,KAAK,EAAG,KAAK,EAAGe,EAAEwoB,GAAG,KAExF,GAAIjhB,EAAKsB,KAAK,CACV,IAAK,IAAMu8B,KAASP,EAAY,CAC5B,IAAIU,EAEJX,EAAKF,AADLA,CAAAA,EAAKU,EAAME,GAAG,AAAD,EACHF,EAAMvyB,GAAG,CACnB4xB,EAAKE,EAAK/hC,KAAKsW,KAAK,CAAC4rB,EAAWv9B,EAAKi+B,MAAM,EAE7B,SAAVhB,GACCC,CAAAA,EAAKL,GAAYK,EAAKL,EAAW78B,EAAKkC,KAAK,AAAD,IACvC+6B,EACAC,EAAKE,EAAKzE,GAAiBuE,EAAIL,EAAUA,EAAW78B,EAAKkC,KAAK,EAG9D87B,EAAO,CAAA,GAGVA,GACDjB,EAAOv9B,IAAI,CAAC,CAAC,IAAK09B,EAAIC,EAAG,CAAE,CAAC,IAAKC,EAAIC,EAAG,CAEhD,MAGA,IAAK,IAAMQ,KAASP,EAAY,CAC5B,IAAIU,EAEJZ,EAAKF,AADLA,CAAAA,EAAKW,EAAME,GAAG,AAAD,EACHF,EAAMvyB,GAAG,CACnB6xB,EAAKE,EAAKhiC,KAAKsW,KAAK,CAACmrB,EAAU98B,EAAKhD,MAAM,CAAGugC,GAE/B,SAAVN,GACCE,CAAAA,EAAKL,GAAWK,EAAKL,EAAU98B,EAAKhD,MAAM,AAAD,IACtCigC,EACAE,EAAKE,EAAK1E,GAAiBwE,EAAIL,EAASA,EAAU98B,EAAKhD,MAAM,EAG7DghC,EAAO,CAAA,GAGVA,GACDjB,EAAOv9B,IAAI,CAAC,CAAC,IAAK09B,EAAIC,EAAG,CAAE,CAAC,IAAKC,EAAIC,EAAG,CAEhD,EAGR5kC,EAAE0S,IAAI,CAAG4xB,EAAO/jC,MAAM,CAAG,EACrB+O,EAASm2B,aAAa,CAACnB,EAAQtkC,EAAE4J,SAAS,EAAI,GAE9C,KAAK,CACb,CACJ,CAMA,SAAS87B,EAAmB1lC,CAAC,EAEzB,GAAIxB,AADW,IAAI,CACRI,KAAK,CAACc,OAAO,CAACgiC,OAAO,CAAE,CAC9B,IAAIiE,CACAnnC,CAAAA,AAHO,IAAI,CAGJonC,EAAE,CAAC,WAAapnC,AAHhB,IAAI,CAGmBonC,EAAE,CAAC,eACjCD,EAAY,CACR7C,YAAa,EACb+C,OAAQ,CAAA,CACZ,EAEMrnC,AATC,IAAI,CASEonC,EAAE,CAAC,YAAepnC,AATxB,IAAI,CAS2BonC,EAAE,CAAC,QACzCD,CAAAA,EAAY,CACRz6B,OAAQ,CACJ7F,QAAS,CAAA,EACTygC,OAAQ,CACZ,CACJ,CAAA,EAEAH,GACA3lC,CAAAA,EAAE0hB,WAAW,CAACljB,AAlBP,IAAI,CAkBU0H,IAAI,CAAC,CAAGu6B,GAAiBzgC,EAAE0hB,WAAW,CAACljB,AAlBrD,IAAI,CAkBwD0H,IAAI,CAAC,CAAEy/B,EAAS,CAE3F,CACJ,CAQA,SAASI,IACL,IAAqBnnC,EAAQJ,AAAd,IAAI,CAAiBI,KAAK,CAA4BonC,EAAsBtmC,AAAtClB,AAAtC,IAAI,CAAyCkB,OAAO,CAAgC4K,YAAY,CAG/G,MAHoI9L,AAAmB,CAAA,IAAnBA,AAArH,IAAI,CAAwHynC,OAAO,EAC9ID,GACAtF,GAAgBsF,EAAoB3gC,OAAO,CAAEzG,EAAMc,OAAO,CAACgiC,OAAO,CAE1E,CA6CA,SAASwE,EAAyBtlC,CAAM,CAAE6I,CAAK,EAG3C,IAAK,IAAIlI,EAAI,EAAGA,EAAIX,EAAOL,MAAM,CAAEgB,GAAQ,EAAG,CAC1C,IAAM0lB,EAAQrmB,CAAM,CAACW,EAAE,CAAEqlB,EAAMhmB,CAAM,CAACW,EAAI,EAAE,CACxC6+B,GAAmBnZ,CAAK,CAAC,EAAE,GAAKA,CAAK,CAAC,EAAE,GAAKL,CAAG,CAAC,EAAE,EACnDK,CAAAA,CAAK,CAAC,EAAE,CAAGL,CAAG,CAAC,EAAE,CAAGuZ,GAAiBlZ,CAAK,CAAC,EAAE,CAAExd,EAAK,EAEpD22B,GAAmBnZ,CAAK,CAAC,EAAE,GAAKA,CAAK,CAAC,EAAE,GAAKL,CAAG,CAAC,EAAE,EACnDK,CAAAA,CAAK,CAAC,EAAE,CAAGL,CAAG,CAAC,EAAE,CAAGuZ,GAAiBlZ,CAAK,CAAC,EAAE,CAAExd,EAAK,CAE5D,CACA,OAAO7I,CACX,CA3ZAsgC,EAAWr/B,OAAO,CAdlB,SAAiB6E,CAAU,CAAE3E,CAAS,CAAED,CAAW,CAAEqkC,CAAgB,EACjE,IAAMhkC,EAAcL,EAAYnF,SAAS,AACpCwF,CAAAA,EAAYikC,aAAa,GAC1BnG,GAAoBl+B,EAAW,qBAAsB6/B,GACrD3B,GAAoBl+B,EAAW,qBAAsB2hC,GACrDzD,GAAoBl+B,EAAW,iBAAkB4hC,GACjD1D,GAAoBl+B,EAAW,UAAWiiC,GAC1C/D,GAAoBl+B,EAAW,kBAAmBkiC,GAClDv9B,EAAW/J,SAAS,CAAC+Q,aAAa,CAAGsyB,GACrC79B,EAAYikC,aAAa,CAAGL,EAC5B9F,GAAoBn+B,EAAa,aAAc4jC,GAC/CS,EAAiBxpC,SAAS,CAAC8oC,aAAa,CAAGS,EAEnD,EAuYAhF,EAAWmF,UAAU,CAHrB,SAAoBpqC,CAAC,CAAEisB,CAAC,CAAEoe,CAAC,EACvB,OAAO,IAAIpF,EAAWjlC,EAAGisB,EAAGoe,EAChC,CAuBJ,EAAGpF,IAAeA,CAAAA,GAAa,CAAC,CAAA,GAMH,IAAMqF,GAAoBrF,GAcjD,CAAE5c,OAAQ,CAAE3nB,UAAW,CAAE6pC,WAAYC,EAAW,CAAE,CAAE,CAAE,CAAG,AAACv9B,KAA2IG,WAAW,CAwNhN,CAAEib,OAAQoiB,EAAY,CAAE,CAAG,AAACx9B,KAA2IG,WAAW,CAElL,CAAE6I,MAAOy0B,EAAe,CAAE14B,OAAQ24B,EAAgB,CAAErjC,MAAOsjC,EAAe,CAAE,CAAI5pC,GAetF,OAAM6pC,WAAkBJ,GAapBK,WAAWr0B,CAAI,CAAEs0B,CAAe,CAAE/nC,CAAK,CAAE,CACrC,IAAMgoB,EAAQvU,CAAI,CAAC,EAAE,CACfkU,EAAMlU,CAAI,CAAC,EAAE,AAGK,CAAA,UAApB,OAAOuU,CAAK,CAAC,EAAE,EACfA,CAAAA,CAAK,CAAC,EAAE,CAAGrkB,KAAKC,GAAG,CAAC5D,EAAQ+nC,EAAiB/f,CAAK,CAAC,EAAE,CAAA,EAEnC,UAAlB,OAAOL,CAAG,CAAC,EAAE,EACbA,CAAAA,CAAG,CAAC,EAAE,CAAGhkB,KAAKnB,GAAG,CAACxC,EAAQ+nC,EAAiBpgB,CAAG,CAAC,EAAE,CAAA,CAEzD,CAMAqgB,aAAanoC,CAAK,CAAEooC,CAAO,CAAE,CAEzB,IAAMzxB,EAAcyxB,EAAQzxB,WAAW,GAAIjX,EAASM,EAAMN,MAAM,CAEhE2oC,EAASR,GAAgB7nC,EAAMkkC,KAAK,EAAI,EAAGvtB,GAAcrI,EAAYxK,KAAKsW,KAAK,CAACpa,EAAMsoC,SAAS,CAAC39B,KAAK,CAAG,GAElGiJ,EAAO,CACT,CAAC,IAAKy0B,EAAQvkC,KAAKsW,KAAK,CAACpa,EAAMuoC,OAAO,EAAE,CACxC,CAAC,IAAKF,EAAQvkC,KAAKsW,KAAK,CAACpa,EAAMwoC,QAAQ,EAAE,CAC5C,CAED,GAAIxoC,AAAgB,OAAhBA,EAAMyoC,KAAK,CAAW,CACtB,IAAMC,EAAYb,GAAgB7nC,EAAM0oC,SAAS,CAAE/xB,GACnD/C,EAAK3L,IAAI,CAAC,CAAC,IAAKogC,EAAQK,EAAU,CAAE,CAAC,IAAKL,EAAS/5B,EAAWo6B,EAAU,EACxEhpC,EAAOuoC,UAAU,CAACr0B,EAAM+C,EAAc,EAAG+xB,EAC7C,CACA,OAAO90B,CACX,CAKA+0B,gBAAgB3oC,CAAK,CAAE,CACnB,IAAMN,EAASM,EAAMN,MAAM,CAAEI,EAAQJ,EAAOI,KAAK,CAC7C8T,EAAMw0B,EAAUpoC,EAAMooC,OAAO,AACN,MAAA,IAAhBpoC,EAAMmkC,KAAK,GAEbiE,GACDpoC,CAAAA,EAAMooC,OAAO,CAAGA,EAAUtoC,EAAM0Q,QAAQ,CAACoD,IAAI,GACxCyC,GAAG,CAAC3W,EAAOyW,KAAK,CAAA,EAEpBrW,EAAMyW,UAAU,EACjB6xB,EAAQ5xB,IAAI,CAAC9W,EAAOkpC,YAAY,CAAC5oC,EAAQA,EAAM+wB,QAAQ,EAAI,WAG/Dnd,EAAOlU,EAAOyoC,YAAY,CAACnoC,EAAOooC,GAClCA,CAAO,CAAC,AAACA,EAAmB,UAAT,OAAmB,CAAC,CAAElrC,EAAG0W,CAAK,GAC5C0C,QAAQ,CAACtW,EAAM6oC,YAAY,GAAI,CAAA,GAE5C,CAKAC,YAAa,CACT,IAAI,CAAChnC,MAAM,CAACnC,OAAO,CAAC,IAAI,CAACgpC,eAAe,CAC5C,CAKAp0B,MAAO,CACH,KAAK,CAACA,KAAK/T,KAAK,CAAC,IAAI,CAAE8nB,WACvB,IAAI,CAAC1nB,OAAO,CAACkhB,QAAQ,CAAG,KAAK,CACjC,CAKA8mB,aAAa5oC,CAAK,CAAEm5B,CAAK,CAAE,CACvB,IAAM4P,EAAU,KAAK,CAACH,aAAa7qC,IAAI,CAAC,IAAI,CAAEiC,EAAOm5B,GAErD,OADA,OAAO4P,EAAQryB,IAAI,CACZqyB,CACX,CACAC,QAAQhpC,CAAK,CAAE,CAEX,MAAO,CAACA,EAAMipC,IAAI,CAAEjpC,EAAMkpC,GAAG,CAAElpC,EAAMyoC,KAAK,CAAC,AAC/C,CAOA3+B,WAAY,CACR,IAAMpK,EAAS,IAAI,CAAEuF,EAAQvF,EAAOuF,KAAK,CAAEkkC,EAAQ,AAAC,IAAI,CAACjnC,aAAa,EAAI,IAAI,CAACA,aAAa,CAAC6gB,KAAK,IAAO,EAAE,CAAEgG,EAAaogB,EAAMnjB,GAAG,CAAC,AAAC1H,GAAS,CAAC,IAAI,EAAEA,EAAK8qB,MAAM,CAAC,GAAGC,WAAW,GAAK/qB,EAAKyE,KAAK,CAAC,GAAG,CAAC,EACnMgG,EAAW9gB,IAAI,CAAC,WAChBkhC,EAAMlhC,IAAI,CAAC,OACX,KAAK,CAAC6B,UAAUtJ,KAAK,CAACd,GAEtBA,EAAOoC,MAAM,CAACnC,OAAO,CAAC,SAAUK,CAAK,EACjCmpC,EAAMxpC,OAAO,CAAC,SAAU2e,CAAI,CAAE7b,CAAC,EAC3B,IAAItC,EAAQH,CAAK,CAACse,EAAK,AACT,QAAVne,IACIT,EAAOgB,UAAU,EACjBP,CAAAA,EAAQT,EAAOgB,UAAU,CAACY,WAAW,CAACnB,EAAK,EAE/CH,CAAK,CAAC+oB,CAAU,CAACtmB,EAAE,CAAC,CAChBwC,EAAMqY,QAAQ,CAACnd,EAAO,CAAA,GAElC,GAGAH,EAAMspC,UAAU,CAAC,EAAE,CACftpC,EAAMwoC,QAAQ,CAAGvjC,EAAMuhC,GAAG,CAAG9mC,EAAOI,KAAK,CAAC8F,OAAO,AACzD,EACJ,CACJ,CAMAoiC,GAAU/0B,cAAc,CAAG80B,GAAgBH,GAAa30B,cAAc,CAjU5C,CAoCtBnI,UAAW,EACX23B,QAAS,CACL1iC,YAAa,4IAKjB,EAIAsM,UAAW,KACX0V,OAAQ,CAKJ+b,MAAO,CAQHhzB,UAAW,CACf,CACJ,EAoBAy+B,eAAgB,CAAA,CACpB,GA8OAzB,GAAiBE,GAAUnqC,SAAS,CAAE,CAClC6pC,WA1WJ,cAAuBC,GACvB,EA0WI32B,QAAS,KACTw4B,YAAa,CAAA,EACbC,gBAAiB,CAAC,MAAO,OAAO,CAChCvnC,cAAe,CAAC,OAAQ,MAAO,QAAQ,CACvCwnC,mBAAoB,CAChBjzB,OAAQ,QACR,eAAgB,WACpB,EACAtU,YAAa,OACjB,GACAiI,KAA0Iu/B,kBAAkB,CAAC,MAAO3B,IAoBpK,GAAM,CAAEz9B,YAAa,CAAEq/B,IAAKC,EAAmB,CAAE,CAAE,CAAIz/B,IAMvD,OAAM0/B,WAAkBD,GAAoBhsC,SAAS,CAAC6pC,UAAU,CAW5DmB,cAAe,CACX,OAAO,KAAK,CAACA,aAAa9qC,IAAI,CAAC,IAAI,EAC9B,CAAA,IAAI,CAACgsC,IAAI,CAAG,IAAI,CAACtB,KAAK,CACnB,uBACA,wBAAuB,CACnC,CAMAuB,gBAAiB,CACT,IAAI,CAACD,IAAI,CAAG,IAAI,CAACtB,KAAK,EACtB,CAAC,IAAI,CAAC7nC,OAAO,CAAC0J,KAAK,EACnB,IAAI,CAAC5K,MAAM,CAACkB,OAAO,CAACqpC,OAAO,EAC3B,CAAA,IAAI,CAAC3/B,KAAK,CAAG,IAAI,CAAC5K,MAAM,CAACkB,OAAO,CAACqpC,OAAO,AAAD,CAE/C,CAMAC,cAAe,CACX,KAAK,CAACA,eACD,IAAI,CAACxqC,MAAM,CAAConC,EAAE,CAAC,eAChB,IAAI,CAACkD,cAAc,EAE3B,CASAG,SAAU,CACN,IAAMC,EAAO,KAAK,CAACD,UAEnB,OADA,IAAI,CAACH,cAAc,GACZI,CACX,CAKAC,cAAe,CAKX,OAJA,KAAK,CAACA,aAAa7pC,KAAK,CAAC,IAAI,CAAE8nB,WAC3B,IAAI,CAAC4hB,YAAY,EACjB,IAAI,CAACA,YAAY,GAEd,IAAI,AACf,CACJ,CA8KA,GAAM,CAAEn7B,SAAUu7B,EAAmB,CAAE,CAAInsC,IAIrC,CAAEyrC,IAAKW,EAAoB,CAAE,CAAG,AAACngC,KAA2IG,WAAW,CAEvL,CAAE3L,SAAU4rC,EAAmB,CAAEp3B,MAAOq3B,EAAgB,CAAEt7B,OAAQu7B,EAAiB,CAAEjmC,MAAOkmC,EAAgB,CAAE7iC,WAAY8iC,EAAqB,CAAE,CAAIzsC,IAS3J,SAAS0sC,GAAwB3pC,CAAC,EAC9B,IAAMN,EAAUM,EAAEN,OAAO,CAAE4K,EAAe5K,EAAQ4K,YAAY,CAC1DA,GACA5K,EAAQkqC,WAAW,EACnBlqC,AAAe,gCAAfA,EAAQqL,EAAE,EACVT,CAAAA,EAAaC,aAAa,CAAG,MAAK,CAE1C,CAKA,SAASs/B,GAAaC,CAAY,EAE9B,IAAqBpqC,EAAUoqC,EAAapqC,OAAO,AAC/CA,CAAAA,EAAQkqC,WAAW,EACnBlqC,AAAe,gCAAfA,EAAQqL,EAAE,EACVy+B,GAHW,IAAI,CAGW,CACtBvoC,YAAa8oC,GAAWptC,SAAS,CAACsE,WAAW,CAE7CD,cAAe+oC,GAAWptC,SAAS,CAACqE,aAAa,CACjD8mC,QAASiC,GAAWptC,SAAS,CAACmrC,OAAO,AACzC,EAER,CAeA,MAAMiC,WAAmBV,GAMrB,OAAOxnC,QAAQC,CAAW,CAAE,GAAGkoC,CAAK,CAAE,CAC9BN,GAAsBN,GAAqB,gBAC3CE,GAAoBxnC,EAAa,kBAAmB6nC,IACpDL,GAAoBxnC,EAAa,OAAQ+nC,IAEjD,CAMA5C,aAAanoC,CAAK,CAAEooC,CAAO,CAAE,CACzB,IAAMx0B,EAAO,KAAK,CAACu0B,aAAanoC,EAAOooC,GAAUzxB,EAAcyxB,EAAQzxB,WAAW,GAAI0xB,EAASoC,GAAiBzqC,EAAMkkC,KAAK,EAAI,EAAGvtB,GAAcrI,EAAYxK,KAAKsW,KAAK,CAACpa,EAAMsoC,SAAS,CAAC39B,KAAK,CAAG,GAC/L,GAAI3K,AAAe,OAAfA,EAAM+pC,IAAI,CAAW,CACrB,IAAMoB,EAAWV,GAAiBzqC,EAAMmrC,QAAQ,CAAEx0B,GAClD/C,EAAK3L,IAAI,CAAC,CAAC,IAAKogC,EAAQ8C,EAAS,CAAE,CAAC,IAAK9C,EAAS/5B,EAAW68B,EAAS,EACtE,KAAK,CAAClD,WAAWr0B,EAAM+C,EAAc,EAAGw0B,EAC5C,CACA,OAAOv3B,CACX,CAKAg1B,aAAa5oC,CAAK,CAAEm5B,CAAK,CAAE,CACvB,IAAM4P,EAAU,KAAK,CAACH,aAAa7qC,IAAI,CAAC,IAAI,CAAEiC,EAAOm5B,GAAQv4B,EAAU,IAAI,CAACA,OAAO,CAOnF,OANA,OAAOmoC,EAAQryB,IAAI,CACf,CAAC1W,EAAMY,OAAO,CAAC0J,KAAK,EACpB1J,EAAQqpC,OAAO,EACfjqC,EAAM+pC,IAAI,CAAG/pC,EAAMyoC,KAAK,EACxBM,CAAAA,EAAQtyB,MAAM,CAAG7V,EAAQqpC,OAAO,AAAD,EAE5BlB,CACX,CACAC,QAAQhpC,CAAK,CAAE,CAEX,MAAO,CAACA,EAAM+pC,IAAI,CAAE/pC,EAAMipC,IAAI,CAAEjpC,EAAMkpC,GAAG,CAAElpC,EAAMyoC,KAAK,CAAC,AAC3D,CACJ,CAMAwC,GAAWh4B,cAAc,CAAG03B,GAAiBJ,GAAqBt3B,cAAc,CAlPrD,CAyBvBwvB,QAAS,CACL1iC,YAAa,mKAMjB,CACJ,GAkNA2qC,GAAkBO,GAAWptC,SAAS,CAAE,CACpC6pC,WAlRiDoC,GAmRjD5nC,cAAe,CAAC,OAAQ,OAAQ,MAAO,QAAQ,AACnD,GACAkI,KAA0Iu/B,kBAAkB,CAAC,OAAQsB,IAsMrK,GAAM,CAAEzlB,OAAQ4lB,EAA8B,CAAEC,KAAMC,EAA4B,CAAE,CAAG,AAAClhC,KAA2IG,WAAW,CAExO,CAAE6I,MAAOm4B,EAAuB,CAAE9mC,MAAO+mC,EAAuB,CAAE,CAAIrtC,GAe5E,OAAMstC,WAA0BH,GAY5B1C,aAAa5oC,CAAK,CAAEm5B,CAAK,CAAE,CACvB,IAAM4P,EAAUqC,GAA+BvtC,SAAS,CAAC+qC,YAAY,CAAC7qC,IAAI,CAAC,IAAI,CAAEiC,EAAOm5B,GAAQv4B,EAAU,IAAI,CAACA,OAAO,CAAE8qC,EAAO1rC,EAAM+pC,IAAI,CAAG/pC,EAAMyoC,KAAK,CAAEhyB,EAAS7V,EAAQuL,SAAS,EAAI,IAAI,CAAC7B,KAAK,CAAEA,EAAQtK,EAAMsK,KAAK,EAAI,IAAI,CAACA,KAAK,CAOpO,GANAy+B,CAAO,CAAC,eAAe,CAAGnoC,EAAQkK,SAAS,CAC3Ci+B,EAAQryB,IAAI,CAAG1W,EAAMY,OAAO,CAAC0J,KAAK,EACrB1J,AAAR8qC,GAAQ9qC,EAAQqpC,OAAO,EAAI3/B,EAChCy+B,EAAQtyB,MAAM,CAAGzW,EAAMY,OAAO,CAACuL,SAAS,EAC3BvL,AAAR8qC,GAAQ9qC,EAAQ+qC,WAAW,EAAIl1B,EAEhC0iB,EAAO,CACP,IAAMyS,EAAehrC,EAAQmhB,MAAM,CAACoX,EAAM,AAC1C4P,CAAAA,EAAQryB,IAAI,CAAGk1B,EAAathC,KAAK,EAAIy+B,EAAQryB,IAAI,CACjDqyB,EAAQtyB,MAAM,CAAGm1B,EAAaz/B,SAAS,EAAI48B,EAAQtyB,MAAM,CACzDsyB,CAAO,CAAC,eAAe,CACnB6C,EAAa9gC,SAAS,EAAIi+B,CAAO,CAAC,eAAe,AACzD,CACA,OAAOA,CACX,CAOAD,YAAa,CACT,IAAqBhnC,EAASpC,AAAf,IAAI,CAAkBoC,MAAM,CAAEhC,EAAQJ,AAAtC,IAAI,CAAyCI,KAAK,CAAE+rC,EAAgBnsC,AAApE,IAAI,CAAuEuF,KAAK,CAAC4L,QAAQ,CACxG,IAAK,IAAM7Q,KAAS8B,EAAQ,CACxB,IAAIsmC,EAAUpoC,EAAMooC,OAAO,CAAE+C,EAAUzC,EAAWoD,EAAQC,EAAWC,EAAeC,EAAkB5D,EAAQz0B,EAAMtF,EAC9G49B,EAAQ,CAAC9D,EACf,GAAI,AAAuB,KAAA,IAAhBpoC,EAAMmkC,KAAK,CAAkB,CAC/BiE,GACDpoC,CAAAA,EAAMooC,OAAO,CAAGA,EAAUtoC,EAAM0Q,QAAQ,CAACoD,IAAI,GACxCyC,GAAG,CAAC3W,AAPN,IAAI,CAOSyW,KAAK,CAAA,EAEpBzW,AATE,IAAI,CASCI,KAAK,CAACyW,UAAU,EACxB6xB,EACK5xB,IAAI,CAAC9W,AAXP,IAAI,CAWUkpC,YAAY,CAAC5oC,EAAQA,EAAM+wB,QAAQ,EAAI,WACnDgW,MAAM,CAACrnC,AAZT,IAAI,CAYYkB,OAAO,CAACmmC,MAAM,EAGrC,IAAMpwB,EAAcyxB,EAAQzxB,WAAW,GAEvC0xB,EAASkD,GAAwBvrC,EAAMkkC,KAAK,EAAI,EAAGvtB,GAGnDm1B,EAAShoC,KAAKnB,GAAG,CAFjBwoC,EAAWnrC,EAAMmrC,QAAQ,CACzBzC,EAAY1oC,EAAM0oC,SAAS,EAE3BqD,EAAYjoC,KAAKC,GAAG,CAAConC,EAAUzC,GAC/Bp6B,EAAYxK,KAAKsW,KAAK,CAACpa,EAAMsoC,SAAS,CAAC39B,KAAK,CAAG,GAC/CqhC,EAAgBH,EACZE,IAAc/rC,EAAMuoC,OAAO,CAC3BzkC,KAAKsW,KAAK,CAAC0xB,KACPhoC,KAAKsW,KAAK,CAACpa,EAAMwoC,QAAQ,EAAI,GACrCyD,EAAmBJ,EACf/nC,KAAKsW,KAAK,CAAC0xB,KACPhoC,KAAKsW,KAAK,CAACpa,EAAMwoC,QAAQ,EAAI,GACjCuD,IAAc/rC,EAAMuoC,OAAO,CAC/BuD,EAASP,GAAwBO,EAAQn1B,GACzCo1B,EAAYR,GAAwBQ,EAAWp1B,GAO/C/C,AADAA,CAAAA,EAAO,EAAE,AAAD,EACH3L,IAAI,CAAC,CAAC,IAAKogC,EAAS/5B,EAAWy9B,EAAU,CAAE,CAAC,IAAK1D,EAAS/5B,EAAWw9B,EAAO,CAAE,CAAC,IAAKzD,EAAS/5B,EAAWw9B,EAAO,CAAE,CAAC,IAAKzD,EAAS/5B,EAAWy9B,EAAU,CAAE,CAAC,IAAI,CACjK,CAAC,IAAK1D,EAAQyD,EAAO,CAAE,CACnB,IAEAzD,EACA2D,EACIloC,KAAKsW,KAAK,CAACyxB,EACP7rC,EAAMuoC,OAAO,CACbvoC,EAAMwoC,QAAQ,EAClBsD,EACP,CAAE,CAAC,IAAKzD,EAAQ0D,EAAU,CAAE,CACzB,IAEA1D,EACA4D,EACInoC,KAAKsW,KAAK,CAACyxB,EACP7rC,EAAMwoC,QAAQ,CACdxoC,EAAMuoC,OAAO,EACjBwD,EACP,EACD3D,CAAO,CAAC8D,EAAQ,OAAS,UAAU,CAAC,CAAEhvC,EAAG0W,CAAK,GACzC0C,QAAQ,CAACtW,EAAM6oC,YAAY,GAAI,CAAA,EACxC,CACJ,CACJ,CACJ,CAMA4C,GAAkBx4B,cAAc,CAAGu4B,GAAwBF,GAA6Br4B,cAAc,CAAE,CAAEwvB,QAAS6I,GAA6Br4B,cAAc,CAACwvB,OAAO,AAAC,EA7RrI,CAa9B1gB,OAAQ,CAKJ+b,MAAO,CAOHhzB,UAAW,CACf,CACJ,EAKAuB,UAAW,KAgBXF,UAAW,UAUXrB,UAAW,EAgBXm/B,QAAS,UAITV,eAAgB,CAAA,CACpB,GA+MAn/B,KAA0Iu/B,kBAAkB,CAAC,cAAe8B,IAoB5K,GAAM,CAAEjmB,OAAQ,CAAE3nB,UAAW,CAAE6pC,WAAYyE,EAAsB,CAAE,CAAE,CAAE,CAAG,AAAC/hC,KAA2IG,WAAW,CAE3N,CAAErL,SAAUktC,EAAmB,CAAE,CAAIjuC,IA0CRkuC,GApCnC,cAAyBF,GACrB7oC,aAAc,CAMV,KAAK,IAAIglB,WACT,IAAI,CAACgkB,OAAO,CAAG,CAAA,CACnB,CASAC,SAAU,CAGN,OAAOH,GAAoB,IAAI,CAACp/B,CAAC,GAAK,AAAkB,KAAA,IAAX,IAAI,CAACA,CAAC,AACvD,CAIAw/B,iBAAkB,CACd,IAAM3I,EAAQ,IAAI,CAACjjC,OAAO,CAACijC,KAAK,EAAI,IAAI,CAACnkC,MAAM,CAACkB,OAAO,CAACijC,KAAK,CAC7D,OAAO,IAAI,CAACuE,OAAO,EAAIvE,GAASA,IAAU,IAAI,CAACuE,OAAO,CAACqE,SAAS,AACpE,CACJ,GAoUA,AAAC,SAAUpwC,CAAY,EAMnB,IAAMqwC,EAAkB,EAAE,CA8B1B,SAASC,EAAKtoC,CAAC,CAAE2I,CAAC,CAAEc,CAAC,CAAEC,CAAC,CAAEnN,CAAO,EAC7B,IAAM8jC,EAAU,AAAC9jC,GAAWA,EAAQ8jC,OAAO,EAAKrgC,EAAGsgC,EAAU,AAAC/jC,GAAWA,EAAQ+jC,OAAO,EAAK33B,EAGvF4G,EAAO,IAAI,CAACg5B,MAAM,CAAClI,EAAU,EAAGC,EAAU,EAAG,EAAG,GAEtD,OADA/wB,EAAK3L,IAAI,CAAC,CAAC,IAAKy8B,EAASC,EAAQ,CAAE,CAAC,IAAKtgC,EAAG2I,EAAIe,EAAE,CAAE,CAAC,IAAK1J,EAAG2I,EAAE,CAAE,CAAC,IAAK3I,EAAIyJ,EAAGd,EAAE,CAAE,CAAC,IAAK3I,EAAIyJ,EAAGd,EAAIe,EAAE,CAAE,CAAC,IAAK1J,EAAG2I,EAAIe,EAAE,CAAE,CAAC,IAAI,EACtH6F,CACX,CAKA,SAASi5B,EAAgBhiC,CAAO,CAAEg5B,CAAK,EACnCh5B,CAAO,CAAEg5B,EAAQ,MAAO,CAAG,SAAUx/B,CAAC,CAAE2I,CAAC,CAAEc,CAAC,CAAEC,CAAC,CAAEnN,CAAO,MAEhDgT,EADJ,IAAM8wB,EAAU9jC,GAAWA,EAAQ8jC,OAAO,CAAEC,EAAU/jC,GAAWA,EAAQ+jC,OAAO,CAShF,GALc,WAAVd,GAAsB91B,EAAID,IAC1BzJ,GAAKP,KAAKsW,KAAK,CAAC,AAACrM,CAAAA,EAAID,CAAAA,EAAK,GAC1BA,EAAIC,GAER6F,EAAO,AAAC/I,CAAO,CAACg5B,EAAM,CAAEx/B,EAAG2I,EAAGc,EAAGC,EAAGnN,GAChC8jC,GAAWC,EAAS,CAMpB,IAAImI,EAASpI,EACb,GAAIb,AAAU,WAAVA,EACAiJ,EAASzoC,EAAIyJ,EAAI,MAEhB,CACD,IAAMi/B,EAAWn5B,CAAI,CAAC,EAAE,CAClBo5B,EAASp5B,CAAI,CAAC,EAAE,AACF,CAAA,MAAhBm5B,CAAQ,CAAC,EAAE,EAAYC,AAAc,MAAdA,CAAM,CAAC,EAAE,EAChCF,CAAAA,EAAS,AAACC,CAAAA,CAAQ,CAAC,EAAE,CAAGC,CAAM,CAAC,EAAE,AAAD,EAAK,CAAA,CAE7C,CACA,IAAMC,EAAS,AAACjgC,EAAI23B,EAAW33B,EAAIA,EAAIe,EACvC6F,EAAK3L,IAAI,CAAC,CACN,IACA6kC,EACAG,EACH,CAAE,CACC,IACAvI,EACAC,EACH,EACD/wB,EAAOA,EAAKsK,MAAM,CAACrT,EAAQ+hC,MAAM,CAAClI,EAAU,EAAGC,EAAU,EAAG,EAAG,GACnE,CACA,OAAO/wB,CACX,CACJ,CA3DAvX,EAAa0G,OAAO,CAfpB,SAAiBskC,CAAgB,EAC7B,GAAIqF,AAA8C,KAA9CA,EAAgBtqB,OAAO,CAACilB,GAA0B,CAClDqF,EAAgBzkC,IAAI,CAACo/B,GACrB,IAAMx8B,EAAUw8B,EAAiBxpC,SAAS,CAACgN,OAAO,AAClDA,CAAAA,EAAQ8hC,IAAI,CAAGA,EACfE,EAAgBhiC,EAAS,UACzBgiC,EAAgBhiC,EAAS,SAC7B,CACA,IAAMqiC,EAAgBz+B,KAAkJO,eAAe,GAGnL09B,EAAgBtqB,OAAO,CAAC8qB,IACxBR,EAAgBzkC,IAAI,CAACilC,EAE7B,CA6DJ,EAAG7wC,GAAiBA,CAAAA,EAAe,CAAC,CAAA,GAMP,IAAM8wC,GAAsB9wC,EAGzD,IAAI+wC,GAAuJzwC,EAAoB,KAC3K0wC,GAA2K1wC,EAAoBI,CAAC,CAACqwC,IAcrM,GAAM,CAAEr+B,SAAUu+B,EAA4B,CAAE,CAAInvC,IAC9C,CAAEN,UAAW0vC,EAAW,CAAE,CAAIF,KAE9B,CAAExvC,UAAWwF,EAAW,CAAE,CAAI5E,IAE9B,CAAEO,QAASwuC,EAA2B,CAAE1lC,WAAY2lC,EAA8B,CAAEC,WAAAA,EAAU,CAAE,CAAIvvC,KAO1G,AAAC,SAAU7B,CAAmB,EA6B1B,SAASqxC,EAAWrvB,CAAI,EACpB,OAAOjb,GAAYsqC,UAAU,CAAC5vC,IAAI,CAAC,AAAC,IAAI,CAAC6C,OAAO,CAACgtC,QAAQ,EACrD,IAAI,CAAC9tC,KAAK,CAACpC,GAAG,CAAC,IAAI,CAACkD,OAAO,CAACgtC,QAAQ,GAAM,IAAI,CAAEtvB,EACxD,CAOA,SAASxU,IACLyjC,GAAYzjC,SAAS,CAACtJ,KAAK,CAAC,IAAI,EAChC,IAAMd,EAAS,IAAI,CAAEkB,EAAUlB,EAAOkB,OAAO,CAAEd,EAAQJ,EAAOI,KAAK,CAAEgC,EAASpC,EAAOoC,MAAM,CAAE+rC,EAAkBjtC,EAAQgtC,QAAQ,CAAEA,EAAYC,GACzI/tC,EAAMpC,GAAG,CAACmwC,GAAmBz7B,EAAOw7B,GAAYA,EAAShtC,OAAO,CAACwR,IAAI,CAAE07B,EAAUF,GAAYA,EAAS9rC,MAAM,CAAGuD,EAAWvF,EAAMuF,QAAQ,CAAEjD,EAAQ1C,EAAO0C,KAAK,CAAE6C,EAAQvF,EAAOuF,KAAK,CACpLsW,EAASzZ,EAAOL,MAAM,CAAG,EAAGzB,EAAO+tC,EAAWC,EAAQptC,EAAQotC,KAAK,EAAI,IAAKvrC,EAAIqrC,GAAUA,EAAOrsC,MAAM,CAAEqU,EAAU,EAAGm4B,EAAWC,EAAOC,EAAYpgB,EAAqBqgB,EAE7K,GAAIR,GAAYA,EAASjrB,OAAO,EAAIlgB,EAQhC,CAAA,IAPAqT,EAAU,AAAC83B,CAAAA,EAASS,YAAY,EAAI,CAAA,EAAK,AAACT,CAAAA,EAASU,IAAI,EAAI,CAAA,EAAK,EAChEvgB,EAAsB6f,EAAS7f,mBAAmB,CAClDmgB,EAASJ,CAAM,CAACrrC,EAAI,EAAE,CAAC4B,CAAC,CACnB0pB,CAAAA,EAAsBA,EAAoBwgB,UAAU,CAAG,CAAA,EAE5Db,GAAW5rC,EAAQ,CAAC3E,EAAGisB,IAAOjsB,EAAEkH,CAAC,CAAG+kB,EAAE/kB,CAAC,EACvC2pC,EAAQ,OAASA,CAAK,CAAC,EAAE,CAAC3E,WAAW,GAAK2E,EAAMQ,MAAM,CAAC,GAChD/rC,KAAOX,CAAM,CAACyZ,EAAO,EAIxB,GAHA0yB,EAAYH,CAAM,CAACrrC,EAAE,CAErBzC,AADAA,CAAAA,EAAQ8B,CAAM,CAACyZ,EAAO,AAAD,EACfvO,CAAC,CAAGihC,EAAUjhC,CAAC,CACjBihC,EAAU5pC,CAAC,EAAIrE,EAAMqE,CAAC,EACtB,AAA4B,KAAA,IAArB4pC,CAAS,CAACD,EAAM,CAAkB,CACzC,GAAIhuC,EAAMqE,CAAC,EAAI6pC,IACXluC,EAAMmkC,KAAK,CAAG8J,CAAS,CAACD,EAAM,CAE1BC,EAAU5pC,CAAC,CAAGrE,EAAMqE,CAAC,EACrB,CAAC+N,GACD+7B,CAAAA,EAAaL,CAAM,CAACrrC,EAAI,EAAE,AAAD,GAErB,AAA6B,KAAA,IAAtB0rC,CAAU,CAACH,EAAM,GAGxB,GAAIR,GAA4BxtC,EAAMkkC,KAAK,GACvC0J,EAAS9G,EAAE,CAAC,UAAW,CAGvB,IAAM2H,EAAK,CACPR,EAAU/J,KAAK,EAAI,EACnB+J,EAAU9J,KAAK,EAAI,EACtB,CAAEuK,EAAK,CACJP,EAAWjK,KAAK,EAAI,EACpBiK,EAAWhK,KAAK,EAAI,EACvB,CAAEwK,EAAMV,EAAUW,aAAa,EAAE3F,MAC9BwF,EAAKI,EAAMV,EAAWS,aAAa,EAAE1F,KACrCwF,EAAiDI,EAAiB,CAACC,EAAG1xC,IAG1EyG,KAAKkrC,GAAG,CAAC,EAAID,EAAG,GAAKN,CAAE,CAACpxC,EAAI,CACxB,EAAK,CAAA,EAAI0xC,CAAAA,EAAM,CAAA,EAAIA,CAAAA,EAAKA,EACpBJ,CAAE,CAACtxC,EAAI,CAAG,EAAK,CAAA,EAAI0xC,CAAAA,EAAKA,EAAIA,EAChCF,CAAE,CAACxxC,EAAI,CAAG0xC,EAAIA,EAAIA,EAAIL,CAAE,CAACrxC,EAAI,CAC7B4xC,EAAO,EAAGC,EAAO,EAAGH,EAGxB,IAAK,IAAItsC,EAAI,EAAGA,EAVgC,IAUbA,IAAK,CACpC,IAAM0sC,EAAO,AAACF,CAAAA,EAAOC,CAAG,EAAK,EACvBE,EAAON,EAAeK,EAAM,GAClC,GAAIC,AAAS,OAATA,EACA,MAEJ,GAAItrC,AAhBkB,IAgBlBA,KAAKyZ,GAAG,CAAC6xB,EAAOpvC,EAAMkkC,KAAK,EAAoB,CAC/C6K,EAAII,EACJ,KACJ,CACIC,EAAOpvC,EAAMkkC,KAAK,CAClB+K,EAAOE,EAGPD,EAAOC,CAEf,CACI3B,GAA4BuB,KAC5B/uC,EAAMmkC,KAAK,CACP2K,EAAeC,EAAG,GACtB/uC,EAAMgN,CAAC,CACH/H,EAAMuY,OAAO,CAACxd,EAAMmkC,KAAK,CAAE,CAAA,GAEvC,MAGIiK,EACI,AAACpuC,CAAAA,EAAMqE,CAAC,CAAG4pC,EAAU5pC,CAAC,AAADA,EAChB8pC,CAAAA,EAAW9pC,CAAC,CAAG4pC,EAAU5pC,CAAC,AAADA,EAClCrE,EAAMmkC,KAAK,EACPiK,EAEKD,CAAAA,CAAU,CAACH,EAAM,CAAGC,CAAS,CAACD,EAAM,AAAD,EAC5ChuC,EAAMgN,CAAC,EACHohC,EACKD,CAAAA,EAAWnhC,CAAC,CAAGihC,EAAUjhC,CAAC,AAADA,EAOlD,GAFAuO,IACA9Y,IACI8Y,EAAS,EACT,KAER,CACJ,CAGJzZ,EAAOnC,OAAO,CAAC,CAACK,EAAOyC,KACnB,IAAI4sC,CACJrvC,CAAAA,EAAMkkC,KAAK,EAAIpuB,EAOX,CAAA,AAAuB,KAAA,IAAhB9V,EAAMmkC,KAAK,EAAoB9+B,CAAO,IACzCrF,EAAMkkC,KAAK,EAAI,GACflkC,EAAMkkC,KAAK,EAAI9hC,EAAM2R,GAAG,CAEpB1O,GACArF,EAAMmkC,KAAK,CAAG/hC,EAAM0H,SAAS,CAAC9J,EAAMqE,CAAC,CAAE,EAAG,EAAG,EAAG,GAChDrE,EAAMkkC,KAAK,CAAGsJ,GAA4BxtC,EAAMgN,CAAC,EAC7C/H,EAAM6E,SAAS,CAAC9J,EAAMgN,CAAC,CAAE,EAAG,EAAG,EAAG,GAClC,GAGJhN,EAAMmkC,KAAK,CAAG,AAAC/hC,CAAAA,EAAMmD,QAAQ,CAAG,EAAI7F,EAAOuF,KAAK,CAAC8O,GAAG,AAAD,EAC/C3R,EAAMiP,MAAM,CAIpBrR,EAAMsoC,SAAS,CAAG,CAAC,GAI3ByF,CAAAA,EAAYjsC,CAAM,CAACW,EAAI,EAAE,AAAD,GACPsrC,EAAU7J,KAAK,GAAKlkC,EAAMkkC,KAAK,GACR,KAAA,IAAzB6J,EAAUsB,UAAU,EAC3BtB,CAAAA,EAAUsB,UAAU,CAAG,CAAA,EAE3BA,EAAatB,EAAUsB,UAAU,CAAG,GAExCrvC,EAAMqvC,UAAU,CAAGA,CACvB,GACA,IAAI,CAACzB,QAAQ,CAAGA,CACpB,CA7JAtxC,EAAoByG,OAAO,CAR3B,SAAiBC,CAAW,EACxB,GAAIyqC,GAA+BH,GAA8B,YAAa,CAC1E,IAAMjqC,EAAcL,EAAYnF,SAAS,AACzCwF,CAAAA,EAAYsqC,UAAU,CAAGA,EACzBtqC,EAAYyG,SAAS,CAAGA,CAC5B,CACA,OAAO9G,CACX,EAYA1G,EAAoBqxC,UAAU,CAAGA,EAmJjCrxC,EAAoBwN,SAAS,CAAGA,CACpC,EAAGxN,GAAwBA,CAAAA,EAAsB,CAAC,CAAA,GAMrB,IAAMgzC,GAA8BhzC,EAiB3D,CAAEkyB,KAAAA,EAAI,CAAE,CAAIrwB,IAGZ,CAAEoxC,WAAAA,EAAU,CAAE,CAAIpxC,IAElB,CAAEuB,OAAQ8vC,EAAM,CAAEjlC,YAAa,CAAEib,OAAQiqB,EAAwB,CAAE,CAAE,CAAIrlC,KAGzE,CAAExL,SAAU8wC,EAAoB,CAAE1wC,QAAS2wC,EAAmB,CAAExgC,OAAQygC,EAAkB,CAAE1wC,SAAU2wC,EAAoB,CAAEprC,MAAOqrC,EAAiB,CAAE7qB,WAAY8qB,EAAsB,CAAEC,KAAAA,EAAI,CAAE,CAAI7xC,GAe1M,OAAM8xC,WAAoBR,GAUtBz+B,QAAQuD,CAAI,CAAE,CACNA,GACA,IAAI,CAAC27B,OAAO,EAEpB,CAKApH,YAAa,KAGL5E,EAAOC,EAAON,EAAOphC,EAAGzC,EAAOooC,EAASiH,EAAY1K,EAASoE,EAASoH,EAAcC,EAFxF,IAAqBtuC,EAASpC,AAAf,IAAI,CAAkBoC,MAAM,CAAEhC,EAAQJ,AAAtC,IAAI,CAAyCI,KAAK,CAAE0Q,EAAW1Q,EAAM0Q,QAAQ,CAAEnL,EAAWvF,EAAMuF,QAAQ,CAAEzE,EAAUlB,AAApH,IAAI,CAAuHkB,OAAO,CAAEyvC,EAAWzvC,EAAQoM,CAAC,CAAE/H,EAAQvF,AAAlK,IAAI,CAAqKuF,KAAK,CAAEqrC,EAAW,CAAC,EAAGC,EAAQ,EAAE,CAAE3lC,EAAeilC,GAAqBjvC,EAAQgK,YAAY,EAC9QhK,EAAQgK,YAAY,CAAG,EAG3B,IADAnI,EAAIX,EAAOL,MAAM,CACVgB,KACHzC,EAAQ8B,CAAM,CAACW,EAAE,CACjB0tC,EACI,AAAC9qC,CAAAA,EAAWrF,EAAMmkC,KAAK,CAAGnkC,EAAMkkC,KAAK,AAAD,EAChCxkC,AARG,IAAI,CAQA0C,KAAK,CAAC2R,GAAG,CACxBmwB,EAAQlkC,EAAMkkC,KAAK,CACnBmL,EAAarvC,EAAMqvC,UAAU,CAC7BxL,EAAQ7jC,EAAMY,OAAO,CAACijC,KAAK,EAAIjjC,EAAQijC,KAAK,CAEvB,KAAA,IADrBM,CAAAA,EAAQnkC,EAAMmkC,KAAK,AAAD,GAEdA,CAAAA,EAAQnkC,EAAMmkC,KAAK,CAAGkM,EACjB,CAAA,AAAsB,KAAA,IAAfhB,GACHA,EAAazuC,EAAQ4vC,aAAa,CAAC,EAGhDxwC,EAAM0kC,OAAO,CAAG2K,EAAa,KAAK,EAAIrvC,EAAMkkC,KAAK,CACjDS,EAAU0K,EAAa,KAAK,EAAIrvC,EAAMmkC,KAAK,CAC3CiM,EAAWvM,AAAU,SAAVA,EACXuE,EAAUpoC,EAAMooC,OAAO,CAGnB,AAAiB,KAAA,IAAVjE,GACPD,GAAS,GACT,CAACiM,GAEG/H,GAAWpoC,EAAMwsC,eAAe,IAChCpE,CAAAA,EAAUA,EAAQ/+B,OAAO,EAAC,EAGzB++B,IACDA,EAAUpoC,EAAMooC,OAAO,CAAG53B,EAASmrB,KAAK,CAAC,GAAI,EAAG,KAAK,EAAGkI,EAAO,KAAK,EAAG,KAAK,EAAGjjC,EAAQ6vC,OAAO,EACzFn6B,QAAQ,CAAC,oBACTD,GAAG,CAAC3W,AApCN,IAAI,CAoCSgxC,WAAW,EAEvB1wC,EAAMooC,OAAO,CAAC/M,GAAG,EACjBr7B,CAAAA,EAAMooC,OAAO,CAAC/M,GAAG,CAACr7B,KAAK,CAAGA,CAAI,EAElCooC,EAAQ8D,KAAK,CAAG,CAAA,GAEpB9D,EAAQ5xB,IAAI,CAAC,CACT7J,MAAOyjC,EAAW,SAAW,OAC7BzlC,MAAO/J,EAAQ+J,KAAK,CACpBlF,OAAQ7E,EAAQ6E,MAAM,CACtB,aAAc7E,EAAQm7B,SAAS,CAC/B/tB,EAAGpD,CACP,GACK9K,EAAMyW,UAAU,EACjB6xB,EACK5xB,IAAI,CAAC9W,AApDP,IAAI,CAoDUkpC,YAAY,CAAC5oC,IACzB2b,GAAG,CAACm0B,GAAkBlvC,EAAQgM,KAAK,CAAE5M,EAAM4M,KAAK,GAChDm6B,MAAM,CAACnmC,EAAQmmC,MAAM,EAE1B7C,EAAQ,GACRA,CAAAA,GAASkE,EAAQzxB,WAAW,GAAK,CAAA,EAGrCoyB,EAAU,CACN/7B,EAAGm3B,EACHQ,QAASA,CACb,EACI/jC,EAAQ+vC,aAAa,GACrB5H,EAAQ1kC,CAAC,CAAG6/B,EACZ6E,EAAQrE,OAAO,CAAG1kC,EAAM0kC,OAAO,EAEnC0D,EAAQ5xB,IAAI,CAAC,CAETjJ,KAAMvN,EAAMY,OAAO,CAAC0M,KAAK,EAAI1M,EAAQ0M,KAAK,EAAI,GAClD,EAAE,CAAC86B,EAAQ8D,KAAK,CAAG,OAAS,UAAU,CAACnD,GAElCnoC,EAAQ+vC,aAAa,GACjBL,CAAQ,CAACtwC,EAAMkkC,KAAK,CAAC,CAStBoM,CAAQ,CAACtwC,EAAMkkC,KAAK,CAAC,CAAC7zB,IAAI,CAAGvM,KAAKC,GAAG,CAACusC,CAAQ,CAACtwC,EAAMkkC,KAAK,CAAC,CAAC7zB,IAAI,CAAE+3B,EAAQz9B,KAAK,EAAI,GARnF2lC,CAAQ,CAACtwC,EAAMkkC,KAAK,CAAC,CAAG,CACpBv3B,MAAOyjC,EAAW,GAAM,EACxB//B,KAAM+3B,EAAQz9B,KAAK,EAAI,EACvBimC,OAAQ1M,EACRQ,QAASR,CACb,GAORlkC,EAAMspC,UAAU,CAAG,CACfpF,EACAC,EAAQl/B,EAAMuhC,GAAG,CAAG1mC,EAAM8F,OAAO,CACpC,EAEIwiC,GACLpoC,CAAAA,EAAMooC,OAAO,CAAGA,EAAQ/+B,OAAO,EAAC,EAIxC,GAAI,CAACzI,EAAQ+vC,aAAa,CAAE,CACxB,IAAIE,EAAc,IASlB,IAAK,IAAM7wC,KARX+vC,GAAuBO,EAAU,SAAUQ,CAAG,EAC1CA,EAAI5M,KAAK,CAAG4M,EAAIpM,OAAO,CACvB6L,EAAMtoC,IAAI,CAAC6oC,GACXD,EAAc/sC,KAAKC,GAAG,CAAC+sC,EAAIzgC,IAAI,CAAEwgC,EACrC,GAGAtB,GAAWgB,EAAOlrC,EAAWJ,EAAM8O,GAAG,CAAG,IAAI,CAAC3R,KAAK,CAAC2R,GAAG,CAAE88B,GACrC/uC,GAAQ,CACxB,IAAMoiC,EAAQlkC,EAAMkkC,KAAK,CAAEkE,EAAUpoC,EAAMooC,OAAO,CAAE0I,EAAM1I,GAAWkI,CAAQ,CAACpM,EAAM,CAChF4M,GAAO1I,IAGFuH,GAAoBmB,EAAItK,GAAG,EAI5B4B,CAAO,CAACA,EAAQ8D,KAAK,CAAG,OAAS,UAAU,CAAC,CACxC7nC,EAAGysC,EAAItK,GAAG,CAAG,AAACsK,CAAAA,EAAInkC,KAAK,EAAI,CAAA,EAAKmkC,EAAIzgC,IAAI,CACxCq0B,QAAS1kC,EAAM0kC,OAAO,AAC1B,GAAGltB,IAAI,GAAG00B,KAAK,CAAG,CAAA,EANlB9D,EAAQzwB,IAAI,GAAGu0B,KAAK,CAAG,CAAA,EASnC,CACJ,CAEItrC,EAAQ6vC,OAAO,EAAI/wC,AA7HR,IAAI,CA6HWgxC,WAAW,EACrCV,GAAKtwC,AA9HM,IAAI,CA8HHgxC,WAAW,CAAE,KAAM,SAAUK,CAAO,EAC5C,OAAOjd,KAA0Hj2B,SAAS,CAAC+9B,EAAE,CAACp7B,KAAK,CAGnJuwC,EAAQvwC,KAAK,CAAC,IAAI,CAAE,EAAE,CAACuiB,KAAK,CAAChlB,IAAI,CAACuqB,UAAW,IAE7C,EAAE,CAACvF,KAAK,CAAChlB,IAAI,CAACuqB,UAAW,GAC7B,EAER,CAMA0oB,aAAc,CACV,IAAqBlvC,EAASpC,AAAf,IAAI,CAAkBoC,MAAM,CAO3C,IAAK,IAAM9B,KANX,KAAK,CAACgxC,cAMclvC,GAAQ,CACxB,IAAMsmC,EAAUpoC,EAAMooC,OAAO,CACzBA,IACIpoC,EAAMixC,eAAe,EACrBjxC,EAAMixC,eAAe,GAEzBjxC,EAAMixC,eAAe,CAAGvB,GAAqBtH,EAAQvzB,OAAO,CAAE,YAAa,WAWvE,IAAK,IAAMq8B,KATPlxC,EAAMqvC,UAAU,CAAG,GACnB,CAACrvC,EAAMmxC,MAAM,GACbnxC,EAAMqO,EAAE,CAAG+5B,EAAQp7B,CAAC,CACpBo7B,EAAQ5xB,IAAI,CAAC,CACTxJ,EAAGhN,EAAMqO,EAAE,CAAG,CAClB,GACArO,EAAMmxC,MAAM,CAAG,CAAA,GAGMrvC,GACjBovC,IAAelxC,GACfkxC,EAAWC,MAAM,EACjBD,EAAW9I,OAAO,GAClB8I,EAAW9I,OAAO,CAAC5xB,IAAI,CAAC,CACpBxJ,EAAGkkC,EAAW7iC,EAAE,AACpB,GACA6iC,EAAWC,MAAM,CAAG,CAAA,EAGhC,GAER,CACJ,CAKAvI,aAAa5oC,CAAK,CAAEm5B,CAAK,CAAE,CACvB,IAAMv4B,EAAU,IAAI,CAACA,OAAO,CAAE0J,EAAQ,AAACtK,GAASA,EAAMsK,KAAK,EAAK,IAAI,CAACA,KAAK,CACtE6B,EAAYvL,EAAQuL,SAAS,CAAErB,EAAa9K,GAASA,EAAM8K,SAAS,CAAG4L,EAAO,AAAC1W,GAASA,EAAMoxC,SAAS,EAAKxwC,EAAQwwC,SAAS,CAMjI,OALIjY,IACAziB,EAAO9V,EAAQmhB,MAAM,CAACoX,EAAM,CAACiY,SAAS,CACtCjlC,EAAYvL,EAAQmhB,MAAM,CAACoX,EAAM,CAAChtB,SAAS,CAC3CrB,EAAYlK,EAAQmhB,MAAM,CAACoX,EAAM,CAACruB,SAAS,EAExC,CACH4L,KAAMA,GAAQpM,EACdmM,OAAQtK,GAAa7B,EACrB,eAAgBQ,GAAalK,EAAQkK,SAAS,EAAI,CACtD,CACJ,CAIAolC,SAAU,CACNV,GAAO3xC,SAAS,CAACqyC,OAAO,CAAC1vC,KAAK,CAAC,IAAI,CAAE8nB,WACX,CAAA,IAAtB,IAAI,CAAC1nB,OAAO,CAACywC,IAAI,EACjB,IAAI,CAACC,aAAa,EAClB,IAAI,CAACZ,WAAW,EAChB,IAAI,CAACA,WAAW,CAACW,IAAI,CAAC,IAAI,CAACvxC,KAAK,CAACyxC,WAAW,CAAC,IAAI,CAACD,aAAa,CAAC,CAExE,CACJ,CAMArB,GAAYltC,OAAO,CAAGoqC,GAAmBpqC,OAAO,CAChDktC,GAAYh9B,cAAc,CAAG68B,GAAkBL,GAAyBx8B,cAAc,CA52B1D,CAMxBrI,aAAc,EA4BdhB,WAAY,EAWZ+mC,cAAe,CAAA,EAYf9M,MAAO,OAUP2M,cAAe,GAQfzU,UAAW,SAWX0G,QAAS,CACL1iC,YAAa,cACjB,EAIAsM,UAAW,KAiBXW,EAAG,IAsCHokC,UAAW,UAiBXtmC,UAAW,EACXiX,OAAQ,CAKJ+b,MAAO,CAOH3xB,UAAW,UAOXilC,UAAW,SACf,CACJ,EAWAxkC,MAAO,CAEHC,SAAU,QAEVo3B,WAAY,MAChB,CACJ,GAkqBAqL,GAA2BvsC,OAAO,CAACktC,IACnCL,GAAmBK,GAAYpyC,SAAS,CAAE,CACtCspC,QAAS,CAAA,EACTqK,UAAW,CAAA,EACXC,WAAY,CAAA,EACZC,gBAAiB,CAAA,EACjBhK,WAAY2E,GACZsF,OAAQ,CAAA,EACRxkB,oBAAqB,CAAA,EACrBykB,cAAe,CAAC,cAAc,CAC9BC,YAAarjB,GAKbja,KAAMi7B,GAAO3xC,SAAS,CAAC0W,IAAI,AAC/B,GACAnK,KAA0Iu/B,kBAAkB,CAAC,QAASsG,IAkBtK,IAAI6B,GAA+Gn1C,EAAoB,KACnIo1C,GAAmIp1C,EAAoBI,CAAC,CAAC+0C,IAc7J,GAAM,CAAElzC,SAAUozC,EAAmB,CAAE54B,KAAM64B,EAAe,CAAE1+B,UAAW2+B,EAAoB,CAAEjzC,QAASkzC,EAAkB,CAAEjzC,SAAUkzC,EAAmB,CAAEhzC,KAAMizC,EAAe,CAAE,CAAIl0C,KAWtL,AAAC,SAAU5B,CAAU,EAkCjB,SAAS+T,IAC0B,KAAA,IAApB,IAAI,CAACmc,UAAU,EACtB,IAAI,CAACA,UAAU,CAAC6lB,SAAS,CAAC,IAAI,CAAC1xC,OAAO,CAACqf,MAAM,CAAE,CAAA,EAEvD,CAKA,SAASsyB,IAED9pC,AADS,IAAI,CACRgkB,UAAU,EAAED,WACjB/jB,CAAAA,AAFS,IAAI,CAER7H,OAAO,CAACsf,OAAO,CAAG,CAAA,CAAI,CAEnC,CAIA,SAASsyB,IACL,IAAmB/lB,EAAahkB,AAAnB,IAAI,CAAoBgkB,UAAU,CAC/C,GAAIA,GAAYD,UAAW,CACvB,IAAMimB,EAAgBhqC,AAFb,IAAI,CAEcgqC,aAAa,CAAExqB,EAAOxf,AAFxC,IAAI,CAEyCgqC,aAAa,CAACxqB,IAAI,CAAEyqB,EAAe,EAAE,CAC3F,IAAK,IAAIjwC,EAAI,EAAGA,EAAIgwC,EAAchxC,MAAM,CAAEgB,IACjCgqB,EAAWkmB,YAAY,CAACF,CAAa,CAAChwC,EAAE,GACzCiwC,EAAazqC,IAAI,CAACwqC,CAAa,CAAChwC,EAAE,CAG1CgG,CARS,IAAI,CAQRgqC,aAAa,CAAGC,EACrBjqC,AATS,IAAI,CASRgqC,aAAa,CAACxqB,IAAI,CAAGA,CAC9B,CACJ,CAIA,SAASzf,IAEAC,AADQ,IAAI,CACPgkB,UAAU,EAChBhkB,CAAAA,AAFS,IAAI,CAERgkB,UAAU,CAAG,IAAI3rB,EAFb,IAAI,CAEuB,CAE5C,CAIA,SAAS8xC,IACL,GAAM,CAAE34B,QAAAA,CAAO,CAAErZ,QAAS,CAAEiyC,aAAAA,CAAY,CAAE,CAAE/wC,OAAAA,CAAM,CAAEM,MAAAA,CAAK,CAAE6C,MAAAA,CAAK,CAAE,CAAG,IAAI,CAGzE,GAAIgV,EAAS,CACT,IAAIxX,EAAIX,EAAOL,MAAM,CACrB,KAAOgB,KAAK,CACR,IAAMzC,EAAQ8B,CAAM,CAACW,EAAE,CAGjBqwC,EAAkB,CADR9yC,CAAAA,AAAY,OAAZA,EAAMgN,CAAC,EAAa6lC,AAAiB,CAAA,IAAjBA,CAAqB,GACpBzwC,CAAAA,GAAOqqB,YAAYkmB,aAAa3yC,EAAMqE,CAAC,CAAE,CAAA,IAC1EY,GAAOwnB,YAAYkmB,aAAa3yC,EAAMgN,CAAC,CAAE,CAAA,EAAI,CAGjDhN,CAAAA,EAAM2iB,OAAO,CAAGmwB,CAAAA,GAEZ9yC,AAA0B,CAAA,IAA1BA,EAAMY,OAAO,CAAC+hB,OAAO,AAC7B,CACJ,CACJ,CAIA,SAASowB,IACL,IAAI,CAACC,UAAU,CAAC,IAAI,CAAC5wC,KAAK,CAAE,CAAC,IAAI,EACjC,IAAI,CAAC4wC,UAAU,CAAC,IAAI,CAAC/tC,KAAK,CAAEotC,GAAgB,IAAI,CAACnwC,aAAa,CAAE,CAAC,IAAI,EACzE,CAIA,SAAS+wC,EAAiBxqC,CAAI,CAAE+W,CAAI,MAE5BS,EAAQ5T,EAAWW,EADvB,IAAMtN,EAAS,IAAI,CAAEoC,EAASpC,EAAOoC,MAAM,CAE3C,GAAI2G,GAAMgkB,YAAYD,UAAW,CAC7B,IAAMC,EAAahkB,EAAKgkB,UAAU,CAClCjN,EAAK7f,OAAO,CAAC,SAAUtC,CAAG,EACtB4iB,EAASwM,GAAYymB,YAAc,EAAE,CACrC7mC,EAAY5D,EAAKhJ,OAAO,CACpBgJ,EAAK9F,GAAG,CACR0vC,GAAgB3yC,EAAOkB,OAAO,CAACyL,SAAS,CAAE5D,EAAK9F,GAAG,EAItD,IAAMwwC,EAAmB1qC,GAAM7H,SAASqf,QAAQlG,OAAO,SAAUq5B,CAAG,EAChE,IAAIC,EAAQ,CAAA,EAEZ,IAAK,IAAI5wC,EAAI,EAAGA,EAAIwd,EAAOxe,MAAM,CAAEgB,IAAK,CACpC,IAAM6wC,EAAarzB,CAAM,CAACxd,EAAE,CAC5B,GAAI6wC,EAAW5iC,IAAI,GAAK0iC,EAAI1iC,IAAI,EAC5B4iC,EAAW7iC,EAAE,GAAK2iC,EAAI3iC,EAAE,CAAE,CAC1B4iC,EAAQ,CAAA,EACR,KACJ,CACJ,CACA,OAAOA,CACX,GACAvxC,EAAOnC,OAAO,CAAC,SAAUK,CAAK,EAC1BgN,EAAIqlC,GAAgBryC,CAAK,CAAC,QAAU3C,EAAIgsC,WAAW,GAAG,CAAErpC,CAAK,CAAC3C,EAAI,EAClE4iB,EAAOtgB,OAAO,CAAC,SAAUyzC,CAAG,EACxB,GAAIhB,GAAoB/lC,IAAc+lC,GAAoBplC,GAAI,CAC1D,IAAIoR,EAAY,EACZ,CAAC/R,EAAY+mC,EAAI1iC,IAAI,EAAI1D,EAAIomC,EAAI3iC,EAAE,EAClCpE,EAAY+mC,EAAI1iC,IAAI,EAAI1D,EAAIomC,EAAI1iC,IAAI,CACrC0N,EAAY,aAEP,CAAA,AAAC/R,EAAY+mC,EAAI1iC,IAAI,EAC1B1D,EAAIomC,EAAI1iC,IAAI,EACZ1D,EAAIomC,EAAI3iC,EAAE,EAAMpE,EAAY+mC,EAAI1iC,IAAI,EACpC1D,EAAIomC,EAAI3iC,EAAE,EACVzD,EAAIomC,EAAI1iC,IAAI,GACZ0N,CAAAA,EAAY,cAAa,EAEzBA,GACA8zB,GAAqBzpC,EAAM2V,EAAW,CAAEpe,MAAAA,EAAOozC,IAAAA,CAAI,EAE3D,CACJ,GACAD,GAAkBxzC,QAAQ,SAAUyzC,CAAG,EACnClB,GAAqBzpC,EAAM,sBAAuB,CAAEzI,MAAAA,EAAOozC,IAAAA,CAAI,EACnE,EACJ,EACJ,EACJ,CACJ,CAYA,SAASG,IACL,IAAMxlB,EAAsB,IAAI,CAACA,mBAAmB,CAAEylB,EAAezlB,GAAqB0lB,QAAS3xC,EAAS,IAAI,CAACA,MAAM,CAACihB,KAAK,GAAI9d,EAAQ,IAAI,CAACA,KAAK,CAC/IwuC,EAAU,IAAI,CAAC7yC,OAAO,CAAC6yC,OAAO,CAAEhxC,EAAIX,EAAOL,MAAM,CAAG,EAuDxD,GAAIgyC,GAAWhxC,EAAI,EAAG,KAedixC,EAASC,EACb,IAd6B,UAAzB,IAAI,CAAC/yC,OAAO,CAACgzC,OAAO,EACpBH,CAAAA,GAAW,IAAI,CAAC5kB,cAAc,AAAD,EAI7B2kB,GACAA,EAAeC,GAGfD,GAAgB,IAAI,CAAC3kB,cAAc,EACnC4kB,CAAAA,EAAUD,CAAW,EAIlB/wC,KAOH,GALMkxC,GAAQA,AAAiB,CAAA,IAAjBA,EAAKhxB,OAAO,EACtBgxB,CAAAA,EAAO7xC,CAAM,CAACW,EAAI,EAAE,AAAD,EAEvBixC,EAAU5xC,CAAM,CAACW,EAAE,CAEfkxC,AAAiB,CAAA,IAAjBA,EAAKhxB,OAAO,EAAc+wB,AAAoB,CAAA,IAApBA,EAAQ/wB,OAAO,EAG7C,GAAIgxB,EAAKtvC,CAAC,CAAGqvC,EAAQrvC,CAAC,CAAGovC,EAAS,CAC9B,IAAMI,EAAS,AAACH,CAAAA,EAAQrvC,CAAC,CAAGsvC,EAAKtvC,CAAC,AAADA,EAAK,EACtCvC,EAAO8kB,MAAM,CACbnkB,EAAI,EAAG,EAAG,CACNqxC,OAAQ,CAAA,EACRzvC,EAAGwvC,CACP,GAEI5uC,EAAM6c,QAAQ,EAAI,IAAI,CAAClhB,OAAO,CAACkhB,QAAQ,EAEvCiyB,CAAAA,AADQ9uC,CAAAA,EAAM6c,QAAQ,CAACkyB,MAAM,CAAC,IAAI,CAACC,QAAQ,CAAC,CAACJ,EAAO,CAAG,GAAK9B,CAAAA,IAAoH,EAAG9sC,EAAOA,EAAMrE,OAAO,CAACszC,WAAW,CAAE,CAAA,EAAOL,EAAQ,IAAI,CAACE,KAAK,CAAA,EACxOI,KAAK,CAAG,CAAA,CAEtB,CAEAR,EAAOD,EAEf,CAEA,OAAO,IAAI,CAACU,YAAY,CAACtyC,EAC7B,CApPAvF,EAAWwG,OAAO,CAflB,SAAiBE,CAAS,CAAED,CAAW,EACnC,GAAI,CAACC,EAAUkG,SAAS,CAACC,QAAQ,CAAC,cAAe,CAC7CnG,EAAUkG,SAAS,CAAClB,IAAI,CAAC,cACzB+pC,GAAoB/uC,EAAW,OAAQuF,GACvCwpC,GAAoB/uC,EAAW,YAAaqN,GAC5C0hC,GAAoB/uC,EAAW,wBAAyBuvC,GACxDR,GAAoB/uC,EAAW,kBAAmBsvC,GAClD,IAAMlvC,EAAcL,EAAYnF,SAAS,AACzCwF,CAAAA,EAAY2vC,UAAU,CAAGC,EACzB5vC,EAAYgxC,UAAU,CAAGd,EACzBvB,GAAoBhvC,EAAa,sBAAuB4vC,GACxDZ,GAAoBhvC,EAAa,cAAe+vC,EACpD,CACA,OAAO9vC,CACX,CAgQA,OAAMnC,EASF,OAAOwzC,UAAUlB,CAAG,CAAE5pB,CAAG,CAAE,CACvB,IAAM+qB,EAASnB,EAAImB,MAAM,EAAI/wC,IAAUkN,EAAO0iC,EAAI1iC,IAAI,CAAEjP,EAAS2xC,EAAI3iC,EAAE,CAAG2iC,EAAI1iC,IAAI,CAAEqb,EAAQvC,GAAO9Y,EAC/F,AAAC8Y,CAAAA,EAAM9Y,CAAG,EAAK6jC,EACfA,EAAU,AAAC7jC,CAAAA,EAAO8Y,CAAE,EAAK+qB,EAQ7B,OANKnB,EAAIoB,SAAS,CAIRzoB,GAAQtqB,EAHRsqB,EAAOtqB,GAAUsqB,AAAS,IAATA,CAM/B,CAIA,OAAO0oB,QAAQjrB,CAAG,CAAE,CAEhB,IAAMiD,EAAahkB,AADN,IAAI,CACOgkB,UAAU,CAC5BymB,EAAazmB,GAAcA,EAAWymB,UAAU,CACtD,GAAI,CAACA,GAAc,CAACd,GAAoB5oB,GACpC,OAAOA,EAEX,IAAIkrB,EAAOlrB,EAAK4pB,EAAK3wC,EACrB,IAAKA,EAAI,EAEL,AAFQA,EAAIywC,EAAWzxC,MAAM,GAEzB2xC,CAAAA,AADJA,CAAAA,EAAMF,CAAU,CAACzwC,EAAE,AAAD,EACViO,IAAI,EAAIgkC,CAAG,EAFYjyC,IAKtB2wC,EAAI3iC,EAAE,CAAGikC,EACdA,GAAQtB,EAAIr/B,GAAG,CAEVjT,EAAUwzC,SAAS,CAAClB,EAAKsB,IAC9BA,CAAAA,GAAQtB,EAAIr/B,GAAG,AAAD,EAGtB,OAAO2gC,CACX,CAIA,OAAOC,QAAQnrB,CAAG,CAAE,CAEhB,IAAMiD,EAAahkB,AADN,IAAI,CACOgkB,UAAU,CAC5BymB,EAAazmB,GAAcA,EAAWymB,UAAU,CACtD,GAAI,CAACA,GAAc,CAACd,GAAoB5oB,GACpC,OAAOA,EAEX,IAAIkrB,EAAOlrB,EAAK4pB,EAAK3wC,EACrB,IAAKA,EAAI,EAAGA,EAAIywC,EAAWzxC,MAAM,CAAEgB,IAE/B,GAAI2wC,AADJA,CAAAA,EAAMF,CAAU,CAACzwC,EAAE,AAAD,EACVgO,EAAE,EAAI+Y,EACVkrB,GAAQtB,EAAIr/B,GAAG,MAEd,GAAIq/B,EAAI1iC,IAAI,EAAI8Y,EACjB,WAEC,GAAI1oB,EAAUwzC,SAAS,CAAClB,EAAK5pB,GAAM,CACpCkrB,GAASlrB,EAAM4pB,EAAI1iC,IAAI,CACvB,KACJ,CAEJ,OAAOgkC,CACX,CAMApxC,YAAYmF,CAAI,CAAE,CACd,IAAI,CAAC+jB,SAAS,CAAG,CAAA,EACjB,IAAI,CAAC/jB,IAAI,CAAGA,CAChB,CAoBAmsC,YAAYvwC,CAAC,CAAE4b,CAAM,CAAE,CACnB,OAAOgyB,GAAgBhyB,EAAQ,SAAUmJ,CAAC,EACtC,OAAOA,EAAE1Y,IAAI,CAAGrM,GAAKA,EAAI+kB,EAAE3Y,EAAE,AACjC,EACJ,CAIAkiC,aAAanpB,CAAG,CAAEqrB,CAAQ,CAAE,CACxB,IAAyBpsC,EAAOgkB,AAAb,IAAI,CAAoBhkB,IAAI,CAAEwX,EAASxX,EAAK7H,OAAO,CAACqf,MAAM,EAAI,EAAE,CAC/Exd,EAAIwd,EAAOxe,MAAM,CAAEqzC,EAAOC,EAAM/zB,EACpC,GAAIve,GAAK2vC,GAAoB5oB,GAAM,CAC/B,KAAO/mB,KACC3B,EAAUwzC,SAAS,CAACr0B,CAAM,CAACxd,EAAE,CAAE+mB,KAC/BsrB,EAAQ,CAAA,EACHC,GACDA,CAAAA,EAAO1C,GAAgBpyB,CAAM,CAACxd,EAAE,CAACuyC,UAAU,CAAE,CAACvsC,EAAKhJ,OAAO,CAAA,GAKlEuhB,EADA8zB,GAASD,EACHC,GAAS,CAACC,EAGVD,CAEd,CACA,OAAO9zB,CACX,CAcAsxB,UAAUryB,CAAM,CAAEzgB,CAAM,CAAE,CACtB,IAAMitB,EAAa,IAAI,CAAEhkB,EAAOgkB,EAAWhkB,IAAI,CAAEyY,EAAOzY,EAAK3I,KAAK,CAACohB,IAAI,CAAEsL,EAAY2lB,GAAmBlyB,IACpG,CAAC,CAACA,EAAOxe,MAAM,EACf,CAAC,CAAClE,OAAOiiB,IAAI,CAACS,CAAM,CAAC,EAAE,EAAExe,MAAM,AACnCgH,CAAAA,EAAKwR,OAAO,CAAGwS,EAAWD,SAAS,GAAKA,EACxCC,EAAWD,SAAS,CAAGA,EAEvBvM,GAAQtgB,QAAQ,AAACyzC,IACbA,EAAI1iC,IAAI,CAAGwQ,EAAK7W,KAAK,CAAC+oC,EAAI1iC,IAAI,GAAK,EACnC0iC,EAAI3iC,EAAE,CAAGyQ,EAAK7W,KAAK,CAAC+oC,EAAI3iC,EAAE,GAAK,CACnC,GACIwP,IAAWxX,EAAK7H,OAAO,CAACqf,MAAM,EAC9BxX,CAAAA,EAAK7H,OAAO,CAACqf,MAAM,CAAGxX,EAAK7G,WAAW,CAACqe,MAAM,CAAGA,CAAK,EAEzDxX,EAAKwsC,WAAW,CAAG,CAAA,EAEnBxsC,EAAK/I,MAAM,CAACC,OAAO,CAAC,SAAUD,CAAM,EAChCA,EAAOua,OAAO,CAAG,CAAA,CACrB,GACKuS,GAAa/jB,EAAKojB,OAAO,GAAK/qB,EAAU6zC,OAAO,GAEhD,OAAOlsC,EAAKojB,OAAO,CACnB,OAAOpjB,EAAK8gB,OAAO,EAEnBiD,IACA/jB,EAAK7G,WAAW,CAACse,OAAO,CAAG,CAAA,EAC3BzX,EAAK8gB,OAAO,CAAGzoB,EAAU2zC,OAAO,CAChChsC,EAAKojB,OAAO,CAAG/qB,EAAU6zC,OAAO,CAChClsC,EAAKwI,WAAW,CAAG,SAAUpH,CAAM,CAAEG,CAAM,CAAExK,CAAM,CAAEuH,CAAS,CAAE+X,CAAc,EAG1E,GAAI2N,EAAWD,SAAS,CAAE,KAElB0oB,EADJ,IAAMj1B,EAAU,IAAI,CAACrf,OAAO,CAACqf,MAAM,EAAI,EAAE,CAEzC,KAAQi1B,EAAYzoB,EAAWmoB,WAAW,CAAC/qC,EAAQoW,IAC/CpW,EAASqrC,EAAUzkC,EAAE,CAEzB,KAAQykC,EAAYzoB,EAAWmoB,WAAW,CAAC5qC,EAAQiW,IAC/CjW,EAASkrC,EAAUxkC,IAAI,CAGvB1G,EAASH,GACTG,CAAAA,EAASH,CAAK,CAEtB,CACApB,EAAKnF,WAAW,CAACzF,SAAS,CAACoT,WAAW,CAAClT,IAAI,CAAC,IAAI,CAAE8L,EAAQG,EAAQxK,EAAQuH,EAAW+X,EACzF,EACArW,EAAK0sC,kBAAkB,CAAG,WAGtB,GAFA1sC,EAAKnF,WAAW,CAACzF,SAAS,CAACs3C,kBAAkB,CAACp3C,IAAI,CAAC,IAAI,EACvD0uB,EAAW2oB,UAAU,CAAG,KAAK,EACzB3oB,EAAWD,SAAS,CAAE,CACtB,IAAMvM,EAASxX,EAAK7H,OAAO,CAACqf,MAAM,EAAI,EAAE,CAExCo1B,EAAc,EAAE,CAAEnC,EAAa,EAAE,CAAEoC,EAAoBjD,GAAgB5pC,EAAK6sC,iBAAiB,CAAE,GAC3F7zC,EAAS,EAAG8zC,EAAOhB,EAAQ5xC,EAAM8F,EAAK4b,OAAO,EAAI5b,EAAK9F,GAAG,CAAEoB,EAAM0E,EAAK6b,OAAO,EAAI7b,EAAK1E,GAAG,CAAEokB,EAAO1lB,EAEtGwd,EAAOtgB,OAAO,CAAC,SAAUyzC,CAAG,EACxBmB,EAASnB,EAAImB,MAAM,EAAI/wC,IACnB4uC,GAAoBzvC,IAAQyvC,GAAoBruC,KAC5CjD,EAAUwzC,SAAS,CAAClB,EAAKzwC,IACzBA,CAAAA,GAAQ,AAACywC,EAAI3iC,EAAE,CAAG8jC,EACb5xC,EAAM4xC,CAAO,EAElBzzC,EAAUwzC,SAAS,CAAClB,EAAKrvC,IACzBA,CAAAA,GAAQ,AAACA,EAAMwwC,EACVnB,EAAI1iC,IAAI,CAAG6jC,CAAO,EAGnC,GAEAt0B,EAAOtgB,OAAO,CAAC,SAAUyzC,CAAG,EAGxB,GAFAjrB,EAAQirB,EAAI1iC,IAAI,CAChB6jC,EAASnB,EAAImB,MAAM,EAAI/wC,IACnB4uC,GAAoBzvC,IAAQyvC,GAAoBruC,GAAM,CACtD,KAAOokB,EAAQosB,EAAS5xC,GACpBwlB,GAASosB,EAEb,KAAOpsB,EAAQxlB,GACXwlB,GAASosB,EAEb,IAAK9xC,EAAI0lB,EAAO1lB,EAAIsB,EAAKtB,GAAK8xC,EAC1Bc,EAAYptC,IAAI,CAAC,CACb9H,MAAOsC,EACP+yC,KAAM,IACV,GACAH,EAAYptC,IAAI,CAAC,CACb9H,MAAOsC,EAAI2wC,EAAI3iC,EAAE,CAAG2iC,EAAI1iC,IAAI,CAC5B8kC,KAAM,MACNnlC,KAAM+iC,EAAIqC,SAAS,AACvB,EAER,CACJ,GACAJ,EAAYlsB,IAAI,CAAC,SAAUhsB,CAAC,CAAEisB,CAAC,EAC3B,OAAQ,AAACjsB,EAAEgD,KAAK,GAAKipB,EAAEjpB,KAAK,CACvB,AAAChD,CAAAA,AAAW,OAAXA,EAAEq4C,IAAI,CAAY,EAAI,CAAA,EACnBpsB,CAAAA,AAAW,OAAXA,EAAEosB,IAAI,CAAY,EAAI,CAAA,EAC3Br4C,EAAEgD,KAAK,CAAGipB,EAAEjpB,KAAK,AACzB,GAEAo1C,EAAQ,EACRptB,EAAQxlB,EACR0yC,EAAY11C,OAAO,CAAC,SAAUyzC,CAAG,EAEf,IADdmC,CAAAA,GAAUnC,AAAa,OAAbA,EAAIoC,IAAI,CAAY,EAAI,EAAE,GACjBpC,AAAa,OAAbA,EAAIoC,IAAI,EACvBrtB,CAAAA,EAAQirB,EAAIjzC,KAAK,AAAD,EAEN,IAAVo1C,GAAenD,GAAoBjqB,KACnC+qB,EAAWjrC,IAAI,CAAC,CACZyI,KAAMyX,EACN1X,GAAI2iC,EAAIjzC,KAAK,CACb4T,IAAKq/B,EAAIjzC,KAAK,CAAGgoB,EAASirB,CAAAA,EAAI/iC,IAAI,EAAI,CAAA,CAC1C,GACA5O,GAAW2xC,EAAIjzC,KAAK,CAChBgoB,EACCirB,CAAAA,EAAI/iC,IAAI,EAAI,CAAA,EAEzB,GACAoc,EAAWymB,UAAU,CAAGA,EAGpBd,GAAoBzvC,IACpByvC,GAAoBruC,IACpBquC,GAAoB3pC,EAAK9F,GAAG,IAC5B8pB,EAAW2oB,UAAU,CAAGrxC,EAAMpB,EAAMlB,EAChC6zC,EACJpD,GAAqBzpC,EAAM,eACvBA,EAAKitC,WAAW,CAChBjtC,EAAKmhB,MAAM,CAAGnhB,EAAKitC,WAAW,CAEzBjpB,EAAW2oB,UAAU,EAC1B3sC,CAAAA,EAAKmhB,MAAM,EACP,AAAC7lB,CAAAA,EAAM0E,EAAK9F,GAAG,CAAG2yC,CAAgB,EAC9B7oB,EAAW2oB,UAAU,AAAD,EAE5BE,GACA7sC,CAAAA,EAAKshB,eAAe,CAChBthB,EAAKmhB,MAAM,CAAInhB,CAAAA,EAAKktC,cAAc,EAAI,CAAA,CAAC,EAE/CltC,EAAK9F,GAAG,CAAGA,EACX8F,EAAK1E,GAAG,CAAGA,EAEnB,CACJ,GAEAsuC,GAAgB7yC,EAAQ,CAAA,IACxBiJ,EAAK3I,KAAK,CAACN,MAAM,EAEzB,CACJ,CACAjD,EAAWuE,SAAS,CAAGA,CAC3B,EAAGvE,GAAeA,CAAAA,EAAa,CAAC,CAAA,GAMH,IAAMq5C,GAAmBr5C,EAOhDs5C,GAAK13C,GACX03C,CAAAA,GAAEt5C,UAAU,CAAGs5C,GAAEt5C,UAAU,EAAIq5C,GAC/BC,GAAEt5C,UAAU,CAACwG,OAAO,CAAC8yC,GAAEC,IAAI,CAAED,GAAErG,MAAM,EAsCR,IAAMuG,GARL,CAE9B,EAqBM,CAAEl3C,SAAUm3C,EAA8B,CAAEl3C,SAAUm3C,EAA8B,CAAEl3C,aAAcm3C,EAAkC,CAAE/mC,OAAQgnC,EAA4B,CAAEj3C,SAAUk3C,EAA8B,CAAE,CAAIj4C,IASlO,SAASk4C,GAAQC,CAAG,EAChB,IAAMviC,EAAMuiC,EAAI70C,MAAM,CAClBuf,EAAMnd,GAAIyyC,GAMd,OAHIF,GAA+Bp1B,IAAQjN,GACvCiN,CAAAA,EAAMk1B,GAAmCl1B,EAAMjN,EAAG,EAE/CiN,CACX,CA2FA,SAASnd,GAAIyyC,CAAG,EACZ,IAAIviC,EAAMuiC,EAAI70C,MAAM,CAAEuf,EAEtB,GAAI,CAACjN,GAAOuiC,EAAIC,QAAQ,CACpBv1B,EAAM,UAGL,GAAIjN,EAEL,IADAiN,EAAM,EACCjN,KACHiN,GAAOs1B,CAAG,CAACviC,EAAI,CAKvB,OAAOiN,CACX,CAMA,IAAMw1B,GAAwB,CAC1BH,QAAAA,GACAI,SA9GJ,WACI,IAAMz1B,EAAM,EAAE,CAMd,MALA,EAAE,CAACrhB,OAAO,CAAC5B,IAAI,CAACuqB,UAAW,SAAUguB,CAAG,EACpCt1B,EAAI/Y,IAAI,CAACouC,GAAQC,GACrB,GAGO,AAAkB,KAAA,IAAXt1B,CAAG,CAAC,EAAE,CAAmB,KAAK,EAAIA,CACpD,EAuGIynB,MAnGJ,SAAqC6N,CAAG,EACpC,OAAOA,EAAI70C,MAAM,CACb60C,CAAG,CAACA,EAAI70C,MAAM,CAAG,EAAE,CAClB60C,EAAIC,QAAQ,CAAG,KAAO,KAAK,CACpC,EAgGItN,KA5FJ,SAAcqN,CAAG,EACb,OAAOA,EAAI70C,MAAM,CACbu0C,GAA+BM,GAC9BA,EAAIC,QAAQ,CAAG,KAAO,KAAK,CACpC,EAyFI3M,IAnFJ,SAAaX,CAAI,CAAEC,CAAG,CAAET,CAAK,EAIzB,GAHAQ,EAAO8M,GAAmC9M,IAAI,CAACA,GAC/CC,EAAM6M,GAAmC7M,GAAG,CAACA,GAC7CT,EAAQsN,GAAmCtN,KAAK,CAACA,GAC7C2N,GAA+BnN,IAC/BmN,GAA+BlN,IAC/BkN,GAA+B3N,GAC/B,MAAO,CAACQ,EAAMC,EAAKT,EAAM,AAEjC,EA2EIS,IAvEJ,SAAaoN,CAAG,EACZ,OAAOA,EAAI70C,MAAM,CACbw0C,GAA+BK,GAC9BA,EAAIC,QAAQ,CAAG,KAAO,KAAK,CACpC,EAoEIlL,KAhEJ,SAActB,CAAI,CAAEd,CAAI,CAAEC,CAAG,CAAET,CAAK,EAKhC,GAJAsB,EAAOgM,GAAmChM,IAAI,CAACA,GAC/Cd,EAAO8M,GAAmC9M,IAAI,CAACA,GAC/CC,EAAM6M,GAAmC7M,GAAG,CAACA,GAC7CT,EAAQsN,GAAmCtN,KAAK,CAACA,GAC7C2N,GAA+BrM,IAC/BqM,GAA+BnN,IAC/BmN,GAA+BlN,IAC/BkN,GAA+B3N,GAC/B,MAAO,CAACsB,EAAMd,EAAMC,EAAKT,EAAM,AAEvC,EAsDIsB,KAlDJ,SAAoCuM,CAAG,EACnC,OAAOA,EAAI70C,MAAM,CAAG60C,CAAG,CAAC,EAAE,CAAIA,EAAIC,QAAQ,CAAG,KAAO,KAAK,CAC7D,EAiDIvtC,MA7CJ,SAAekgC,CAAG,CAAED,CAAI,QAGpB,CAFAC,EAAM6M,GAAmC7M,GAAG,CAACA,GAC7CD,EAAO8M,GAAmC9M,IAAI,CAACA,GAC3CmN,GAA+BlN,IAAQkN,GAA+BnN,IAC/D,CAACC,EAAKD,EAAK,CAElBC,AAAQ,OAARA,GAAgBD,AAAS,OAATA,EACT,WAGf,EAoCIplC,IAAAA,EACJ,EACAsyC,GAA6BJ,GAAoCS,IAkJpC,IAAME,GALN,CACzBC,OAvHW,CAGXjrC,gBAAiB,EAIjBkrC,qBAAsB,CAClBrd,YAAa,CACT,aACA,aACA,WACH,CACD1D,OAAQ,CACJ,YACA,YACA,UACH,CACDD,OAAQ,CACJ,WACA,WACA,SACH,CACDlN,KAAM,CACF,WACA,WACA,SACH,CACD8M,IAAK,CACD,UACA,SACA,WACH,CACDgE,KAAM,CACF,oBACA,SACA,WACH,CACD/D,MAAO,CACH,QACA,OACA,SACH,CACDC,KAAM,CACF,KACA,KACA,MACH,AACL,CAEJ,EAsEImhB,eAjEmB,CACnBC,KAAM,CAAC,EACPC,OAAQ,CAAC,EACTC,KAAM,CAAC,EACP3rC,WAAY,CAAC,EACb4rC,UAAW,CAAC,EACZzxB,OAAQ,CACJ9Z,gBAAiB,EACrB,EACAwrC,YAAa,CACTxrC,gBAAiB,EACrB,EACAyrC,YAAa,CACTzrC,gBAAiB,EACrB,EACA2/B,KAAM,CACF3/B,gBAAiB,CACrB,EACAk+B,IAAK,CACDl+B,gBAAiB,CAErB,EACA0rC,WAAY,CACR1rC,gBAAiB,EACrB,CACJ,EAyCII,MAnCU,CACV,CACI,cACA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAI,CAC3C,CAAE,CACC,SACA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CACxB,CAAE,CACC,SACA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CACxB,CAAE,CACC,OACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,CACzB,CAAE,CACC,MACA,CAAC,EAAE,CACN,CAAE,CACC,OACA,CAAC,EAAE,CACN,CAAE,CACC,QACA,CAAC,EAAG,EAAG,EAAE,CACZ,CAAE,CACC,OACA,KACH,CACJ,AAUD,EAgBM,CAAElN,SAAUy4C,EAAoC,CAAEloC,OAAQmoC,EAAkC,CAAE7yC,MAAO8yC,EAAiC,CAAEn4C,KAAMo4C,EAAgC,CAAE,CAAIr5C,IAoB1L,SAASiwB,GAAcltB,CAAC,EACpB,IAAMuH,EAAO,IAAI,CAAE/I,EAAS+I,EAAK/I,MAAM,CAEvCA,EAAOC,OAAO,CAAC,SAAUD,CAAM,EAC3BA,EAAOgM,eAAe,CAAG,KAAK,CAClC,GACAhM,EAAOC,OAAO,CAAC,SAAUD,CAAM,EAC3BA,EAAOgM,eAAe,CAAIjD,EAAK4lB,kBAAkB,EAC7C5lB,EAAK4lB,kBAAkB,GACvB3uB,EAAOgM,eAAe,EACtBhM,CAAAA,EAAO+3C,YAAY,CAAG,CAAA,CAAG,EAI7B/3C,EAAO0uB,aAAa,CAAC,CAAC,CAACltB,EAAE0tB,kBAAkB,CAC/C,EACJ,CAwBA,SAASP,KACL,IAAM3uB,EAAS,IAAI,CAACA,MAAM,CACtB+C,EAAI/C,EAAO+B,MAAM,CAAEiK,EAAkB,EAAGgsC,EAAa,CAAA,EAAOC,EAAYC,EAE5E,KAAOn1C,KACHm1C,CAAAA,EAAYl4C,CAAM,CAAC+C,EAAE,CAAC7B,OAAO,CAAC4K,YAAY,AAAD,IAIrCE,EAAkB5H,KAAKC,GAAG,CAAC2H,EAE3B8rC,GAAiCI,EAAUlsC,eAAe,CAAEgrC,GAAkCC,MAAM,CAACjrC,eAAe,GACpHisC,EAAa,AAACj4C,CAAAA,CAAM,CAAC+C,EAAE,CAACH,SAAS,CAACgjB,QAAQ,EACtC5lB,CAAM,CAAC+C,EAAE,CAACH,SAAS,AAAD,EAAGC,QAAQ,CAG7B7C,CAAAA,CAAM,CAAC+C,EAAE,CAACiJ,eAAe,EACxBisC,EACI,IAAI,CAAC73C,KAAK,CAAC+3C,SAAS,CAAGnsC,GAC3BisC,GAAcC,EAAUlpB,MAAM,GAC/BgpB,CAAAA,EAAa,CAAA,CAAG,GAI5B,OAAOA,EAAahsC,EAAkB,CAC1C,CAOA,SAASosC,KACL,IAAI,CAACp4C,MAAM,CAACC,OAAO,CAAC,SAAUD,CAAM,EAChCA,EAAO+3C,YAAY,CAAG,CAAA,CAC1B,EACJ,CAgBA,SAAS1gB,GAAgBvrB,CAAY,CAAEhM,CAAM,MAErCiD,EASJ,GARAjD,EAASg4C,GAAiCh4C,EAAQ,CAAA,GAC7CgM,GACDA,CAAAA,EAAe,CACXkjB,OAAQ,CAAA,EACR5iB,MAAO,IACX,CAAA,EAGA,IAAI,YAAY9P,EAEhB,IADAyG,EAAI,IAAI,CAAC/C,MAAM,CAAC+B,MAAM,CACfgB,KACH,IAAI,CAAC/C,MAAM,CAAC+C,EAAE,CAACZ,MAAM,CAAC,CAClB2J,aAAcA,CAClB,EAAG,CAAA,QAKP,IAAI,CAAC1L,KAAK,CAACc,OAAO,CAAClB,MAAM,CAACC,OAAO,CAAC,SAAUo4C,CAAa,EAErDA,EAAcvsC,YAAY,CAAG,AAAwB,WAAxB,OAAOA,EAChCA,EACA+rC,GAAkC/rC,EAAcusC,EAAcvsC,YAAY,CAClF,EAGA/C,CA5BS,IAAI,CA4BRyX,OAAO,EACZzX,CAAAA,AA7BS,IAAI,CA6BRyX,OAAO,CAACwL,KAAK,CAAG,KAAK,CAAA,EAE1BlsB,GACA,IAAI,CAACM,KAAK,CAACN,MAAM,EAEzB,CAS6B,IAAMw4C,GAHC,CAChCj1C,QAlHJ,SAA6CE,CAAS,EAClDjH,EAAkBiH,EAClB,IAAME,EAAYF,EAAUpF,SAAS,AAChCsF,CAAAA,EAAUirB,aAAa,GACxBipB,GAAqCp0C,EAAW,gBAAiB60C,IAGjET,GAAqCp0C,EAAW,kBAAmBmrB,IACnEkpB,GAAmCn0C,EAAW,CAC1CirB,cAAAA,GACAC,mBAAAA,GACA0I,gBAAAA,EACJ,GAER,CAqGA,EAeM,CAAEn4B,SAAUq5C,EAAqB,CAAEC,aAAAA,EAAY,CAAEC,sBAAAA,EAAqB,CAAEhxB,UAAWixB,EAAsB,CAAE,CAAIj6C,KAQrH,AAAC,SAAU3B,CAAY,EAwCnB,SAAS6qB,IACL,OAAO,IAAI,CAACvnB,KAAK,CAACohB,IAAI,CAACmG,YAAY,CAAC7mB,KAAK,CAAC,IAAI,CAACV,KAAK,CAACohB,IAAI,CAAEoH,UAC/D,CAIA,SAAS+vB,IACL,GAAI,AAAc,aAAd,IAAI,CAACjxC,IAAI,CAAiB,CAC1B,IAAI,CAACi9B,QAAQ,CAAG,KAAK,EACrB,MACJ,CACK,IAAI,CAACA,QAAQ,EACd,CAAA,IAAI,CAACA,QAAQ,CAAG,IAAIvjC,EAAU,IAAI,CAAA,CAE1C,CA9BAtE,EAAauG,OAAO,CATpB,SAAiBE,CAAS,EAOtB,OANKA,EAAUkG,SAAS,CAACC,QAAQ,CAAC,cAC9BnG,EAAUkG,SAAS,CAAClB,IAAI,CAAC,YAEzB9E,AADkBF,EAAUpF,SAAS,CAC3BwpB,YAAY,CAAGA,EACzB4wB,GAAsBh1C,EAAW,eAAgBo1C,IAE9Cp1C,CACX,CAqCA,OAAMnC,EAMFwC,YAAYmF,CAAI,CAAE,CACd,IAAI,CAACA,IAAI,CAAGA,CAChB,CAgBA6vC,0BAA0BztB,CAAY,CAAE0tB,CAAW,CAAE,CACjD,IAAMzsC,EAASysC,GAAe,CAAC,CAEvB,cAEA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAI,CAC3C,CAAE,CACC,SACA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CACxB,CAAE,CACC,SACA,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAG,CACxB,CAAE,CACC,OACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,CACzB,CAAE,CACC,MACA,CAAC,EAAG,EAAE,CACT,CAAE,CACC,OACA,CAAC,EAAG,EAAE,CACT,CAAE,CACC,QACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CAClB,CAAE,CACC,OACA,KACH,CAAC,CACFC,EAAO1sC,CAAK,CAACA,EAAMrK,MAAM,CAAG,EAAE,CAClCkQ,EAAWymC,EAAsB,CAACI,CAAI,CAAC,EAAE,CAAC,CAAEC,EAAYD,CAAI,CAAC,EAAE,CAAE/1C,EAGjE,IAAKA,EAAI,EAAGA,EAAIqJ,EAAMrK,MAAM,GAExBkQ,EAAWymC,EAAsB,CAACI,AADlCA,CAAAA,EAAO1sC,CAAK,CAACrJ,EAAE,AAAD,CACwB,CAAC,EAAE,CAAC,CAC1Cg2C,EAAYD,CAAI,CAAC,EAAE,CACf1sC,CAAAA,CAAK,CAACrJ,EAAI,EAAE,GAORooB,CAAAA,GAJa,AAAClZ,CAAAA,EACd8mC,CAAS,CAACA,EAAUh3C,MAAM,CAAG,EAAE,CAC/B22C,EAAsB,CAACtsC,CAAK,CAACrJ,EAAI,EAAE,CAAC,EAAE,CAAC,AAAD,EAAK,CAEpB,GAXLA,KAiB1BkP,IAAaymC,GAAuB1iB,IAAI,EAAI7K,EAAe,EAAIlZ,GAC/D8mC,CAAAA,EAAY,CAAC,EAAG,EAAG,EAAE,AAAD,EAGxB,IAAMzqB,EAAQmqB,GAAsBttB,EAAelZ,EAAU8mC,EAAWD,AAAY,SAAZA,CAAI,CAAC,EAAE,CAC3E10C,KAAKC,GAAG,CAACm0C,GAAartB,EAAelZ,GAAW,GAChD,GACJ,MAAO,CACH8W,UAAW9W,EACXqc,MAAOA,EACPC,SAAUuqB,CAAI,CAAC,EAAE,AACrB,CACJ,CAOAE,eAAer0C,CAAC,CAAEuyC,CAAoB,CAAE,CACpC,GAAM,CAAEnuC,KAAAA,CAAI,CAAE,CAAG,IAAI,CAAEyY,EAAOzY,EAAK3I,KAAK,CAACohB,IAAI,CAC7C,OAAOzY,EAAK6iB,iBAAiB,CACzBpK,EAAKy3B,aAAa,CAAClwC,EAAK6iB,iBAAiB,CAAEjnB,EAAGoE,EAAK7H,OAAO,CAAC2mB,WAAW,CAAEqvB,IAEpE11B,EAAK03B,gBAAgB,CAAChC,EAAqBlhB,IAAI,EAAEmjB,IAAI,CACzD33B,EAAK03B,gBAAgB,CAAChC,EAAqBphB,GAAG,EAAEqjB,IAAI,AAC5D,CACJ,CACAr8C,EAAasE,SAAS,CAAGA,CAC7B,EAAGtE,GAAiBA,CAAAA,EAAe,CAAC,CAAA,GAMP,IAAMs8C,GAAqBt8C,EAmBlD,CAAEkD,OAAQ,CAAE7B,UAAWk7C,EAAyC,CAAE,CAAE,CAAI3uC,KAExE,CAAExL,SAAUo6C,EAAsC,CAAEh6C,QAASi6C,EAAqC,CAAEjyB,MAAOkyB,EAAmC,CAAE/pC,OAAQgqC,EAAoC,CAAEj6C,SAAUk6C,EAAsC,CAAE30C,MAAO40C,EAAmC,CAAEj6C,KAAMk6C,EAAkC,CAAE3/B,MAAO4/B,EAAmC,CAAE,CAAIp7C,IAMtXq7C,GAAqBT,GAA0CU,cAAc,CAqGnF,SAASC,GAA4C9qB,CAAkB,MA5FxC+qB,MAkHvBl3C,EAAGm3C,EArBP,IAAqB95C,EAAQJ,AAAd,IAAI,CAAiBI,KAAK,CAA4BonC,EAAsBtmC,AAAtClB,AAAtC,IAAI,CAAyCkB,OAAO,CAAgC4K,YAAY,CAAEquC,EAAkBn6C,AAAmB,CAAA,IAAnBA,AAApH,IAAI,CAAuHynC,OAAO,EAAcD,GAC3JoS,GAAmCpS,EAAoB3gC,OAAO,CAAEzG,EAAMc,OAAO,CAACgiC,OAAO,EAAG1V,EAAextB,AAD5F,IAAI,CAC+FwtB,YAAY,GAAI4sB,EAAmB,IAAI,CAAC/rB,mBAAmB,CACzKA,EAAqBgsB,EAAaC,EAAuB,CAAA,EAEzDH,GAAmB,CAACn6C,AAJT,IAAI,CAIYu6C,cAAc,EACzCv6C,CAAAA,AALW,IAAI,CAKRu6C,cAAc,CAAGD,EAAuB,CAAA,CAAG,EAItD,IAAMvT,EAAOyT,AAAiD,CAAA,IAwVrDx6C,CAAAA,AAjWM,IAAI,CAiWHy6C,WAAW,EACvB,CAACz6C,AAlWU,IAAI,CAkWPua,OAAO,EACf,CAACva,AAnWU,IAAI,CAmWP0C,KAAK,CAAC6X,OAAO,EACrB,CAACva,AApWU,IAAI,CAoWPuF,KAAK,CAACgV,OAAO,EACrB,CA5VkC2U,CA4V7B,GA5V8D,CAACirB,EAKxE,GAHIG,GACAt6C,CAAAA,AAZW,IAAI,CAYRu6C,cAAc,CAAG,CAAA,CAAI,EAE5BxT,EACA,OAEJ/mC,AAjBe,IAAI,CAiBZ6uB,kBAAkB,GACzB,IAAM6rB,EAAQlT,EAAoBmT,QAAQ,CACtC36C,AAnBW,IAAI,CAmBR4C,SAAS,CAChB5C,AApBW,IAAI,CAoBR4C,SAAS,CAACgjB,QAAQ,EAAI5lB,AApBlB,IAAI,CAoBqB4C,SAAS,CAAED,EAAiB3C,AApBrD,IAAI,CAoBwDuC,SAAS,CAAC,IAAK,CAACilC,EAAoBmT,QAAQ,EAA2BxC,EAAY/3C,EAAM+3C,SAAS,CAAEz1C,EAAQ1C,AApBxK,IAAI,CAoB2K0C,KAAK,CAAEf,EAAWe,EAAMmF,WAAW,GAAI2Y,EAAU9d,EAAMxB,OAAO,CAACsf,OAAO,CAAExU,EAAkBhM,AApBzQ,IAAI,CAoB4QgM,eAAe,CAI9S,GAAIA,GAJ8HrJ,GAM9H+3C,EAAM73C,QAAQ,EACds1C,GACAuB,GAAuC/3C,EAASsB,GAAG,EAAG,CACtDi3C,EAAiB,CAAA,EAEjBl6C,AA/BW,IAAI,CA+BRua,OAAO,CAAG,CAAA,EACjBva,AAhCW,IAAI,CAgCRoC,MAAM,CAAG,KAChB,IAAMgtB,EAAOztB,EAASsB,GAAG,CAAEosB,EAAO1tB,EAAS0C,GAAG,CAAEypB,EAAsB,AAACtN,GACnE9d,EAAM8d,OAAO,EACb9d,EAAM8d,OAAO,CAACoO,sBAAsB,CAACQ,EAAMC,EAnCpC,IAAI,GAmCkD,EAAGpd,EAAW,AAACjG,EAAmBqjB,CAAAA,EAAOD,CAAG,EAAK+oB,EAC9GrqB,EAAqBpF,EAAiBhmB,EAAMilB,YAAY,CAACyxB,GAAkBh4C,SAAS,CAACjD,SAAS,CAACy6C,yBAAyB,CAAC3mC,EAAUu1B,EAAoBp7B,KAAK,EAC5J4qC,GAAkC5qC,KAAK,EAE3ChI,KAAKnB,GAAG,CAACmsB,EAAM5K,AAnB+G7hB,CAmB1G,CAAC,EAAE,EAAGyB,KAAKC,GAAG,CAACgrB,EAAM7K,AAnBqF7hB,CAmBhF,CAAC6hB,AAnB+E7hB,EAmBzEZ,MAAM,CAAG,EAAE,EAAGW,EAAMxB,OAAO,CAAC2mB,WAAW,CAAEllB,EAAgB3C,AAvCnG,IAAI,CAuCsG4rB,iBAAiB,EAAGgvB,EAAcvB,GAA0CwB,SAAS,CAAC/5C,KAAK,CAvCrM,IAAI,CAuC0M,CACrN45C,EACAhyB,EACA8e,EAAoBz7B,aAAa,CACpC,EACG6Z,EAAWg1B,EAAYh1B,QAAQ,CAAEq0B,EAAer0B,EAASrjB,SAAS,CAAC,IAAK,CAAA,GAAOwxC,EAAU,EAa7F,IAVIvM,GAAqBsT,UACrBl1B,EAAS/iB,QAAQ,GACjB2kC,EAAoBv7B,WAAW,CAAG,aAClCu7B,EAAoBt7B,MAAM,CAAG,SAC7Bs7B,EAAoBr7B,UAAU,CAAG,YACjCqtC,GAAoC,GAAI,CAAA,EAAOp5C,EAAO,CAClD,wBAAyB,yBAC7B,IAGC2C,EAAI,EAAGA,EAAI2lB,EAAe3mB,MAAM,CAAEgB,IAK9B2lB,EAAeH,IAAI,CAACJ,aAAa,EAClCO,AAAiD,KAAjDA,EAAeH,IAAI,CAACJ,aAAa,CAACzF,OAAO,CAAC3f,IAC1CgxC,CAAAA,EAAU3vC,KAAKC,GAAG,CAACqkB,CAAc,CAAC3lB,EAAE,CAAG2lB,CAAc,CAAC3lB,EAAI,EAAE,CAAEgxC,EAAO,CAI7E1lB,CADAA,CAAAA,EAAsB3F,EAAeH,IAAI,AAAD,EACpBwrB,OAAO,CAAGA,EAC9B/zC,AArEW,IAAI,CAqER4rB,iBAAiB,CAAGlD,EAAeH,IAAI,CAACsmB,UAAU,CACzD7uC,AAtEW,IAAI,CAsER+6C,QAAQ,CAAGH,EAAYG,QAAQ,CACtC/6C,AAvEW,IAAI,CAuERquB,mBAAmB,CAAGA,GAC7B2sB,AAtIR,SAAsBh7C,CAAM,CAAEi6C,CAAY,CAAE5qB,CAAI,EAC5C,IAAgCmY,EAAsBtmC,AAAtClB,EAAOkB,OAAO,CAAgC4K,YAAY,CAAE+iC,EAAc7uC,EAAOquB,mBAAmB,EAAIruB,EAAOquB,mBAAmB,CAAC0lB,OAAO,CAAGvvB,EAAQxkB,EAAOuC,SAAS,CAAC,KACtL,GAAI,CAAEilC,CAAAA,GACFhjB,EAAMziB,MAAM,EACZ8sC,GACA7uC,EAAO+6C,QAAQ,AAAD,EACd,OAEJ,IAAME,EAAuBhB,EAAal4C,MAAM,CAAG,EAAGmK,EAASs7B,EAAoBt7B,MAAM,CAAED,EAAcu7B,EAAoBv7B,WAAW,CAAEE,EAAaq7B,EAAoBr7B,UAAU,CACjL+uC,EAAsBjB,EAAal4C,MAAM,CAAG,EAAGo5C,EAAmB,EAGtE,GAAIlvC,GAAeuY,CAAK,CAAC,EAAE,EAAIy1B,CAAY,CAAC,EAAE,CAAE,KAGxCmB,CAFJD,CAAAA,IACA,IAAME,EAAar7C,EAAO+6C,QAAQ,CAAC,EAAE,CAACtyB,KAAK,CAAE6yB,EAAct7C,EAAO+6C,QAAQ,CAAC,EAAE,CAACh5C,MAAM,CAEhF23C,GAAuC2B,IAAe3B,GAAuC4B,IAC7FF,CAAAA,EAAgBC,EAAcC,CAAAA,EAAc,CAAA,CAAC,EAEjDrB,CAAY,CAAC,EAAE,CAAG,CAAA,CACdxxB,MAAOwxB,CAAY,CAAC,EAAE,CACtBhsB,OAAQgsB,CAAY,CAAC,EAAE,CAAG,GAAMpL,EAChCzmB,IAAK6xB,CAAY,CAAC,EAAE,CAAGpL,EACvB0M,WAAY/2B,CAAK,CAAC,EAAE,CACpB6pB,UAAW+M,GAAiB52B,CAAK,CAAC42B,EAAc,AACpD,CAAA,CAAC,CAACnvC,EAAY,AAClB,CAIA,GAAIgvC,EAAuB,GACvB9uC,GACA0iC,GACAoL,CAAY,CAACgB,EAAqB,EAAI5rB,EAAOwf,EAAY,CACzDqM,IACA,IAAMM,EAAiBx7C,EAAO+6C,QAAQ,CAAC/6C,EAAO+6C,QAAQ,CAACh5C,MAAM,CAAG,EAAE,CAAC0mB,KAAK,AACxEwxB,CAAAA,CAAY,CAACgB,EAAqB,CAAG,CAAA,CACjCxyB,MAAOwxB,CAAY,CAACgB,EAAqB,CACzChtB,OAAQgsB,CAAY,CAACgB,EAAqB,CAAG,GAAMpM,EACnDzmB,IAAK6xB,CAAY,CAACgB,EAAqB,CAAGpM,EAC1C0M,WAAYC,GAAkBh3B,CAAK,CAACg3B,EAAe,CACnDnN,UAAW7pB,CAAK,CAACA,EAAMziB,MAAM,CAAG,EAAE,AACtC,CAAA,CAAC,CAACoK,EAAW,AACjB,CACA,GAAID,GAAUA,AAAW,UAAXA,EAAoB,CAC9B,IAAMuvC,EAAiB5M,EACnB,CAAA,CAAE5gB,OAAQ,GAAK7F,IAAK,CAAE,CAAA,CAAC,CAAClc,EAAO,CAGnC,KAAOgvC,GAAuBC,GAC1BlB,CAAY,CAACiB,EAAoB,EAAIO,EACrCP,GAER,CACJ,EAQmB,IAAI,CAwEMjB,GAAgB,EAAE,CAAE5qB,GACrC7B,GAAgBysB,IAnKpBV,GAAsCU,CAHfA,EAuKGA,EApKwB,CAAC,EAAE,GACrDP,GAAuCh3C,AAmKpBA,EAnK0BO,GAAG,GAChDy2C,GAAuCh3C,AAkKpBA,EAlK0Bb,OAAO,GACpDo4C,CAAY,CAAC,EAAE,CAAGv3C,AAiKCA,EAjKKO,GAAG,GACvB,CAAA,AAAC,CAACs2C,GAAsC72C,AAgKzBA,EAhK+BxB,OAAO,CAAC+B,GAAG,GACzDP,AA+JeA,EA/JTO,GAAG,EAAIP,AA+JEA,EA/JIb,OAAO,EAC1Ba,AA8JeA,EA9JTO,GAAG,GAAKP,AA8JCA,EA9JKb,OAAO,AAAD,GAC1Ba,CAAAA,AA6JeA,EA7JTO,GAAG,CAAGmB,KAAKnB,GAAG,CAACg3C,CAAY,CAAC,EAAE,CAAEv3C,AA6JvBA,EA7J6BO,GAAG,CAAA,EAEnDP,AA2JmBA,EA3Jbb,OAAO,CAAGuC,KAAKnB,GAAG,CAACg3C,CAAY,CAAC,EAAE,CAAEv3C,AA2JvBA,EA3J6Bb,OAAO,GAIvD03C,GAAsCU,CAAY,CAACA,EAAal4C,MAAM,CAAG,EAAE,GAC3E23C,GAAuCh3C,AAsJpBA,EAtJ0B2B,GAAG,GAChDq1C,GAAuCh3C,AAqJpBA,EArJ0BZ,OAAO,GACpDm4C,CAAY,CAACA,EAAal4C,MAAM,CAAG,EAAE,CAAGW,AAoJrBA,EApJ2B2B,GAAG,GAC7C,CAAA,AAAC,CAACk1C,GAAsC72C,AAmJzBA,EAnJ+BxB,OAAO,CAACmD,GAAG,GACzDq1C,GAAuCh3C,AAkJxBA,EAlJ8BZ,OAAO,GACpDY,AAiJeA,EAjJT2B,GAAG,EAAI3B,AAiJEA,EAjJIZ,OAAO,EAAKY,AAiJhBA,EAjJsB2B,GAAG,GAAK3B,AAiJ9BA,EAjJoCZ,OAAO,AAAD,GACzDY,CAAAA,AAgJeA,EAhJT2B,GAAG,CAAGD,KAAKC,GAAG,CAAC41C,CAAY,CAACA,EAAal4C,MAAM,CAAG,EAAE,CAAEW,AAgJ7CA,EAhJmD2B,GAAG,CAAA,EAEzE3B,AA8ImBA,EA9IbZ,OAAO,CAAGsC,KAAKC,GAAG,CAAC41C,CAAY,CAACA,EAAal4C,MAAM,CAAG,EAAE,CAAEW,AA8I7CA,EA9ImDZ,OAAO,IAkJzE0lC,EAAoBmT,QAAQ,GAG5B36C,AAjFO,IAAI,CAiFJ07C,eAAe,CAAG91B,EAGzBq0B,EAAer0B,AADfA,CAAAA,EAAWy0B,AADXA,CAAAA,EAAcr6C,AAlFP,IAAI,CAkFU27C,QAAQ,CAAC/1B,EAAUljB,EAAMO,GAAG,EAAI,EAAGP,EAAM2B,GAAG,EAAI,EAAC,EAC/CuhB,QAAQ,AAAD,EACNrjB,SAAS,CAAC,KAClCvC,AArFO,IAAI,CAqFJ47C,SAAS,CAAGvB,EAAY5xB,KAAK,EAGxCzoB,AAxFW,IAAI,CAwFR4C,SAAS,CAACgjB,QAAQ,CAAGA,CAChC,MAEI5lB,AA3FW,IAAI,CA2FR+6C,QAAQ,CAAG,KAAK,EACvB/6C,AA5FW,IAAI,CA4FRquB,mBAAmB,CAAG,KAAK,CAEtCruB,CA9Fe,IAAI,CA8FZk6C,cAAc,CAAGA,EACxBl6C,AA/Fe,IAAI,CA+FZ67C,qBAAqB,CACxB,AAACzB,CAAAA,GAAoBA,EAAiBvL,UAAU,AAAD,IAC1CxgB,CAAAA,GAAuBA,EAAoBwgB,UAAU,AAAD,CACjE,CA+BA,SAAShgB,KAED,IAAI,CAAC+rB,WAAW,GAChB,IAAI,CAACA,WAAW,CAAC36C,OAAO,CAAC,SAAUK,CAAK,CAAEyC,CAAC,EACnCzC,GACA,CAAA,IAAI,CAACs6C,WAAW,CAAC73C,EAAE,CAAGzC,EAAMqJ,OAAO,CAC/BrJ,EAAMqJ,OAAO,GAAK,IAAG,CAEjC,EAAG,IAAI,EAKP,IAAI,CAACixC,WAAW,CAAC74C,MAAM,CAAG,EAC1B,OAAO,IAAI,CAAC25C,eAAe,CAEnC,CAKA,SAAS3B,KACLD,GAAmBh5C,KAAK,CAAC,IAAI,EAG7B,IAAI,CAAC+tB,kBAAkB,GACvB,IAAI,CAAC+rB,WAAW,CAAG,IAAI,CAACV,cAAc,CAAG,IAAI,CAAC93C,MAAM,CAAG,IAC3D,CAMA,SAAS05C,YACL,AAAI,IAAI,CAAC1U,EAAE,CAAC,aACD,QAEP,IAAI,CAACA,EAAE,CAAC,QACD,OAEP,IAAI,CAACA,EAAE,CAAC,OACD,MAKX,IAAI,CAACA,EAAE,CAAC,WACJ,IAAI,CAAClmC,OAAO,CAACC,UAAU,CAChB,MAEJ,SACX,CAkBA,SAAS05C,GAAUH,CAAK,CAAEhyB,CAAc,CAAE3c,CAAa,EACnD,IAAMyY,EAAQk2B,EAAMn4C,SAAS,CAAC,IAAK,CAAA,IAAS,EAAE,CAAEw5C,EAAQrB,EAAMn4C,SAAS,CAAC,IAAK,CAAA,GAAOvC,EAAS,IAAI,CAAE6gB,EAAO7gB,EAAO6gB,IAAI,CAAEm7B,EAAch8C,EAAOkB,OAAO,EAAIlB,EAAOkB,OAAO,CAAC2f,IAAI,CAAEo5B,EAAe,EAAE,CAAEr0B,EAAW,IAAIH,GAAsBs1B,EAAW,EAAE,CAAE9C,EAAayC,EAAM73C,QAAQ,CAG9Qo5C,EAAc,CAAC,CAACF,EAAOG,EAAS,EAAE,CAAE15C,EAAgBxC,EAAOwC,aAAa,CAAE25C,EAAsB35C,GAAiBA,EAAcT,MAAM,CAAEq6C,EAAwB,CAAC,IAAI,CAAC59B,MAAM,CAAChc,GAAiB,CAAC,IAAI,EAElM65C,EAAe,AAAC75C,CAAAA,GAAiB,CAAC,IAAI,AAAD,EAAG8jB,GAAG,CAAC,IAAM,EAAE,EAAGq0B,EAAY,IAAI,CAACz5C,OAAO,CAAC4K,YAAY,EACxF,IAAI,CAAC5K,OAAO,CAAC4K,YAAY,CAAC6uC,QAAQ,CAClC2B,EAAQC,EAAQC,EAAU1V,EAAM,EAAGre,EAAQ,EACzCg0B,EAAmB,AAAyB,YAAzB,OAAO1wC,EAC5BA,EACAA,GAAiBsqC,EAAkC,CAACtqC,EAAc,CAC9DsqC,EAAkC,CAACtqC,EAAc,CACjDsqC,EAAkC,CAAEr2C,EAAO87C,kBAAkB,EAAI97C,EAAO87C,kBAAkB,IACtF,UAAW,CAEvB,GAAIK,EAAqB,CACrB,IAAI9nC,EAAM7R,EAAcT,MAAM,CAC9B,KAAOsS,KACH6nC,EAAO3zC,IAAI,CAAC,EAAE,CAEtB,MAEI2zC,EAAO3zC,IAAI,CAAC,EAAE,EAElB,IAAMm0C,EAAYP,GAAuB,EACzC,IAAK,IAAIp5C,EAAI,EAAGA,GAAKk1C,EAAYl1C,IAE7B,IAAIyhB,CAAAA,CAAK,CAACzhB,EAAE,CAAG2lB,CAAc,CAAC,EAAE,AAAD,GAK/B,KAAO,AAAoC,KAAA,IAA5BA,CAAc,CAACoe,EAAM,EAAE,EAClCtiB,CAAK,CAACzhB,EAAE,EAAI2lB,CAAc,CAACoe,EAAM,EAAE,EACnC/jC,IAAMk1C,GAAY,CAyBlB,GAvBAqE,EAAS5zB,CAAc,CAACoe,EAAI,CAC5B9mC,EAAO28C,aAAa,CAAG,CACnBl0B,MAAOkyB,EAAWlyB,EAASzoB,EAAO47C,SAAS,CAAGnzB,EAC9C1mB,OAAQm6C,CAAM,CAAC,EAAE,CAACn6C,MAAM,CACxBs5C,WAAYiB,CAChB,EACAE,EAAWC,EAAgB37C,KAAK,CAACd,EAAQk8C,GAMrCl8C,EAAOgoC,UAAU,EAAI,CAACuR,GAAsCv5C,EAAO28C,aAAa,CAACz7C,OAAO,IAExFlB,EAAO28C,aAAa,CAACz7C,OAAO,CAAGy4C,GAAoC35C,EAAOgoC,UAAU,CAAC7pC,SAAS,CACzFy+C,eAAe,CAACv+C,IAAI,CAAC,CAAE2B,OAAQA,CAAO,EAAGA,EAAOkB,OAAO,CAAC2f,IAAI,CAAC7gB,EAAO47C,SAAS,CAAGnzB,EAAM,GAG3F2zB,EAAsBn8C,OAAO,CAAC,SAAUtC,CAAG,EACvC,OAAOqC,EAAO28C,aAAa,CAACz7C,OAAO,CAACvD,EAAI,AAC5C,IAGA,AAAoB,KAAA,IAAb6+C,EAA0B,CACjCvC,EAAa1xC,IAAI,CAAC+zC,GAElB,IAAMO,EAAmBhD,GAAoC2C,GAC7D,IAAK,IAAIM,EAAI,EAAGA,EAAID,EAAiB96C,MAAM,CAAE+6C,IACzCT,CAAY,CAACS,EAAE,CAACv0C,IAAI,CAACs0C,CAAgB,CAACC,EAAE,EAE5C/B,EAASxyC,IAAI,CAACvI,EAAO28C,aAAa,CACtC,CAEAl0B,EAAQ1lB,EACR,IAAK,IAAI+5C,EAAI,EAAGA,EAAIJ,EAAWI,IAC3BZ,CAAM,CAACY,EAAE,CAAC/6C,MAAM,CAAG,EACnBm6C,CAAM,CAACY,EAAE,CAACjG,QAAQ,CAAG,CAAA,EAKzB,GAFA/P,GAAO,EAEH/jC,IAAMk1C,EACN,KAER,CAEA,GAAIl1C,IAAMk1C,EACN,MAIJ,GAAIz1C,EAAe,KAKXsnB,EAJJ,IAAMxlB,EAAQq2C,EAAW53C,EAAI/C,EAAO47C,SAAS,CAAG74C,EAAGzC,EAAQ,AAACugB,GAAQA,CAAI,CAACvc,EAAM,EAC3EtE,EAAOgoC,UAAU,CAAC7pC,SAAS,CAACwsC,YAAY,CAAC7pC,KAAK,CAAC,CAC3Cd,OAAQA,CACZ,EAAG,CAACg8C,CAAW,CAAC13C,EAAM,CAAC,EAE3B,IAAK,IAAIw4C,EAAI,EAAGA,EAAIX,EAAqBW,IAEjCpD,GADJ5vB,EAAMxpB,CAAK,CAACkC,CAAa,CAACs6C,EAAE,CAAC,EAEzBZ,CAAM,CAACY,EAAE,CAACv0C,IAAI,CAACuhB,GAEF,OAARA,GACLoyB,CAAAA,CAAM,CAACY,EAAE,CAACjG,QAAQ,CAAG,CAAA,CAAG,CAGpC,MAGQ6C,GADJ6C,EAASN,EAAcF,CAAK,CAACh5C,EAAE,CAAG,MAE9Bm5C,CAAM,CAAC,EAAE,CAAC3zC,IAAI,CAACg0C,GAEC,OAAXA,GACLL,CAAAA,CAAM,CAAC,EAAE,CAACrF,QAAQ,CAAG,CAAA,CAAG,EAIpC,IAAMlxB,EAAU,CACZhhB,EAAGs1C,CACP,EAKA,MAJA,AAACz3C,CAAAA,GAAiB,CAAC,IAAI,AAAD,EAAGvC,OAAO,CAAC,CAACtC,EAAKoF,KACnC4iB,CAAO,CAAChoB,EAAI,CAAG0+C,CAAY,CAACt5C,EAAE,AAClC,GACA6iB,EAASa,UAAU,CAACd,GACb,CACHo1B,SAAAA,EACAn1B,SAAAA,CACJ,CACJ,CAMA,SAASm3B,GAAkBv7C,CAAC,EACxB,IAAMN,EAAUM,EAAEN,OAAO,CAAEwG,EAAO,IAAI,CAACA,IAAI,CAAEwb,EAAc,IAAI,CAAC9iB,KAAK,CAACc,OAAO,CAACgiB,WAAW,CAGzFP,EAAe,IAAI,CAACq6B,qBAAqB,EACrChG,GAAkCC,MAAM,CAAGE,EAAiBH,GAAkCG,cAAc,CAC5G5jC,EAAiB,AAAC9U,IAA+E8U,cAAc,CAAC2P,WAAW,CAACxb,EAAK,CAACoE,YAAY,CAClJ,GAAIoX,GAAgBi0B,CAAAA,CAAc,CAACzvC,EAAK,EAAIib,CAAU,EAAI,CACtD,IAAMnc,EAAgB,IAAI,CAACpG,KAAK,CAACoG,aAAa,CACzC+M,GACDA,CAAAA,EAAiBomC,GAAoC3C,GAAkCC,MAAM,CAAEE,CAAc,CAACzvC,EAAK,CAAA,EAEvHxG,EAAQ4K,YAAY,CAAG6tC,GAAoCh3B,EAAapP,EAAgB2P,EAAYljB,MAAM,EAAIkjB,EAAYljB,MAAM,CAAC8L,YAAY,CAE7IoX,CAAW,CAACxb,EAAK,CAACoE,YAAY,CAAE,IAAI,CAAC5J,WAAW,CAAC4J,YAAY,CAAE,CAAC5K,EAAQyO,UAAU,EAC9EnJ,GACAkzC,GAAuClzC,EAAc6qB,QAAQ,GAC7D7qB,EAAc6vB,aAAa,CAAC7vB,EAAc6qB,QAAQ,CAAC,CAACvlB,YAAY,CACxE,CACJ,CAoB6B,IAAMmxC,GAJG,CAClC55C,QAvQJ,SAA+CC,CAAW,EACtD,IAAMK,EAAcL,EAAYnF,SAAS,AACpCwF,CAAAA,EAAY+qB,aAAa,GAI1B4qB,GAHmBh2C,EAAYnF,SAAS,CAAC6pC,UAAU,CAGA,SAAU,WACzD,GAAI,IAAI,CAACkV,SAAS,CAEd,OADA1D,GAAoC,GAAI,CAAA,EAAO,IAAI,CAACx5C,MAAM,CAACI,KAAK,EACzD,CAAA,CAEf,GACAk5C,GAAuCh2C,EAAa,kBAAmBy5C,IACvEzD,GAAuCh2C,EAAa,UAAWurB,IAC/D4qB,GAAqC91C,EAAa,CAC9C+qB,cAAesrB,GACfnrB,mBAAAA,GACAkrB,eAAAA,GACA+B,mBAAAA,GACAjB,UAAAA,EACJ,GAER,EAkPIA,UAAAA,EACJ,EAkBM,CAAEvlB,OAAQ6nB,EAAmB,CAAE,CAAI7b,KAEnC,CAAEjyB,SAAU+tC,EAAqB,CAAE,CAAI3+C,IAEvC,CAAES,SAAUm+C,EAAqB,CAAE5tC,OAAQ6tC,EAAmB,CAAE99C,SAAU+9C,EAAqB,CAAE79C,KAAM89C,EAAiB,CAAEp1C,WAAYq1C,EAAuB,CAAE,CAAIh/C,IAsBzK,SAASi/C,GAAyBl8C,CAAC,EAC/B,IAAMpB,EAAQ,IAAI,CAACA,KAAK,CAAEohB,EAAOphB,EAAMohB,IAAI,CAAElhB,EAAQkB,EAAElB,KAAK,CAAEN,EAASM,EAAMN,MAAM,CAAEkB,EAAUlB,EAAOkB,OAAO,CAAER,EAAiBV,EAAOU,cAAc,CAAE8mC,EAAsBtmC,EAAQ4K,YAAY,CAAEpJ,EAAQ1C,EAAO0C,KAAK,CACnNi7C,EAAcj9C,EAAei9C,WAAW,EAAI,GAAIC,EAAgBvvB,EAAqB6oB,EAAsB2G,EAAcC,EAAcC,EAAer9C,CAAc,CAACc,EAAEw8C,QAAQ,CAAG,eAAiB,eAAe,CAEtN,GAAIt7C,GACAA,AAAuB,aAAvBA,EAAMxB,OAAO,CAACwG,IAAI,EAClB8/B,GACA+V,GAAsBj9C,EAAM3C,GAAG,EAAG,CAElC0wB,EAAsBruB,EAAOquB,mBAAmB,CAChD6oB,EAAuB1P,EAAoB0P,oBAAoB,EAE3DF,GAAkCC,MAAM,CAACC,oBAAoB,CAG7D7oB,GACAwvB,EAAe3G,CAAoB,CAAC7oB,EAAoBE,QAAQ,CAAC,CAC7DF,AAA8B,IAA9BA,EAAoBC,KAAK,CACzBqvB,EAAcE,CAAY,CAAC,EAAE,EAG7BF,EAAcE,CAAY,CAAC,EAAE,CAC7BD,EAAiBC,CAAY,CAAC,EAAE,GAM/B,CAACF,GAAezG,GAAwBx0C,EAAMiiC,QAAQ,EAC3DgZ,CAAAA,EAAcj7C,EAAMiiC,QAAQ,CAACqU,cAAc,CAAC14C,EAAMqE,CAAC,CAAEjE,EAAew2C,oBAAoB,CAAA,EAE5F,IAAMmE,EAAamC,GAAkBx9C,EAAO+6C,QAAQ,EAAE,CAACz6C,EAAMgE,KAAK,CAAC,CAAC+2C,WAAY/6C,EAAM3C,GAAG,EAAGsgD,EAAW5C,EAAchtB,CAAAA,GAAqBwgB,YAAc,CAAA,EAAK,EAC7JiP,EAAet8B,EAAKyH,UAAU,CAAC00B,EAAatC,GACxCuC,GACAE,CAAAA,GAAgBt8B,EAAKyH,UAAU,CAAC20B,EAAgBK,EAAQ,EAGxDj+C,EAAOI,KAAK,CAACyW,UAAU,EACvBknC,CAAAA,EAAe,IAAI,CAACG,gBAAgB,CAACH,EAAY,EAGrDv8C,EAAEqM,IAAI,CAAGsvC,GAAoBY,EAAc,CACvCz9C,MAAOg9C,GAAoBh9C,EAAO,CAAE3C,IAAKmgD,CAAa,GACtD99C,OAAQA,CACZ,EAAGI,GACHoB,EAAEgI,cAAc,EACpB,CACJ,CAMA,IAAM20C,GAA0B,CAC5B96C,QAnEJ,SAA8BE,CAAS,CAAED,CAAW,CAAE86C,CAAY,EAC9D9F,GAAyCj1C,OAAO,CAACE,GACjD05C,GAA2C55C,OAAO,CAACC,GAC/C86C,GACAX,GAAwBL,GAAuB,iBAC/CC,GAAsBe,EAAc,kBAAmBV,GAE/D,EA6DI7C,UAAWoC,GAA2CpC,SAAS,AACnE,EAiYMwD,GAAsB5/C,GAC5B4/C,CAAAA,GAAmBvyC,YAAY,CAAGuyC,GAAmBvyC,YAAY,EAAI,CAAC,EACtEuyC,GAAmBvyC,YAAY,CAACwyC,qBAAqB,CAAID,GAAmBvyC,YAAY,CAACwyC,qBAAqB,EAj9CrCxH,GAm9CzEuH,GAAmBvyC,YAAY,CAACyyC,cAAc,CAAIF,GAAmBvyC,YAAY,CAACyyC,cAAc,EAC5FlI,GACJmI,AAtYmDL,GAsYtC96C,OAAO,CAACg7C,GAAmBjI,IAAI,CAAEiI,GAAmBvO,MAAM,CAAEuO,GAAmBI,OAAO,EAenG,GAAM,CAAEn/C,QAASo/C,EAAmC,CAAEl/C,SAAUm/C,EAAoC,CAAEj/C,KAAMk/C,EAAgC,CAAE,CAAIngD,IAW5IogD,GAAyB,CAC3BxzC,gBAAiB,SACjBC,YAAa,SACbJ,aAAc,SACdN,MAAO,SACPoM,KAAM,SACN7J,SAAU,SACVH,OAAQ,SACR4R,KAAM,SACN7H,OAAQ,SACRnJ,MAAO,QACX,EA8EM,CAAE1O,SAAU4/C,EAAuB,CAAEC,SAAAA,EAAQ,CAAEr/C,KAAMs/C,EAAmB,CAAE1/C,QAAS2/C,EAAsB,CAAEl6C,MAAOm6C,EAAoB,CAAE,CAAIzgD,IAE5I,CAAE0gD,gBAAiBC,EAA8B,CAAE,CArBtB,CAC/BP,uBAAAA,GACAM,gBA3CJ,SAAyBE,CAAM,EAC3B,OAAOA,EAAOhlC,MAAM,CAAC,AAACilC,IAClB,IAAM39C,EAAW29C,EAAMv2C,IAAI,CAAClB,WAAW,GAAIuI,EAAUzO,EAASsB,GAAG,CAAEoN,EAAU1O,EAAS0C,GAAG,CAGzF4xC,EAAiB2I,GAAiCU,EAAMv2C,IAAI,CAACktC,cAAc,CAAE,GAC7E,OAAO0I,GAAqCvuC,IAAYuuC,GAAqCtuC,IACzFivC,EAAM7+C,KAAK,EAAK2P,EAAU6lC,GAC1BqJ,EAAM7+C,KAAK,EAAK4P,EAAU4lC,GAE1B,CAACqJ,EAAMv2C,IAAI,CAAC7H,OAAO,CAACyO,UAAU,AACtC,EAAE,CAAC,EAAE,AACT,EAgCI4vC,aApBJ,SAAsB5hD,CAAG,CAAE8C,CAAK,EAC5B,IAAM++C,EAAiBX,EAAsB,CAAClhD,EAAI,CAC9C8hD,EAAY,OAAOh/C,EAIvB,OAHIi+C,GAAoCc,IACpCC,CAAAA,EAAYD,CAAa,EAEtB,CAAA,CACH,OAAU,OACV,OAAU,SACV,QAAW,UACf,CAAA,CAAC,CAACC,EAAU,AAChB,CAUA,EAuBMC,GAAkB,EAAE,CAAEC,GAAgC,CACxD94C,QAAS,CAAA,EACT+4C,YAAa,GACjB,EAUMhD,GAAkB,AAAC17C,IAChB69C,GAAS79C,IACVA,CAAAA,EAAU,CACN2F,QAAS3F,GAAW,CAAA,CACxB,CAAA,EAEGg+C,GAAqBS,GAA+Bz+C,IAKzD2+C,GAAS,SAAUz/C,CAAK,CAAE0/C,CAAO,CAAEp9C,CAAK,CAAE6C,CAAK,CAAEw6C,CAAM,CAAEC,CAAM,CAAE9+C,CAAO,EAC1E,IAAMwG,EAAOs3C,GAAoB99C,EAAQwG,IAAI,CAAEtH,EAAMqH,OAAO,CAACC,IAAI,CAAE,IAC/Dyd,EAAO,EAAE,AACTzd,AAAS,CAAA,MAATA,EACAyd,EAAOziB,EAEFgF,AAAS,MAATA,EACLyd,EAAO5f,EAEO,OAATmC,GACLyd,CAAAA,EAAO/kB,EAAM+kB,IAAI,AAAD,EAEpB,IAAM86B,EAAY7/C,EAAM8/C,SAAS,CAAC,CAC9B/6B,KAAAA,EAGApU,GAAI,CACApM,EAAGo7C,EAAS,EACZzyC,EAAG0yC,EAAS,EAGZ/0C,MAAO,GACPlF,OAAQ,EACZ,EACAiL,KAAM,CACFrM,EAAGo7C,EAAS,EAAID,EAChBxyC,EAAG0yC,EAAS,EAAIF,EAChB70C,MAAO,GAAK60C,EACZ/5C,OAAQ,GAAK+5C,CACjB,EACAz2C,QAAS,YACb,GAYA,OAXI42C,IACIhB,GAAuB1iD,IACvB4jD,aAAa5jD,GAKjBA,EAAaojB,WAAW,KACpBvf,EAAM+W,OAAO,EAAEipC,MACnB,EAAG,MAEAH,CACX,EAIA,SAASI,KACL,IAAMC,EAAmB1D,GAAgB,IAAI,CAACn1C,OAAO,CAACq7B,UAAU,CAC5Dwd,CAAAA,EAAiBz5C,OAAO,EACxBi4C,GAAwB,IAAI,CAAC3gC,SAAS,CAAE,QAAS,AAAC3c,IAC9CA,EAAI,IAAI,CAAC2V,OAAO,EAAEC,UAAU5V,IAAMA,EAClC,GAAM,CAAE2V,QAAAA,CAAO,CAAE,CAAG,IAAI,CAAEopC,EAAYppC,GAAW,CAACA,EAAQqpC,OAAO,CAACh/C,EAAE0vC,MAAM,CAAE,4BAE5E,GAAI,IAAI,CAACuP,YAAY,CAACj/C,EAAE+S,MAAM,CAAG,IAAI,CAACpO,QAAQ,CAAE3E,EAAEgT,MAAM,CAAG,IAAI,CAACtO,OAAO,GAAKq6C,EAAW,CACnF,IAAMG,EAAmBJ,EAAiBV,WAAW,EAAI,IAAKe,EAAQn/C,EAAEo/C,MAAM,EAAK,AAACp/C,CAAAA,EAAEq/C,MAAM,EAAI,CAAA,EAAK,IAAMC,EAAc1B,GAA+BjoC,EAAQ4pC,cAAc,CAACv/C,GAAGkB,KAAK,EAAGs+C,EAAc5B,GAA+BjoC,EAAQ4pC,cAAc,CAACv/C,GAAG+D,KAAK,EACpPs6C,GAAO,IAAI,CAAEz7C,KAAKkrC,GAAG,CAACoR,EAAkBC,GAAQG,EAAc,CAACA,EAAY/3C,IAAI,CAAC,CAAG,IAAI,CAACrG,KAAK,CAAEs+C,EAAc,CAACA,EAAYj4C,IAAI,CAAC,CAAG,IAAI,CAACxD,KAAK,CAAE/D,EAAE+S,MAAM,CAAE/S,EAAEgT,MAAM,CAAE8rC,IAGhL9+C,EAAEgI,cAAc,IAExB,CACJ,EAER,CAwFA;;;;;;;;;;CAUC,EAID,IAAMy3C,GAA0BxiD,GAChCwiD,CAAAA,GAAuBC,cAAc,CAAGD,GAAuBC,cAAc,EAxF3C,CAC9B79C,QAZJ,SAAgC6E,CAAU,EACM,KAAxCw3C,GAAgBh9B,OAAO,CAACxa,KACxBw3C,GAAgBn3C,IAAI,CAACL,GACrB42C,GAAwB52C,EAAY,oBAAqBm4C,IAEjE,CAQA,EAuFAY,GAAuBC,cAAc,CAAC79C,OAAO,CAAC49C,GAAuBE,KAAK,CAI1E;;;;;;;;;;CAUC,EAgBD,IAAMC,GAAe3iD,GAErB2iD,CAAAA,GAAY9mC,SAAS,CAAG8mC,GAAY9mC,SAAS,EAv6RaA,GAw6R1D8mC,GAAY1kD,WAAW,CAAG0kD,GAAY1kD,WAAW,EAAIuzB,GACrDmxB,GAAYhrB,aAAa,CAAGgrB,GAAYhrB,aAAa,EA10KaA,GA20KlEgrB,GAAYjxC,SAAS,CAAGixC,GAAYjxC,SAAS,EA13UaA,GA43U1DixC,GAAYvZ,UAAU,CAAGuZ,GAAYvZ,UAAU,EAAIE,GAAiBF,UAAU,CAC9EuZ,GAAY1e,UAAU,CAAG0e,GAAY1e,UAAU,EAAI0e,GAAYvZ,UAAU,CACzEuZ,GAAY3xC,MAAM,CAAC2xC,GAAY1e,UAAU,CAAEqF,IAE3CnjC,EAA6BvB,OAAO,CAAC+9C,GAAYtR,MAAM,CAAEsR,GAAYhL,IAAI,CAAEgL,GAAYC,KAAK,EAC5FC,AAxnFwD/Q,GAwnFtCltC,OAAO,CAAC+9C,GAAYG,QAAQ,EAC9CC,AAz5HsDjW,GAy5HtCloC,OAAO,CAAC+9C,GAAYtR,MAAM,EAC1CsR,GAAY9mC,SAAS,CAACjX,OAAO,CAAC+9C,GAAYD,KAAK,CAAEC,GAAYhL,IAAI,CAAEgL,GAAYtR,MAAM,EACrFsR,GAAY1kD,WAAW,CAAC2G,OAAO,CAAC+9C,GAAYhL,IAAI,CAAEgL,GAAYtR,MAAM,CAAEsR,GAAYD,KAAK,EACvFC,GAAYhrB,aAAa,CAAC/yB,OAAO,CAAC+9C,GAAYhL,IAAI,CAAEgL,GAAYD,KAAK,EACrEC,GAAYjxC,SAAS,CAAC9M,OAAO,CAAC+9C,GAAYhL,IAAI,EAC9CgL,GAAY1e,UAAU,CAACr/B,OAAO,CAAC+9C,GAAYD,KAAK,CAAEC,GAAYhL,IAAI,CAAEgL,GAAYtR,MAAM,CAAEsR,GAAYK,WAAW,EAClF,IAAMljD,GAAcE,IAGvC,OADYH,EAAoB,OAAU,AAE3C,CAAA"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox