{"version":3,"file":"index.mjs","sources":["../../../../projects/components/widgets/chart/src/chart.props.ts","../../../../projects/components/widgets/chart/src/chart.utils.ts","../../../../projects/components/widgets/chart/src/chart.component.ts","../../../../projects/components/widgets/chart/src/chart.component.html","../../../../projects/components/widgets/chart/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n    register(\n        'wm-chart',\n        new Map(\n            [\n                ['aggregation', {value: 'none', ...PROP_STRING}],\n                ['aggregationcolumn', PROP_STRING],\n                ['areaviewtype', {value: 'stack', ...PROP_STRING}],\n                ['barspacing', {value: 'medium', ...PROP_STRING}],\n                ['bubblesize', PROP_STRING],\n                ['centerlabel', PROP_STRING],\n                ['class', PROP_STRING],\n                ['customcolors', PROP_ANY],\n                ['dataset', PROP_ANY],\n                ['datasource', PROP_STRING],\n                ['donutratio', {value: 'medium', ...PROP_STRING}],\n                ['formattype', {value: '', PROP_STRING}],\n                ['groupby', PROP_STRING],\n                ['height', {value: '210px', PROP_STRING}],\n                ['highlightpoints', PROP_BOOLEAN],\n                ['iconclass', PROP_STRING],\n                ['interpolation', {value: 'linear', ...PROP_STRING}],\n                ['labelthreshold', {value: 0.01, ...PROP_NUMBER}],\n                ['labeltype', {value: 'percent', ...PROP_STRING}],\n                ['legendtype', {value: 'furious', ...PROP_STRING}],\n                ['linethickness', PROP_STRING],\n                ['loadingdatamsg', {value: 'Loading...', ...PROP_STRING}],\n                ['name', PROP_STRING],\n                ['nodatamessage', {value: 'No Data Available.', ...PROP_STRING}],\n                ['offset', PROP_STRING],\n                ['offsetbottom', {value: 55, ...PROP_NUMBER}],\n                ['offsetleft', {value: 75, ...PROP_NUMBER}],\n                ['offsetright', {value: 25, ...PROP_NUMBER}],\n                ['offsettop', {value: 25, ...PROP_NUMBER}],\n                ['orderby', PROP_STRING],\n                ['reducexticks', {value: true, ...PROP_BOOLEAN}],\n                ['shape', {value: 'circle', ...PROP_STRING}],\n                ['show', {value: true, ...PROP_BOOLEAN}],\n                ['showlabels', {value: 'outside', ...PROP_STRING}],\n                ['showlabelsoutside', {value: true, ...PROP_BOOLEAN}],\n                ['showlegend', {value: 'top', ...PROP_STRING}],\n                ['showvalues', {value: false, ...PROP_BOOLEAN}],\n                ['showxaxis', {value: true, ...PROP_BOOLEAN}],\n                ['showxdistance', {value: false, ...PROP_BOOLEAN}],\n                ['showyaxis', {value: true, ...PROP_BOOLEAN}],\n                ['showydistance', {value: false, ...PROP_BOOLEAN}],\n                ['staggerlabels', {value: false, ...PROP_BOOLEAN}],\n                ['subheading', PROP_STRING],\n                ['theme', PROP_STRING],\n                ['title', PROP_STRING],\n                ['tooltips', {value: true, ...PROP_BOOLEAN}],\n                ['type', PROP_STRING],\n                ['viewtype', {value: 'Grouped', ...PROP_STRING}],\n                ['xaxisdatakey', PROP_STRING],\n                ['xaxislabel', PROP_STRING],\n                ['xaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n                ['xdateformat', PROP_STRING],\n                ['xdomain', {value: 'Default', ...PROP_STRING}],\n                ['xnumberformat', PROP_STRING],\n                ['xunits', PROP_STRING],\n                ['yaxisdatakey', PROP_STRING],\n                ['yaxislabel', PROP_STRING],\n                ['yaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n                ['ydomain', {value: 'Default', ...PROP_STRING}],\n                ['ynumberformat', PROP_STRING],\n                ['yunits', PROP_STRING]\n            ]\n        )\n    );\n};\n","import {isEmptyObject, prettifyLabels} from '@wm/core';\nimport {forEach, includes, invert, isArray, isFinite, isString, isUndefined, split} from \"lodash-es\";\n\ndeclare const $;\n\nimport * as momentLib  from 'moment';\nconst moment = momentLib.default || window['moment'];\ndeclare const d3, nv;\n\nexport const chartTypes = ['Column', 'Line', 'Area', 'Cumulative Line', 'Bar', 'Pie', 'Donut', 'Bubble'],\n    allShapes = ['circle', 'square', 'diamond', 'cross', 'triangle-up', 'triangle-down'];\n\nconst dateList = ['01/01/2001', '01/01/2002', '01/01/2003'],\n    themes = {\n        'Terrestrial': {\n            colors: ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'],\n            tooltip: {\n                'backgroundColor': '#de7d28',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Annabelle': {\n            colors: ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'],\n            tooltip: {\n                'backgroundColor': '#2e306f',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Azure': {\n            colors: ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'],\n            tooltip: {\n                'backgroundColor': '#3182bd',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Retro': {\n            colors: ['#0ca7a1', '#ffa615', '#334957', '#acc5c2', '#988f90', '#8accc9', '#515151', '#f27861', '#36c9fd', '#794668', '#0f709d', '#0d2738', '#44be78', '#4a1839', '#6a393f', '#557d8b', '#6c331c', '#1c1c1c', '#861500', '#09562a'],\n            tooltip: {\n                'backgroundColor': '#80513a',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Mellow': {\n            colors: ['#f0dcbf', '#88c877', '#aeb918', '#2e2c23', '#ddddd2', '#dfe956', '#4c963b', '#5d3801', '#e1eec3', '#cd8472', '#fcfab3', '#9a4635', '#9295ad', '#2e3f12', '#565677', '#557d8b', '#4f4d02', '#0c0c1b', '#833324', '#24120e'],\n            tooltip: {\n                'backgroundColor': '#7c9e73',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Orient': {\n            colors: ['#a80000', '#cc6c3c', '#f0e400', '#000084', '#fccc6c', '#009c6c', '#cc309c', '#78cc00', '#fc84e4', '#48e4fc', '#4878d8', '#186c0c', '#606060', '#a8a8a8', '#000000', '#d7d7d7', '#75a06e', '#190d0b', '#888888', '#694b84'],\n            tooltip: {\n                'backgroundColor': '#c14242',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'GrayScale': {\n            colors: ['#141414', '#353535', '#5b5b5b', '#848484', '#a8a8a8', '#c3c3c3', '#e0e0e0', '#c8c8c8', '#a5a5a5', '#878787', '#656565', '#4e4e4e', '#303030', '#1c1c1c', '#4f4f4f', '#3b3b3b', '#757575', '#606060', '#868686', '#c1c1c1'],\n            tooltip: {\n                'backgroundColor': '#575757',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Flyer': {\n            colors: ['#3f454c', '#5a646e', '#848778', '#cededf', '#74c4dd', '#0946ed', '#380bb1', '#000ff0', '#f54a23', '#1db262', '#bca3aa', '#ffa500', '#a86b32', '#63a18c', '#56795e', '#934343', '#b75f5f', '#752d2d', '#4e1111', '#920606'],\n            tooltip: {\n                'backgroundColor': '#47637c',\n                'textColor': '#FFFFFF'\n            }\n        },\n        'Luminosity': {\n            colors: ['#FFFFFF', '#e4e4e4', '#00bcd4', '#f0dd2f', '#00aabf', '#018376', '#e91e63', '#39e5d4', '#ff6d6d', '#00ff76', '#ff9800', '#969696', '#ff4200', '#e00000', '#95cbe5', '#5331ff', '#fff4a7', '#e7a800', '#0061e4', '#d5e7ff'],\n            tooltip: {\n                'backgroundColor': '#47637c',\n                'textColor': '#FFFFFF'\n            }\n        }\n    },\n    basicProperties = ['xaxislabel', 'yaxislabel', 'xunits', 'yunits', 'xnumberformat', 'xdateformat', 'ynumberformat',\n        'showvalues', 'showlabels', 'viewtype', 'areaviewtype', 'staggerlabels', 'reducexticks', 'offsettop', 'offsetbottom', 'offsetright', 'offsetleft',\n        'barspacing', 'xaxislabeldistance', 'yaxislabeldistance', 'theme', 'labeltype', 'donutratio', 'showlabelsoutside', 'showxdistance', 'showydistance', 'shape', 'nodatamessage', 'captions', 'showxaxis', 'showyaxis',\n        'centerlabel', 'customcolors', 'showlegend', 'legendtype', 'xdomain', 'ydomain', 'tooltips', 'linethickness', 'highlightpoints', 'interpolation', 'labelthreshold'],\n    barSpacingMap = {\n        'small' : 0.3,\n        'medium' : 0.5,\n        'large' : 0.8\n    },\n    donutRatioMap = {\n        'small' : 0.3,\n        'medium' : 0.6,\n        'large' : 0.7\n    },\n    barSpacingMapInvert = invert(barSpacingMap),\n    donutRatioMapInvert = invert(donutRatioMap),\n    tickformats = {\n        'Thousand': {\n            'prefix': 'K',\n            'divider': 1000\n        },\n        'Million' : {\n            'prefix': 'M',\n            'divider': 1000000\n        },\n        'Billion' : {\n            'prefix': 'B',\n            'divider': 1000000000\n        }\n    },\n    chartId = '#preview-chart',\n    dataTypeJSON = ['Column', 'Line', 'Pie', 'Bar', 'Donut', 'Bubble'],    // Charts that supports the data to be JSON;\n    lineTypeCharts = ['Line', 'Area', 'Cumulative Line'],   // Charts that does not supports the string type of data in the xaxis in the nvd3;\n    dataTypeArray = ['Cumulative Line', 'Area'],     // Charts that supports the data to be Array\n    SAMPLE_DATA = {\n        'group1' : 'Europe',\n        'group2' : 'Asia',\n        'group3' : 'America',\n        'group4' : 'Australia'\n    };\n\n// returns true if chart type is pie\nexport const isPieChart = type => type === 'Pie';\n\n// returns true if chart type is line\nexport const isLineChart = type => type === 'Line';\n\n// returns true if chart type is bar\nexport const isBarChart = type => type === 'Bar';\n\n// returns true if chart type is donut\nexport const isDonutChart = type => type === 'Donut';\n\n// returns true if chart type is bubble\nexport const isBubbleChart = type => type === 'Bubble';\n\n// returns true if chart type is column\nexport const isColumnChart = type => type === 'Column';\n\n// returns true if chart type is area\nexport const isAreaChart = type => type === 'Area';\n\n// returns true if chart type is area\nexport const isPieType = type => isPieChart(type) || isDonutChart(type);\n\n// The format of chart data is array of json objects in case of the following types of chart\nexport const isChartDataJSON = type => includes(dataTypeJSON, type) || !includes(chartTypes, type);\n\n// The format of chart data is array of objects in case of the following types of chart\nexport const isChartDataArray = type => includes(dataTypeArray, type);\n\n// returns true is the chart type is 'line', 'area' or 'cumulative line' else false\nexport const isLineTypeChart = type => includes(lineTypeCharts, type);\n\n// X/Y Domain properties are supported only for Column and Area charts\nexport const isAxisDomainSupported = type => isColumnChart(type) || isAreaChart(type);\n\n// Returns bar spacing value\nexport const getBarSpacingValue = (value, prop) => {\n    if (prop === 'value') {\n        return barSpacingMap[value];\n    }\n    if (prop === 'key') {\n        return barSpacingMapInvert[value];\n    }\n};\n\n// Returns radius value\nexport const getRadiusValue = (value, prop) => {\n    if (prop === 'value') {\n        return donutRatioMap[value];\n    }\n    if (prop === 'key') {\n        return donutRatioMapInvert[value];\n    }\n};\n\n// Returns labels config\nexport const getLabelValues = (showlabels, showlabelsoutside, prop) => {\n    const labelsConfig: any = {};\n    switch (showlabels) {\n        case 'hide':\n            labelsConfig.showlabels = false;\n            break;\n        case 'inside':\n            labelsConfig.showlabels = true;\n            labelsConfig.showlabelsoutside = false;\n            break;\n        case 'outside':\n            labelsConfig.showlabels = true;\n            labelsConfig.showlabelsoutside = true;\n            break;\n    }\n    return labelsConfig;\n};\n\n// Construct the sample data\nexport const constructSampleData = (dataType, yaxisLength, shape) => {\n    let first_series = [],\n        second_series = [],\n        third_series = [],\n        first_series_array = [],\n        second_series_array = [],\n        third_series_array = [],\n        first_series_bubble = [],\n        second_series_bubble = [],\n        third_series_bubble = [],\n        data = [];\n    switch (dataType) {\n        case 'jsonFormat':\n            first_series = [\n                {'x': '01/01/2001', 'y': 4000000},\n                {'x': '01/01/2002', 'y': 1000000},\n                {'x': '01/01/2003', 'y': 5000000}\n            ];\n            second_series = [\n                {'x': '01/01/2001', 'y': 3000000},\n                {'x': '01/01/2002', 'y': 4000000},\n                {'x': '01/01/2003', 'y': 7000000}\n            ];\n            third_series = [\n                {'x': '01/01/2001', 'y': 2000000},\n                {'x': '01/01/2002', 'y': 8000000},\n                {'x': '01/01/2003', 'y': 6000000}\n            ];\n            data[0] = {\n                values: first_series,\n                key: SAMPLE_DATA.group1\n            };\n            if (yaxisLength >= 2) {\n                data[1] = {\n                    values: second_series,\n                    key: SAMPLE_DATA.group2\n                };\n            }\n            if (yaxisLength >= 3) {\n                data[2] = {\n                    values: third_series,\n                    key: SAMPLE_DATA.group3\n                };\n            }\n            break;\n        case 'lineChartFormat':\n            first_series = [\n                {'x': 1, 'y': 4000000},\n                {'x': 2, 'y': 1000000},\n                {'x': 3, 'y': 5000000}\n            ];\n            second_series = [\n                {'x': 1, 'y': 3000000},\n                {'x': 2, 'y': 4000000},\n                {'x': 3, 'y': 7000000}\n            ];\n            third_series = [\n                {'x': 1, 'y': 2000000},\n                {'x': 2, 'y': 8000000},\n                {'x': 3, 'y': 6000000}\n            ];\n            data[0] = {\n                values: first_series,\n                key: SAMPLE_DATA.group1\n            };\n            if (yaxisLength >= 2) {\n                data[1] = {\n                    values: second_series,\n                    key: SAMPLE_DATA.group2\n                };\n            }\n            if (yaxisLength >= 3) {\n                data[2] = {\n                    values: third_series,\n                    key: SAMPLE_DATA.group3\n                };\n            }\n            break;\n        case 'arrayFormat':\n            first_series_array = [\n                [1, 4000000],\n                [2, 1000000],\n                [3, 5000000]\n            ];\n            second_series_array = [\n                [1, 3000000],\n                [2, 4000000],\n                [3, 7000000]\n            ];\n            third_series_array = [\n                [1, 2000000],\n                [2, 8000000],\n                [3, 6000000]\n            ];\n            data[0] = {\n                values: first_series_array,\n                key: SAMPLE_DATA.group1\n            };\n            if (yaxisLength >= 2) {\n                data[1] = {\n                    values: second_series_array,\n                    key: SAMPLE_DATA.group2\n                };\n            }\n            if (yaxisLength >= 3) {\n                data[2] = {\n                    values: third_series_array,\n                    key: SAMPLE_DATA.group3\n                };\n            }\n            break;\n        case 'bubbleFormat':\n            shape = shape === 'random' ?  allShapes[Math.floor(Math.random() * allShapes.length)] : shape;\n            first_series_bubble = [\n                {'x': 80.66, 'y': 33739900,  'size': 78, 'shape': shape},\n                {'x': 79.84, 'y': 81902300,  'size': 90, 'shape': shape},\n                {'x': 78.6,  'y': 5523100,   'size': 45, 'shape': shape}\n            ];\n            second_series_bubble = [\n                {'x': 72.73, 'y': 79716200,  'size': 98, 'shape': shape},\n                {'x': 80.05, 'y': 61801600,  'size': 20, 'shape': shape},\n                {'x': 72.49, 'y': 73137200,  'size': 34, 'shape': shape}\n            ];\n            third_series_bubble = [\n                {'x': 68.09, 'y': 33739900,  'size': 45, 'shape': shape},\n                {'x': 81.55, 'y': 7485600,   'size': 78, 'shape': shape},\n                {'x': 68.60, 'y': 141850000, 'size': 56, 'shape': shape}\n            ];\n            data[0] = {\n                values: first_series_bubble,\n                key: SAMPLE_DATA.group1\n            };\n            if (yaxisLength >= 2) {\n                data[1] = {\n                    values: second_series_bubble,\n                    key: SAMPLE_DATA.group2\n                };\n            }\n            if (yaxisLength >= 3) {\n                data[2] = {\n                    values: third_series_bubble,\n                    key: SAMPLE_DATA.group3\n                };\n            }\n            break;\n        case 'pieChartFormat':\n            data = [\n                {'x': SAMPLE_DATA.group1, 'y': 1000000},\n                {'x': SAMPLE_DATA.group2, 'y': 2000000},\n                {'x': SAMPLE_DATA.group3, 'y': 3000000},\n                {'x': SAMPLE_DATA.group4, 'y': 4000000}\n            ];\n            break;\n    }\n    return data;\n};\n\nexport const getDataType = widgetContext => {\n    const type = widgetContext.type;\n    if (isLineChart(type)) {\n        return 'lineChartFormat';\n    }\n    if (isPieType(type)) {\n        return 'pieChartFormat';\n    }\n    if (isBubbleChart(type)) {\n        return 'bubbleFormat';\n    }\n    return isChartDataJSON(type) ? 'jsonFormat' : 'arrayFormat';\n};\n\n// Sample data to populate when no data is bound\nexport const getSampleData = widgetContext => constructSampleData(getDataType(widgetContext), split(widgetContext.yaxisdatakey, ',').length, widgetContext.shape);\n\n// Check whether X/Y Domain was set to Min and is supported for the present chart\nexport const isAxisDomainValid = (widgetContext, axis) => {\n    if (widgetContext[axis + 'domain'] === 'Min' && (isAxisDomainSupported(widgetContext.type))) {\n        return true;\n    }\n    return false;\n};\n\n// Check whether min and max values are finite or not\nexport const areMinMaxValuesValid = values => {\n    if (isFinite(values.min) && isFinite(values.max)) {\n        return true;\n    }\n    return false;\n};\n\nexport const getYScaleMinValue = value => {\n    const _min = Math.floor(value);\n    /* If the number has a) decimal part returning floor value - 0.1\n     b) no decimal part returning floor value - 1 */\n    return Math.abs(value) - _min > 0 ? value - 0.1 : _min - 1;\n};\n\n// Chooses the data points of line/cumulative line/area chart and highlights them\nexport const highlightPoints = (id, highlightpoints) => {\n    const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n    if (highlightpoints) {\n        chartSvg.selectAll('.nv-point')\n            .style('stroke-width', '6px')\n            .style('fill-opacity', '0.95')\n            .style('stroke-opacity', '0.95');\n    } else {\n        chartSvg.selectAll('.nv-point')\n            .style('stroke-width', '0px')\n            .style('fill-opacity', '0');\n    }\n};\n\n// Chooses the line of line/cumulative line and increases the thickness of it\nexport const setLineThickness = (id, thickness) => {\n    const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n    thickness = thickness || 1.5;\n\n    const lines = chartSvg.selectAll('.nv-line');\n\n    if (lines.size() !== 0) {\n        lines.style('stroke-width', thickness);\n    }\n};\n\n// Constructing a common key value map for preview and canvas mode\nexport const initProperties = (widgetContext, propertyValueMap) => {\n    if (!propertyValueMap || isEmptyObject(propertyValueMap)) {\n        propertyValueMap = {};\n    }\n    forEach(basicProperties, prop => {\n        if (isUndefined(propertyValueMap[prop])) {\n            propertyValueMap[prop] = widgetContext[prop];\n        }\n    });\n\n    return propertyValueMap;\n};\n\nexport const getNumberValue = (value, callback) => {\n    return isNaN(parseInt(value, 10)) ? callback(value, 'value') : value;\n};\n\n// Formats the given value according to date format\nexport const getDateFormatedData = (dateFormat, d) => {\n    dateFormat = dateFormat || '%x';\n    /**\n     * if date value is string \"20-05-2019\" then new Date(value) return 20May2019 with current time in India,\n     * whereas this will return 19May2019 with time lagging for few hours.\n     * This is because it returns UTC time i.e. Coordinated Universal Time (UTC).\n     * To create date in local time use moment\n     */\n    if(dateFormat == '%c') {\n        dateFormat = '%a %b %e %X %Y';\n    }\n    return d3.timeFormat(dateFormat)(new Date(moment(moment(d).format()).valueOf()));\n};\nconst removeTrailingZeros = value => {\n    if(!value) {\n        return value;\n    }\n    // Convert value to a string if it's a number\n    const stringValue = typeof value === 'number' ? value.toString() : value;\n\n    // Remove trailing zeros\n    return stringValue.replace(/\\.0+([A-Za-z]*)$/, '$1').replace(/\\.([1-9]+)0+([A-Za-z]*)$/, '.$1$2');\n};\n\n// Formats the given value according to number format\nexport const getNumberFormatedData = (numberFormat, d) => {\n    let formattedData,\n        divider,\n        prefix;\n    // formatting the data based on number format selected\n    if (numberFormat) {\n        let numberFormatter;\n        if(numberFormat == 'Thousand' || numberFormat == 'Million' || numberFormat == 'Billion') {\n            numberFormatter = d3.format(',.2s');\n        } else if(numberFormat == '%') {\n            numberFormatter = d3.format('.2%');\n        }else if(numberFormat == '.f') {\n            numberFormatter = d3.format('.2f');\n        } else {\n            numberFormatter = d3.format(numberFormat);\n        }\n        formattedData = numberFormatter(d);\n\n\n        // Getting the respective divider[1000,1000000,1000000000] based on the number format choosen\n        divider = (tickformats[numberFormat] && tickformats[numberFormat].divider) || 0;\n        prefix = tickformats[numberFormat] && tickformats[numberFormat].prefix;\n        if (prefix && divider !== 0) {\n            formattedData = d3.format('.2f')(d / divider) + prefix;\n        }\n    } else {\n        // Auto formatting the data when no formating option is chosen\n        formattedData = d >= 1000 ? d3.format('.1s')(d) : d;\n    }\n    formattedData = removeTrailingZeros(formattedData);\n    return formattedData;\n};\n\n// Set the visibility property of the chart x,y axis due to a bug in the nvd3\nexport const toggleAxisShow = (property, value) => {\n    const $xAxis = d3.select(chartId + ' g.nv-axis.nv-x'),\n        $yAxis = d3.select(chartId + ' g.nv-axis.nv-y');\n    if (property === 'showxaxis') {\n        $xAxis.style('visibility', value ? 'visible' : 'hidden');\n    } else {\n        $yAxis.style('visibility', value ? 'visible' : 'hidden');\n    }\n};\n\nexport const modifyLegendPosition = (widgetContext, position, id) => {\n    const showLegend = isShowLegend(widgetContext.showlegend),\n        chart_Id = id ? '#wmChart' + id : chartId,\n        legendWrap = d3.select(chart_Id + ' .nv-legendWrap'),\n        legendPadding = 5;\n    // Return when showlegend is false\n    if (!showLegend || !legendWrap['_groups'][0][0]) {\n        return;\n    }\n    if (position === 'bottom') {\n        const legendWrapHeight = legendWrap['_groups'][0][0].getBoundingClientRect().height,\n            wrap = d3.select(chart_Id + ' .nv-wrap'),\n            wrapTransform = (wrap && wrap.attr('transform')) ? wrap.attr('transform').replace(/, /g, ',') : '',\n            coordinates = /translate\\(\\s*([^\\s,)]+)[ ,]([^\\s,)]+)/.exec(wrapTransform),\n            getChartHeight = () => {\n                let chartHeight = $(chart_Id + ' svg>.nvd3.nv-wrap')[0].getBoundingClientRect().height;\n                if (chartHeight === 0) { // fix for IE\n                    chartHeight = ($(chart_Id + ' svg')[0].getBoundingClientRect().height - (legendWrapHeight + 15));\n                }\n                return chartHeight;\n            };\n        legendWrap.attr('transform', 'translate(0 , ' + (getChartHeight() - legendWrapHeight - legendPadding) + ')');\n        if (coordinates) {\n            wrap.attr('transform', 'translate(' + coordinates[1] + ',' + legendPadding + ')');\n        }\n    }\n};\n\n// Returns value if legend need to shown or not\nexport const isShowLegend = value => {\n    // Old projects will have either true or false\n    if (value === 'false' || value === false) {\n        return false;\n    }\n    if (value === 'true' || value === true) {\n        return true;\n    }\n    // New projects will have either 'Hide Legend', 'Show Top', 'Show Bottom'\n    return value === 'hide' ? false : true;\n};\n\n/**\n * Customise the tooltip for donut & pie charts and also for charts having only one value attached to yaxis\n * @param key\n * @param label\n */\nexport const customiseTooltip = (chart, propertyValueMap, widgetContext, label?) => {\n    d3.selectAll('.nvtooltip').style('opacity', 0);\n    chart.tooltip.contentGenerator((key, propValueMap) => {\n        let xValue = key.data.x, yValue;\n        yValue = getNumberFormatedData(propValueMap?.ynumberformat || widgetContext?.ynumberformat || propertyValueMap?.ynumberformat, key.data.y);\n        if (isPieType(widgetContext.type)) {\n            label = key.data.x;\n            xValue = '';\n        }\n        return '<table>' +\n            '<tbody>' +\n            '<tr class=\"value\"><b>' + xValue +\n            '</b></tr>' +\n            '<tr>' +\n            '<td class=\"legend-color-guide\"><div style=\"background-color:' + key.color + ';\"></div></td>' +\n            '<td class=\"key\">' + label + '</td>' +\n            '<td class=\"value\">' + yValue + '</td>' +\n            '</tr>' +\n            '</tbody>' +\n            '</table>';\n    });\n};\n\n// intializes the chart obejct\nexport const initChart = (widgetContext, xDomainValues, yDomainValues, propertyValueMap, isPreview) => {\n    propertyValueMap =  initProperties(widgetContext, propertyValueMap);\n    let chart, colors = [], xaxislabel, yaxislabel, labelConfig, radius, barSpacing,\n        showLegend, xAxisValue, hasMultipleYValues;\n    const xValue: any = {}, yValue: any = {};\n    switch (widgetContext.type) {\n        case 'Column':\n            barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n            chart = nv.models.multiBarChart()\n                .x(d => d.x)\n                .y(d => d.y)\n                .reduceXTicks(propertyValueMap.reducexticks)\n                .rotateLabels(0)\n                .showControls(false)\n                .stacked(propertyValueMap.viewtype === 'Stacked' ?  true : false)\n                .groupSpacing(barSpacing);\n            break;\n        case 'Cumulative Line':\n            chart = nv.models.cumulativeLineChart()\n                .x(d => d[0])\n                .y(d => d[1])\n                .showControls(false)\n                .useInteractiveGuideline(propertyValueMap.tooltips)\n                .interpolate(propertyValueMap.interpolation);\n            break;\n        case 'Line':\n            chart = nv.models.lineChart()\n                .useInteractiveGuideline(propertyValueMap.tooltips)\n                .interpolate(propertyValueMap.interpolation);\n            break;\n        case 'Area':\n            chart = nv.models.stackedAreaChart()\n                .x(d => d.x)\n                .y(d => d.y)\n                .clipEdge(true)\n                .showControls(false)\n                .style(propertyValueMap.areaviewtype)\n                .useInteractiveGuideline(propertyValueMap.tooltips)\n                .interpolate(propertyValueMap.interpolation);\n            break;\n        case 'Bar':\n            barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n            chart = nv.models.multiBarHorizontalChart()\n                .x(d => d.x)\n                .y(d => d.y)\n                .showControls(false)\n                .stacked(propertyValueMap.viewtype === 'Stacked' ?  true : false)\n                .showValues(propertyValueMap.showvalues)\n                .groupSpacing(barSpacing);\n            break;\n        case 'Pie':\n        case 'Donut':\n            labelConfig = getLabelValues(propertyValueMap.showlabels, propertyValueMap.showlabelsoutside, 'value');\n            radius = getNumberValue(propertyValueMap.donutratio, getRadiusValue) || donutRatioMap.medium;\n            chart = nv.models.pieChart()\n                .x(d => d.x)\n                .y(d => d.y)\n                .showLabels(labelConfig.showlabels)\n                .labelType(propertyValueMap.labeltype)\n                .valueFormat(d3.format('%'))\n                .title(propertyValueMap.centerlabel)\n                .labelThreshold(propertyValueMap.labelthreshold || 0.01)\n                .labelsOutside(labelConfig.showlabelsoutside);\n            if (isDonutChart(widgetContext.type)) {\n                chart.donut(true)\n                    .donutRatio(radius);\n            }\n            if (propertyValueMap.labeltype === 'key-value') {\n                chart.labelType(d => d.data.x + ' ' + d.data.y);\n            }\n            break;\n        case 'Bubble':\n            chart = nv.models.scatterChart()\n                .x(d => d.x)\n                .y(d => d.y)\n                .showDistX(propertyValueMap.showxdistance)\n                .showDistY(propertyValueMap.showydistance);\n            break;\n    }\n\n    if (xDomainValues) {\n        xValue.min = xDomainValues.min.x || xDomainValues.min[0];\n        xValue.max = xDomainValues.max.x || xDomainValues.max[0];\n        // If the values on the x axis are string then min max values gives Infinity\n        if (areMinMaxValuesValid(xValue)) {\n            // Reducing the min value to 0.1 so the min value is not missed out\n            xValue.min = getYScaleMinValue(xValue.min);\n            chart.xDomain([xValue.min, xValue.max]);\n        }\n    }\n\n    if (yDomainValues) {\n        // Reducing the min value to 1 so the min value is not missed out\n        yValue.min = yDomainValues.min.y || yDomainValues.min[1];\n        yValue.max = yDomainValues.max.y || yDomainValues.max[1];\n        // If the values on the y axis are string or invalid then min max values gives Infinity\n        if (areMinMaxValuesValid(yValue)) {\n            // Reducing the min value to 1 so the min value is not missed out\n            yValue.min = getYScaleMinValue(yValue.min);\n            chart.yDomain([yValue.min, yValue.max]);\n        }\n    }\n\n    // Setting the legend type choosen by user or default it will be furious\n    chart.legend.vers((propertyValueMap.legendtype && propertyValueMap.legendtype.toLowerCase()) || 'furious');\n\n    if (!includes(chartTypes, widgetContext.type)) {\n        chart = nv.models.multiBarChart()\n            .x(d => d.x)\n            .y(d => d.y);\n    }\n\n\n    if (isPieType(widgetContext.type)) {\n        // In case of pie/donut chart formatting the values of it\n        if (propertyValueMap.labeltype === 'percent') {\n            chart.valueFormat(d3.format('%'));\n        } else {\n            chart.valueFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n        }\n        // Customizing the tooltips in case of the pie and donut when labelType is value\n        customiseTooltip(chart, propertyValueMap, widgetContext);\n    }\n    else {\n        chart.showXAxis(propertyValueMap.showxaxis)\n            .showYAxis(propertyValueMap.showyaxis);\n        chart.legendPosition(propertyValueMap.showlegend);\n\n        // Setting the labels if they are specified explicitly or taking the axiskeys chosen\n        xaxislabel = propertyValueMap.xaxislabel || prettifyLabels(widgetContext.xaxisdatakey) || 'x caption';\n        yaxislabel = propertyValueMap.yaxislabel || prettifyLabels(widgetContext.yaxisdatakey) || 'y caption';\n\n        // Checking if y axis has multiple values\n        if (widgetContext.yaxisdatakey && widgetContext.yaxisdatakey.split(',').length > 1) {\n            hasMultipleYValues = true;\n        }\n        // Customizing the tooltip to show yaxislabel, only if the y axis contains one value\n        if (!hasMultipleYValues && !isBubbleChart(widgetContext.type)) {\n            customiseTooltip(chart, propertyValueMap, widgetContext, yaxislabel);\n        }\n\n        // Adding the units to the captions if they are specified\n        xaxislabel += propertyValueMap.xunits ? '(' + propertyValueMap.xunits + ')' : '';\n        yaxislabel += propertyValueMap.yunits ? '(' + propertyValueMap.yunits + ')' : '';\n\n        chart.xAxis\n            .axisLabel(xaxislabel)\n            .axisLabelDistance(propertyValueMap.xaxislabeldistance)\n            .staggerLabels(propertyValueMap.staggerlabels);\n\n        // If date format set format based date format\n        if (propertyValueMap.xdateformat || (isPreview && !isBubbleChart(widgetContext.type))) {\n            if (isLineTypeChart(widgetContext.type)) {\n                chart.xAxis.tickFormat(d => {\n                    // get the actual value\n                    xAxisValue = isPreview ? dateList[d - 1] : widgetContext.xDataKeyArr[d];\n                    return getDateFormatedData(propertyValueMap.xdateformat, xAxisValue);\n                });\n            } else {\n                chart.xAxis.tickFormat(d => getDateFormatedData(propertyValueMap.xdateformat, d));\n            }\n        } else if (propertyValueMap.xnumberformat) {\n            chart.xAxis.tickFormat(d => getNumberFormatedData(propertyValueMap.xnumberformat, d));\n        } else {\n            if (isLineTypeChart(widgetContext.type)) {\n                // get the actual value\n                chart.xAxis.tickFormat(d => widgetContext.xDataKeyArr[d]);\n            }\n        }\n        chart.yAxis\n            .axisLabel(yaxislabel)\n            .axisLabelDistance(propertyValueMap.yaxislabeldistance)\n            .staggerLabels(propertyValueMap.staggerlabels)\n            .tickFormat(d => getNumberFormatedData(propertyValueMap?.ynumberformat, d));\n        if (isBarChart(widgetContext.type)) {\n            chart.valueFormat(d => getNumberFormatedData(propertyValueMap?.ynumberformat, d));\n        }\n    }\n\n    // Support for custom colors if user gives direct string of colors in text box\n    if (isString(propertyValueMap.customcolors) && propertyValueMap.customcolors) {\n        colors = split(propertyValueMap.customcolors, ',');\n    }\n    if (isArray(propertyValueMap.customcolors)) {\n        colors = propertyValueMap.customcolors;\n    }\n\n    showLegend = isShowLegend(propertyValueMap.showlegend);\n    chart.showLegend(showLegend)\n        .margin({top: propertyValueMap.offsettop, right: propertyValueMap.offsetright, bottom: propertyValueMap.offsetbottom, left: propertyValueMap.offsetleft})\n        .color(colors.length ? colors : themes[propertyValueMap.theme].colors);\n\n    chart.tooltip.enabled(propertyValueMap.tooltips);\n    widgetContext.message = propertyValueMap.nodatamessage || 'No data found';\n    // setting the no data message\n    chart.noData(widgetContext.message);\n\n    if (isLineTypeChart(widgetContext.type) && widgetContext.highlightpoints) {\n        chart.dispatch.on('stateChange', () => {\n            setTimeout(() => postPlotChartProcess(widgetContext), 100);\n        });\n    }\n\n    if (widgetContext.showlegend && (widgetContext.type === 'Donut' || widgetContext.type === 'Pie')) {\n        if(widgetContext.showlegend === 'right') {\n            chart.legendPosition('right');\n        }\n    }\n    return chart;\n};\n\n// @ts-ignore\nexport const postPlotChartProcess = (widgetContext, isPreview?) => {\n    const id = isPreview ? null : widgetContext.$id;\n    // If user sets to highlight the data points and increase the thickness of the line\n    if (isLineTypeChart(widgetContext.type)) {\n       setLineThickness(id, widgetContext.linethickness);\n       highlightPoints(id, widgetContext.highlightpoints);\n    }\n    // Modifying the legend position only when legend is shown\n    // if (widgetContext.showlegend) {\n    //     modifyLegendPosition(widgetContext, widgetContext.showlegend, id);\n    // }\n};\n\n// @ts-ignore\nexport const getDateList = () => dateList;\n\n","import { CommonModule } from '@angular/common';\nimport { SpinnerComponent } from '@wm/components/basic/spinner';\nimport {\n    AfterViewInit,\n    OnDestroy,\n    Component,\n    HostBinding,\n    Injector,\n    ViewEncapsulation,\n    Optional,\n    Inject\n} from '@angular/core';\n\nimport {\n    App,\n    DataSource,\n    getClonedObject,\n    isDataSourceEqual,\n    isEmptyObject,\n    isNumberType,\n    prettifyLabels,\n    removeAttr,\n    triggerFn,\n} from '@wm/core';\nimport { APPLY_STYLES_TYPE, IRedrawableComponent, provideAsWidgetRef, StylableComponent, styler,  } from '@wm/components/base';\n\nimport { registerProps } from './chart.props';\nimport { allShapes, getDateList, getSampleData, initChart, isAreaChart, isAxisDomainValid, isBarChart, isBubbleChart, isChartDataArray, isChartDataJSON, isLineTypeChart, isPieType, postPlotChartProcess } from './chart.utils';\nimport {\n    concat, debounce, fill,\n    first,\n    forEach, forEachRight,\n    get, groupBy, includes,\n    intersection,\n    isArray, isEmpty, isObject, keys,\n    map, max,\n    maxBy,\n    minBy,\n    orderBy,\n    replace,\n    split,\n    uniq\n} from \"lodash-es\";\n\ndeclare const $;\n\ndeclare const d3, nv;\n\nconst WIDGET_CONFIG = {widgetType: 'wm-chart', hostClass: 'app-chart'};\n\nconst options = {\n        'Bubble' : ['bubblesize', 'shape']\n    },\n    NONE = 'none',\n    advanceDataProps = ['aggregation', 'aggregationcolumn', 'groupby', 'orderby'],\n    // XPaths to get actual data of data points in charts\n    chartDataPointXpath = {\n        'Column'         : 'rect.nv-bar',\n        'Bar'            : 'g.nv-bar',\n        'Area'           : '.nv-stackedarea .nv-point',\n        'Cumulative Line': '.nv-cumulativeLine .nv-scatterWrap path.nv-point',\n        'Line'           : '.nv-lineChart .nv-scatterWrap path.nv-point',\n        'Pie'            : '.nv-pieChart .nv-slice path',\n        'Donut'          : '.nv-pieChart .nv-slice path',\n        'Bubble'         : '.nv-scatterChart .nv-point-paths path'\n    },\n    // all properties of the chart\n    allOptions = ['bubblesize', 'shape'],\n    styleProps = {\n        'fontunit'      : 'font-size',\n        'fontsize'      : 'font-size',\n        'color'         : 'fill',\n        'fontfamily'    : 'font-family',\n        'fontweight'    : 'font-weight',\n        'fontstyle'     : 'font-style',\n        'textdecoration': 'text-decoration'\n    },\n    // Getting the relevant aggregation function based on the selected option\n    aggregationFnMap = {\n        'average' : 'AVG',\n        'count'   : 'COUNT',\n        'maximum' : 'MAX',\n        'minimum' : 'MIN',\n        'sum'     : 'SUM'\n    };\n\nconst getBooleanValue = val => {\n    if (val === true || val === 'true') {\n        return true;\n    }\n    if (val === false || val === 'false') {\n        return false;\n    }\n    return val;\n};\n\n// returns orderby columns and their orders in two separate arrays\nconst getLodashOrderByFormat = orderby => {\n    let columns;\n    const orderByColumns = [],\n        orders = [];\n\n    forEach(split(orderby, ','), function (col) {\n        columns = split(col, ':');\n        orderByColumns.push(columns[0]);\n        orders.push(columns[1]);\n    });\n    return {\n        'columns' : orderByColumns,\n        'orders'  : orders\n    };\n};\n\n// Replacing the '.' by the '$' because '.' is not supported in the alias names\nconst getValidAliasName = aliasName => aliasName ? aliasName.replace(/\\./g, '$') : null;\n\n// Applying the font related styles for the chart\nconst setTextStyle = (properties, id) => {\n    const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');\n    if (!charttext.empty()) {\n        charttext.style(properties);\n    }\n};\n\nconst angle = d => {\n    const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;\n    return a > 90 ? a - 180 : a;\n};\n\n@Component({\n    standalone: true,\n    imports: [CommonModule, SpinnerComponent],\n    selector: 'div[wmChart]',\n    templateUrl: './chart.component.html',\n    styleUrls: ['../../../../../node_modules/@wavemaker/nvd3/build/nv.d3.min.css'],\n    providers: [\n        provideAsWidgetRef(ChartComponent)\n    ],\n    encapsulation: ViewEncapsulation.None\n})\nexport class ChartComponent extends StylableComponent implements AfterViewInit, OnDestroy, IRedrawableComponent {\n    static initializeProps = registerProps();\n\n    xaxisdatakey;\n    yaxisdatakey;\n    groupby;\n    aggregation;\n    aggregationcolumn;\n    isVisuallyGrouped;\n    orderby;\n    iconclass = '';\n    type: string;\n    showContentLoadError;\n    invalidConfig;\n    errMsg;\n    shape: string;\n    datasource: any;\n    fontsize: string;\n    selecteditem: any;\n    fontunit: string;\n    offsettop: number;\n    offsetleft: number;\n    offsetright: number;\n    offsetbottom: number;\n    showlabels: any;\n    theme: string;\n\n    private $id;\n    private scopedataset: any;\n    private binddataset: any;\n    private showlabelsoutside: any;\n    private _resizeFn: any;\n    private chart: any;\n    private clearCanvas: boolean;\n    public isLoadInProgress: boolean;\n    private filterFields: boolean | any;\n    private dataset: any;\n    private axisoptions: any;\n    private numericColumns: any;\n    private nonPrimaryColumns: any = [];\n    private variableInflight: any;\n    private chartReady: boolean;\n    private xDataKeyArr: any = [];\n    private xAxisDataType: string;\n    private bubblesize: any;\n    public showNoDataMsg: any;\n    private sampleData: any[];\n    private chartData: any[] = [];\n    private _processedData: any[] = [];\n    private _subsciptions: any = [];\n\n    @HostBinding('class.panel') title;\n\n    isGroupByEnabled() {\n        return !!(this.groupby && this.groupby !== NONE);\n    }\n\n    // Check if x and y axis that are chosen are valid to plot chart\n    isValidAxis() {\n        // Check if x axis and y axis are chosen and are not equal\n        return this.binddataset ? (this.xaxisdatakey && this.yaxisdatakey) : true;\n    }\n\n    // Check if aggregation is chosen\n    isAggregationEnabled() {\n        return !!((this.isGroupByEnabled() && this.aggregation !== NONE && this.aggregationcolumn));\n    }\n\n    // Check if either groupby, aggregation or orderby is chosen\n    isDataFilteringEnabled() {\n        /*Query need to be triggered if any of the following cases satisfy\n        * 1. Group By and aggregation both chosen\n        * 2. Only Order By is chosen\n        * */\n\n        return this.isAggregationEnabled() || (!this.isVisuallyGrouped && this.orderby);\n    }\n\n    /*Charts like Line,Area,Cumulative Line does not support any other datatype\n        other than integer unlike the column and bar.It is a nvd3 issue. Inorder to\n        support that this is a fix*/\n    getxAxisVal(dataObj, xKey, index) {\n        const value = get(dataObj, xKey);\n        // If x axis is other than number type then add indexes\n        if (isLineTypeChart(this.type) && !isNumberType(this.xAxisDataType)) {\n            // Verification to get the unique data keys\n            this.xDataKeyArr.push(value);\n            // Check if it is of type Date\n            if (value instanceof Date) {\n                return value;\n            } else {\n                return index;\n            }\n        }\n        return value;\n    }\n\n    // Getting the min and max values among all the x values\n    getXMinMaxValues(datum) {\n        if (!datum) {\n            return;\n        }\n        const xValues: any = {};\n        /*\n         compute the min x value\n         eg: When data has objects\n            input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n            min x: 1\n         eg: When data has arrays\n            input: [[10, 20], [20, 30], [30, 40]];\n            min x: 10\n        */\n        xValues.min = minBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n        /*\n         compute the max x value\n         eg: When data has objects\n            input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n            max x: 3\n         eg: When data has arrays\n            input: [[10, 20], [20, 30], [30, 40]];\n            max x: 30\n         */\n        xValues.max = maxBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n        return xValues;\n    }\n\n    // Getting the min and max values among all the y values\n    getYMinMaxValues(datum) {\n        const yValues: any = {},\n            minValues = [],\n            maxValues = [];\n        if (!datum) {\n            return;\n        }\n\n        /*\n         Getting the min and max y values among all the series of data\n         compute the min y value\n         eg: When data has objects\n            input: [[{x:1, y:2}, {x:2, y:3}, {x:3, y:4}], [{x:2, y:3}, {x:3, y:4}, {x:4, y:5}]]\n            min y values : '2'(among first set) & '3'(among second set)\n            max y values : '4'(among first set) & '5'(among second set)\n\n         eg: When data has arrays\n            input: [[[10, 20], [20, 30], [30, 40]], [[20, 30], [30, 40], [40, 50]]]\n            min y values : '20'(among first set) & '30'(among second set)\n            max y values : '40'(among first set) & '50'(among second set)\n         */\n\n        forEach(datum, data => {\n            minValues.push(minBy(data.values, function (dataObject) {\n                return dataObject.y || dataObject[1];\n            }));\n            maxValues.push(maxBy(data.values, function (dataObject) {\n                return dataObject.y || dataObject[1];\n            }));\n        });\n        // Gets the least and highest values among all the min and max values of respective series of data\n        yValues.min = minBy(minValues, dataObject => dataObject.y || dataObject[1]);\n        yValues.max = maxBy(maxValues, dataObject => dataObject.y || dataObject[1]);\n        return yValues;\n    }\n\n    // If the x-axis values are undefined, we return empty array else we return the values\n    getValidData(values) {\n        return (values.length === 1 && values[0] === undefined) ? [] : values;\n    }\n\n    // Returns the single data point based on the type of the data chart accepts\n    valueFinder(dataObj, xKey, yKey, index?, shape?) {\n        const xVal = this.getxAxisVal(dataObj, xKey, index),\n            value = get(dataObj, yKey),\n            yVal = parseFloat(value) || value,\n            size = parseFloat(dataObj[this.bubblesize]) || 2;\n        let dataPoint: any = {};\n\n        if (isChartDataJSON(this.type)) {\n            dataPoint.x = xVal;\n            dataPoint.y = yVal;\n            // only Bubble chart has the third dimension\n            if (isBubbleChart(this.type)) {\n                dataPoint.size = size;\n                dataPoint.shape = shape || 'circle';\n            }\n        } else if (isChartDataArray(this.type)) {\n            dataPoint = [xVal, yVal];\n        }\n        // Adding actual unwrapped data to chart data to use at the time of selected data point of chart event\n        dataPoint._dataObj = dataObj;\n        return dataPoint;\n    }\n\n    // Setting appropriate error messages\n    setErrMsg(message) {\n        if (this.showNoDataMsg) {\n            this.showContentLoadError = true;\n            this.invalidConfig = true;\n            // TODO: Set the locale from the message\n            this.errMsg = ''; // $rootScope.locale[message];\n        }\n    }\n\n    processChartData() {\n        this.sampleData = getSampleData(this);\n        // scope variables used to keep the actual key values for x-axis\n        this.xDataKeyArr = [];\n        // Plotting the chart with sample data when the chart dataset is not bound\n        if (!this.binddataset) {\n            this.xDataKeyArr = getDateList();\n            return this.sampleData;\n        }\n\n        if (!this.chartData || !this.chartData.length) {\n            return [];\n        }\n\n        let datum = [],\n            yAxisKey,\n            shapes: any = [],\n            values: any = [];\n        const xAxisKey = this.xaxisdatakey,\n            yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n            dataSet = this.chartData;\n\n        if (isArray(dataSet)) {\n            if (isPieType(this.type)) {\n                yAxisKey = yAxisKeys[0];\n                datum = map(dataSet, (dataObj, index) => {\n                    if (!isEmptyObject(dataSet[index])) {\n                        return this.valueFinder(dataSet[index], xAxisKey, yAxisKey);\n                    }\n                });\n                datum = this.getValidData(datum);\n            } else {\n                if (isBubbleChart(this.type)) {\n                    shapes = this.shape === 'random' ? allShapes : this.shape;\n                }\n                yAxisKeys.forEach((yAxisKey, series) => {\n                    values = map(dataSet, (dataObj, index) => {\n                        if (!isEmptyObject(dataSet[index])) {\n                            return this.valueFinder(dataSet[index], xAxisKey, yAxisKey, index, (isArray(shapes) && shapes[series]) || this.shape);\n                        }\n                    });\n                    values = this.getValidData(values);\n                    datum.push({\n                        values: values,\n                        key: prettifyLabels(yAxisKey)\n                    });\n                });\n            }\n        }\n        return datum;\n    }\n\n    setChartData(data) {\n        if (data) {\n            this._processedData = data;\n        }\n    }\n\n    getChartData() {\n        return this._processedData;\n    }\n\n    // constructing the grouped data based on the selection of orderby, x & y axis\n    getVisuallyGroupedData(queryResponse, groupingColumn) {\n        let groupData: any = {},\n            groupValues: any = [],\n            orderByDetails,\n            maxLength;\n        const chartData: any = [],\n            _isAreaChart = isAreaChart(this.type),\n            yAxisKey = first(split(this.yaxisdatakey, ','));\n        this.xDataKeyArr = [];\n        queryResponse = orderBy(queryResponse, split(this.groupby, ','));\n        if (this.orderby) {\n            orderByDetails = getLodashOrderByFormat(this.orderby);\n            queryResponse = orderBy(queryResponse, orderByDetails.columns, orderByDetails.orders);\n        }\n        queryResponse = groupBy(queryResponse, groupingColumn);\n        // In case of area chart all the series data should be of same length\n        if (_isAreaChart) {\n            maxLength = max(map(queryResponse, obj => obj.length));\n        }\n        forEach(queryResponse, (values, groupKey) => {\n            groupValues = isAreaChart ? fill(new Array(maxLength), [0, 0]) : [];\n            forEachRight(values, (value, index) => {\n                groupValues[index] = this.valueFinder(value, this.xaxisdatakey, yAxisKey, index);\n            });\n            groupData = {\n                key : groupKey,\n                values : groupValues\n            };\n            chartData.push(groupData);\n        });\n        return chartData;\n    }\n\n    /*Decides whether the data should be visually grouped or not\n            Visually grouped when a different column is choosen in the group by other than x and y axis and aggregation is not chosen*/\n    getGroupingDetails() {\n        if (this.isGroupByEnabled() && !this.isAggregationEnabled()) {\n            let isVisuallyGrouped = false,\n                visualGroupingColumn,\n                groupingExpression,\n                columns: any = [],\n                groupingColumnIndex;\n            const groupbyColumns = this.groupby && this.groupby !== NONE ? this.groupby.split(',') : [],\n                yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [];\n\n            if (groupbyColumns.length > 1) {\n                /*Getting the group by column which is not selected either in x or y axis*/\n                groupbyColumns.every((column, index) => {\n                    if (this.xaxisdatakey !== column && $.inArray(column, yAxisKeys) === -1) {\n                        isVisuallyGrouped = true;\n                        visualGroupingColumn = column;\n                        groupingColumnIndex = index;\n                        groupbyColumns.splice(groupingColumnIndex, 1);\n                        return false;\n                    }\n                    return true;\n                });\n                // Constructing the groupby expression\n                if (visualGroupingColumn) {\n                    columns.push(visualGroupingColumn);\n                }\n\n                if (groupbyColumns.length) {\n                    columns = concat(columns, groupbyColumns);\n                }\n            }\n            // If x and y axis are not included in aggregation need to be included in groupby\n            if (this.xaxisdatakey !== this.aggregationcolumn) {\n                columns.push(this.xaxisdatakey);\n            }\n            forEach(yAxisKeys, key => {\n                if (key !== this.aggregationcolumn) {\n                    columns.push(key);\n                }\n            });\n            groupingExpression =  columns.join(',');\n            // set isVisuallyGrouped flag in scope for later use\n            this.isVisuallyGrouped = isVisuallyGrouped;\n\n            return {\n                expression: groupingExpression,\n                isVisuallyGrouped: isVisuallyGrouped,\n                visualGroupingColumn: visualGroupingColumn\n            };\n        }\n        return {\n            expression: '',\n            isVisuallyGrouped: false,\n            visualGroupingColumn: ''\n        };\n    }\n\n    // Function to get the aggregated data after applying the aggregation & group by or order by operations.\n    getAggregatedData(callback) {\n        const variable: any = this.datasource,\n            yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n            data: any = {};\n        let sortExpr,\n            columns: any = [],\n            colAlias,\n            orderByColumns,\n            groupByFields: any = [];\n\n        if (!variable) {\n            return;\n        }\n        if (this.isGroupByEnabled()) {\n            groupByFields = split(this.groupby, ',');\n        }\n        if (this.orderby) {\n            sortExpr = replace(this.orderby, /:/g, ' ');\n            columns = uniq(concat(columns, groupByFields, [this.aggregationcolumn]));\n            orderByColumns = getLodashOrderByFormat(this.orderby).columns;\n            // If the orderby column is chosen either in groupby or orderby then replace . with $ for that column\n            forEach(intersection(columns, orderByColumns), col => {\n                colAlias = getValidAliasName(col);\n                // @ts-ignore\n                sortExpr = replace(sortExpr, col, colAlias);\n            });\n        }\n        if (this.isAggregationEnabled()) {\n            // Send the group by in the aggregations api only if aggregation is also chosen\n            data.groupByFields = groupByFields;\n            data.aggregations =  [\n                {\n                    'field': this.aggregationcolumn,\n                    'type':  aggregationFnMap[this.aggregation],\n                    'alias': getValidAliasName(this.aggregationcolumn)\n                }\n            ];\n        }\n        // Execute the query.\n        variable.execute('getAggregatedData', {\n            'aggregations' : data,\n            'sort'         : sortExpr\n        }).then(response => {\n            // Transform the result into a format supported by the chart.\n            const chartData: any = [],\n                aggregationAlias: any = getValidAliasName(this.aggregationcolumn),\n                xAxisAliasKey = getValidAliasName(this.xaxisdatakey),\n                yAxisAliasKeys = [];\n\n            yAxisKeys.forEach(yAxisKey => yAxisAliasKeys.push(getValidAliasName(yAxisKey)));\n\n            forEach(response.body.content, (responseContent) => {\n                const obj = {};\n                // Set the response in the chartData based on 'aggregationColumn', 'xAxisDataKey' & 'yAxisDataKey'.\n                if (this.isAggregationEnabled()) {\n                    obj[this.aggregationcolumn] = responseContent[aggregationAlias];\n                    obj[this.aggregationcolumn] = get(responseContent, aggregationAlias) || get(responseContent, this.aggregationcolumn);\n                }\n\n                obj[this.xaxisdatakey] = get(responseContent, xAxisAliasKey) || get(responseContent, this.xaxisdatakey);\n\n                yAxisKeys.forEach((yAxisKey, index) => {\n                    obj[yAxisKey] = responseContent[yAxisAliasKeys[index]];\n                    obj[yAxisKey] = get(responseContent, yAxisAliasKeys[index]) || get(responseContent, yAxisKey);\n                });\n\n                chartData.push(obj);\n            });\n\n            this.chartData = chartData;\n\n            triggerFn(callback);\n        }, () => {\n            this.chartData = [];\n            this.setErrMsg('MESSAGE_ERROR_FETCH_DATA');\n            triggerFn(callback);\n        });\n    }\n\n    // This function sets maximum width for the labels that can be displayed.This will helpful when they are overlapping\n    setLabelsMaxWidth() {\n        let xTicks,\n            tickWidth,\n            maxLength,\n            xDist,\n            yDist,\n            totalHeight,\n            maxNoLabels,\n            nthElement,\n            labelsAvailableWidth,\n            barWrapper,\n            yAxisWrapper,\n            svgWrapper;\n        const fontsize = parseInt(this.fontsize, 10) || 12,\n            isBarchart = isBarChart(this.type);\n        // getting the x ticks in the chart\n        xTicks = $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick').find('text');\n\n        // getting the distance between the two visible ticks associated with visible text\n        xTicks.each(function () {\n            const xTick = $(this);\n            let xTransform,\n                tickDist;\n            if (xTick.text() && xTick.css('opacity') === '1') {\n                xTransform = xTick.parent().attr('transform').split(',');\n                xDist = parseFloat(xTransform[0].substr(10));\n                yDist = parseFloat(xTransform[1] || '0');\n                if (!isBarchart && xDist > 0) {\n                    tickDist = xDist;\n                } else if (yDist > 0) {\n                    tickDist = yDist;\n                }\n                if (tickWidth) {\n                    tickWidth = tickDist - tickWidth;\n                    return false;\n                }\n                tickWidth = tickDist;\n                return true;\n            }\n        });\n\n        // In case of bar chart getting the available space for the labels to be displayed\n        if (isBarchart) {\n            barWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-barsWrap')[0];\n            yAxisWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-y')[0];\n            svgWrapper = $('#wmChart' + this.$id + ' svg')[0];\n            // getting the total height of the chart\n            totalHeight = barWrapper ? barWrapper.getBoundingClientRect().height : 0;\n            // getting the labels available space\n            labelsAvailableWidth = yAxisWrapper ? svgWrapper.getBoundingClientRect().width - yAxisWrapper.getBoundingClientRect().width : svgWrapper.getBoundingClientRect().width;\n            // Setting the max length for the label\n            maxLength = Math.round(labelsAvailableWidth / fontsize);\n            // if available space for each label is less than the font-size\n            // then limiting the labels to be displayed\n            if (tickWidth < fontsize) {\n                // calculate the maximum no of labels to be fitted\n                maxNoLabels = totalHeight / fontsize;\n                // showing only the nth element\n                nthElement = Math.ceil(this.chartData.length / maxNoLabels);\n                // showing up only some labels\n                d3.select('#wmChart' + this.$id + ' svg').select('g.nv-x').selectAll('g.tick').select('text').each(function (text, i) {\n                    // hiding every non nth element\n                    if (i % nthElement !== 0) {\n                        d3.select(this).attr('opacity', 0);\n                    }\n                });\n            }\n        } else {\n            // Setting the max length for the label\n            maxLength = Math.round(tickWidth / fontsize);\n        }\n\n        // maxLength should always be a positive number\n        maxLength = Math.abs(maxLength);\n        // Validating if every label exceeds the max length and if so limiting the length and adding ellipsis\n        xTicks.each(function () {\n            if (this.textContent.length > maxLength) {\n                this.textContent = this.textContent.substr(0, maxLength) + '...';\n            }\n        });\n    }\n\n    // Returns the columns of that can be choosen in the x and y axis\n    getDefaultColumns() {\n        let type,\n            stringColumn,\n            i,\n            temp;\n        const defaultColumns = [],\n            columns = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP) || [];\n\n        for (i = 0; i < columns.length && defaultColumns.length <= 2; i += 1) {\n            type = columns[i].type;\n            if (!columns[i].isRelated && (isNumberType(type))) {\n                defaultColumns.push(columns[i].fieldName);\n            } else if (type === 'string' && !stringColumn) {\n                stringColumn = columns[i].fieldName;\n            }\n        }\n        // Other than bubble chart x: string type y: number type\n        // Bubble chart x: number type y: number type\n        if (stringColumn && defaultColumns.length > 0 && !isBubbleChart(this.type)) {\n            temp = defaultColumns[0];\n            defaultColumns[0] = stringColumn;\n            defaultColumns[1] = temp;\n        }\n\n        return defaultColumns;\n    }\n\n    // Call user defined javascript function when user links it to click event of the widget.\n    attachClickEvent() {\n        let dataObj;\n        d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')\n            .on('click', (event, data, index) => {\n                switch (this.type) {\n                    case 'Column':\n                    case 'Bar':\n                        dataObj = data._dataObj;\n                        break;\n                    case 'Pie':\n                    case 'Donut':\n                        dataObj = data.data._dataObj;\n                        break;\n                    case 'Area':\n                    case 'Cumulative Line':\n                    case 'Line':\n                        dataObj = data[0]._dataObj;\n                        break;\n                    case 'Bubble':\n                        dataObj = data;\n                        break;\n                }\n                this.selecteditem = dataObj;\n                this.invokeEventCallback('select', {\n                    $event: event,\n                    selectedChartItem: data,\n                    selectedItem: this.selecteditem\n                });\n            });\n\n    }\n\n    /*  Returns Y Scale min value\n           Ex: Input   : 8.97\n               Output  : 8.87\n\n               Input   : 8\n               Output  : 7\n       */\n\n    postPlotProcess(chart) {\n        let chartSvg,\n            pieLabels,\n            pieGroups,\n            angleArray;\n        const styleObj = {};\n        const element = this.$element;\n\n        postPlotChartProcess(this);\n\n        if (!isPieType(this.type)) {\n            this.setLabelsMaxWidth();\n        } else if (!this.showlabelsoutside) {\n            /** Nvd3 has a issue in rotating text. So we will use this as a temp fix.\n             * If the issue is resolved there, we can remove this.*/\n            /* If it is a donut chart, then rotate the text and position them*/\n            chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n            pieLabels = chartSvg.select('.nv-pieLabels').selectAll('.nv-label');\n            pieGroups = chartSvg.select('.nv-pie').selectAll('.nv-slice');\n            angleArray = [];\n            if (pieGroups && pieGroups.length) {\n                pieGroups.each(function () {\n                    d3.select(this).attr('transform', function (d) {\n                        angleArray.push(angle(d));\n                    });\n                });\n                pieLabels.each(function (d, i) {\n                    const group = d3.select(this);\n                    $(group[0][0]).find('text').attr('transform', 'rotate(' + angleArray[i] + ')');\n                });\n            }\n        }\n\n        // prepare text style props object and set\n        forEach(styleProps, (value, key) => {\n            if (key === 'fontsize' || key === 'fontunit') {\n                styleObj[value] = this.fontsize + this.fontunit;\n            } else {\n                styleObj[value] = this[key];\n            }\n        });\n        setTextStyle(styleObj, this.$id);\n\n        /*\n         * allow window-resize functionality, for only-run mode as\n         * updating chart is being handled by watchers of height & width in studio-mode\n         * */\n        triggerFn(this._resizeFn && this._resizeFn.clear);\n        this._resizeFn = nv.utils.windowResize(() => {\n            if (element[0].getBoundingClientRect().height) {\n                chart.update();\n                postPlotChartProcess(this);\n                if (!isPieType(this.type)) {\n                    this.setLabelsMaxWidth();\n                }\n            } else {\n                // TODO: get parents of accordion type\n                /*let parent = element.closest('.app-accordion-panel, .tab-pane').isolateScope();\n                if (parent) {\n                    parent.initialized = false;\n                }*/\n            }\n        });\n    }\n\n    // prepares and configures the chart properties\n    configureChart() {\n        // Copy the data only in case of pie chart with default data\n        // Reason : when multiple pie charts are bound to same data, first chart theme will be applied to all charts\n        let xDomainValues;\n        let yDomainValues;\n        let chart;\n        let beforeRenderVal;\n        const yformatOptions: any = {};\n\n        if (this._processedData.length > 0) {\n            if (isAxisDomainValid(this, 'x')) {\n                xDomainValues = this.binddataset ? this.getXMinMaxValues(this._processedData[0]) : { 'min' : {'x': 1},  'max' : {'x' : 5}};\n            }\n            if (isAxisDomainValid(this, 'y')) {\n                yDomainValues = this.binddataset ? this.getYMinMaxValues(this._processedData) : { 'min' : {'y' : 1}, 'max' : {'y' : 5}};\n            }\n        }\n\n        if (isPieType(this.type) && (!this.binddataset || !this.scopedataset)) {\n            this._processedData = getClonedObject(this.scopedataset || this._processedData);\n        }\n\n        // get the chart object\n        chart = initChart(this, xDomainValues, yDomainValues, null, !this.binddataset);\n\n        if (isArray(this._processedData)) {\n            // WMS-19499:  To remove chart X-axis old ticks when chart data loaded dynamically.\n            const oldgTicks =  $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick');\n            if (oldgTicks && oldgTicks.length) {\n                oldgTicks.remove();\n            }\n            beforeRenderVal = this.invokeEventCallback('beforerender', { 'chartInstance' : chart});\n            if (beforeRenderVal) {\n                chart = beforeRenderVal;\n            }\n            this.chart = chart;\n            // changing the default no data message\n            d3.select('#wmChart' + this.$id + ' svg')\n                .datum(this._processedData)\n                .call(this.chart);\n            this.postPlotProcess(chart);\n            return chart;\n        }\n    }\n\n    // Plotting the chart with set of the properties set to it\n    plotChart() {\n        const element = this.$element;\n        // call user-transformed function\n        this.chartData = (this.invokeEventCallback('transform')) || this.chartData;\n\n        // Getting the order by data only in run mode. The order by applies for all the charts other than pie and donut charts\n        if (this.isVisuallyGrouped && !isPieType(this.type)) {\n            this._processedData = this.chartData;\n        } else {\n            this._processedData = this.processChartData();\n        }\n        // checking the parent container before plotting the chart\n        if (!element[0].getBoundingClientRect().height) {\n            return;\n        }\n        if (this.clearCanvas) {\n            // empty svg to add-new chart\n            element.find('svg').replaceWith('<svg></svg>');\n            this.clearCanvas = false;\n        }\n\n        // In case of invalid axis show no data available message\n        if (!this.isValidAxis()) {\n            this._processedData = [];\n        }\n        nv.addGraph(() => this.configureChart(),  () => {\n            /*Bubble chart has an time out delay of 300ms in their implementation due to which we\n            * won't be getting required data points on attaching events\n            * hence delaying it 600ms*/\n            setTimeout( () => {\n                this.attachClickEvent();\n            }, 600);\n        });\n        this.isLoadInProgress = false;\n    }\n    // TODO: Need way to figure out if the datasource is a live source\n    get isLiveVariable() {\n        // setting the flag for the live variable in the scope for the checks\n        const variableObj = this.datasource;\n        return variableObj && variableObj.category === 'wm.LiveVariable';\n    }\n\n    plotChartProxy() {\n        this.showContentLoadError = false;\n        this.invalidConfig = false;\n        // Checking if x and y axis are chosen\n        this.isLoadInProgress = true;\n        const groupingDetails = this.getGroupingDetails();\n        // If aggregation/group by/order by properties have been set, then get the aggregated data and plot the result in the chart.\n        // TODO: datasource for live variable detection\n        if (this.binddataset && this.isLiveVariable && (this.filterFields || this.isDataFilteringEnabled())) {\n            this.getAggregatedData(() => this.plotChart());\n        } else { // Else, simply plot the chart.\n            // In case of live variable resetting the aggregated data to the normal dataset when the aggregation has been removed\n            if (this.dataset && this.isLiveVariable) {\n                this.chartData = this.dataset;\n                if (this.isGroupByEnabled() && groupingDetails.isVisuallyGrouped) {\n                    this.chartData = this.getVisuallyGroupedData(this.chartData, groupingDetails.visualGroupingColumn);\n                }\n\n            }\n            this.plotChart();\n        }\n    }\n\n    // sets the default x and y axis options\n    setDefaultAxisOptions() {\n        const defaultColumns = this.getDefaultColumns();\n        // If we get the valid default columns then assign them as the x and y axis\n        // In case of service variable we may not get the valid columns because we cannot know the datatypes\n        this.xaxisdatakey = defaultColumns[0] || null;\n        this.yaxisdatakey = defaultColumns[1] || null;\n    }\n\n    getCutomizedOptions(prop, fields) {\n        const groupByColumns = split(this.groupby, ','),\n            aggColumns = split(this.aggregationcolumn, ',');\n        if (!this.binddataset) {\n            return fields;\n        }\n        if (!this.axisoptions) {\n            this.axisoptions = fields;\n        }\n        let newOptions;\n        switch (prop) {\n            case 'xaxisdatakey':\n                // If group by enabled, columns chosen in groupby will be populated in x axis options\n                if (this.isGroupByEnabled()) {\n                    newOptions = groupByColumns;\n                }\n                break;\n            case 'yaxisdatakey':\n                // If aggregation by enabled, columns chosen in aggregation will be populated in y axis options\n                if (this.isAggregationEnabled()) {\n                    newOptions = aggColumns;\n                } else if (this.isLiveVariable) {\n                    // In case of live variable populating only numeric columns\n                    newOptions = this.numericColumns;\n                }\n                break;\n            case 'groupby':\n                // Filtering only non primary key columns\n                if (this.isLiveVariable && this.nonPrimaryColumns && this.nonPrimaryColumns.length) {\n                    newOptions = this.nonPrimaryColumns;\n                }\n                break;\n            case 'aggregationcolumn':\n                // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n                if (this.isLiveVariable && this.isAggregationEnabled() && this.aggregation !== 'count') {\n                    newOptions = this.numericColumns;\n                }\n                break;\n            case 'orderby':\n                // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n                if (this.isLiveVariable && this.isAggregationEnabled()) {\n                    newOptions = uniq(concat(groupByColumns, aggColumns));\n                }\n                break;\n            case 'bubblesize':\n                if (this.numericColumns && this.numericColumns.length) {\n                    newOptions = this.numericColumns;\n                }\n                break;\n        }\n\n        return newOptions || fields || this.axisoptions;\n    }\n\n    // Function that iterates through all the columns and then fetching the numeric and non primary columns among them\n    setNumericandNonPrimaryColumns() {\n        let columns,\n            type;\n        const propertiesMap = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP);\n        this.numericColumns = [];\n        this.nonPrimaryColumns = [];\n        // Fetching all the columns\n        if (this.dataset && !isEmpty(propertiesMap)) {\n            columns = []; // TODO: fetchPropertiesMapColumns(propertiesMap);\n        }\n\n        if (columns) {\n            // Iterating through all the columns and fetching the numeric and non primary key columns\n            forEach(Object.keys(columns), (key) => {\n                type = columns[key].type;\n                if (isNumberType(type)) {\n                    this.numericColumns.push(key);\n                }\n                // Hiding only table's primary key\n                if (columns[key].isRelatedPk === 'true' || !columns[key].isPrimaryKey) {\n                    this.nonPrimaryColumns.push(key);\n                }\n            });\n            this.numericColumns = this.numericColumns.sort();\n            this.nonPrimaryColumns = this.nonPrimaryColumns.sort();\n        }\n    }\n\n    // plot the chart\n    handleDataSet(newVal) {\n        this.errMsg = '';\n        // Resetting the flag to false when the binding was removed\n        if (!newVal && !this.binddataset) {\n            this.isVisuallyGrouped = false;\n            this.axisoptions = null;\n        }\n\n        // liveVariables contain data in 'data' property' of the variable\n        this.chartData = this.isLiveVariable ? newVal || '' : (newVal && newVal.dataValue === '' && keys(newVal).length === 1) ? '' : newVal;\n\n        // if the data returned is an object make it an array of object\n        if (!isArray(this.chartData) && isObject(this.chartData)) {\n            this.chartData = [this.chartData];\n        }\n\n        if (newVal && newVal.filterFields) {\n            this.filterFields = newVal.filterFields;\n        }\n\n        // plotchart for only valid data and only after bound variable returns data\n        if (this.chartData) {\n            this._plotChartProxy();\n        }\n    }\n\n    _plotChartProxy = debounce(this.plotChartProxy.bind(this), 100);\n\n    // sets the center label for donut chart type\n    setDonutCenterLabel(labelValue) {\n        let chartSvg, pieGroups;\n        chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n\n        pieGroups = chartSvg.select('.nv-wrap.nv-pie').select('.nv-pie');\n        pieGroups.text('');\n        pieGroups.append('text')\n            .attr('dy', '.35em')\n            .attr('text-anchor', 'middle')\n            .attr('class', 'nv-pie-title')\n            .text(labelValue)\n            .each(function (d) {\n                var d3text = d3.select(this),\n                circ = d3.select(this.parentElement),\n                totalWidth = Number(circ.node().getBoundingClientRect().width),\n                // minus the ring width from total width\n                availWidth = totalWidth - 30,\n                textWidth = this.getComputedTextLength();\n                d3text.attr(\"data-scale\", availWidth / textWidth);\n              }).style(\"font-size\", function() {\n                // 16 is the default font size to multiply with the scaled value and 24 is the maximum font size that can be applied\n                var fontSize = 16 * d3.select(this).attr(\"data-scale\");\n                return fontSize > 24 ? 24 : fontSize + \"px\";\n              });\n    }\n\n    onPropertyChange(key, newVal, oldVal?) {\n        super.onPropertyChange(key, newVal, oldVal);\n        switch (key) {\n            case 'dataset':\n                this.handleDataSet(newVal);\n                break;\n            case 'centerlabel':\n                if (this.chart) {\n                    this.chart.title(newVal);\n                    this.setDonutCenterLabel(newVal);\n                }\n                break;\n            case 'type':\n                // Based on the change in type deciding the default margins\n                if (isPieType(this.type)) {\n                    this.offsettop = 20;\n                    this.offsetright = 0;\n                    this.offsetbottom = 0;\n                    this.offsetleft = 0;\n                } else if (oldVal === 'Pie' || oldVal === 'Donut') {\n                    this.offsettop = 25;\n                    this.offsetright = 25;\n                    this.offsetbottom = 55;\n                    this.offsetleft = 75;\n                }\n\n                if (oldVal !== newVal) {\n                    this.clearCanvas = true;\n                }\n                // In studio mode, configure properties dependent on chart type\n                this._plotChartProxy();\n                break;\n            default:\n                // In RunMode, the plotchart method will not be called for all property change\n                this._plotChartProxy();\n                break;\n        }\n        if (includes(advanceDataProps, key)) {\n            this._plotChartProxy();\n        }\n    }\n\n    handleLoading(data) {\n        const dataSource = this.datasource;\n        if (dataSource && dataSource.execute(DataSource.Operation.IS_API_AWARE) && isDataSourceEqual(data.variable, dataSource)) {\n            this.variableInflight = data.active;\n            this.isLoadInProgress = data.active;\n        }\n    }\n\n    hideTooltip() {\n        d3.selectAll('.nvtooltip').style('opacity', 0);\n    }\n\n    onStyleChange(key, newVal, oldVal) {\n        const styleObj = {};\n        super.onStyleChange(key, newVal, oldVal);\n        switch (key) {\n            case 'fontsize':\n            case 'fontunit':\n            case 'color':\n            case 'fontfamily':\n            case 'fontweight':\n            case 'fontstyle':\n            case 'textdecoration':\n                styleObj[styleProps[key]] = (key === 'fontsize' || key === 'fontunit') ? this.fontsize + this.fontunit : newVal;\n                setTextStyle(styleObj, this.$id);\n                break;\n        }\n    }\n\n    constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n        styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER, ['fontsize', 'fontunit', 'color', 'fontfamily', 'fontweight', 'fontstyle', 'textdecoration']);\n\n        // generate unique id for the component\n        this.$id = this.widgetId || Math.random();\n        // remove title attribute as the element on hover shows you the hint through-out the element\n        removeAttr(this.nativeElement, 'title');\n        this.chartReady = false;\n        this.binddataset = this.nativeElement.getAttribute('dataset.bind');\n        // Show loading status based on the variable life cycle\n        this._subsciptions.push(this.app.subscribe('toggle-variable-state', this.handleLoading.bind(this)));\n        // Will hide tolltip of a chart in mobile when the user scrolls.\n        this._subsciptions.push(this.app.subscribe('iscroll-start', () => {this.hideTooltip();}));\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n        // For old projects\n        if (!includes(['outside', 'inside', 'hide'], this.showlabels)) {\n            this.showlabels        = getBooleanValue(this.showlabels);\n            this.showlabelsoutside = getBooleanValue(this.showlabelsoutside);\n            this.showlabels        = this.showlabels ? (this.showlabelsoutside ? 'outside' : 'inside') : 'hide';\n        }\n\n        if (!this.theme) {\n            // Default theme for pie/donut is Azure and for other it is Terrestrial\n            this.theme = isPieType(this.type) ? 'Azure' : 'Terrestrial';\n        }\n\n        this.nativeElement.setAttribute('id', 'wmChart' + this.$id);\n        // When there is not value binding, then plot the chart with sample data\n        if (!this.binddataset && !this.nativeElement.getAttribute('scopedataset')) {\n            this._plotChartProxy();\n        }\n    }\n\n    ngOnDestroy() {\n        // destroy all subscriptions to prevent memory leak.\n        this.hideTooltip();\n        \n        // MEMORY LEAK FIX: Unsubscribe from all subscriptions\n        if (this._subsciptions) {\n            this._subsciptions.forEach((subscription)=>{\n                subscription();\n            });\n            this._subsciptions = [];\n        }\n        \n        // MEMORY LEAK FIX: Clear chart instance\n        if (this.chart) {\n            this.chart = null;\n        }\n        \n        // MEMORY LEAK FIX: Remove resize handler if exists\n        if (this._resizeFn) {\n            this._resizeFn = null;\n        }\n        \n        // MEMORY LEAK FIX: Clear array references\n        this.chartData = [];\n        this._processedData = [];\n        this.sampleData = [];\n        this.xDataKeyArr = [];\n        this.nonPrimaryColumns = [];\n        \n        super.ngOnDestroy();\n    }\n    redraw = this._plotChartProxy.bind(this);\n}\n","@if (title) {\n  <div class=\"panel-heading\">\n    <h3 class=\"panel-title\">\n      <div class=\"pull-left\"><i class=\"app-icon panel-icon {{iconclass}}\" [class.ng-hide]=\"!iconclass\"></i></div>\n      <div class=\"heading\" [innerHTML]=\"title\"></div>\n      @if (subheading) {\n        <div class=\"description\" [innerHTML]=\"subheading\"></div>\n      }\n    </h3>\n  </div>\n}\n<div class=\"app-chart-inner\" [ngClass]=\"{'loading':isLoadInProgress, 'panel-body': title}\">\n  <svg></svg>\n  @if (showContentLoadError && showNoDataMsg) {\n    <div class=\"wm-content-info readonly-wrapper\">\n      <p class=\"wm-message\" [title]=\"hintMsg\" [ngClass]=\"{'error': invalidConfig}\" [innerText]=\"errMsg\"></p>\n    </div>\n  }\n  <div wmSpinner show.bind=\"isLoadInProgress\" caption.bind=\"loadingdatamsg\"></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;AAEO,MAAM,aAAa,GAAG,MAAK;AAC9B,IAAA,QAAQ,CACJ,UAAU,EACV,IAAI,GAAG,CACH;QACI,CAAC,aAAa,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,EAAC,CAAC;QAChD,CAAC,mBAAmB,EAAE,WAAW,CAAC;QAClC,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,EAAC,CAAC;QAClD,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAC,CAAC;QACjD,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,aAAa,EAAE,WAAW,CAAC;QAC5B,CAAC,OAAO,EAAE,WAAW,CAAC;QACtB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC1B,CAAC,SAAS,EAAE,QAAQ,CAAC;QACrB,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAC,CAAC;QACjD,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,WAAW,EAAC,CAAC;QACxC,CAAC,SAAS,EAAE,WAAW,CAAC;QACxB,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;QACzC,CAAC,iBAAiB,EAAE,YAAY,CAAC;QACjC,CAAC,WAAW,EAAE,WAAW,CAAC;QAC1B,CAAC,eAAe,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAC,CAAC;QACpD,CAAC,gBAAgB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,EAAC,CAAC;QACjD,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QACjD,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QAClD,CAAC,eAAe,EAAE,WAAW,CAAC;QAC9B,CAAC,gBAAgB,EAAE,EAAC,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,EAAC,CAAC;QACzD,CAAC,MAAM,EAAE,WAAW,CAAC;QACrB,CAAC,eAAe,EAAE,EAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,WAAW,EAAC,CAAC;QAChE,CAAC,QAAQ,EAAE,WAAW,CAAC;QACvB,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QAC7C,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QAC3C,CAAC,aAAa,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QAC5C,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QAC1C,CAAC,SAAS,EAAE,WAAW,CAAC;QACxB,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QAChD,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAC,CAAC;QAC5C,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QACxC,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QAClD,CAAC,mBAAmB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QACrD,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,WAAW,EAAC,CAAC;QAC9C,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAC,CAAC;QAC/C,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QAC7C,CAAC,eAAe,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAC,CAAC;QAClD,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QAC7C,CAAC,eAAe,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAC,CAAC;QAClD,CAAC,eAAe,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAC,CAAC;QAClD,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,OAAO,EAAE,WAAW,CAAC;QACtB,CAAC,OAAO,EAAE,WAAW,CAAC;QACtB,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;QAC5C,CAAC,MAAM,EAAE,WAAW,CAAC;QACrB,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QAChD,CAAC,cAAc,EAAE,WAAW,CAAC;QAC7B,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,oBAAoB,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QACnD,CAAC,aAAa,EAAE,WAAW,CAAC;QAC5B,CAAC,SAAS,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QAC/C,CAAC,eAAe,EAAE,WAAW,CAAC;QAC9B,CAAC,QAAQ,EAAE,WAAW,CAAC;QACvB,CAAC,cAAc,EAAE,WAAW,CAAC;QAC7B,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,oBAAoB,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,WAAW,EAAC,CAAC;QACnD,CAAC,SAAS,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAC,CAAC;QAC/C,CAAC,eAAe,EAAE,WAAW,CAAC;QAC9B,CAAC,QAAQ,EAAE,WAAW;AACzB,KAAA,CACJ,CACJ;AACL,CAAC;;ACjED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;AAG7C,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EACpG,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,CAAC;AAExF,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,EACvD,MAAM,GAAG;AACL,IAAA,aAAa,EAAE;AACX,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,WAAW,EAAE;AACT,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,WAAW,EAAE;AACT,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA,YAAY,EAAE;AACV,QAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACpO,QAAA,OAAO,EAAE;AACL,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,WAAW,EAAE;AAChB;AACJ;AACJ,CAAA,EACD,eAAe,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe;AAC9G,IAAA,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY;IACjJ,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW;IACnN,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,EACvK,aAAa,GAAG;AACZ,IAAA,OAAO,EAAG,GAAG;AACb,IAAA,QAAQ,EAAG,GAAG;AACd,IAAA,OAAO,EAAG;AACb,CAAA,EACD,aAAa,GAAG;AACZ,IAAA,OAAO,EAAG,GAAG;AACb,IAAA,QAAQ,EAAG,GAAG;AACd,IAAA,OAAO,EAAG;AACb,CAAA,EACD,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,EAC3C,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,EAC3C,WAAW,GAAG;AACV,IAAA,UAAU,EAAE;AACR,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA,SAAS,EAAG;AACR,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA,SAAS,EAAG;AACR,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,SAAS,EAAE;AACd;CACJ,EACD,OAAO,GAAG,gBAAgB,EAC1B,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;AAClE,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC;AACpD,aAAa,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAC3C,WAAW,GAAG;AACV,IAAA,QAAQ,EAAG,QAAQ;AACnB,IAAA,QAAQ,EAAG,MAAM;AACjB,IAAA,QAAQ,EAAG,SAAS;AACpB,IAAA,QAAQ,EAAG;CACd;AAEL;AACO,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAEhD;AACO,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,KAAK,MAAM;AAElD;AACO,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAEhD;AACO,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,KAAK,OAAO;AAEpD;AACO,MAAM,aAAa,GAAG,IAAI,IAAI,IAAI,KAAK,QAAQ;AAEtD;AACO,MAAM,aAAa,GAAG,IAAI,IAAI,IAAI,KAAK,QAAQ;AAEtD;AACO,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,KAAK,MAAM;AAElD;AACO,MAAM,SAAS,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;AAEvE;AACO,MAAM,eAAe,GAAG,IAAI,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;AAElG;AACO,MAAM,gBAAgB,GAAG,IAAI,IAAI,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC;AAErE;AACO,MAAM,eAAe,GAAG,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;AAErE;AACO,MAAM,qBAAqB,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;AAErF;AACO,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,KAAI;AAC9C,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,QAAA,OAAO,aAAa,CAAC,KAAK,CAAC;IAC/B;AACA,IAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAChB,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC;IACrC;AACJ,CAAC;AAED;AACO,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,IAAI,KAAI;AAC1C,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,QAAA,OAAO,aAAa,CAAC,KAAK,CAAC;IAC/B;AACA,IAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAChB,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC;IACrC;AACJ,CAAC;AAED;AACO,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,KAAI;IAClE,MAAM,YAAY,GAAQ,EAAE;IAC5B,QAAQ,UAAU;AACd,QAAA,KAAK,MAAM;AACP,YAAA,YAAY,CAAC,UAAU,GAAG,KAAK;YAC/B;AACJ,QAAA,KAAK,QAAQ;AACT,YAAA,YAAY,CAAC,UAAU,GAAG,IAAI;AAC9B,YAAA,YAAY,CAAC,iBAAiB,GAAG,KAAK;YACtC;AACJ,QAAA,KAAK,SAAS;AACV,YAAA,YAAY,CAAC,UAAU,GAAG,IAAI;AAC9B,YAAA,YAAY,CAAC,iBAAiB,GAAG,IAAI;YACrC;;AAER,IAAA,OAAO,YAAY;AACvB,CAAC;AAED;AACO,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,KAAI;AAChE,IAAA,IAAI,YAAY,GAAG,EAAE,EACjB,aAAa,GAAG,EAAE,EAClB,YAAY,GAAG,EAAE,EACjB,kBAAkB,GAAG,EAAE,EACvB,mBAAmB,GAAG,EAAE,EACxB,kBAAkB,GAAG,EAAE,EACvB,mBAAmB,GAAG,EAAE,EACxB,oBAAoB,GAAG,EAAE,EACzB,mBAAmB,GAAG,EAAE,EACxB,IAAI,GAAG,EAAE;IACb,QAAQ,QAAQ;AACZ,QAAA,KAAK,YAAY;AACb,YAAA,YAAY,GAAG;AACX,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO;aACnC;AACD,YAAA,aAAa,GAAG;AACZ,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO;aACnC;AACD,YAAA,YAAY,GAAG;AACX,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAC;AACjC,gBAAA,EAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO;aACnC;YACD,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,gBAAA,MAAM,EAAE,YAAY;gBACpB,GAAG,EAAE,WAAW,CAAC;aACpB;AACD,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,aAAa;oBACrB,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;AACA,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,YAAY;oBACpB,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;YACA;AACJ,QAAA,KAAK,iBAAiB;AAClB,YAAA,YAAY,GAAG;AACX,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO;aACxB;AACD,YAAA,aAAa,GAAG;AACZ,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO;aACxB;AACD,YAAA,YAAY,GAAG;AACX,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAC;AACtB,gBAAA,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO;aACxB;YACD,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,gBAAA,MAAM,EAAE,YAAY;gBACpB,GAAG,EAAE,WAAW,CAAC;aACpB;AACD,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,aAAa;oBACrB,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;AACA,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,YAAY;oBACpB,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;YACA;AACJ,QAAA,KAAK,aAAa;AACd,YAAA,kBAAkB,GAAG;gBACjB,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO;aACd;AACD,YAAA,mBAAmB,GAAG;gBAClB,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO;aACd;AACD,YAAA,kBAAkB,GAAG;gBACjB,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACZ,CAAC,CAAC,EAAE,OAAO;aACd;YACD,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,gBAAA,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,EAAE,WAAW,CAAC;aACpB;AACD,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,mBAAmB;oBAC3B,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;AACA,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,kBAAkB;oBAC1B,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;YACA;AACJ,QAAA,KAAK,cAAc;YACf,KAAK,GAAG,KAAK,KAAK,QAAQ,GAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK;AAC7F,YAAA,mBAAmB,GAAG;AAClB,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,IAAI,EAAG,GAAG,EAAE,OAAO,EAAI,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK;aAC1D;AACD,YAAA,oBAAoB,GAAG;AACnB,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK;aAC1D;AACD,YAAA,mBAAmB,GAAG;AAClB,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAI,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxD,gBAAA,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK;aAC1D;YACD,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,gBAAA,MAAM,EAAE,mBAAmB;gBAC3B,GAAG,EAAE,WAAW,CAAC;aACpB;AACD,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,oBAAoB;oBAC5B,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;AACA,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG;AACN,oBAAA,MAAM,EAAE,mBAAmB;oBAC3B,GAAG,EAAE,WAAW,CAAC;iBACpB;YACL;YACA;AACJ,QAAA,KAAK,gBAAgB;AACjB,YAAA,IAAI,GAAG;gBACH,EAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAC;gBACvC,EAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAC;gBACvC,EAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAC;gBACvC,EAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO;aACzC;YACD;;AAER,IAAA,OAAO,IAAI;AACf,CAAC;AAEM,MAAM,WAAW,GAAG,aAAa,IAAG;AACvC,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI;AAC/B,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;AACnB,QAAA,OAAO,iBAAiB;IAC5B;AACA,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,QAAA,OAAO,gBAAgB;IAC3B;AACA,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACrB,QAAA,OAAO,cAAc;IACzB;AACA,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,aAAa;AAC/D,CAAC;AAED;AACO,MAAM,aAAa,GAAG,aAAa,IAAI,mBAAmB,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC;AAEjK;AACO,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,IAAI,KAAI;AACrD,IAAA,IAAI,aAAa,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;AACzF,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;AAED;AACO,MAAM,oBAAoB,GAAG,MAAM,IAAG;AACzC,IAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAC9C,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;AAEM,MAAM,iBAAiB,GAAG,KAAK,IAAG;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9B;AACgD;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AAC9D,CAAC;AAED;AACO,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,eAAe,KAAI;IACnD,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IACvF,IAAI,eAAe,EAAE;AACjB,QAAA,QAAQ,CAAC,SAAS,CAAC,WAAW;AACzB,aAAA,KAAK,CAAC,cAAc,EAAE,KAAK;AAC3B,aAAA,KAAK,CAAC,cAAc,EAAE,MAAM;AAC5B,aAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACxC;SAAO;AACH,QAAA,QAAQ,CAAC,SAAS,CAAC,WAAW;AACzB,aAAA,KAAK,CAAC,cAAc,EAAE,KAAK;AAC3B,aAAA,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;IACnC;AACJ,CAAC;AAED;AACO,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,SAAS,KAAI;IAC9C,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AACvF,IAAA,SAAS,GAAG,SAAS,IAAI,GAAG;IAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC;AAE5C,IAAA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACpB,QAAA,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC;IAC1C;AACJ,CAAC;AAED;AACO,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,gBAAgB,KAAI;IAC9D,IAAI,CAAC,gBAAgB,IAAI,aAAa,CAAC,gBAAgB,CAAC,EAAE;QACtD,gBAAgB,GAAG,EAAE;IACzB;AACA,IAAA,OAAO,CAAC,eAAe,EAAE,IAAI,IAAG;QAC5B,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE;YACrC,gBAAgB,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;QAChD;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,gBAAgB;AAC3B,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAI;IAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK;AACxE,CAAC;AAED;AACO,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,CAAC,KAAI;AACjD,IAAA,UAAU,GAAG,UAAU,IAAI,IAAI;AAC/B;;;;;AAKG;AACH,IAAA,IAAG,UAAU,IAAI,IAAI,EAAE;QACnB,UAAU,GAAG,gBAAgB;IACjC;IACA,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACpF,CAAC;AACD,MAAM,mBAAmB,GAAG,KAAK,IAAG;IAChC,IAAG,CAAC,KAAK,EAAE;AACP,QAAA,OAAO,KAAK;IAChB;;AAEA,IAAA,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK;;AAGxE,IAAA,OAAO,WAAW,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,OAAO,CAAC;AACrG,CAAC;AAED;AACO,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,CAAC,KAAI;AACrD,IAAA,IAAI,aAAa,EACb,OAAO,EACP,MAAM;;IAEV,IAAI,YAAY,EAAE;AACd,QAAA,IAAI,eAAe;AACnB,QAAA,IAAG,YAAY,IAAI,UAAU,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,EAAE;AACrF,YAAA,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC;AAAO,aAAA,IAAG,YAAY,IAAI,GAAG,EAAE;AAC3B,YAAA,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC;AAAM,aAAA,IAAG,YAAY,IAAI,IAAI,EAAE;AAC3B,YAAA,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC;aAAO;AACH,YAAA,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QAC7C;AACA,QAAA,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;;AAIlC,QAAA,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,OAAO,KAAK,CAAC;AAC/E,QAAA,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM;AACtE,QAAA,IAAI,MAAM,IAAI,OAAO,KAAK,CAAC,EAAE;AACzB,YAAA,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,MAAM;QAC1D;IACJ;SAAO;;QAEH,aAAa,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD;AACA,IAAA,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC;AAClD,IAAA,OAAO,aAAa;AACxB,CAAC;AAED;AACO,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,KAAK,KAAI;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC,EACjD,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC;AACnD,IAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AAC1B,QAAA,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5D;SAAO;AACH,QAAA,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5D;AACJ,CAAC;AAEM,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,KAAI;AAChE,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,EACrD,QAAQ,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,OAAO,EACzC,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC,EACpD,aAAa,GAAG,CAAC;;AAErB,IAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7C;IACJ;AACA,IAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACvB,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAC/E,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,EACxC,aAAa,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,EAClG,WAAW,GAAG,wCAAwC,CAAC,IAAI,CAAC,aAAa,CAAC,EAC1E,cAAc,GAAG,MAAK;AAClB,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACtF,YAAA,IAAI,WAAW,KAAK,CAAC,EAAE;gBACnB,WAAW,IAAI,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,gBAAgB,GAAG,EAAE,CAAC,CAAC;YACpG;AACA,YAAA,OAAO,WAAW;AACtB,QAAA,CAAC;AACL,QAAA,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,IAAI,cAAc,EAAE,GAAG,gBAAgB,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC;QAC5G,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;QACrF;IACJ;AACJ,CAAC;AAED;AACO,MAAM,YAAY,GAAG,KAAK,IAAG;;IAEhC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,EAAE;AACtC,QAAA,OAAO,KAAK;IAChB;IACA,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AACpC,QAAA,OAAO,IAAI;IACf;;IAEA,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI;AAC1C,CAAC;AAED;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAM,KAAI;AAC/E,IAAA,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,YAAY,KAAI;QACjD,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM;QAC/B,MAAM,GAAG,qBAAqB,CAAC,YAAY,EAAE,aAAa,IAAI,aAAa,EAAE,aAAa,IAAI,gBAAgB,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1I,QAAA,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,GAAG,EAAE;QACf;AACA,QAAA,OAAO,SAAS;YACZ,SAAS;AACT,YAAA,uBAAuB,GAAG,MAAM;YAChC,WAAW;YACX,MAAM;AACN,YAAA,8DAA8D,GAAG,GAAG,CAAC,KAAK,GAAG,gBAAgB;YAC7F,kBAAkB,GAAG,KAAK,GAAG,OAAO;YACpC,oBAAoB,GAAG,MAAM,GAAG,OAAO;YACvC,OAAO;YACP,UAAU;AACV,YAAA,UAAU;AAClB,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACO,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,KAAI;AAClG,IAAA,gBAAgB,GAAI,cAAc,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACnE,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAC3E,UAAU,EAAE,UAAU,EAAE,kBAAkB;AAC9C,IAAA,MAAM,MAAM,GAAQ,EAAE,EAAE,MAAM,GAAQ,EAAE;AACxC,IAAA,QAAQ,aAAa,CAAC,IAAI;AACtB,QAAA,KAAK,QAAQ;AACT,YAAA,UAAU,GAAG,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,aAAa,CAAC,MAAM;AACpG,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa;iBAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACV,iBAAA,YAAY,CAAC,gBAAgB,CAAC,YAAY;iBAC1C,YAAY,CAAC,CAAC;iBACd,YAAY,CAAC,KAAK;AAClB,iBAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,KAAK,SAAS,GAAI,IAAI,GAAG,KAAK;iBAC/D,YAAY,CAAC,UAAU,CAAC;YAC7B;AACJ,QAAA,KAAK,iBAAiB;AAClB,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB;iBAChC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACX,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACX,YAAY,CAAC,KAAK;AAClB,iBAAA,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ;AACjD,iBAAA,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAChD;AACJ,QAAA,KAAK,MAAM;AACP,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;AACtB,iBAAA,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ;AACjD,iBAAA,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAChD;AACJ,QAAA,KAAK,MAAM;AACP,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB;iBAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,IAAI;iBACb,YAAY,CAAC,KAAK;AAClB,iBAAA,KAAK,CAAC,gBAAgB,CAAC,YAAY;AACnC,iBAAA,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ;AACjD,iBAAA,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAChD;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,UAAU,GAAG,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,aAAa,CAAC,MAAM;AACpG,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB;iBACpC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,YAAY,CAAC,KAAK;AAClB,iBAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,KAAK,SAAS,GAAI,IAAI,GAAG,KAAK;AAC/D,iBAAA,UAAU,CAAC,gBAAgB,CAAC,UAAU;iBACtC,YAAY,CAAC,UAAU,CAAC;YAC7B;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,OAAO;AACR,YAAA,WAAW,GAAG,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACtG,YAAA,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,aAAa,CAAC,MAAM;AAC5F,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ;iBACrB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACV,iBAAA,UAAU,CAAC,WAAW,CAAC,UAAU;AACjC,iBAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS;AACpC,iBAAA,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1B,iBAAA,KAAK,CAAC,gBAAgB,CAAC,WAAW;AAClC,iBAAA,cAAc,CAAC,gBAAgB,CAAC,cAAc,IAAI,IAAI;AACtD,iBAAA,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC;AACjD,YAAA,IAAI,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAClC,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI;qBACX,UAAU,CAAC,MAAM,CAAC;YAC3B;AACA,YAAA,IAAI,gBAAgB,CAAC,SAAS,KAAK,WAAW,EAAE;gBAC5C,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD;YACA;AACJ,QAAA,KAAK,QAAQ;AACT,YAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY;iBACzB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACV,iBAAA,SAAS,CAAC,gBAAgB,CAAC,aAAa;AACxC,iBAAA,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAC9C;;IAGR,IAAI,aAAa,EAAE;AACf,QAAA,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,QAAA,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;;AAExD,QAAA,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;;YAE9B,MAAM,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C;IACJ;IAEA,IAAI,aAAa,EAAE;;AAEf,QAAA,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,QAAA,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;;AAExD,QAAA,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;;YAE9B,MAAM,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C;IACJ;;IAGA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,UAAU,IAAI,gBAAgB,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;IAE1G,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAA,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa;aAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB;AAGA,IAAA,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;;AAE/B,QAAA,IAAI,gBAAgB,CAAC,SAAS,KAAK,SAAS,EAAE;YAC1C,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC;aAAO;AACH,YAAA,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACpF;;AAEA,QAAA,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC;IAC5D;SACK;AACD,QAAA,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS;AACrC,aAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC1C,QAAA,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC;;AAGjD,QAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU,IAAI,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,WAAW;AACrG,QAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU,IAAI,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,WAAW;;AAGrG,QAAA,IAAI,aAAa,CAAC,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAChF,kBAAkB,GAAG,IAAI;QAC7B;;QAEA,IAAI,CAAC,kBAAkB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC3D,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,CAAC;QACxE;;AAGA,QAAA,UAAU,IAAI,gBAAgB,CAAC,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;AAChF,QAAA,UAAU,IAAI,gBAAgB,CAAC,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;AAEhF,QAAA,KAAK,CAAC;aACD,SAAS,CAAC,UAAU;AACpB,aAAA,iBAAiB,CAAC,gBAAgB,CAAC,kBAAkB;AACrD,aAAA,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC;;AAGlD,QAAA,IAAI,gBAAgB,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;AACnF,YAAA,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAA,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAG;;oBAEvB,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;oBACvE,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;AACxE,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACrF;QACJ;AAAO,aAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AACvC,YAAA,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACzF;aAAO;AACH,YAAA,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;;AAErC,gBAAA,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7D;QACJ;AACA,QAAA,KAAK,CAAC;aACD,SAAS,CAAC,UAAU;AACpB,aAAA,iBAAiB,CAAC,gBAAgB,CAAC,kBAAkB;AACrD,aAAA,aAAa,CAAC,gBAAgB,CAAC,aAAa;AAC5C,aAAA,UAAU,CAAC,CAAC,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACrF;IACJ;;IAGA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE;QAC1E,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC;IACtD;AACA,IAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;AACxC,QAAA,MAAM,GAAG,gBAAgB,CAAC,YAAY;IAC1C;AAEA,IAAA,UAAU,GAAG,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACtD,IAAA,KAAK,CAAC,UAAU,CAAC,UAAU;SACtB,MAAM,CAAC,EAAC,GAAG,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAE,gBAAgB,CAAC,UAAU,EAAC;SACvJ,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAE1E,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAChD,aAAa,CAAC,OAAO,GAAG,gBAAgB,CAAC,aAAa,IAAI,eAAe;;AAEzE,IAAA,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;IAEnC,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,eAAe,EAAE;QACtE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;YAClC,UAAU,CAAC,MAAM,oBAAoB,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,aAAa,CAAC,UAAU,KAAK,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAC9F,QAAA,IAAG,aAAa,CAAC,UAAU,KAAK,OAAO,EAAE;AACrC,YAAA,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACjC;IACJ;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;AAED;AACO,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,SAAU,KAAI;AAC9D,IAAA,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,CAAC,GAAG;;AAE/C,IAAA,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACtC,QAAA,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC;AACjD,QAAA,eAAe,CAAC,EAAE,EAAE,aAAa,CAAC,eAAe,CAAC;IACrD;;;;;AAKJ,CAAC;AAED;AACO,MAAM,WAAW,GAAG,MAAM,QAAQ;;ACnvBzC,MAAM,aAAa,GAAG,EAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAC;AAEtE,MAAM,OAAO,GAAG;AACR,IAAA,QAAQ,EAAG,CAAC,YAAY,EAAE,OAAO;AACpC,CAAA,EACD,IAAI,GAAG,MAAM,EACb,gBAAgB,GAAG,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,CAAC;AAC7E;AACA,mBAAmB,GAAG;AAClB,IAAA,QAAQ,EAAW,aAAa;AAChC,IAAA,KAAK,EAAc,UAAU;AAC7B,IAAA,MAAM,EAAa,2BAA2B;AAC9C,IAAA,iBAAiB,EAAE,kDAAkD;AACrE,IAAA,MAAM,EAAa,6CAA6C;AAChE,IAAA,KAAK,EAAc,6BAA6B;AAChD,IAAA,OAAO,EAAY,6BAA6B;AAChD,IAAA,QAAQ,EAAW;AACtB,CAAA;AACD;AACA,UAAU,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,EACpC,UAAU,GAAG;AACT,IAAA,UAAU,EAAQ,WAAW;AAC7B,IAAA,UAAU,EAAQ,WAAW;AAC7B,IAAA,OAAO,EAAW,MAAM;AACxB,IAAA,YAAY,EAAM,aAAa;AAC/B,IAAA,YAAY,EAAM,aAAa;AAC/B,IAAA,WAAW,EAAO,YAAY;AAC9B,IAAA,gBAAgB,EAAE;AACrB,CAAA;AACD;AACA,gBAAgB,GAAG;AACf,IAAA,SAAS,EAAG,KAAK;AACjB,IAAA,OAAO,EAAK,OAAO;AACnB,IAAA,SAAS,EAAG,KAAK;AACjB,IAAA,SAAS,EAAG,KAAK;AACjB,IAAA,KAAK,EAAO;CACf;AAEL,MAAM,eAAe,GAAG,GAAG,IAAG;IAC1B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,EAAE;AAChC,QAAA,OAAO,IAAI;IACf;IACA,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,EAAE;AAClC,QAAA,OAAO,KAAK;IAChB;AACA,IAAA,OAAO,GAAG;AACd,CAAC;AAED;AACA,MAAM,sBAAsB,GAAG,OAAO,IAAG;AACrC,IAAA,IAAI,OAAO;AACX,IAAA,MAAM,cAAc,GAAG,EAAE,EACrB,MAAM,GAAG,EAAE;IAEf,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,EAAA;AACtC,QAAA,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;QACzB,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,IAAA,CAAC,CAAC;IACF,OAAO;AACH,QAAA,SAAS,EAAG,cAAc;AAC1B,QAAA,QAAQ,EAAI;KACf;AACL,CAAC;AAED;AACA,MAAM,iBAAiB,GAAG,SAAS,IAAI,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI;AAEvF;AACA,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,EAAE,KAAI;AACpC,IAAA,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACvE,IAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE;AACpB,QAAA,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B;AACJ,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,IAAG;AACd,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE;AACzD,IAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAC/B,CAAC;AAaK,MAAO,cAAe,SAAQ,iBAAiB,CAAA;AAC1C,IAAA,SAAA,IAAA,CAAA,eAAe,GAAG,aAAa,EAAhB,CAAmB;IAoDzC,gBAAgB,GAAA;AACZ,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IACpD;;IAGA,WAAW,GAAA;;AAEP,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;IAC7E;;IAGA,oBAAoB,GAAA;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;IAC/F;;IAGA,sBAAsB,GAAA;AAClB;;;AAGI;AAEJ,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC;IACnF;AAEA;;AAEgC;AAChC,IAAA,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAA;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;;AAEhC,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;;AAEjE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE5B,YAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACvB,gBAAA,OAAO,KAAK;YAChB;iBAAO;AACH,gBAAA,OAAO,KAAK;YAChB;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,gBAAgB,CAAC,KAAK,EAAA;QAClB,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;QACA,MAAM,OAAO,GAAQ,EAAE;AACvB;;;;;;;;AAQE;QACF,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9E;;;;;;;;AAQG;QACH,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,OAAO,OAAO;IAClB;;AAGA,IAAA,gBAAgB,CAAC,KAAK,EAAA;QAClB,MAAM,OAAO,GAAQ,EAAE,EACnB,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,EAAE;QAClB,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA;;;;;;;;;;;;AAYG;AAEH,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,IAAG;YAClB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,UAAU,EAAA;gBAClD,OAAO,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,UAAU,EAAA;gBAClD,OAAO,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;AACP,QAAA,CAAC,CAAC;;QAEF,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,OAAO;IAClB;;AAGA,IAAA,YAAY,CAAC,MAAM,EAAA;QACf,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,GAAG,MAAM;IACzE;;IAGA,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAM,EAAE,KAAM,EAAA;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,EAC/C,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAC1B,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,EACjC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,SAAS,GAAQ,EAAE;AAEvB,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,SAAS,CAAC,CAAC,GAAG,IAAI;AAClB,YAAA,SAAS,CAAC,CAAC,GAAG,IAAI;;AAElB,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1B,gBAAA,SAAS,CAAC,IAAI,GAAG,IAAI;AACrB,gBAAA,SAAS,CAAC,KAAK,GAAG,KAAK,IAAI,QAAQ;YACvC;QACJ;AAAO,aAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpC,YAAA,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B;;AAEA,QAAA,SAAS,CAAC,QAAQ,GAAG,OAAO;AAC5B,QAAA,OAAO,SAAS;IACpB;;AAGA,IAAA,SAAS,CAAC,OAAO,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAEzB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;;AAErC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW,EAAE;YAChC,OAAO,IAAI,CAAC,UAAU;QAC1B;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC3C,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,IAAI,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,MAAM,GAAQ,EAAE,EAChB,MAAM,GAAQ,EAAE;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAC9B,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EACjE,OAAO,GAAG,IAAI,CAAC,SAAS;AAE5B,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AAClB,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtB,gBAAA,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;gBACvB,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,KAAI;oBACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,wBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAC/D;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACpC;iBAAO;AACH,gBAAA,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1B,oBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK;gBAC7D;gBACA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAI;oBACnC,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,KAAI;wBACrC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,4BAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;wBACzH;AACJ,oBAAA,CAAC,CAAC;AACF,oBAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC;AACP,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,GAAG,EAAE,cAAc,CAAC,QAAQ;AAC/B,qBAAA,CAAC;AACN,gBAAA,CAAC,CAAC;YACN;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,YAAY,CAAC,IAAI,EAAA;QACb,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC9B;IACJ;IAEA,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,cAAc;IAC9B;;IAGA,sBAAsB,CAAC,aAAa,EAAE,cAAc,EAAA;QAChD,IAAI,SAAS,GAAQ,EAAE,EACnB,WAAW,GAAQ,EAAE,EACrB,cAAc,EACd,SAAS;QACb,MAAM,SAAS,GAAQ,EAAE,EACrB,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,YAAA,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC;QACzF;AACA,QAAA,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC;;QAEtD,IAAI,YAAY,EAAE;AACd,YAAA,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1D;QACA,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAI;YACxC,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACnE,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAI;AAClC,gBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC;AACpF,YAAA,CAAC,CAAC;AACF,YAAA,SAAS,GAAG;AACR,gBAAA,GAAG,EAAG,QAAQ;AACd,gBAAA,MAAM,EAAG;aACZ;AACD,YAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA;AACmI;IACnI,kBAAkB,GAAA;QACd,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;AACzD,YAAA,IAAI,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,GAAQ,EAAE,EACjB,mBAAmB;YACvB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EACvF,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AAErE,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACnC,oBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;wBACrE,iBAAiB,GAAG,IAAI;wBACxB,oBAAoB,GAAG,MAAM;wBAC7B,mBAAmB,GAAG,KAAK;AAC3B,wBAAA,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC7C,wBAAA,OAAO,KAAK;oBAChB;AACA,oBAAA,OAAO,IAAI;AACf,gBAAA,CAAC,CAAC;;gBAEF,IAAI,oBAAoB,EAAE;AACtB,oBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBACtC;AAEA,gBAAA,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,oBAAA,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;gBAC7C;YACJ;;YAEA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,iBAAiB,EAAE;AAC9C,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YACnC;AACA,YAAA,OAAO,CAAC,SAAS,EAAE,GAAG,IAAG;AACrB,gBAAA,IAAI,GAAG,KAAK,IAAI,CAAC,iBAAiB,EAAE;AAChC,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrB;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,kBAAkB,GAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEvC,YAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;YAE1C,OAAO;AACH,gBAAA,UAAU,EAAE,kBAAkB;AAC9B,gBAAA,iBAAiB,EAAE,iBAAiB;AACpC,gBAAA,oBAAoB,EAAE;aACzB;QACL;QACA,OAAO;AACH,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,oBAAoB,EAAE;SACzB;IACL;;AAGA,IAAA,iBAAiB,CAAC,QAAQ,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,UAAU,EACjC,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EACjE,IAAI,GAAQ,EAAE;AAClB,QAAA,IAAI,QAAQ,EACR,OAAO,GAAQ,EAAE,EACjB,QAAQ,EACR,cAAc,EACd,aAAa,GAAQ,EAAE;QAE3B,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;QAC5C;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;AAC3C,YAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACxE,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO;;YAE7D,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,GAAG,IAAG;AACjD,gBAAA,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC;;gBAEjC,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC;AAC/C,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;;AAE7B,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;YAClC,IAAI,CAAC,YAAY,GAAI;AACjB,gBAAA;oBACI,OAAO,EAAE,IAAI,CAAC,iBAAiB;AAC/B,oBAAA,MAAM,EAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3C,oBAAA,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,iBAAiB;AACpD;aACJ;QACL;;AAEA,QAAA,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE;AAClC,YAAA,cAAc,EAAG,IAAI;AACrB,YAAA,MAAM,EAAW;AACpB,SAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAG;;YAEf,MAAM,SAAS,GAAQ,EAAE,EACrB,gBAAgB,GAAQ,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACjE,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,EACpD,cAAc,GAAG,EAAE;AAEvB,YAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE/E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,eAAe,KAAI;gBAC/C,MAAM,GAAG,GAAG,EAAE;;AAEd,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAC7B,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,eAAe,CAAC,gBAAgB,CAAC;oBAC/D,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBACxH;gBAEA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;gBAEvG,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;oBAClC,GAAG,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtD,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC;AACjG,gBAAA,CAAC,CAAC;AAEF,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAE1B,SAAS,CAAC,QAAQ,CAAC;QACvB,CAAC,EAAE,MAAK;AACJ,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC;YAC1C,SAAS,CAAC,QAAQ,CAAC;AACvB,QAAA,CAAC,CAAC;IACN;;IAGA,iBAAiB,GAAA;QACb,IAAI,MAAM,EACN,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,UAAU;QACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,EAC9C,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;QAEtC,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGrF,MAAM,CAAC,IAAI,CAAC,YAAA;AACR,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;YACrB,IAAI,UAAU,EACV,QAAQ;AACZ,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;AAC9C,gBAAA,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACxD,gBAAA,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5C,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACxC,gBAAA,IAAI,CAAC,UAAU,IAAI,KAAK,GAAG,CAAC,EAAE;oBAC1B,QAAQ,GAAG,KAAK;gBACpB;AAAO,qBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBAClB,QAAQ,GAAG,KAAK;gBACpB;gBACA,IAAI,SAAS,EAAE;AACX,oBAAA,SAAS,GAAG,QAAQ,GAAG,SAAS;AAChC,oBAAA,OAAO,KAAK;gBAChB;gBACA,SAAS,GAAG,QAAQ;AACpB,gBAAA,OAAO,IAAI;YACf;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,gCAAgC,CAAC,CAAC,CAAC,CAAC;AAC3E,YAAA,YAAY,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;AACtE,YAAA,UAAU,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEjD,YAAA,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC;;YAExE,oBAAoB,GAAG,YAAY,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK;;YAEtK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,QAAQ,CAAC;;;AAGvD,YAAA,IAAI,SAAS,GAAG,QAAQ,EAAE;;AAEtB,gBAAA,WAAW,GAAG,WAAW,GAAG,QAAQ;;AAEpC,gBAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC;;AAE3D,gBAAA,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAA;;AAEhH,oBAAA,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,EAAE;AACtB,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACtC;AACJ,gBAAA,CAAC,CAAC;YACN;QACJ;aAAO;;YAEH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QAChD;;AAGA,QAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;QAE/B,MAAM,CAAC,IAAI,CAAC,YAAA;YACR,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,EAAE;AACrC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK;YACpE;AACJ,QAAA,CAAC,CAAC;IACN;;IAGA,iBAAiB,GAAA;AACb,QAAA,IAAI,IAAI,EACJ,YAAY,EACZ,CAAC,EACD,IAAI;QACR,MAAM,cAAc,GAAG,EAAE,EACrB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE;QAEpF,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAClE,YAAA,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC/C,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7C;AAAO,iBAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3C,gBAAA,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACvC;QACJ;;;AAGA,QAAA,IAAI,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACxE,YAAA,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC;AACxB,YAAA,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY;AAChC,YAAA,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;QAC5B;AAEA,QAAA,OAAO,cAAc;IACzB;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI,OAAO;QACX,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK;aAC5G,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,KAAI;AAChC,YAAA,QAAQ,IAAI,CAAC,IAAI;AACb,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,KAAK;AACN,oBAAA,OAAO,GAAG,IAAI,CAAC,QAAQ;oBACvB;AACJ,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,OAAO;AACR,oBAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAC5B;AACJ,gBAAA,KAAK,MAAM;AACX,gBAAA,KAAK,iBAAiB;AACtB,gBAAA,KAAK,MAAM;AACP,oBAAA,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAC1B;AACJ,gBAAA,KAAK,QAAQ;oBACT,OAAO,GAAG,IAAI;oBACd;;AAER,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;AAC/B,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI,CAAC;AACtB,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IAEV;AAEA;;;;;;AAMK;AAEL,IAAA,eAAe,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU;QACd,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;QAE7B,oBAAoB,CAAC,IAAI,CAAC;QAE1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAChC;AACwD;;AAExD,YAAA,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;AACpD,YAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;AACnE,YAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;YAC7D,UAAU,GAAG,EAAE;AACf,YAAA,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;gBAC/B,SAAS,CAAC,IAAI,CAAC,YAAA;oBACX,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;wBACzC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC;AACF,gBAAA,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;oBACzB,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7B,oBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAClF,gBAAA,CAAC,CAAC;YACN;QACJ;;QAGA,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;YAC/B,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU,EAAE;gBAC1C,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YACnD;iBAAO;gBACH,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AAEhC;;;AAGK;QACL,SAAS,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAK;YACxC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE;gBAC3C,KAAK,CAAC,MAAM,EAAE;gBACd,oBAAoB,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,CAAC,iBAAiB,EAAE;gBAC5B;YACJ;iBAAO;;AAEH;;;AAGG;YACP;AACJ,QAAA,CAAC,CAAC;IACN;;IAGA,cAAc,GAAA;;;AAGV,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,KAAK;AACT,QAAA,IAAI,eAAe;QACnB,MAAM,cAAc,GAAQ,EAAE;QAE9B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC9B,gBAAA,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAG,EAAC,GAAG,EAAE,CAAC,EAAC,EAAG,KAAK,EAAG,EAAC,GAAG,EAAG,CAAC,EAAC,EAAC;YAC9H;AACA,YAAA,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC9B,gBAAA,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAG,EAAC,GAAG,EAAG,CAAC,EAAC,EAAE,KAAK,EAAG,EAAC,GAAG,EAAG,CAAC,EAAC,EAAC;YAC3H;QACJ;AAEA,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC;QACnF;;AAGA,QAAA,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9E,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;;YAE9B,MAAM,SAAS,GAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClF,YAAA,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;gBAC/B,SAAS,CAAC,MAAM,EAAE;YACtB;AACA,YAAA,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,eAAe,EAAG,KAAK,EAAC,CAAC;YACtF,IAAI,eAAe,EAAE;gBACjB,KAAK,GAAG,eAAe;YAC3B;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;YAElB,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM;AACnC,iBAAA,KAAK,CAAC,IAAI,CAAC,cAAc;AACzB,iBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,YAAA,OAAO,KAAK;QAChB;IACJ;;IAGA,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;;AAE7B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS;;AAG1E,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACjD;;QAEA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE;YAC5C;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAElB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;AAC9C,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC5B;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;QAC5B;AACA,QAAA,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAG,MAAK;AAC3C;;AAE2B;YAC3B,UAAU,CAAE,MAAK;gBACb,IAAI,CAAC,gBAAgB,EAAE;YAC3B,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IACjC;;AAEA,IAAA,IAAI,cAAc,GAAA;;AAEd,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU;AACnC,QAAA,OAAO,WAAW,IAAI,WAAW,CAAC,QAAQ,KAAK,iBAAiB;IACpE;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAE1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;;;AAGjD,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACjG,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD;AAAO,aAAA;;YAEH,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;gBAC7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,eAAe,CAAC,iBAAiB,EAAE;AAC9D,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,oBAAoB,CAAC;gBACtG;YAEJ;YACA,IAAI,CAAC,SAAS,EAAE;QACpB;IACJ;;IAGA,qBAAqB,GAAA;AACjB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;;;QAG/C,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI;QAC7C,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI;IACjD;IAEA,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAA;QAC5B,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAC3C,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM;QAC7B;AACA,QAAA,IAAI,UAAU;QACd,QAAQ,IAAI;AACR,YAAA,KAAK,cAAc;;AAEf,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;oBACzB,UAAU,GAAG,cAAc;gBAC/B;gBACA;AACJ,YAAA,KAAK,cAAc;;AAEf,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAC7B,UAAU,GAAG,UAAU;gBAC3B;AAAO,qBAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;AAE5B,oBAAA,UAAU,GAAG,IAAI,CAAC,cAAc;gBACpC;gBACA;AACJ,YAAA,KAAK,SAAS;;AAEV,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAChF,oBAAA,UAAU,GAAG,IAAI,CAAC,iBAAiB;gBACvC;gBACA;AACJ,YAAA,KAAK,mBAAmB;;AAEpB,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;AACpF,oBAAA,UAAU,GAAG,IAAI,CAAC,cAAc;gBACpC;gBACA;AACJ,YAAA,KAAK,SAAS;;gBAEV,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBACpD,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBACzD;gBACA;AACJ,YAAA,KAAK,YAAY;gBACb,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACnD,oBAAA,UAAU,GAAG,IAAI,CAAC,cAAc;gBACpC;gBACA;;AAGR,QAAA,OAAO,UAAU,IAAI,MAAM,IAAI,IAAI,CAAC,WAAW;IACnD;;IAGA,8BAA8B,GAAA;QAC1B,IAAI,OAAO,EACP,IAAI;AACR,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACtF,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;;QAE3B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACzC,YAAA,OAAO,GAAG,EAAE,CAAC;QACjB;QAEA,IAAI,OAAO,EAAE;;YAET,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAI;AAClC,gBAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI;AACxB,gBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjC;;AAEA,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE;AACnE,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpC;AACJ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAChD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAC1D;IACJ;;AAGA,IAAA,aAAa,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;;QAEhB,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;;AAGA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,MAAM;;AAGpI,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACtD,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC;AAEA,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;QAC3C;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;;AAKA,IAAA,mBAAmB,CAAC,UAAU,EAAA;QAC1B,IAAI,QAAQ,EAAE,SAAS;AACvB,QAAA,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;AAEpD,QAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAChE,QAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,SAAS,CAAC,MAAM,CAAC,MAAM;AAClB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,aAAA,IAAI,CAAC,aAAa,EAAE,QAAQ;AAC5B,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc;aAC5B,IAAI,CAAC,UAAU;aACf,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,YAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAC5B,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EACpC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;;YAE9D,UAAU,GAAG,UAAU,GAAG,EAAE,EAC5B,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;AACnD,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,YAAA;;AAEpB,YAAA,IAAI,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AACtD,YAAA,OAAO,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI;AAC7C,QAAA,CAAC,CAAC;IACZ;AAEA,IAAA,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAO,EAAA;QACjC,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;QAC3C,QAAQ,GAAG;AACP,YAAA,KAAK,SAAS;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC1B;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACxB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBACpC;gBACA;AACJ,YAAA,KAAK,MAAM;;AAEP,gBAAA,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;gBACvB;qBAAO,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,EAAE;AAC/C,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;gBACxB;AAEA,gBAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACnB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBAC3B;;gBAEA,IAAI,CAAC,eAAe,EAAE;gBACtB;AACJ,YAAA;;gBAEI,IAAI,CAAC,eAAe,EAAE;gBACtB;;AAER,QAAA,IAAI,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;AAEA,IAAA,aAAa,CAAC,IAAI,EAAA;AACd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;QAClC,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AACrH,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM;QACvC;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD;AAEA,IAAA,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAA;QAC7B,MAAM,QAAQ,GAAG,EAAE;QACnB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;QACxC,QAAQ,GAAG;AACP,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,gBAAgB;AACjB,gBAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM;AAC/G,gBAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;gBAChC;;IAEZ;AAEA,IAAA,WAAA,CAAY,GAAa,EAAU,GAAQ,EAA0C,eAAoB,EAAA;AACrG,QAAA,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC;QADX,IAAA,CAAA,GAAG,GAAH,GAAG;QA/8BtC,IAAA,CAAA,SAAS,GAAG,EAAE;QA6BN,IAAA,CAAA,iBAAiB,GAAQ,EAAE;QAG3B,IAAA,CAAA,WAAW,GAAQ,EAAE;QAKrB,IAAA,CAAA,SAAS,GAAU,EAAE;QACrB,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,aAAa,GAAQ,EAAE;AAo0B/B,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAwK/D,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAlEpC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,iBAAiB,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;;QAG3J,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;;AAEzC,QAAA,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC;;QAElE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;QAEnG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,MAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;IAC7F;IAEA,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC3D,IAAI,CAAC,UAAU,GAAU,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YACzD,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAChE,IAAI,CAAC,UAAU,GAAU,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,GAAG,QAAQ,IAAI,MAAM;QACvG;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;AAEb,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,aAAa;QAC/D;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;;AAE3D,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;YACvE,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;IAEA,WAAW,GAAA;;QAEP,IAAI,CAAC,WAAW,EAAE;;AAGlB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,KAAG;AACvC,gBAAA,YAAY,EAAE;AAClB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAC3B;;AAGA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACrB;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;;AAGA,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAE3B,KAAK,CAAC,WAAW,EAAE;IACvB;AA5hCS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,6DAy9B8B,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAz9B9D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EALZ;YACP,kBAAkB,CAAC,cAAc;AACpC,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzIL,q0BAoBA,EAAA,MAAA,EAAA,CAAA,ilQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED+Gc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAS/B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;iCACM,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC/B,cAAc,EAAA,SAAA,EAGb;AACP,wBAAA,kBAAkB,CAAA,cAAA;qBACrB,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,q0BAAA,EAAA,MAAA,EAAA,CAAA,ilQAAA,CAAA,EAAA;;0BA29BS,MAAM;2BAAC,kBAAkB;;0BAAG;yCAt6B9C,KAAK,EAAA,CAAA;sBAAhC,WAAW;uBAAC,aAAa;;;AE/L9B;;AAEG;;;;"}