semiotic 3.0.0-beta.2 → 3.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +93 -753
- package/README.md +92 -7
- package/ai/dist/componentRegistry.js +26 -0
- package/ai/dist/{ai/mcp-server.js → mcp-server.js} +1 -1
- package/ai/dist/{ai/renderHOCToSVG.js → renderHOCToSVG.js} +2 -2
- package/dist/ChartContainer.d.ts +60 -0
- package/dist/DetailsPanel.d.ts +37 -0
- package/dist/LinkedCharts.d.ts +2 -0
- package/dist/Tooltip/Tooltip.d.ts +2 -2
- package/dist/charts/index.d.ts +1 -1
- package/dist/charts/ordinal/BarChart.d.ts +1 -0
- package/dist/charts/ordinal/BoxPlot.d.ts +1 -0
- package/dist/charts/ordinal/DonutChart.d.ts +1 -0
- package/dist/charts/ordinal/DotPlot.d.ts +1 -0
- package/dist/charts/ordinal/GroupedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/Histogram.d.ts +1 -0
- package/dist/charts/ordinal/PieChart.d.ts +1 -0
- package/dist/charts/ordinal/RidgelinePlot.d.ts +1 -0
- package/dist/charts/ordinal/StackedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/SwarmPlot.d.ts +1 -0
- package/dist/charts/ordinal/ViolinPlot.d.ts +1 -0
- package/dist/charts/realtime/RealtimeHeatmap.d.ts +11 -0
- package/dist/charts/realtime/RealtimeHistogram.d.ts +15 -1
- package/dist/charts/realtime/RealtimeLineChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeSwarmChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +6 -0
- package/dist/charts/shared/annotationRules.d.ts +3 -0
- package/dist/charts/shared/colorUtils.d.ts +17 -11
- package/dist/charts/shared/hooks.d.ts +96 -1
- package/dist/charts/shared/loess.d.ts +13 -0
- package/dist/charts/shared/networkUtils.d.ts +31 -0
- package/dist/charts/shared/tooltipUtils.d.ts +16 -0
- package/dist/charts/shared/types.d.ts +17 -2
- package/dist/charts/shared/validateChartData.d.ts +2 -3
- package/dist/charts/shared/validateProps.d.ts +18 -0
- package/dist/charts/xy/AreaChart.d.ts +4 -0
- package/dist/charts/xy/BubbleChart.d.ts +6 -0
- package/dist/charts/xy/Heatmap.d.ts +4 -0
- package/dist/charts/xy/LineChart.d.ts +6 -0
- package/dist/charts/xy/Scatterplot.d.ts +4 -0
- package/dist/charts/xy/StackedAreaChart.d.ts +4 -0
- package/dist/data/fromVegaLite.d.ts +48 -0
- package/dist/export/chartConfig.d.ts +29 -0
- package/dist/export/selectionSerializer.d.ts +20 -0
- package/dist/geometry/sankeyLinks.d.ts +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/realtime/types.d.ts +20 -6
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +14 -0
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-data.d.ts +2 -0
- package/dist/semiotic-data.min.js +1 -1
- package/dist/semiotic-data.module.min.js +1 -1
- package/dist/semiotic-network.d.ts +9 -19
- package/dist/semiotic-ordinal.d.ts +12 -14
- package/dist/semiotic-xy.d.ts +12 -18
- package/dist/semiotic.d.ts +16 -13
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/store/ObservationStore.d.ts +61 -0
- package/dist/store/SelectionStore.d.ts +9 -1
- package/dist/store/ThemeStore.d.ts +6 -1
- package/dist/store/TooltipStore.d.ts +3 -1
- package/dist/store/createStore.d.ts +4 -1
- package/dist/store/useObservation.d.ts +18 -0
- package/dist/stream/MarginalGraphics.d.ts +1 -1
- package/dist/stream/NetworkPipelineStore.d.ts +44 -0
- package/dist/stream/OrdinalCanvasHitTester.d.ts +1 -0
- package/dist/stream/OrdinalSVGOverlay.d.ts +6 -2
- package/dist/stream/ParticlePool.d.ts +2 -1
- package/dist/stream/PipelineStore.d.ts +11 -0
- package/dist/stream/SVGOverlay.d.ts +21 -2
- package/dist/stream/SceneGraph.d.ts +1 -1
- package/dist/stream/networkTypes.d.ts +58 -1
- package/dist/stream/ordinalTypes.d.ts +13 -0
- package/dist/stream/types.d.ts +14 -0
- package/dist/types/annotationTypes.d.ts +10 -0
- package/dist/types/networkTypes.d.ts +1 -2
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +30 -42
- package/ai/dist/ai/componentRegistry.js +0 -45
- package/ai/dist/src/components/Annotation.js +0 -358
- package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +0 -369
- package/ai/dist/src/components/Axis/Axis.js +0 -374
- package/ai/dist/src/components/Axis/axisTitle.js +0 -14
- package/ai/dist/src/components/Axis/index.js +0 -7
- package/ai/dist/src/components/Axis/summaryGraphic.js +0 -37
- package/ai/dist/src/components/Brush.js +0 -84
- package/ai/dist/src/components/ChartErrorBoundary.js +0 -91
- package/ai/dist/src/components/DividedLine.js +0 -65
- package/ai/dist/src/components/Legend.js +0 -140
- package/ai/dist/src/components/LinkedCharts.js +0 -95
- package/ai/dist/src/components/ThemeProvider.js +0 -79
- package/ai/dist/src/components/Tooltip/Tooltip.js +0 -309
- package/ai/dist/src/components/TooltipPositioner/index.js +0 -132
- package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +0 -73
- package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +0 -254
- package/ai/dist/src/components/annotationRules/baseRules.js +0 -150
- package/ai/dist/src/components/annotationRules/networkframeRules.js +0 -196
- package/ai/dist/src/components/annotationRules/xyframeRules.js +0 -297
- package/ai/dist/src/components/batchWork.js +0 -35
- package/ai/dist/src/components/charts/index.js +0 -109
- package/ai/dist/src/components/charts/network/ChordDiagram.js +0 -142
- package/ai/dist/src/components/charts/network/CirclePack.js +0 -108
- package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +0 -121
- package/ai/dist/src/components/charts/network/SankeyDiagram.js +0 -155
- package/ai/dist/src/components/charts/network/TreeDiagram.js +0 -110
- package/ai/dist/src/components/charts/network/Treemap.js +0 -106
- package/ai/dist/src/components/charts/ordinal/BarChart.js +0 -156
- package/ai/dist/src/components/charts/ordinal/BoxPlot.js +0 -139
- package/ai/dist/src/components/charts/ordinal/DonutChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/DotPlot.js +0 -126
- package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +0 -129
- package/ai/dist/src/components/charts/ordinal/Histogram.js +0 -132
- package/ai/dist/src/components/charts/ordinal/PieChart.js +0 -128
- package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +0 -130
- package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +0 -147
- package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +0 -138
- package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +0 -79
- package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +0 -114
- package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +0 -93
- package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +0 -105
- package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +0 -106
- package/ai/dist/src/components/charts/shared/ChartError.js +0 -72
- package/ai/dist/src/components/charts/shared/colorUtils.js +0 -138
- package/ai/dist/src/components/charts/shared/formatUtils.js +0 -213
- package/ai/dist/src/components/charts/shared/hooks.js +0 -49
- package/ai/dist/src/components/charts/shared/legendUtils.js +0 -57
- package/ai/dist/src/components/charts/shared/selectionUtils.js +0 -67
- package/ai/dist/src/components/charts/shared/tooltipUtils.js +0 -79
- package/ai/dist/src/components/charts/shared/types.js +0 -2
- package/ai/dist/src/components/charts/shared/validateChartData.js +0 -82
- package/ai/dist/src/components/charts/shared/validateProps.js +0 -736
- package/ai/dist/src/components/charts/xy/AreaChart.js +0 -230
- package/ai/dist/src/components/charts/xy/BubbleChart.js +0 -251
- package/ai/dist/src/components/charts/xy/Heatmap.js +0 -235
- package/ai/dist/src/components/charts/xy/LineChart.js +0 -307
- package/ai/dist/src/components/charts/xy/MinimapChart.js +0 -298
- package/ai/dist/src/components/charts/xy/Scatterplot.js +0 -172
- package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +0 -426
- package/ai/dist/src/components/charts/xy/StackedAreaChart.js +0 -231
- package/ai/dist/src/components/constants/coordinateNames.js +0 -11
- package/ai/dist/src/components/constants/frame_props.js +0 -251
- package/ai/dist/src/components/data/dataFunctions.js +0 -487
- package/ai/dist/src/components/data/multiAccessorUtils.js +0 -14
- package/ai/dist/src/components/data/transforms.js +0 -143
- package/ai/dist/src/components/data/unflowedFunctions.js +0 -5
- package/ai/dist/src/components/export/exportChart.js +0 -121
- package/ai/dist/src/components/generic_utilities/functions.js +0 -5
- package/ai/dist/src/components/geometry/areaDrawing.js +0 -312
- package/ai/dist/src/components/geometry/contourLayout.js +0 -73
- package/ai/dist/src/components/geometry/hexbinLayout.js +0 -163
- package/ai/dist/src/components/geometry/lineDrawing.js +0 -356
- package/ai/dist/src/components/geometry/sankeyLinks.js +0 -331
- package/ai/dist/src/components/geometry/summaryLayouts.js +0 -136
- package/ai/dist/src/components/index.js +0 -18
- package/ai/dist/src/components/processing/InteractionItems.js +0 -223
- package/ai/dist/src/components/processing/hierarchyUtils.js +0 -104
- package/ai/dist/src/components/processing/layouts/chordLayout.js +0 -58
- package/ai/dist/src/components/processing/layouts/forceLayout.js +0 -142
- package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +0 -31
- package/ai/dist/src/components/processing/layouts/index.js +0 -32
- package/ai/dist/src/components/processing/layouts/sankeyLayout.js +0 -96
- package/ai/dist/src/components/processing/layouts/simpleLayouts.js +0 -34
- package/ai/dist/src/components/processing/layouts/types.js +0 -2
- package/ai/dist/src/components/processing/networkDefaults.js +0 -39
- package/ai/dist/src/components/realtime/BinAccumulator.js +0 -36
- package/ai/dist/src/components/realtime/IncrementalExtent.js +0 -55
- package/ai/dist/src/components/realtime/RingBuffer.js +0 -104
- package/ai/dist/src/components/realtime/renderers/barRenderer.js +0 -133
- package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +0 -7
- package/ai/dist/src/components/realtime/renderers/lineRenderer.js +0 -164
- package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +0 -91
- package/ai/dist/src/components/realtime/renderers/types.js +0 -2
- package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +0 -163
- package/ai/dist/src/components/realtime/types.js +0 -2
- package/ai/dist/src/components/semiotic-ai.js +0 -89
- package/ai/dist/src/components/semiotic-data.js +0 -12
- package/ai/dist/src/components/semiotic-network.js +0 -38
- package/ai/dist/src/components/semiotic-ordinal.js +0 -28
- package/ai/dist/src/components/semiotic-realtime.js +0 -30
- package/ai/dist/src/components/semiotic-server.js +0 -8
- package/ai/dist/src/components/semiotic-xy.js +0 -35
- package/ai/dist/src/components/semiotic.js +0 -109
- package/ai/dist/src/components/server/renderToStaticSVG.js +0 -594
- package/ai/dist/src/components/store/SelectionStore.js +0 -91
- package/ai/dist/src/components/store/ThemeStore.js +0 -78
- package/ai/dist/src/components/store/TooltipStore.js +0 -13
- package/ai/dist/src/components/store/createStore.js +0 -81
- package/ai/dist/src/components/store/useSelection.js +0 -133
- package/ai/dist/src/components/stream/CanvasHitTester.js +0 -164
- package/ai/dist/src/components/stream/DataSourceAdapter.js +0 -99
- package/ai/dist/src/components/stream/MarginalGraphics.js +0 -266
- package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +0 -228
- package/ai/dist/src/components/stream/NetworkPipelineStore.js +0 -498
- package/ai/dist/src/components/stream/NetworkSVGOverlay.js +0 -70
- package/ai/dist/src/components/stream/NetworkSceneGraph.js +0 -38
- package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +0 -146
- package/ai/dist/src/components/stream/OrdinalPipelineStore.js +0 -786
- package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +0 -130
- package/ai/dist/src/components/stream/ParticlePool.js +0 -174
- package/ai/dist/src/components/stream/PipelineStore.js +0 -1243
- package/ai/dist/src/components/stream/SVGOverlay.js +0 -129
- package/ai/dist/src/components/stream/SceneGraph.js +0 -132
- package/ai/dist/src/components/stream/StreamNetworkFrame.js +0 -561
- package/ai/dist/src/components/stream/StreamOrdinalFrame.js +0 -492
- package/ai/dist/src/components/stream/StreamXYFrame.js +0 -590
- package/ai/dist/src/components/stream/accessorUtils.js +0 -20
- package/ai/dist/src/components/stream/index.js +0 -32
- package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +0 -352
- package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +0 -230
- package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +0 -568
- package/ai/dist/src/components/stream/layouts/index.js +0 -28
- package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +0 -245
- package/ai/dist/src/components/stream/networkTypes.js +0 -17
- package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +0 -126
- package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +0 -62
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +0 -33
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +0 -63
- package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +0 -278
- package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +0 -30
- package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +0 -2
- package/ai/dist/src/components/stream/ordinalTypes.js +0 -2
- package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +0 -48
- package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +0 -70
- package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +0 -75
- package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +0 -28
- package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +0 -31
- package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +0 -140
- package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +0 -37
- package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +0 -102
- package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +0 -63
- package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +0 -35
- package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +0 -10
- package/ai/dist/src/components/stream/renderers/types.js +0 -2
- package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +0 -33
- package/ai/dist/src/components/stream/types.js +0 -2
- package/ai/dist/src/components/types/annotationTypes.js +0 -2
- package/ai/dist/src/components/types/canvasTypes.js +0 -2
- package/ai/dist/src/components/types/generalTypes.js +0 -2
- package/ai/dist/src/components/types/interactionTypes.js +0 -2
- package/ai/dist/src/components/types/legendTypes.js +0 -2
- package/ai/dist/src/components/types/networkTypes.js +0 -2
- package/ai/dist/src/components/types/ordinalTypes.js +0 -2
- package/ai/dist/src/components/types/xyTypes.js +0 -2
- package/ai/dist/src/components/useBoundingRect.js +0 -24
- package/ai/dist/src/components/visualizationLayerBehavior/axis.js +0 -301
- package/ai/dist/src/components/visualizationLayerBehavior/general.js +0 -435
- package/ai/dist/src/setupTests.js +0 -4
- package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -25
- package/dist/Axis/Axis.d.ts +0 -7
- package/dist/Axis/axisTitle.d.ts +0 -10
- package/dist/Axis/index.d.ts +0 -2
- package/dist/Axis/summaryGraphic.d.ts +0 -17
- package/dist/Brush.d.ts +0 -12
- package/dist/DividedLine.d.ts +0 -16
- package/dist/TooltipPositioner/index.d.ts +0 -7
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +0 -19
- package/dist/annotationLayerBehavior/d3labeler.d.ts +0 -9
- package/dist/annotationRules/baseRules.d.ts +0 -25
- package/dist/annotationRules/networkframeRules.d.ts +0 -48
- package/dist/annotationRules/xyframeRules.d.ts +0 -117
- package/dist/batchWork.d.ts +0 -6
- package/dist/constants/coordinateNames.d.ts +0 -8
- package/dist/constants/frame_props.d.ts +0 -13
- package/dist/data/dataFunctions.d.ts +0 -45
- package/dist/data/multiAccessorUtils.d.ts +0 -1
- package/dist/data/unflowedFunctions.d.ts +0 -1
- package/dist/generic_utilities/functions.d.ts +0 -1
- package/dist/geometry/areaDrawing.d.ts +0 -21
- package/dist/geometry/contourLayout.d.ts +0 -6
- package/dist/geometry/hexbinLayout.d.ts +0 -7
- package/dist/geometry/lineDrawing.d.ts +0 -71
- package/dist/geometry/summaryLayouts.d.ts +0 -45
- package/dist/index.d.ts +0 -1
- package/dist/network.js +0 -7495
- package/dist/network.js.map +0 -1
- package/dist/network.module.js +0 -7458
- package/dist/network.module.js.map +0 -1
- package/dist/ordinal.js +0 -6497
- package/dist/ordinal.js.map +0 -1
- package/dist/ordinal.module.js +0 -6465
- package/dist/ordinal.module.js.map +0 -1
- package/dist/processing/InteractionItems.d.ts +0 -13
- package/dist/processing/hierarchyUtils.d.ts +0 -16
- package/dist/processing/layouts/chordLayout.d.ts +0 -2
- package/dist/processing/layouts/forceLayout.d.ts +0 -3
- package/dist/processing/layouts/hierarchyLayout.d.ts +0 -10
- package/dist/processing/layouts/index.d.ts +0 -8
- package/dist/processing/layouts/sankeyLayout.d.ts +0 -8
- package/dist/processing/layouts/simpleLayouts.d.ts +0 -7
- package/dist/processing/layouts/types.d.ts +0 -17
- package/dist/processing/networkDefaults.d.ts +0 -36
- package/dist/realtime/renderers/barRenderer.d.ts +0 -2
- package/dist/realtime/renderers/candlestickRenderer.d.ts +0 -2
- package/dist/realtime/renderers/lineRenderer.d.ts +0 -2
- package/dist/realtime/renderers/swarmRenderer.d.ts +0 -2
- package/dist/realtime.js +0 -7072
- package/dist/realtime.js.map +0 -1
- package/dist/realtime.module.js +0 -7043
- package/dist/realtime.module.js.map +0 -1
- package/dist/semiotic-ai.js +0 -13323
- package/dist/semiotic-ai.js.map +0 -1
- package/dist/semiotic-ai.module.js +0 -13264
- package/dist/semiotic-ai.module.js.map +0 -1
- package/dist/semiotic-data.js +0 -141
- package/dist/semiotic-data.js.map +0 -1
- package/dist/semiotic-data.module.js +0 -136
- package/dist/semiotic-data.module.js.map +0 -1
- package/dist/semiotic.js +0 -16351
- package/dist/semiotic.js.map +0 -1
- package/dist/semiotic.module.js +0 -16265
- package/dist/semiotic.module.js.map +0 -1
- package/dist/server.js +0 -5191
- package/dist/server.js.map +0 -1
- package/dist/server.module.js +0 -5166
- package/dist/server.module.js.map +0 -1
- package/dist/stream/NetworkSceneGraph.d.ts +0 -14
- package/dist/stream/index.d.ts +0 -16
- package/dist/types/canvasTypes.d.ts +0 -9
- package/dist/types/xyTypes.d.ts +0 -24
- package/dist/useBoundingRect.d.ts +0 -2
- package/dist/visualizationLayerBehavior/axis.d.ts +0 -36
- package/dist/visualizationLayerBehavior/general.d.ts +0 -80
- package/dist/xy.js +0 -6993
- package/dist/xy.js.map +0 -1
- package/dist/xy.module.js +0 -6957
- package/dist/xy.module.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semiotic.module.js","sources":["../src/components/stream/DataSourceAdapter.ts","../src/components/realtime/RingBuffer.ts","../src/components/realtime/IncrementalExtent.ts","../src/components/realtime/BinAccumulator.ts","../src/components/realtime/renderers/waterfallRenderer.ts","../src/components/stream/SceneGraph.ts","../src/components/stream/accessorUtils.ts","../src/components/stream/PipelineStore.ts","../src/components/stream/CanvasHitTester.ts","../src/components/Legend.tsx","../src/components/stream/MarginalGraphics.tsx","../src/components/stream/SVGOverlay.tsx","../src/components/stream/renderers/lineCanvasRenderer.ts","../src/components/stream/renderers/areaCanvasRenderer.ts","../src/components/stream/renderers/pointCanvasRenderer.ts","../src/components/stream/renderers/barCanvasRenderer.ts","../src/components/stream/renderers/swarmCanvasRenderer.ts","../src/components/stream/renderers/waterfallCanvasRenderer.ts","../src/components/stream/renderers/heatmapCanvasRenderer.ts","../src/components/stream/renderers/candlestickCanvasRenderer.ts","../src/components/stream/StreamXYFrame.tsx","../src/components/stream/ordinalSceneBuilders/barScene.ts","../src/components/stream/ordinalSceneBuilders/pointScene.ts","../src/components/stream/ordinalSceneBuilders/pieScene.ts","../src/components/stream/ordinalSceneBuilders/statisticalScene.ts","../src/components/stream/ordinalSceneBuilders/timelineScene.ts","../src/components/stream/ordinalSceneBuilders/connectorScene.ts","../src/components/stream/OrdinalPipelineStore.ts","../src/components/stream/OrdinalCanvasHitTester.ts","../src/components/stream/OrdinalSVGOverlay.tsx","../src/components/stream/renderers/wedgeCanvasRenderer.ts","../src/components/stream/renderers/boxplotCanvasRenderer.ts","../src/components/stream/renderers/violinCanvasRenderer.ts","../src/components/stream/renderers/connectorCanvasRenderer.ts","../src/components/stream/StreamOrdinalFrame.tsx","../src/components/stream/networkTypes.ts","../src/components/stream/ParticlePool.ts","../src/components/geometry/sankeyLinks.ts","../src/components/stream/layouts/sankeyLayoutPlugin.ts","../src/components/stream/layouts/forceLayoutPlugin.ts","../src/components/stream/layouts/chordLayoutPlugin.ts","../src/components/stream/layouts/hierarchyLayoutPlugin.ts","../src/components/stream/layouts/index.ts","../src/components/stream/NetworkPipelineStore.ts","../src/components/stream/NetworkCanvasHitTester.ts","../src/components/stream/NetworkSVGOverlay.tsx","../src/components/stream/renderers/networkRectRenderer.ts","../src/components/stream/renderers/networkCircleRenderer.ts","../src/components/stream/renderers/networkArcRenderer.ts","../src/components/stream/renderers/networkEdgeRenderer.ts","../src/components/stream/renderers/networkParticleRenderer.ts","../src/components/charts/shared/colorUtils.ts","../src/components/stream/StreamNetworkFrame.tsx","../src/components/annotationLayerBehavior/d3labeler.ts","../src/components/annotationLayerBehavior/annotationHandling.ts","../src/components/Annotation.tsx","../src/components/store/createStore.tsx","../src/components/store/TooltipStore.ts","../src/components/AnnotationLayer/helpers.js","../src/components/AnnotationLayer/AnnotationLayer.tsx","../src/components/geometry/lineDrawing.ts","../src/components/DividedLine.tsx","../src/components/visualizationLayerBehavior/axis.tsx","../src/components/Axis/summaryGraphic.tsx","../src/components/Axis/axisTitle.tsx","../src/components/charts/shared/formatUtils.ts","../src/components/geometry/summaryLayouts.tsx","../src/components/Axis/Axis.tsx","../src/components/Brush.tsx","../src/components/constants/coordinateNames.ts","../src/components/geometry/contourLayout.ts","../src/components/geometry/hexbinLayout.tsx","../src/components/geometry/areaDrawing.tsx","../src/components/data/unflowedFunctions.ts","../src/components/data/dataFunctions.ts","../src/components/processing/hierarchyUtils.ts","../src/components/charts/shared/legendUtils.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/charts/shared/tooltipUtils.tsx","../src/components/charts/shared/hooks.ts","../src/components/charts/shared/ChartError.tsx","../src/components/charts/shared/validateChartData.ts","../src/components/charts/shared/selectionUtils.ts","../src/components/store/SelectionStore.ts","../src/components/store/useSelection.ts","../src/components/charts/xy/Scatterplot.tsx","../src/components/charts/xy/LineChart.tsx","../src/components/charts/xy/AreaChart.tsx","../src/components/charts/xy/StackedAreaChart.tsx","../src/components/charts/xy/Heatmap.tsx","../src/components/charts/xy/BubbleChart.tsx","../src/components/LinkedCharts.tsx","../src/components/charts/xy/ScatterplotMatrix.tsx","../src/components/charts/xy/MinimapChart.tsx","../src/components/charts/ordinal/BarChart.tsx","../src/components/charts/ordinal/StackedBarChart.tsx","../src/components/charts/ordinal/SwarmPlot.tsx","../src/components/charts/ordinal/BoxPlot.tsx","../src/components/charts/ordinal/Histogram.tsx","../src/components/charts/ordinal/ViolinPlot.tsx","../src/components/charts/ordinal/RidgelinePlot.tsx","../src/components/charts/ordinal/DotPlot.tsx","../src/components/charts/ordinal/PieChart.tsx","../src/components/charts/ordinal/DonutChart.tsx","../src/components/charts/ordinal/GroupedBarChart.tsx","../src/components/charts/network/ForceDirectedGraph.tsx","../src/components/charts/network/ChordDiagram.tsx","../src/components/charts/network/SankeyDiagram.tsx","../src/components/charts/network/TreeDiagram.tsx","../src/components/charts/network/Treemap.tsx","../src/components/charts/network/CirclePack.tsx","../src/components/charts/realtime/RealtimeLineChart.tsx","../src/components/charts/realtime/RealtimeHistogram.tsx","../src/components/charts/realtime/RealtimeSwarmChart.tsx","../src/components/charts/realtime/RealtimeWaterfallChart.tsx","../src/components/charts/realtime/RealtimeHeatmap.tsx","../src/components/store/ThemeStore.ts","../src/components/ThemeProvider.tsx","../src/components/export/exportChart.ts","../src/components/ChartErrorBoundary.tsx"],"sourcesContent":["import type { Changeset } from \"./types\"\n\n/**\n * DataSourceAdapter normalizes all data ingestion paths into uniform changesets:\n *\n * 1. Bounded (props): `data` array → changeset(s) with `bounded: true`\n * 2. Streaming (push): `ref.push()` → micro-changeset with `bounded: false`\n * 3. Hybrid: `data` prop first, then `push()` — seamless transition\n *\n * For large bounded datasets (above CHUNK_THRESHOLD), data is automatically\n * chunked and ingested progressively across multiple animation frames. This\n * keeps the UI responsive while the chart draws incrementally. The first chunk\n * renders immediately so the user sees data right away.\n */\n\n/** Datasets larger than this are chunked for progressive rendering */\nconst CHUNK_THRESHOLD = 5000\n/** Number of items per progressive chunk */\nconst CHUNK_SIZE = 5000\n\nexport type ChangesetCallback<T> = (changeset: Changeset<T>) => void\n\nexport class DataSourceAdapter<T = Record<string, any>> {\n private callback: ChangesetCallback<T>\n private lastBoundedData: T[] | null = null\n private chunkTimer: number = 0\n\n constructor(callback: ChangesetCallback<T>) {\n this.callback = callback\n }\n\n /**\n * Ingest a bounded data array (from props).\n *\n * Small datasets emit a single changeset synchronously.\n * Large datasets (> CHUNK_THRESHOLD) are split into chunks that render\n * progressively: the first chunk fires immediately (bounded: true to\n * reset + seed the buffer), subsequent chunks arrive on successive\n * animation frames (bounded: false so they append without clearing).\n */\n setBoundedData(data: T[]): void {\n if (data === this.lastBoundedData) return\n this.lastBoundedData = data\n\n // Cancel any in-flight progressive ingestion\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n\n if (data.length <= CHUNK_THRESHOLD) {\n // Small dataset — ingest all at once\n this.callback({ inserts: data, bounded: true })\n return\n }\n\n // Large dataset — progressive chunked ingestion.\n // First chunk is bounded: true (resets buffer and sizes it to full length).\n // Subsequent chunks are bounded: false (appends without clearing).\n this.callback({ inserts: data.slice(0, CHUNK_SIZE), bounded: true, totalSize: data.length })\n\n let offset = CHUNK_SIZE\n const scheduleNext = () => {\n if (offset >= data.length) return\n // Check that this is still the active dataset\n if (data !== this.lastBoundedData) return\n\n const end = Math.min(offset + CHUNK_SIZE, data.length)\n this.callback({ inserts: data.slice(offset, end), bounded: false })\n offset = end\n\n if (offset < data.length) {\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n } else {\n this.chunkTimer = 0\n }\n }\n\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n }\n\n /**\n * Push a single datum (streaming mode).\n * Emits a micro-changeset with `bounded: false`.\n */\n push(datum: T): void {\n this.callback({ inserts: [datum], bounded: false })\n }\n\n /**\n * Push multiple data (streaming batch).\n * Emits a single changeset with `bounded: false`.\n */\n pushMany(data: T[]): void {\n if (data.length === 0) return\n this.callback({ inserts: data, bounded: false })\n }\n\n /**\n * Reset the adapter state.\n */\n clear(): void {\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n this.lastBoundedData = null\n }\n}\n","export class RingBuffer<T> {\n private buffer: (T | undefined)[]\n private head: number = 0\n private _size: number = 0\n\n constructor(private _capacity: number) {\n if (_capacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n this.buffer = new Array(_capacity)\n }\n\n push(value: T): T | undefined {\n let evicted: T | undefined\n if (this._size === this._capacity) {\n // Buffer is full — the slot at head is the oldest item\n evicted = this.buffer[this.head]\n } else {\n this._size++\n }\n this.buffer[this.head] = value\n this.head = (this.head + 1) % this._capacity\n return evicted\n }\n\n pushMany(values: T[]): T[] {\n const evicted: T[] = []\n for (const v of values) {\n const e = this.push(v)\n if (e !== undefined) {\n evicted.push(e)\n }\n }\n return evicted\n }\n\n get(index: number): T | undefined {\n if (index < 0 || index >= this._size) return undefined\n const realIndex =\n (this.head - this._size + index + this._capacity) % this._capacity\n return this.buffer[realIndex]\n }\n\n peek(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - 1 + this._capacity) % this._capacity]\n }\n\n peekOldest(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - this._size + this._capacity) % this._capacity]\n }\n\n [Symbol.iterator](): Iterator<T> {\n let i = 0\n const self = this\n return {\n next(): IteratorResult<T> {\n if (i >= self._size) return { done: true, value: undefined } as IteratorReturnResult<undefined>\n return { done: false, value: self.get(i++)! }\n }\n }\n }\n\n toArray(): T[] {\n const result: T[] = []\n for (const item of this) {\n result.push(item)\n }\n return result\n }\n\n resize(newCapacity: number): T[] {\n if (newCapacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n const items = this.toArray()\n const evicted: T[] = []\n while (items.length > newCapacity) {\n evicted.push(items.shift()!)\n }\n this._capacity = newCapacity\n this.buffer = new Array(newCapacity)\n this.head = 0\n this._size = 0\n for (const item of items) {\n this.push(item)\n }\n return evicted\n }\n\n clear(): void {\n this.buffer = new Array(this._capacity)\n this.head = 0\n this._size = 0\n }\n\n get size(): number {\n return this._size\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n get full(): boolean {\n return this._size === this._capacity\n }\n}\n","export class IncrementalExtent {\n private _min: number = Infinity\n private _max: number = -Infinity\n private _dirty: boolean = false\n\n push(value: number): void {\n if (Number.isNaN(value)) return\n if (value < this._min) this._min = value\n if (value > this._max) this._max = value\n }\n\n evict(value: number): void {\n if (value === this._min || value === this._max) {\n this._dirty = true\n }\n }\n\n recalculate<T>(\n values: Iterable<T>,\n accessor?: (v: T) => number\n ): void {\n this._min = Infinity\n this._max = -Infinity\n for (const v of values) {\n const n = accessor ? accessor(v) : (v as number)\n if (Number.isNaN(n)) continue\n if (n < this._min) this._min = n\n if (n > this._max) this._max = n\n }\n this._dirty = false\n }\n\n clear(): void {\n this._min = Infinity\n this._max = -Infinity\n this._dirty = false\n }\n\n get extent(): [number, number] {\n return [this._min, this._max]\n }\n\n get min(): number {\n return this._min\n }\n\n get max(): number {\n return this._max\n }\n\n get dirty(): boolean {\n return this._dirty\n }\n}\n","export interface Bin {\n start: number\n end: number\n total: number\n categories: Map<string, number>\n}\n\nexport function computeBins(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): Map<number, Bin> {\n const bins = new Map<number, Bin>()\n\n for (const d of data) {\n const t = getTime(d)\n const v = getValue(d)\n\n if (t == null || v == null || Number.isNaN(t) || Number.isNaN(v)) continue\n\n const binStart = Math.floor(t / binSize) * binSize\n\n let bin = bins.get(binStart)\n if (!bin) {\n bin = { start: binStart, end: binStart + binSize, total: 0, categories: new Map() }\n bins.set(binStart, bin)\n }\n\n bin.total += v\n\n if (getCategory) {\n const cat = getCategory(d)\n bin.categories.set(cat, (bin.categories.get(cat) || 0) + v)\n }\n }\n\n return bins\n}\n\nexport function computeBinExtent(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): [number, number] {\n const bins = computeBins(data, getTime, getValue, binSize, getCategory)\n\n if (bins.size === 0) return [0, 0]\n\n let maxTotal = 0\n for (const bin of bins.values()) {\n if (bin.total > maxTotal) maxTotal = bin.total\n }\n\n return [0, maxTotal]\n}\n","import type { RendererFn } from \"./types\"\n\nconst DEFAULT_POSITIVE_COLOR = \"#28a745\"\nconst DEFAULT_NEGATIVE_COLOR = \"#dc3545\"\n\nexport function computeWaterfallExtent(\n data: Iterable<Record<string, any>>,\n getValue: (d: Record<string, any>) => number\n): [number, number] {\n let min = 0\n let max = 0\n let cumulative = 0\n\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n cumulative += v\n if (cumulative < min) min = cumulative\n if (cumulative > max) max = cumulative\n }\n\n return [min, max]\n}\n\nexport const waterfallRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis, width, height } = layout\n const { time: getTime, value: getValue } = accessors\n const ws = options?.waterfallStyle\n\n const positiveColor = ws?.positiveColor ?? DEFAULT_POSITIVE_COLOR\n const negativeColor = ws?.negativeColor ?? DEFAULT_NEGATIVE_COLOR\n const gap = ws?.gap ?? 1\n const connectorStroke = ws?.connectorStroke\n const connectorWidth = ws?.connectorWidth ?? 1\n const hasStroke = ws?.stroke != null\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n\n // Collect into array for random access (skip NaN/null values)\n const arr: Record<string, any>[] = []\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n arr.push(d)\n }\n\n if (arr.length === 0) return\n\n let baseline = 0\n // Track the end edge of the previous bar and its cumulative value for connectors\n let prevEdge: number | null = null\n let prevCumulative: number | null = null\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = getTime(d)\n const delta = getValue(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap to next point\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = getTime(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - getTime(arr[i - 1])\n } else {\n // Single point fallback: use 0 to trigger pixel fallback\n barWidthTime = 0\n }\n\n ctx.fillStyle = delta >= 0 ? positiveColor : negativeColor\n\n if (timeAxis === \"x\") {\n let rawX0: number, rawX1: number\n\n if (barWidthTime !== 0) {\n rawX0 = timeScale(t)\n rawX1 = timeScale(t + barWidthTime)\n } else {\n rawX0 = timeScale(t)\n rawX1 = rawX0 + width / 10\n }\n\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n prevEdge = x1\n prevCumulative = cumEnd\n continue\n }\n\n const yBaseline = valueScale(baseline)\n const yTop = valueScale(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n // Connector line at the baseline level from previous bar's right edge to this bar's left edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connY = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(prevEdge, connY)\n ctx.lineTo(x0, connY)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n\n prevEdge = x1\n } else {\n // timeAxis === \"y\": horizontal bars\n let rawY0: number, rawY1: number\n\n if (barWidthTime !== 0) {\n rawY0 = timeScale(t)\n rawY1 = timeScale(t + barWidthTime)\n } else {\n rawY0 = timeScale(t)\n rawY1 = rawY0 + height / 10\n }\n\n const y0 = Math.min(rawY0, rawY1) + gap / 2\n const y1 = Math.max(rawY0, rawY1) - gap / 2\n const barHeight = y1 - y0\n if (barHeight <= 0) {\n baseline = cumEnd\n prevEdge = y1\n prevCumulative = cumEnd\n continue\n }\n\n const xBaseline = valueScale(baseline)\n const xEnd = valueScale(cumEnd)\n const rectX = Math.min(xBaseline, xEnd)\n const rectW = Math.abs(xEnd - xBaseline)\n\n // Connector line at the baseline level from previous bar's bottom edge to this bar's top edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connX = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(connX, prevEdge)\n ctx.lineTo(connX, y0)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n\n prevEdge = y1\n }\n\n baseline = cumEnd\n prevCumulative = cumEnd\n }\n}\n","import type {\n SceneNode,\n LineSceneNode,\n AreaSceneNode,\n PointSceneNode,\n RectSceneNode,\n HeatcellSceneNode,\n Style,\n StreamScales,\n StreamLayout\n} from \"./types\"\n\n// ── Scene node builders ────────────────────────────────────────────────\n\nexport function buildLineNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n style: Style,\n group?: string\n): LineSceneNode {\n const path: [number, number][] = []\n const rawValues: number[] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n path.push([scales.x(xVal), scales.y(yVal)])\n rawValues.push(yVal)\n }\n return { type: \"line\", path, rawValues, style, datum: data, group }\n}\n\nexport function buildAreaNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n baselineY: number,\n style: Style,\n group?: string\n): AreaSceneNode {\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n const px = scales.x(xVal)\n topPath.push([px, scales.y(yVal)])\n bottomPath.push([px, scales.y(baselineY)])\n }\n return { type: \"area\", topPath, bottomPath, style, datum: data, group }\n}\n\nexport function buildStackedAreaNodes(\n groups: { key: string; data: Record<string, any>[] }[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n styleFn: (group: string, sampleDatum?: Record<string, any>) => Style,\n normalize?: boolean\n): AreaSceneNode[] {\n // Collect all unique x values\n const xSet = new Set<number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = xGet(d)\n if (x != null && !Number.isNaN(x)) xSet.add(x)\n }\n }\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n\n // Build value lookup per group per x\n const valueMaps: Map<string, Map<number, number>> = new Map()\n for (const g of groups) {\n const m = new Map<number, number>()\n for (const d of g.data) {\n const x = xGet(d)\n const y = yGet(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n m.set(x, (m.get(x) || 0) + y)\n }\n }\n valueMaps.set(g.key, m)\n }\n\n // Compute totals per x for normalization\n let totals: Map<number, number> | undefined\n if (normalize) {\n totals = new Map()\n for (const x of xValues) {\n let sum = 0\n for (const g of groups) {\n sum += valueMaps.get(g.key)?.get(x) || 0\n }\n totals.set(x, sum || 1) // avoid div by 0\n }\n }\n\n // Build stacked area nodes bottom-up\n const nodes: AreaSceneNode[] = []\n const baselines = new Map<number, number>() // x → cumulative y\n for (const x of xValues) baselines.set(x, 0)\n\n for (const g of groups) {\n const vMap = valueMaps.get(g.key)!\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const x of xValues) {\n let rawY = vMap.get(x) || 0\n const base = baselines.get(x)!\n\n if (normalize) {\n const total = totals!.get(x)!\n rawY = rawY / total\n }\n\n const px = scales.x(x)\n bottomPath.push([px, scales.y(base)])\n topPath.push([px, scales.y(base + rawY)])\n baselines.set(x, base + rawY)\n }\n\n nodes.push({\n type: \"area\",\n topPath,\n bottomPath,\n style: styleFn(g.key, g.data[0]),\n datum: g.data,\n group: g.key\n })\n }\n\n return nodes\n}\n\nexport function buildPointNode(\n datum: Record<string, any>,\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n r: number,\n style: Style\n): PointSceneNode | null {\n const xVal = xGet(datum)\n const yVal = yGet(datum)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) return null\n return {\n type: \"point\",\n x: scales.x(xVal),\n y: scales.y(yVal),\n r,\n style,\n datum\n }\n}\n\nexport function buildRectNode(\n x: number,\n y: number,\n w: number,\n h: number,\n style: Style,\n datum: any,\n group?: string\n): RectSceneNode {\n return { type: \"rect\", x, y, w, h, style, datum, group }\n}\n\nexport function buildHeatcellNode(\n x: number,\n y: number,\n w: number,\n h: number,\n fill: string,\n datum: any\n): HeatcellSceneNode {\n return { type: \"heatcell\", x, y, w, h, fill, datum }\n}\n\n// ── Scene graph container ──────────────────────────────────────────────\n\nexport interface SceneGraphData {\n nodes: SceneNode[]\n version: number\n}\n\nexport function createSceneGraph(): SceneGraphData {\n return { nodes: [], version: 0 }\n}\n\nexport function updateSceneGraph(\n scene: SceneGraphData,\n nodes: SceneNode[]\n): SceneGraphData {\n return { nodes, version: scene.version + 1 }\n}\n","// ── Accessor resolution ────────────────────────────────────────────────\n\nexport function resolveAccessor<T>(\n accessor: string | ((d: T) => number) | undefined,\n fallback: string\n): (d: T) => number {\n if (typeof accessor === \"function\") return (d: T) => +accessor(d)\n const key = accessor || fallback\n return (d: T) => +(d as any)[key]\n}\n\nexport function resolveStringAccessor<T>(\n accessor: string | ((d: T) => string) | undefined,\n fallback?: string\n): ((d: T) => string) | undefined {\n if (typeof accessor === \"function\") return accessor\n if (accessor) return (d: T) => String((d as any)[accessor])\n if (fallback) return (d: T) => String((d as any)[fallback])\n return undefined\n}\n","import { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport { computeBins, computeBinExtent } from \"../realtime/BinAccumulator\"\nimport { computeWaterfallExtent } from \"../realtime/renderers/waterfallRenderer\"\nimport type {\n Changeset,\n StreamChartType,\n StreamScales,\n StreamLayout,\n SceneNode,\n AreaSceneNode,\n CandlestickSceneNode,\n CandlestickStyle,\n Style,\n ArrowOfTime,\n WindowMode,\n DecayConfig,\n PulseConfig,\n TransitionConfig,\n StalenessConfig\n} from \"./types\"\nimport {\n buildLineNode,\n buildAreaNode,\n buildStackedAreaNodes,\n buildPointNode,\n buildRectNode,\n buildHeatcellNode\n} from \"./SceneGraph\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\n\n// ── Axis direction helpers ─────────────────────────────────────────────\n\nfunction getTimeAxis(arrowOfTime: ArrowOfTime): \"x\" | \"y\" {\n return arrowOfTime === \"up\" || arrowOfTime === \"down\" ? \"y\" : \"x\"\n}\n\n// ── PipelineStore config ───────────────────────────────────────────────\n\nexport interface PipelineConfig {\n chartType: StreamChartType\n runtimeMode?: \"streaming\" | \"bounded\"\n windowSize: number\n windowMode: WindowMode\n arrowOfTime: ArrowOfTime\n extentPadding: number\n\n // Accessors\n xAccessor?: string | ((d: any) => number)\n yAccessor?: string | ((d: any) => number)\n timeAccessor?: string | ((d: any) => number)\n valueAccessor?: string | ((d: any) => number)\n colorAccessor?: string | ((d: any) => string)\n sizeAccessor?: string | ((d: any) => number)\n groupAccessor?: string | ((d: any) => string)\n categoryAccessor?: string | ((d: any) => string)\n lineDataAccessor?: string\n\n // Fixed extents (partial: [min] or [min, undefined] to set only min)\n xExtent?: [number | undefined, number | undefined] | [number]\n yExtent?: [number | undefined, number | undefined] | [number]\n sizeRange?: [number, number]\n\n // Bar/heatmap specifics\n binSize?: number\n normalize?: boolean\n\n // Candlestick accessors\n openAccessor?: string | ((d: any) => number)\n highAccessor?: string | ((d: any) => number)\n lowAccessor?: string | ((d: any) => number)\n closeAccessor?: string | ((d: any) => number)\n candlestickStyle?: CandlestickStyle\n\n // Bounds/uncertainty\n boundsAccessor?: string | ((d: any) => number)\n boundsStyle?: any\n\n // Style\n lineStyle?: any\n pointStyle?: (d: any) => Style & { r?: number }\n areaStyle?: (d: any) => Style\n swarmStyle?: { radius?: number; fill?: string; opacity?: number; stroke?: string; strokeWidth?: number }\n colorScheme?: string | string[]\n barColors?: Record<string, string>\n\n // Annotations (threshold coloring uses these)\n annotations?: Record<string, any>[]\n\n // Realtime encoding\n decay?: DecayConfig\n pulse?: PulseConfig\n transition?: TransitionConfig\n staleness?: StalenessConfig\n\n // Streaming heatmap\n heatmapAggregation?: \"count\" | \"sum\" | \"mean\"\n heatmapXBins?: number\n heatmapYBins?: number\n}\n\n// ── PipelineStore ──────────────────────────────────────────────────────\n\nexport class PipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private xExtent = new IncrementalExtent()\n private yExtent = new IncrementalExtent()\n private config: PipelineConfig\n private growingCap: number\n\n private getX: (d: any) => number\n private getY: (d: any) => number\n private getGroup: ((d: any) => string) | undefined\n private getCategory: ((d: any) => string) | undefined\n private getSize: ((d: any) => number) | undefined\n private getColor: ((d: any) => string) | undefined\n private getBounds: ((d: any) => number) | undefined\n private getOpen: ((d: any) => number) | undefined\n private getHigh: ((d: any) => number) | undefined\n private getLow: ((d: any) => number) | undefined\n private getClose: ((d: any) => number) | undefined\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: StreamScales | null = null\n scene: SceneNode[] = []\n version = 0\n\n constructor(config: PipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n this.growingCap = config.windowSize\n\n // Resolve accessors based on streaming vs bounded mode.\n // Streaming types use time/value defaults; bounded types use x/y defaults.\n const isStreamingType = [\"bar\", \"swarm\", \"waterfall\"].includes(config.chartType)\n const useStreamingDefaults = isStreamingType || config.runtimeMode === \"streaming\"\n\n if (useStreamingDefaults) {\n this.getX = resolveAccessor(config.timeAccessor || config.xAccessor, \"time\")\n this.getY = resolveAccessor(\n config.valueAccessor || config.yAccessor,\n \"value\"\n )\n } else {\n this.getX = resolveAccessor(config.xAccessor, \"x\")\n this.getY = resolveAccessor(config.yAccessor, \"y\")\n }\n\n this.getGroup = resolveStringAccessor(config.groupAccessor)\n this.getCategory = resolveStringAccessor(config.categoryAccessor)\n this.getSize = config.sizeAccessor\n ? resolveAccessor(config.sizeAccessor, \"size\")\n : undefined\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getBounds = config.boundsAccessor\n ? resolveAccessor(config.boundsAccessor, \"bounds\")\n : undefined\n\n // Candlestick accessors\n if (config.chartType === \"candlestick\") {\n this.getOpen = resolveAccessor(config.openAccessor, \"open\")\n this.getHigh = resolveAccessor(config.highAccessor, \"high\")\n this.getLow = resolveAccessor(config.lowAccessor, \"low\")\n this.getClose = resolveAccessor(config.closeAccessor, \"close\")\n }\n\n // Pulse: parallel timestamp buffer\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n /**\n * Process a changeset from DataSourceAdapter.\n * Returns true if the scene needs re-rendering.\n */\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n // Full replacement for bounded data\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n // Auto-resize buffer to fit all bounded data.\n // totalSize is set when data is progressively chunked — pre-allocate\n // for the full dataset so subsequent append chunks don't evict.\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n if (this.config.windowMode === \"growing\" && this.buffer.full) {\n this.growingCap *= 2\n this.buffer.resize(this.growingCap)\n if (this.timestampBuffer) this.timestampBuffer.resize(this.growingCap)\n }\n\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n\n if (evicted != null) {\n this.xExtent.evict(this.getX(evicted))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.evict(this.getHigh(evicted))\n this.yExtent.evict(this.getLow(evicted))\n } else {\n this.yExtent.evict(this.getY(evicted))\n }\n }\n }\n }\n\n return true\n }\n\n /**\n * Recompute scales and scene graph for the current buffer contents.\n */\n computeScene(layout: StreamLayout): void {\n const { config, buffer } = this\n\n // Recalculate dirty extents\n if (this.xExtent.dirty) {\n this.xExtent.recalculate(buffer, this.getX)\n }\n if (this.yExtent.dirty) {\n if (config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n // Candlestick y-extent spans high→low, not a single y accessor\n this.yExtent.clear()\n for (const d of buffer) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n }\n } else {\n this.yExtent.recalculate(buffer, this.getY)\n }\n }\n\n // Resolve domains — merge user-specified extents with data extents\n const dataXDomain = this.xExtent.extent\n const dataYDomain = this.yExtent.extent\n let xDomain: [number, number] = config.xExtent\n ? [\n config.xExtent[0] ?? dataXDomain[0],\n config.xExtent[1] ?? dataXDomain[1]\n ]\n : dataXDomain\n let yDomain: [number, number] = config.yExtent\n ? [\n config.yExtent[0] ?? dataYDomain[0],\n config.yExtent[1] ?? dataYDomain[1]\n ]\n : dataYDomain\n\n // Determine if extents are fully user-specified (no padding needed)\n const yFullySpecified = config.yExtent && config.yExtent[0] != null && config.yExtent[1] != null\n const xFullySpecified = config.xExtent && config.xExtent[0] != null && config.xExtent[1] != null\n\n // Chart-type specific extent adjustments\n if (config.chartType === \"stackedarea\" && !yFullySpecified && buffer.size > 0) {\n // Stacked areas: y-extent must cover the cumulative sums, not raw values\n if (config.normalize) {\n // Normalized: all stacks sum to 1.0\n yDomain = [0, 1 + config.extentPadding]\n } else {\n const data = buffer.toArray()\n const groups = this.groupData(data)\n\n // Build per-x-value totals across all groups\n const xTotals = new Map<number, number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n xTotals.set(x, (xTotals.get(x) || 0) + y)\n }\n }\n }\n\n let maxStacked = 0\n for (const total of xTotals.values()) {\n if (total > maxStacked) maxStacked = total\n }\n\n const pad = maxStacked > 0 ? maxStacked * config.extentPadding : 1\n yDomain = [0, maxStacked + pad]\n }\n } else if (config.chartType === \"bar\" && config.binSize && !yFullySpecified && buffer.size > 0) {\n const [, maxTotal] = computeBinExtent(\n buffer, this.getX, this.getY, config.binSize, this.getCategory\n )\n yDomain = [0, maxTotal + maxTotal * config.extentPadding]\n } else if (config.chartType === \"waterfall\" && !yFullySpecified && buffer.size > 0) {\n const [minCum, maxCum] = computeWaterfallExtent(buffer, this.getY)\n const range = maxCum - minCum\n const pad = range > 0 ? range * config.extentPadding : 1\n yDomain = [\n Math.min(0, minCum - Math.abs(pad)),\n Math.max(0, maxCum + Math.abs(pad))\n ]\n } else if (!yFullySpecified && yDomain[0] !== Infinity) {\n // Expand extent to include bounds/uncertainty offsets\n if (this.getBounds) {\n const data = buffer.toArray()\n for (const d of data) {\n const y = this.getY(d)\n const offset = this.getBounds(d)\n if (y == null || Number.isNaN(y) || !offset) continue\n if (y + offset > yDomain[1]) yDomain[1] = y + offset\n if (y - offset < yDomain[0]) yDomain[0] = y - offset\n }\n }\n const range = yDomain[1] - yDomain[0]\n const pad = range > 0 ? range * config.extentPadding : 1\n // Only pad the data-derived side; preserve user-specified bounds\n const userMin = config.yExtent?.[0]\n const userMax = config.yExtent?.[1]\n yDomain = [\n userMin != null ? yDomain[0] : yDomain[0] - pad,\n userMax != null ? yDomain[1] : yDomain[1] + pad\n ]\n }\n\n // Handle degenerate extents\n if (xDomain[0] === Infinity || xDomain[1] === -Infinity) xDomain = [0, 1]\n if (yDomain[0] === Infinity || yDomain[1] === -Infinity) yDomain = [0, 1]\n\n // Build scales\n // For streaming charts, use time/value axes based on arrowOfTime\n const isStreaming = config.arrowOfTime !== undefined\n if (isStreaming) {\n const timeAxis = getTimeAxis(config.arrowOfTime)\n if (timeAxis === \"x\") {\n const xRange: [number, number] = config.arrowOfTime === \"right\"\n ? [0, layout.width]\n : [layout.width, 0]\n this.scales = {\n x: scaleLinear().domain(xDomain).range(xRange),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n } else {\n const yRange: [number, number] = config.arrowOfTime === \"down\"\n ? [0, layout.height]\n : [layout.height, 0]\n this.scales = {\n x: scaleLinear().domain(yDomain).range([0, layout.width]),\n y: scaleLinear().domain(xDomain).range(yRange)\n }\n }\n } else {\n this.scales = {\n x: scaleLinear().domain(xDomain).range([0, layout.width]),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n }\n\n // Snapshot positions for transition animation (before rebuild)\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // Build scene graph based on chart type\n const data = buffer.toArray()\n this.scene = this.buildSceneNodes(layout)\n\n // Apply decay opacity to discrete nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n\n // Apply pulse glow to discrete nodes\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation from old to new positions\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private buildSceneNodes(layout: StreamLayout): SceneNode[] {\n const { config, buffer, scales } = this\n if (!scales || buffer.size === 0) return []\n\n const data = buffer.toArray()\n\n switch (config.chartType) {\n case \"line\":\n return this.buildLineScene(data)\n case \"area\":\n return this.buildAreaScene(data)\n case \"stackedarea\":\n return this.buildStackedAreaScene(data)\n case \"scatter\":\n case \"bubble\":\n return this.buildPointScene(data)\n case \"heatmap\":\n return this.buildHeatmapScene(data, layout)\n case \"bar\":\n return this.buildBarScene(data)\n case \"swarm\":\n return this.buildSwarmScene(data)\n case \"waterfall\":\n return this.buildWaterfallScene(data, layout)\n case \"candlestick\":\n return this.buildCandlestickScene(data, layout)\n default:\n return []\n }\n }\n\n private buildLineScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Extract color thresholds from annotations (if any)\n const colorThresholds = this.config.annotations\n ?.filter((a: any) => a.type === \"threshold\" && a.color)\n .map((a: any) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n\n // Build bounds areas first so they render behind lines\n if (this.getBounds) {\n for (const g of groups) {\n const boundsNode = this.buildBoundsForGroup(g.data, g.key)\n if (boundsNode) nodes.push(boundsNode)\n }\n }\n\n for (const g of groups) {\n const style = this.resolveLineStyle(g.key, g.data[0])\n const lineNode = buildLineNode(g.data, this.scales!, this.getX, this.getY, style, g.key)\n // Attach threshold info for the renderer\n if (colorThresholds && colorThresholds.length > 0) {\n lineNode.colorThresholds = colorThresholds\n }\n nodes.push(lineNode)\n }\n\n return nodes\n }\n\n private buildAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Use the bottom of the y domain as the baseline so areas fill to the chart edge\n const yDomain = this.scales!.y.domain() as [number, number]\n const baseline = yDomain[0]\n\n for (const g of groups) {\n const style = this.resolveAreaStyle(g.key, g.data[0])\n nodes.push(buildAreaNode(g.data, this.scales!, this.getX, this.getY, baseline, style, g.key))\n }\n\n return nodes\n }\n\n private buildStackedAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const styleFn = (group: string, sampleDatum?: Record<string, any>) =>\n this.resolveAreaStyle(group, sampleDatum)\n return buildStackedAreaNodes(\n groups,\n this.scales!,\n this.getX,\n this.getY,\n styleFn,\n this.config.normalize\n )\n }\n\n private buildPointScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const defaultR = this.config.chartType === \"bubble\" ? 10 : 5\n const sizeRange = this.config.sizeRange || [3, 15]\n\n // Compute size scale if sizeAccessor is set and no pointStyle handles it\n let sizeScale: ((v: number) => number) | null = null\n if (this.getSize && !this.config.pointStyle) {\n const sizes = data.map(d => this.getSize!(d)).filter(s => s != null && !Number.isNaN(s))\n if (sizes.length > 0) {\n const minSize = Math.min(...sizes)\n const maxSize = Math.max(...sizes)\n sizeScale = (s: number) => {\n if (minSize === maxSize) return (sizeRange[0] + sizeRange[1]) / 2\n return sizeRange[0] + ((s - minSize) / (maxSize - minSize)) * (sizeRange[1] - sizeRange[0])\n }\n }\n }\n\n // Build color map from colorAccessor if no pointStyle handles it\n let colorMap: Map<string, string> | null = null\n if (this.getColor && !this.config.pointStyle) {\n const categories = new Set<string>()\n for (const d of data) {\n const c = this.getColor(d)\n if (c) categories.add(c)\n }\n const palette = Array.isArray(this.config.colorScheme) ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n colorMap = new Map()\n let ci = 0\n for (const cat of categories) {\n colorMap.set(cat, palette[ci % palette.length])\n ci++\n }\n }\n\n for (const d of data) {\n let style = this.config.pointStyle ? this.config.pointStyle(d) : { fill: \"#4e79a7\", opacity: 0.8 }\n\n // Apply size from accessor if pointStyle doesn't provide it\n let r = style.r || defaultR\n if (sizeScale && this.getSize) {\n const sizeVal = this.getSize(d)\n if (sizeVal != null && !Number.isNaN(sizeVal)) {\n r = sizeScale(sizeVal)\n }\n }\n\n // Apply color from accessor if pointStyle doesn't provide a custom fill\n if (colorMap && this.getColor) {\n const colorVal = this.getColor(d)\n if (colorVal && colorMap.has(colorVal)) {\n style = { ...style, fill: colorMap.get(colorVal)! }\n }\n }\n\n const node = buildPointNode(d, this.scales!, this.getX, this.getY, r, style)\n if (node) nodes.push(node)\n }\n\n return nodes\n }\n\n private buildHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n\n // Streaming heatmap: 2D grid binning with aggregation\n if (this.config.heatmapAggregation) {\n return this.buildStreamingHeatmapScene(data, layout)\n }\n\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n // Determine grid dimensions from unique x/y values\n const xSet = new Set<number>()\n const ySet = new Set<number>()\n for (const d of data) {\n xSet.add(this.getX(d))\n ySet.add(this.getY(d))\n }\n\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n const yValues = Array.from(ySet).sort((a, b) => a - b)\n if (xValues.length === 0 || yValues.length === 0) return nodes\n\n const cellW = layout.width / xValues.length\n const cellH = layout.height / yValues.length\n\n // Build value lookup\n const valueMap = new Map<string, { val: number; datum: any }>()\n for (const d of data) {\n const key = `${this.getX(d)}_${this.getY(d)}`\n valueMap.set(key, { val: getVal(d), datum: d })\n }\n\n // Compute value range for color\n let minVal = Infinity\n let maxVal = -Infinity\n for (const { val } of valueMap.values()) {\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n for (let xi = 0; xi < xValues.length; xi++) {\n for (let yi = 0; yi < yValues.length; yi++) {\n const key = `${xValues[xi]}_${yValues[yi]}`\n const entry = valueMap.get(key)\n if (!entry) continue\n\n const t = (entry.val - minVal) / valRange\n // Default to blues interpolation\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yValues.length - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n entry.datum\n ))\n }\n }\n\n return nodes\n }\n\n /**\n * Streaming heatmap: discretize continuous x/y into a grid and aggregate.\n */\n private buildStreamingHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const xBins = this.config.heatmapXBins ?? 20\n const yBins = this.config.heatmapYBins ?? 20\n const agg = this.config.heatmapAggregation ?? \"count\"\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n if (!this.scales || data.length === 0) return nodes\n\n const [xMin, xMax] = this.scales.x.domain() as [number, number]\n const [yMin, yMax] = this.scales.y.domain() as [number, number]\n const xRange = xMax - xMin || 1\n const yRange = yMax - yMin || 1\n const xBinSize = xRange / xBins\n const yBinSize = yRange / yBins\n\n // Grid cells: [xi][yi] → { sum, count }\n const grid = new Map<string, { sum: number; count: number; data: any[] }>()\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n const xi = Math.min(Math.floor((xVal - xMin) / xBinSize), xBins - 1)\n const yi = Math.min(Math.floor((yVal - yMin) / yBinSize), yBins - 1)\n if (xi < 0 || yi < 0) continue\n\n const key = `${xi}_${yi}`\n let cell = grid.get(key)\n if (!cell) {\n cell = { sum: 0, count: 0, data: [] }\n grid.set(key, cell)\n }\n cell.count++\n cell.sum += getVal(d)\n cell.data.push(d)\n }\n\n // Compute aggregated values and find range\n let minVal = Infinity\n let maxVal = -Infinity\n const cellValues = new Map<string, number>()\n for (const [key, cell] of grid) {\n let val: number\n switch (agg) {\n case \"sum\": val = cell.sum; break\n case \"mean\": val = cell.count > 0 ? cell.sum / cell.count : 0; break\n default: val = cell.count; break\n }\n cellValues.set(key, val)\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n const cellW = layout.width / xBins\n const cellH = layout.height / yBins\n\n for (const [key, val] of cellValues) {\n const [xiStr, yiStr] = key.split(\"_\")\n const xi = +xiStr\n const yi = +yiStr\n\n const t = (val - minVal) / valRange\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n const cell = grid.get(key)!\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yBins - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n { xi, yi, value: val, count: cell.count, sum: cell.sum, data: cell.data }\n ))\n }\n\n return nodes\n }\n\n private buildBarScene(data: Record<string, any>[]): SceneNode[] {\n if (!this.config.binSize) return []\n\n const bins = computeBins(data, this.getX, this.getY, this.config.binSize, this.getCategory)\n if (bins.size === 0) return []\n\n // Establish a global category order that is stable across frames.\n // Use barColors keys first (preserves user-specified order), then any\n // additional categories sorted alphabetically. This prevents flicker\n // when bins partially exit the sliding window and their per-category\n // values shrink/disappear — without a fixed order the Map iteration\n // order shifts and stacked segments jump around.\n let categoryOrder: string[] | null = null\n if (this.getCategory) {\n const allCategories = new Set<string>()\n for (const bin of bins.values()) {\n for (const cat of bin.categories.keys()) {\n allCategories.add(cat)\n }\n }\n const colorKeys = this.config.barColors ? Object.keys(this.config.barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Array.from(allCategories).filter(c => !listed.has(c)).sort()\n categoryOrder = [...colorKeys.filter(k => allCategories.has(k)), ...unlisted]\n }\n\n const nodes: SceneNode[] = []\n const scales = this.scales!\n const [domainMin, domainMax] = scales.x.domain() as [number, number]\n const gap = this.config.barColors ? 1 : 1\n\n for (const bin of bins.values()) {\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n if (clampedStart >= clampedEnd) continue\n\n const rawX0 = scales.x(clampedStart)\n const rawX1 = scales.x(clampedEnd)\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) continue\n\n if (categoryOrder && bin.categories.size > 0) {\n let cumulativeBase = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n const yBottom = scales.y(cumulativeBase)\n const yTop = scales.y(cumulativeBase + catVal)\n const rectY = Math.min(yBottom, yTop)\n const rectH = Math.abs(yBottom - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: this.config.barColors?.[cat] || \"#4e79a7\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total, category: cat, categoryValue: catVal },\n cat\n ))\n cumulativeBase += catVal\n }\n } else {\n const yZero = scales.y(0)\n const yTop = scales.y(bin.total)\n const rectY = Math.min(yZero, yTop)\n const rectH = Math.abs(yZero - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: \"#007bff\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total }\n ))\n }\n }\n\n return nodes\n }\n\n private buildSwarmScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const swarm = this.config.swarmStyle || {}\n const radius = swarm.radius ?? 3\n const defaultFill = swarm.fill ?? \"#007bff\"\n const opacity = swarm.opacity ?? 0.7\n const stroke = swarm.stroke\n const strokeWidth = swarm.strokeWidth\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n if (yVal == null || Number.isNaN(yVal)) continue\n\n const x = this.scales!.x(xVal)\n const y = this.scales!.y(yVal)\n\n let fill = defaultFill\n if (this.getCategory) {\n const cat = this.getCategory(d)\n fill = this.config.barColors?.[cat] || fill\n }\n\n nodes.push({\n type: \"point\",\n x, y, r: radius,\n style: { fill, opacity, stroke, strokeWidth },\n datum: d\n })\n }\n\n return nodes\n }\n\n private buildWaterfallScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const scales = this.scales!\n\n // Filter valid data\n const arr = data.filter(d => {\n const v = this.getY(d)\n return v != null && !Number.isNaN(v)\n })\n if (arr.length === 0) return nodes\n\n const gap = 1\n let baseline = 0\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = this.getX(d)\n const delta = this.getY(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = this.getX(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - this.getX(arr[i - 1])\n } else {\n barWidthTime = 0\n }\n\n const rawX0 = scales.x(t)\n const rawX1 = barWidthTime !== 0 ? scales.x(t + barWidthTime) : rawX0 + layout.width / 10\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n continue\n }\n\n const yBaseline = scales.y(baseline)\n const yTop = scales.y(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n const fill = delta >= 0 ? \"#28a745\" : \"#dc3545\"\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill },\n { ...d, baseline, cumEnd, delta }\n ))\n\n baseline = cumEnd\n }\n\n return nodes\n }\n\n private buildCandlestickScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n if (!this.getOpen || !this.getHigh || !this.getLow || !this.getClose || !this.scales) return []\n\n const nodes: SceneNode[] = []\n const cs = this.config.candlestickStyle || {}\n const upColor = cs.upColor || \"#28a745\"\n const downColor = cs.downColor || \"#dc3545\"\n const wickColor = cs.wickColor || \"#333\"\n const wickWidth = cs.wickWidth || 1\n\n // Compute body width from data spacing\n const sortedX = data\n .map(d => this.getX(d))\n .filter(x => x != null && !Number.isNaN(x))\n .sort((a, b) => a - b)\n\n let bodyWidth = cs.bodyWidth || 6\n if (!cs.bodyWidth && sortedX.length > 1) {\n // Auto-size: 60% of the minimum gap between adjacent x values\n let minGap = Infinity\n for (let i = 1; i < sortedX.length; i++) {\n const gap = Math.abs(this.scales!.x(sortedX[i]) - this.scales!.x(sortedX[i - 1]))\n if (gap > 0 && gap < minGap) minGap = gap\n }\n if (minGap !== Infinity) {\n bodyWidth = Math.max(2, Math.min(minGap * 0.6, 20))\n }\n }\n\n for (const d of data) {\n const xVal = this.getX(d)\n if (xVal == null || Number.isNaN(xVal)) continue\n\n const open = this.getOpen(d)\n const high = this.getHigh(d)\n const low = this.getLow(d)\n const close = this.getClose(d)\n if ([open, high, low, close].some(v => v == null || Number.isNaN(v))) continue\n\n const isUp = close >= open\n\n nodes.push({\n type: \"candlestick\",\n x: this.scales!.x(xVal),\n openY: this.scales!.y(open),\n closeY: this.scales!.y(close),\n highY: this.scales!.y(high),\n lowY: this.scales!.y(low),\n bodyWidth,\n upColor,\n downColor,\n wickColor,\n wickWidth,\n isUp,\n datum: d\n } as CandlestickSceneNode)\n }\n\n return nodes\n }\n\n // ── Bounds helpers ───────────────────────────────────────────────────\n\n private buildBoundsForGroup(data: Record<string, any>[], group: string): AreaSceneNode | null {\n if (!this.getBounds || !this.scales) return null\n\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const d of data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x == null || y == null || Number.isNaN(x) || Number.isNaN(y)) continue\n\n const offset = this.getBounds(d)\n const px = this.scales!.x(x)\n\n if (!offset || offset === 0) {\n // No bounds at this point — collapse to the line\n const py = this.scales!.y(y)\n topPath.push([px, py])\n bottomPath.push([px, py])\n } else {\n topPath.push([px, this.scales!.y(y + offset)])\n bottomPath.push([px, this.scales!.y(y - offset)])\n }\n }\n\n if (topPath.length < 2) return null\n\n return {\n type: \"area\",\n topPath,\n bottomPath,\n style: this.resolveBoundsStyle(group, data[0]),\n datum: data,\n group,\n interactive: false\n }\n }\n\n private resolveBoundsStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const bs = this.config.boundsStyle\n if (typeof bs === \"function\") {\n return bs(sampleDatum || {}, group)\n }\n if (bs && typeof bs === \"object\") {\n return bs\n }\n // Default: match line color with low opacity\n const lineStyle = this.resolveLineStyle(group, sampleDatum)\n return {\n fill: lineStyle.stroke || \"#4e79a7\",\n fillOpacity: 0.2,\n stroke: \"none\"\n }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n /**\n * Compute decay opacity for a datum at `bufferIndex` out of `bufferSize` items.\n * Index 0 = oldest, bufferSize-1 = newest. Returns 0–1.\n */\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n // age: 0 = newest, bufferSize-1 = oldest\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n /**\n * Apply decay opacity to a list of discrete scene nodes.\n * Uses the datum's index in the buffer data array.\n */\n private applyDecay(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n if (node.type === \"heatcell\") {\n ;(node as any).style = { opacity: decayOpacity }\n } else if (node.type === \"candlestick\") {\n // Candlestick doesn't have a style object — store opacity for renderer\n ;(node as any)._decayOpacity = decayOpacity\n } else {\n const baseOpacity = node.style?.opacity ?? 1\n node.style = { ...node.style, opacity: baseOpacity * decayOpacity }\n }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n /**\n * Compute pulse intensity for a datum inserted at `insertTime`.\n * Returns 0–1 (1 = just inserted, 0 = pulse expired).\n */\n private computePulseIntensity(insertTime: number, now: number): number {\n const pulse = this.config.pulse\n if (!pulse) return 0\n const duration = pulse.duration ?? 500\n const age = now - insertTime\n if (age >= duration) return 0\n return 1 - age / duration\n }\n\n /**\n * Apply pulse glow to discrete scene nodes.\n */\n private applyPulse(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const intensity = this.computePulseIntensity(insertTime, now)\n if (intensity > 0) {\n (node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n /**\n * Returns true if there are active pulse animations that need continuous rendering.\n */\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n /**\n * Snapshot current scene node positions before rebuild.\n */\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n if (node.type === \"point\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"heatcell\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"candlestick\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.openY })\n }\n }\n }\n\n /**\n * Get a stable identity key for a scene node.\n */\n private getNodeIdentity(node: SceneNode, index: number): string | null {\n switch (node.type) {\n case \"point\":\n return `p:${node.datum === undefined ? index : this.getX(node.datum)}_${this.getY(node.datum)}`\n case \"rect\":\n return `r:${node.group || \"\"}:${node.datum?.binStart ?? node.datum?.category ?? index}`\n case \"heatcell\":\n return `h:${node.x}_${node.y}`\n case \"candlestick\":\n return `c:${this.getX(node.datum)}`\n default:\n return null\n }\n }\n\n /**\n * After scene rebuild, set up transition from old to new positions.\n */\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n // Store target positions and restore previous for animation start\n if (node.type === \"point\") {\n const target = { x: node.x, y: node.y, r: node.r }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetR = target.r\n node.x = prev.x\n node.y = prev.y\n node.r = prev.r ?? node.r\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y || prev.w !== target.w || prev.h !== target.h) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n } else if (node.type === \"heatcell\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n // Ease-out cubic (or linear)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (node._targetR !== undefined && prev.r !== undefined) {\n node.r = prev.r + (node._targetR - prev.r) * t\n }\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n }\n }\n\n if (rawT >= 1) {\n // Snap to targets and clear transition\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n if (node._targetR !== undefined) node.r = node._targetR\n node._targetX = undefined\n node._targetY = undefined\n node._targetR = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────\n\n private groupData(data: Record<string, any>[]): { key: string; data: Record<string, any>[] }[] {\n if (!this.getGroup) {\n return [{ key: \"_default\", data }]\n }\n\n const groups = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const key = this.getGroup(d)\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(d)\n }\n\n return Array.from(groups.entries()).map(([key, data]) => ({ key, data }))\n }\n\n private resolveLineStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n stroke: ls.stroke || \"#007bff\",\n strokeWidth: ls.strokeWidth || 2,\n strokeDasharray: ls.strokeDasharray,\n fill: ls.fill,\n fillOpacity: ls.fillOpacity,\n opacity: ls.opacity\n }\n }\n return { stroke: \"#007bff\", strokeWidth: 2 }\n }\n\n private resolveAreaStyle(group: string, sampleDatum?: Record<string, any>): Style {\n if (this.config.areaStyle) {\n return this.config.areaStyle(sampleDatum || {})\n }\n // Fall back to lineStyle — AreaChart passes area styling via lineStyle\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n fill: ls.fill || ls.stroke || \"#4e79a7\",\n fillOpacity: ls.fillOpacity ?? 0.7,\n stroke: ls.stroke || \"#4e79a7\",\n strokeWidth: ls.strokeWidth || 2\n }\n }\n return { fill: \"#4e79a7\", fillOpacity: 0.7, stroke: \"#4e79a7\", strokeWidth: 2 }\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n getExtents(): { x: [number, number]; y: [number, number] } | null {\n if (this.xExtent.min === Infinity) return null\n return {\n x: this.xExtent.extent,\n y: this.yExtent.extent\n }\n }\n\n clear(): void {\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getBuffer(): RingBuffer<Record<string, any>> {\n return this.buffer\n }\n\n getXAccessor(): (d: any) => number {\n return this.getX\n }\n\n getYAccessor(): (d: any) => number {\n return this.getY\n }\n\n getCategoryAccessor(): ((d: any) => string) | undefined {\n return this.getCategory\n }\n\n updateConfig(config: Partial<PipelineConfig>): void {\n Object.assign(this.config, config)\n }\n}\n","import type { SceneNode, PointSceneNode, RectSceneNode, LineSceneNode, AreaSceneNode, HeatcellSceneNode, CandlestickSceneNode, StreamScales } from \"./types\"\nimport type { RingBuffer } from \"../realtime/RingBuffer\"\n\nexport interface HitResult {\n node: SceneNode\n datum: any\n x: number\n y: number\n distance: number\n}\n\n/**\n * Find the nearest scene node to the given pixel coordinates.\n * Dispatches to type-specific hit testers for optimal performance.\n */\nexport function findNearestNode(\n scene: SceneNode[],\n px: number,\n py: number,\n maxDistance: number = 30\n): HitResult | null {\n let best: HitResult | null = null\n\n for (const node of scene) {\n let result: HitResult | null = null\n\n switch (node.type) {\n case \"point\":\n result = hitTestPoint(node, px, py)\n break\n case \"line\":\n result = hitTestLine(node, px, py)\n break\n case \"rect\":\n result = hitTestRect(node, px, py)\n break\n case \"heatcell\":\n result = hitTestHeatcell(node, px, py)\n break\n case \"area\":\n // Skip non-interactive areas (e.g. decorative bounds bands)\n if (node.interactive === false) break\n // Areas are hit-tested by finding nearest x on the top path\n result = hitTestAreaPath(node, px, py)\n break\n case \"candlestick\":\n result = hitTestCandlestick(node, px, py)\n break\n }\n\n if (result && result.distance < maxDistance) {\n if (!best || result.distance < best.distance) {\n best = result\n }\n }\n }\n\n return best\n}\n\nfunction hitTestPoint(node: PointSceneNode, px: number, py: number): HitResult | null {\n const dx = px - node.x\n const dy = py - node.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n // Hit radius includes the point's visual radius plus a tolerance\n if (dist > node.r + 5) return null\n return { node, datum: node.datum, x: node.x, y: node.y, distance: dist }\n}\n\nfunction hitTestLine(node: LineSceneNode, px: number, py: number): HitResult | null {\n if (node.path.length === 0) return null\n\n // Binary search for nearest x in the path\n const idx = binarySearchPath(node.path, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.path[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // For line data, the datum is the array; return the index as well\n const datum = Array.isArray(node.datum) && node.datum[idx]\n ? node.datum[idx]\n : node.datum\n\n return { node, datum, x: nx, y: ny, distance: dist }\n}\n\nfunction hitTestRect(node: RectSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n // Center of rect\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestHeatcell(node: HeatcellSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestCandlestick(node: CandlestickSceneNode, px: number, py: number): HitResult | null {\n const halfBody = node.bodyWidth / 2\n // Hit the body area (wider target)\n const bodyTop = Math.min(node.openY, node.closeY)\n const bodyBottom = Math.max(node.openY, node.closeY)\n const bodyHeight = Math.max(bodyBottom - bodyTop, 1)\n\n if (px >= node.x - halfBody - 3 && px <= node.x + halfBody + 3 &&\n py >= node.highY - 3 && py <= node.lowY + 3) {\n // Hover target: center of the body\n const cy = bodyTop + bodyHeight / 2\n const dx = px - node.x\n const dy = py - cy\n return { node, datum: node.datum, x: node.x, y: cy, distance: Math.sqrt(dx * dx + dy * dy) }\n }\n return null\n}\n\nfunction hitTestAreaPath(node: { type: \"area\"; topPath: [number, number][]; datum: any }, px: number, py: number): HitResult | null {\n if (node.topPath.length === 0) return null\n const idx = binarySearchPath(node.topPath, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.topPath[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n return { node: node as SceneNode, datum: node.datum, x: nx, y: ny, distance: dist }\n}\n\n/**\n * Binary search for the nearest point by x-coordinate in a sorted path.\n */\nfunction binarySearchPath(path: [number, number][], targetX: number): number {\n if (path.length === 0) return -1\n\n let lo = 0\n let hi = path.length - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (path[mid][0] < targetX) lo = mid + 1\n else hi = mid\n }\n\n // Check if lo-1 is closer\n if (lo > 0) {\n const dLo = Math.abs(path[lo][0] - targetX)\n const dPrev = Math.abs(path[lo - 1][0] - targetX)\n if (dPrev <= dLo) return lo - 1\n }\n\n return lo\n}\n\n/**\n * Binary search for nearest point by time value in a RingBuffer.\n */\nexport function findNearestIndex(\n buf: RingBuffer<Record<string, any>>,\n targetTime: number,\n getTime: (d: Record<string, any>) => number\n): number {\n if (buf.size === 0) return -1\n\n let lo = 0\n let hi = buf.size - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n const t = getTime(buf.get(mid)!)\n if (t < targetTime) lo = mid + 1\n else hi = mid\n }\n\n if (lo > 0) {\n const tLo = getTime(buf.get(lo)!)\n const tPrev = getTime(buf.get(lo - 1)!)\n if (Math.abs(tPrev - targetTime) <= Math.abs(tLo - targetTime)) {\n return lo - 1\n }\n }\n\n return lo\n}\n","import * as React from \"react\"\n\nimport { LegendGroup, ItemType, LegendProps } from \"./types/legendTypes\"\n\nconst typeHash = {\n fill: (style: Object) => <rect style={style} width={20} height={20} />,\n line: (style: Object) => <line style={style} x1={0} y1={0} x2={20} y2={20} />\n}\n\nfunction renderType(\n item: Object,\n i: number,\n type: ItemType,\n styleFn: Function\n) {\n let renderedType\n if (typeof type === \"function\") {\n renderedType = type(item)\n } else {\n const Type = typeHash[type]\n const style = styleFn(item, i)\n renderedType = Type(style)\n }\n return renderedType\n}\n\nconst renderLegendGroupVertical = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(0,${itemOffset})`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={30}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 25\n })\n return renderedItems\n}\n\nconst renderLegendGroupHorizontal = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(${itemOffset},0)`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={25}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 35\n itemOffset += item.label.length * 8\n })\n return { items: renderedItems, offset: itemOffset }\n}\n\nconst renderVerticalGroup = ({\n legendGroups,\n width,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n width: number\n customClickBehavior?: Function\n}) => {\n let offset = 30\n\n const renderedGroups = []\n\n legendGroups.forEach((l, i) => {\n offset += 5\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={0}\n y1={offset}\n x2={width}\n y2={offset}\n />\n )\n offset += 10\n if (l.label) {\n offset += 20\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n y={offset}\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 10\n }\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(0,${offset})`}\n >\n {renderLegendGroupVertical(l, customClickBehavior)}\n </g>\n )\n offset += l.items.length * 25 + 10\n })\n\n return renderedGroups\n}\n\nconst renderHorizontalGroup = ({\n legendGroups,\n title,\n height,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n title: string | boolean\n height: number\n customClickBehavior?: Function\n}) => {\n let offset = 0\n\n const renderedGroups = []\n\n const verticalOffset = title === false ? 10 : 40\n\n legendGroups.forEach((l, i) => {\n if (l.label) {\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n transform={`translate(${offset},${verticalOffset}) rotate(90)`}\n textAnchor=\"start\"\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 20\n }\n\n const renderedItems = renderLegendGroupHorizontal(l, customClickBehavior)\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(${offset},${verticalOffset})`}\n >\n {renderedItems.items}\n </g>\n )\n offset += renderedItems.offset + 5\n\n if (legendGroups[i + 1]) {\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={offset}\n y1={verticalOffset - 10}\n x2={offset}\n y2={height + verticalOffset + 10}\n />\n )\n }\n offset += 15\n })\n\n return (\n <g>\n {title !== false && (\n <line\n x1={0}\n x2={offset + 10}\n y1={verticalOffset - 10}\n y2={verticalOffset - 10}\n stroke=\"gray\"\n className=\"title-neatline\"\n />\n )}\n {renderedGroups}\n </g>\n )\n}\n\nexport default function Legend(props: LegendProps) {\n const {\n legendGroups,\n customClickBehavior,\n title = \"Legend\",\n width = 100,\n height = 20,\n orientation = \"vertical\"\n } = props\n const renderedGroups =\n orientation === \"vertical\"\n ? renderVerticalGroup({\n legendGroups,\n width,\n customClickBehavior\n })\n : renderHorizontalGroup({\n legendGroups,\n title,\n height,\n customClickBehavior\n })\n\n return (\n <g>\n {title !== undefined && (\n <text\n className=\"legend-title\"\n y={20}\n x={orientation === \"horizontal\" ? 0 : width / 2}\n textAnchor={orientation === \"horizontal\" ? \"start\" : \"middle\"}\n >\n {title}\n </text>\n )}\n {renderedGroups}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport { bin as d3Bin } from \"d3-array\"\nimport type { ScaleLinear } from \"d3-scale\"\nimport type { MarginalConfig, MarginalType } from \"./types\"\n\nexport type MarginalOrient = \"top\" | \"bottom\" | \"left\" | \"right\"\n\nexport interface MarginalGraphicsProps {\n orient: MarginalOrient\n config: MarginalConfig\n /** Raw numeric values along the relevant axis */\n values: number[]\n /** The chart's scale for the axis this marginal summarizes */\n scale: ScaleLinear<number, number>\n /** Available pixel space in the margin (perpendicular to axis) */\n size: number\n /** Chart width (top/bottom) or height (left/right) */\n length: number\n}\n\n/** Resolve a string shorthand or full config into a MarginalConfig */\nexport function normalizeMarginalConfig(\n input: MarginalConfig | MarginalType\n): MarginalConfig {\n if (typeof input === \"string\") {\n return { type: input }\n }\n return input\n}\n\nconst DEFAULTS = {\n bins: 20,\n fill: \"#4e79a7\",\n fillOpacity: 0.5,\n stroke: \"none\",\n strokeWidth: 1\n}\n\nfunction resolveConfig(config: MarginalConfig) {\n return {\n type: config.type,\n bins: config.bins ?? DEFAULTS.bins,\n fill: config.fill ?? DEFAULTS.fill,\n fillOpacity: config.fillOpacity ?? DEFAULTS.fillOpacity,\n stroke: config.stroke ?? DEFAULTS.stroke,\n strokeWidth: config.strokeWidth ?? DEFAULTS.strokeWidth\n }\n}\n\n/** Compute quartiles and whiskers for boxplot */\nfunction boxplotStats(values: number[]) {\n const sorted = [...values].sort((a, b) => a - b)\n const n = sorted.length\n if (n === 0) return null\n\n const q1 = sorted[Math.floor(n * 0.25)]\n const median = sorted[Math.floor(n * 0.5)]\n const q3 = sorted[Math.floor(n * 0.75)]\n const iqr = q3 - q1\n const whiskerLow = Math.max(sorted[0], q1 - 1.5 * iqr)\n const whiskerHigh = Math.min(sorted[n - 1], q3 + 1.5 * iqr)\n\n return { q1, median, q3, whiskerLow, whiskerHigh }\n}\n\nexport function MarginalGraphics({\n orient,\n config: rawConfig,\n values,\n scale,\n size,\n length\n}: MarginalGraphicsProps) {\n const config = resolveConfig(rawConfig)\n const padding = 4\n\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n\n const content = useMemo(() => {\n if (values.length === 0) return null\n\n const domain = scale.domain() as [number, number]\n const availableSize = size - padding * 2\n\n if (config.type === \"boxplot\") {\n const stats = boxplotStats(values)\n if (!stats) return null\n\n const { q1, median, q3, whiskerLow, whiskerHigh } = stats\n const boxThickness = Math.min(availableSize * 0.5, 20)\n const offset = (availableSize - boxThickness) / 2 + padding\n\n if (isHorizontal) {\n const x1 = scale(q1)\n const x2 = scale(q3)\n const xMed = scale(median)\n const xWLow = scale(whiskerLow)\n const xWHigh = scale(whiskerHigh)\n const growDir = orient === \"top\" ? -1 : 1\n const baseY = orient === \"top\" ? 0 : 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n {/* Whisker line */}\n <line\n x1={xWLow} y1={baseY + growDir * (offset + boxThickness / 2)}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness / 2)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Whisker caps */}\n <line\n x1={xWLow} y1={baseY + growDir * offset}\n x2={xWLow} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={xWHigh} y1={baseY + growDir * offset}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Box */}\n <rect\n x={Math.min(x1, x2)}\n y={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n width={Math.abs(x2 - x1)}\n height={boxThickness}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n {/* Median line */}\n <line\n x1={xMed} y1={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n x2={xMed} y2={orient === \"top\" ? baseY - offset : baseY + offset + boxThickness}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n } else {\n // Vertical: left/right\n const y1 = scale(q1)\n const y2 = scale(q3)\n const yMed = scale(median)\n const yWLow = scale(whiskerLow)\n const yWHigh = scale(whiskerHigh)\n const growDir = orient === \"left\" ? -1 : 1\n const baseX = 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n <line\n x1={baseX + growDir * (offset + boxThickness / 2)}\n y1={yWLow} x2={baseX + growDir * (offset + boxThickness / 2)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWLow}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWLow}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWHigh}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <rect\n x={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y={Math.min(y1, y2)}\n width={boxThickness}\n height={Math.abs(y2 - y1)}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n <line\n x1={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y1={yMed}\n x2={orient === \"left\" ? baseX - offset : baseX + offset + boxThickness}\n y2={yMed}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n }\n }\n\n // Binned types: histogram, violin, ridgeline\n const binner = d3Bin()\n .domain(domain)\n .thresholds(config.bins)\n\n const bins = binner(values)\n if (bins.length === 0) return null\n\n const maxCount = Math.max(...bins.map(b => b.length))\n if (maxCount === 0) return null\n\n if (config.type === \"histogram\") {\n return (\n <g data-testid={`marginal-histogram-${orient}`}>\n {bins.map((bin, i) => {\n if (bin.x0 == null || bin.x1 == null) return null\n const count = bin.length\n const barSize = (count / maxCount) * availableSize\n\n if (isHorizontal) {\n const x = scale(bin.x0)\n const w = scale(bin.x1) - scale(bin.x0)\n const y = orient === \"top\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={y} width={Math.max(w, 0.5)} height={barSize}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n } else {\n const y = scale(bin.x0)\n const h = scale(bin.x1) - scale(bin.x0)\n const x = orient === \"left\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={Math.min(y, y + h)} width={barSize} height={Math.abs(h)}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n }\n })}\n </g>\n )\n }\n\n if (config.type === \"violin\") {\n // Symmetric density path around the midline\n const midline = availableSize / 2 + padding\n\n const points: string[] = []\n // Forward pass (one side)\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline - w) : midline - w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline - w) : midline - w\n points.push(`${x},${pos}`)\n }\n }\n // Reverse pass (other side)\n for (let i = bins.length - 1; i >= 0; i--) {\n const bin = bins[i]\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline + w) : midline + w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline + w) : midline + w\n points.push(`${x},${pos}`)\n }\n }\n\n return (\n <g data-testid={`marginal-violin-${orient}`}>\n <polygon\n points={points.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n if (config.type === \"ridgeline\") {\n // One-sided area fill from baseline into the margin\n const pathParts: string[] = []\n\n if (isHorizontal) {\n const baseY = orient === \"top\" ? 0 : 0\n // Start at baseline\n const startX = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${startX},${baseY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const h = (bin.length / maxCount) * availableSize\n const x = scale(mid)\n const y = orient === \"top\" ? -h - padding : h + padding\n pathParts.push(`L${x},${y}`)\n }\n\n // Close back to baseline\n const endX = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${endX},${baseY}`)\n pathParts.push(\"Z\")\n } else {\n const baseX = 0\n const startY = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${baseX},${startY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * availableSize\n const y = scale(mid)\n const x = orient === \"left\" ? -w - padding : w + padding\n pathParts.push(`L${x},${y}`)\n }\n\n const endY = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${baseX},${endY}`)\n pathParts.push(\"Z\")\n }\n\n return (\n <g data-testid={`marginal-ridgeline-${orient}`}>\n <path\n d={pathParts.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n return null\n }, [values, scale, config, size, length, orient, isHorizontal, padding])\n\n if (!content) return null\n\n // Position the <g> at the margin edge\n let transform: string\n switch (orient) {\n case \"top\":\n transform = `translate(0, 0)` // top edge of chart area\n break\n case \"bottom\":\n transform = `translate(0, ${length})` // wait — length is chart width for top/bottom\n break\n case \"left\":\n transform = `translate(0, 0)` // left edge of chart area\n break\n case \"right\":\n transform = `translate(${length}, 0)` // length is chart width for left/right? No.\n break\n }\n\n // For top/bottom: length = chart width. The g is already inside the margin-translated group.\n // For left/right: length = chart height.\n // orient=bottom means we're at y=chartHeight (bottom of chart area)\n // orient=right means we're at x=chartWidth (right of chart area)\n // Actually, let the parent handle positioning. This component just draws relative to origin.\n\n return (\n <g className={`marginal-${orient}`} data-testid={`marginal-${orient}`}>\n {content}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport type { StreamScales, AnnotationContext, MarginalGraphicsConfig, MarginalConfig, MarginalType } from \"./types\"\nimport type { ReactNode } from \"react\"\nimport Legend from \"../Legend\"\nimport type { LegendGroup } from \"../types/legendTypes\"\nimport { MarginalGraphics, normalizeMarginalConfig } from \"./MarginalGraphics\"\n\ninterface SVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: StreamScales | null\n\n // Axes\n showAxes?: boolean\n xLabel?: string\n yLabel?: string\n xFormat?: (d: any) => string\n yFormat?: (d: any) => string\n\n // Grid\n showGrid?: boolean\n\n // Title\n title?: string | ReactNode\n\n // Legend\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n // Foreground graphics (rendered on top in SVG overlay)\n foregroundGraphics?: ReactNode\n\n // Marginal graphics\n marginalGraphics?: MarginalGraphicsConfig\n xValues?: number[]\n yValues?: number[]\n\n // Annotations\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n annotationFrame?: number\n\n children?: ReactNode\n}\n\nfunction isLegendConfig(value: unknown): value is { legendGroups: LegendGroup[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !React.isValidElement(value) &&\n \"legendGroups\" in value\n )\n}\n\nfunction defaultTickFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\nexport function SVGOverlay(props: SVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n scales,\n showAxes,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n showGrid,\n title,\n legend,\n foregroundGraphics,\n marginalGraphics,\n xValues,\n yValues,\n annotations,\n svgAnnotationRules,\n annotationFrame,\n children\n } = props\n\n // Generate axis ticks\n const xTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.x.ticks(5).map(v => ({\n value: v,\n pixel: scales.x(v),\n label: (xFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, xFormat])\n\n const yTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.y.ticks(5).map(v => ({\n value: v,\n pixel: scales.y(v),\n label: (yFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, yFormat])\n\n // Render annotations\n const renderedAnnotations = useMemo(() => {\n if (!annotations || annotations.length === 0 || !svgAnnotationRules) return null\n return annotations\n .map((annotation, i) =>\n svgAnnotationRules(annotation, i, {\n scales: scales ? { time: scales.x, value: scales.y } : null,\n timeAxis: \"x\",\n width,\n height\n })\n )\n .filter(Boolean)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [annotations, svgAnnotationRules, width, height, annotationFrame])\n\n const hasContent = showAxes || title || legend || foregroundGraphics || marginalGraphics || (renderedAnnotations && renderedAnnotations.length > 0) || showGrid || children\n\n if (!hasContent) return null\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Grid lines */}\n {showGrid && scales && (\n <g className=\"stream-grid\">\n {xTicks.map((tick, i) => (\n <line\n key={`xgrid-${i}`}\n x1={tick.pixel}\n y1={0}\n x2={tick.pixel}\n y2={height}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n {yTicks.map((tick, i) => (\n <line\n key={`ygrid-${i}`}\n x1={0}\n y1={tick.pixel}\n x2={width}\n y2={tick.pixel}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n </g>\n )}\n\n {/* Axes */}\n {showAxes && scales && (\n <g className=\"stream-axes\">\n {/* X axis */}\n <line x1={0} y1={height} x2={width} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {xTicks.map((tick, i) => (\n <g key={`xtick-${i}`} transform={`translate(${tick.pixel},${height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n y={18}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {xLabel && (\n <text\n x={width / 2}\n y={height + 40}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {xLabel}\n </text>\n )}\n\n {/* Y axis */}\n <line x1={0} y1={0} x2={0} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {yTicks.map((tick, i) => (\n <g key={`ytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n x={-8}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {yLabel && (\n <text\n x={-margin.left + 15}\n y={height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-margin.left + 15}, ${height / 2})`}\n style={{ userSelect: \"none\" }}\n >\n {yLabel}\n </text>\n )}\n </g>\n )}\n\n {/* Annotations */}\n {renderedAnnotations}\n\n {/* Marginal graphics */}\n {marginalGraphics && scales && xValues && yValues && (\n <>\n {marginalGraphics.top && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"top\"\n config={normalizeMarginalConfig(marginalGraphics.top)}\n values={xValues}\n scale={scales.x}\n size={margin.top}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.bottom && (\n <g transform={`translate(0, ${height})`}>\n <MarginalGraphics\n orient=\"bottom\"\n config={normalizeMarginalConfig(marginalGraphics.bottom)}\n values={xValues}\n scale={scales.x}\n size={margin.bottom}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.left && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"left\"\n config={normalizeMarginalConfig(marginalGraphics.left)}\n values={yValues}\n scale={scales.y}\n size={margin.left}\n length={height}\n />\n </g>\n )}\n {marginalGraphics.right && (\n <g transform={`translate(${width}, 0)`}>\n <MarginalGraphics\n orient=\"right\"\n config={normalizeMarginalConfig(marginalGraphics.right)}\n values={yValues}\n scale={scales.y}\n size={margin.right}\n length={height}\n />\n </g>\n )}\n </>\n )}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n\n {children}\n </g>\n\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={20}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {typeof title === \"string\" ? title : null}\n </text>\n )}\n\n {/* Legend */}\n {legend && (\n <g transform={`translate(${totalWidth - margin.right + 10}, ${margin.top})`}>\n {isLegendConfig(legend)\n ? <Legend legendGroups={legend.legendGroups} title=\"\" width={100} />\n : (legend as ReactNode)}\n </g>\n )}\n </svg>\n )\n}\n","import type { SceneNode, LineSceneNode, LineColorThreshold } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nfunction resolveColor(\n value: number,\n thresholds: LineColorThreshold[],\n baseColor: string\n): string {\n let color = baseColor\n for (const t of thresholds) {\n if (t.thresholdType === \"lesser\") {\n if (value < t.value) color = t.color\n } else {\n if (value > t.value) color = t.color\n }\n }\n return color\n}\n\n/**\n * Canvas line renderer.\n * Renders LineSceneNode paths using moveTo/lineTo.\n * Supports threshold-based segment coloring when colorThresholds + rawValues\n * are present on the node.\n */\nexport const lineCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const lineNodes = nodes.filter((n): n is LineSceneNode => n.type === \"line\")\n\n for (const node of lineNodes) {\n if (node.path.length < 2) continue\n\n const baseColor = node.style.stroke || \"#007bff\"\n const lineWidth = node.style.strokeWidth || 2\n const thresholds = node.colorThresholds\n const rawValues = node.rawValues\n\n if (node.style.strokeDasharray) {\n ctx.setLineDash(node.style.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([])\n }\n\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n ctx.lineWidth = lineWidth\n\n // Fast path: no color thresholds — single-path draw\n if (!thresholds || thresholds.length === 0 || !rawValues || rawValues.length !== node.path.length) {\n ctx.beginPath()\n ctx.strokeStyle = baseColor\n\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n ctx.stroke()\n } else {\n // Threshold mode: segment-based drawing with interpolated crossings\n let prevX: number | null = null\n let prevY: number | null = null\n let prevValue: number | null = null\n let prevColor: string | null = null\n let pathStarted = false\n\n function startSegment(color: string, x: number, y: number) {\n ctx.beginPath()\n ctx.strokeStyle = color\n ctx.moveTo(x, y)\n pathStarted = true\n }\n\n function endSegment() {\n if (pathStarted) {\n ctx.stroke()\n pathStarted = false\n }\n }\n\n for (let i = 0; i < node.path.length; i++) {\n const [x, y] = node.path[i]\n const v = rawValues[i]\n const currColor = resolveColor(v, thresholds, baseColor)\n\n if (prevX === null || prevColor === null || prevValue === null) {\n startSegment(currColor, x, y)\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n continue\n }\n\n if (currColor === prevColor) {\n ctx.lineTo(x, y)\n } else {\n // Find threshold crossings between prevValue and v\n const crossings: Array<{ t: number }> = []\n\n for (const threshold of thresholds) {\n const tv = threshold.value\n if ((prevValue <= tv && v >= tv) || (prevValue >= tv && v <= tv)) {\n if (prevValue !== tv && v !== tv) {\n const interpT = (tv - prevValue) / (v - prevValue)\n crossings.push({ t: interpT })\n }\n }\n }\n\n crossings.sort((a, b) => a.t - b.t)\n\n for (const crossing of crossings) {\n const midX = prevX + (x - prevX) * crossing.t\n const midY = prevY! + (y - prevY!) * crossing.t\n\n const nudgedValue = prevValue + (v - prevValue) * Math.min(crossing.t + 0.0001, 1)\n const nextColor = resolveColor(nudgedValue, thresholds, baseColor)\n\n ctx.lineTo(midX, midY)\n endSegment()\n startSegment(nextColor, midX, midY)\n }\n\n ctx.lineTo(x, y)\n }\n\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n }\n\n endSegment()\n }\n\n // Fill area under line if fillOpacity is set\n if (node.style.fill && node.style.fillOpacity && node.style.fillOpacity > 0) {\n ctx.beginPath()\n ctx.globalAlpha = node.style.fillOpacity\n ctx.fillStyle = node.style.fill\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n const lastX = node.path[node.path.length - 1][0]\n const firstX = node.path[0][0]\n ctx.lineTo(lastX, layout.height)\n ctx.lineTo(firstX, layout.height)\n ctx.closePath()\n ctx.fill()\n }\n\n ctx.globalAlpha = 1\n ctx.setLineDash([])\n }\n}\n","import type { SceneNode, AreaSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas area renderer.\n * Renders AreaSceneNode as filled regions between topPath and bottomPath.\n * Supports both overlapping areas and stacked areas.\n */\nexport const areaCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const areaNodes = nodes.filter((n): n is AreaSceneNode => n.type === \"area\")\n\n for (const node of areaNodes) {\n if (node.topPath.length < 2) continue\n\n ctx.beginPath()\n\n // Draw top path forward\n const [startX, startY] = node.topPath[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n\n // Draw bottom path backward to close the area\n for (let i = node.bottomPath.length - 1; i >= 0; i--) {\n ctx.lineTo(node.bottomPath[i][0], node.bottomPath[i][1])\n }\n\n ctx.closePath()\n\n // Fill\n const fillOpacity = node.style.fillOpacity ?? 0.7\n ctx.globalAlpha = fillOpacity\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n // Stroke on top\n if (node.style.stroke && node.style.stroke !== \"none\") {\n ctx.globalAlpha = 1\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 2\n ctx.setLineDash([])\n\n // Only stroke the top path (not the baseline)\n ctx.beginPath()\n ctx.moveTo(node.topPath[0][0], node.topPath[0][1])\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, PointSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas point renderer.\n * Renders PointSceneNode as circles. Used for Scatterplot, BubbleChart, and SwarmChart.\n * Supports pulse glow effect via _pulseIntensity/_pulseColor fields.\n */\nexport const pointCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const pointNodes = nodes.filter((n): n is PointSceneNode => n.type === \"point\")\n\n for (const node of pointNodes) {\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r, 0, Math.PI * 2)\n\n const alpha = node.style.opacity ?? node.style.fillOpacity\n if (alpha != null) {\n ctx.globalAlpha = alpha\n }\n\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.stroke()\n }\n\n // Pulse glow ring\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n const glowRadius = 4\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r + glowRadius * node._pulseIntensity, 0, Math.PI * 2)\n ctx.strokeStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.lineWidth = 2 * node._pulseIntensity\n ctx.globalAlpha = node._pulseIntensity * 0.5\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, RectSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas bar renderer.\n * Renders RectSceneNode as filled rectangles. Supports icon/isotype mode\n * where an image is stamped repeatedly to fill the bar instead of a solid fill.\n */\nexport const barCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const rectNodes = nodes.filter((n): n is RectSceneNode => n.type === \"rect\")\n\n for (const node of rectNodes) {\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n if (node.style.icon) {\n // Icon/isotype mode: stamp the image to fill the bar\n drawIconBar(ctx, node)\n } else {\n // Standard solid fill\n ctx.fillStyle = node.style.fill || \"#007bff\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n }\n }\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n\nfunction drawIconBar(ctx: CanvasRenderingContext2D, node: RectSceneNode): void {\n const icon = node.style.icon!\n const padding = node.style.iconPadding || 2\n\n // Determine icon size: fit within the bar width\n const iconSize = Math.min(node.w, node.w) - padding\n if (iconSize <= 0) return\n\n // Determine if bar is primarily vertical or horizontal\n const isVerticalBar = node.h > node.w\n\n ctx.save()\n ctx.beginPath()\n ctx.rect(node.x, node.y, node.w, node.h)\n ctx.clip()\n\n if (isVerticalBar) {\n // Stamp icons from bottom to top\n const step = iconSize + padding\n const startY = node.y + node.h - iconSize\n const centerX = node.x + (node.w - iconSize) / 2\n\n for (let y = startY; y >= node.y - iconSize; y -= step) {\n ctx.drawImage(icon, centerX, y, iconSize, iconSize)\n }\n } else {\n // Stamp icons from left to right\n const step = iconSize + padding\n const centerY = node.y + (node.h - iconSize) / 2\n\n for (let x = node.x; x < node.x + node.w; x += step) {\n ctx.drawImage(icon, x, centerY, iconSize, iconSize)\n }\n }\n\n ctx.restore()\n}\n","import type { StreamRendererFn } from \"./types\"\nimport { pointCanvasRenderer } from \"./pointCanvasRenderer\"\n\n/**\n * Canvas swarm renderer.\n * Identical to point renderer — swarm data points are pre-computed as PointSceneNodes.\n * Separated for semantic clarity and potential future swarm-specific logic.\n */\nexport const swarmCanvasRenderer: StreamRendererFn = pointCanvasRenderer\n","import type { StreamRendererFn } from \"./types\"\nimport { barCanvasRenderer } from \"./barCanvasRenderer\"\n\n/**\n * Canvas waterfall renderer.\n * Waterfall bars are pre-computed as RectSceneNodes by PipelineStore,\n * so the rendering is identical to the bar renderer.\n * Connector lines between bars are handled separately if needed.\n */\nexport const waterfallCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n // Render the bar segments\n barCanvasRenderer(ctx, nodes, scales, layout)\n\n // Draw connector lines between consecutive waterfall bars\n const rects = nodes.filter(n => n.type === \"rect\")\n if (rects.length < 2) return\n\n ctx.save()\n ctx.strokeStyle = \"#999\"\n ctx.lineWidth = 1\n ctx.setLineDash([])\n\n for (let i = 0; i < rects.length - 1; i++) {\n const curr = rects[i] as any\n const next = rects[i + 1] as any\n if (!curr.datum?.cumEnd || !next.datum?.baseline) continue\n\n // Connect from end of current bar to start of next bar at cumEnd level\n const yConn = scales.y(curr.datum.cumEnd)\n const x1 = curr.x + curr.w\n const x2 = next.x\n\n ctx.beginPath()\n ctx.moveTo(x1, yConn)\n ctx.lineTo(x2, yConn)\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","import type { SceneNode, HeatcellSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas heatmap renderer.\n * Renders HeatcellSceneNode as filled rectangles with color encoding.\n */\nexport const heatmapCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const heatNodes = nodes.filter((n): n is HeatcellSceneNode => n.type === \"heatcell\")\n\n for (const node of heatNodes) {\n // Apply decay opacity if present (stored as style.opacity by applyDecay)\n const nodeStyle = (node as any).style\n if (nodeStyle?.opacity != null) {\n ctx.globalAlpha = nodeStyle.opacity\n }\n\n ctx.fillStyle = node.fill\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n // Cell border\n ctx.strokeStyle = \"#fff\"\n ctx.lineWidth = 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, StreamScales, StreamLayout, CandlestickSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nexport const candlestickCanvasRenderer: StreamRendererFn = (\n ctx: CanvasRenderingContext2D,\n nodes: SceneNode[],\n _scales: StreamScales,\n _layout: StreamLayout\n) => {\n for (const node of nodes) {\n if (node.type !== \"candlestick\") continue\n const n = node as CandlestickSceneNode\n\n // Draw wick (high-low line)\n ctx.beginPath()\n ctx.moveTo(n.x, n.highY)\n ctx.lineTo(n.x, n.lowY)\n ctx.strokeStyle = n.wickColor\n ctx.lineWidth = n.wickWidth\n ctx.stroke()\n\n // Draw body (open-close rect)\n const bodyTop = Math.min(n.openY, n.closeY)\n const bodyHeight = Math.abs(n.openY - n.closeY)\n const bodyColor = n.isUp ? n.upColor : n.downColor\n\n ctx.fillStyle = bodyColor\n ctx.fillRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n\n // Body border\n ctx.strokeStyle = bodyColor\n ctx.lineWidth = 1\n ctx.strokeRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n }\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamXYFrameProps,\n StreamXYFrameHandle,\n StreamChartType,\n HoverData,\n HoverAnnotationConfig,\n SceneNode,\n StreamScales,\n MarginalGraphicsConfig\n} from \"./types\"\nimport { brush as d3Brush, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\"\nimport { select as d3Select } from \"d3-selection\"\nimport { DataSourceAdapter } from \"./DataSourceAdapter\"\nimport { PipelineStore, type PipelineConfig } from \"./PipelineStore\"\nimport { findNearestNode, type HitResult } from \"./CanvasHitTester\"\nimport { SVGOverlay } from \"./SVGOverlay\"\n\n// Canvas renderers\nimport { lineCanvasRenderer } from \"./renderers/lineCanvasRenderer\"\nimport { areaCanvasRenderer } from \"./renderers/areaCanvasRenderer\"\nimport { pointCanvasRenderer } from \"./renderers/pointCanvasRenderer\"\nimport { barCanvasRenderer } from \"./renderers/barCanvasRenderer\"\nimport { swarmCanvasRenderer } from \"./renderers/swarmCanvasRenderer\"\nimport { waterfallCanvasRenderer } from \"./renderers/waterfallCanvasRenderer\"\nimport { heatmapCanvasRenderer } from \"./renderers/heatmapCanvasRenderer\"\nimport { candlestickCanvasRenderer } from \"./renderers/candlestickCanvasRenderer\"\nimport type { StreamRendererFn } from \"./renderers/types\"\n\n// ── Renderer dispatch ──────────────────────────────────────────────────\n\nconst RENDERERS: Record<StreamChartType, StreamRendererFn[]> = {\n line: [areaCanvasRenderer, lineCanvasRenderer],\n area: [areaCanvasRenderer],\n stackedarea: [areaCanvasRenderer],\n scatter: [pointCanvasRenderer],\n bubble: [pointCanvasRenderer],\n heatmap: [heatmapCanvasRenderer],\n bar: [barCanvasRenderer],\n swarm: [swarmCanvasRenderer],\n waterfall: [waterfallCanvasRenderer],\n candlestick: [candlestickCanvasRenderer]\n}\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 20, right: 20, bottom: 30, left: 40 }\n\n// ── Theme ─────────────────────────────────────────\n\ninterface ThemeColors {\n axisStroke: string\n tickText: string\n crosshair: string\n hoverFill: string\n hoverStroke: string\n pointRing: string\n}\n\nconst LIGHT_THEME: ThemeColors = {\n axisStroke: \"#ccc\",\n tickText: \"#666\",\n crosshair: \"rgba(0, 0, 0, 0.25)\",\n hoverFill: \"rgba(255, 255, 255, 0.3)\",\n hoverStroke: \"rgba(0, 0, 0, 0.4)\",\n pointRing: \"white\"\n}\n\nfunction resolveThemeColors(el: HTMLElement | null): ThemeColors {\n if (!el) return LIGHT_THEME\n const style = getComputedStyle(el)\n const textSecondary = style.getPropertyValue(\"--text-secondary\").trim()\n const textPrimary = style.getPropertyValue(\"--text-primary\").trim()\n const surface3 = style.getPropertyValue(\"--surface-3\").trim()\n const surface0 = style.getPropertyValue(\"--surface-0\").trim()\n\n if (!textSecondary && !textPrimary) return LIGHT_THEME\n\n return {\n axisStroke: surface3 || LIGHT_THEME.axisStroke,\n tickText: textSecondary || LIGHT_THEME.tickText,\n crosshair: textSecondary ? `${textSecondary}66` : LIGHT_THEME.crosshair,\n hoverFill: surface0 ? `${surface0}4D` : LIGHT_THEME.hoverFill,\n hoverStroke: textSecondary ? `${textSecondary}99` : LIGHT_THEME.hoverStroke,\n pointRing: surface0 || LIGHT_THEME.pointRing\n }\n}\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: 4,\n fontSize: 12,\n lineHeight: 1.5,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultTooltip({ hover }: { hover: HoverData }) {\n const fmtValue = (v: number) =>\n Number.isInteger(v) ? String(v) : v.toFixed(2)\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {fmtValue(hover.value)}\n </div>\n <div style={{ opacity: 0.7, fontSize: 11 }}>\n {fmtValue(hover.time)}\n </div>\n </div>\n )\n}\n\n// ── Crosshair drawing ──────────────────────────────────────────────────\n\nfunction drawCrosshair(\n ctx: CanvasRenderingContext2D,\n hover: HoverData,\n width: number,\n height: number,\n config: HoverAnnotationConfig,\n pointColor: string,\n theme: ThemeColors\n) {\n const showCrosshair = config.crosshair !== false\n if (!showCrosshair) return\n\n ctx.save()\n const crossStyle = typeof config.crosshair === \"object\" ? config.crosshair : {}\n ctx.strokeStyle = crossStyle.stroke || theme.crosshair\n ctx.lineWidth = crossStyle.strokeWidth || 1\n if (crossStyle.strokeDasharray) {\n ctx.setLineDash(crossStyle.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([4, 4])\n }\n\n ctx.beginPath()\n ctx.moveTo(hover.x, 0)\n ctx.lineTo(hover.x, height)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.moveTo(0, hover.y)\n ctx.lineTo(width, hover.y)\n ctx.stroke()\n\n ctx.restore()\n\n // Point indicator\n ctx.beginPath()\n ctx.arc(hover.x, hover.y, 4, 0, Math.PI * 2)\n ctx.fillStyle = pointColor\n ctx.fill()\n ctx.strokeStyle = theme.pointRing\n ctx.lineWidth = 2\n ctx.stroke()\n}\n\n// ── Brush Overlay ─────────────────────────────────────────────────────\n\ninterface BrushOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n dimension: \"x\" | \"y\" | \"xy\"\n scales: StreamScales | null\n onBrush: (extent: { x: [number, number]; y: [number, number] } | null) => void\n}\n\nfunction BrushOverlay({\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n dimension,\n scales,\n onBrush\n}: BrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const brushRef = useRef<any>(null)\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const g = d3Select(svgRef.current).select<SVGGElement>(\".brush-g\")\n\n const brushFn =\n dimension === \"x\"\n ? d3BrushX()\n : dimension === \"y\"\n ? d3BrushY()\n : d3Brush()\n\n brushFn.extent([[0, 0], [width, height]])\n\n brushFn.on(\"brush end\", (event: any) => {\n if (!scales) return\n\n if (!event.selection) {\n onBrush(null)\n return\n }\n\n let xRange: [number, number]\n let yRange: [number, number]\n\n if (dimension === \"x\") {\n const [px0, px1] = event.selection as [number, number]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(height), scales.y.invert(0)]\n } else if (dimension === \"y\") {\n const [py0, py1] = event.selection as [number, number]\n xRange = [scales.x.invert(0), scales.x.invert(width)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n } else {\n const [[px0, py0], [px1, py1]] = event.selection as [[number, number], [number, number]]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n }\n\n onBrush({ x: xRange, y: yRange })\n })\n\n g.call(brushFn as any)\n brushRef.current = brushFn\n\n // Style the brush selection rectangle\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.15)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brushFn.on(\"brush end\", null)\n brushRef.current = null\n }\n }, [width, height, dimension, scales, onBrush])\n\n return (\n <svg\n ref={svgRef}\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n // Allow pointer events only on the brush overlay itself\n pointerEvents: \"all\"\n }}\n >\n <g className=\"brush-g\" transform={`translate(${margin.left},${margin.top})`} />\n </svg>\n )\n}\n\n// ── StreamXYFrame ──────────────────────────────────────────────────────\n\nconst StreamXYFrame = forwardRef<StreamXYFrameHandle, StreamXYFrameProps>(\n function StreamXYFrame(props, ref) {\n const {\n chartType,\n runtimeMode,\n data,\n xAccessor,\n yAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n lineDataAccessor,\n curve,\n normalize,\n binSize,\n valueAccessor,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n timeAccessor,\n xExtent,\n yExtent,\n extentPadding = 0.1,\n sizeRange,\n size = [500, 300],\n margin: marginProp,\n className,\n background,\n lineStyle,\n pointStyle,\n areaStyle,\n barStyle,\n waterfallStyle,\n swarmStyle,\n barColors,\n colorScheme,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n showAxes = true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n tickFormatTime,\n tickFormatValue,\n hoverAnnotation,\n tooltipContent,\n customHoverBehavior,\n enableHover,\n annotations,\n svgAnnotationRules,\n showGrid,\n legend,\n backgroundGraphics,\n foregroundGraphics,\n title,\n categoryAccessor,\n brush,\n onBrush,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins,\n marginalGraphics\n } = props\n\n const margin = { ...DEFAULT_MARGIN, ...marginProp }\n\n // Auto-expand margins to at least 60px when marginals are configured\n if (marginalGraphics) {\n const MIN_MARGINAL = 60\n if (marginalGraphics.top && margin.top < MIN_MARGINAL) margin.top = MIN_MARGINAL\n if (marginalGraphics.bottom && margin.bottom < MIN_MARGINAL) margin.bottom = MIN_MARGINAL\n if (marginalGraphics.left && margin.left < MIN_MARGINAL) margin.left = MIN_MARGINAL\n if (marginalGraphics.right && margin.right < MIN_MARGINAL) margin.right = MIN_MARGINAL\n }\n\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n // Determine effective hover annotation config\n const effectiveHoverAnnotation = hoverAnnotation ?? enableHover\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const dirtyRef = useRef(false)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n // Scales state: updated after each scene computation so SVGOverlay re-renders\n const [currentScales, setCurrentScales] = useState<StreamScales | null>(null)\n\n // Hover state: ref for canvas (sync), React state for tooltip (async)\n const hoverRef = useRef<HoverData | null>(null)\n const [hoverPoint, setHoverPoint] = useState<HoverData | null>(null)\n\n // Staleness state\n const [isStale, setIsStale] = useState(false)\n\n // Marginal data values\n const [marginalXValues, setMarginalXValues] = useState<number[]>([])\n const [marginalYValues, setMarginalYValues] = useState<number[]>([])\n\n\n // Render function ref (always-fresh closure)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── Pipeline ─────────────────────────────────────────────────────────\n\n const isStreaming = runtimeMode === \"streaming\" || [\"bar\", \"swarm\", \"waterfall\"].includes(chartType)\n\n const pipelineConfig = useMemo((): PipelineConfig => ({\n chartType,\n runtimeMode: isStreaming ? \"streaming\" : \"bounded\",\n windowSize,\n windowMode,\n arrowOfTime: isStreaming ? arrowOfTime : \"right\",\n extentPadding,\n xAccessor: isStreaming ? undefined : xAccessor,\n yAccessor: isStreaming ? undefined : yAccessor,\n timeAccessor: isStreaming ? timeAccessor : undefined,\n valueAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n categoryAccessor,\n lineDataAccessor,\n xExtent,\n yExtent,\n sizeRange,\n binSize,\n normalize,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n lineStyle,\n pointStyle,\n areaStyle,\n swarmStyle,\n colorScheme,\n barColors,\n annotations,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins\n }), [\n chartType, windowSize, windowMode, arrowOfTime, extentPadding,\n xAccessor, yAccessor, timeAccessor, valueAccessor,\n colorAccessor, sizeAccessor, groupAccessor, categoryAccessor,\n lineDataAccessor, xExtent, yExtent, sizeRange, binSize, normalize,\n boundsAccessor, boundsStyle,\n openAccessor, highAccessor, lowAccessor, closeAccessor, candlestickStyle,\n lineStyle, pointStyle, areaStyle, swarmStyle, colorScheme, barColors, annotations,\n decay, pulse, transition, staleness,\n heatmapAggregation, heatmapXBins, heatmapYBins,\n isStreaming\n ])\n\n const storeRef = useRef<PipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new PipelineStore(pipelineConfig)\n }\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current) return\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }, [])\n\n // Update config when it changes — also schedule re-render since style\n // callbacks (pointStyle, areaStyle, etc.) may have changed.\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── DataSourceAdapter ────────────────────────────────────────────────\n\n const adapterRef = useRef<DataSourceAdapter | null>(null)\n if (!adapterRef.current) {\n adapterRef.current = new DataSourceAdapter((changeset) => {\n const store = storeRef.current\n if (!store) return\n const needsRender = store.ingest(changeset)\n if (needsRender) {\n dirtyRef.current = true\n scheduleRender()\n }\n })\n }\n\n // ── Push API (ref handle) ────────────────────────────────────────────\n\n const pushPoint = useCallback((datum: Record<string, any>) => {\n adapterRef.current?.push(datum)\n }, [])\n\n const pushManyPoints = useCallback((data: Record<string, any>[]) => {\n adapterRef.current?.pushMany(data)\n }, [])\n\n const clearAll = useCallback(() => {\n adapterRef.current?.clear()\n storeRef.current?.clear()\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n useImperativeHandle(ref, () => ({\n push: pushPoint,\n pushMany: pushManyPoints,\n clear: clearAll,\n getData: () => storeRef.current?.getData() ?? [],\n getScales: () => storeRef.current?.scales ?? null,\n getExtents: () => storeRef.current?.getExtents() ?? null\n }), [pushPoint, pushManyPoints, clearAll])\n\n // ── Controlled data prop ─────────────────────────────────────────────\n\n useEffect(() => {\n if (!data) return\n adapterRef.current?.setBoundedData(data)\n }, [data])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!effectiveHoverAnnotation) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (chartX < 0 || chartX > adjustedWidth || chartY < 0 || chartY > adjustedHeight) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store || store.scene.length === 0) return\n\n // Hit test against scene graph\n const hit = findNearestNode(store.scene, chartX, chartY)\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const hover: HoverData = {\n data: hit.datum,\n time: hit.x,\n value: hit.y,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverPoint(hover)\n if (customHoverBehavior) customHoverBehavior(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n\n // Advance transition animation (before scene rebuild)\n const isTransitioning = store.advanceTransition(now)\n\n // Compute scene graph (scales + scene nodes) — skip if mid-transition\n if (!isTransitioning) {\n store.computeScene({ width: adjustedWidth, height: adjustedHeight })\n }\n\n // DPR setup\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n ctx.translate(margin.left, margin.top)\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n const theme = resolveThemeColors(canvas)\n\n // Staleness dimming\n const staleThreshold = staleness?.threshold ?? 5000\n const currentlyStale = staleness && store.lastIngestTime > 0 &&\n (now - store.lastIngestTime) > staleThreshold\n\n if (currentlyStale) {\n ctx.globalAlpha = staleness?.dimOpacity ?? 0.5\n }\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n // Render data marks via canvas renderers\n const renderers = RENDERERS[chartType]\n if (renderers && store.scales) {\n for (const renderer of renderers) {\n renderer(\n ctx,\n store.scene,\n store.scales,\n { width: adjustedWidth, height: adjustedHeight }\n )\n }\n }\n\n // Reset alpha after staleness dimming\n if (currentlyStale) {\n ctx.globalAlpha = 1\n }\n\n // Draw crosshair on hover\n if (effectiveHoverAnnotation && hoverRef.current && store.scales) {\n const config: HoverAnnotationConfig =\n typeof effectiveHoverAnnotation === \"object\" ? effectiveHoverAnnotation : {}\n drawCrosshair(\n ctx,\n hoverRef.current,\n adjustedWidth,\n adjustedHeight,\n config,\n \"#007bff\",\n theme\n )\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Push scales into React state so SVGOverlay renders axes/grid\n if (wasDirty && store.scales) {\n setCurrentScales(store.scales)\n\n // Extract x/y values for marginal graphics\n if (marginalGraphics) {\n const rawData = store.getData()\n const getX = typeof xAccessor === \"function\"\n ? xAccessor\n : (d: Record<string, any>) => d[xAccessor || \"x\"]\n const getY = typeof yAccessor === \"function\"\n ? yAccessor\n : (d: Record<string, any>) => d[yAccessor || \"y\"]\n setMarginalXValues(rawData.map(d => getX(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n setMarginalYValues(rawData.map(d => getY(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n }\n }\n\n // Trigger React re-render for SVG annotations\n if (wasDirty && annotations && annotations.length > 0 && svgAnnotationRules) {\n setAnnotationFrame(f => f + 1)\n }\n\n // Update staleness React state for badge\n if (staleness?.showBadge) {\n setIsStale(!!currentlyStale)\n }\n\n // Schedule next frame for continuous rendering (pulse/transitions)\n if (isTransitioning || store.hasActivePulses) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n // Re-render when visual props change\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, showAxes, background, lineStyle, scheduleRender])\n\n // Staleness check timer\n useEffect(() => {\n if (!staleness) return\n const interval = setInterval(() => {\n const store = storeRef.current\n if (!store || store.lastIngestTime === 0) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const threshold = staleness.threshold ?? 5000\n const stale = (now - store.lastIngestTime) > threshold\n if (stale !== isStale) {\n setIsStale(stale)\n dirtyRef.current = true\n scheduleRender()\n }\n }, 1000)\n return () => clearInterval(interval)\n }, [staleness, isStale, scheduleRender])\n\n // ── Tooltip positioning ──────────────────────────────────────────────\n\n const tooltipRendered = effectiveHoverAnnotation && hoverPoint\n ? (tooltipContent ? tooltipContent(hoverPoint) : <DefaultTooltip hover={hoverPoint} />)\n : null\n\n const tooltipElement = tooltipRendered ? (\n <div\n className=\"stream-frame-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + hoverPoint!.x,\n top: margin.top + hoverPoint!.y,\n transform: `translate(${\n hoverPoint!.x > adjustedWidth * 0.7 ? \"calc(-100% - 12px)\" : \"12px\"\n }, ${\n hoverPoint!.y < adjustedHeight * 0.3 ? \"4px\" : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 1\n }}\n >\n {tooltipRendered}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n return (\n <div\n className={`stream-xy-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={effectiveHoverAnnotation ? onMouseMove : undefined}\n onMouseLeave={effectiveHoverAnnotation ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n {backgroundGraphics}\n </svg>\n )}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0\n }}\n />\n <SVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n scales={currentScales}\n showAxes={showAxes}\n xLabel={xLabel}\n yLabel={yLabel}\n xFormat={xFormat || tickFormatTime}\n yFormat={yFormat || tickFormatValue}\n showGrid={showGrid}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n marginalGraphics={marginalGraphics}\n xValues={marginalXValues}\n yValues={marginalYValues}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n {(brush || onBrush) && (\n <BrushOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n dimension={brush?.dimension ?? \"xy\"}\n scales={currentScales}\n onBrush={onBrush ?? (() => {})}\n />\n )}\n {staleness?.showBadge && (\n <div\n className=\"stream-staleness-badge\"\n style={{\n position: \"absolute\",\n ...(staleness.badgePosition === \"top-left\" ? { top: 4, left: 4 } :\n staleness.badgePosition === \"bottom-left\" ? { bottom: 4, left: 4 } :\n staleness.badgePosition === \"bottom-right\" ? { bottom: 4, right: 4 } :\n { top: 4, right: 4 }),\n padding: \"2px 8px\",\n borderRadius: 4,\n fontSize: 11,\n fontWeight: 600,\n pointerEvents: \"none\",\n background: isStale ? \"#dc3545\" : \"#28a745\",\n color: \"white\"\n }}\n >\n {isStale ? \"STALE\" : \"LIVE\"}\n </div>\n )}\n {tooltipElement}\n </div>\n )\n }\n)\n\nStreamXYFrame.displayName = \"StreamXYFrame\"\nexport default StreamXYFrame\n","import { buildRectNode } from \"../SceneGraph\"\nimport type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildBarScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, getStack, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const isHorizontal = projection === \"horizontal\"\n const normalize = config.normalize\n\n for (const col of Object.values(columns)) {\n // Group pieces by stack key if stacking, and aggregate values per group\n const stacks = new Map<string, { total: number; pieces: Record<string, any>[] }>()\n for (const d of col.pieceData) {\n const key = getStack ? getStack(d) : \"_default\"\n if (!stacks.has(key)) stacks.set(key, { total: 0, pieces: [] })\n const group = stacks.get(key)!\n group.total += getR(d)\n group.pieces.push(d)\n }\n\n // Compute totals for normalization\n let colTotal = 0\n if (normalize) {\n for (const g of stacks.values()) colTotal += Math.abs(g.total)\n }\n\n let posOffset = 0\n let negOffset = 0\n\n for (const [stackKey, group] of stacks) {\n // Use the aggregated total for the stack group (one rect per group)\n let val = group.total\n if (normalize && colTotal > 0) val = val / colTotal\n\n // Use the first piece for styling — look up barColors by stack key (not category)\n const style = getStack\n ? resolvePieceStyle(group.pieces[0], stackKey)\n : resolvePieceStyle(group.pieces[0], col.name)\n // Build a synthetic datum that includes the aggregate info\n const aggDatum = {\n ...group.pieces[0],\n __aggregateValue: group.total,\n __pieceCount: group.pieces.length,\n category: col.name\n }\n\n if (isVertical) {\n const actualY = val >= 0\n ? rScale(posOffset + val)\n : rScale(negOffset)\n const actualH = val >= 0\n ? rScale(posOffset) - rScale(posOffset + val)\n : rScale(negOffset + val) - rScale(negOffset)\n\n nodes.push(buildRectNode(\n col.x, actualY, col.width, Math.abs(actualH),\n style, aggDatum, stackKey\n ))\n\n if (val >= 0) posOffset += val\n else negOffset += val\n } else if (isHorizontal) {\n const actualX = val >= 0\n ? rScale(posOffset)\n : rScale(negOffset + val)\n const actualW = val >= 0\n ? rScale(posOffset + val) - rScale(posOffset)\n : rScale(negOffset) - rScale(negOffset + val)\n\n nodes.push(buildRectNode(\n actualX, col.x, Math.abs(actualW), col.width,\n style, aggDatum, stackKey\n ))\n\n if (val >= 0) posOffset += val\n else negOffset += val\n }\n }\n }\n\n return nodes\n}\n\nexport function buildClusterBarScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, getGroup, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n\n // Discover all group keys\n const groupKeys: string[] = []\n const groupSet = new Set<string>()\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const key = getGroup ? getGroup(d) : \"_default\"\n if (!groupSet.has(key)) {\n groupSet.add(key)\n groupKeys.push(key)\n }\n }\n }\n const groupCount = groupKeys.length || 1\n\n for (const col of Object.values(columns)) {\n const subWidth = col.width / groupCount\n const grouped = new Map<string, Record<string, any>[]>()\n for (const d of col.pieceData) {\n const key = getGroup ? getGroup(d) : \"_default\"\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)!.push(d)\n }\n\n for (let gi = 0; gi < groupKeys.length; gi++) {\n const groupData = grouped.get(groupKeys[gi]) || []\n for (const d of groupData) {\n const val = getR(d)\n const style = resolvePieceStyle(d, col.name)\n\n if (isVertical) {\n const barX = col.x + gi * subWidth\n const zeroY = rScale(0)\n const valY = rScale(val)\n nodes.push(buildRectNode(\n barX, Math.min(zeroY, valY), subWidth, Math.abs(zeroY - valY),\n style, d, groupKeys[gi]\n ))\n } else {\n const barY = col.x + gi * subWidth\n const zeroX = rScale(0)\n const valX = rScale(val)\n nodes.push(buildRectNode(\n Math.min(zeroX, valX), barY, Math.abs(valX - zeroX), subWidth,\n style, d, groupKeys[gi]\n ))\n }\n }\n }\n }\n\n return nodes\n}\n","import type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildPointScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, multiScales, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const isRadial = projection === \"radial\"\n const hasMultiAxis = multiScales.length > 0\n\n const twoPi = Math.PI * 2\n const startAngleOffset = -Math.PI / 2\n\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const rIndex = d.__rIndex ?? 0\n const val = d.__rValue ?? getR(d)\n const scale = hasMultiAxis ? (multiScales[rIndex] || rScale) : rScale\n const style = resolvePieceStyle(d, col.name)\n const r = (style as any).r || 5\n\n let px: number, py: number\n\n if (isRadial) {\n // Radial: angle from category position, radius from value\n const midAngle = startAngleOffset + (col.pctStart + col.pct / 2) * twoPi\n const radius = scale(val)\n px = Math.cos(midAngle) * radius\n py = Math.sin(midAngle) * radius\n } else if (isVertical) {\n px = col.middle\n py = scale(val)\n } else {\n px = scale(val)\n py = col.middle\n }\n\n nodes.push({ type: \"point\", x: px, y: py, r, style, datum: d })\n }\n }\n\n return nodes\n}\n\nexport function buildSwarmScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n\n for (const col of Object.values(columns)) {\n // Simple jittered placement (real force sim in Phase 3)\n const halfWidth = col.width / 2\n for (let i = 0; i < col.pieceData.length; i++) {\n const d = col.pieceData[i]\n const val = getR(d)\n const style = resolvePieceStyle(d, col.name)\n const r = (style as any).r || 4\n\n // Deterministic jitter based on index\n const jitter = (((i * 7919) % 100) / 100 - 0.5) * halfWidth * 0.8\n\n const px = isVertical ? col.middle + jitter : rScale(val)\n const py = isVertical ? rScale(val) : col.middle + jitter\n\n nodes.push({ type: \"point\", x: px, y: py, r, style, datum: d })\n }\n }\n\n return nodes\n}\n","import type { WedgeSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildPieScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): WedgeSceneNode[] {\n const { scales, columns, config, resolvePieceStyle } = ctx\n const nodes: WedgeSceneNode[] = []\n // cx/cy are 0 because StreamOrdinalFrame translates the canvas\n // to the center of the chart area for radial projection\n const cx = 0\n const cy = 0\n const outerRadius = Math.min(layout.width, layout.height) / 2 - 4\n const innerRadius = config.chartType === \"donut\" ? (config.innerRadius || 60) : 0\n // Start from 12 o'clock (-π/2) plus any user offset\n const startAngleOffset = -Math.PI / 2 + ((config.startAngle || 0) * Math.PI) / 180\n\n const twoPi = Math.PI * 2\n\n for (const col of Object.values(columns)) {\n const startAngle = startAngleOffset + col.pctStart * twoPi\n const endAngle = startAngleOffset + (col.pctStart + col.pct) * twoPi\n const style = resolvePieceStyle(col.pieceData[0], col.name)\n\n nodes.push({\n type: \"wedge\",\n cx, cy,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n style,\n datum: col.pieceData,\n category: col.name\n })\n }\n\n return nodes\n}\n","import { quantile as d3Quantile } from \"d3-array\"\nimport { buildRectNode } from \"../SceneGraph\"\nimport type {\n OrdinalSceneNode,\n OrdinalLayout,\n BoxplotSceneNode,\n ViolinSceneNode\n} from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildBoxplotScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const showOutliers = config.showOutliers !== false\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length === 0) continue\n\n const min = values[0]\n const max = values[values.length - 1]\n const q1 = d3Quantile(values, 0.25) ?? min\n const median = d3Quantile(values, 0.5) ?? (min + max) / 2\n const q3 = d3Quantile(values, 0.75) ?? max\n\n // IQR-based whiskers\n const iqr = q3 - q1\n const lowerFence = q1 - 1.5 * iqr\n const upperFence = q3 + 1.5 * iqr\n const whiskerMin = values.find(v => v >= lowerFence) ?? min\n const whiskerMax = [...values].reverse().find(v => v <= upperFence) ?? max\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n const outliers: BoxplotSceneNode[\"outliers\"] = []\n if (showOutliers) {\n for (const d of col.pieceData) {\n const v = getR(d)\n if (v < lowerFence || v > upperFence) {\n const px = isVertical ? col.middle : rScale(v)\n const py = isVertical ? rScale(v) : col.middle\n outliers.push({ px, py, value: v, datum: d })\n }\n }\n }\n\n nodes.push({\n type: \"boxplot\",\n x: isVertical ? col.middle : 0,\n y: isVertical ? 0 : col.middle,\n projection: isVertical ? \"vertical\" : \"horizontal\",\n columnWidth: col.width * 0.6,\n minPos: rScale(whiskerMin),\n q1Pos: rScale(q1),\n medianPos: rScale(median),\n q3Pos: rScale(q3),\n maxPos: rScale(whiskerMax),\n stats: { min: whiskerMin, q1, median, q3, max: whiskerMax },\n style,\n datum: col.pieceData,\n category: col.name,\n outliers\n } as BoxplotSceneNode)\n\n // Add outlier points\n if (showOutliers) {\n for (const o of outliers) {\n nodes.push({\n type: \"point\",\n x: o.px,\n y: o.py,\n r: 3,\n style: { fill: style.fill || \"#999\", opacity: 0.6 },\n datum: o.datum\n })\n }\n }\n }\n\n return nodes\n}\n\nexport function buildViolinScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const bins = config.bins || 20\n const showIQR = config.showIQR !== false\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length < 2) continue\n\n const vMin = values[0]\n const vMax = values[values.length - 1]\n const binWidth = (vMax - vMin) / bins || 1\n\n // Build histogram bins\n const counts = new Array(bins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), bins - 1)\n counts[idx]++\n }\n const maxCount = Math.max(...counts, 1)\n\n // Build symmetric violin path\n const halfWidth = col.width / 2 * 0.9\n let pathStr = \"\"\n\n if (isVertical) {\n // Right side (top to bottom)\n for (let i = 0; i < bins; i++) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += i === 0 ? `M ${col.middle + w} ${y}` : ` L ${col.middle + w} ${y}`\n }\n // Left side (bottom to top)\n for (let i = bins - 1; i >= 0; i--) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += ` L ${col.middle - w} ${y}`\n }\n pathStr += \" Z\"\n } else {\n // Top side (left to right)\n for (let i = 0; i < bins; i++) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += i === 0 ? `M ${x} ${col.middle - w}` : ` L ${x} ${col.middle - w}`\n }\n // Bottom side (right to left)\n for (let i = bins - 1; i >= 0; i--) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += ` L ${x} ${col.middle + w}`\n }\n pathStr += \" Z\"\n }\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n // IQR overlay\n let iqrLine: ViolinSceneNode[\"iqrLine\"]\n if (showIQR && values.length >= 4) {\n const q1 = d3Quantile(values, 0.25) ?? vMin\n const median = d3Quantile(values, 0.5) ?? (vMin + vMax) / 2\n const q3 = d3Quantile(values, 0.75) ?? vMax\n iqrLine = {\n q1Pos: rScale(q1),\n medianPos: rScale(median),\n q3Pos: rScale(q3)\n }\n }\n\n const violinBounds = isVertical\n ? { x: col.x, y: Math.min(rScale(vMax), rScale(vMin)), width: col.width, height: Math.abs(rScale(vMax) - rScale(vMin)) }\n : { x: Math.min(rScale(vMin), rScale(vMax)), y: col.x, width: Math.abs(rScale(vMax) - rScale(vMin)), height: col.width }\n\n nodes.push({\n type: \"violin\",\n pathString: pathStr,\n translateX: 0,\n translateY: 0,\n bounds: violinBounds,\n iqrLine,\n style,\n datum: col.pieceData,\n category: col.name\n } as ViolinSceneNode)\n }\n\n return nodes\n}\n\nexport function buildHistogramScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale } = scales\n const nodes: OrdinalSceneNode[] = []\n const numBins = config.bins || 25\n const isRelative = config.normalize\n\n // Histograms always render horizontally: categories on y-axis, value bins on x-axis\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n\n if (values.length === 0) continue\n\n const vMin = Math.min(...values)\n const vMax = Math.max(...values)\n const binWidth = (vMax - vMin) / numBins || 1\n\n const counts = new Array(numBins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), numBins - 1)\n counts[idx]++\n }\n\n const total = values.length\n const maxCount = Math.max(...counts, 1)\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n for (let i = 0; i < numBins; i++) {\n if (counts[i] === 0) continue\n\n const normCount = isRelative ? counts[i] / total : counts[i] / maxCount\n // Bar height proportional to count, within the column band\n const barH = normCount * col.width * 0.9\n\n // Bin position on the value (x) axis\n const binStart = rScale(vMin + i * binWidth)\n const binEnd = rScale(vMin + (i + 1) * binWidth)\n const x = Math.min(binStart, binEnd)\n const w = Math.abs(binEnd - binStart)\n\n // Align bar to baseline (bottom of the column band)\n const y = col.x + col.width - barH\n\n nodes.push(buildRectNode(\n x, y, w, barH,\n style,\n { bin: i, count: counts[i], range: [vMin + i * binWidth, vMin + (i + 1) * binWidth], category: col.name },\n col.name\n ))\n }\n }\n\n return nodes\n}\n\nexport function buildRidgelineScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const numBins = config.bins || 20\n const isHorizontal = projection === \"horizontal\"\n // Amplitude controls how far the density extends (can overlap neighbors)\n const amplitude = (config as any).amplitude || 1.5\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length < 2) continue\n\n const vMin = values[0]\n const vMax = values[values.length - 1]\n const binWidth = (vMax - vMin) / numBins || 1\n\n // Build histogram bins\n const counts = new Array(numBins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), numBins - 1)\n counts[idx]++\n }\n const maxCount = Math.max(...counts, 1)\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n const halfBand = col.width * amplitude\n\n // Build one-sided area path (density extends in one direction from baseline)\n let pathStr = \"\"\n\n if (isHorizontal) {\n // Horizontal: categories on y, values on x\n // Baseline is the bottom of the column band, density extends upward\n const baseline = col.x + col.width\n\n // Start at baseline\n pathStr = `M ${rScale(vMin)} ${baseline}`\n // Density curve going upward (negative y)\n for (let i = 0; i < numBins; i++) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const h = (counts[i] / maxCount) * halfBand\n pathStr += ` L ${x} ${baseline - h}`\n }\n // Close back to baseline\n pathStr += ` L ${rScale(vMax)} ${baseline} Z`\n } else {\n // Vertical: categories on x, values on y\n // Baseline is the left of the column band, density extends rightward\n const baseline = col.x\n\n pathStr = `M ${baseline} ${rScale(vMin)}`\n for (let i = 0; i < numBins; i++) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfBand\n pathStr += ` L ${baseline + w} ${y}`\n }\n pathStr += ` L ${baseline} ${rScale(vMax)} Z`\n }\n\n const ridgeBounds = isHorizontal\n ? { x: Math.min(rScale(vMin), rScale(vMax)), y: col.x, width: Math.abs(rScale(vMax) - rScale(vMin)), height: col.width }\n : { x: col.x, y: Math.min(rScale(vMax), rScale(vMin)), width: col.width, height: Math.abs(rScale(vMax) - rScale(vMin)) }\n\n nodes.push({\n type: \"violin\",\n pathString: pathStr,\n translateX: 0,\n translateY: 0,\n bounds: ridgeBounds,\n style: { ...style, fillOpacity: style.fillOpacity ?? 0.5 },\n datum: col.pieceData,\n category: col.name\n } as ViolinSceneNode)\n }\n\n return nodes\n}\n","import { buildRectNode } from \"../SceneGraph\"\nimport type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildTimelineScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getRawRange, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isHorizontal = projection === \"horizontal\"\n\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const range = getRawRange(d)\n if (!range) continue\n\n const [start, end] = range\n const style = resolvePieceStyle(d, col.name)\n\n if (isHorizontal) {\n const x0 = rScale(Math.min(start, end))\n const x1 = rScale(Math.max(start, end))\n nodes.push(buildRectNode(\n x0, col.x, x1 - x0, col.width,\n style, d, col.name\n ))\n } else {\n const y0 = rScale(Math.max(start, end))\n const y1 = rScale(Math.min(start, end))\n nodes.push(buildRectNode(\n col.x, y0, col.width, y1 - y0,\n style, d, col.name\n ))\n }\n }\n }\n\n return nodes\n}\n","import type { ConnectorSceneNode, OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { Style } from \"../types\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildConnectors(\n ctx: OrdinalSceneContext,\n pieceNodes: OrdinalSceneNode[],\n layout: OrdinalLayout\n): ConnectorSceneNode[] {\n const { scales, config, getConnector, getO } = ctx\n if (!getConnector || !scales) return []\n const connectors: ConnectorSceneNode[] = []\n const { projection } = scales\n\n // Group pieces by connector key\n const groups = new Map<string, { x: number; y: number; datum: any; category: string }[]>()\n\n for (const node of pieceNodes) {\n if (node.type !== \"point\" && node.type !== \"rect\") continue\n const datum = node.datum\n if (!datum) continue\n\n const key = getConnector(datum)\n if (!key) continue\n\n let cx: number, cy: number\n if (node.type === \"point\") {\n cx = node.x\n cy = node.y\n } else {\n // rect: use center\n cx = node.x + node.w / 2\n cy = node.y + (projection === \"vertical\" ? 0 : node.h / 2)\n }\n\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push({ x: cx, y: cy, datum, category: getO(datum) })\n }\n\n // Draw lines connecting pieces with the same connector key, sorted by category order\n const oExtent = scales.o.domain()\n const resolveConnStyle = config.connectorStyle\n\n for (const [key, points] of groups) {\n if (points.length < 2) continue\n\n // Sort by category order\n points.sort((a, b) => oExtent.indexOf(a.category) - oExtent.indexOf(b.category))\n\n for (let i = 0; i < points.length - 1; i++) {\n const from = points[i]\n const to = points[i + 1]\n const style: Style = typeof resolveConnStyle === \"function\"\n ? resolveConnStyle(from.datum)\n : (resolveConnStyle || { stroke: \"#999\", strokeWidth: 1, opacity: 0.5 })\n\n connectors.push({\n type: \"connector\",\n x1: from.x,\n y1: from.y,\n x2: to.x,\n y2: to.y,\n style,\n datum: from.datum,\n group: key\n })\n }\n }\n\n return connectors\n}\n","import { scaleBand, scaleLinear, type ScaleBand, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport type {\n OrdinalPipelineConfig,\n OrdinalScales,\n OrdinalSceneNode,\n OrdinalColumn,\n OrdinalLayout,\n OrdinalChartType\n} from \"./ordinalTypes\"\nimport type { Changeset, Style, DecayConfig } from \"./types\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\nimport { buildBarScene, buildClusterBarScene } from \"./ordinalSceneBuilders/barScene\"\nimport { buildPointScene, buildSwarmScene } from \"./ordinalSceneBuilders/pointScene\"\nimport { buildPieScene } from \"./ordinalSceneBuilders/pieScene\"\nimport { buildBoxplotScene, buildViolinScene, buildHistogramScene, buildRidgelineScene } from \"./ordinalSceneBuilders/statisticalScene\"\nimport { buildTimelineScene } from \"./ordinalSceneBuilders/timelineScene\"\nimport { buildConnectors } from \"./ordinalSceneBuilders/connectorScene\"\nimport type { OrdinalSceneContext, SceneBuilderFn } from \"./ordinalSceneBuilders/types\"\n\nconst SCENE_BUILDERS: Record<string, SceneBuilderFn> = {\n bar: buildBarScene,\n clusterbar: buildClusterBarScene,\n point: buildPointScene,\n swarm: buildSwarmScene,\n pie: buildPieScene,\n donut: buildPieScene,\n boxplot: buildBoxplotScene,\n violin: buildViolinScene,\n histogram: buildHistogramScene,\n ridgeline: buildRidgelineScene,\n timeline: buildTimelineScene,\n}\n\n// ── OrdinalPipelineStore ───────────────────────────────────────────────\n\nexport class OrdinalPipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private rExtent = new IncrementalExtent()\n /** Per-accessor extents for multiAxis mode */\n private rExtents: IncrementalExtent[] = []\n private config: OrdinalPipelineConfig\n\n private getO: (d: any) => string\n private getR: (d: any) => number\n /** All resolved rAccessors (length > 1 when multiAxis) */\n private rAccessors: ((d: any) => number)[] = []\n private getStack: ((d: any) => string) | undefined\n private getGroup: ((d: any) => string) | undefined\n private getColor: ((d: any) => string) | undefined\n private getConnector: ((d: any) => string) | undefined\n\n /** Discovered categories in insertion order */\n private categories = new Set<string>()\n /** Lazy color map built from colorScheme for resolvePieceStyle */\n private _colorSchemeMap: Map<string, string> | null = null\n private _colorSchemeIndex = 0\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: OrdinalScales | null = null\n /** Per-accessor scales for multiAxis */\n multiScales: (ScaleLinear<number, number>)[] = []\n scene: OrdinalSceneNode[] = []\n columns: Record<string, OrdinalColumn> = {}\n version = 0\n\n constructor(config: OrdinalPipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n\n // Resolve accessors\n this.getO = resolveStringAccessor(\n config.oAccessor || config.categoryAccessor,\n \"category\"\n ) as (d: any) => string\n\n const isStreaming = config.runtimeMode === \"streaming\"\n\n // Resolve rAccessor — may be an array for multiAxis\n const rawR = config.rAccessor\n if (Array.isArray(rawR)) {\n this.rAccessors = rawR.map(acc => resolveAccessor(acc, \"value\"))\n this.getR = this.rAccessors[0]\n this.rExtents = rawR.map(() => new IncrementalExtent())\n } else {\n if (isStreaming && (config.timeAccessor || config.valueAccessor)) {\n this.getR = resolveAccessor(config.valueAccessor || rawR, \"value\")\n } else {\n this.getR = resolveAccessor(rawR, \"value\")\n }\n this.rAccessors = [this.getR]\n this.rExtents = [this.rExtent]\n }\n\n this.getStack = resolveStringAccessor(config.stackBy)\n this.getGroup = resolveStringAccessor(config.groupBy)\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getConnector = resolveStringAccessor(config.connectorAccessor)\n\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n // ── Data ingestion ───────────────────────────────────────────────────\n\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n this.buffer.clear()\n this.rExtent.clear()\n this.categories.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.categories.add(this.getO(d))\n this.pushValueExtent(d)\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.categories.add(this.getO(d))\n this.pushValueExtent(d)\n\n if (evicted != null) {\n this.evictValueExtent(evicted)\n }\n }\n }\n\n return true\n }\n\n private pushValueExtent(d: any): void {\n if (this.config.chartType === \"timeline\") {\n const range = this.getRawRange(d)\n if (range) {\n this.rExtent.push(range[0])\n this.rExtent.push(range[1])\n }\n } else if (this.rAccessors.length > 1) {\n // MultiAxis: track extents per accessor\n for (let i = 0; i < this.rAccessors.length; i++) {\n this.rExtents[i].push(this.rAccessors[i](d))\n }\n // Also push to primary extent for single-scale fallback\n this.rExtent.push(this.getR(d))\n } else {\n this.rExtent.push(this.getR(d))\n }\n }\n\n private evictValueExtent(d: any): void {\n if (this.config.chartType === \"timeline\") {\n const range = this.getRawRange(d)\n if (range) {\n this.rExtent.evict(range[0])\n this.rExtent.evict(range[1])\n }\n } else if (this.rAccessors.length > 1) {\n for (let i = 0; i < this.rAccessors.length; i++) {\n this.rExtents[i].evict(this.rAccessors[i](d))\n }\n this.rExtent.evict(this.getR(d))\n } else {\n this.rExtent.evict(this.getR(d))\n }\n }\n\n /** For timeline type: resolve rAccessor as a [start, end] pair */\n private getRawRange(d: any): [number, number] | null {\n const acc = this.config.rAccessor\n if (!acc) return null\n const result = typeof acc === \"function\" ? (acc as Function)(d) : d[acc as string]\n if (Array.isArray(result) && result.length >= 2) {\n return [+result[0], +result[1]]\n }\n return null\n }\n\n // ── Scene computation ────────────────────────────────────────────────\n\n computeScene(layout: OrdinalLayout): void {\n const { config, buffer } = this\n if (buffer.size === 0) {\n this.scales = null\n this.scene = []\n this.columns = {}\n this.version++\n return\n }\n\n // Recalculate dirty extents\n if (this.rExtent.dirty) {\n this.rExtent.recalculate(buffer, this.getR)\n }\n\n const data = buffer.toArray()\n const projection = config.projection || \"vertical\"\n\n // 1. Resolve category extent\n const oExtent = config.oExtent || this.resolveCategories(data)\n\n // 2. Compute value extent\n const rDomain = this.computeValueDomain(data, oExtent)\n\n // 3. Build scales\n const isVertical = projection === \"vertical\"\n const isHorizontal = projection === \"horizontal\"\n const isRadial = projection === \"radial\"\n\n const padding = config.barPadding != null ? config.barPadding / (isVertical ? layout.width : layout.height) : 0.1\n\n let oScale: ScaleBand<string>\n let rScale: ScaleLinear<number, number>\n\n if (isRadial) {\n // Radial: oScale maps to [0, 2π], rScale maps outward\n oScale = scaleBand<string>().domain(oExtent).range([0, 1]).padding(0)\n const maxR = Math.min(layout.width, layout.height) / 2\n const innerR = config.innerRadius || 0\n rScale = scaleLinear().domain(rDomain).range([innerR, maxR])\n } else if (isHorizontal) {\n oScale = scaleBand<string>().domain(oExtent).range([0, layout.height]).padding(padding)\n rScale = scaleLinear().domain(rDomain).range([0, layout.width])\n } else {\n // vertical (default)\n oScale = scaleBand<string>().domain(oExtent).range([0, layout.width]).padding(padding)\n rScale = scaleLinear().domain(rDomain).range([layout.height, 0])\n }\n\n this.scales = { o: oScale, r: rScale, projection }\n\n // 3b. Build per-accessor scales for multiAxis mode\n if (this.rAccessors.length > 1 && config.multiAxis) {\n this.multiScales = this.rAccessors.map((acc, i) => {\n const ext = this.rExtents[i]\n if (ext.dirty) ext.recalculate(buffer, acc)\n let [min, max] = ext.extent\n if (min === Infinity) { min = 0; max = 1 }\n const pad = config.extentPadding || 0.05\n const range = max - min\n const padAmt = range > 0 ? range * pad : 1\n min -= padAmt\n max += padAmt\n if (min > 0) min = 0\n\n if (isHorizontal) return scaleLinear().domain([min, max]).range([0, layout.width])\n return scaleLinear().domain([min, max]).range([layout.height, 0])\n })\n } else {\n this.multiScales = []\n }\n\n // 3c. Expand data for multi-accessor: each datum becomes N pieces with rIndex\n let expandedData = data\n if (this.rAccessors.length > 1) {\n expandedData = data.flatMap(d =>\n this.rAccessors.map((acc, rIndex) => ({\n ...d,\n __rIndex: rIndex,\n __rValue: acc(d),\n __rName: this.resolveRAccessorName(rIndex)\n }))\n )\n }\n\n // 4. Build projected columns\n this.columns = this.buildColumns(expandedData, oExtent, oScale, projection, layout)\n\n // Snapshot positions for transition animation\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // 5. Build scene graph\n this.scene = this.buildSceneNodes(expandedData, layout)\n\n // Apply decay/pulse to discrete scene nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private resolveRAccessorName(index: number): string {\n const acc = Array.isArray(this.config.rAccessor) ? this.config.rAccessor[index] : this.config.rAccessor\n return typeof acc === \"string\" ? acc : `value${index}`\n }\n\n // ── Category resolution ──────────────────────────────────────────────\n\n private resolveCategories(data: Record<string, any>[]): string[] {\n const cats = Array.from(this.categories)\n const sort = this.config.oSort\n\n // In streaming mode, preserve insertion order by default to avoid\n // jarring category shuffling as values fluctuate in the sliding window\n if (this.config.runtimeMode === \"streaming\" && sort === undefined) {\n return cats\n }\n\n if (sort === false) return cats\n\n if (typeof sort === \"function\") {\n return cats.sort(sort)\n }\n\n // Default: sort by total value descending (unless explicitly \"asc\")\n const sums = new Map<string, number>()\n for (const d of data) {\n const cat = this.getO(d)\n sums.set(cat, (sums.get(cat) || 0) + Math.abs(this.getR(d)))\n }\n\n if (sort === \"asc\") {\n return cats.sort((a, b) => (sums.get(a) || 0) - (sums.get(b) || 0))\n }\n\n // Default, true, \"desc\", or undefined → descending\n return cats.sort((a, b) => (sums.get(b) || 0) - (sums.get(a) || 0))\n }\n\n // ── Value domain computation ─────────────────────────────────────────\n\n private computeValueDomain(data: Record<string, any>[], oExtent: string[]): [number, number] {\n const chartType = this.config.chartType\n const pad = this.config.extentPadding || 0.05\n\n // For radial pie/donut, the value axis represents proportions\n // But for radial point (radar), use actual data values\n if (this.config.projection === \"radial\" && (chartType === \"pie\" || chartType === \"donut\")) {\n return [0, 1]\n }\n\n let min = 0\n let max = 0\n\n if (chartType === \"bar\" && this.getStack) {\n // Stacked bars: compute per-category stacked sums\n const posSums = new Map<string, number>()\n const negSums = new Map<string, number>()\n\n for (const d of data) {\n const cat = this.getO(d)\n const val = this.getR(d)\n if (val >= 0) {\n posSums.set(cat, (posSums.get(cat) || 0) + val)\n } else {\n negSums.set(cat, (negSums.get(cat) || 0) + val)\n }\n }\n\n for (const s of posSums.values()) if (s > max) max = s\n for (const s of negSums.values()) if (s < min) min = s\n } else if (chartType === \"bar\") {\n // Non-stacked bars: pieces within each category are summed,\n // so the domain must cover the per-category total\n const catSums = new Map<string, number>()\n for (const d of data) {\n const cat = this.getO(d)\n const val = this.getR(d)\n catSums.set(cat, (catSums.get(cat) || 0) + val)\n }\n for (const s of catSums.values()) {\n if (s > max) max = s\n if (s < min) min = s\n }\n } else if (chartType === \"clusterbar\") {\n // Cluster bars: individual values (side-by-side)\n for (const d of data) {\n const val = this.getR(d)\n if (val > max) max = val\n if (val < min) min = val\n }\n } else {\n // Points, swarm, summary types: raw data extent\n const dataMin = this.rExtent.extent[0]\n const dataMax = this.rExtent.extent[1]\n if (dataMin !== Infinity) min = dataMin\n if (dataMax !== -Infinity) max = dataMax\n }\n\n // Apply user-specified extents\n if (this.config.rExtent) {\n if (this.config.rExtent[0] != null) min = this.config.rExtent[0]\n if (this.config.rExtent[1] != null) max = this.config.rExtent[1]\n }\n\n // Apply padding\n const range = max - min\n const padAmount = range > 0 ? range * pad : 1\n if (!this.config.rExtent?.[0]) min -= padAmount\n if (!this.config.rExtent?.[1]) max += padAmount\n\n // Bars should include zero\n if (chartType === \"bar\" || chartType === \"clusterbar\") {\n if (min > 0) min = 0\n if (max < 0) max = 0\n }\n\n return [min, max]\n }\n\n // ── Column projection ────────────────────────────────────────────────\n\n private buildColumns(\n data: Record<string, any>[],\n oExtent: string[],\n oScale: ScaleBand<string>,\n projection: string,\n layout: OrdinalLayout\n ): Record<string, OrdinalColumn> {\n const columns: Record<string, OrdinalColumn> = {}\n\n // Group data by category\n const grouped = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const cat = this.getO(d)\n if (!grouped.has(cat)) grouped.set(cat, [])\n grouped.get(cat)!.push(d)\n }\n\n // Compute total for radial proportions\n let total = 0\n if (projection === \"radial\") {\n for (const d of data) {\n total += Math.abs(this.getR(d))\n }\n }\n\n // Dynamic column widths: compute proportional widths instead of uniform bands\n const dcw = this.config.dynamicColumnWidth\n let dynamicWidths: Map<string, number> | null = null\n if (dcw && projection !== \"radial\") {\n dynamicWidths = new Map()\n let totalWidth = 0\n for (const cat of oExtent) {\n const pieceData = grouped.get(cat) || []\n let colValue: number\n if (typeof dcw === \"string\") {\n colValue = pieceData.reduce((s, d) => s + (Number(d[dcw]) || 0), 0)\n } else {\n colValue = dcw(pieceData)\n }\n dynamicWidths.set(cat, colValue)\n totalWidth += colValue\n }\n // Normalize to available space\n const availableSpace = projection === \"horizontal\" ? layout.height : layout.width\n const paddingTotal = oScale.padding() * oScale.step() * oExtent.length\n const usableSpace = availableSpace - paddingTotal\n if (totalWidth > 0) {\n for (const [cat, val] of dynamicWidths) {\n dynamicWidths.set(cat, (val / totalWidth) * usableSpace)\n }\n }\n }\n\n let cumulativePct = 0\n let cumulativeX = 0\n\n for (const cat of oExtent) {\n const pieceData = grouped.get(cat) || []\n const catSum = pieceData.reduce((s, d) => s + Math.abs(this.getR(d)), 0)\n const pct = total > 0 ? catSum / total : 0\n\n let bandStart: number\n let bandwidth: number\n if (dynamicWidths) {\n bandStart = cumulativeX\n bandwidth = dynamicWidths.get(cat) || oScale.bandwidth()\n cumulativeX += bandwidth + (oScale.padding() * oScale.step())\n } else {\n bandStart = oScale(cat) ?? 0\n bandwidth = oScale.bandwidth()\n }\n\n columns[cat] = {\n name: cat,\n x: bandStart,\n y: 0,\n width: bandwidth,\n middle: bandStart + bandwidth / 2,\n padding: oScale.padding() * oScale.step(),\n pieceData,\n pct,\n pctStart: cumulativePct\n }\n\n cumulativePct += pct\n }\n\n return columns\n }\n\n // ── Scene graph building ─────────────────────────────────────────────\n\n private getSceneContext(): OrdinalSceneContext {\n return {\n scales: this.scales!,\n columns: this.columns,\n config: this.config,\n getR: this.getR,\n getStack: this.getStack,\n getGroup: this.getGroup,\n getColor: this.getColor,\n getConnector: this.getConnector,\n getO: this.getO,\n multiScales: this.multiScales,\n rAccessors: this.rAccessors,\n resolvePieceStyle: (d: any, category?: string) => this.resolvePieceStyle(d, category),\n resolveSummaryStyle: (d: any, category?: string) => this.resolveSummaryStyle(d, category),\n getRawRange: (d: any) => this.getRawRange(d)\n }\n }\n\n private buildSceneNodes(data: Record<string, any>[], layout: OrdinalLayout): OrdinalSceneNode[] {\n if (!this.scales) return []\n\n const ctx = this.getSceneContext()\n const builder = SCENE_BUILDERS[this.config.chartType]\n let nodes = builder ? builder(ctx, layout) : []\n\n // Build connectors if configured\n if (this.getConnector && this.scales) {\n const connectorNodes = buildConnectors(ctx, nodes, layout)\n // Connectors render behind pieces\n nodes = [...connectorNodes, ...nodes]\n }\n\n return nodes\n }\n\n // ── Style resolution ─────────────────────────────────────────────────\n\n private resolvePieceStyle(d: any, category?: string): Style {\n if (typeof this.config.pieceStyle === \"function\") {\n return this.config.pieceStyle(d, category)\n }\n if (this.config.pieceStyle && typeof this.config.pieceStyle === \"object\") {\n return this.config.pieceStyle as unknown as Style\n }\n if (this.config.barColors && category) {\n return { fill: this.config.barColors[category] || \"#007bff\" }\n }\n // Use colorScheme (or default palette) to generate colors by category\n if (category) {\n return { fill: this.getColorFromScheme(category) }\n }\n return { fill: \"#007bff\" }\n }\n\n private getColorFromScheme(key: string): string {\n if (!this._colorSchemeMap) this._colorSchemeMap = new Map()\n const existing = this._colorSchemeMap.get(key)\n if (existing) return existing\n\n const palette = Array.isArray(this.config.colorScheme)\n ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n const color = palette[this._colorSchemeIndex % palette.length]\n this._colorSchemeIndex++\n this._colorSchemeMap.set(key, color)\n return color\n }\n\n private resolveSummaryStyle(d: any, category?: string): Style {\n if (typeof this.config.summaryStyle === \"function\") {\n return this.config.summaryStyle(d, category)\n }\n if (this.config.summaryStyle && typeof this.config.summaryStyle === \"object\") {\n return this.config.summaryStyle as unknown as Style\n }\n return { fill: \"#007bff\", fillOpacity: 0.6, stroke: \"#007bff\", strokeWidth: 1 }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n private applyDecay(nodes: OrdinalSceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"connector\" || node.type === \"violin\" || node.type === \"boxplot\" || node.type === \"wedge\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n const baseOpacity = node.style?.opacity ?? 1\n ;(node as any).style = { ...(node as any).style, opacity: baseOpacity * decayOpacity }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n private applyPulse(nodes: OrdinalSceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"connector\" || node.type === \"violin\" || node.type === \"boxplot\" || node.type === \"wedge\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const age = now - insertTime\n if (age < duration) {\n const intensity = 1 - age / duration\n ;(node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n if (node.type === \"point\") {\n this.prevPositionMap.set(`p:${i}`, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n const key = `r:${node.group || \"\"}:${node.datum?.category ?? i}`\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n }\n }\n }\n\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n let key: string | null = null\n if (node.type === \"point\") {\n key = `p:${i}`\n } else if (node.type === \"rect\") {\n key = `r:${node.group || \"\"}:${node.datum?.category ?? i}`\n }\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n if (node.type === \"point\") {\n if (prev.x !== node.x || prev.y !== node.y) {\n node._targetX = node.x\n node._targetY = node.y\n node.x = prev.x\n node.y = prev.y\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n if (prev.x !== node.x || prev.y !== node.y || prev.w !== node.w || prev.h !== node.h) {\n node._targetX = node.x\n node._targetY = node.y\n node._targetW = node.w\n node._targetH = node.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = `p:${0}`\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = `r:${node.group || \"\"}:${node.datum?.category ?? 0}`\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) {\n node.w = prev.w + (node._targetW! - prev.w) * t\n node.h = prev.h! + (node._targetH! - prev.h!) * t\n }\n }\n }\n\n if (rawT >= 1) {\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node._targetX = undefined\n node._targetY = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n clear(): void {\n this.buffer.clear()\n this.rExtent.clear()\n this.categories.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.columns = {}\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getOAccessor(): (d: any) => string {\n return this.getO\n }\n\n getRAccessor(): (d: any) => number {\n return this.getR\n }\n\n updateConfig(config: Partial<OrdinalPipelineConfig>): void {\n if (config.colorScheme !== this.config.colorScheme) {\n this._colorSchemeMap = null\n this._colorSchemeIndex = 0\n }\n Object.assign(this.config, config)\n }\n}\n","import type { OrdinalSceneNode, WedgeSceneNode, BoxplotSceneNode, ViolinSceneNode } from \"./ordinalTypes\"\nimport type { PointSceneNode, RectSceneNode, HoverData } from \"./types\"\n\nexport interface OrdinalHitResult {\n datum: any\n x: number\n y: number\n distance: number\n category?: string\n}\n\nexport function findNearestOrdinalNode(\n scene: OrdinalSceneNode[],\n px: number,\n py: number,\n maxDistance: number = 30\n): OrdinalHitResult | null {\n let best: OrdinalHitResult | null = null\n\n for (const node of scene) {\n let result: OrdinalHitResult | null = null\n\n switch (node.type) {\n case \"rect\":\n result = hitTestRect(node, px, py)\n break\n case \"point\":\n result = hitTestPoint(node, px, py)\n break\n case \"wedge\":\n result = hitTestWedge(node, px, py)\n break\n case \"boxplot\":\n result = hitTestBoxplot(node, px, py)\n break\n case \"violin\":\n result = hitTestViolin(node, px, py)\n break\n }\n\n if (result && result.distance < maxDistance) {\n if (!best || result.distance < best.distance) {\n best = result\n }\n }\n }\n\n return best\n}\n\nfunction hitTestRect(node: RectSceneNode, px: number, py: number): OrdinalHitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n return {\n datum: node.datum,\n x: node.x + node.w / 2,\n y: node.y,\n distance: 0,\n category: node.group\n }\n }\n return null\n}\n\nfunction hitTestPoint(node: PointSceneNode, px: number, py: number): OrdinalHitResult | null {\n const dx = px - node.x\n const dy = py - node.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n const hitR = Math.max(node.r, 5) // minimum hit target\n if (dist <= hitR) {\n return {\n datum: node.datum,\n x: node.x,\n y: node.y,\n distance: dist\n }\n }\n return null\n}\n\nfunction hitTestWedge(node: WedgeSceneNode, px: number, py: number): OrdinalHitResult | null {\n // Convert to polar coordinates relative to center\n const dx = px - node.cx\n const dy = py - node.cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // Check radius bounds\n if (dist < node.innerRadius || dist > node.outerRadius) return null\n\n // Check angle bounds\n // atan2 returns [-π, π], normalize to [0, 2π]\n let angle = Math.atan2(dy, dx)\n if (angle < 0) angle += Math.PI * 2\n\n // Normalize start/end angles to [0, 2π]\n let start = node.startAngle % (Math.PI * 2)\n let end = node.endAngle % (Math.PI * 2)\n if (start < 0) start += Math.PI * 2\n if (end < 0) end += Math.PI * 2\n\n // Check if angle is within the arc\n const inArc = start <= end\n ? angle >= start && angle <= end\n : angle >= start || angle <= end\n\n if (!inArc) return null\n\n // Return centroid position for tooltip\n const midAngle = (node.startAngle + node.endAngle) / 2\n const midRadius = (node.innerRadius + node.outerRadius) / 2\n return {\n datum: node.datum,\n x: node.cx + Math.cos(midAngle) * midRadius,\n y: node.cy + Math.sin(midAngle) * midRadius,\n distance: 0,\n category: node.category\n }\n}\n\nfunction hitTestBoxplot(node: BoxplotSceneNode, px: number, py: number): OrdinalHitResult | null {\n const halfWidth = node.columnWidth / 2\n\n if (node.projection === \"vertical\") {\n const left = node.x - halfWidth\n const right = node.x + halfWidth\n const top = Math.min(node.minPos, node.maxPos)\n const bottom = Math.max(node.minPos, node.maxPos)\n\n if (px >= left && px <= right && py >= top && py <= bottom) {\n return {\n datum: node.datum,\n x: node.x,\n y: node.medianPos,\n distance: 0,\n category: node.category\n }\n }\n } else {\n const top = node.y - halfWidth\n const bottom = node.y + halfWidth\n const left = Math.min(node.minPos, node.maxPos)\n const right = Math.max(node.minPos, node.maxPos)\n\n if (px >= left && px <= right && py >= top && py <= bottom) {\n return {\n datum: node.datum,\n x: node.medianPos,\n y: node.y,\n distance: 0,\n category: node.category\n }\n }\n }\n\n return null\n}\n\nfunction hitTestViolin(node: ViolinSceneNode, px: number, py: number): OrdinalHitResult | null {\n if (!node.bounds) return null\n\n const { x, y, width, height } = node.bounds\n\n if (px >= x && px <= x + width && py >= y && py <= y + height) {\n // Return center of bounds for tooltip positioning\n return {\n datum: node.datum,\n x: x + width / 2,\n y: y + height / 2,\n distance: 0,\n category: node.category\n }\n }\n\n return null\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport type { OrdinalScales, AnnotationContext } from \"./ordinalTypes\"\nimport type { ReactNode } from \"react\"\nimport Legend from \"../Legend\"\nimport type { LegendGroup } from \"../types/legendTypes\"\n\ninterface OrdinalSVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: OrdinalScales | null\n\n // Axes\n showAxes?: boolean\n oLabel?: string\n rLabel?: string\n oFormat?: (d: string) => string\n rFormat?: (d: number) => string\n\n // Grid\n showGrid?: boolean\n\n // Title\n title?: string | ReactNode\n\n // Legend\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n // Foreground graphics\n foregroundGraphics?: ReactNode\n\n // Annotations\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n annotationFrame?: number\n\n children?: ReactNode\n}\n\nfunction isLegendConfig(value: unknown): value is { legendGroups: LegendGroup[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !React.isValidElement(value) &&\n \"legendGroups\" in value\n )\n}\n\nfunction defaultRFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\nexport function OrdinalSVGOverlay(props: OrdinalSVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n scales,\n showAxes,\n oLabel,\n rLabel,\n oFormat,\n rFormat,\n showGrid,\n title,\n legend,\n foregroundGraphics,\n annotations,\n svgAnnotationRules,\n annotationFrame,\n children\n } = props\n\n const isRadial = scales?.projection === \"radial\"\n const isHorizontal = scales?.projection === \"horizontal\"\n\n // Category labels (band scale)\n const categoryTicks = useMemo(() => {\n if (!showAxes || !scales || isRadial) return []\n return scales.o.domain().map(cat => ({\n value: cat,\n pixel: (scales.o(cat) ?? 0) + scales.o.bandwidth() / 2,\n label: oFormat ? oFormat(cat) : cat\n }))\n }, [showAxes, scales, oFormat, isRadial])\n\n // Value ticks (linear scale)\n const valueTicks = useMemo(() => {\n if (!showAxes || !scales || isRadial) return []\n return scales.r.ticks(5).map(v => ({\n value: v,\n pixel: scales.r(v),\n label: (rFormat || defaultRFormat)(v)\n }))\n }, [showAxes, scales, rFormat, isRadial])\n\n // Annotations\n const renderedAnnotations = useMemo(() => {\n if (!annotations || annotations.length === 0 || !svgAnnotationRules) return null\n return annotations\n .map((annotation, i) =>\n svgAnnotationRules(annotation, i, {\n scales: scales ? { time: scales.r, value: scales.r } : null,\n timeAxis: \"x\",\n width,\n height\n })\n )\n .filter(Boolean)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [annotations, svgAnnotationRules, width, height, annotationFrame])\n\n const hasContent = showAxes || title || legend || foregroundGraphics || (renderedAnnotations && renderedAnnotations.length > 0) || showGrid || children\n if (!hasContent) return null\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Grid lines */}\n {showGrid && scales && !isRadial && (\n <g className=\"ordinal-grid\">\n {valueTicks.map((tick, i) => (\n <line\n key={`grid-${i}`}\n x1={isHorizontal ? tick.pixel : 0}\n y1={isHorizontal ? 0 : tick.pixel}\n x2={isHorizontal ? tick.pixel : width}\n y2={isHorizontal ? height : tick.pixel}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n </g>\n )}\n\n {/* Axes */}\n {showAxes && scales && !isRadial && (\n <g className=\"ordinal-axes\">\n {isHorizontal ? (\n <>\n {/* Horizontal: categories on left, values on bottom */}\n {/* Category axis (left) */}\n <line x1={0} y1={0} x2={0} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {categoryTicks.map((tick, i) => (\n <g key={`cat-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n x={-8}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {oLabel && (\n <text\n x={-margin.left + 15}\n y={height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-margin.left + 15}, ${height / 2})`}\n style={{ userSelect: \"none\" }}\n >\n {oLabel}\n </text>\n )}\n\n {/* Value axis (bottom) */}\n <line x1={0} y1={height} x2={width} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {valueTicks.map((tick, i) => (\n <g key={`val-${i}`} transform={`translate(${tick.pixel},${height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n y={18}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {rLabel && (\n <text\n x={width / 2}\n y={height + 40}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {rLabel}\n </text>\n )}\n </>\n ) : (\n <>\n {/* Vertical: categories on bottom, values on left */}\n {/* Category axis (bottom) */}\n <line x1={0} y1={height} x2={width} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {categoryTicks.map((tick, i) => (\n <g key={`cat-${i}`} transform={`translate(${tick.pixel},${height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n y={18}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {oLabel && (\n <text\n x={width / 2}\n y={height + 40}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {oLabel}\n </text>\n )}\n\n {/* Value axis (left) */}\n <line x1={0} y1={0} x2={0} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {valueTicks.map((tick, i) => (\n <g key={`val-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n x={-8}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {rLabel && (\n <text\n x={-margin.left + 15}\n y={height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-margin.left + 15}, ${height / 2})`}\n style={{ userSelect: \"none\" }}\n >\n {rLabel}\n </text>\n )}\n </>\n )}\n </g>\n )}\n\n {/* Annotations */}\n {renderedAnnotations}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n\n {children}\n </g>\n\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={20}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {typeof title === \"string\" ? title : null}\n </text>\n )}\n\n {/* Legend */}\n {legend && (\n <g transform={`translate(${totalWidth - margin.right + 10}, ${margin.top})`}>\n {isLegendConfig(legend)\n ? <Legend legendGroups={legend.legendGroups} title=\"\" width={100} />\n : (legend as ReactNode)}\n </g>\n )}\n </svg>\n )\n}\n","import type { OrdinalSceneNode, OrdinalScales, OrdinalLayout, WedgeSceneNode } from \"../ordinalTypes\"\n\nexport const wedgeCanvasRenderer = (\n ctx: CanvasRenderingContext2D,\n nodes: OrdinalSceneNode[],\n _scales: OrdinalScales,\n _layout: OrdinalLayout\n): void => {\n const wedgeNodes = nodes.filter((n): n is WedgeSceneNode => n.type === \"wedge\")\n\n for (const node of wedgeNodes) {\n ctx.beginPath()\n\n if (node.innerRadius > 0) {\n // Donut: outer arc forward, inner arc backward\n ctx.arc(node.cx, node.cy, node.outerRadius, node.startAngle, node.endAngle)\n ctx.arc(node.cx, node.cy, node.innerRadius, node.endAngle, node.startAngle, true)\n } else {\n // Pie: move to center, arc, close\n ctx.moveTo(node.cx, node.cy)\n ctx.arc(node.cx, node.cy, node.outerRadius, node.startAngle, node.endAngle)\n }\n\n ctx.closePath()\n\n if (node.style.opacity != null) ctx.globalAlpha = node.style.opacity\n if (node.style.fillOpacity != null) ctx.globalAlpha = node.style.fillOpacity\n\n ctx.fillStyle = node.style.fill || \"#007bff\"\n ctx.fill()\n\n if (node.style.stroke && node.style.stroke !== \"none\") {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { OrdinalSceneNode, OrdinalScales, OrdinalLayout, BoxplotSceneNode } from \"../ordinalTypes\"\n\nexport const boxplotCanvasRenderer = (\n ctx: CanvasRenderingContext2D,\n nodes: OrdinalSceneNode[],\n _scales: OrdinalScales,\n _layout: OrdinalLayout\n): void => {\n const boxNodes = nodes.filter((n): n is BoxplotSceneNode => n.type === \"boxplot\")\n\n for (const node of boxNodes) {\n const halfWidth = node.columnWidth / 2\n const isVert = node.projection === \"vertical\"\n\n const fillColor = node.style.fill || \"#007bff\"\n const strokeColor = node.style.stroke || \"#333\"\n const lineWidth = node.style.strokeWidth || 1\n const opacity = node.style.fillOpacity ?? node.style.opacity ?? 0.6\n\n ctx.save()\n\n // Whisker line (min to max)\n ctx.strokeStyle = strokeColor\n ctx.lineWidth = lineWidth\n ctx.beginPath()\n if (isVert) {\n ctx.moveTo(node.x, node.minPos)\n ctx.lineTo(node.x, node.maxPos)\n } else {\n ctx.moveTo(node.minPos, node.y)\n ctx.lineTo(node.maxPos, node.y)\n }\n ctx.stroke()\n\n // Whisker caps\n ctx.beginPath()\n if (isVert) {\n ctx.moveTo(node.x - halfWidth * 0.4, node.minPos)\n ctx.lineTo(node.x + halfWidth * 0.4, node.minPos)\n ctx.moveTo(node.x - halfWidth * 0.4, node.maxPos)\n ctx.lineTo(node.x + halfWidth * 0.4, node.maxPos)\n } else {\n ctx.moveTo(node.minPos, node.y - halfWidth * 0.4)\n ctx.lineTo(node.minPos, node.y + halfWidth * 0.4)\n ctx.moveTo(node.maxPos, node.y - halfWidth * 0.4)\n ctx.lineTo(node.maxPos, node.y + halfWidth * 0.4)\n }\n ctx.stroke()\n\n // IQR box (q1 to q3)\n ctx.globalAlpha = opacity\n ctx.fillStyle = fillColor\n if (isVert) {\n const boxTop = Math.min(node.q1Pos, node.q3Pos)\n const boxH = Math.abs(node.q3Pos - node.q1Pos)\n ctx.fillRect(node.x - halfWidth, boxTop, node.columnWidth, boxH)\n ctx.globalAlpha = 1\n ctx.strokeRect(node.x - halfWidth, boxTop, node.columnWidth, boxH)\n } else {\n const boxLeft = Math.min(node.q1Pos, node.q3Pos)\n const boxW = Math.abs(node.q3Pos - node.q1Pos)\n ctx.fillRect(boxLeft, node.y - halfWidth, boxW, node.columnWidth)\n ctx.globalAlpha = 1\n ctx.strokeRect(boxLeft, node.y - halfWidth, boxW, node.columnWidth)\n }\n\n // Median line\n ctx.strokeStyle = \"#fff\"\n ctx.lineWidth = 2\n ctx.beginPath()\n if (isVert) {\n ctx.moveTo(node.x - halfWidth, node.medianPos)\n ctx.lineTo(node.x + halfWidth, node.medianPos)\n } else {\n ctx.moveTo(node.medianPos, node.y - halfWidth)\n ctx.lineTo(node.medianPos, node.y + halfWidth)\n }\n ctx.stroke()\n\n ctx.restore()\n }\n}\n","import type { OrdinalSceneNode, OrdinalScales, OrdinalLayout, ViolinSceneNode } from \"../ordinalTypes\"\n\nexport const violinCanvasRenderer = (\n ctx: CanvasRenderingContext2D,\n nodes: OrdinalSceneNode[],\n _scales: OrdinalScales,\n _layout: OrdinalLayout\n): void => {\n const violinNodes = nodes.filter((n): n is ViolinSceneNode => n.type === \"violin\")\n\n for (const node of violinNodes) {\n ctx.save()\n\n if (node.translateX || node.translateY) {\n ctx.translate(node.translateX, node.translateY)\n }\n\n // Draw the violin shape\n const path = new Path2D(node.pathString)\n\n ctx.globalAlpha = node.style.fillOpacity ?? node.style.opacity ?? 0.6\n ctx.fillStyle = node.style.fill || \"#007bff\"\n ctx.fill(path)\n\n ctx.globalAlpha = 1\n if (node.style.stroke && node.style.stroke !== \"none\") {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.stroke(path)\n }\n\n // IQR overlay lines\n if (node.iqrLine) {\n ctx.strokeStyle = \"#333\"\n ctx.lineWidth = 2\n ctx.globalAlpha = 0.8\n\n // Q1 to Q3 line\n ctx.beginPath()\n // Determine if this is a vertical violin by checking path characteristics\n // IQR positions are already in pixel space from rScale\n ctx.moveTo(0, node.iqrLine.q1Pos)\n ctx.lineTo(0, node.iqrLine.q3Pos)\n ctx.stroke()\n\n // Median dot\n ctx.beginPath()\n ctx.arc(0, node.iqrLine.medianPos, 3, 0, Math.PI * 2)\n ctx.fillStyle = \"#fff\"\n ctx.fill()\n ctx.strokeStyle = \"#333\"\n ctx.lineWidth = 1\n ctx.stroke()\n\n ctx.globalAlpha = 1\n }\n\n ctx.restore()\n }\n}\n","import type { OrdinalSceneNode, OrdinalScales, OrdinalLayout, ConnectorSceneNode } from \"../ordinalTypes\"\n\nexport const connectorCanvasRenderer = (\n ctx: CanvasRenderingContext2D,\n nodes: OrdinalSceneNode[],\n _scales: OrdinalScales,\n _layout: OrdinalLayout\n): void => {\n const connectorNodes = nodes.filter((n): n is ConnectorSceneNode => n.type === \"connector\")\n if (connectorNodes.length === 0) return\n\n // Group connectors by their group key so we can draw filled polygons\n const groups = new Map<string, ConnectorSceneNode[]>()\n for (const node of connectorNodes) {\n const key = node.group || \"_default\"\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(node)\n }\n\n for (const [, segments] of groups) {\n if (segments.length === 0) continue\n\n const firstStyle = segments[0].style\n const hasFill = firstStyle.fill && firstStyle.fill !== \"none\"\n\n // Draw filled polygon if fill is specified (e.g. radar plot)\n if (hasFill) {\n ctx.beginPath()\n ctx.moveTo(segments[0].x1, segments[0].y1)\n for (const seg of segments) {\n ctx.lineTo(seg.x2, seg.y2)\n }\n ctx.closePath()\n\n ctx.globalAlpha = firstStyle.fillOpacity ?? firstStyle.opacity ?? 0.3\n ctx.fillStyle = firstStyle.fill!\n ctx.fill()\n ctx.globalAlpha = 1\n }\n\n // Draw stroke lines\n for (const node of segments) {\n ctx.beginPath()\n ctx.moveTo(node.x1, node.y1)\n ctx.lineTo(node.x2, node.y2)\n\n ctx.strokeStyle = node.style.stroke || node.style.fill || \"#999\"\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.globalAlpha = node.style.opacity ?? 0.5\n ctx.stroke()\n ctx.globalAlpha = 1\n }\n }\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamOrdinalFrameProps,\n StreamOrdinalFrameHandle,\n OrdinalChartType,\n OrdinalScales,\n OrdinalSceneNode,\n OrdinalPipelineConfig,\n OrdinalRendererFn,\n OrdinalLayout,\n HoverData,\n HoverAnnotationConfig\n} from \"./ordinalTypes\"\nimport { DataSourceAdapter } from \"./DataSourceAdapter\"\nimport { OrdinalPipelineStore } from \"./OrdinalPipelineStore\"\nimport { findNearestOrdinalNode } from \"./OrdinalCanvasHitTester\"\nimport { OrdinalSVGOverlay } from \"./OrdinalSVGOverlay\"\n\n// Canvas renderers\nimport { barCanvasRenderer } from \"./renderers/barCanvasRenderer\"\nimport { pointCanvasRenderer } from \"./renderers/pointCanvasRenderer\"\nimport { wedgeCanvasRenderer } from \"./renderers/wedgeCanvasRenderer\"\nimport { boxplotCanvasRenderer } from \"./renderers/boxplotCanvasRenderer\"\nimport { violinCanvasRenderer } from \"./renderers/violinCanvasRenderer\"\nimport { connectorCanvasRenderer } from \"./renderers/connectorCanvasRenderer\"\n\n// ── Renderer dispatch ──────────────────────────────────────────────────\n\n// Connectors are built into the scene graph by the store, so every\n// chart type includes the connector renderer to paint them.\nconst withConnectors = (renderers: OrdinalRendererFn[]): OrdinalRendererFn[] =>\n [connectorCanvasRenderer as any, ...renderers]\n\nconst RENDERERS: Record<OrdinalChartType, OrdinalRendererFn[]> = {\n bar: withConnectors([barCanvasRenderer as any]),\n clusterbar: withConnectors([barCanvasRenderer as any]),\n point: withConnectors([pointCanvasRenderer as any]),\n swarm: withConnectors([pointCanvasRenderer as any]),\n pie: [wedgeCanvasRenderer as any],\n donut: [wedgeCanvasRenderer as any],\n boxplot: withConnectors([boxplotCanvasRenderer as any, pointCanvasRenderer as any]),\n violin: withConnectors([violinCanvasRenderer as any]),\n histogram: withConnectors([barCanvasRenderer as any]),\n ridgeline: withConnectors([violinCanvasRenderer as any]),\n timeline: withConnectors([barCanvasRenderer as any])\n}\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 50, right: 40, bottom: 60, left: 70 }\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: \"4px\",\n fontSize: \"13px\",\n lineHeight: \"1.4\",\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultOrdinalTooltip({ hover }: { hover: HoverData }) {\n const d = hover.data || {}\n\n // For summary types (boxplot, violin), datum is an array of pieces\n if (Array.isArray(d)) {\n const category = d[0]?.category || \"\"\n const n = d.length\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {category && <div style={{ fontWeight: \"bold\" }}>{String(category)}</div>}\n <div>{n} items</div>\n </div>\n )\n }\n\n // For histogram bins\n if (d.bin != null && d.count != null) {\n const range = d.range || []\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {d.category && <div style={{ fontWeight: \"bold\" }}>{String(d.category)}</div>}\n <div>Count: {d.count}</div>\n {range.length === 2 && (\n <div style={{ opacity: 0.8 }}>\n {Number(range[0]).toFixed(1)} – {Number(range[1]).toFixed(1)}\n </div>\n )}\n </div>\n )\n }\n\n // For regular pieces — extract category and value from common field names\n const category = d.category || d.name || d.group || d.__rName || \"\"\n const value = d.value ?? d.__rValue ?? d.pct ?? \"\"\n\n // If standard fields didn't match, show all non-internal fields from the datum\n if (!category && value === \"\") {\n const entries = Object.entries(d).filter(\n ([k]) => !k.startsWith(\"_\") && k !== \"data\"\n )\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {entries.map(([k, v]) => (\n <div key={k}>\n <span style={{ opacity: 0.7 }}>{k}:</span>{\" \"}\n {typeof v === \"number\" ? v.toLocaleString() : String(v)}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {category && <div style={{ fontWeight: \"bold\" }}>{String(category)}</div>}\n {value !== \"\" && <div>{typeof value === \"number\" ? value.toLocaleString() : String(value)}</div>}\n </div>\n )\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nconst StreamOrdinalFrame = forwardRef<StreamOrdinalFrameHandle, StreamOrdinalFrameProps>(\n function StreamOrdinalFrame(props, ref) {\n const {\n chartType,\n runtimeMode,\n data,\n oAccessor = \"category\",\n rAccessor = \"value\",\n colorAccessor,\n stackBy,\n groupBy,\n multiAxis,\n timeAccessor,\n valueAccessor,\n categoryAccessor,\n projection = \"vertical\",\n size = [600, 400],\n margin: userMargin,\n barPadding,\n innerRadius,\n normalize,\n startAngle,\n dynamicColumnWidth,\n bins,\n showOutliers,\n showIQR,\n amplitude,\n connectorAccessor,\n connectorStyle,\n rExtent,\n oExtent,\n extentPadding = 0.05,\n oSort,\n arrowOfTime,\n windowMode = \"sliding\",\n windowSize = 200,\n pieceStyle,\n summaryStyle,\n colorScheme,\n barColors,\n showAxes = true,\n oLabel,\n rLabel,\n oFormat,\n rFormat,\n enableHover = true,\n hoverAnnotation,\n tooltipContent,\n customHoverBehavior,\n annotations,\n svgAnnotationRules,\n showGrid = false,\n legend,\n backgroundGraphics,\n foregroundGraphics,\n title,\n className,\n background,\n centerContent,\n decay,\n pulse,\n transition,\n staleness\n } = props\n\n // ── Layout ───────────────────────────────────────────────────────────\n\n const margin = useMemo(() => ({ ...DEFAULT_MARGIN, ...userMargin }), [userMargin])\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const dirtyRef = useRef(true)\n const rafRef = useRef<number>(0)\n const hoverRef = useRef<HoverData | null>(null)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── State ────────────────────────────────────────────────────────────\n\n const [hoverPoint, setHoverPoint] = useState<HoverData | null>(null)\n const [currentScales, setCurrentScales] = useState<OrdinalScales | null>(null)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n const [isStale, setIsStale] = useState(false)\n\n // ── Hover config ─────────────────────────────────────────────────────\n\n const effectiveHoverAnnotation = enableHover || hoverAnnotation\n\n // ── Pipeline ─────────────────────────────────────────────────────────\n\n const isStreaming = runtimeMode === \"streaming\"\n\n const pipelineConfig = useMemo((): OrdinalPipelineConfig => ({\n chartType,\n runtimeMode: isStreaming ? \"streaming\" : \"bounded\",\n windowSize,\n windowMode,\n extentPadding,\n projection,\n oAccessor: isStreaming ? undefined : oAccessor,\n rAccessor: isStreaming ? undefined : rAccessor,\n colorAccessor,\n stackBy,\n groupBy,\n multiAxis,\n timeAccessor: isStreaming ? timeAccessor : undefined,\n valueAccessor: isStreaming ? (valueAccessor || (typeof rAccessor === \"string\" || typeof rAccessor === \"function\" ? rAccessor : undefined)) : undefined,\n categoryAccessor: isStreaming ? (categoryAccessor || oAccessor) : undefined,\n rExtent,\n oExtent,\n barPadding,\n innerRadius,\n normalize,\n startAngle,\n dynamicColumnWidth,\n bins,\n showOutliers,\n showIQR,\n amplitude,\n connectorAccessor,\n connectorStyle,\n oSort,\n pieceStyle,\n summaryStyle,\n colorScheme,\n barColors,\n decay,\n pulse,\n transition,\n staleness\n }), [\n chartType, windowSize, windowMode, extentPadding, projection,\n oAccessor, rAccessor, colorAccessor, stackBy, groupBy, multiAxis,\n timeAccessor, valueAccessor, categoryAccessor,\n rExtent, oExtent, barPadding, innerRadius, normalize, startAngle,\n dynamicColumnWidth,\n bins, showOutliers, showIQR, amplitude, connectorAccessor, connectorStyle, oSort,\n pieceStyle, summaryStyle, colorScheme, barColors,\n decay, pulse, transition, staleness,\n isStreaming\n ])\n\n const storeRef = useRef<OrdinalPipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new OrdinalPipelineStore(pipelineConfig)\n }\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current) return\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }, [])\n\n // Update config when it changes\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── DataSourceAdapter ────────────────────────────────────────────────\n\n const adapterRef = useRef<DataSourceAdapter | null>(null)\n if (!adapterRef.current) {\n adapterRef.current = new DataSourceAdapter((changeset) => {\n const store = storeRef.current\n if (!store) return\n const needsRender = store.ingest(changeset)\n if (needsRender) {\n dirtyRef.current = true\n scheduleRender()\n }\n })\n }\n\n // ── Push API ─────────────────────────────────────────────────────────\n\n const pushPoint = useCallback((datum: Record<string, any>) => {\n adapterRef.current?.push(datum)\n }, [])\n\n const pushManyPoints = useCallback((data: Record<string, any>[]) => {\n adapterRef.current?.pushMany(data)\n }, [])\n\n const clearAll = useCallback(() => {\n adapterRef.current?.clear()\n storeRef.current?.clear()\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n useImperativeHandle(ref, () => ({\n push: pushPoint,\n pushMany: pushManyPoints,\n clear: clearAll,\n getData: () => storeRef.current?.getData() ?? [],\n getScales: () => storeRef.current?.scales ?? null\n }), [pushPoint, pushManyPoints, clearAll])\n\n // ── Controlled data prop ─────────────────────────────────────────────\n\n useEffect(() => {\n if (!data) return\n adapterRef.current?.setBoundedData(data)\n }, [data])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!effectiveHoverAnnotation) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (chartX < 0 || chartX > adjustedWidth || chartY < 0 || chartY > adjustedHeight) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store || store.scene.length === 0) return\n\n // For radial projection, convert to center-relative coordinates\n // since scene nodes use (0,0) as center\n const isRadialMode = projection === \"radial\"\n const hitX = isRadialMode ? chartX - adjustedWidth / 2 : chartX\n const hitY = isRadialMode ? chartY - adjustedHeight / 2 : chartY\n\n const hit = findNearestOrdinalNode(store.scene, hitX, hitY)\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const hover: HoverData = {\n data: hit.datum,\n time: hit.x,\n value: hit.y,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverPoint(hover)\n if (customHoverBehavior) customHoverBehavior(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n\n // Advance transition animation\n const isTransitioning = store.advanceTransition(now)\n\n const wasDirty = dirtyRef.current\n if (wasDirty && !isTransitioning) {\n store.computeScene({ width: adjustedWidth, height: adjustedHeight })\n dirtyRef.current = false\n }\n\n // DPR setup\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n\n // Clear\n ctx.clearRect(0, 0, size[0], size[1])\n\n // Staleness dimming\n const staleThreshold = staleness?.threshold ?? 5000\n const currentlyStale = staleness && store.lastIngestTime > 0 &&\n (now - store.lastIngestTime) > staleThreshold\n\n if (currentlyStale) {\n ctx.globalAlpha = staleness?.dimOpacity ?? 0.5\n }\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, size[0], size[1])\n }\n\n const isRadial = projection === \"radial\"\n\n if (isRadial) {\n // Radial: translate to center of chart area\n ctx.save()\n ctx.translate(margin.left + adjustedWidth / 2, margin.top + adjustedHeight / 2)\n } else {\n ctx.translate(margin.left, margin.top)\n }\n\n // Dispatch to renderers\n const renderers = RENDERERS[chartType] || []\n const layout: OrdinalLayout = { width: adjustedWidth, height: adjustedHeight }\n\n for (const renderer of renderers) {\n renderer(ctx, store.scene as any, store.scales as any, layout)\n }\n\n if (isRadial) {\n ctx.restore()\n }\n\n // Reset alpha after staleness dimming\n if (currentlyStale) {\n ctx.globalAlpha = 1\n }\n\n // Push scales to React state for SVG overlay\n if (wasDirty && store.scales) {\n setCurrentScales(store.scales)\n setAnnotationFrame(f => f + 1)\n }\n\n // Update staleness badge state\n if (staleness?.showBadge) {\n setIsStale(!!currentlyStale)\n }\n\n // Schedule next frame for pulse/transition continuous rendering\n if (isTransitioning || store.hasActivePulses) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, showAxes, background, scheduleRender])\n\n // Staleness check timer\n useEffect(() => {\n if (!staleness) return\n const interval = setInterval(() => {\n const store = storeRef.current\n if (!store || store.lastIngestTime === 0) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const threshold = staleness.threshold ?? 5000\n const stale = (now - store.lastIngestTime) > threshold\n if (stale !== isStale) {\n setIsStale(stale)\n dirtyRef.current = true\n scheduleRender()\n }\n }, 1000)\n return () => clearInterval(interval)\n }, [staleness, isStale, scheduleRender])\n\n // ── Tooltip positioning ──────────────────────────────────────────────\n\n const tooltipRendered = effectiveHoverAnnotation && hoverPoint\n ? (tooltipContent ? tooltipContent(hoverPoint) : <DefaultOrdinalTooltip hover={hoverPoint} />)\n : null\n\n // For radial projection, hit coords are center-relative — convert back\n // to margin-relative for tooltip positioning\n const isRadialMode = projection === \"radial\"\n const tooltipX = hoverPoint\n ? (isRadialMode ? hoverPoint.x + adjustedWidth / 2 : hoverPoint.x)\n : 0\n const tooltipY = hoverPoint\n ? (isRadialMode ? hoverPoint.y + adjustedHeight / 2 : hoverPoint.y)\n : 0\n\n const tooltipElement = tooltipRendered ? (\n <div\n className=\"stream-ordinal-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + tooltipX,\n top: margin.top + tooltipY,\n transform: `translate(${\n tooltipX > adjustedWidth * 0.7 ? \"calc(-100% - 12px)\" : \"12px\"\n }, ${\n tooltipY < adjustedHeight * 0.3 ? \"4px\" : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 1\n }}\n >\n {tooltipRendered}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n return (\n <div\n className={`stream-ordinal-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={effectiveHoverAnnotation ? onMouseMove : undefined}\n onMouseLeave={effectiveHoverAnnotation ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {backgroundGraphics}\n </g>\n </svg>\n )}\n\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: size[0],\n height: size[1]\n }}\n />\n\n <OrdinalSVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n scales={currentScales}\n showAxes={showAxes}\n oLabel={oLabel}\n rLabel={rLabel}\n oFormat={oFormat}\n rFormat={rFormat}\n showGrid={showGrid}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n\n {/* Donut center content */}\n {centerContent && projection === \"radial\" && (\n <div\n style={{\n position: \"absolute\",\n left: margin.left + adjustedWidth / 2,\n top: margin.top + adjustedHeight / 2,\n transform: \"translate(-50%, -50%)\",\n pointerEvents: \"none\",\n textAlign: \"center\"\n }}\n >\n {centerContent}\n </div>\n )}\n\n {staleness?.showBadge && (\n <div\n className=\"stream-staleness-badge\"\n style={{\n position: \"absolute\",\n ...(staleness.badgePosition === \"top-left\" ? { top: 4, left: 4 } :\n staleness.badgePosition === \"bottom-left\" ? { bottom: 4, left: 4 } :\n staleness.badgePosition === \"bottom-right\" ? { bottom: 4, right: 4 } :\n { top: 4, right: 4 }),\n padding: \"2px 8px\",\n borderRadius: 4,\n fontSize: 11,\n fontWeight: 600,\n pointerEvents: \"none\",\n background: isStale ? \"#dc3545\" : \"#28a745\",\n color: \"white\"\n }}\n >\n {isStale ? \"STALE\" : \"LIVE\"}\n </div>\n )}\n {tooltipElement}\n </div>\n )\n }\n)\n\nStreamOrdinalFrame.displayName = \"StreamOrdinalFrame\"\nexport default StreamOrdinalFrame\n","import type { ReactNode } from \"react\"\nimport type { HoverData, AnnotationContext } from \"../realtime/types\"\nimport type { LegendGroup } from \"../types/legendTypes\"\nimport type { Style } from \"./types\"\n\n// ── Tension configuration ──────────────────────────────────────────────\n\nexport interface TensionConfig {\n weightChange: number\n newEdge: number\n newNode: number\n threshold: number\n transitionDuration: number\n}\n\nexport const DEFAULT_TENSION_CONFIG: TensionConfig = {\n weightChange: 0.1,\n newEdge: 0.5,\n newNode: 1.0,\n threshold: 3.0,\n transitionDuration: 500\n}\n\n// ── Graph topology types ───────────────────────────────────────────────\n\nexport interface RealtimeNode {\n id: string\n x0: number\n x1: number\n y0: number\n y1: number\n x: number\n y: number\n width: number\n height: number\n _prevX0?: number\n _prevX1?: number\n _prevY0?: number\n _prevY1?: number\n _targetX0?: number\n _targetX1?: number\n _targetY0?: number\n _targetY1?: number\n value: number\n depth?: number\n data?: Record<string, any>\n createdByFrame?: boolean\n sourceLinks?: RealtimeEdge[]\n targetLinks?: RealtimeEdge[]\n}\n\nexport interface RealtimeEdge {\n source: RealtimeNode | string\n target: RealtimeNode | string\n value: number\n y0: number\n y1: number\n sankeyWidth: number\n _prevY0?: number\n _prevY1?: number\n _prevSankeyWidth?: number\n _targetY0?: number\n _targetY1?: number\n _targetSankeyWidth?: number\n direction?: string\n circular?: boolean\n circularPathData?: any\n bezier?: BezierCache\n data?: Record<string, any>\n}\n\n// ── Bezier cache ───────────────────────────────────────────────────────\n\nexport interface BezierPoint {\n x: number\n y: number\n}\n\nexport interface BezierCache {\n circular: boolean\n points?: [BezierPoint, BezierPoint, BezierPoint, BezierPoint]\n segments?: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]>\n halfWidth: number\n}\n\n// ── Particle system ────────────────────────────────────────────────────\n\nexport interface Particle {\n t: number\n offset: number\n edgeIndex: number\n active: boolean\n x: number\n y: number\n}\n\nexport interface ParticleStyle {\n radius?: number\n color?: string | ((edge: RealtimeEdge, node: RealtimeNode) => string)\n /** Color particles by source or target node (default: \"source\") */\n colorBy?: \"source\" | \"target\"\n opacity?: number\n speedMultiplier?: number\n maxPerEdge?: number\n spawnRate?: number\n}\n\nexport const DEFAULT_PARTICLE_STYLE: Required<\n Pick<ParticleStyle, \"radius\" | \"opacity\" | \"speedMultiplier\" | \"maxPerEdge\" | \"spawnRate\">\n> = {\n radius: 3,\n opacity: 0.7,\n speedMultiplier: 1,\n maxPerEdge: 50,\n spawnRate: 0.1\n}\n\n// ── Push API ───────────────────────────────────────────────────────────\n\nexport interface EdgePush {\n source: string\n target: string\n value: number\n}\n\n// ── Re-export HoverData ────────────────────────────────────────────────\n\nexport type { HoverData }\n\n// ── Backwards-compat aliases for old RealtimeNetworkFrame types ────────\n\nexport type RealtimeNetworkFrameHandle = StreamNetworkFrameHandle\n\nexport interface RealtimeNetworkFrameProps {\n initialEdges?: EdgePush[]\n size?: [number, number]\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n tensionConfig?: Partial<TensionConfig>\n showParticles?: boolean\n particleStyle?: ParticleStyle\n colorBy?: string | ((d: RealtimeNode) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | ((d: RealtimeEdge) => string)\n edgeOpacity?: number\n nodeLabel?: string | ((d: RealtimeNode) => string)\n showLabels?: boolean\n enableHover?: boolean\n tooltipContent?: (d: { type: \"node\" | \"edge\"; data: any }) => ReactNode\n onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void\n background?: string\n className?: string\n}\n\n\n// ── Chart types ────────────────────────────────────────────────────────\n\nexport type NetworkChartType =\n | \"force\"\n | \"sankey\"\n | \"chord\"\n | \"tree\"\n | \"cluster\"\n | \"treemap\"\n | \"circlepack\"\n | \"partition\"\n\n// ── Scene graph nodes ─────────────────────────────────────────────────\n\n/** Circle node — used by force, tree, cluster, circlepack */\nexport interface NetworkCircleNode {\n type: \"circle\"\n cx: number\n cy: number\n r: number\n style: Style\n datum: any\n id?: string\n label?: string\n depth?: number\n}\n\n/** Rect node — used by sankey, treemap, partition */\nexport interface NetworkRectNode {\n type: \"rect\"\n x: number\n y: number\n w: number\n h: number\n style: Style\n datum: any\n id?: string\n label?: string\n depth?: number\n}\n\n/** Arc node — used by chord */\nexport interface NetworkArcNode {\n type: \"arc\"\n cx: number\n cy: number\n innerR: number\n outerR: number\n startAngle: number\n endAngle: number\n style: Style\n datum: any\n id?: string\n label?: string\n}\n\n/** Line edge — used by force */\nexport interface NetworkLineEdge {\n type: \"line\"\n x1: number\n y1: number\n x2: number\n y2: number\n style: Style\n datum: any\n}\n\n/** Bezier band edge — used by sankey */\nexport interface NetworkBezierEdge {\n type: \"bezier\"\n pathD: string\n bezierCache?: BezierCache\n style: Style\n datum: any\n}\n\n/** Ribbon edge — used by chord */\nexport interface NetworkRibbonEdge {\n type: \"ribbon\"\n pathD: string\n style: Style\n datum: any\n}\n\n/** Curved edge — used by tree, cluster */\nexport interface NetworkCurvedEdge {\n type: \"curved\"\n pathD: string\n style: Style\n datum: any\n}\n\nexport type NetworkSceneNode =\n | NetworkCircleNode\n | NetworkRectNode\n | NetworkArcNode\n\nexport type NetworkSceneEdge =\n | NetworkLineEdge\n | NetworkBezierEdge\n | NetworkRibbonEdge\n | NetworkCurvedEdge\n\n/** Label data for the SVG overlay */\nexport interface NetworkLabel {\n x: number\n y: number\n text: string\n anchor?: \"start\" | \"middle\" | \"end\"\n baseline?: string\n fontSize?: number\n fontWeight?: number | string\n fill?: string\n stroke?: string\n strokeWidth?: number\n paintOrder?: string\n}\n\n// ── Layout plugin interface ───────────────────────────────────────────\n\nexport interface NetworkLayoutPlugin {\n /**\n * Run the layout algorithm. May mutate node/edge positions directly.\n * For bounded data, called once. For streaming, called on topology changes.\n */\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void\n\n /**\n * Build scene nodes + labels from the positioned node/edge data.\n */\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n }\n\n /** Whether this layout supports incremental streaming updates */\n supportsStreaming: boolean\n\n /** Whether this layout uses hierarchical (tree) input instead of nodes+edges */\n hierarchical: boolean\n}\n\n// ── Pipeline config ──────────────────────────────────────────────────\n\nexport interface NetworkPipelineConfig {\n chartType: NetworkChartType\n\n // ── Accessors ────────────────────────────────────\n nodeIDAccessor?: string | ((d: any) => string)\n sourceAccessor?: string | ((d: any) => string)\n targetAccessor?: string | ((d: any) => string)\n valueAccessor?: string | ((d: any) => number)\n\n // ── Hierarchy (tree/treemap/circlepack) ──────────\n childrenAccessor?: string | ((d: any) => any[])\n hierarchySum?: (d: any) => number\n\n // ── Sankey layout ────────────────────────────────\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n edgeSort?: (a: any, b: any) => number\n\n // ── Force layout ─────────────────────────────────\n iterations?: number\n forceStrength?: number\n\n // ── Chord layout ─────────────────────────────────\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n\n // ── Tree/hierarchy layout ────────────────────────\n treeOrientation?: \"vertical\" | \"horizontal\" | \"radial\"\n edgeType?: \"line\" | \"curve\"\n padding?: number\n paddingTop?: number\n\n // ── Tension (streaming sankey) ───────────────────\n tensionConfig?: TensionConfig\n\n // ── Particles (sankey) ───────────────────────────\n showParticles?: boolean\n particleStyle?: ParticleStyle\n\n // ── Style functions ──────────────────────────────\n nodeStyle?: (d: any) => Record<string, any>\n edgeStyle?: (d: any) => Record<string, any>\n nodeLabel?: string | ((d: any) => string)\n showLabels?: boolean\n\n // ── Color ────────────────────────────────────────\n colorBy?: string | ((d: any) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n edgeOpacity?: number\n colorByDepth?: boolean\n nodeSize?: number | string | ((d: any) => number)\n nodeSizeRange?: [number, number]\n}\n\n// ── Component props ─────────────────────────────────────────────────\n\nexport interface StreamNetworkFrameProps<T = Record<string, any>> {\n // ── Chart type ───────────────────────────────────\n chartType: NetworkChartType\n\n // ── Data (bounded mode: nodes+edges or hierarchy root) ──\n nodes?: T[]\n edges?: T[] | T // array for graph data, single object for hierarchy\n /** Hierarchy root (alias for edges when using tree/treemap/circlepack) */\n data?: T\n\n // ── Initial edges for streaming ──────────────────\n initialEdges?: EdgePush[]\n\n // ── Accessors ────────────────────────────────────\n nodeIDAccessor?: string | ((d: T) => string)\n sourceAccessor?: string | ((d: T) => string)\n targetAccessor?: string | ((d: T) => string)\n valueAccessor?: string | ((d: T) => number)\n\n // ── Hierarchy ────────────────────────────────────\n childrenAccessor?: string | ((d: T) => T[])\n hierarchySum?: (d: T) => number\n\n // ── Layout config ────────────────────────────────\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n iterations?: number\n forceStrength?: number\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n edgeSort?: (a: any, b: any) => number\n treeOrientation?: \"vertical\" | \"horizontal\" | \"radial\"\n edgeType?: \"line\" | \"curve\"\n padding?: number\n paddingTop?: number\n\n // ── Tension (streaming) ──────────────────────────\n tensionConfig?: Partial<TensionConfig>\n\n // ── Particles (sankey) ───────────────────────────\n showParticles?: boolean\n particleStyle?: ParticleStyle\n\n // ── Style ────────────────────────────────────────\n nodeStyle?: (d: any) => Record<string, any>\n edgeStyle?: (d: any) => Record<string, any>\n colorBy?: string | ((d: any) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n edgeOpacity?: number\n colorByDepth?: boolean\n nodeSize?: number | string | ((d: any) => number)\n nodeSizeRange?: [number, number]\n\n // ── Labels ───────────────────────────────────────\n nodeLabel?: string | ((d: any) => string)\n showLabels?: boolean\n\n // ── Layout ───────────────────────────────────────\n size?: [number, number]\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n className?: string\n background?: string\n\n // ── Interaction ──────────────────────────────────\n enableHover?: boolean\n tooltipContent?: (d: { type: \"node\" | \"edge\"; data: any; x: number; y: number }) => ReactNode\n onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void\n\n // ── Annotations ──────────────────────────────────\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n\n // ── Legend / title ───────────────────────────────\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n title?: string | ReactNode\n foregroundGraphics?: ReactNode\n backgroundGraphics?: ReactNode\n}\n\n// ── Ref handle ──────────────────────────────────────────────────────\n\nexport interface StreamNetworkFrameHandle {\n push(edge: EdgePush): void\n pushMany(edges: EdgePush[]): void\n clear(): void\n getTopology(): { nodes: RealtimeNode[]; edges: RealtimeEdge[] }\n relayout(): void\n getTension(): number\n}\n\n// ── Canvas renderer function type ───────────────────────────────────\n\nexport type NetworkRendererFn = (\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[],\n edges: NetworkSceneEdge[],\n size: [number, number]\n) => void\n","import type { Particle, RealtimeEdge, BezierCache, BezierPoint } from \"./networkTypes\"\n\n/**\n * Object-pool particle manager for high-performance canvas rendering.\n *\n * Pre-allocates a fixed-size array to avoid GC pressure.\n * Particles travel along bezier paths within link bands.\n */\nexport class ParticlePool {\n particles: Particle[]\n private capacity: number\n\n constructor(capacity: number) {\n this.capacity = capacity\n this.particles = new Array(capacity)\n for (let i = 0; i < capacity; i++) {\n this.particles[i] = {\n t: 0,\n offset: 0,\n edgeIndex: 0,\n active: false,\n x: 0,\n y: 0\n }\n }\n }\n\n /**\n * Spawn a new particle on the given edge.\n * Returns the particle if a free slot was found, null otherwise.\n */\n spawn(edgeIndex: number): Particle | null {\n for (let i = 0; i < this.capacity; i++) {\n const p = this.particles[i]\n if (!p.active) {\n p.active = true\n p.t = 0\n p.offset = Math.random() - 0.5 // [-0.5, 0.5]\n p.edgeIndex = edgeIndex\n p.x = 0\n p.y = 0\n return p\n }\n }\n return null // Pool exhausted\n }\n\n /**\n * Advance all active particles by deltaTime.\n * Recycles particles that have completed their journey (t >= 1).\n */\n step(deltaTime: number, speed: number, edges: RealtimeEdge[]): void {\n for (let i = 0; i < this.capacity; i++) {\n const p = this.particles[i]\n if (!p.active) continue\n\n const edge = edges[p.edgeIndex]\n if (!edge || !edge.bezier) {\n p.active = false\n continue\n }\n\n // Advance t — speed is normalized so 1.0 = traverse full path in 1 second\n p.t += deltaTime * speed\n\n if (p.t >= 1) {\n p.active = false\n continue\n }\n\n // Evaluate position along the bezier path\n const pos = evaluateBezier(edge.bezier, p.t, p.offset)\n p.x = pos.x\n p.y = pos.y\n }\n }\n\n /** Count active particles for a specific edge index */\n countForEdge(edgeIndex: number): number {\n let count = 0\n for (let i = 0; i < this.capacity; i++) {\n if (this.particles[i].active && this.particles[i].edgeIndex === edgeIndex) {\n count++\n }\n }\n return count\n }\n\n /** Deactivate all particles */\n clear(): void {\n for (let i = 0; i < this.capacity; i++) {\n this.particles[i].active = false\n }\n }\n\n /** Resize the pool (creates a new array) */\n resize(newCapacity: number): void {\n if (newCapacity <= this.capacity) return\n const oldParticles = this.particles\n this.particles = new Array(newCapacity)\n for (let i = 0; i < newCapacity; i++) {\n if (i < oldParticles.length) {\n this.particles[i] = oldParticles[i]\n } else {\n this.particles[i] = {\n t: 0,\n offset: 0,\n edgeIndex: 0,\n active: false,\n x: 0,\n y: 0\n }\n }\n }\n this.capacity = newCapacity\n }\n}\n\n/**\n * Evaluate a point along a bezier path at parameter t with perpendicular offset.\n *\n * Uses the chord direction (P0→P3) for perpendicular offset instead of the\n * local tangent. This gives a stable perpendicular across the entire curve,\n * eliminating the pivot/rotation artifact visible on short curves.\n */\nfunction evaluateBezier(\n cache: BezierCache,\n t: number,\n offset: number\n): BezierPoint {\n if (cache.circular && cache.segments) {\n return evaluateMultiSegment(cache.segments, t, offset, cache.halfWidth)\n }\n\n if (!cache.points) return { x: 0, y: 0 }\n\n const [p0, p1, p2, p3] = cache.points\n const pos = cubicBezier(p0, p1, p2, p3, t)\n\n // Use chord direction (P0→P3) for stable perpendicular offset\n const dx = p3.x - p0.x\n const dy = p3.y - p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n\n if (len > 0.001) {\n // Perpendicular to the chord (rotated 90 degrees)\n const nx = -dy / len\n const ny = dx / len\n pos.x += nx * offset * cache.halfWidth * 2\n pos.y += ny * offset * cache.halfWidth * 2\n }\n\n return pos\n}\n\n/**\n * Evaluate position along a multi-segment bezier path.\n * Maps global t [0,1] to the appropriate segment.\n * Uses segment chord direction for stable perpendicular offset.\n */\nfunction evaluateMultiSegment(\n segments: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]>,\n t: number,\n offset: number,\n halfWidth: number\n): BezierPoint {\n const n = segments.length\n const globalT = t * n\n const segIndex = Math.min(Math.floor(globalT), n - 1)\n const localT = globalT - segIndex\n\n const [p0, p1, p2, p3] = segments[segIndex]\n const pos = cubicBezier(p0, p1, p2, p3, localT)\n\n // Use segment chord direction for stable perpendicular\n const dx = p3.x - p0.x\n const dy = p3.y - p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n\n if (len > 0.001) {\n const nx = -dy / len\n const ny = dx / len\n pos.x += nx * offset * halfWidth * 2\n pos.y += ny * offset * halfWidth * 2\n }\n\n return pos\n}\n\n/** Cubic bezier evaluation: B(t) = (1-t)^3*P0 + 3*(1-t)^2*t*P1 + 3*(1-t)*t^2*P2 + t^3*P3 */\nfunction cubicBezier(\n p0: BezierPoint,\n p1: BezierPoint,\n p2: BezierPoint,\n p3: BezierPoint,\n t: number\n): BezierPoint {\n const mt = 1 - t\n const mt2 = mt * mt\n const mt3 = mt2 * mt\n const t2 = t * t\n const t3 = t2 * t\n\n return {\n x: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,\n y: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y\n }\n}\n\n","import { interpolateNumber } from \"d3-interpolate\"\nimport { line, curveLinearClosed } from \"d3-shape\"\n\nconst dedupeRibbonPoints =\n (weight = 1) =>\n (p, c) => {\n const l = p[p.length - 1]\n if (\n !l ||\n Math.round(l.x / weight) !== Math.round(c.x / weight) ||\n Math.round(l.y / weight) !== Math.round(c.y / weight)\n ) {\n p.push(c)\n }\n return p\n }\n\nfunction linearRibbon() {\n const _lineConstructor = line()\n let _xAccessor = function (d) {\n return d.x\n }\n let _yAccessor = function (d) {\n return d.y\n }\n let _rAccessor = function (d) {\n return d.r\n }\n let _interpolator = curveLinearClosed\n\n function _ribbon(pathData) {\n if (pathData.multiple) {\n const original_r = _rAccessor\n const parallelTotal = pathData.multiple.reduce((p, c) => p + c.weight, 0)\n\n _rAccessor = () => parallelTotal\n\n const totalPoints = buildRibbon(pathData.points)\n\n let currentPoints = totalPoints\n .filter((d) => d.direction === \"forward\")\n .reduce(dedupeRibbonPoints(), [])\n\n const allRibbons = []\n\n pathData.multiple.forEach((siblingPath, siblingI) => {\n _rAccessor = () => siblingPath.weight\n const currentRibbon = buildRibbon(currentPoints)\n allRibbons.push(currentRibbon)\n const nextSibling = pathData.multiple[siblingI + 1]\n\n if (nextSibling) {\n const currentLeftSide = currentRibbon\n .reverse()\n .filter((d) => d.direction === \"back\")\n .reduce(dedupeRibbonPoints(), [])\n\n _rAccessor = () => nextSibling.weight\n\n const leftHandInflatedRibbon = buildRibbon(currentLeftSide)\n currentPoints = leftHandInflatedRibbon\n .reverse()\n .filter((d) => d.direction === \"back\")\n .reduce(dedupeRibbonPoints(), [])\n }\n })\n\n _rAccessor = original_r\n return allRibbons.map((d) =>\n _lineConstructor.x(_xAccessor).y(_yAccessor).curve(_interpolator)(d)\n )\n }\n const bothPoints = buildRibbon(pathData).reduce(dedupeRibbonPoints(), [])\n\n return _lineConstructor.x(_xAccessor).y(_yAccessor).curve(_interpolator)(\n bothPoints\n )\n }\n\n _ribbon.x = function (_value) {\n if (!arguments.length) return _xAccessor\n\n _xAccessor = _value\n return _ribbon\n }\n\n _ribbon.y = function (_value) {\n if (!arguments.length) return _yAccessor\n\n _yAccessor = _value\n return _ribbon\n }\n\n _ribbon.r = function (_value) {\n if (!arguments.length) return _rAccessor\n\n _rAccessor = _value\n return _ribbon\n }\n\n _ribbon.interpolate = function (_value) {\n if (!arguments.length) return _interpolator\n\n _interpolator = _value\n return _ribbon\n }\n\n return _ribbon\n\n function offsetEdge(d) {\n const diffX = _yAccessor(d.target) - _yAccessor(d.source)\n const diffY = _xAccessor(d.target) - _xAccessor(d.source)\n\n const angle0 = Math.atan2(diffY, diffX) + Math.PI / 2\n const angle1 = angle0 + Math.PI * 0.5\n const angle2 = angle0 + Math.PI * 0.5\n\n const x1 = _xAccessor(d.source) + _rAccessor(d.source) * Math.cos(angle1)\n const y1 = _yAccessor(d.source) - _rAccessor(d.source) * Math.sin(angle1)\n const x2 = _xAccessor(d.target) + _rAccessor(d.target) * Math.cos(angle2)\n const y2 = _yAccessor(d.target) - _rAccessor(d.target) * Math.sin(angle2)\n\n return { x1: x1, y1: y1, x2: x2, y2: y2 }\n }\n\n function buildRibbon(points) {\n const bothCode = []\n let x = 0\n let transformedPoints = { x1: 0, y1: 0, x2: 0, y2: 0 }\n\n while (x < points.length) {\n if (x !== points.length - 1) {\n transformedPoints = offsetEdge({\n source: points[x],\n target: points[x + 1]\n })\n const p1 = {\n x: transformedPoints.x1,\n y: transformedPoints.y1,\n direction: \"forward\"\n }\n const p2 = {\n x: transformedPoints.x2,\n y: transformedPoints.y2,\n direction: \"forward\"\n }\n bothCode.push(p1, p2)\n if (bothCode.length > 3) {\n const l = bothCode.length - 1\n const lineA = { a: bothCode[l - 3], b: bothCode[l - 2] }\n const lineB = { a: bothCode[l - 1], b: bothCode[l] }\n const intersect = findIntersect(\n lineA.a.x,\n lineA.a.y,\n lineA.b.x,\n lineA.b.y,\n lineB.a.x,\n lineB.a.y,\n lineB.b.x,\n lineB.b.y\n )\n if (intersect.found === true) {\n lineA.b.x = intersect.x\n lineA.b.y = intersect.y\n lineB.a.x = intersect.x\n lineB.a.y = intersect.y\n }\n }\n }\n\n x++\n }\n x--\n //Back\n while (x >= 0) {\n if (x !== 0) {\n transformedPoints = offsetEdge({\n source: points[x],\n target: points[x - 1]\n })\n const p1 = {\n x: transformedPoints.x1,\n y: transformedPoints.y1,\n direction: \"back\"\n }\n const p2 = {\n x: transformedPoints.x2,\n y: transformedPoints.y2,\n direction: \"back\"\n }\n bothCode.push(p1, p2)\n if (bothCode.length > 3) {\n const l = bothCode.length - 1\n const lineA = { a: bothCode[l - 3], b: bothCode[l - 2] }\n const lineB = { a: bothCode[l - 1], b: bothCode[l] }\n const intersect = findIntersect(\n lineA.a.x,\n lineA.a.y,\n lineA.b.x,\n lineA.b.y,\n lineB.a.x,\n lineB.a.y,\n lineB.b.x,\n lineB.b.y\n )\n if (intersect.found === true) {\n lineA.b.x = intersect.x\n lineA.b.y = intersect.y\n lineB.a.x = intersect.x\n lineB.a.y = intersect.y\n }\n }\n }\n\n x--\n }\n\n return bothCode\n }\n\n function findIntersect(l1x1, l1y1, l1x2, l1y2, l2x1, l2y1, l2x2, l2y2) {\n let a, b\n\n const result = {\n x: null,\n y: null,\n found: false\n }\n\n const d = (l2y2 - l2y1) * (l1x2 - l1x1) - (l2x2 - l2x1) * (l1y2 - l1y1)\n if (d === 0) {\n return result\n }\n a = l1y1 - l2y1\n b = l1x1 - l2x1\n const n1 = (l2x2 - l2x1) * a - (l2y2 - l2y1) * b\n const n2 = (l1x2 - l1x1) * a - (l1y2 - l1y1) * b\n a = n1 / d\n b = n2 / d\n\n result.x = l1x1 + a * (l1x2 - l1x1)\n result.y = l1y1 + a * (l1y2 - l1y1)\n\n if (a > 0 && a < 1 && b > 0 && b < 1) {\n result.found = true\n }\n\n return result\n }\n}\n\nconst curvature = 0.5\n\nconst ribbonLink = (d) => {\n const diff =\n d.direction === \"down\"\n ? Math.abs(d.target.y - d.source.y)\n : Math.abs(d.source.x - d.target.x)\n // const halfWidth = d.width / 2\n const testCoordinates =\n d.direction === \"down\"\n ? [\n {\n x: d.y0,\n y: d.source.y\n },\n {\n x: d.y0,\n y: d.source.y + diff / 3\n },\n {\n x: d.y1,\n y: d.target.y - diff / 3\n },\n {\n x: d.y1,\n y: d.target.y\n }\n ]\n : [\n {\n x: d.source.x0,\n y: d.y0\n },\n {\n x: d.source.x0 + diff / 3,\n y: d.y0\n },\n {\n x: d.target.x0 - diff / 3,\n y: d.y1\n },\n {\n x: d.target.x0,\n y: d.y1\n }\n ]\n\n const linkGenerator = linearRibbon()\n\n linkGenerator.x((d) => d.x)\n linkGenerator.y((d) => d.y)\n linkGenerator.r(() => d.sankeyWidth / 2)\n\n return linkGenerator(testCoordinates)\n}\n\nexport const areaLink = (d) => {\n let x0, x1, x2, x3, y0, y1, xi, y2, y3\n\n if (d.direction === \"down\") {\n x0 = d.y0 - d.sankeyWidth / 2\n x1 = d.y1 - d.sankeyWidth / 2\n x2 = d.y1 + d.sankeyWidth / 2\n x3 = d.y0 + d.sankeyWidth / 2\n y0 = d.source.y1\n y1 = d.target.y0\n xi = interpolateNumber(y0, y1)\n y2 = xi(curvature)\n y3 = xi(1 - curvature)\n\n return `M${x0},${y0}C${x0},${y2} ${x1},${y3} ${x1},${y1}L${x2},${y1}C${x2},${y3} ${x3},${y2} ${x3},${y0}Z`\n }\n ;(x0 = d.source.x1), // eslint-disable-line no-sequences\n (x1 = d.target.x0),\n (xi = interpolateNumber(x0, x1)),\n (x2 = xi(curvature)),\n (x3 = xi(1 - curvature)),\n (y0 = d.y0 - d.sankeyWidth / 2),\n (y1 = d.y1 - d.sankeyWidth / 2),\n (y2 = d.y1 + d.sankeyWidth / 2),\n (y3 = d.y0 + d.sankeyWidth / 2)\n\n return `M${x0},${y0}C${x2},${y0} ${x3},${y1} ${x1},${y1}L${x1},${y2}C${x3},${y2} ${x2},${y3} ${x0},${y3}Z`\n}\n\nexport function circularAreaLink(link) {\n const linkGenerator = linearRibbon()\n\n linkGenerator.x((d) => d.x)\n linkGenerator.y((d) => d.y)\n linkGenerator.r(() => link.sankeyWidth / 2)\n\n const xyForLink =\n link.direction === \"down\"\n ? [\n {\n x: link.circularPathData.sourceY,\n y: link.circularPathData.sourceX\n },\n {\n x: link.circularPathData.sourceY,\n y: link.circularPathData.leftFullExtent\n },\n {\n x: link.circularPathData.verticalFullExtent,\n y: link.circularPathData.leftFullExtent\n },\n {\n x: link.circularPathData.verticalFullExtent,\n y: link.circularPathData.rightFullExtent\n },\n {\n x: link.circularPathData.targetY,\n y: link.circularPathData.rightFullExtent\n },\n {\n x: link.circularPathData.targetY,\n y: link.circularPathData.targetX\n }\n ]\n : [\n {\n x: link.circularPathData.sourceX,\n y: link.circularPathData.sourceY\n },\n {\n x: link.circularPathData.leftFullExtent,\n y: link.circularPathData.sourceY\n },\n {\n x: link.circularPathData.leftFullExtent,\n y: link.circularPathData.verticalFullExtent\n },\n {\n x: link.circularPathData.rightFullExtent,\n y: link.circularPathData.verticalFullExtent\n },\n {\n x: link.circularPathData.rightFullExtent,\n y: link.circularPathData.targetY\n },\n {\n x: link.circularPathData.targetX,\n y: link.circularPathData.targetY\n }\n ]\n\n return linkGenerator(xyForLink)\n}\n","import {\n sankeyCircular,\n sankeyLeft,\n sankeyRight,\n sankeyCenter,\n sankeyJustify\n} from \"d3-sankey-circular\"\nimport { interpolateNumber } from \"d3-interpolate\"\nimport { schemeCategory10 } from \"d3-scale-chromatic\"\nimport { areaLink, circularAreaLink } from \"../../geometry/sankeyLinks\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkRectNode,\n NetworkBezierEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\nconst sankeyOrientHash: Record<string, any> = {\n left: sankeyLeft,\n right: sankeyRight,\n center: sankeyCenter,\n justify: sankeyJustify\n}\n\n/**\n * Sankey layout plugin — uses d3-sankey-circular for layout computation.\n *\n * Produces rect scene nodes for Sankey node bars and bezier band scene edges\n * for the flow links. Supports both horizontal and vertical orientation.\n */\nexport const sankeyLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: true,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n const direction = config.orientation === \"vertical\" ? \"down\" : \"right\"\n const orient = config.nodeAlign || \"justify\"\n const nodeWidth = config.nodeWidth ?? 15\n const nodePaddingRatio = config.nodePaddingRatio ?? 0.05\n const iterations = config.iterations ?? 100\n\n // Clone for d3-sankey (it mutates)\n const sankeyNodes = nodes.map((n) => ({ ...n }))\n const sankeyEdges = edges.map((e) => ({\n ...e,\n source: typeof e.source === \"string\" ? e.source : e.source.id,\n target: typeof e.target === \"string\" ? e.target : e.target.id\n }))\n\n let frameExtent: [[number, number], [number, number]]\n if (direction === \"down\") {\n frameExtent = [[0, 0], [size[1], size[0]]]\n } else {\n frameExtent = [[0, 0], [size[0], size[1]]]\n }\n\n const sankey = sankeyCircular()\n .extent(frameExtent)\n .links(sankeyEdges)\n .nodes(sankeyNodes)\n .nodeAlign(sankeyOrientHash[orient] || sankeyJustify)\n .nodeId((d: any) => d.id)\n .nodeWidth(nodeWidth)\n .iterations(iterations)\n\n if (sankey.nodePaddingRatio) {\n sankey.nodePaddingRatio(nodePaddingRatio)\n }\n\n // Execute layout\n sankey()\n\n // Write computed positions back to original nodes\n for (const sn of sankeyNodes) {\n const original = nodes.find((n) => n.id === sn.id)\n if (original) {\n original.x0 = sn.x0\n original.x1 = sn.x1\n original.y0 = sn.y0\n original.y1 = sn.y1\n original.value = sn.value\n original.depth = sn.depth\n original.sourceLinks = sn.sourceLinks\n original.targetLinks = sn.targetLinks\n // Derived\n original.width = sn.x1 - sn.x0\n original.height = sn.y1 - sn.y0\n original.x = sn.x0 + (sn.x1 - sn.x0) / 2\n original.y = sn.y0 + (sn.y1 - sn.y0) / 2\n }\n }\n\n // Write computed positions back to original edges\n for (const se of sankeyEdges) {\n const src = se.source as any\n const tgt = se.target as any\n const sourceId = typeof src === \"object\" && src !== null ? src.id : String(src)\n const targetId = typeof tgt === \"object\" && tgt !== null ? tgt.id : String(tgt)\n\n // Find matching original edge\n const original = edges.find((e) => {\n const eSrc = typeof e.source === \"string\" ? e.source : e.source.id\n const eTgt = typeof e.target === \"string\" ? e.target : e.target.id\n return eSrc === sourceId && eTgt === targetId\n })\n\n if (original) {\n original.y0 = (se as any).y0\n original.y1 = (se as any).y1\n original.sankeyWidth = (se as any).width ?? 0\n original.circular = !!(se as any).circular\n original.circularPathData = (se as any).circularPathData\n original.direction = direction\n\n // Resolve source/target to node references\n const srcNode = nodes.find((n) => n.id === sourceId)\n const tgtNode = nodes.find((n) => n.id === targetId)\n if (srcNode) original.source = srcNode\n if (tgtNode) original.target = tgtNode\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const direction = config.orientation === \"vertical\" ? \"down\" : \"right\"\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const edgeOpacity = config.edgeOpacity ?? 0.5\n const edgeColorBy = config.edgeColorBy || \"source\"\n\n // Auto-color palette for when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : (schemeCategory10 as readonly string[])\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const sceneNodes: NetworkRectNode[] = []\n const sceneEdges: NetworkBezierEdge[] = []\n const labels: NetworkLabel[] = []\n\n // Build rect nodes\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill: userStyle.fill || nodeColorMap.get(node.id) || \"#4d430c\",\n stroke: userStyle.stroke,\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"rect\",\n x: node.x0,\n y: node.y0,\n w,\n h,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // Build bezier edge bands\n // Sort by width descending so narrow bands render on top\n const sortedEdges = [...edges].sort(\n (a, b) => (b.sankeyWidth || 0) - (a.sankeyWidth || 0)\n )\n\n for (const edge of sortedEdges) {\n if (!edge.sankeyWidth || edge.sankeyWidth <= 0) continue\n\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n if (!sourceNode || !targetNode) continue\n\n // Generate SVG path string using existing helpers\n let pathD: string\n if (edge.circular && edge.circularPathData) {\n pathD = circularAreaLink(edge)\n } else {\n pathD = areaLink(edge)\n }\n\n // Resolve edge fill — use edgeStyle if provided, otherwise\n // inherit from source or target node color\n let fill = \"#999\"\n if (edgeStyleFn) {\n const userStyle = edgeStyleFn(edge)\n fill = userStyle.fill || fill\n } else if (edgeColorBy === \"target\" && targetNode) {\n fill = nodeColorMap.get(targetNode.id) || fill\n } else if (sourceNode) {\n fill = nodeColorMap.get(sourceNode.id) || fill\n }\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n fill,\n fillOpacity: userStyle.fillOpacity ?? edgeOpacity,\n stroke: userStyle.stroke || \"none\",\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneEdges.push({\n type: \"bezier\",\n pathD,\n bezierCache: edge.bezier,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n let x: number\n let y: number\n let anchor: \"start\" | \"end\"\n\n if (direction === \"down\") {\n x = node.x0 + w / 2\n y = node.y1 + 14\n anchor = \"middle\" as any\n } else {\n // Horizontal: label to the right or left depending on position\n const midX = size[0] / 2\n if (node.x0 + w / 2 < midX) {\n x = node.x0 - 6\n anchor = \"end\"\n } else {\n x = node.x1 + 6\n anchor = \"start\"\n }\n y = node.y0 + h / 2\n }\n\n labels.push({\n x,\n y,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n","import {\n forceSimulation,\n forceX,\n forceY,\n forceLink,\n forceManyBody\n} from \"d3-force\"\nimport { scaleLinear } from \"d3-scale\"\nimport { min, max } from \"d3-array\"\nimport { schemeCategory10 } from \"d3-scale-chromatic\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkLineEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\n/**\n * Force-directed layout plugin — uses d3-force for physics-based node positioning.\n *\n * Produces circle scene nodes and line scene edges. Runs the force simulation\n * synchronously for a configurable number of iterations, using phyllotaxis\n * spiral for deterministic initial positions.\n */\nexport const forceLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n // Adaptive iteration count: reduce iterations for large networks\n const nodeCount = nodes.length\n const adaptiveIterations = Math.max(\n 50,\n Math.min(300, Math.floor(300 - (nodeCount - 30) * 2))\n )\n\n const iterations = config.iterations ?? adaptiveIterations\n const forceStrength = config.forceStrength ?? 0.1\n\n // Set deterministic initial positions using phyllotaxis spiral.\n // d3-force uses Math.random() for unpositioned nodes which produces\n // different layouts on every render. A phyllotaxis spiral gives\n // evenly-distributed starting positions based on index alone.\n // RealtimeNode initialises x/y to 0, so we treat (0,0) as \"unpositioned\".\n const cx = size[0] / 2\n const cy = size[1] / 2\n const goldenAngle = Math.PI * (3 - Math.sqrt(5))\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if (node.x == null || node.y == null || (node.x === 0 && node.y === 0)) {\n const r = Math.sqrt(i + 0.5) * 10\n const theta = i * goldenAngle\n node.x = cx + r * Math.cos(theta)\n node.y = cy + r * Math.sin(theta)\n }\n }\n\n // Build node size accessor for charge strength\n const nodeSizeFn = resolveNodeSizeFn(\n config.nodeSize,\n config.nodeSizeRange,\n nodes\n )\n const nodeRadius = (d: any) => nodeSizeFn(d)\n\n // Configure link force\n const linkForce = forceLink()\n .strength((d: any) =>\n Math.min(2.5, d.weight ? d.weight * forceStrength : forceStrength)\n )\n .id((d: any) => d.id)\n\n // Build simulation\n const forceMod = size[1] / size[0]\n const simulation = forceSimulation()\n .force(\n \"charge\",\n forceManyBody().strength((d: any) => -25 * nodeRadius(d))\n )\n .force(\"x\", forceX(size[0] / 2).strength(forceMod * 0.1))\n .force(\"y\", forceY(size[1] / 2).strength(0.1))\n\n simulation.nodes(nodes as any)\n\n if (edges.length > 0) {\n // Resolve edge source/target to id strings for d3-force linking\n const linkData = edges.map((e) => ({\n ...e,\n source: typeof e.source === \"string\" ? e.source : e.source.id,\n target: typeof e.target === \"string\" ? e.target : e.target.id\n }))\n\n simulation.force(\"link\", linkForce)\n ;(simulation.force(\"link\") as any).links(linkData)\n }\n\n // Reset alpha if too cold\n if (simulation.alpha() < 0.1) {\n simulation.alpha(1)\n }\n\n simulation.stop()\n\n // Run synchronously\n for (let i = 0; i < iterations; ++i) {\n simulation.tick()\n }\n\n // Resolve edge source/target to node object references so that\n // HOC style functions can access d.source.data for color lookups.\n for (const edge of edges) {\n if (typeof edge.source === \"string\") {\n const n = nodes.find((nd) => nd.id === edge.source)\n if (n) edge.source = n\n }\n if (typeof edge.target === \"string\") {\n const n = nodes.find((nd) => nd.id === (edge.target as any))\n if (n) edge.target = n\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const nodeSizeFn = resolveNodeSizeFn(\n config.nodeSize,\n config.nodeSizeRange,\n nodes\n )\n\n // Auto-color palette for when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : (schemeCategory10 as readonly string[])\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const sceneNodes: NetworkCircleNode[] = []\n const sceneEdges: NetworkLineEdge[] = []\n const labels: NetworkLabel[] = []\n\n // Build circle nodes\n for (const node of nodes) {\n if (node.x == null || node.y == null) continue\n\n const r = nodeSizeFn(node)\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill: userStyle.fill || nodeColorMap.get(node.id) || \"#007bff\",\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 2,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: node.x,\n cy: node.y,\n r,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // Build line edges\n for (const edge of edges) {\n const sourceNode =\n typeof edge.source === \"object\" ? edge.source : findNode(nodes, edge.source)\n const targetNode =\n typeof edge.target === \"object\" ? edge.target : findNode(nodes, edge.target)\n if (!sourceNode || !targetNode) continue\n if (sourceNode.x == null || sourceNode.y == null) continue\n if (targetNode.x == null || targetNode.y == null) continue\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n stroke: userStyle.stroke || \"#999\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity ?? 0.6\n }\n\n sceneEdges.push({\n type: \"line\",\n x1: sourceNode.x,\n y1: sourceNode.y,\n x2: targetNode.x,\n y2: targetNode.y,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n if (node.x == null || node.y == null) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n const r = nodeSizeFn(node)\n\n labels.push({\n x: node.x,\n y: node.y - r - 4,\n text: String(text),\n anchor: \"middle\",\n baseline: \"auto\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction findNode(\n nodes: RealtimeNode[],\n id: string\n): RealtimeNode | undefined {\n return nodes.find((n) => n.id === id)\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n\n/**\n * Build a function that returns a node radius. If `nodeSize` is a number,\n * use it directly. If it is a string accessor, look up `node.data[nodeSize]`\n * and scale the result to `nodeSizeRange`. If it is a function, call it.\n * Falls back to a default radius of 8.\n */\nfunction resolveNodeSizeFn(\n nodeSize: number | string | ((d: any) => number) | undefined,\n nodeSizeRange: [number, number] | undefined,\n allNodes: RealtimeNode[]\n): (node: RealtimeNode) => number {\n if (nodeSize == null) {\n return () => 8\n }\n\n if (typeof nodeSize === \"number\") {\n return () => nodeSize\n }\n\n if (typeof nodeSize === \"function\") {\n return (node: RealtimeNode) => nodeSize(node) || 8\n }\n\n // String accessor: look up value on node.data and scale to range\n const range = nodeSizeRange || [5, 20]\n\n // Extract all numeric values to compute domain\n const values = allNodes\n .map((n) => n.data?.[nodeSize])\n .filter((v): v is number => v != null && typeof v === \"number\")\n\n if (values.length === 0) {\n return () => range[0]\n }\n\n const domainMin = min(values) ?? 0\n const domainMax = max(values) ?? 1\n\n // If all values are the same, return the midpoint of the range\n if (domainMin === domainMax) {\n return () => (range[0] + range[1]) / 2\n }\n\n const scale = scaleLinear()\n .domain([domainMin, domainMax])\n .range(range)\n .clamp(true)\n\n return (node: RealtimeNode) => {\n const raw = node.data?.[nodeSize]\n if (raw == null || typeof raw !== \"number\") return range[0]\n return scale(raw)\n }\n}\n","import { chord, ribbon } from \"d3-chord\"\nimport { arc } from \"d3-shape\"\nimport { schemeCategory10, schemeTableau10 } from \"d3-scale-chromatic\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkArcNode,\n NetworkRibbonEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\nconst DEFAULT_PALETTE = schemeCategory10 as readonly string[]\n\n/**\n * Chord layout plugin — uses d3-chord for layout computation.\n *\n * Produces arc scene nodes for chord group arcs and ribbon scene edges\n * for the chord ribbons. Labels are positioned outside arcs.\n */\nexport const chordLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n const { padAngle = 0.01, groupWidth = 20, sortGroups } = config\n\n const radius = Math.min(size[0], size[1]) / 2\n const innerRadius = radius - groupWidth\n const cx = size[0] / 2\n const cy = size[1] / 2\n\n const valueAccessorFn = resolveValueAccessor(config.valueAccessor)\n\n // ── Build node index map ──────────────────────────────────────────\n const nodeIndex = new Map<string, number>()\n for (let i = 0; i < nodes.length; i++) {\n nodeIndex.set(nodes[i].id, i)\n }\n\n // ── Build NxN matrix from edges ───────────────────────────────────\n const n = nodes.length\n const matrix: number[][] = Array.from({ length: n }, () =>\n Array.from({ length: n }, () => 0)\n )\n\n for (const edge of edges) {\n const sourceId =\n typeof edge.source === \"string\" ? edge.source : edge.source.id\n const targetId =\n typeof edge.target === \"string\" ? edge.target : edge.target.id\n\n const si = nodeIndex.get(sourceId)\n const ti = nodeIndex.get(targetId)\n if (si === undefined || ti === undefined) continue\n\n const value = valueAccessorFn(edge)\n matrix[si][ti] = value\n }\n\n // ── Run chord generator ───────────────────────────────────────────\n const chordGenerator = chord().padAngle(padAngle)\n if (sortGroups) {\n chordGenerator.sortGroups(sortGroups)\n }\n\n const chords = chordGenerator(matrix)\n const groups = chords.groups\n\n // ── Arc generator for centroid calculation ────────────────────────\n const arcGenerator = arc<any>()\n .innerRadius(innerRadius)\n .outerRadius(radius)\n\n // ── Set node positions from arc centroids ────────────────────────\n for (const group of groups) {\n const node = nodes[group.index]\n const centroid = arcGenerator.centroid(group)\n\n node.x = centroid[0] + cx\n node.y = centroid[1] + cy\n\n // Stash arc data on the node for buildScene\n ;(node as any).arcData = {\n startAngle: group.startAngle,\n endAngle: group.endAngle\n }\n }\n\n // ── Resolve edge source/target to node references ─────────────────\n // The HOC edge style functions need d.source/d.target as node objects\n // (not string IDs) so they can look up colors via d.source.data.\n for (const edge of edges) {\n const srcId = typeof edge.source === \"string\" ? edge.source : edge.source.id\n const tgtId = typeof edge.target === \"string\" ? edge.target : edge.target.id\n const srcNode = nodes.find((n) => n.id === srcId)\n const tgtNode = nodes.find((n) => n.id === tgtId)\n if (srcNode) edge.source = srcNode\n if (tgtNode) edge.target = tgtNode\n }\n\n // ── Stash chord data on edges for buildScene ─────────────────────\n for (const generatedChord of chords) {\n const sourceId = nodes[generatedChord.source.index].id\n const targetId = nodes[generatedChord.target.index].id\n\n // d3-chord always emits source.index < target.index, which may\n // not match the original edge direction. Try both key orders.\n const matchedEdge = edges.find((e) => {\n const eSrc =\n typeof e.source === \"string\" ? e.source : e.source.id\n const eTgt =\n typeof e.target === \"string\" ? e.target : e.target.id\n return (\n (eSrc === sourceId && eTgt === targetId) ||\n (eSrc === targetId && eTgt === sourceId)\n )\n })\n\n if (matchedEdge) {\n ;(matchedEdge as any).chordData = generatedChord\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const { groupWidth = 20, edgeOpacity = 0.5 } = config\n\n const radius = Math.min(size[0], size[1]) / 2\n const innerRadius = radius - groupWidth\n const cx = size[0] / 2\n const cy = size[1] / 2\n\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const edgeColorBy = config.edgeColorBy || \"source\"\n\n // Auto-color palette: used when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : DEFAULT_PALETTE\n // Build a node-id → color map for consistent coloring\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const ribbonGenerator = ribbon<any, any>().radius(innerRadius)\n\n const sceneNodes: NetworkArcNode[] = []\n const sceneEdges: NetworkRibbonEdge[] = []\n const labels: NetworkLabel[] = []\n\n // ── Build arc nodes ──────────────────────────────────────────────\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n const arcData = (node as any).arcData\n if (!arcData) continue\n\n let fill: string\n if (nodeStyleFn) {\n const userStyle = nodeStyleFn(node)\n fill = userStyle.fill || nodeColorMap.get(node.id) || palette[i % palette.length]\n } else {\n fill = nodeColorMap.get(node.id) || palette[i % palette.length]\n }\n\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"black\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n // d3-chord angles start at 12 o'clock; canvas arc() starts at 3 o'clock\n // Offset by -PI/2 to align arcs with labels and ribbons\n sceneNodes.push({\n type: \"arc\",\n cx,\n cy,\n innerR: innerRadius,\n outerR: radius,\n startAngle: arcData.startAngle - Math.PI / 2,\n endAngle: arcData.endAngle - Math.PI / 2,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // ── Build ribbon edges ───────────────────────────────────────────\n // d3-chord ribbon paths are centered at (0,0). Offset every\n // coordinate by (cx, cy) so they align with the arc nodes.\n for (const edge of edges) {\n const chordData = (edge as any).chordData\n if (!chordData) continue\n\n // Offset chord angles by -PI/2 to match arc offset (12 o'clock → 3 o'clock)\n const offsetChord = {\n source: { ...chordData.source, startAngle: chordData.source.startAngle - Math.PI / 2, endAngle: chordData.source.endAngle - Math.PI / 2 },\n target: { ...chordData.target, startAngle: chordData.target.startAngle - Math.PI / 2, endAngle: chordData.target.endAngle - Math.PI / 2 }\n }\n const rawPath = ribbonGenerator(offsetChord)\n if (!rawPath) continue\n\n const pathD = translateSvgPath(rawPath, cx, cy)\n\n // Resolve edge fill — use edgeStyle if provided, otherwise\n // inherit from source or target node color\n let fill = \"#999\"\n if (edgeStyleFn) {\n const userStyle = edgeStyleFn(edge)\n fill = userStyle.fill || fill\n } else {\n // Auto-color by source or target node\n const srcNode = typeof edge.source === \"object\" ? edge.source : null\n const tgtNode = typeof edge.target === \"object\" ? edge.target : null\n if (edgeColorBy === \"target\" && tgtNode) {\n fill = nodeColorMap.get(tgtNode.id) || fill\n } else if (srcNode) {\n fill = nodeColorMap.get(srcNode.id) || fill\n }\n }\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n fill,\n fillOpacity: userStyle.fillOpacity ?? edgeOpacity,\n stroke: userStyle.stroke || \"none\",\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneEdges.push({\n type: \"ribbon\",\n pathD,\n style,\n datum: edge\n })\n }\n\n // ── Build labels ─────────────────────────────────────────────────\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n const labelRadius = radius + 12\n\n for (const node of nodes) {\n const arcData = (node as any).arcData\n if (!arcData) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n const midAngle =\n (arcData.startAngle + arcData.endAngle) / 2\n // Angles in d3-chord start from 12 o'clock (top), going clockwise.\n // Convert to standard x/y: subtract PI/2.\n const angle = midAngle - Math.PI / 2\n const lx = cx + Math.cos(angle) * labelRadius\n const ly = cy + Math.sin(angle) * labelRadius\n\n // Anchor depends on which side of the circle the label is on\n const anchor: \"start\" | \"middle\" | \"end\" =\n midAngle > Math.PI ? \"end\" : \"start\"\n\n labels.push({\n x: lx,\n y: ly,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n\nfunction resolveValueAccessor(\n valueAccessor: string | ((d: any) => number) | undefined\n): (d: any) => number {\n if (!valueAccessor) return (d: any) => d.value ?? 1\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: any) => d[valueAccessor] ?? 1\n}\n\n/**\n * Translate all absolute coordinates in an SVG path string by (dx, dy).\n *\n * d3-chord ribbon() produces paths using only M, C, Q, L, A, and Z commands\n * with absolute coordinates. We parse the numeric values and offset the\n * positional ones. For arc (A) commands the positional values are the last\n * two numbers in each 7-parameter group.\n */\nfunction translateSvgPath(d: string, dx: number, dy: number): string {\n // Tokenize: split into command letters and number tokens\n const tokens = d.match(/[a-zA-Z]|[-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g)\n if (!tokens) return d\n\n const out: string[] = []\n let i = 0\n\n while (i < tokens.length) {\n const cmd = tokens[i]\n\n if (cmd === \"M\" || cmd === \"L\") {\n out.push(cmd)\n i++\n // Pairs of (x, y) follow\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n } else if (cmd === \"C\") {\n out.push(cmd)\n i++\n // Triplets of (x,y) control points\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n for (let p = 0; p < 3 && i < tokens.length; p++) {\n if (isNaN(Number(tokens[i]))) break\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n }\n } else if (cmd === \"Q\") {\n out.push(cmd)\n i++\n // Pairs of (x,y) — 2 pairs per Q\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n for (let p = 0; p < 2 && i < tokens.length; p++) {\n if (isNaN(Number(tokens[i]))) break\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n }\n } else if (cmd === \"A\") {\n out.push(cmd)\n i++\n // Arc: rx ry x-rotation large-arc-flag sweep-flag x y\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n // rx, ry — no offset\n out.push(tokens[i++])\n if (i < tokens.length) out.push(tokens[i++]) // ry\n if (i < tokens.length) out.push(tokens[i++]) // x-rotation\n if (i < tokens.length) out.push(tokens[i++]) // large-arc-flag\n if (i < tokens.length) out.push(tokens[i++]) // sweep-flag\n // x, y — offset\n if (i < tokens.length) {\n out.push(String(Number(tokens[i]) + dx))\n i++\n }\n if (i < tokens.length) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n } else if (cmd === \"Z\" || cmd === \"z\") {\n out.push(cmd)\n i++\n } else {\n // Unknown or lowercase relative command — pass through\n out.push(tokens[i])\n i++\n }\n }\n\n return out.join(\" \")\n}\n","import {\n hierarchy as d3Hierarchy,\n tree as d3Tree,\n cluster as d3Cluster,\n treemap as d3Treemap,\n pack as d3Pack,\n partition as d3Partition,\n treemapBinary\n} from \"d3-hierarchy\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkRectNode,\n NetworkCurvedEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\ntype HierarchyLayoutType = \"tree\" | \"cluster\" | \"treemap\" | \"circlepack\" | \"partition\"\n\n/**\n * Hierarchy layout plugin — handles tree, cluster, treemap, circlepack, and partition layouts.\n *\n * Uses d3-hierarchy for all layout computations. This plugin is `hierarchical: true`,\n * meaning the input data is a single root node object rather than flat nodes+edges arrays.\n *\n * The hierarchy root is passed via `(config as any).__hierarchyRoot`, set by the store\n * before calling computeLayout. The plugin builds the d3 hierarchy internally, runs the\n * appropriate layout algorithm, and populates the nodes/edges arrays.\n *\n * Scene output varies by layout type:\n * - tree/cluster: NetworkCircleNode[] + NetworkCurvedEdge[] (cubic bezier parent-child links)\n * - treemap/partition: NetworkRectNode[] (space-filling rectangles, no edges)\n * - circlepack: NetworkCircleNode[] (nested circles, no edges)\n */\nexport const hierarchyLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: true,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n const hierarchyRoot = (config as any).__hierarchyRoot\n if (!hierarchyRoot) return\n\n const layoutType = config.chartType as HierarchyLayoutType\n const childrenAccessor = resolveChildrenAccessor(config.childrenAccessor)\n const hierarchySum = config.hierarchySum || ((d: any) => d.value ?? 0)\n\n // Build d3 hierarchy from the root data\n const root = d3Hierarchy(hierarchyRoot, childrenAccessor)\n root.sum(hierarchySum)\n root.sort((a, b) => (b.value ?? 0) - (a.value ?? 0))\n\n const [width, height] = size\n\n // Run the appropriate layout algorithm\n switch (layoutType) {\n case \"tree\":\n computeTreeLayout(root, config, width, height)\n break\n case \"cluster\":\n computeClusterLayout(root, config, width, height)\n break\n case \"treemap\":\n computeTreemapLayout(root, config, width, height)\n break\n case \"circlepack\":\n computeCirclepackLayout(root, config, width, height)\n break\n case \"partition\":\n computePartitionLayout(root, config, width, height)\n break\n }\n\n // Flatten the hierarchy into nodes and edges arrays\n const descendants = root.descendants()\n\n // Clear and repopulate nodes array\n nodes.length = 0\n edges.length = 0\n\n const nodeMap = new Map<any, RealtimeNode>()\n\n for (let i = 0; i < descendants.length; i++) {\n const d = descendants[i]\n const id = resolveNodeId(d, config, i)\n\n const node: RealtimeNode = {\n id,\n x: 0,\n y: 0,\n x0: 0,\n x1: 0,\n y0: 0,\n y1: 0,\n width: 0,\n height: 0,\n value: d.value ?? 0,\n depth: d.depth,\n data: d.data,\n createdByFrame: true\n }\n\n // Set positions based on layout type\n if (layoutType === \"tree\" || layoutType === \"cluster\") {\n setTreePositions(node, d, config)\n } else if (layoutType === \"treemap\" || layoutType === \"partition\") {\n setRectPositions(node, d)\n } else if (layoutType === \"circlepack\") {\n setCirclePositions(node, d)\n }\n\n // Store the d3 hierarchy node reference for edge building\n ;(node as any).__hierarchyNode = d\n\n nodes.push(node)\n nodeMap.set(d, node)\n }\n\n // Build parent-child edges (for tree/cluster; treemap/circlepack/partition have no edges)\n if (layoutType === \"tree\" || layoutType === \"cluster\") {\n for (const d of descendants) {\n if (d.parent) {\n const sourceNode = nodeMap.get(d.parent)\n const targetNode = nodeMap.get(d)\n if (sourceNode && targetNode) {\n edges.push({\n source: sourceNode,\n target: targetNode,\n value: 1,\n y0: 0,\n y1: 0,\n sankeyWidth: 0,\n data: { depth: d.depth }\n })\n }\n }\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const layoutType = config.chartType as HierarchyLayoutType\n const nodeStyleFn = config.nodeStyle || ((): Record<string, any> => ({}))\n const edgeStyleFn = config.edgeStyle || ((): Record<string, any> => ({}))\n\n switch (layoutType) {\n case \"tree\":\n case \"cluster\":\n return buildTreeScene(nodes, edges, config, size, nodeStyleFn, edgeStyleFn)\n case \"treemap\":\n case \"partition\":\n return buildRectScene(nodes, config, size, nodeStyleFn)\n case \"circlepack\":\n return buildCircleScene(nodes, config, size, nodeStyleFn)\n default:\n return { sceneNodes: [], sceneEdges: [], labels: [] }\n }\n }\n}\n\n// ── Layout computation functions ──────────────────────────────────────────\n\nfunction computeTreeLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n const layout = d3Tree<any>()\n\n if (orientation === \"horizontal\") {\n layout.size([height, width])\n } else if (orientation === \"radial\") {\n // For radial layout, use a full circle mapped to [0, 2*PI] x [0, radius]\n const radius = Math.min(width, height) / 2\n layout.size([2 * Math.PI, radius * 0.8])\n } else {\n layout.size([width, height])\n }\n\n layout(root)\n}\n\nfunction computeClusterLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n const layout = d3Cluster<any>()\n\n if (orientation === \"horizontal\") {\n layout.size([height, width])\n } else if (orientation === \"radial\") {\n const radius = Math.min(width, height) / 2\n layout.size([2 * Math.PI, radius * 0.8])\n } else {\n layout.size([width, height])\n }\n\n layout(root)\n}\n\nfunction computeTreemapLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const padding = config.padding ?? 4\n const paddingTop = config.paddingTop ?? 0\n\n const layout = d3Treemap<any>()\n .size([width, height])\n .tile(treemapBinary)\n .padding(padding)\n\n if (paddingTop > 0) {\n layout.paddingTop(paddingTop)\n }\n\n layout(root)\n}\n\nfunction computeCirclepackLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const padding = config.padding ?? 4\n\n const layout = d3Pack<any>()\n .size([width, height])\n .padding(padding)\n\n layout(root)\n}\n\nfunction computePartitionLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const layout = d3Partition<any>()\n .size([width, height])\n .padding(config.padding ?? 1)\n\n layout(root)\n}\n\n// ── Position setting helpers ──────────────────────────────────────────────\n\nfunction setTreePositions(\n node: RealtimeNode,\n d: any,\n config: NetworkPipelineConfig\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n\n if (orientation === \"radial\") {\n // Convert polar coordinates to cartesian\n const angle = d.x as number\n const radius = d.y as number\n // Compute Cartesian coordinates — the layout is already sized\n // relative to the center of [width, height].\n node.x = radius * Math.cos(angle - Math.PI / 2)\n node.y = radius * Math.sin(angle - Math.PI / 2)\n } else if (orientation === \"horizontal\") {\n // d3 tree with size([height, width]): d.x = vertical pos, d.y = horizontal pos\n node.x = d.y as number\n node.y = d.x as number\n } else {\n // Vertical: d.x = horizontal, d.y = vertical\n node.x = d.x as number\n node.y = d.y as number\n }\n\n // Set bounding box around the point (used by hit testing and transitions)\n const r = 5\n node.x0 = node.x - r\n node.x1 = node.x + r\n node.y0 = node.y - r\n node.y1 = node.y + r\n node.width = r * 2\n node.height = r * 2\n}\n\nfunction setRectPositions(\n node: RealtimeNode,\n d: any\n): void {\n node.x0 = d.x0\n node.x1 = d.x1\n node.y0 = d.y0\n node.y1 = d.y1\n node.x = (d.x0 + d.x1) / 2\n node.y = (d.y0 + d.y1) / 2\n node.width = d.x1 - d.x0\n node.height = d.y1 - d.y0\n}\n\nfunction setCirclePositions(\n node: RealtimeNode,\n d: any\n): void {\n const r = d.r ?? 0\n node.x = d.x\n node.y = d.y\n // Set bounding box to enclosing square of the circle\n node.x0 = d.x - r\n node.x1 = d.x + r\n node.y0 = d.y - r\n node.y1 = d.y + r\n node.width = r * 2\n node.height = r * 2\n // Store radius on the node for buildScene\n ;(node as any).__radius = r\n}\n\n// ── Scene building functions ──────────────────────────────────────────────\n\nfunction buildTreeScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>,\n edgeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkCircleNode[] = []\n const sceneEdges: NetworkCurvedEdge[] = []\n const labels: NetworkLabel[] = []\n\n const orientation = config.treeOrientation || \"vertical\"\n const isRadial = orientation === \"radial\"\n const cx = size[0] / 2\n const cy = size[1] / 2\n const defaultNodeSize = resolveDefaultNodeSize(config.nodeSize)\n\n // Build circle nodes\n for (const node of nodes) {\n let nx = node.x\n let ny = node.y\n\n // For radial layout, offset to center of chart\n if (isRadial) {\n nx += cx\n ny += cy\n }\n\n const userStyle = nodeStyleFn(node)\n const style: Style = {\n fill: userStyle.fill || \"#4d430c\",\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: nx,\n cy: ny,\n r: defaultNodeSize,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build curved edges between parent-child pairs\n const edgeOpacity = config.edgeOpacity ?? 0.5\n for (const edge of edges) {\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n if (!sourceNode || !targetNode) continue\n\n let sx = sourceNode.x\n let sy = sourceNode.y\n let tx = targetNode.x\n let ty = targetNode.y\n\n if (isRadial) {\n sx += cx\n sy += cy\n tx += cx\n ty += cy\n }\n\n // Generate cubic bezier path\n const pathD = generateTreeEdgePath(sx, sy, tx, ty, orientation)\n\n const userStyle = edgeStyleFn(edge)\n const style: Style = {\n fill: \"none\",\n stroke: userStyle.stroke || \"#999\",\n strokeWidth: userStyle.strokeWidth ?? 1.5,\n opacity: userStyle.opacity ?? edgeOpacity\n }\n\n sceneEdges.push({\n type: \"curved\",\n pathD,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n let nx = node.x\n let ny = node.y\n\n if (isRadial) {\n nx += cx\n ny += cy\n }\n\n // Position label based on orientation\n let x: number\n let y: number\n let anchor: \"start\" | \"middle\" | \"end\"\n\n if (isRadial) {\n // Radial: position label outward from center\n const dx = nx - cx\n const dy = ny - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > 0) {\n x = nx + (dx / dist) * 10\n y = ny + (dy / dist) * 10\n anchor = dx >= 0 ? \"start\" : \"end\"\n } else {\n x = nx\n y = ny - 12\n anchor = \"middle\"\n }\n } else if (orientation === \"horizontal\") {\n // Horizontal tree: label to the right of leaf nodes, left of root\n const isLeaf = !node.data?.children || node.data.children.length === 0\n if (isLeaf) {\n x = nx + defaultNodeSize + 6\n anchor = \"start\"\n } else {\n x = nx - defaultNodeSize - 6\n anchor = \"end\"\n }\n y = ny\n } else {\n // Vertical tree: label below\n x = nx\n y = ny + defaultNodeSize + 14\n anchor = \"middle\"\n }\n\n labels.push({\n x,\n y,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n}\n\nfunction buildRectScene(\n nodes: RealtimeNode[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkRectNode[] = []\n const labels: NetworkLabel[] = []\n\n const depthPalette = [\n \"#e8d5b7\", \"#b8d4e3\", \"#d4e3b8\", \"#e3c4d4\",\n \"#d4d4e3\", \"#e3d4b8\", \"#b8e3d4\", \"#e3b8b8\"\n ]\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const userStyle = nodeStyleFn(node)\n let fill = userStyle.fill || \"#4d430c\"\n\n // Color by depth if enabled\n if (config.colorByDepth && node.depth !== undefined) {\n fill = depthPalette[node.depth % depthPalette.length]\n }\n\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"rect\",\n x: node.x0,\n y: node.y0,\n w,\n h,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n // Only label leaf nodes by default (for treemap), or all for partition\n const isLeaf = !(node.data?.children && node.data.children.length > 0)\n const isPartition = config.chartType === \"partition\"\n\n if (!isLeaf && !isPartition) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n // Skip labels for very small cells\n if (w < 30 || h < 16) continue\n\n labels.push({\n x: node.x0 + w / 2,\n y: node.y0 + h / 2,\n text: String(text),\n anchor: \"middle\",\n baseline: \"middle\",\n fontSize: Math.min(11, Math.max(8, Math.min(w, h) / 6))\n })\n }\n }\n\n return { sceneNodes, sceneEdges: [], labels }\n}\n\nfunction buildCircleScene(\n nodes: RealtimeNode[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkCircleNode[] = []\n const labels: NetworkLabel[] = []\n const circleOpacity = 0.7\n\n const depthPalette = [\n \"#e8d5b7\", \"#b8d4e3\", \"#d4e3b8\", \"#e3c4d4\",\n \"#d4d4e3\", \"#e3d4b8\", \"#b8e3d4\", \"#e3b8b8\"\n ]\n\n for (const node of nodes) {\n const r = (node as any).__radius ?? 5\n if (r <= 0) continue\n\n const userStyle = nodeStyleFn(node)\n let fill = userStyle.fill || \"#4d430c\"\n\n // Color by depth if enabled\n if (config.colorByDepth && node.depth !== undefined) {\n fill = depthPalette[node.depth % depthPalette.length]\n }\n\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity ?? circleOpacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: node.x,\n cy: node.y,\n r,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const r = (node as any).__radius ?? 5\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n // Only label nodes with sufficient radius\n if (r < 15) continue\n\n // Leaf nodes: centered label. Parent nodes: top-center label.\n const isLeaf = !(node.data?.children && node.data.children.length > 0)\n\n labels.push({\n x: node.x,\n y: isLeaf ? node.y : node.y - r + 14,\n text: String(text),\n anchor: \"middle\",\n baseline: isLeaf ? \"middle\" : \"hanging\",\n fontSize: Math.min(11, Math.max(8, r / 3)),\n fill: isLeaf ? undefined : \"#000\",\n stroke: isLeaf ? undefined : \"#fff\",\n strokeWidth: isLeaf ? undefined : 3,\n paintOrder: isLeaf ? undefined : \"stroke\"\n })\n }\n }\n\n return { sceneNodes, sceneEdges: [], labels }\n}\n\n// ── Edge path generation ──────────────────────────────────────────────────\n\n/**\n * Generate a cubic bezier path string for a tree/cluster edge.\n * Uses different curve strategies based on tree orientation.\n */\nfunction generateTreeEdgePath(\n sx: number,\n sy: number,\n tx: number,\n ty: number,\n orientation: string\n): string {\n if (orientation === \"horizontal\") {\n // Horizontal: parent on left, child on right\n const midX = (sx + tx) / 2\n return `M ${sx},${sy} C ${midX},${sy} ${midX},${ty} ${tx},${ty}`\n } else if (orientation === \"radial\") {\n // Radial: use a simple quadratic curve through the midpoint\n const midX = (sx + tx) / 2\n const midY = (sy + ty) / 2\n return `M ${sx},${sy} Q ${midX},${sy} ${midX},${midY} T ${tx},${ty}`\n } else {\n // Vertical (default): parent on top, child on bottom\n const midY = (sy + ty) / 2\n return `M ${sx},${sy} C ${sx},${midY} ${tx},${midY} ${tx},${ty}`\n }\n}\n\n// ── Utility helpers ───────────────────────────────────────────────────────\n\nfunction resolveChildrenAccessor(\n accessor: string | ((d: any) => any[]) | undefined\n): ((d: any) => any[]) | undefined {\n if (!accessor) return undefined\n if (typeof accessor === \"function\") return accessor\n return (d: any) => d[accessor]\n}\n\nfunction resolveNodeId(\n d: any,\n config: NetworkPipelineConfig,\n index: number\n): string {\n const accessor = config.nodeIDAccessor\n if (typeof accessor === \"function\") {\n return String(accessor(d.data))\n }\n if (typeof accessor === \"string\" && d.data[accessor] !== undefined) {\n return String(d.data[accessor])\n }\n // Fallback: use name, id, or index\n if (d.data.name !== undefined) return String(d.data.name)\n if (d.data.id !== undefined) return String(d.data.id)\n return `node-${index}`\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d.data?.[nodeLabel] || d[nodeLabel] || d.id\n}\n\nfunction resolveDefaultNodeSize(\n nodeSize: number | string | ((d: any) => number) | undefined\n): number {\n if (typeof nodeSize === \"number\") return nodeSize\n return 5\n}\n","import type { NetworkLayoutPlugin, NetworkChartType } from \"../networkTypes\"\nimport { sankeyLayoutPlugin } from \"./sankeyLayoutPlugin\"\nimport { forceLayoutPlugin } from \"./forceLayoutPlugin\"\nimport { chordLayoutPlugin } from \"./chordLayoutPlugin\"\nimport { hierarchyLayoutPlugin } from \"./hierarchyLayoutPlugin\"\n\n/**\n * Registry mapping network chart types to their layout plugins.\n */\nexport const networkLayoutRegistry: Record<string, NetworkLayoutPlugin> = {\n sankey: sankeyLayoutPlugin,\n force: forceLayoutPlugin,\n chord: chordLayoutPlugin,\n tree: hierarchyLayoutPlugin,\n cluster: hierarchyLayoutPlugin,\n treemap: hierarchyLayoutPlugin,\n circlepack: hierarchyLayoutPlugin,\n partition: hierarchyLayoutPlugin\n}\n\nexport function getLayoutPlugin(\n chartType: NetworkChartType\n): NetworkLayoutPlugin | undefined {\n return networkLayoutRegistry[chartType]\n}\n\nexport { sankeyLayoutPlugin, forceLayoutPlugin, chordLayoutPlugin, hierarchyLayoutPlugin }\n","import { interpolateNumber } from \"d3-interpolate\"\nimport { ParticlePool } from \"./ParticlePool\"\nimport { getLayoutPlugin } from \"./layouts\"\nimport type {\n NetworkChartType,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge,\n EdgePush,\n TensionConfig,\n BezierCache,\n BezierPoint\n} from \"./networkTypes\"\nimport {\n DEFAULT_TENSION_CONFIG,\n DEFAULT_PARTICLE_STYLE\n} from \"./networkTypes\"\n\nconst CURVATURE = 0.5\n\n/**\n * NetworkPipelineStore — stateful store for the StreamNetworkFrame.\n *\n * Absorbs TopologyStore's functionality (mutable Maps, tension tracking,\n * bezier caching) and adds layout plugin dispatch and scene graph generation.\n *\n * For bounded data: ingests nodes/edges arrays, runs layout once, builds scene.\n * For streaming data: ingests edge pushes, tracks tension, relayouts on threshold.\n */\nexport class NetworkPipelineStore {\n // ── Topology ──────────────────────────────────────────────────────────\n\n nodes: Map<string, RealtimeNode> = new Map()\n edges: Map<string, RealtimeEdge> = new Map()\n tension = 0\n layoutVersion = 0\n\n // ── Scene graph ───────────────────────────────────────────────────────\n\n sceneNodes: NetworkSceneNode[] = []\n sceneEdges: NetworkSceneEdge[] = []\n labels: NetworkLabel[] = []\n\n // ── Particles ─────────────────────────────────────────────────────────\n\n particlePool: ParticlePool | null = null\n\n // ── Config ────────────────────────────────────────────────────────────\n\n private config: NetworkPipelineConfig\n private tensionConfig: TensionConfig\n\n // ── Transition animation ──────────────────────────────────────────────\n\n transition: {\n startTime: number\n duration: number\n } | null = null\n\n constructor(config: NetworkPipelineConfig) {\n this.config = config\n this.tensionConfig = {\n ...DEFAULT_TENSION_CONFIG,\n ...config.tensionConfig\n }\n\n // Lazy particle pool — only for sankey with particles\n if (config.chartType === \"sankey\" && config.showParticles) {\n this.particlePool = new ParticlePool(2000)\n }\n }\n\n // ── Config update ─────────────────────────────────────────────────────\n\n updateConfig(config: NetworkPipelineConfig): void {\n this.config = config\n this.tensionConfig = {\n ...DEFAULT_TENSION_CONFIG,\n ...config.tensionConfig\n }\n\n // Create/destroy particle pool based on config\n if (config.chartType === \"sankey\" && config.showParticles) {\n if (!this.particlePool) {\n this.particlePool = new ParticlePool(2000)\n }\n } else {\n this.particlePool = null\n }\n }\n\n // ── Hierarchy data ingestion ──────────────────────────────────────────\n\n /**\n * Ingest hierarchy root data for tree/treemap/circlepack/partition layouts.\n * The hierarchy root is passed to the layout plugin via config.__hierarchyRoot.\n */\n ingestHierarchy(\n rootData: any,\n size: [number, number]\n ): void {\n this.nodes.clear()\n this.edges.clear()\n\n // Stash hierarchy root on config for the plugin to read\n ;(this.config as any).__hierarchyRoot = rootData\n\n // Run layout — the hierarchical plugin will populate nodes/edges\n this.runLayout(size)\n }\n\n // ── Bounded data ingestion ────────────────────────────────────────────\n\n /**\n * Ingest bounded node/edge arrays (from props).\n * Clears existing topology and rebuilds from scratch.\n */\n ingestBounded(\n rawNodes: any[],\n rawEdges: any[],\n size: [number, number]\n ): void {\n const {\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\"\n } = this.config\n\n const getNodeId = typeof nodeIDAccessor === \"function\"\n ? nodeIDAccessor\n : (d: any) => d[nodeIDAccessor]\n\n const getSource = typeof sourceAccessor === \"function\"\n ? sourceAccessor\n : (d: any) => d[sourceAccessor]\n\n const getTarget = typeof targetAccessor === \"function\"\n ? targetAccessor\n : (d: any) => d[targetAccessor]\n\n const getValue = typeof valueAccessor === \"function\"\n ? valueAccessor\n : (d: any) => d[valueAccessor] ?? 1\n\n this.nodes.clear()\n this.edges.clear()\n\n // Build node map\n for (const raw of rawNodes) {\n const id = String(getNodeId(raw))\n this.nodes.set(id, {\n ...createNode(id),\n data: raw\n })\n }\n\n // Build edge map (creating nodes if not provided)\n for (const raw of rawEdges) {\n const sourceId = String(getSource(raw))\n const targetId = String(getTarget(raw))\n const value = Number(getValue(raw)) || 1\n\n if (!this.nodes.has(sourceId)) {\n this.nodes.set(sourceId, { ...createNode(sourceId), data: raw })\n }\n if (!this.nodes.has(targetId)) {\n this.nodes.set(targetId, { ...createNode(targetId), data: raw })\n }\n\n const key = `${sourceId}\\0${targetId}`\n this.edges.set(key, {\n source: sourceId,\n target: targetId,\n value,\n y0: 0,\n y1: 0,\n sankeyWidth: 0,\n data: raw\n })\n }\n\n // Run layout\n this.runLayout(size)\n }\n\n // ── Streaming data ingestion ──────────────────────────────────────────\n\n /**\n * Unique key for an edge (same as TopologyStore).\n */\n private edgeKey(source: string, target: string): string {\n return `${source}\\0${target}`\n }\n\n /**\n * Ingest a pushed edge. Creates nodes/edges as needed and accumulates tension.\n * Returns true if a relayout is needed.\n */\n ingestEdge(push: EdgePush): boolean {\n const { source, target, value } = push\n const isFirst = this.nodes.size === 0\n let topologyChanged = false\n\n if (!this.nodes.has(source)) {\n this.nodes.set(source, createNode(source))\n this.tension += this.tensionConfig.newNode\n topologyChanged = true\n }\n\n if (!this.nodes.has(target)) {\n this.nodes.set(target, createNode(target))\n this.tension += this.tensionConfig.newNode\n topologyChanged = true\n }\n\n const key = this.edgeKey(source, target)\n const existing = this.edges.get(key)\n\n if (existing) {\n existing.value += value\n this.tension += this.tensionConfig.weightChange\n } else {\n this.edges.set(key, {\n source,\n target,\n value,\n y0: 0,\n y1: 0,\n sankeyWidth: 0\n })\n this.tension += this.tensionConfig.newEdge\n topologyChanged = true\n }\n\n return isFirst || topologyChanged || this.tension >= this.tensionConfig.threshold\n }\n\n // ── Layout execution ──────────────────────────────────────────────────\n\n /**\n * Run the layout algorithm via the appropriate plugin.\n */\n runLayout(size: [number, number]): void {\n const plugin = getLayoutPlugin(this.config.chartType)\n if (!plugin) return\n\n let nodesArr = Array.from(this.nodes.values())\n let edgesArr = Array.from(this.edges.values())\n\n // For hierarchical plugins the store's Maps are empty — the plugin\n // populates the nodes/edges arrays itself from config.__hierarchyRoot.\n // Skip the early exit so the plugin gets called.\n if (nodesArr.length === 0 && !plugin.hierarchical) return\n\n // Save previous positions for transition\n this.prepareForRelayout()\n\n // Execute layout — hierarchical plugins push into the arrays directly\n plugin.computeLayout(nodesArr, edgesArr, this.config, size)\n\n // After hierarchical layout, sync the populated arrays back into the\n // store's Maps so buildScene and getLayoutData work correctly.\n if (plugin.hierarchical && nodesArr.length > 0) {\n this.nodes.clear()\n this.edges.clear()\n for (const node of nodesArr) {\n this.nodes.set(node.id, node)\n }\n for (const edge of edgesArr) {\n const srcId = typeof edge.source === \"string\" ? edge.source : edge.source.id\n const tgtId = typeof edge.target === \"string\" ? edge.target : edge.target.id\n this.edges.set(`${srcId}\\0${tgtId}`, edge)\n }\n }\n\n // Finalize — update derived properties and bezier caches\n this.finalizeLayout()\n\n // Save target positions for animation\n this.saveTargetPositions()\n\n // Check if we have meaningful previous positions to animate from\n const hasOldPositions = nodesArr.some(\n (n) => n._prevX0 !== undefined &&\n (n._prevX0 !== 0 || n._prevX1 !== 0 || n._prevY0 !== 0 || n._prevY1 !== 0)\n )\n\n if (hasOldPositions && this.tensionConfig.transitionDuration > 0) {\n // Reset to previous positions (animation starts from here)\n this.restorePreviousPositions()\n\n // Start transition\n this.transition = {\n startTime: performance.now(),\n duration: this.tensionConfig.transitionDuration\n }\n }\n\n this.layoutVersion++\n }\n\n /**\n * Build the scene graph from current layout positions.\n */\n buildScene(size: [number, number]): void {\n const plugin = getLayoutPlugin(this.config.chartType)\n if (!plugin) return\n\n const nodesArr = Array.from(this.nodes.values())\n const edgesArr = Array.from(this.edges.values())\n\n const { sceneNodes, sceneEdges, labels } = plugin.buildScene(\n nodesArr,\n edgesArr,\n this.config,\n size\n )\n\n this.sceneNodes = sceneNodes\n this.sceneEdges = sceneEdges\n this.labels = labels\n }\n\n // ── Transition animation ──────────────────────────────────────────────\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.transition) return false\n\n const elapsed = now - this.transition.startTime\n const rawT = Math.min(elapsed / this.transition.duration, 1)\n // Ease-out cubic\n const t = 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.nodes.values()) {\n if (\n node._targetX0 !== undefined &&\n node._prevX0 !== undefined &&\n (node._prevX0 !== 0 || node._prevX1 !== 0)\n ) {\n node.x0 = node._prevX0 + (node._targetX0 - node._prevX0) * t\n node.x1 = node._prevX1! + (node._targetX1! - node._prevX1!) * t\n node.y0 = node._prevY0! + (node._targetY0! - node._prevY0!) * t\n node.y1 = node._prevY1! + (node._targetY1! - node._prevY1!) * t\n }\n }\n\n for (const edge of this.edges.values()) {\n if (\n edge._targetY0 !== undefined &&\n edge._prevY0 !== undefined &&\n edge._prevSankeyWidth !== undefined &&\n edge._prevSankeyWidth > 0\n ) {\n edge.y0 = edge._prevY0 + (edge._targetY0 - edge._prevY0) * t\n edge.y1 = edge._prevY1! + (edge._targetY1! - edge._prevY1!) * t\n edge.sankeyWidth =\n edge._prevSankeyWidth + (edge._targetSankeyWidth! - edge._prevSankeyWidth) * t\n }\n }\n\n // Rebuild beziers for new interpolated positions\n this.rebuildAllBeziers()\n\n if (rawT >= 1) {\n // Snap to final target positions\n this.snapToTargets()\n this.transition = null\n return false\n }\n\n return true\n }\n\n // ── Topology helpers (ported from TopologyStore) ──────────────────────\n\n private prepareForRelayout(): void {\n for (const node of this.nodes.values()) {\n node._prevX0 = node.x0\n node._prevX1 = node.x1\n node._prevY0 = node.y0\n node._prevY1 = node.y1\n }\n for (const edge of this.edges.values()) {\n edge._prevY0 = edge.y0\n edge._prevY1 = edge.y1\n edge._prevSankeyWidth = edge.sankeyWidth\n }\n }\n\n private finalizeLayout(): void {\n const direction = this.config.orientation === \"vertical\" ? \"down\" : \"right\"\n\n for (const node of this.nodes.values()) {\n // Sankey/treemap/partition set x0/x1/y0/y1 — derive x/y from those.\n // Force/chord set x/y directly — derive x0/x1 from x/y.\n const hasBox = node.x0 !== 0 || node.x1 !== 0 || node.y0 !== 0 || node.y1 !== 0\n if (hasBox) {\n node.width = node.x1 - node.x0\n node.height = node.y1 - node.y0\n node.x = node.x0 + node.width / 2\n node.y = node.y0 + node.height / 2\n } else {\n // x/y already set by layout (force, chord) — synthesize a bounding box\n const r = 5\n node.x0 = node.x - r\n node.x1 = node.x + r\n node.y0 = node.y - r\n node.y1 = node.y + r\n node.width = r * 2\n node.height = r * 2\n }\n }\n\n for (const edge of this.edges.values()) {\n edge.direction = direction\n this.updateEdgeBezier(edge)\n }\n\n this.tension = 0\n }\n\n private saveTargetPositions(): void {\n for (const node of this.nodes.values()) {\n node._targetX0 = node.x0\n node._targetX1 = node.x1\n node._targetY0 = node.y0\n node._targetY1 = node.y1\n }\n for (const edge of this.edges.values()) {\n edge._targetY0 = edge.y0\n edge._targetY1 = edge.y1\n edge._targetSankeyWidth = edge.sankeyWidth\n }\n }\n\n private restorePreviousPositions(): void {\n for (const node of this.nodes.values()) {\n if (\n node._prevX0 !== undefined &&\n (node._prevX0 !== 0 || node._prevX1 !== 0)\n ) {\n node.x0 = node._prevX0\n node.x1 = node._prevX1!\n node.y0 = node._prevY0!\n node.y1 = node._prevY1!\n }\n }\n for (const edge of this.edges.values()) {\n if (\n edge._prevY0 !== undefined &&\n edge._prevSankeyWidth !== undefined &&\n edge._prevSankeyWidth > 0\n ) {\n edge.y0 = edge._prevY0\n edge.y1 = edge._prevY1!\n edge.sankeyWidth = edge._prevSankeyWidth\n }\n }\n this.rebuildAllBeziers()\n }\n\n private snapToTargets(): void {\n for (const node of this.nodes.values()) {\n if (node._targetX0 !== undefined) {\n node.x0 = node._targetX0\n node.x1 = node._targetX1!\n node.y0 = node._targetY0!\n node.y1 = node._targetY1!\n }\n }\n for (const edge of this.edges.values()) {\n if (edge._targetY0 !== undefined) {\n edge.y0 = edge._targetY0\n edge.y1 = edge._targetY1!\n edge.sankeyWidth = edge._targetSankeyWidth!\n }\n }\n this.rebuildAllBeziers()\n }\n\n // ── Bezier caching (ported from TopologyStore) ────────────────────────\n\n private updateEdgeBezier(edge: RealtimeEdge): void {\n const sourceNode =\n typeof edge.source === \"string\"\n ? this.nodes.get(edge.source)!\n : edge.source\n const targetNode =\n typeof edge.target === \"string\"\n ? this.nodes.get(edge.target)!\n : edge.target\n\n if (!sourceNode || !targetNode) return\n\n if (edge.circular && edge.circularPathData) {\n edge.bezier = this.buildCircularBezier(edge)\n } else {\n edge.bezier = this.buildStandardBezier(edge, sourceNode, targetNode)\n }\n }\n\n private buildStandardBezier(\n edge: RealtimeEdge,\n sourceNode: RealtimeNode,\n targetNode: RealtimeNode\n ): BezierCache {\n const hw = (edge.sankeyWidth || 1) / 2\n\n if (edge.direction === \"down\") {\n const y0 = sourceNode.y1\n const y1 = targetNode.y0\n const xi = interpolateNumber(y0, y1)\n const p0: BezierPoint = { x: edge.y0, y: y0 }\n const p1: BezierPoint = { x: edge.y0, y: xi(CURVATURE) }\n const p2: BezierPoint = { x: edge.y1, y: xi(1 - CURVATURE) }\n const p3: BezierPoint = { x: edge.y1, y: y1 }\n return { circular: false, points: [p0, p1, p2, p3], halfWidth: hw }\n }\n\n // Horizontal (default)\n const x0 = sourceNode.x1\n const x1 = targetNode.x0\n const xi = interpolateNumber(x0, x1)\n const p0: BezierPoint = { x: x0, y: edge.y0 }\n const p1: BezierPoint = { x: xi(CURVATURE), y: edge.y0 }\n const p2: BezierPoint = { x: xi(1 - CURVATURE), y: edge.y1 }\n const p3: BezierPoint = { x: x1, y: edge.y1 }\n return { circular: false, points: [p0, p1, p2, p3], halfWidth: hw }\n }\n\n private buildCircularBezier(edge: RealtimeEdge): BezierCache {\n const hw = (edge.sankeyWidth || 1) / 2\n const cpd = edge.circularPathData\n\n let waypoints: BezierPoint[]\n\n if (edge.direction === \"down\") {\n waypoints = [\n { x: cpd.sourceY, y: cpd.sourceX },\n { x: cpd.sourceY, y: cpd.leftFullExtent },\n { x: cpd.verticalFullExtent, y: cpd.leftFullExtent },\n { x: cpd.verticalFullExtent, y: cpd.rightFullExtent },\n { x: cpd.targetY, y: cpd.rightFullExtent },\n { x: cpd.targetY, y: cpd.targetX }\n ]\n } else {\n waypoints = [\n { x: cpd.sourceX, y: cpd.sourceY },\n { x: cpd.leftFullExtent, y: cpd.sourceY },\n { x: cpd.leftFullExtent, y: cpd.verticalFullExtent },\n { x: cpd.rightFullExtent, y: cpd.verticalFullExtent },\n { x: cpd.rightFullExtent, y: cpd.targetY },\n { x: cpd.targetX, y: cpd.targetY }\n ]\n }\n\n const segments: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]> = []\n for (let i = 0; i < waypoints.length - 1; i++) {\n const a = waypoints[i]\n const b = waypoints[i + 1]\n const dx = b.x - a.x\n const dy = b.y - a.y\n segments.push([\n a,\n { x: a.x + dx / 3, y: a.y + dy / 3 },\n { x: a.x + (2 * dx) / 3, y: a.y + (2 * dy) / 3 },\n b\n ])\n }\n\n return { circular: true, segments, halfWidth: hw }\n }\n\n rebuildAllBeziers(): void {\n for (const node of this.nodes.values()) {\n node.width = node.x1 - node.x0\n node.height = node.y1 - node.y0\n node.x = node.x0 + node.width / 2\n node.y = node.y0 + node.height / 2\n }\n for (const edge of this.edges.values()) {\n this.updateEdgeBezier(edge)\n }\n }\n\n // ── Public accessors ──────────────────────────────────────────────────\n\n getLayoutData(): { nodes: RealtimeNode[]; edges: RealtimeEdge[] } {\n return {\n nodes: Array.from(this.nodes.values()),\n edges: Array.from(this.edges.values())\n }\n }\n\n clear(): void {\n this.nodes.clear()\n this.edges.clear()\n this.tension = 0\n this.layoutVersion = 0\n this.sceneNodes = []\n this.sceneEdges = []\n this.labels = []\n this.transition = null\n if (this.particlePool) {\n this.particlePool.clear()\n }\n }\n}\n\nfunction createNode(id: string): RealtimeNode {\n return {\n id,\n x0: 0,\n x1: 0,\n y0: 0,\n y1: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n value: 0,\n createdByFrame: true\n }\n}\n","import type {\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkRectNode,\n NetworkArcNode,\n NetworkBezierEdge\n} from \"./networkTypes\"\n\nexport interface NetworkHitResult {\n type: \"node\" | \"edge\"\n datum: any\n x: number\n y: number\n distance: number\n}\n\n/**\n * Hit test against network scene nodes and edges.\n *\n * Checks nodes first (they're on top), then edges.\n */\nexport function findNearestNetworkNode(\n sceneNodes: NetworkSceneNode[],\n sceneEdges: NetworkSceneEdge[],\n px: number,\n py: number,\n maxDistance = 30\n): NetworkHitResult | null {\n // Check nodes — for nested rects (treemap) we want the smallest\n // containing rect, so we track rect hits by area separately.\n let bestNode: NetworkHitResult | null = null\n let bestDist = maxDistance\n let bestRectArea = Infinity\n\n for (const node of sceneNodes) {\n const result = hitTestNode(node, px, py)\n if (!result) continue\n\n if (node.type === \"rect\") {\n // For rects: prefer the smallest area (deepest cell)\n const area = (node as NetworkRectNode).w * (node as NetworkRectNode).h\n if (area < bestRectArea) {\n bestNode = result\n bestRectArea = area\n }\n } else if (result.distance < bestDist) {\n bestNode = result\n bestDist = result.distance\n }\n }\n\n if (bestNode) return bestNode\n\n // Check edges if no node hit\n for (const edge of sceneEdges) {\n const result = hitTestEdge(edge, px, py)\n if (result && result.distance < bestDist) {\n bestNode = result\n bestDist = result.distance\n }\n }\n\n return bestNode\n}\n\n// ── Node hit testing ────────────────────────────────────────────────────\n\nfunction hitTestNode(\n node: NetworkSceneNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n switch (node.type) {\n case \"circle\":\n return hitTestCircle(node, px, py)\n case \"rect\":\n return hitTestRect(node, px, py)\n case \"arc\":\n return hitTestArc(node, px, py)\n default:\n return null\n }\n}\n\nfunction hitTestCircle(\n node: NetworkCircleNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n const dx = px - node.cx\n const dy = py - node.cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n const tolerance = Math.max(node.r, 5) + 5\n\n if (dist <= tolerance) {\n return {\n type: \"node\",\n datum: node.datum,\n x: node.cx,\n y: node.cy,\n distance: dist\n }\n }\n return null\n}\n\nfunction hitTestRect(\n node: NetworkRectNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n if (\n px >= node.x &&\n px <= node.x + node.w &&\n py >= node.y &&\n py <= node.y + node.h\n ) {\n return {\n type: \"node\",\n datum: node.datum,\n x: node.x + node.w / 2,\n y: node.y + node.h / 2,\n distance: 0\n }\n }\n return null\n}\n\nfunction hitTestArc(\n node: NetworkArcNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n // Convert to polar coordinates relative to arc center\n const dx = px - node.cx\n const dy = py - node.cy\n const radius = Math.sqrt(dx * dx + dy * dy)\n\n // Check radius bounds\n if (radius < node.innerR - 2 || radius > node.outerR + 2) return null\n\n // Check angle bounds\n let angle = Math.atan2(dy, dx)\n // Normalize angle to be positive\n if (angle < 0) angle += Math.PI * 2\n\n let start = node.startAngle\n let end = node.endAngle\n // Normalize start/end angles\n if (start < 0) start += Math.PI * 2\n if (end < 0) end += Math.PI * 2\n\n let inArc: boolean\n if (start <= end) {\n inArc = angle >= start && angle <= end\n } else {\n // Wraps around 0\n inArc = angle >= start || angle <= end\n }\n\n if (inArc) {\n const midAngle = (node.startAngle + node.endAngle) / 2\n const midR = (node.innerR + node.outerR) / 2\n return {\n type: \"node\",\n datum: node.datum,\n x: node.cx + midR * Math.cos(midAngle),\n y: node.cy + midR * Math.sin(midAngle),\n distance: 0\n }\n }\n\n return null\n}\n\n// ── Edge hit testing ────────────────────────────────────────────────────\n\nfunction hitTestEdge(\n edge: NetworkSceneEdge,\n px: number,\n py: number\n): NetworkHitResult | null {\n switch (edge.type) {\n case \"bezier\":\n return hitTestBezierEdge(edge, px, py)\n case \"line\":\n return hitTestLineEdge(edge, px, py)\n case \"ribbon\":\n return hitTestPathEdge(edge, px, py)\n case \"curved\":\n return hitTestPathEdge(edge, px, py)\n default:\n return null\n }\n}\n\nfunction hitTestBezierEdge(\n edge: NetworkBezierEdge,\n px: number,\n py: number\n): NetworkHitResult | null {\n // Use Path2D for approximate point-in-path testing\n if (!edge.pathD) return null\n\n try {\n const path = new Path2D(edge.pathD)\n // Create an offscreen canvas context for isPointInPath\n // For performance, use a simple bounding-box approximation\n // and rely on the filled path test\n const canvas = document.createElement(\"canvas\")\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return null\n\n if (ctx.isPointInPath(path, px, py)) {\n // Return midpoint of the band as hover position\n const sourceNode = typeof edge.datum?.source === \"object\" ? edge.datum.source : null\n const targetNode = typeof edge.datum?.target === \"object\" ? edge.datum.target : null\n\n const midX = sourceNode && targetNode\n ? (sourceNode.x1 + targetNode.x0) / 2\n : px\n const midY = edge.datum\n ? (edge.datum.y0 + edge.datum.y1) / 2\n : py\n\n return {\n type: \"edge\",\n datum: edge.datum,\n x: midX,\n y: midY,\n distance: 0\n }\n }\n } catch {\n // Path2D may not be supported in all environments\n }\n\n return null\n}\n\nfunction hitTestLineEdge(\n edge: { type: \"line\"; x1: number; y1: number; x2: number; y2: number; datum: any },\n px: number,\n py: number\n): NetworkHitResult | null {\n // Point-to-line-segment distance\n const dx = edge.x2 - edge.x1\n const dy = edge.y2 - edge.y1\n const len2 = dx * dx + dy * dy\n\n if (len2 === 0) return null\n\n let t = ((px - edge.x1) * dx + (py - edge.y1) * dy) / len2\n t = Math.max(0, Math.min(1, t))\n\n const nearX = edge.x1 + t * dx\n const nearY = edge.y1 + t * dy\n const dist = Math.sqrt((px - nearX) ** 2 + (py - nearY) ** 2)\n\n const tolerance = 5\n if (dist <= tolerance) {\n return {\n type: \"edge\",\n datum: edge.datum,\n x: nearX,\n y: nearY,\n distance: dist\n }\n }\n\n return null\n}\n\nfunction hitTestPathEdge(\n edge: { pathD: string; datum: any },\n px: number,\n py: number\n): NetworkHitResult | null {\n if (!edge.pathD) return null\n\n try {\n const path = new Path2D(edge.pathD)\n const canvas = document.createElement(\"canvas\")\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return null\n\n if (ctx.isPointInPath(path, px, py)) {\n return {\n type: \"edge\",\n datum: edge.datum,\n x: px,\n y: py,\n distance: 0\n }\n }\n } catch {\n // Fallback — no hit\n }\n\n return null\n}\n","\"use client\"\nimport * as React from \"react\"\nimport type { ReactNode } from \"react\"\nimport type { NetworkLabel } from \"./networkTypes\"\nimport type { LegendGroup } from \"../types/legendTypes\"\n\nexport interface NetworkSVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n\n /** Labels from the layout plugin */\n labels: NetworkLabel[]\n\n /** Chart title */\n title?: string | ReactNode\n\n /** Legend configuration */\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n /** User-provided SVG elements on top */\n foregroundGraphics?: ReactNode\n\n /** Annotations */\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: any\n ) => ReactNode\n annotationFrame?: number\n}\n\n/**\n * SVG overlay for network charts — renders labels, title, legend, annotations.\n *\n * Unlike XY/ordinal overlays, network charts don't have axes or grid lines.\n * The overlay is positioned absolutely over the canvas.\n */\nexport function NetworkSVGOverlay(props: NetworkSVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n labels,\n title,\n legend,\n foregroundGraphics,\n annotations,\n svgAnnotationRules,\n annotationFrame\n } = props\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Labels */}\n {labels.map((label, i) => (\n <text\n key={`label-${i}`}\n x={label.x}\n y={label.y}\n textAnchor={label.anchor || \"start\"}\n dominantBaseline={(label.baseline || \"middle\") as any}\n fontSize={label.fontSize || 11}\n fontWeight={label.fontWeight}\n fill={label.fill || \"currentColor\"}\n stroke={label.stroke}\n strokeWidth={label.strokeWidth}\n paintOrder={label.paintOrder}\n style={{ pointerEvents: \"none\" }}\n >\n {label.text}\n </text>\n ))}\n\n {/* Annotations */}\n {annotations &&\n svgAnnotationRules &&\n annotations.map((annotation, i) => {\n const element = svgAnnotationRules(annotation, i, {\n width,\n height\n })\n return element ? (\n <React.Fragment key={`annotation-${i}`}>\n {element}\n </React.Fragment>\n ) : null\n })}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n </g>\n\n {/* Title */}\n {title && typeof title === \"string\" ? (\n <text\n x={totalWidth / 2}\n y={16}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight={600}\n fill=\"currentColor\"\n >\n {title}\n </text>\n ) : title ? (\n <foreignObject x={0} y={0} width={totalWidth} height={margin.top}>\n {title}\n </foreignObject>\n ) : null}\n\n {/* Legend */}\n {legend && typeof legend === \"object\" && \"legendGroups\" in (legend as any) ? (\n <g transform={`translate(${totalWidth - margin.right + 10},${margin.top})`}>\n {((legend as any).legendGroups as LegendGroup[]).map(\n (group, gi) => (\n <g key={`legend-group-${gi}`}>\n {group.items?.map((item: any, ii: number) => (\n <g key={`legend-item-${ii}`} transform={`translate(0,${ii * 20})`}>\n <rect\n x={0}\n y={0}\n width={12}\n height={12}\n fill={item.color}\n rx={2}\n />\n <text\n x={18}\n y={10}\n fontSize={11}\n fill=\"currentColor\"\n >\n {item.label}\n </text>\n </g>\n ))}\n </g>\n )\n )}\n </g>\n ) : legend ? (\n <g transform={`translate(${totalWidth - margin.right + 10},${margin.top})`}>\n {legend as React.ReactNode}\n </g>\n ) : null}\n </svg>\n )\n}\n\nNetworkSVGOverlay.displayName = \"NetworkSVGOverlay\"\n","import type { NetworkSceneNode, NetworkRectNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkRectNode (sankey nodes, treemap cells, partition blocks).\n */\nexport function networkRectRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"rect\") continue\n const r = node as NetworkRectNode\n\n if (r.w <= 0 || r.h <= 0) continue\n\n ctx.save()\n\n if (r.style.opacity !== undefined) {\n ctx.globalAlpha = r.style.opacity\n }\n\n // Fill\n if (r.style.fill) {\n ctx.fillStyle = r.style.fill\n if (r.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (r.style.opacity ?? 1) * r.style.fillOpacity\n }\n ctx.fillRect(r.x, r.y, r.w, r.h)\n }\n\n // Stroke\n if (r.style.stroke && r.style.stroke !== \"none\") {\n ctx.strokeStyle = r.style.stroke\n ctx.lineWidth = r.style.strokeWidth ?? 1\n ctx.globalAlpha = r.style.opacity ?? 1\n ctx.strokeRect(r.x, r.y, r.w, r.h)\n }\n\n ctx.restore()\n }\n}\n","import type { NetworkSceneNode, NetworkCircleNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkCircleNode (force nodes, tree nodes, circlepack).\n */\nexport function networkCircleRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"circle\") continue\n const c = node as NetworkCircleNode\n\n if (c.r <= 0) continue\n\n ctx.save()\n\n if (c.style.opacity !== undefined) {\n ctx.globalAlpha = c.style.opacity\n }\n\n ctx.beginPath()\n ctx.arc(c.cx, c.cy, c.r, 0, Math.PI * 2)\n\n // Fill\n if (c.style.fill) {\n ctx.fillStyle = c.style.fill\n if (c.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (c.style.opacity ?? 1) * c.style.fillOpacity\n }\n ctx.fill()\n }\n\n // Stroke\n if (c.style.stroke && c.style.stroke !== \"none\") {\n ctx.strokeStyle = c.style.stroke\n ctx.lineWidth = c.style.strokeWidth ?? 1\n ctx.globalAlpha = c.style.opacity ?? 1\n ctx.stroke()\n }\n\n ctx.restore()\n }\n}\n","import type { NetworkSceneNode, NetworkArcNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkArcNode (chord diagram arc segments).\n */\nexport function networkArcRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"arc\") continue\n const a = node as NetworkArcNode\n\n ctx.save()\n\n if (a.style.opacity !== undefined) {\n ctx.globalAlpha = a.style.opacity\n }\n\n // Draw arc segment (annular sector)\n ctx.beginPath()\n ctx.arc(a.cx, a.cy, a.outerR, a.startAngle, a.endAngle)\n ctx.arc(a.cx, a.cy, a.innerR, a.endAngle, a.startAngle, true)\n ctx.closePath()\n\n // Fill\n if (a.style.fill) {\n ctx.fillStyle = a.style.fill\n if (a.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (a.style.opacity ?? 1) * a.style.fillOpacity\n }\n ctx.fill()\n }\n\n // Stroke\n if (a.style.stroke && a.style.stroke !== \"none\") {\n ctx.strokeStyle = a.style.stroke\n ctx.lineWidth = a.style.strokeWidth ?? 1\n ctx.globalAlpha = a.style.opacity ?? 1\n ctx.stroke()\n }\n\n ctx.restore()\n }\n}\n","import type {\n NetworkSceneEdge,\n NetworkBezierEdge,\n NetworkLineEdge,\n NetworkRibbonEdge,\n NetworkCurvedEdge\n} from \"../networkTypes\"\n\n/**\n * Canvas painter for all network edge types.\n *\n * - bezier: Sankey flow bands (Path2D from SVG path string)\n * - line: Force-directed straight edges\n * - ribbon: Chord diagram ribbons\n * - curved: Tree/cluster curved edges\n */\nexport function networkEdgeRenderer(\n ctx: CanvasRenderingContext2D,\n edges: NetworkSceneEdge[]\n): void {\n for (const edge of edges) {\n switch (edge.type) {\n case \"bezier\":\n renderBezierEdge(ctx, edge)\n break\n case \"line\":\n renderLineEdge(ctx, edge)\n break\n case \"ribbon\":\n renderRibbonEdge(ctx, edge)\n break\n case \"curved\":\n renderCurvedEdge(ctx, edge)\n break\n }\n }\n}\n\nfunction renderBezierEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkBezierEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n // Fill the band\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? edge.style.opacity ?? 0.5\n ctx.fill(path)\n }\n\n // Stroke the band outline\n if (edge.style.stroke && edge.style.stroke !== \"none\") {\n ctx.strokeStyle = edge.style.stroke\n ctx.lineWidth = edge.style.strokeWidth ?? 0.5\n ctx.globalAlpha = (edge.style.opacity ?? 1) * 0.5\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\nfunction renderLineEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkLineEdge\n): void {\n ctx.save()\n\n ctx.strokeStyle = edge.style.stroke || \"#999\"\n ctx.lineWidth = edge.style.strokeWidth ?? 1\n if (edge.style.opacity !== undefined) {\n ctx.globalAlpha = edge.style.opacity\n }\n if (edge.style.strokeDasharray) {\n ctx.setLineDash(edge.style.strokeDasharray.split(/[\\s,]+/).map(Number))\n }\n\n ctx.beginPath()\n ctx.moveTo(edge.x1, edge.y1)\n ctx.lineTo(edge.x2, edge.y2)\n ctx.stroke()\n\n ctx.restore()\n}\n\nfunction renderRibbonEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkRibbonEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? edge.style.opacity ?? 0.5\n ctx.fill(path)\n }\n\n if (edge.style.stroke && edge.style.stroke !== \"none\") {\n ctx.strokeStyle = edge.style.stroke\n ctx.lineWidth = edge.style.strokeWidth ?? 0.5\n ctx.globalAlpha = (edge.style.opacity ?? 1) * 0.3\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\nfunction renderCurvedEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkCurvedEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n ctx.strokeStyle = edge.style.stroke || \"#999\"\n ctx.lineWidth = edge.style.strokeWidth ?? 1\n if (edge.style.opacity !== undefined) {\n ctx.globalAlpha = edge.style.opacity\n }\n ctx.stroke(path)\n\n // Fill if specified (usually not for tree edges)\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? 0.1\n ctx.fill(path)\n }\n\n ctx.restore()\n}\n","import type { ParticlePool } from \"../ParticlePool\"\nimport type { RealtimeEdge, ParticleStyle } from \"../networkTypes\"\nimport { DEFAULT_PARTICLE_STYLE } from \"../networkTypes\"\n\n/**\n * Canvas particle renderer for sankey — ported directly from realtime-network.\n * Called each rAF frame.\n */\nexport function renderNetworkParticles(\n ctx: CanvasRenderingContext2D,\n pool: ParticlePool,\n edges: RealtimeEdge[],\n style: ParticleStyle,\n edgeColorFn: (edge: RealtimeEdge) => string\n): void {\n const radius = style.radius ?? DEFAULT_PARTICLE_STYLE.radius\n const opacity = style.opacity ?? DEFAULT_PARTICLE_STYLE.opacity\n\n ctx.globalAlpha = opacity\n\n for (let i = 0; i < pool.particles.length; i++) {\n const p = pool.particles[i]\n if (!p.active) continue\n\n const edge = edges[p.edgeIndex]\n if (!edge) continue\n\n // Resolve color\n if (typeof style.color === \"function\") {\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n ctx.fillStyle = sourceNode ? (style.color as Function)(edge, sourceNode) : \"#666\"\n } else if (style.color && style.color !== \"inherit\") {\n ctx.fillStyle = style.color as string\n } else {\n ctx.fillStyle = edgeColorFn(edge)\n }\n\n ctx.beginPath()\n ctx.arc(p.x, p.y, radius, 0, Math.PI * 2)\n ctx.fill()\n }\n\n ctx.globalAlpha = 1\n}\n\n/**\n * Spawn particles for all edges proportional to their value.\n */\nexport function spawnNetworkParticles(\n pool: ParticlePool,\n edges: RealtimeEdge[],\n deltaTime: number,\n style: ParticleStyle\n): void {\n const spawnRate = style.spawnRate ?? DEFAULT_PARTICLE_STYLE.spawnRate\n const maxPerEdge = style.maxPerEdge ?? DEFAULT_PARTICLE_STYLE.maxPerEdge\n\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i]\n if (!edge.bezier) continue\n\n const currentCount = pool.countForEdge(i)\n if (currentCount >= maxPerEdge) continue\n\n const rate = edge.value * spawnRate * deltaTime\n const whole = Math.floor(rate)\n const frac = rate - whole\n\n let toSpawn = whole\n if (Math.random() < frac) toSpawn++\n\n for (let j = 0; j < toSpawn; j++) {\n if (pool.countForEdge(i) >= maxPerEdge) break\n pool.spawn(i)\n }\n }\n}\n","import { scaleOrdinal, scaleSequential } from \"d3-scale\"\nimport {\n schemeCategory10,\n schemeTableau10,\n schemeSet3,\n interpolateBlues,\n interpolateReds,\n interpolateGreens,\n interpolateOranges,\n interpolatePurples,\n interpolateViridis,\n interpolatePlasma\n} from \"d3-scale-chromatic\"\n\n/**\n * Predefined color schemes\n */\nexport const COLOR_SCHEMES = {\n // Categorical schemes\n category10: schemeCategory10,\n tableau10: schemeTableau10,\n set3: schemeSet3,\n\n // Sequential schemes (for continuous data)\n blues: interpolateBlues,\n reds: interpolateReds,\n greens: interpolateGreens,\n oranges: interpolateOranges,\n purples: interpolatePurples,\n viridis: interpolateViridis,\n plasma: interpolatePlasma\n}\n\n/**\n * Default colors for charts\n */\nexport const DEFAULT_COLORS = schemeCategory10\n\n/**\n * Gets a color for a data point based on the colorBy configuration\n *\n * @param dataPoint - The data point\n * @param colorBy - Field name or function to determine color\n * @param colorScale - Optional custom color scale\n * @returns Color string\n *\n * @example\n * ```ts\n * // Using a field name\n * getColor({category: 'A', value: 10}, 'category', colorScale)\n *\n * // Using a function\n * getColor({value: 10}, d => d.value > 5 ? 'red' : 'blue')\n * ```\n */\nexport function getColor(\n dataPoint: any,\n colorBy: string | ((d: any) => string),\n colorScale?: (v: any) => string\n): string {\n if (typeof colorBy === \"function\") {\n return colorBy(dataPoint)\n }\n\n const colorValue = dataPoint[colorBy]\n\n if (colorScale) {\n return colorScale(colorValue)\n }\n\n // Default: return a hash-based color\n return DEFAULT_COLORS[Math.abs(hashString(String(colorValue))) % DEFAULT_COLORS.length]\n}\n\n/**\n * Creates a color scale function from data\n *\n * @param data - Array of data points\n * @param colorBy - Field name to use for coloring\n * @param scheme - Color scheme name or custom palette\n * @returns Color scale function\n *\n * @example\n * ```ts\n * const colorScale = createColorScale(data, 'category')\n * const color = colorScale('A') // Returns color for category 'A'\n * ```\n */\nexport function createColorScale(\n data: Array<Record<string, any>>,\n colorBy: string,\n scheme: string | string[] = \"category10\"\n): (v: string) => string {\n // Get unique values\n const uniqueValues = Array.from(new Set(data.map(d => d[colorBy])))\n\n // Check if values are numeric for sequential scale\n const isNumeric = uniqueValues.every(v => typeof v === \"number\" || !isNaN(Number(v)))\n\n // Handle custom color array\n if (Array.isArray(scheme)) {\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(scheme)\n .unknown(\"#999\") as (v: any) => string\n }\n\n const colorScheme = COLOR_SCHEMES[scheme] || COLOR_SCHEMES.category10\n\n if (isNumeric && typeof colorScheme === \"function\") {\n // Use sequential scale for numeric data\n return (v: any) => colorScheme(Number(v) / Math.max(...uniqueValues.map(Number)))\n } else {\n // Use ordinal scale for categorical data\n const colors = Array.isArray(colorScheme) ? colorScheme : DEFAULT_COLORS\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(colors)\n .unknown(\"#999\") as (v: any) => string\n }\n}\n\n/**\n * Simple string hash function for deterministic color assignment\n */\nfunction hashString(str: string): number {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash)\n}\n\n/**\n * Generates a size function based on sizeBy configuration\n *\n * @param dataPoint - The data point\n * @param sizeBy - Field name or function to determine size\n * @param sizeRange - Min and max size range [min, max]\n * @param domain - Optional domain for scaling [minValue, maxValue]\n * @returns Size value\n */\nexport function getSize(\n dataPoint: any,\n sizeBy: string | ((d: any) => number),\n sizeRange: [number, number] = [3, 20],\n domain?: [number, number]\n): number {\n let value: number\n\n if (typeof sizeBy === \"function\") {\n value = sizeBy(dataPoint)\n } else {\n value = dataPoint[sizeBy]\n }\n\n if (!domain) {\n return value\n }\n\n // Scale value to size range\n const [minDomain, maxDomain] = domain\n const [minSize, maxSize] = sizeRange\n\n if (maxDomain === minDomain) {\n return (minSize + maxSize) / 2\n }\n\n const normalized = (value - minDomain) / (maxDomain - minDomain)\n return minSize + normalized * (maxSize - minSize)\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamNetworkFrameProps,\n StreamNetworkFrameHandle,\n NetworkChartType,\n NetworkPipelineConfig,\n RealtimeNode,\n RealtimeEdge,\n EdgePush,\n ParticleStyle\n} from \"./networkTypes\"\nimport {\n DEFAULT_TENSION_CONFIG,\n DEFAULT_PARTICLE_STYLE\n} from \"./networkTypes\"\nimport { NetworkPipelineStore } from \"./NetworkPipelineStore\"\nimport {\n findNearestNetworkNode,\n type NetworkHitResult\n} from \"./NetworkCanvasHitTester\"\nimport { NetworkSVGOverlay } from \"./NetworkSVGOverlay\"\n\n// Canvas renderers\nimport { networkRectRenderer } from \"./renderers/networkRectRenderer\"\nimport { networkCircleRenderer } from \"./renderers/networkCircleRenderer\"\nimport { networkArcRenderer } from \"./renderers/networkArcRenderer\"\nimport { networkEdgeRenderer } from \"./renderers/networkEdgeRenderer\"\nimport {\n renderNetworkParticles,\n spawnNetworkParticles\n} from \"./renderers/networkParticleRenderer\"\nimport { DEFAULT_COLORS } from \"../charts/shared/colorUtils\"\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 20, right: 80, bottom: 20, left: 80 }\nconst CENTERED_MARGIN = { top: 40, right: 40, bottom: 40, left: 40 }\nconst CENTERED_TYPES = new Set([\"chord\", \"force\", \"circlepack\"])\nconst DEFAULT_SIZE: [number, number] = [800, 600]\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: 4,\n fontSize: 12,\n lineHeight: 1.5,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultNetworkTooltip({\n data\n}: {\n data: { type: \"node\" | \"edge\"; data: any }\n}) {\n if (data.type === \"edge\") {\n const edge = data.data\n const sourceId =\n typeof edge.source === \"object\" ? edge.source.id : edge.source\n const targetId =\n typeof edge.target === \"object\" ? edge.target.id : edge.target\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600 }}>\n {sourceId} → {targetId}\n </div>\n {edge.value != null && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Value:{\" \"}\n {typeof edge.value === \"number\"\n ? edge.value.toLocaleString()\n : String(edge.value)}\n </div>\n )}\n </div>\n )\n }\n\n const node = data.data\n\n // Hierarchy nodes have a __hierarchyNode with a .parent chain.\n // Show ancestor breadcrumb: grandparent → parent → **node**\n const hNode = node?.__hierarchyNode\n if (hNode) {\n const ancestors: string[] = []\n let cur = hNode\n while (cur) {\n const name = cur.data?.name ?? cur.data?.id ?? node.id\n if (name != null) ancestors.unshift(String(name))\n cur = cur.parent\n }\n // Drop root (first entry) from the breadcrumb — it's usually unnamed\n if (ancestors.length > 1) ancestors.shift()\n\n const last = ancestors.length - 1\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div>\n {ancestors.map((name, i) => (\n <span key={i}>\n {i > 0 && (\n <span style={{ margin: \"0 3px\", opacity: 0.5 }}>{\" → \"}</span>\n )}\n {i === last ? (\n <strong>{name}</strong>\n ) : (\n <span style={{ opacity: 0.7 }}>{name}</span>\n )}\n </span>\n ))}\n </div>\n {node.value != null && node.value > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n {typeof node.value === \"number\"\n ? node.value.toLocaleString()\n : String(node.value)}\n </div>\n )}\n </div>\n )\n }\n\n // Compute degree centrality from source/target links\n const degree = (node.sourceLinks?.length || 0) + (node.targetLinks?.length || 0)\n const weightedDegree = (node.sourceLinks || []).reduce((s: number, e: any) => s + (e.value || 0), 0)\n + (node.targetLinks || []).reduce((s: number, e: any) => s + (e.value || 0), 0)\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600 }}>{node.id}</div>\n {node.value != null && node.value > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Total:{\" \"}\n {typeof node.value === \"number\"\n ? node.value.toLocaleString()\n : String(node.value)}\n </div>\n )}\n {degree > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Connections: {degree}\n {weightedDegree !== degree && ` (weighted: ${weightedDegree.toLocaleString()})`}\n </div>\n )}\n </div>\n )\n}\n\n// ── StreamNetworkFrame ─────────────────────────────────────────────────\n\nconst StreamNetworkFrame = forwardRef<\n StreamNetworkFrameHandle,\n StreamNetworkFrameProps\n>(function StreamNetworkFrame(props, ref) {\n const {\n chartType,\n nodes: nodesProp,\n edges: edgesProp,\n data: dataProp,\n initialEdges,\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n childrenAccessor,\n hierarchySum,\n orientation = \"horizontal\",\n nodeAlign = \"justify\",\n nodePaddingRatio = 0.05,\n nodeWidth = 15,\n iterations = 300,\n forceStrength = 0.1,\n padAngle = 0.01,\n groupWidth = 20,\n sortGroups,\n edgeSort,\n treeOrientation = \"vertical\",\n edgeType = \"curve\",\n padding,\n paddingTop,\n tensionConfig: tensionConfigProp,\n showParticles = false,\n particleStyle: particleStyleProp,\n nodeStyle,\n edgeStyle,\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n edgeOpacity = 0.5,\n colorByDepth = false,\n nodeSize = 8,\n nodeSizeRange = [5, 20],\n nodeLabel,\n showLabels = true,\n size = DEFAULT_SIZE,\n margin: marginProp,\n className,\n background,\n enableHover = true,\n tooltipContent,\n onTopologyChange,\n annotations,\n svgAnnotationRules,\n legend,\n title,\n foregroundGraphics,\n backgroundGraphics\n } = props\n\n const baseMargin = CENTERED_TYPES.has(chartType) ? CENTERED_MARGIN : DEFAULT_MARGIN\n const margin = { ...baseMargin, ...marginProp }\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n const tensionConfig = useMemo(\n () => ({ ...DEFAULT_TENSION_CONFIG, ...tensionConfigProp }),\n [tensionConfigProp]\n )\n\n const particleStyle = useMemo(\n () => ({ ...DEFAULT_PARTICLE_STYLE, ...particleStyleProp }),\n [particleStyleProp]\n )\n\n // ── Pipeline config ──────────────────────────────────────────────────\n\n const pipelineConfig = useMemo(\n (): NetworkPipelineConfig => ({\n chartType,\n nodeIDAccessor,\n sourceAccessor,\n targetAccessor,\n valueAccessor,\n childrenAccessor,\n hierarchySum,\n orientation,\n nodeAlign,\n nodePaddingRatio,\n nodeWidth,\n iterations,\n forceStrength,\n padAngle,\n groupWidth,\n sortGroups,\n edgeSort,\n treeOrientation,\n edgeType,\n padding,\n paddingTop,\n tensionConfig,\n showParticles,\n particleStyle,\n nodeStyle,\n edgeStyle,\n nodeLabel,\n showLabels,\n colorBy,\n colorScheme,\n edgeColorBy,\n edgeOpacity,\n colorByDepth,\n nodeSize,\n nodeSizeRange\n }),\n [\n chartType,\n nodeIDAccessor,\n sourceAccessor,\n targetAccessor,\n valueAccessor,\n childrenAccessor,\n hierarchySum,\n orientation,\n nodeAlign,\n nodePaddingRatio,\n nodeWidth,\n iterations,\n forceStrength,\n padAngle,\n groupWidth,\n sortGroups,\n edgeSort,\n treeOrientation,\n edgeType,\n padding,\n paddingTop,\n tensionConfig,\n showParticles,\n particleStyle,\n nodeStyle,\n edgeStyle,\n nodeLabel,\n showLabels,\n colorBy,\n colorScheme,\n edgeColorBy,\n edgeOpacity,\n colorByDepth,\n nodeSize,\n nodeSizeRange\n ]\n )\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const lastFrameTimeRef = useRef(0)\n const dirtyRef = useRef(true)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── Store ────────────────────────────────────────────────────────────\n\n const storeRef = useRef<NetworkPipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new NetworkPipelineStore(pipelineConfig)\n }\n\n // ── State ────────────────────────────────────────────────────────────\n\n const [hoverData, setHoverData] = useState<{\n type: \"node\" | \"edge\"\n data: any\n x: number\n y: number\n } | null>(null)\n const [layoutVersion, setLayoutVersion] = useState(0)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n const hoverRef = useRef<typeof hoverData>(null)\n\n // ── Color functions ──────────────────────────────────────────────────\n\n const nodeColorMap = useRef(new Map<string, string>())\n const colorIndexRef = useRef(0)\n\n const getNodeColor = useCallback(\n (node: RealtimeNode): string => {\n if (typeof colorBy === \"function\") return colorBy(node)\n if (typeof colorBy === \"string\" && node.data) {\n const val = node.data[colorBy]\n if (val !== undefined) {\n if (!nodeColorMap.current.has(String(val))) {\n const colors = Array.isArray(colorScheme)\n ? colorScheme\n : DEFAULT_COLORS\n nodeColorMap.current.set(\n String(val),\n colors[colorIndexRef.current++ % colors.length]\n )\n }\n return nodeColorMap.current.get(String(val))!\n }\n }\n if (!nodeColorMap.current.has(node.id)) {\n const colors = Array.isArray(colorScheme)\n ? colorScheme\n : DEFAULT_COLORS\n nodeColorMap.current.set(\n node.id,\n colors[colorIndexRef.current++ % colors.length]\n )\n }\n return nodeColorMap.current.get(node.id)!\n },\n [colorBy, colorScheme]\n )\n\n const getEdgeColor = useCallback(\n (edge: RealtimeEdge): string => {\n if (typeof edgeColorBy === \"function\") return edgeColorBy(edge)\n const sourceNode =\n typeof edge.source === \"object\" ? edge.source : null\n const targetNode =\n typeof edge.target === \"object\" ? edge.target : null\n\n if (edgeColorBy === \"target\" && targetNode) {\n return getNodeColor(targetNode)\n }\n if (sourceNode) {\n return getNodeColor(sourceNode)\n }\n return \"#999\"\n },\n [edgeColorBy, getNodeColor]\n )\n\n const getParticleColor = useCallback(\n (edge: RealtimeEdge): string => {\n const colorByMode = particleStyle.colorBy || \"source\"\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n\n if (colorByMode === \"target\" && targetNode) {\n return getNodeColor(targetNode)\n }\n if (sourceNode) {\n return getNodeColor(sourceNode)\n }\n return \"#999\"\n },\n [particleStyle.colorBy, getNodeColor]\n )\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const isContinuous =\n chartType === \"sankey\" && showParticles\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current && !isContinuous) return\n if (!rafRef.current) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }, [isContinuous])\n\n // Update config when props change\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── Layout execution ─────────────────────────────────────────────────\n\n const runLayout = useCallback(() => {\n const store = storeRef.current\n if (!store) return\n\n store.runLayout([adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n\n setLayoutVersion(store.layoutVersion)\n\n if (onTopologyChange) {\n const { nodes, edges } = store.getLayoutData()\n onTopologyChange(nodes, edges)\n }\n }, [adjustedWidth, adjustedHeight, onTopologyChange])\n\n // ── Push API ─────────────────────────────────────────────────────────\n\n const pushEdge = useCallback(\n (edge: EdgePush) => {\n const store = storeRef.current\n if (!store) return\n const needsRelayout = store.ingestEdge(edge)\n if (needsRelayout) {\n runLayout()\n }\n scheduleRender()\n },\n [runLayout, scheduleRender]\n )\n\n const pushManyEdges = useCallback(\n (edges: EdgePush[]) => {\n const store = storeRef.current\n if (!store) return\n let needsRelayout = false\n for (const edge of edges) {\n if (store.ingestEdge(edge)) {\n needsRelayout = true\n }\n }\n if (needsRelayout) {\n runLayout()\n }\n scheduleRender()\n },\n [runLayout, scheduleRender]\n )\n\n const clearAll = useCallback(() => {\n storeRef.current?.clear()\n nodeColorMap.current.clear()\n colorIndexRef.current = 0\n setLayoutVersion(0)\n setHoverData(null)\n hoverRef.current = null\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n const forceRelayout = useCallback(() => {\n const store = storeRef.current\n if (!store) return\n store.tension += 999\n runLayout()\n scheduleRender()\n }, [runLayout, scheduleRender])\n\n useImperativeHandle(\n ref,\n () => ({\n push: pushEdge,\n pushMany: pushManyEdges,\n clear: clearAll,\n getTopology: () =>\n storeRef.current?.getLayoutData() ?? { nodes: [], edges: [] },\n relayout: forceRelayout,\n getTension: () => storeRef.current?.tension ?? 0\n }),\n [pushEdge, pushManyEdges, clearAll, forceRelayout]\n )\n\n // ── Bounded data ingestion ───────────────────────────────────────────\n\n // Determine if this is a hierarchical chart type\n const isHierarchical = [\"tree\", \"cluster\", \"treemap\", \"circlepack\", \"partition\"].includes(chartType)\n // Resolve hierarchy root: `data` prop or single-object `edges` prop\n const hierarchyRoot = isHierarchical ? (dataProp || (!Array.isArray(edgesProp) ? edgesProp : undefined)) : undefined\n\n useEffect(() => {\n const store = storeRef.current\n if (!store) return\n\n if (isHierarchical && hierarchyRoot) {\n // Hierarchy data: single root object\n store.ingestHierarchy(hierarchyRoot, [adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n scheduleRender()\n } else {\n // Graph data: nodes + edges arrays\n const rawNodes = nodesProp || []\n const rawEdges = Array.isArray(edgesProp) ? edgesProp : []\n\n if (rawNodes.length === 0 && rawEdges.length === 0) return\n\n store.ingestBounded(rawNodes, rawEdges, [adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n scheduleRender()\n }\n }, [nodesProp, edgesProp, dataProp, hierarchyRoot, isHierarchical, adjustedWidth, adjustedHeight, pipelineConfig, scheduleRender])\n\n // ── Initial streaming data ───────────────────────────────────────────\n\n useEffect(() => {\n if (initialEdges && initialEdges.length > 0) {\n pushManyEdges(initialEdges)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!enableHover) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (\n chartX < 0 ||\n chartX > adjustedWidth ||\n chartY < 0 ||\n chartY > adjustedHeight\n ) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store) return\n\n const hit = findNearestNetworkNode(\n store.sceneNodes,\n store.sceneEdges,\n chartX,\n chartY\n )\n\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n return\n }\n\n const hover = {\n type: hit.type,\n data: hit.datum,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverData(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = performance.now()\n const deltaTime = lastFrameTimeRef.current\n ? Math.min((now - lastFrameTimeRef.current) / 1000, 0.1)\n : 0.016\n lastFrameTimeRef.current = now\n\n // Advance transition animation\n const isTransitioning = store.advanceTransition(now)\n if (isTransitioning || dirtyRef.current) {\n // Rebuild scene for current positions\n store.buildScene([adjustedWidth, adjustedHeight])\n }\n\n // DPR setup\n const dpr =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n ctx.translate(margin.left, margin.top)\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n // Render edges first (they go behind nodes)\n networkEdgeRenderer(ctx, store.sceneEdges)\n\n // Render nodes\n networkRectRenderer(ctx, store.sceneNodes)\n networkCircleRenderer(ctx, store.sceneNodes)\n networkArcRenderer(ctx, store.sceneNodes)\n\n // Render particles (sankey only)\n if (showParticles && store.particlePool) {\n const edges = Array.from(store.edges.values())\n if (edges.length > 0) {\n spawnNetworkParticles(\n store.particlePool,\n edges,\n deltaTime,\n particleStyle\n )\n const speed = (particleStyle.speedMultiplier ?? 1) * 0.5\n store.particlePool.step(deltaTime, speed, edges)\n renderNetworkParticles(\n ctx,\n store.particlePool,\n edges,\n particleStyle,\n getParticleColor\n )\n }\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Update SVG overlay when layout changes\n if (wasDirty || isTransitioning) {\n setAnnotationFrame((f) => f + 1)\n }\n\n // Schedule next frame for continuous rendering (particles/transitions)\n if (isContinuous || isTransitioning) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, background, scheduleRender])\n\n // ── Tooltip ──────────────────────────────────────────────────────────\n\n const tooltipElement =\n enableHover && hoverData ? (\n <div\n className=\"stream-network-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + hoverData.x,\n top: margin.top + hoverData.y,\n transform: `translate(${\n hoverData.x > adjustedWidth * 0.6\n ? \"calc(-100% - 12px)\"\n : \"12px\"\n }, ${\n hoverData.y < adjustedHeight * 0.3\n ? \"4px\"\n : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 2\n }}\n >\n {tooltipContent ? (\n tooltipContent(hoverData)\n ) : (\n <DefaultNetworkTooltip data={hoverData} />\n )}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n const store = storeRef.current\n\n return (\n <div\n className={`stream-network-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={enableHover ? onMouseMove : undefined}\n onMouseLeave={enableHover ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {backgroundGraphics}\n </g>\n </svg>\n )}\n\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0\n }}\n />\n\n <NetworkSVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n labels={store?.labels || []}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n\n {tooltipElement}\n </div>\n )\n})\n\nStreamNetworkFrame.displayName = \"StreamNetworkFrame\"\nexport default StreamNetworkFrame\n","// from Evan Wang's https://github.com/tinker10/D3-Labeler\nexport default function() {\n let lab = [],\n anc = [],\n w = 1, // box width\n h = 1, // box width\n labeler = {\n start: x => {},\n width: x => {},\n height: x => {},\n label: x => {},\n anchor: x => {},\n alt_energy: x => {},\n alt_schedule: x => {}\n }\n\n let max_move = 5.0,\n max_angle = 0.5\n\n // weights\n let w_len = 0.2, // leader line length\n w_inter = 1.0, // leader line intersection\n w_lab2 = 30.0, // label-label overlap\n w_lab_anc = 30.0, // label-anchor overlap\n w_orient = 3.0 // orientation bias\n\n // booleans for user defined functions\n let user_energy = false,\n user_schedule = false\n\n let user_defined_energy, user_defined_schedule\n\n const energy = function(index) {\n // energy function, tailored for label placement\n\n let m = lab.length,\n ener = 0,\n dx = lab[index].x - anc[index].x,\n dy = anc[index].y - lab[index].y,\n dist = Math.sqrt(dx * dx + dy * dy),\n overlap = true,\n amount = 0,\n theta = 0\n\n // penalty for length of leader line\n if (dist > 0) ener += dist * w_len\n\n // label orientation bias\n dx /= dist\n dy /= dist\n if (dx > 0 && dy > 0) {\n ener += 0 * w_orient\n } else if (dx < 0 && dy > 0) {\n ener += 1 * w_orient\n } else if (dx < 0 && dy < 0) {\n ener += 2 * w_orient\n } else {\n ener += 3 * w_orient\n }\n\n let x21 = lab[index].x,\n y21 = lab[index].y - lab[index].height + 2.0,\n x22 = lab[index].x + lab[index].width,\n y22 = lab[index].y + 2.0\n let x11, x12, y11, y12, x_overlap, y_overlap, overlap_area\n\n for (let i = 0; i < m; i++) {\n if (i !== index) {\n // penalty for intersection of leader lines\n const overlap = intersect(\n anc[index].x,\n lab[index].x,\n anc[i].x,\n lab[i].x,\n anc[index].y,\n lab[index].y,\n anc[i].y,\n lab[i].y\n )\n if (overlap) ener += w_inter\n\n // penalty for label-label overlap\n x11 = lab[i].x\n y11 = lab[i].y - lab[i].height + 2.0\n x12 = lab[i].x + lab[i].width\n y12 = lab[i].y + 2.0\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab2\n }\n\n // penalty for label-anchor overlap\n x11 = anc[i].x - anc[i].r\n y11 = anc[i].y - anc[i].r\n x12 = anc[i].x + anc[i].r\n y12 = anc[i].y + anc[i].r\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab_anc\n }\n return ener\n }\n\n const mcmove = function(currT) {\n // Monte Carlo translation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random translation\n lab[i].x += (Math.random() - 0.5) * max_move\n lab[i].y += (Math.random() - 0.5) * max_move\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const mcrotate = function(currT) {\n // Monte Carlo rotation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random angle\n let angle = (Math.random() - 0.5) * max_angle\n\n let s = Math.sin(angle)\n let c = Math.cos(angle)\n\n // translate label (relative to anchor at origin):\n lab[i].x -= anc[i].x\n lab[i].y -= anc[i].y\n\n // rotate label\n let x_new = lab[i].x * c - lab[i].y * s,\n y_new = lab[i].x * s + lab[i].y * c\n\n // translate label back\n lab[i].x = x_new + anc[i].x\n lab[i].y = y_new + anc[i].y\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const intersect = function(x1, x2, x3, x4, y1, y2, y3, y4) {\n // returns true if two lines intersect, else false\n // from http://paulbourke.net/geometry/lineline2d/\n\n let mua, mub\n let denom, numera, numerb\n\n denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)\n numera = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)\n numerb = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)\n\n /* Is the intersection along the the segments */\n mua = numera / denom\n mub = numerb / denom\n if (!(mua < 0 || mua > 1 || mub < 0 || mub > 1)) {\n return true\n }\n return false\n }\n\n const cooling_schedule = function(currT, initialT, nsweeps) {\n // linear cooling\n return currT - initialT / nsweeps\n }\n\n labeler.start = function(nsweeps) {\n // main simulated annealing function\n let m = lab.length,\n currT = 1.0,\n initialT = 1.0\n\n for (let i = 0; i < nsweeps; i++) {\n for (let j = 0; j < m; j++) {\n if (Math.random() < 0.5) {\n mcmove(currT)\n } else {\n mcrotate(currT)\n }\n }\n currT = cooling_schedule(currT, initialT, nsweeps)\n }\n }\n\n labeler.width = function(x) {\n // users insert graph width\n if (!arguments.length) return w\n w = x\n return labeler\n }\n\n labeler.height = function(x) {\n // users insert graph height\n if (!arguments.length) return h\n h = x\n return labeler\n }\n\n labeler.label = function(x) {\n // users insert label positions\n if (!arguments.length) return lab\n lab = x\n return labeler\n }\n\n labeler.anchor = function(x) {\n // users insert anchor positions\n if (!arguments.length) return anc\n anc = x\n return labeler\n }\n\n labeler.alt_energy = function(x) {\n // user defined energy\n if (!arguments.length) return energy\n user_defined_energy = x\n user_energy = true\n return labeler\n }\n\n labeler.alt_schedule = function(x) {\n // user defined cooling_schedule\n if (!arguments.length) return cooling_schedule\n user_defined_schedule = x\n user_schedule = true\n return labeler\n }\n\n return labeler\n}\n/*eslint-enable */\n","import labeler from \"./d3labeler\"\nimport { AnnotationProps } from \"../types/annotationTypes\"\n\ntype NoteType = {\n props: AnnotationProps\n}\n\ntype AnnotationTypes = \"marginalia\" | \"bump\" | false\n\ninterface Layout {\n type: AnnotationTypes\n orient?: \"nearest\" | \"left\" | \"right\" | \"top\" | \"bottom\" | string[]\n characterWidth?: number\n lineWidth?: number\n lineHeight?: number\n padding?: number\n iterations?: number\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n marginOffset?: number\n}\n\nconst basicLabelSizeFunction = (\n noteData,\n characterWidth,\n lineHeight,\n padding\n) => {\n const text = noteData.note.label || noteData.note.title\n\n const textLength = text.length\n const wrap = noteData.note.wrap || 120\n const width = Math.min(wrap, textLength * characterWidth) + padding * 2\n const height =\n Math.ceil((textLength * characterWidth) / 120) * lineHeight + padding * 2\n return [width, height]\n}\n\nexport function bumpAnnotations(\n adjustableNotes: NoteType[],\n processor: Layout,\n size: number[],\n propsPointSizeFunction?: Function,\n propsLabelSizeFunction?: Function\n) {\n const {\n padding = 1,\n characterWidth = 8,\n lineHeight = 20,\n iterations = 500,\n pointSizeFunction = propsPointSizeFunction,\n labelSizeFunction = propsLabelSizeFunction || basicLabelSizeFunction\n } = processor\n\n const labels = adjustableNotes.map((d, i) => {\n const anchorX =\n (d.props.noteData.x[0] || d.props.noteData.x) +\n (d.props.noteData.dx !== undefined\n ? d.props.noteData.dx\n : ((i % 3) - 1) * -10)\n const anchorY =\n (d.props.noteData.y[0] || d.props.noteData.y) +\n (d.props.noteData.dy !== undefined\n ? d.props.noteData.dy\n : ((i % 3) - 1) * 10)\n\n const [labelWidth, labelHeight] = labelSizeFunction(\n d.props.noteData,\n characterWidth,\n lineHeight,\n padding\n )\n return {\n x: anchorX,\n y: anchorY,\n above: anchorY < d.props.noteData.y,\n left: anchorX < d.props.noteData.x,\n width: labelWidth,\n height: labelHeight,\n type: \"label\",\n name: \"\",\n originalNote: d\n }\n })\n\n const points = adjustableNotes.map(d => ({\n x: d.props.noteData.x,\n y: d.props.noteData.y,\n fx: d.props.noteData.x,\n fy: d.props.noteData.y,\n r: (pointSizeFunction && pointSizeFunction(d.props.noteData)) || 5,\n type: \"point\",\n originalNote: d\n }))\n\n const instantiatedLabeler = labeler()\n\n instantiatedLabeler.label(labels)\n instantiatedLabeler.anchor(points)\n instantiatedLabeler.width(size[0])\n instantiatedLabeler.height(size[1])\n instantiatedLabeler.start(iterations)\n\n labels.forEach(d => {\n if (d.type === \"label\") {\n const adjusted = adjustedXY(d.originalNote.props.noteData, d, padding)\n d.originalNote.props.noteData.nx = adjusted[0]\n d.originalNote.props.noteData.ny = adjusted[1]\n }\n })\n\n return adjustableNotes\n}\n\nfunction adjustedXY(note, calculated, padding) {\n if (note.y > calculated.y) {\n //below\n return [\n calculated.x + calculated.width / 2 + padding / 2,\n calculated.y - calculated.height + padding / 2\n ]\n }\n return [calculated.x + calculated.width / 2, calculated.y]\n}\n","import * as React from \"react\"\n\nimport { AnnotationProps } from \"./types/annotationTypes\"\n\nfunction wrapText(\n text: string,\n wrap: number = 120,\n charWidth: number = 8\n): string[] {\n if (!text) return []\n const maxChars = Math.max(1, Math.floor(wrap / charWidth))\n const words = text.split(/\\s+/)\n const lines: string[] = []\n let currentLine = \"\"\n\n for (const word of words) {\n if (currentLine && currentLine.length + 1 + word.length > maxChars) {\n lines.push(currentLine)\n currentLine = word\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word\n }\n }\n if (currentLine) lines.push(currentLine)\n return lines\n}\n\nfunction bracketPath(\n type: string,\n span: number,\n depth: number,\n isVertical: boolean\n): string {\n if (type === \"curly\") {\n if (isVertical) {\n return `M0,0 C${depth * 0.6},0 ${depth * 0.4},${span / 2} ${depth},${span / 2} C${depth * 0.4},${span / 2} ${depth * 0.6},${span} 0,${span}`\n }\n return `M0,0 C0,${depth * 0.6} ${span / 2},${depth * 0.4} ${span / 2},${depth} C${span / 2},${depth * 0.4} ${span},${depth * 0.6} ${span},0`\n }\n // square bracket\n if (isVertical) {\n return `M0,0 L${depth},0 L${depth},${span} L0,${span}`\n }\n return `M0,0 L0,${depth} L${span},${depth} L${span},0`\n}\n\nfunction renderNote(\n note: {\n label?: string\n title?: string\n orientation?: string\n align?: string\n wrap?: number\n noWrap?: boolean\n },\n dx: number,\n dy: number,\n color?: string\n) {\n if (!note) return <g className=\"annotation-note\" />\n const {\n label,\n title,\n orientation: explicitOrientation,\n align: explicitAlign,\n wrap = 120,\n noWrap\n } = note\n\n if (!label && !title) return <g className=\"annotation-note\" />\n\n let orientation = explicitOrientation\n if (!orientation) {\n orientation = Math.abs(dx) > Math.abs(dy) ? \"leftRight\" : \"topBottom\"\n }\n\n let align = explicitAlign\n if (!align || align === \"dynamic\") {\n if (orientation === \"topBottom\") {\n align = dx >= 0 ? \"left\" : \"right\"\n } else {\n align = dy >= 0 ? \"top\" : \"bottom\"\n }\n }\n\n let textAnchor: \"start\" | \"middle\" | \"end\" = \"start\"\n if (orientation === \"topBottom\") {\n if (align === \"right\") textAnchor = \"end\"\n else if (align === \"middle\") textAnchor = \"middle\"\n } else {\n textAnchor = dx >= 0 ? \"start\" : \"end\"\n }\n\n const lineHeight = 16\n const padding = 4\n const titleLines =\n title ? (noWrap ? [title] : wrapText(title, wrap)) : []\n const labelLines =\n label ? (noWrap ? [label] : wrapText(label, wrap)) : []\n\n // For leftRight orientation, offset text horizontally away from the note-line\n const textX = orientation === \"leftRight\"\n ? (textAnchor === \"end\" ? -padding : padding)\n : 0\n\n let yOffset = 0\n const textElements: React.ReactElement[] = []\n\n if (titleLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-title\"\n className=\"annotation-note-title\"\n fill={color || undefined}\n textAnchor={textAnchor}\n fontWeight=\"bold\"\n >\n {titleLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? 0 : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n yOffset = titleLines.length * lineHeight\n }\n\n if (labelLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-label\"\n className=\"annotation-note-label\"\n fill={color || undefined}\n textAnchor={textAnchor}\n y={yOffset}\n >\n {labelLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? lineHeight : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n }\n\n let noteLine = null\n if ((title || label) && (dx !== 0 || dy !== 0)) {\n if (orientation === \"topBottom\") {\n const lineWidth = Math.min(wrap, 120)\n let x1 = 0\n let x2 = lineWidth\n if (textAnchor === \"end\") {\n x1 = -lineWidth\n x2 = 0\n } else if (textAnchor === \"middle\") {\n x1 = -lineWidth / 2\n x2 = lineWidth / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={x1}\n x2={x2}\n y1={0}\n y2={0}\n stroke={color || \"currentColor\"}\n />\n )\n } else {\n const totalHeight =\n (titleLines.length + labelLines.length) * lineHeight +\n (labelLines.length > 0 ? lineHeight : 0)\n let y1 = 0\n let y2 = totalHeight\n if (align === \"bottom\") {\n y1 = -totalHeight\n y2 = 0\n } else if (align === \"middle\") {\n y1 = -totalHeight / 2\n y2 = totalHeight / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={0}\n x2={0}\n y1={y1}\n y2={y2}\n stroke={color || \"currentColor\"}\n />\n )\n }\n }\n\n // Compute vertical offset for note content based on orientation and alignment.\n // The label's first tspan adds an extra lineHeight gap below the title,\n // so total visual height is larger when a label is present.\n const totalLines = titleLines.length + labelLines.length\n const totalTextHeight = totalLines * lineHeight\n const labelGap = labelLines.length > 0 ? lineHeight : 0\n const visualHeight = totalTextHeight + labelGap\n let contentYOffset = 0\n\n if (orientation === \"topBottom\") {\n if (dy < 0) {\n contentYOffset = -visualHeight\n }\n } else if (orientation === \"leftRight\") {\n if (align === \"middle\") {\n contentYOffset = -(visualHeight / 2)\n } else if (align === \"bottom\" || dy < 0) {\n contentYOffset = -visualHeight\n }\n }\n\n const contentTransform = contentYOffset !== 0\n ? `translate(0,${contentYOffset})`\n : undefined\n\n return (\n <g className=\"annotation-note\" transform={`translate(${dx},${dy})`}>\n <g className=\"annotation-note-content\" transform={contentTransform}>{textElements}</g>\n {noteLine}\n </g>\n )\n}\n\nfunction renderSubject(\n type: string,\n subject: any,\n color?: string,\n annotX?: number,\n annotY?: number\n) {\n const elements: React.ReactElement[] = []\n\n switch (type) {\n case \"callout-circle\": {\n const totalRadius =\n (subject?.radius || 0) + (subject?.radiusPadding || 0)\n if (totalRadius > 0) {\n elements.push(\n <circle\n key=\"subject-circle\"\n r={totalRadius}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-rect\": {\n const width = subject?.width || 0\n const height = subject?.height || 0\n if (width > 0 || height > 0) {\n elements.push(\n <rect\n key=\"subject-rect\"\n width={width}\n height={height}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-custom\": {\n if (subject?.custom) {\n const customElements = Array.isArray(subject.custom)\n ? subject.custom\n : [subject.custom]\n elements.push(...customElements)\n }\n break\n }\n case \"xy-threshold\": {\n const x = annotX || 0\n const y = annotY || 0\n\n if (subject?.x !== undefined) {\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n const sx = (subject.x || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={sx}\n y1={y1}\n x2={sx}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y !== undefined) {\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n const sy = (subject.y || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={sy}\n x2={x2}\n y2={sy}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.x1 !== undefined || subject?.x2 !== undefined) {\n // Horizontal threshold line when only x1/x2 provided (no subject.x or subject.y)\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={0}\n x2={x2}\n y2={0}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y1 !== undefined || subject?.y2 !== undefined) {\n // Vertical threshold line when only y1/y2 provided (no subject.x or subject.y)\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={0}\n y1={y1}\n x2={0}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n }\n break\n }\n case \"bracket\": {\n const bracketType = subject?.type || \"curly\"\n const span = subject?.width ?? subject?.height\n const depth = subject?.depth || 30\n const isVertical = subject?.width === undefined\n\n if (span !== undefined) {\n elements.push(\n <path\n key=\"bracket-path\"\n d={bracketPath(bracketType, span, depth, isVertical)}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n }\n\n return <g className=\"annotation-subject\">{elements}</g>\n}\n\nfunction renderConnector(\n dx: number,\n dy: number,\n connector: any,\n color?: string,\n type?: string,\n subject?: any\n) {\n const elements: React.ReactElement[] = []\n\n let startX = 0\n let startY = 0\n\n if (\n (type === \"callout-circle\" || type === \"label\") &&\n subject?.radius\n ) {\n const totalRadius =\n (subject.radius || 0) + (subject.radiusPadding || 0)\n if (totalRadius > 0 && (dx !== 0 || dy !== 0)) {\n const angle = Math.atan2(dy, dx)\n startX = Math.cos(angle) * totalRadius\n startY = Math.sin(angle) * totalRadius\n }\n } else if (type === \"callout-rect\" && subject) {\n const w = subject.width || 0\n const h = subject.height || 0\n if (w > 0 || h > 0) {\n const cx = w / 2\n const cy = h / 2\n const tdx = dx - cx\n const tdy = dy - cy\n if (tdx !== 0 || tdy !== 0) {\n const absTdx = Math.abs(tdx)\n const absTdy = Math.abs(tdy)\n const hw = w / 2\n const hh = h / 2\n const t =\n absTdx * hh > absTdy * hw ? hw / absTdx : hh / absTdy\n startX = cx + tdx * t\n startY = cy + tdy * t\n }\n }\n } else if (type === \"bracket\" && subject) {\n const width = subject.width\n const height = subject.height\n const depth = subject.depth || 30\n if (width !== undefined) {\n startX = width / 2\n startY = depth\n } else if (height !== undefined) {\n startX = depth\n startY = height / 2\n }\n }\n\n const connectorLength = Math.sqrt(\n (dx - startX) ** 2 + (dy - startY) ** 2\n )\n\n if (connectorLength > 0.5) {\n elements.push(\n <line\n key=\"connector-line\"\n x1={startX}\n y1={startY}\n x2={dx}\n y2={dy}\n stroke={color || \"currentColor\"}\n />\n )\n\n if (connector?.end === \"arrow\") {\n const arrowSize = 10\n const angleOffset = 16 / 180 * Math.PI\n const angle = Math.atan2(dy - startY, dx - startX)\n const a1x = startX + arrowSize * Math.cos(angle + angleOffset)\n const a1y = startY + arrowSize * Math.sin(angle + angleOffset)\n const a2x = startX + arrowSize * Math.cos(angle - angleOffset)\n const a2y = startY + arrowSize * Math.sin(angle - angleOffset)\n\n elements.push(\n <path\n key=\"connector-arrow\"\n d={`M${startX},${startY}L${a1x},${a1y}L${a2x},${a2y}Z`}\n fill={color || \"currentColor\"}\n stroke=\"none\"\n />\n )\n }\n }\n\n return <g className=\"annotation-connector\">{elements}</g>\n}\n\nfunction AnnotationRenderer(props: any) {\n const {\n x = 0,\n y = 0,\n dx: baseDx,\n dy: baseDy,\n nx,\n ny,\n note,\n connector,\n subject,\n type,\n color,\n className,\n disable,\n events = {},\n \"data-testid\": dataTestId\n } = props\n\n const disableSet = new Set(Array.isArray(disable) ? disable : [])\n\n let dx = baseDx || 0\n let dy = baseDy || 0\n\n if (nx !== undefined && nx !== null) dx = nx - x\n if (ny !== undefined && ny !== null) dy = ny - y\n\n const resolvedType = typeof type === \"string\" ? type : \"label\"\n\n // For bracket type, auto-position note at bracket midpoint tip\n if (resolvedType === \"bracket\" && subject && dx === 0 && dy === 0) {\n if (subject.width !== undefined) {\n dx = subject.width / 2\n const depthVal = subject.depth || 30\n dy = depthVal + (depthVal >= 0 ? 5 : -5)\n } else if (subject.height !== undefined) {\n const depthVal = subject.depth || 30\n dx = depthVal + (depthVal >= 0 ? 5 : -5)\n dy = subject.height / 2\n }\n }\n\n return (\n <g\n className={`annotation ${className || \"\"}`.trim()}\n transform={`translate(${x},${y})`}\n data-testid={dataTestId}\n {...events}\n >\n {!disableSet.has(\"connector\") && renderConnector(dx, dy, connector, color, resolvedType, subject)}\n {!disableSet.has(\"subject\") && renderSubject(resolvedType, subject, color, x, y)}\n {!disableSet.has(\"note\") && renderNote(note, dx, dy, color)}\n </g>\n )\n}\n\nexport default function SemioticAnnotation(props: AnnotationProps) {\n const { noteData } = props\n const { screenCoordinates } = noteData\n\n const annotationType =\n typeof noteData.type === \"string\" ? noteData.type : \"label\"\n\n const eventListeners = noteData.eventListeners || noteData.events || {}\n\n if (noteData.coordinates && screenCoordinates) {\n const setNX = noteData.nx || screenCoordinates[0][0] + noteData.dx\n const setNY = noteData.ny || screenCoordinates[0][1] + noteData.dy\n const notes = screenCoordinates.map((d, i) => {\n const subjectNote = Object.assign({}, noteData, {\n note: i === 0 ? noteData.note : { label: \"\" },\n x: d[0],\n y: d[1],\n nx: setNX,\n ny: setNY\n })\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={`multi-annotation-${i}`}\n {...subjectNote}\n type={annotationType}\n />\n )\n })\n\n return <g>{notes}</g>\n }\n\n const keyData = noteData.note || { title: \"none\", label: noteData.label }\n const annotationKey = `${keyData.label}-${keyData.title}-${noteData.i}`\n\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={annotationKey}\n events={eventListeners}\n {...noteData}\n type={annotationType}\n />\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useLayoutEffect\n} from \"react\"\n\nfunction useSyncExternalStoreShim<T>(\n subscribe: (cb: Function) => () => void,\n getSnapshot: () => T\n): T {\n const [value, setValue] = useState<T>(getSnapshot)\n useLayoutEffect(() => {\n return subscribe(() => setValue(getSnapshot))\n }, [subscribe])\n return value\n}\n\nexport function createStore(fn) {\n let Ctx = createContext(null)\n // Shared fallback source for when there's no provider in the tree.\n // This allows hooks to be called unconditionally (rules of hooks)\n // without crashing. The fallback state is inert (empty selections, etc.).\n let fallbackSource = createSource(fn)\n\n function Provider({ children }) {\n let source = useMemo(() => createSource(fn), [])\n\n return <Ctx.Provider value={source} children={children} />\n }\n\n let useSelector = (selector) => {\n let source = useContext(Ctx) ?? fallbackSource\n let getSnapshot = () => selector(source.getState())\n return useSyncExternalStoreShim(source.subscribe, getSnapshot)\n }\n\n return [Provider, useSelector]\n}\n\nfunction createSource(fn) {\n let events = new EventTarget()\n let state = fn(set)\n\n function set(fn) {\n state = Object.assign(state, fn(state))\n events.dispatchEvent(new CustomEvent(\"update\"))\n }\n\n function subscribe(cb) {\n events.addEventListener(\"update\", cb)\n return () => events.removeEventListener(\"update\", cb)\n }\n\n return {\n getState() {\n return state\n },\n subscribe\n }\n}\n","\"use client\"\nimport { createStore } from \"./createStore\"\n\nlet [TooltipProvider, useTooltip] = createStore((set) => ({\n tooltip: null,\n changeTooltip(tooltip) {\n set(() => ({ tooltip }))\n }\n}))\n\nexport { TooltipProvider, useTooltip }\n","import React from 'react'\n\nfunction marginOffsetFn(orient, axisSettings, marginOffset) {\n if (typeof marginOffset === \"number\") {\n return marginOffset\n }\n if (axisSettings && axisSettings.find((d) => d.props.orient === orient)) {\n return 50\n }\n return 10\n}\n\nconst keyFromSVGAnnotations = (\n adjustableAnnotations,\n annotationProcessor,\n size\n) => {\n return `${adjustableAnnotations\n .map(adjustedAnnotationKeyMapper)\n .join(\",\")}${JSON.stringify(annotationProcessor)}${size.join(\",\")}`\n}\n\nfunction adjustedAnnotationKeyMapper(d) {\n if (!d || !d.props || !d.props.noteData) {\n return \"\"\n }\n const { note = {} } = d.props.noteData\n const { label, title } = note\n const id =\n d.props.noteData.id || `${d.props.noteData.x}-${d.props.noteData.y}`\n return `${id}-${label}=${title}`\n}\n\nfunction safeStringify(value) {\n const seen = new Set()\n return JSON.stringify(value, (k, v) => {\n if (seen.has(v)) {\n return \"...\"\n }\n if (typeof v === \"object\") {\n seen.add(v)\n if (k === \"note\") {\n return `${v.label}-${v.title}`\n }\n if (k === \"connector\") {\n return `${v.end}-${v.type}`\n }\n if (k === \"subject\") {\n return `${v.radius}`\n }\n if (typeof v.column === \"object\") {\n return `${v.column.x}-${v.column.y}-${v.column.name}`\n }\n\n if (\n v.voronoiX ||\n v.voronoiY ||\n v.x ||\n v.y ||\n v.dx ||\n v.dy ||\n v.label ||\n v.type ||\n v.key ||\n v.hierarchicalID ||\n v.id ||\n v.name\n ) {\n return `${v.voronoiX}-${v.voronoiY}-${v.dx}-${v.dy}-${v.x}-${v.y}-${v.label}-${v.type}-${v.key}-${v.hierarchicalID}-${v.id}-${v.name}`\n }\n\n return \"...\"\n }\n return v\n })\n}\n\nfunction noteDataWidth(noteData, charWidth = 8, layoutNoteWidth) {\n const { noteWidth = layoutNoteWidth } = noteData\n\n let noteWidthFn = noteWidth\n\n if (typeof noteWidth === \"number\") {\n noteWidthFn = () => noteWidth\n }\n\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const noteText = noteData.note.label || noteData.note.label || \"\"\n const width =\n (noteWidth && noteWidthFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 100\n : Math.min(wrap, noteText.length * charWidth))\n return width\n}\n\nfunction noteDataHeight(\n noteData,\n charWidth = 8,\n lineHeight = 20,\n layoutNoteHeight\n) {\n const { noteHeight = layoutNoteHeight } = noteData\n\n let noteHeightFn = noteHeight\n\n if (typeof noteHeight === \"number\") {\n noteHeightFn = () => noteHeight\n }\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const text = noteData.note.label || noteData.note.title || \"\"\n \n const height =\n (noteHeight && noteHeightFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 30\n : Math.ceil((text.length * charWidth) / wrap) * lineHeight +\n (noteData.note.label && noteData.note.title ? lineHeight : 0))\n\n return height\n}\n\nexport {\n marginOffsetFn,\n adjustedAnnotationKeyMapper,\n safeStringify,\n noteDataWidth,\n noteDataHeight,\n keyFromSVGAnnotations\n}\n","\"use client\"\n// modules\nimport * as React from \"react\"\nimport { useState, useEffect } from \"react\"\nimport { bumpAnnotations } from \"./../annotationLayerBehavior/annotationHandling\"\n\nimport Legend from \"./../Legend\"\nimport Annotation from \"./../Annotation\"\nimport labella from \"labella\"\nimport {\n AnnotationHandling,\n AnnotationTypes,\n AnnotationProps,\n AnnotationType\n} from \"./../types/annotationTypes\"\n\nimport { LegendProps } from \"./../types/legendTypes\"\n\nimport { useTooltip } from \"./../store/TooltipStore\"\nimport { marginOffsetFn, adjustedAnnotationKeyMapper, safeStringify, noteDataWidth, noteDataHeight, keyFromSVGAnnotations } from './helpers';\n\ninterface NoteType {\n key: string\n props: AnnotationProps\n}\n\nexport interface AnnotationLayerProps {\n legendSettings?: LegendProps\n margin: { top?: number; left?: number; right?: number; bottom?: number }\n size: number[]\n axes?: React.ReactNode[]\n annotationHandling?: AnnotationHandling | AnnotationTypes\n annotations: AnnotationType[]\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n svgAnnotationRule: Function\n htmlAnnotationRule: Function\n position?: number[]\n}\n\nexport interface UpdatedAnnotationLayerProps extends AnnotationLayerProps {\n voronoiHover: Function\n}\n\ninterface AnnotationLayerState {\n adjustedAnnotationsKey?: string\n adjustedAnnotationsDataVersion?: string\n adjustedAnnotations: Object[]\n fixedAnnotations: NoteType[]\n adjustableAnnotations: NoteType[]\n}\n\nconst processAnnotations = (\n adjustableAnnotations: NoteType[],\n annotationProcessor: AnnotationHandling,\n props: AnnotationLayerProps\n) => {\n \n const {\n layout = { type: false, noteHeight: undefined, noteWidth: undefined }\n } = annotationProcessor\n\n if (layout.type === false) {\n return adjustableAnnotations\n }\n\n const { noteWidth: layoutNoteHeight, noteHeight: layoutNoteWidth } = layout\n\n let { margin = { top: 0, bottom: 0, left: 0, right: 0 } } = props\n\n const { size, axes = [] } = props\n\n margin =\n typeof margin === \"number\"\n ? { top: margin, left: margin, right: margin, bottom: margin }\n : margin\n\n if (layout.type === \"bump\") {\n const adjustedAnnotations = bumpAnnotations(\n adjustableAnnotations,\n layout,\n size,\n props.pointSizeFunction,\n props.labelSizeFunction\n )\n return adjustedAnnotations\n } else if (layout.type === \"marginalia\") {\n const {\n marginOffset,\n orient = \"nearest\",\n characterWidth = 8,\n lineHeight = 20,\n padding = 2,\n axisMarginOverride = {}\n } = layout\n const finalOrientation =\n orient === \"nearest\"\n ? [\"left\", \"right\", \"top\", \"bottom\"]\n : Array.isArray(orient)\n ? orient\n : [orient]\n\n const leftOn = finalOrientation.find((d) => d === \"left\")\n const rightOn = finalOrientation.find((d) => d === \"right\")\n const topOn = finalOrientation.find((d) => d === \"top\")\n const bottomOn = finalOrientation.find((d) => d === \"bottom\")\n\n const leftNodes = []\n const rightNodes = []\n const topNodes = []\n const bottomNodes = []\n\n for (const aNote of adjustableAnnotations) {\n const noteData = aNote.props.noteData\n\n const noteX = noteData.x[0] || noteData.x\n const noteY = noteData.y[0] || noteData.y\n\n const leftDist = leftOn ? noteX : Infinity\n const rightDist = rightOn ? size[0] - noteX : Infinity\n const topDist = topOn ? noteY : Infinity\n const bottomDist = bottomOn ? size[1] - noteY : Infinity\n\n const minDist = Math.min(leftDist, rightDist, topDist, bottomDist)\n\n if (leftDist === minDist) {\n leftNodes.push(aNote)\n } else if (rightDist === minDist) {\n rightNodes.push(aNote)\n } else if (topDist === minDist) {\n topNodes.push(aNote)\n } else {\n bottomNodes.push(aNote)\n }\n }\n\n //Adjust the margins based on which regions are active\n\n const leftForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : bottomOn\n ? size[1]\n : size[1] + margin.bottom\n })\n .nodes(\n leftNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const rightForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : topOn\n ? 0\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : size[1] + margin.bottom\n })\n .nodes(\n rightNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const topForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : leftOn\n ? 0\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : size[0] + margin.right\n })\n .nodes(\n topNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : rightOn\n ? size[0]\n : size[0] + margin.right\n })\n .nodes(\n bottomNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomOffset = Math.max(\n ...bottomNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const topOffset = Math.max(\n ...topNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const leftOffset = Math.max(\n ...leftNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n const rightOffset = Math.max(\n ...rightNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n\n // const nodeOffsetHeight = Math.max()\n\n const leftSortedNodes = leftForce.nodes()\n const rightSortedNodes = rightForce.nodes()\n const topSortedNodes = topForce.nodes()\n const bottomSortedNodes = bottomForce.nodes()\n\n leftNodes.forEach((note, i) => {\n const x =\n 0 -\n leftSortedNodes[i].layerIndex * leftOffset -\n marginOffsetFn(\"left\", axes, marginOffset)\n\n const y = leftSortedNodes[i].currentPos\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"right\"\n }\n })\n\n rightNodes.forEach((note, i) => {\n const x =\n size[0] +\n rightSortedNodes[i].layerIndex * rightOffset +\n marginOffsetFn(\"right\", axes, marginOffset)\n const y = rightSortedNodes[i].currentPos\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"left\"\n }\n })\n\n topNodes.forEach((note, i) => {\n const x = topSortedNodes[i].currentPos\n const y =\n 0 -\n topSortedNodes[i].layerIndex * topOffset -\n marginOffsetFn(\"top\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n bottomNodes.forEach((note, i) => {\n const x = bottomSortedNodes[i].currentPos\n const y =\n size[1] +\n bottomSortedNodes[i].layerIndex * bottomOffset +\n marginOffsetFn(\"bottom\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n return adjustableAnnotations\n }\n return adjustableAnnotations\n}\n\nconst generateSVGAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): NoteType[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.svgAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst generateHTMLAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): Object[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.htmlAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst createAnnotations = (\n props: AnnotationLayerProps,\n state: AnnotationLayerState\n) => {\n let adjustedAnnotations = state.adjustedAnnotations,\n adjustableAnnotationsKey = state.adjustedAnnotationsKey,\n adjustableAnnotations = state.adjustableAnnotations,\n fixedAnnotations = state.fixedAnnotations\n\n let renderedSVGAnnotations = []\n let renderedHTMLAnnotations = []\n\n const adjustedAnnotationsKey = state.adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion = state.adjustedAnnotationsDataVersion\n\n const {\n annotations,\n annotationHandling = false,\n size,\n svgAnnotationRule,\n htmlAnnotationRule\n } = props\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n if (svgAnnotationRule) {\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n props,\n annotations\n )\n\n adjustableAnnotationsKey = keyFromSVGAnnotations(\n initialSVGAnnotations,\n annotationProcessor,\n size\n )\n\n if (annotationHandling === false) {\n adjustedAnnotations = adjustableAnnotations\n }\n\n if (\n adjustedAnnotations.length !== adjustableAnnotations.length ||\n adjustedAnnotationsKey !== adjustableAnnotationsKey ||\n adjustedAnnotationsDataVersion !== dataVersion\n ) {\n adjustedAnnotations = processAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n props\n )\n } else {\n //Handle when style or other attributes change\n adjustedAnnotations = adjustableAnnotations.map((d: NoteType, i) => {\n const oldAnnotation = adjustedAnnotations[i] as NoteType\n const newNoteData = {\n ...oldAnnotation.props.noteData,\n ...d.props.noteData\n }\n\n return <Annotation key={d.key} noteData={newNoteData} />\n })\n }\n\n renderedSVGAnnotations = [...adjustedAnnotations, ...fixedAnnotations]\n }\n\n if (htmlAnnotationRule) {\n renderedHTMLAnnotations = generateHTMLAnnotations(props, annotations)\n }\n\n return {\n svgAnnotations: renderedSVGAnnotations,\n htmlAnnotations: renderedHTMLAnnotations,\n adjustedAnnotations: adjustedAnnotations,\n adjustedAnnotationsKey: adjustableAnnotationsKey,\n adjustedAnnotationsDataVersion: dataVersion\n }\n}\n\nexport default function AnnotationLayer(props: AnnotationLayerProps) {\n const {\n legendSettings,\n margin,\n size,\n annotations: baseAnnotations,\n annotationHandling\n } = props\n\n const tooltip = useTooltip((store) => {\n return store.tooltip\n })\n\n let annotations =\n tooltip != null ? baseAnnotations.concat(tooltip) : baseAnnotations\n\n let changeTooltip = useTooltip((state) => state.changeTooltip)\n\n const voronoiHover = (d) => {\n changeTooltip(d)\n }\n\n const updatedAnnotationProps: UpdatedAnnotationLayerProps = {\n ...props,\n annotations,\n voronoiHover\n }\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n const [adjustedAnnotations, changeAdjustedAnnotations] = useState([])\n const [svgAnnotations, changeSVGAnnotations] = useState([])\n const [htmlAnnotations, changeHTMLAnnotations] = useState([])\n const [adjustedAnnotationsKey, changeAdjustedAnnotationsKey] = useState(\"\")\n const [adjustedAnnotationsDataVersion, changeAdjustedAnnotationsDataVersion] =\n useState(dataVersion)\n\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n updatedAnnotationProps,\n annotations\n )\n\n const adjustableAnnotations = initialSVGAnnotations.filter(\n (d) => d.props && d.props.noteData && !d.props.noteData.fixedPosition\n )\n\n const updatedAnnotationsKey = keyFromSVGAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n size\n )\n\n useEffect(() => {\n const fixedAnnotations = initialSVGAnnotations.filter(\n (d) => !d.props || !d.props.noteData || d.props.noteData.fixedPosition\n )\n\n const updatedState = createAnnotations(updatedAnnotationProps, {\n adjustedAnnotations,\n adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion,\n adjustableAnnotations,\n fixedAnnotations\n })\n\n changeAdjustedAnnotations(updatedState.adjustedAnnotations)\n changeAdjustedAnnotationsKey(updatedState.adjustedAnnotationsKey)\n changeAdjustedAnnotationsDataVersion(\n updatedState.adjustedAnnotationsDataVersion\n )\n changeSVGAnnotations(updatedState.svgAnnotations)\n changeHTMLAnnotations(updatedState.htmlAnnotations) \n }, [\n updatedAnnotationsKey,\n dataVersion,\n annotations.length,\n annotations.map((a) => safeStringify(a)).join(\"-\")\n ])\n\n let renderedLegend\n if (legendSettings) {\n const positionHash = {\n left: [15, 15],\n right: [size[0] + 15, 15]\n }\n const { position = \"right\", title = \"Legend\" } = legendSettings\n const legendPosition = positionHash[position]\n renderedLegend = (\n <g transform={`translate(${legendPosition.join(\",\")})`}>\n <Legend {...legendSettings} title={title} position={position} />\n </g>\n )\n }\n\n // If there are no annotations but we have a legend, render just the legend\n if (annotations.length === 0 && !legendSettings) {\n return null\n }\n\n return (\n <div\n className=\"annotation-layer\"\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n background: \"none\"\n }}\n >\n <svg\n className=\"annotation-layer-svg\"\n height={size[1]}\n width={size[0]}\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n left: `${margin.left}px`,\n top: `${margin.top}px`,\n overflow: \"visible\"\n }}\n >\n <g>\n {renderedLegend}\n {svgAnnotations}\n </g>\n </svg>\n <div\n className=\"annotation-layer-html\"\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n height: `${size[1]}px`,\n width: `${size[0]}px`,\n left: `${margin.left}px`,\n top: `${margin.top}px`\n }}\n >\n {htmlAnnotations}\n </div>\n </div>\n )\n}\n","import { sum } from \"d3-array\"\n\nimport { findFirstAccessorValue } from \"../data/multiAccessorUtils\"\n\nimport {\n ProjectedLine,\n ProjectedPoint,\n RawLine,\n RawSummary\n} from \"../types/generalTypes\"\nimport { AnnotationType } from \"../types/annotationTypes\"\n\nconst datesForUnique = (d) => (d instanceof Date ? d.getTime() : d)\n\ntype SummaryProjectionTypes = {\n data: Array<RawSummary>\n summaryDataAccessor: Array<Function>\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype LineProjectionTypes = {\n data: Array<RawLine>\n lineDataAccessor: Array<Function>\n xProp: string\n xPropTop?: string\n xPropBottom?: string\n yProp: string\n yPropTop?: string\n yPropBottom?: string\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype DifferenceLineProps = {\n data: Array<ProjectedLine>\n yProp: string\n yPropTop: string\n yPropBottom: string\n}\n\ntype StackedAreaTypes = {\n type: string\n data: Array<ProjectedLine>\n xProp: string\n yProp: string\n yPropMiddle: string\n sort?: (a: ProjectedLine, b: ProjectedLine) => number\n yPropTop: string\n yPropBottom: string\n}\n\ntype CumulativeLineTypes = {\n type: string\n data: Array<ProjectedLine>\n yPropMiddle: string\n yPropTop: string\n yPropBottom: string\n y1?: Function\n}\n\ntype LineChartTypes = {\n data: Array<ProjectedLine>\n y1?: Function\n x1?: Function\n yPropTop: string\n yPropMiddle: string\n yPropBottom: string\n xPropTop: string\n xPropMiddle: string\n xPropBottom: string\n}\n\nexport const projectSummaryData = ({\n data,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n}: SummaryProjectionTypes) => {\n const projectedData = []\n summaryDataAccessor.forEach((actualSummaryAccessor) => {\n xAccessor.forEach((actualXAccessor) => {\n yAccessor.forEach((actualYAccessor) => {\n const projection = (d: Object) =>\n actualSummaryAccessor(d).map((p, q) => [\n actualXAccessor(p, q),\n actualYAccessor(p, q)\n ])\n\n data.forEach((d) => {\n projectedData.push({\n ...d,\n _baseData: actualSummaryAccessor(d),\n _xyfCoordinates: projection(d)\n })\n })\n })\n })\n })\n\n return projectedData\n}\n\nexport const projectLineData = ({\n data,\n lineDataAccessor,\n xProp,\n xPropTop,\n xPropBottom,\n yProp,\n yPropTop,\n yPropBottom,\n xAccessor,\n yAccessor\n}: LineProjectionTypes) => {\n if (!Array.isArray(data)) {\n data = [data]\n }\n const projectedLine: Array<ProjectedLine> = []\n\n lineDataAccessor.forEach((actualLineAccessor, lineIndex) => {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n data.forEach((d: ProjectedLine) => {\n const originalLineData = { ...d, xIndex, yIndex, lineIndex }\n\n originalLineData.data = actualLineAccessor(d).map((p, q) => {\n const originalCoords = { data: p }\n\n originalCoords[xProp] = actualXAccessor(p, q)\n originalCoords[xPropTop] = originalCoords[xProp]\n originalCoords[xPropBottom] = originalCoords[xProp]\n originalCoords[yProp] = actualYAccessor(p, q)\n originalCoords[yPropTop] = originalCoords[yProp]\n originalCoords[yPropBottom] = originalCoords[yProp]\n\n return originalCoords\n })\n originalLineData.key = originalLineData.key || projectedLine.length\n projectedLine.push(originalLineData)\n })\n })\n })\n })\n\n return projectedLine\n}\n\nexport const differenceLine = ({\n data,\n yProp,\n yPropTop,\n yPropBottom\n}: DifferenceLineProps) => {\n data.forEach((l, i) => {\n l.data.forEach((point, q) => {\n const otherLine = i === 0 ? 1 : 0\n if (point[yProp] > data[otherLine].data[q][yProp]) {\n point[yPropBottom] = data[otherLine].data[q][yProp]\n point[yPropTop] = point[yProp]\n } else {\n point[yPropTop] = point[yProp]\n point[yPropBottom] = point[yProp]\n }\n })\n })\n\n return data\n}\n\nexport const stackedArea = ({\n type = \"stackedarea\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n sort,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const valueMap = new Map()\n const lineSums = data.map(() => 0)\n\n let lineIndex = 0\n for (const line of data) {\n /*\n After we calculate this, we then sort the lines (and the value used for the sorting is in this for loop)\n So, we need to know their original index order in order to use the naively populated coordinate array in valueMap\n Otherwise the coordinates in the map will be in different order than the sorted order of the lines\n */\n line.__lineIndex = lineIndex\n for (const coord of line.data) {\n const coordX = datesForUnique(coord[xProp])\n lineSums[lineIndex] += coord[yProp]\n if (!valueMap.has(coordX)) {\n valueMap.set(coordX, [])\n }\n valueMap.get(coordX)[lineIndex] = coord\n }\n lineIndex++\n }\n\n let stackSort = (a, b) => lineSums[b.key] - lineSums[a.key]\n if (type === \"stackedpercent-invert\" || type === \"stackedarea-invert\") {\n stackSort = (a, b) => lineSums[a.key] - lineSums[b.key]\n }\n sort = sort === undefined ? stackSort : sort\n\n if (sort !== null) {\n data = data.sort(sort)\n }\n\n const lineIndexSortLookup = data.map((line) => line.__lineIndex)\n\n for (const [, coordsAtX] of valueMap) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n const positiveStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] > 0 ? d[yProp] : 0\n )\n const negativeStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] < 0 ? d[yProp] : 0\n )\n\n for (const newIndex of lineIndexSortLookup) {\n const l = coordsAtX[newIndex]\n if (l) {\n if (l[yProp] < 0) {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / negativeStepTotal\n l.percent = percent\n if (type === \"linepercent\") {\n l[yPropBottom] =\n l[yPropBottom] =\n l[yPropTop] =\n l[yPropMiddle] =\n percent\n } else {\n const adjustment = negativeStepTotal >= 0 ? 0 : percent\n l[yPropBottom] =\n negativeStepTotal === 0\n ? 0\n : -(negativeOffset / negativeStepTotal)\n l[yPropTop] = l[yPropBottom] - adjustment\n l[yPropMiddle] = l[yPropBottom] - adjustment / 2\n }\n } else {\n l[yPropBottom] = negativeOffset\n l[yPropTop] = negativeOffset + l[yProp]\n l[yPropMiddle] = negativeOffset + l[yProp] / 2\n }\n negativeOffset += l[yProp]\n } else {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / positiveStepTotal\n l.percent = percent\n\n if (type === \"linepercent\") {\n l[yPropBottom] = l[yPropTop] = l[yPropMiddle] = percent\n } else {\n const adjustment = positiveStepTotal <= 0 ? 0 : percent\n l[yPropBottom] =\n positiveStepTotal === 0 ? 0 : positiveOffset / positiveStepTotal\n l[yPropTop] = l[yPropBottom] + adjustment\n l[yPropMiddle] = l[yPropBottom] + adjustment / 2\n }\n } else {\n l[yPropBottom] = positiveOffset\n l[yPropTop] = positiveOffset + l[yProp]\n l[yPropMiddle] = positiveOffset + l[yProp] / 2\n }\n positiveOffset += l[yProp]\n }\n }\n }\n }\n\n return data\n}\n\nexport const lineChart = ({\n data,\n y1,\n x1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n xPropTop,\n xPropMiddle,\n xPropBottom\n}: LineChartTypes) => {\n if (y1) {\n for (const line of data) {\n for (const point of line.data) {\n point[yPropBottom] = y1(point)\n // Use top position for hover so overlapping-area hover points\n // align with the visible line rather than compressing toward the baseline.\n point[yPropMiddle] = point[yPropTop]\n }\n }\n }\n\n if (x1) {\n for (const line of data) {\n for (const point of line.data) {\n point[xPropBottom] = x1(point)\n point[xPropMiddle] = (point[xPropBottom] + point[xPropTop]) / 2\n }\n }\n }\n\n return data\n}\n\nexport const cumulativeLine = ({\n data,\n y1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n type = \"cumulative\"\n}: CumulativeLineTypes) => {\n for (const line of data) {\n let cumulativeValue = 0\n const dataArray =\n type === \"cumulative-reverse\" ? line.data.reverse() : line.data\n\n for (const point of dataArray) {\n cumulativeValue += point[yPropTop]\n point[yPropBottom] =\n point[yPropTop] =\n point[yPropMiddle] =\n cumulativeValue\n if (y1) {\n point[yPropBottom] = y1(point)\n point[yPropMiddle] = point[yPropBottom] + point[yPropTop] / 2\n }\n }\n }\n\n return data\n}\n\nexport const bumpChart = ({\n type = \"bumpline\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const uniqXValues = new Map()\n for (const line of data) {\n for (const point of line.data) {\n const xValue = datesForUnique(point[xProp])\n if (!uniqXValues.has(xValue)) {\n uniqXValues.set(xValue, [])\n }\n uniqXValues.get(xValue).push(point)\n }\n }\n\n let bumpSort = (a, b) => {\n if (a[yProp] > b[yProp]) {\n return 1\n }\n if (a[yProp] < b[yProp]) {\n return -1\n }\n return -1\n }\n if (type === \"bumparea-invert\" || type === \"bumpline-invert\") {\n bumpSort = (a, b) => {\n if (a[yProp] < b[yProp]) {\n return 1\n }\n if (a[yProp] > b[yProp]) {\n return -1\n }\n return -1\n }\n }\n\n for (const [, pointsAtXArray] of uniqXValues) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n pointsAtXArray.sort(bumpSort)\n\n let rank = 1\n for (const point of pointsAtXArray) {\n point._XYFrameRank\n if (type === \"bumparea\" || type === \"bumparea-invert\") {\n if (point[yProp] < 0) {\n point[yPropTop] = negativeOffset + point[yProp]\n point[yPropMiddle] = negativeOffset + point[yProp] / 2\n point[yPropBottom] = negativeOffset\n negativeOffset += point[yProp]\n } else {\n point[yPropTop] = positiveOffset + point[yProp]\n point[yPropMiddle] = positiveOffset + point[yProp] / 2\n point[yPropBottom] = positiveOffset\n positiveOffset += point[yProp]\n }\n } else {\n point[yProp] = rank\n point[yPropTop] = rank\n point[yPropBottom] = rank\n }\n rank++\n }\n }\n\n return data\n}\n\nexport const dividedLine = (\n parameters: Function,\n points: Array<Object>,\n searchIterations: number = 10\n) => {\n let currentParameters = parameters(points[0], 0)\n let currentPointsArray = []\n const dividedLinesData = [\n { key: currentParameters, points: currentPointsArray }\n ]\n points.forEach((point, pointI) => {\n const newParameters = parameters(point, pointI)\n\n let matchingParams = newParameters === currentParameters\n const stringNewParams = JSON.stringify(newParameters)\n const stringCurrentParams = JSON.stringify(currentParameters)\n\n if (typeof currentParameters === \"object\") {\n matchingParams = stringNewParams === stringCurrentParams\n }\n\n if (matchingParams) {\n currentPointsArray.push(point)\n } else {\n const lastPoint = currentPointsArray[currentPointsArray.length - 1]\n let pointA = lastPoint\n let pointB = point\n let stringBParams = stringNewParams\n\n let x = 0\n while (x < searchIterations && stringNewParams === stringBParams) {\n const keys = Object.keys(pointA)\n const findPoints = simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n })\n pointA = findPoints[0]\n pointB = findPoints[1]\n stringBParams = JSON.stringify(parameters(pointB))\n x++\n }\n currentPointsArray.push(pointB)\n currentPointsArray = [pointB, point]\n dividedLinesData.push({ key: newParameters, points: currentPointsArray })\n currentParameters = newParameters\n }\n })\n return dividedLinesData\n}\n\nfunction simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n}: {\n pointA: Object\n pointB: Object\n currentParameters: Object\n parameters: Function\n keys: Array<string>\n}) {\n const betweenPoint = {}\n keys.forEach((key) => {\n betweenPoint[key] =\n typeof pointA[key] === \"number\"\n ? (pointA[key] + pointB[key]) / 2\n : undefined\n })\n const stringBetween = JSON.stringify(parameters(betweenPoint))\n const stringCurrent = JSON.stringify(currentParameters)\n\n if (stringBetween === stringCurrent) {\n return [betweenPoint, pointB]\n }\n return [pointA, betweenPoint]\n}\n\nexport function funnelize({\n data,\n steps,\n key\n}: {\n data: Array<Object>\n steps: Array<string>\n key: string\n}) {\n const funnelData = []\n if (!Array.isArray(data)) {\n data = [data]\n }\n if (!steps) {\n steps = data.map((d) => Object.keys(d)).reduce((a, b) => a.concat(b), [])\n }\n\n data.forEach((datum, i) => {\n const datumKey = key ? datum[key] : i\n steps.forEach((step) => {\n const funnelDatum = { funnelKey: datumKey, stepName: \"\", stepValue: 0 }\n funnelDatum.stepName = step\n funnelDatum.stepValue = datum[step] ? datum[step] : 0\n funnelData.push(funnelDatum)\n })\n })\n\n return funnelData\n}\n\n","import * as React from \"react\"\n\nimport { line, curveLinear } from \"d3-shape\"\n\nimport { dividedLine, projectLineData } from \"./geometry/lineDrawing\"\n\n// components\n\nimport { ProjectedLine } from \"./types/generalTypes\"\n\ninterface DividedLineProps {\n parameters: Function\n className: string\n customAccessors: { x: Function; y: Function }\n lineDataAccessor: Function\n data: ProjectedLine[]\n interpolate?: Function\n searchIterations?: number\n}\n\nconst createLineSegments = (props) => {\n const {\n parameters,\n className,\n interpolate = curveLinear,\n customAccessors,\n lineDataAccessor,\n data,\n searchIterations,\n ...rest\n } = props\n\n const { x, y } = customAccessors\n\n const lineData = projectLineData({\n data: data,\n lineDataAccessor: [lineDataAccessor],\n xProp: \"x\",\n yProp: \"y\",\n xAccessor: [x],\n yAccessor: [y]\n })\n\n //Compatibility before Semiotic 2\n for (const projectedD of lineData) {\n projectedD.data = projectedD.data.map((d) => ({ ...d.data, ...d }))\n }\n\n const lines = dividedLine(parameters, lineData[0].data, searchIterations)\n\n const lineRender = line()\n .curve(interpolate)\n .x((d) => d.x)\n .y((d) => d.y)\n\n return lines.map((d, i) => (\n <path {...rest}\n className={className}\n \n key={`DividedLine-${i}`}\n style={d.key}\n d={lineRender(d.points)}\n />\n ))\n}\n\nexport default function DividedLine(props: DividedLineProps) {\n const lines = createLineSegments(props)\n\n return <g>{lines}</g>\n}\n","import * as React from \"react\"\n\n\nimport { ScaleLinear } from \"d3-scale\"\n\ntype RenderModeFnType = (d: number, i: number) => string | Record<string, any>\n\ntype AxisPiecesFnType = {\n renderMode?: RenderModeFnType\n padding: number\n scale: ScaleLinear<number, number>\n ticks: number\n tickValues: number[] | Function\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n size: number[]\n footer: boolean\n tickSize: number\n baseline?: boolean | \"under\"\n jaggedBase?: boolean\n}\n\nconst horizontalTornTickGenerator = (width, ticks, y, orient) => {\n const step = width / ticks\n let currentStep = 0\n let tickPath = `M0,${y}`\n const mod = orient === \"right\" ? -1 : 1\n while (currentStep <= width) {\n tickPath += `L${currentStep},${y}`\n if (currentStep < width) {\n tickPath += `L${currentStep + step / 2},${y + 10 * mod}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst verticalTornTickGenerator = (height, ticks, x, orient) => {\n const step = height / ticks\n let currentStep = 0\n let tickPath = `M${x},0`\n const mod = orient === \"bottom\" ? -1 : 1\n while (currentStep <= height) {\n tickPath += `L${x},${currentStep}`\n if (currentStep < height) {\n tickPath += `L${x + 10 * mod},${currentStep + step / 2}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst generateTornBaseline = (orient, baselineSettings) => {\n let tornD = \"\"\n const { x1, x2, y1, y2 } = baselineSettings\n if (orient === \"left\" || orient === \"right\") {\n const calcWidth = Math.abs(x2 - x1)\n const ticks = Math.ceil(calcWidth / 40)\n tornD = horizontalTornTickGenerator(\n calcWidth,\n ticks,\n orient === \"right\" ? 0 : y1,\n orient\n )\n } else {\n const calcHeight = Math.abs(y2 - y1)\n const ticks = Math.ceil(calcHeight / 40)\n tornD = verticalTornTickGenerator(calcHeight, ticks, x1, orient)\n }\n return tornD\n}\n\nconst defaultTickLineGenerator = ({\n xy,\n orient,\n i,\n \n className = \"\",\n jaggedBase\n}) => {\n let genD = `M${xy.x1},${xy.y1}L${xy.x2},${xy.y2}`\n if (jaggedBase && i === 0) {\n genD = generateTornBaseline(orient, xy)\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nconst outboundTickLineGenerator = ({ xy, orient, i, className = \"\" }) => {\n const tickLength = 8\n let genD = `M-4,${xy.y1}L${xy.x1},${xy.y2}`\n if (orient === \"left\") {\n genD = `M${xy.x1 - tickLength},${xy.y1}L${xy.x1},${xy.y2}`\n } else if (orient === \"right\") {\n genD = `M${xy.x2},${xy.y1}L${xy.x2 + tickLength},${xy.y2}`\n } else if (orient === \"top\") {\n genD = `M${xy.x1},${xy.y1 - tickLength}L${xy.x1},${xy.y1}`\n } else if (orient === \"bottom\") {\n genD = `M${xy.x1},${xy.y2}L${xy.x1},${xy.y2 + tickLength}`\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`outbound-tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nexport function generateTickValues(tickValues, ticks, scale) {\n const axisSize = Math.abs(scale.range()[1] - scale.range()[0])\n\n if (!tickValues) {\n if (!ticks) {\n ticks = Math.max(1, Math.floor(axisSize / 40))\n }\n tickValues = (scale.ticks && scale.ticks(ticks)) || scale.domain()\n }\n\n return tickValues\n}\n\nexport function axisPieces({\n renderMode = () => undefined,\n padding = 5,\n scale,\n ticks,\n tickValues = generateTickValues(undefined, ticks, scale),\n orient = \"left\",\n size,\n footer = false,\n tickSize = footer\n ? -10\n : [\"top\", \"bottom\"].find((d) => d === orient)\n ? (size ? size[1] : 0)\n : (size ? size[0] : 0),\n jaggedBase\n}: AxisPiecesFnType) {\n //returns x1 (start of line), x2 (end of line) associated with the value of the tick\n let axisDomain = [],\n position1,\n position2,\n domain1,\n domain2,\n tposition1,\n tposition2,\n textPositionMod = 0,\n textPositionMod2 = 0,\n defaultAnchor = \"middle\"\n\n switch (orient) {\n case \"top\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y1\"\n domain2 = \"y2\"\n axisDomain = [0, tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod -= 20 - padding\n break\n case \"bottom\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y2\"\n domain2 = \"y1\"\n axisDomain = size ? [size[1], size[1] - tickSize] : [0, -tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod += 20 + padding\n break\n case \"right\":\n position1 = \"y2\"\n position2 = \"y1\"\n domain1 = \"x2\"\n domain2 = \"x1\"\n axisDomain = size ? [size[0], size[0] - tickSize] : [0, -tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod += 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"start\"\n break\n //left\n default:\n position1 = \"y1\"\n position2 = \"y2\"\n domain1 = \"x1\"\n domain2 = \"x2\"\n axisDomain = [0, tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod -= 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"end\"\n break\n }\n let generatedTicks =\n tickValues instanceof Function ? tickValues({ orient }) : tickValues\n\n if (\n jaggedBase &&\n generatedTicks.find((t) => t === scale.domain()[0]) === undefined\n ) {\n generatedTicks = [scale.domain()[0], ...generatedTicks]\n }\n\n return generatedTicks.map((tick, i) => {\n const tickPosition = scale(tick)\n\n return {\n [position1]: tickPosition,\n [position2]: tickPosition,\n [domain1]: axisDomain[0],\n [domain2]: axisDomain[1],\n [tposition1]: tickPosition + textPositionMod2,\n [tposition2]: axisDomain[0] + textPositionMod,\n defaultAnchor,\n renderMode: renderMode(tick, i),\n value: tick\n }\n })\n}\n\nexport const axisLabels = ({\n axisParts,\n tickFormat,\n rotate = 0,\n center = false,\n orient\n}) => {\n // Pre-format all values\n const entries = axisParts.map((axisPart, i) => ({\n axisPart,\n i,\n formatted: tickFormat(axisPart.value, i)\n }))\n\n // Collision-aware filtering: skip labels that would overlap.\n // Only applies to non-rotated text labels (rotation changes bounding box).\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n const isVertical = orient === \"left\" || orient === \"right\"\n let visible = entries\n\n if (!rotate && entries.length > 1) {\n const CHAR_WIDTH = 8\n const LINE_HEIGHT = 14\n const MIN_GAP = 8\n\n const textOf = (formatted) => {\n if (typeof formatted === \"string\") return formatted\n if (typeof formatted === \"number\") return String(formatted)\n return null // React element — can't estimate width, always keep\n }\n\n if (isHorizontal) {\n const sorted = [...entries].sort((a, b) => a.axisPart.tx - b.axisPart.tx)\n let lastRight = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n const text = textOf(entry.formatted)\n if (!text) { keep.add(entry.i); continue }\n const halfW = (text.length * CHAR_WIDTH) / 2\n if (entry.axisPart.tx - halfW >= lastRight + MIN_GAP) {\n keep.add(entry.i)\n lastRight = entry.axisPart.tx + halfW\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n } else if (isVertical) {\n const sorted = [...entries].sort((a, b) => a.axisPart.ty - b.axisPart.ty)\n let lastBottom = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n if (entry.axisPart.ty >= lastBottom + LINE_HEIGHT + MIN_GAP) {\n keep.add(entry.i)\n lastBottom = entry.axisPart.ty\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n }\n }\n\n return visible.map(({ axisPart, i, formatted: renderedValue }) => {\n if (typeof renderedValue !== \"object\" || renderedValue instanceof Date) {\n renderedValue = (\n <text textAnchor={axisPart.defaultAnchor} className=\"axis-label\">\n {renderedValue.toString ? renderedValue.toString() : renderedValue}\n </text>\n )\n }\n\n let textX = axisPart.tx\n let textY = axisPart.ty\n if (center) {\n switch (orient) {\n case \"right\":\n textX -= (axisPart.x2 - axisPart.x1) / 2\n break\n case \"left\":\n textX += (axisPart.x2 - axisPart.x1) / 2\n break\n case \"top\":\n textY += (axisPart.y2 - axisPart.y1) / 2\n break\n case \"bottom\":\n textY -= (axisPart.y2 - axisPart.y1) / 2\n break\n }\n }\n\n return (\n <g\n key={i}\n pointerEvents=\"none\"\n transform={`translate(${textX},${textY}) rotate(${rotate})`}\n className=\"axis-label\"\n >\n {renderedValue}\n </g>\n )\n })\n}\n\nexport const baselineGenerator = (orient, size, className) => {\n const offsets = {\n left: { x: 0, y: 0, width: 0, height: size ? size[1] : 0 },\n right: { x: size ? size[0] : 0, y: 0, width: 0, height: size ? size[1] : 0 },\n top: { x: 0, y: 0, width: size ? size[0] : 0, height: 0 },\n bottom: { x: 0, y: size ? size[1] : 0, width: size ? size[0] : 0, height: 0 }\n }\n\n const orientOffset = offsets[orient]\n\n return (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"currentColor\"\n strokeLinecap=\"square\"\n x1={orientOffset.x}\n x2={orientOffset.x + orientOffset.width}\n y1={orientOffset.y}\n y2={orientOffset.y + orientOffset.height}\n />\n )\n}\n\nexport const axisLines = ({\n axisParts,\n orient,\n tickLineGenerator = defaultTickLineGenerator,\n \n className,\n jaggedBase,\n scale,\n showOutboundTickLines = false\n}: {\n axisParts: object[]\n orient: string\n tickLineGenerator: Function\n className: string\n jaggedBase?: boolean\n scale: ScaleLinear<number, number>\n showOutboundTickLines?: boolean\n}) => {\n const axisLines = axisParts.map((axisPart, i) =>\n tickLineGenerator({\n xy: axisPart,\n orient,\n i,\n \n className,\n jaggedBase,\n scale\n })\n ) as React.ReactNode[]\n\n const outboundAxisLines = showOutboundTickLines\n ? (axisParts.map((axisPart, i) =>\n outboundTickLineGenerator({\n xy: axisPart,\n orient,\n i,\n className\n })\n ) as React.ReactNode)\n : []\n\n return [...axisLines, outboundAxisLines]\n}\n","import React from \"react\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\nexport interface SummaryGraphicProps {\n translation: {\n left: Array<number>\n right: Array<number>\n top: Array<number>\n bottom: Array<number>\n }\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n decoratedSummaryType: {\n type: string\n }\n summaryWidth: number\n renderedSummary: any\n points?: React.ReactNode\n}\n\nfunction translateX({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"left\" || o === \"right\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nfunction translateY({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"top\" || o === \"bottom\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nexport default function SummaryGraphic(props: SummaryGraphicProps) {\n const {\n translation,\n orient,\n decoratedSummaryType,\n summaryWidth,\n renderedSummary,\n points\n } = props\n return (\n <g\n className=\"marginal-graphics\"\n transform={`translate(${translation[orient]})`}\n >\n <g\n transform={`translate(${translateX({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })},${translateY({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })})`}\n >\n {renderedSummary}\n </g>\n {points}\n </g>\n )\n}\n","import React from 'react';\n\nexport interface AxisTitleProps {\n className: string,\n translation: Array<number>,\n position: Array<number>,\n rotation: number | string,\n labelName: any,\n anchorMod: \"inherit\" | \"middle\" | \"end\" | \"start\"\n}\n\nexport default function AxisTitle(props: AxisTitleProps) { \n const { className, translation, position, rotation, labelName, anchorMod } = props;\n return (\n <g\n className={`axis-title ${className}`}\n transform={`translate(${[\n translation[0] + position[0],\n translation[1] + position[1]\n ]}) rotate(${rotation})`}\n >\n {React.isValidElement(labelName) ? (\n labelName\n ) : (\n <text textAnchor={anchorMod}>{labelName}</text>\n )}\n </g>\n )\n}","import * as React from \"react\"\nimport { timeFormat } from \"d3-time-format\"\nimport { format as d3Format } from \"d3-format\"\n\n/**\n * Format number with specified format string\n *\n * @param value - Number to format\n * @param formatString - D3 format string (e.g., \".2f\", \",.0f\", \".1%\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-format#format for format string options\n */\nexport function formatNumber(value: number, formatString: string = \",.0f\"): string {\n try {\n return d3Format(formatString)(value)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Format date with specified format string\n *\n * @param value - Date to format\n * @param formatString - D3 time format string (e.g., \"%Y-%m-%d\", \"%b %d\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-time-format#timeFormat for format string options\n */\nexport function formatDate(value: Date | number | string, formatString: string = \"%b %d, %Y\"): string {\n try {\n const date = value instanceof Date ? value : new Date(value)\n return timeFormat(formatString)(date)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Creates a formatting function based on the type\n *\n * @param type - Type of formatting: 'number', 'date', 'percent', or 'currency'\n * @param options - Optional configuration for the formatter\n * @returns Formatting function\n *\n * @example\n * ```ts\n * const fmt = formatAxis('number', { decimals: 2 })\n * fmt(1234.567) // \"1,234.57\"\n *\n * const dateFmt = formatAxis('date', { format: '%b %Y' })\n * dateFmt(new Date()) // \"Jan 2024\"\n * ```\n */\nexport function formatAxis(\n type: \"number\" | \"date\" | \"percent\" | \"currency\" = \"number\",\n options?: {\n decimals?: number\n format?: string\n currency?: string\n }\n): (d: any) => string {\n const { decimals = 0, format: customFormat, currency = \"$\" } = options || {}\n\n switch (type) {\n case \"date\":\n return (d) => formatDate(d, customFormat || \"%b %d\")\n\n case \"percent\":\n return (d) => formatNumber(d, customFormat || `.${decimals}%`)\n\n case \"currency\":\n return (d) => `${currency}${formatNumber(d, customFormat || `,.${decimals}f`)}`\n\n case \"number\":\n default:\n return (d) => formatNumber(d, customFormat || `,.${decimals}f`)\n }\n}\n\n/**\n * Creates a tooltip content generator\n *\n * @param fields - Array of field names to display\n * @param formatters - Optional map of field names to formatting functions\n * @param labels - Optional map of field names to display labels\n * @returns React element generator function\n *\n * @example\n * ```ts\n * const tooltip = createTooltip(\n * ['category', 'value'],\n * { value: d => formatNumber(d, ',.2f') },\n * { category: 'Category', value: 'Value' }\n * )\n * ```\n */\nexport function createTooltip(\n fields: string[],\n formatters?: Record<string, (v: any) => string>,\n labels?: Record<string, string>\n): (d: any) => JSX.Element {\n return (d: any) => {\n return React.createElement(\n \"div\",\n { className: \"tooltip-content\", style: { padding: \"8px\" } },\n fields.map((field) => {\n const label = labels?.[field] || field\n const value = d[field]\n const formatter = formatters?.[field]\n const displayValue = formatter ? formatter(value) : String(value)\n\n return React.createElement(\n \"div\",\n { key: field, style: { marginBottom: \"4px\" } },\n React.createElement(\"strong\", null, `${label}: `),\n displayValue\n )\n })\n )\n }\n}\n\n/**\n * Formats large numbers with K/M/B suffixes\n *\n * @param value - Number to format\n * @param decimals - Number of decimal places\n * @returns Formatted string with suffix\n *\n * @example\n * ```ts\n * formatLargeNumber(1234) // \"1.2K\"\n * formatLargeNumber(1234567) // \"1.2M\"\n * formatLargeNumber(1234567890) // \"1.2B\"\n * ```\n */\nexport function formatLargeNumber(value: number, decimals: number = 1): string {\n if (value >= 1e9) {\n return (value / 1e9).toFixed(decimals) + \"B\"\n }\n if (value >= 1e6) {\n return (value / 1e6).toFixed(decimals) + \"M\"\n }\n if (value >= 1e3) {\n return (value / 1e3).toFixed(decimals) + \"K\"\n }\n return value.toFixed(decimals)\n}\n\n/**\n * Smart default tick format for axis labels.\n *\n * Handles the common problems with raw number-to-string conversion:\n * - Floating-point noise (0.30000000000000004 → \"0.3\")\n * - Excessive precision (62.123456789 → \"62.1235\")\n * - Large numbers (1500000 → \"1.5M\")\n * - Strings/non-numbers pass through unchanged\n *\n * Used as the default axis tickFormat when no explicit format is provided.\n */\nexport function smartTickFormat(value: any): string {\n if (value == null) return \"\"\n if (typeof value !== \"number\") return String(value)\n if (!isFinite(value)) return String(value)\n if (value === 0) return \"0\"\n\n // Clean floating-point noise (e.g., 0.30000000000000004 → 0.3)\n const cleaned = parseFloat(value.toPrecision(12))\n const abs = Math.abs(cleaned)\n\n // Large numbers: compact suffixes\n if (abs >= 1e9) return `${parseFloat((cleaned / 1e9).toPrecision(3))}B`\n if (abs >= 1e6) return `${parseFloat((cleaned / 1e6).toPrecision(3))}M`\n if (abs >= 1e4) return `${parseFloat((cleaned / 1e3).toPrecision(3))}K`\n\n // Integers: no decimals needed\n if (Number.isInteger(cleaned)) return String(cleaned)\n\n // Floats: up to 6 significant digits, trailing zeros stripped\n return String(parseFloat(cleaned.toPrecision(6)))\n}\n\n/**\n * Truncates text to specified length with ellipsis\n *\n * @param text - Text to truncate\n * @param maxLength - Maximum length before truncation\n * @returns Truncated text\n */\nexport function truncateText(text: string, maxLength: number = 20): string {\n if (text.length <= maxLength) {\n return text\n }\n return text.slice(0, maxLength - 3) + \"...\"\n}\n","import * as React from \"react\"\n\nimport { ProjectionTypes } from \"../types/generalTypes\"\n\ntype SummaryType = { type: string | Function }\n\ntype ORFrameSummaryRendererTypes = {\n data: Array<object>\n type: SummaryType\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: Array<number>\n chartSize: number\n margin: object\n axisCreator?: Function\n}\n\nexport function orFrameSummaryRenderer({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n}: ORFrameSummaryRendererTypes) {\n if (typeof type.type === \"function\") {\n return type.type({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n }\n console.error(\n `Invalid summary type: ${type.type} - Must be a function`\n )\n return {}\n}\n\n/**\n * Main drawing function for summary visualizations\n */\nexport const drawSummaries = ({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n margin,\n axisCreator\n}: {\n data: object\n type: { type?: string | Function }\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: number[]\n margin: object\n axisCreator?: Function\n}) => {\n if (!type || !type.type) return\n type = typeof type === \"string\" ? { type } : type\n const chartSize =\n projection === \"vertical\" ? adjustedSize[1] : adjustedSize[0]\n\n return orFrameSummaryRenderer({\n data: data as unknown as Array<object>,\n type: type as SummaryType,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n}\n\ninterface summaryInstruction {\n Mark?: JSX.Element\n containerProps?: object\n elements: object[]\n}\n\n/**\n * Converts summary instructions to rendered SVG elements\n */\nexport function summaryInstructionsToMarks(data: summaryInstruction[]) {\n const renderedSummaries: JSX.Element[] = []\n for (const container of data) {\n const renderedElements: JSX.Element[] = []\n const { elements, containerProps} = container\n if (container.Mark) {\n renderedSummaries.push(container.Mark)\n } else {\n for (let i = 0; i < elements.length; i++) {\n const element: Record<string, any> = elements[i] as Record<string, any>\n const { markType, style = {}, ...restProps } = element\n\n // Merge style object into direct props for cleaner SVG\n const elementProps: Record<string, any> = { ...restProps }\n if (style.fill !== undefined) elementProps.fill = style.fill\n if (style.stroke !== undefined) elementProps.stroke = style.stroke\n if (style.strokeWidth !== undefined) elementProps.strokeWidth = style.strokeWidth\n if (style.opacity !== undefined) elementProps.opacity = style.opacity\n if (style.fillOpacity !== undefined) elementProps.fillOpacity = style.fillOpacity\n if (style.strokeOpacity !== undefined) elementProps.strokeOpacity = style.strokeOpacity\n\n // Keep remaining styles\n const remainingStyles: Record<string, any> = { ...style }\n delete remainingStyles.fill\n delete remainingStyles.stroke\n delete remainingStyles.strokeWidth\n delete remainingStyles.opacity\n delete remainingStyles.fillOpacity\n delete remainingStyles.strokeOpacity\n if (Object.keys(remainingStyles).length > 0) {\n elementProps.style = remainingStyles\n }\n\n elementProps.key = element.key || i\n\n if (markType) {\n renderedElements.push(React.createElement(markType, elementProps))\n }\n }\n if (containerProps) {\n renderedSummaries.push(<g {...containerProps}>{renderedElements}</g>)\n } else {\n renderedSummaries.push(...renderedElements)\n }\n }\n }\n return renderedSummaries\n}\n\n","import * as React from \"react\"\nimport { useEffect, useState, useRef } from \"react\"\n\nimport {\n axisLabels,\n axisPieces,\n axisLines\n} from \"./../visualizationLayerBehavior/axis\"\n\nimport SummaryGraphic from \"./summaryGraphic\"\nimport AxisTitle from \"./axisTitle\"\n\nimport { AxisProps } from \"./../types/annotationTypes\"\nimport { smartTickFormat } from \"./../charts/shared/formatUtils\"\n\nimport {\n drawSummaries,\n summaryInstructionsToMarks\n} from \"./../geometry/summaryLayouts\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\n// components\n\nconst marginalPointMapper = (orient, width, data) => {\n const xMod = orient === \"left\" || orient === \"right\" ? width / 2 : 0\n const yMod = orient === \"bottom\" || orient === \"top\" ? width / 2 : 0\n return data.map((p) => [p.xy.x + xMod, p.xy.y + yMod])\n}\n\nfunction formatValue(value, props) {\n if (props.tickFormat) {\n return props.tickFormat(value)\n }\n if (value.toString) {\n return value.toString()\n }\n return value\n}\n\nconst boundingBoxMax = (axisNode, orient) => {\n const axisRef = axisNode.current\n if (!axisRef) return 30\n\n const positionType =\n orient === \"left\" || orient === \"right\" ? \"width\" : \"height\"\n\n const axisLabelMax =\n Math.max(\n ...[...axisRef.querySelectorAll(\".axis-label\")]\n .map(\n (l: { getBBox: Function }) =>\n (l.getBBox && l.getBBox()) || { height: 30, width: 30 }\n )\n .map((d) => d[positionType])\n ) + 25\n\n return axisLabelMax\n}\n\nexport default function Axis(props: AxisProps) {\n const {\n rotate,\n label,\n dynamicLabelPosition,\n orient = \"left\",\n marginalSummaryType,\n tickFormat = marginalSummaryType ? () => \"\" : smartTickFormat,\n size,\n width = (size && size[0]) || 0,\n height = (size && size[1]) || 0,\n className,\n padding,\n tickValues,\n scale,\n ticks,\n footer,\n tickSize,\n tickLineGenerator,\n baseline = true,\n margin = { top: 0, bottom: 0, left: 0, right: 0 },\n center = false,\n annotationFunction,\n glyphFunction,\n xyPoints\n } = props\n\n const [hoverPosition, changeHoverPosition] = useState(0)\n const [calculatedLabelPosition, changeCalculatedLabelPosition] =\n useState(undefined)\n\n const axisNode = useRef(null)\n\n useEffect(() => {\n if (!label?.position && dynamicLabelPosition) {\n const newBBMax = boundingBoxMax(axisNode, orient)\n if (newBBMax !== calculatedLabelPosition) {\n changeCalculatedLabelPosition(newBBMax)\n }\n }\n }, [label, dynamicLabelPosition])\n\n let { axisParts, position = [0, 0] } = props\n\n let axisTickLines\n\n if (!axisParts) {\n axisParts = axisPieces({\n padding: padding,\n tickValues,\n scale,\n ticks,\n orient,\n size: [width, height],\n footer,\n tickSize\n })\n axisTickLines = (\n <g className={`axis ${className}`}>\n {axisLines({\n axisParts,\n orient,\n tickLineGenerator,\n className,\n scale\n })}\n </g>\n )\n }\n if (axisParts.length === 0) {\n return null\n }\n\n let hoverWidth = 50\n let hoverHeight = height\n let hoverX = -50\n let hoverY = 0\n let baselineX = 0\n let baselineY = 0\n let baselineX2 = 0\n let baselineY2 = height\n // hoverFunction is set is switch(orient) below\n let hoverFunction\n let circleX = 25\n let textX = -25\n let textY = 18\n let lineWidth = width + 25\n let lineHeight = 0\n let circleY = hoverPosition\n let annotationOffset = 0\n let annotationType = \"y\"\n\n switch (orient) {\n case \"right\":\n position = [position[0], position[1]]\n hoverX = width\n baselineX2 = baselineX = width\n annotationOffset = margin.top\n lineWidth = -width - 25\n textX = 5\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n break\n case \"top\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n hoverY = -50\n hoverX = 0\n annotationOffset = margin.left\n annotationType = \"x\"\n baselineX2 = width\n baselineY2 = 0\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = -10\n lineWidth = 0\n lineHeight = height + 25\n break\n case \"bottom\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n baselineY = baselineY2 = hoverY = height\n baselineX = hoverX = 0\n baselineX2 = width\n annotationOffset = margin.left\n\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = 15\n lineWidth = 0\n lineHeight = -height - 25\n annotationType = \"x\"\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n break\n default:\n position = [position[0], position[1]]\n annotationOffset = margin.top\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n }\n\n let annotationBrush\n\n if (annotationFunction) {\n const formattedValue = formatValue(scale.invert(hoverPosition), props)\n const hoverGlyph: any = glyphFunction ? (\n glyphFunction({\n lineHeight,\n lineWidth,\n value: scale.invert(hoverPosition)\n })\n ) : (\n <g>\n {React.isValidElement(formattedValue) ? (\n <g transform={`translate(${textX},${textY})`}>{formattedValue}</g>\n ) : (\n <text x={textX} y={textY}>\n {formattedValue}\n </text>\n )}\n <circle r={5} />\n <line x1={lineWidth} y1={lineHeight} style={{ stroke: \"black\" }} />\n </g>\n )\n const annotationSymbol = hoverPosition ? (\n <g\n style={{ pointerEvents: \"none\" }}\n transform={`translate(${circleX},${circleY})`}\n >\n {hoverGlyph}\n </g>\n ) : null\n\n annotationBrush = (\n <g\n className=\"annotation-brush\"\n transform={`translate(${hoverX},${hoverY})`}\n >\n <rect\n style={{ fillOpacity: 0 }}\n height={hoverHeight}\n width={hoverWidth}\n onMouseMove={hoverFunction}\n onClick={(e) =>\n annotationFunction({\n className: \"dynamic-axis-annotation\",\n type: annotationType,\n value: scale.invert(hoverPosition),\n e\n })\n }\n onMouseOut={() => {\n changeHoverPosition(undefined)\n }}\n />\n {annotationSymbol}\n </g>\n )\n }\n\n let summaryGraphic\n\n if (marginalSummaryType && xyPoints) {\n const summaryWidth = Math.max(margin[orient] - 6, 5)\n\n const decoratedSummaryType: AxisSummaryTypeSettings =\n typeof marginalSummaryType === \"string\"\n ? { type: marginalSummaryType }\n : marginalSummaryType\n\n if (\n decoratedSummaryType.flip === undefined &&\n (orient === \"bottom\" || orient === \"right\")\n ) {\n decoratedSummaryType.flip = true\n }\n\n const summaryStyle = decoratedSummaryType.summaryStyle\n ? () => decoratedSummaryType.summaryStyle\n : () => ({\n fill: \"black\",\n fillOpacity: 0.5,\n stroke: \"black\",\n strokeDasharray: \"0\"\n })\n\n const summaryRenderMode = decoratedSummaryType.renderMode\n ? () => decoratedSummaryType.renderMode\n : () => undefined\n\n const summaryClass = decoratedSummaryType.summaryClass\n ? () => decoratedSummaryType.summaryClass\n : () => \"\"\n\n const dataFilter = decoratedSummaryType.filter || (() => true)\n\n const forSummaryData = xyPoints\n .filter(\n (p: { x?: number; y?: number; data?: object }) =>\n p.x !== undefined && p.y !== undefined && dataFilter(p.data)\n )\n .map((d: { x: number; y: number }) => ({\n ...d,\n xy: {\n x: orient === \"top\" || orient === \"bottom\" ? scale(d.x) : 0,\n y: orient === \"left\" || orient === \"right\" ? scale(d.y) : 0\n },\n piece: {\n scaledVerticalValue: scale(d.y),\n scaledValue: scale(d.x)\n },\n value:\n orient === \"top\" || orient === \"bottom\" ? scale(d.y) : scale(d.x),\n scaledValue: scale(d.x),\n scaledVerticalValue: scale(d.y)\n }))\n\n const calculatedSummary = drawSummaries({\n data: {\n column: {\n middle: summaryWidth / 2,\n pieceData: forSummaryData,\n width: summaryWidth,\n xyData: forSummaryData\n }\n },\n type: decoratedSummaryType,\n renderMode: summaryRenderMode,\n eventListenersGenerator:\n decoratedSummaryType.eventListenersGenerator || (() => ({})),\n styleFn: summaryStyle,\n classFn: summaryClass,\n projection:\n orient === \"top\" || orient === \"bottom\" ? \"horizontal\" : \"vertical\",\n adjustedSize: size,\n margin: { top: 0, bottom: 0, left: 0, right: 0 }\n })\n\n const renderedSummary = summaryInstructionsToMarks(calculatedSummary.marks)\n\n let points\n\n if (decoratedSummaryType.showPoints === true) {\n const mappedPoints = marginalPointMapper(\n orient,\n summaryWidth,\n forSummaryData\n )\n\n points = mappedPoints.map((d, i) => (\n <circle\n key={`axis-summary-point-${i}`}\n cx={d[0]}\n cy={d[1]}\n r={decoratedSummaryType.r || 3}\n style={\n decoratedSummaryType.pointStyle || {\n fill: \"black\",\n fillOpacity: 0.1\n }\n }\n />\n ))\n }\n\n const translation = {\n left: [-margin.left + 2, 0],\n right: [size[0] + 2, 0],\n top: [0, -margin.top + 2],\n bottom: [0, size[1] + 2]\n }\n\n summaryGraphic = (\n <SummaryGraphic\n translation={translation}\n orient={orient}\n decoratedSummaryType={decoratedSummaryType}\n summaryWidth={summaryWidth}\n renderedSummary={renderedSummary}\n points={points}\n />\n )\n }\n\n let axisTitle\n\n const axisTickLabels = axisLabels({\n tickFormat,\n axisParts,\n orient,\n rotate,\n center\n })\n if (label) {\n const labelName: any = label.name || label\n const labelPosition = label.position || {}\n const locationMod = labelPosition.location || \"outside\"\n let anchorMod = (labelPosition.anchor || \"middle\") as \"inherit\" | \"middle\" | \"end\" | \"start\"\n const distance = label.locationDistance || calculatedLabelPosition\n\n const rotateHash = {\n left: -90,\n right: 90,\n top: 0,\n bottom: 0\n }\n\n const rotation = labelPosition.rotation || rotateHash[orient]\n\n const positionHash = {\n left: {\n start: [0, size[1]],\n middle: [0, size[1] / 2],\n end: [0, 0],\n inside: [distance || 15, 0],\n outside: [-(distance || 45), 0]\n },\n right: {\n start: [size[0] + 0, size[1]],\n middle: [size[0] + 0, size[1] / 2],\n end: [size[0] + 0, 0],\n inside: [-(distance || 15), 0],\n outside: [distance || 45, 0]\n },\n top: {\n start: [0, 0],\n middle: [0 + size[0] / 2, 0],\n end: [0 + size[0], 0],\n inside: [0, distance || 15],\n outside: [0, -(distance || 40)]\n },\n bottom: {\n start: [0, size[1]],\n middle: [0 + size[0] / 2, size[1]],\n end: [0 + size[0], size[1]],\n inside: [0, -(distance || 5)],\n outside: [0, distance || 50]\n }\n }\n\n const translation = positionHash[orient][anchorMod]\n const location = positionHash[orient][locationMod]\n\n translation[0] = translation[0] + location[0]\n translation[1] = translation[1] + location[1]\n\n if (anchorMod === \"start\" && orient === \"right\") {\n anchorMod = \"end\"\n } else if (anchorMod === \"end\" && orient === \"right\") {\n anchorMod = \"start\"\n }\n\n axisTitle = (\n <AxisTitle\n className={className}\n translation={translation}\n position={position}\n rotation={rotation}\n labelName={labelName}\n anchorMod={anchorMod}\n />\n )\n }\n\n const axisAriaLabel = `${orient} axis ${\n (axisParts &&\n axisParts.length > 0 &&\n `from ${tickFormat(axisParts[0].value, 0)} to ${tickFormat(\n axisParts[axisParts.length - 1].value,\n axisParts.length - 1\n )}`) ||\n \"without ticks\"\n }`\n\n return (\n <g className={className} aria-label={axisAriaLabel} ref={axisNode}>\n {annotationBrush}\n {axisTickLabels}\n {axisTickLines}\n {baseline === true ? (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"black\"\n strokeLinecap=\"square\"\n x1={baselineX}\n x2={baselineX2}\n y1={baselineY}\n y2={baselineY2}\n />\n ) : null}\n {axisTitle}\n {summaryGraphic}\n </g>\n )\n}\n\nexport { marginalPointMapper, formatValue, boundingBoxMax }\n","\"use client\"\nimport * as React from \"react\"\nimport { useEffect, useRef } from \"react\"\nimport { select } from \"d3-selection\"\n\nconst flatten = (list) =>\n list.reduce(\n (a, b) =>\n a.concat(Array.isArray(b) ? flatten(b.slice().sort((a, b) => a - b)) : b),\n []\n )\n\nfunction flatShortArray(baseArray = []) {\n if (!Array.isArray(baseArray)) return \"not-array\"\n let array = baseArray.slice()\n if (!Array.isArray(array[0])) {\n array = array.slice().sort((a, b) => a - b)\n }\n const flat = flatten(array)\n\n const stringifiedFlattened = flat\n .map(\n (d) =>\n (d instanceof Date && d.toString()) ||\n (d !== undefined && d.toFixed && d.toFixed(2)) ||\n \"empty\"\n )\n .toString()\n return stringifiedFlattened\n}\n\nconst createBrush = (node, props) => {\n const { svgBrush: brush, selectedExtent: baseSelectedExtent } = props\n select(node).call(brush)\n if (baseSelectedExtent) {\n let selectedExtent = baseSelectedExtent\n if (Array.isArray(baseSelectedExtent[0])) {\n const sortedY = [selectedExtent[0][1], selectedExtent[1][1]].sort(\n (a, b) => a - b\n )\n selectedExtent = [\n [selectedExtent[0][0], sortedY[0]],\n [selectedExtent[1][0], sortedY[1]]\n ]\n }\n\n select(node).call(brush.move, selectedExtent)\n }\n}\n\ninterface BrushProps {\n extent?: number[] | number[][]\n selectedExtent?: number[] | number[][]\n svgBrush: { (): () => void; move: Function }\n position?: number[]\n}\n\nexport default function Brush(props: BrushProps) {\n const { extent, selectedExtent } = props\n\n const node = useRef(null)\n const flatExtent = flatShortArray(extent)\n const flatSelectedExtent = flatShortArray(selectedExtent)\n\n useEffect(() => {\n if (node?.current) {\n createBrush(node.current, props)\n }\n }, [flatExtent, flatSelectedExtent, node])\n\n const { position = [0, 0] } = props\n return (\n <g transform={`translate(${position})`} ref={node} className=\"xybrush\" />\n )\n}\n","export const projectedX = \"x\"\nexport const projectedY = \"y\"\nexport const projectedYMiddle = \"yMiddle\"\nexport const projectedYTop = \"yTop\"\nexport const projectedYBottom = \"yBottom\"\nexport const projectedXMiddle = \"xMiddle\"\nexport const projectedXTop = \"xTop\"\nexport const projectedXBottom = \"xBottom\"\n","import { contourDensity } from \"d3-contour\"\nimport { scaleLinear } from \"d3-scale\"\n\nfunction shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n\nexport function contouring({ summaryType, data, finalXExtent, finalYExtent }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n resolution = 500,\n thresholds = 10,\n bandwidth = 20,\n neighborhood\n } = summaryType\n\n const xScale = scaleLinear()\n .domain(finalXExtent)\n .rangeRound([0, resolution])\n .nice()\n const yScale = scaleLinear()\n .domain(finalYExtent)\n .rangeRound([resolution, 0])\n .nice()\n\n data.forEach((contourData) => {\n let contourProjectedSummaries = contourDensity()\n .size([resolution, resolution])\n .x((d) => xScale(d[0]))\n .y((d) => yScale(d[1]))\n .thresholds(thresholds)\n .bandwidth(bandwidth)(contourData._xyfCoordinates)\n\n if (neighborhood) {\n contourProjectedSummaries = [contourProjectedSummaries[0]]\n }\n\n const max = Math.max(...contourProjectedSummaries.map((d) => d.value))\n\n contourProjectedSummaries.forEach((summary) => {\n summary.parentSummary = contourData\n summary.bounds = []\n summary.percent = summary.value / max\n summary.coordinates.forEach((poly) => {\n poly.forEach((subpoly, i) => {\n poly[i] = subpoly.map((coordpair) => {\n coordpair = [\n xScale.invert(coordpair[0]),\n yScale.invert(coordpair[1])\n ]\n return coordpair\n })\n //Only push bounds for the main poly, not its interior rings, otherwise you end up labeling interior cutouts\n if (i === 0) {\n summary.bounds.push(shapeBounds(poly[i]))\n }\n })\n })\n })\n projectedSummaries = [...projectedSummaries, ...contourProjectedSummaries]\n })\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { hexbin } from \"d3-hexbin\"\nimport { scaleLinear } from \"d3-scale\"\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\n\ninterface BinArray {\n [position: number]: number\n x?: number\n y?: number\n}\n\nexport function hexbinning({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent: baseXExtent,\n finalYExtent: baseYExtent,\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n let finalXExtent = baseXExtent\n let finalYExtent = baseYExtent\n\n if (!finalXExtent) {\n const xData = baseData.coordinates.map((p) => p.x)\n finalXExtent = [Math.min(...xData), Math.max(...xData)]\n }\n\n if (!finalYExtent) {\n const yData = baseData.coordinates.map((p) => p.y)\n finalYExtent = [Math.min(...yData), Math.max(...yData)]\n }\n\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n let projectedSummaries = []\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n bins = 0.05,\n cellPx,\n binValue = (d) => d.length,\n binMax,\n customMark\n } = summaryType\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const hexBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const hexBinYScale = yScaleType.domain(finalYExtent).range([0, size[1]])\n\n const actualResolution =\n (cellPx && cellPx / 2) || ((bins > 1 ? 1 / bins : bins) * size[0]) / 2\n\n const hexbinner = hexbin()\n .x((d) => hexBinXScale(d._xyfPoint[0]))\n .y((d) => hexBinYScale(d._xyfPoint[1]))\n .radius(actualResolution)\n .size(size)\n\n let hexMax\n const allHexes: ProjectedPoint[] = hexbinner.centers()\n\n data.forEach((hexbinData) => {\n hexMax = 0\n const hexes = hexbinner(\n hexbinData._xyfCoordinates.map((d, i) => ({\n _xyfPoint: d,\n ...hexbinData.coordinates[i]\n }))\n )\n\n const centerHash = {}\n\n hexes.forEach((d) => {\n centerHash[`${parseInt(d.x)}-${parseInt(d.y)}`] = true\n })\n\n allHexes.forEach((hexCenter) => {\n if (!centerHash[`${parseInt(hexCenter[0])}-${parseInt(hexCenter[1])}`]) {\n const newHex: BinArray = []\n newHex.x = hexCenter[0]\n newHex.y = hexCenter[1]\n hexes.push(newHex)\n }\n })\n\n hexMax = Math.max(...hexes.map((d) => binValue(d)))\n\n if (binMax) {\n binMax(hexMax)\n }\n\n const hexBase = [\n [0, -1],\n [0.866, -0.5],\n [0.866, 0.5],\n [0, 1],\n [-0.866, 0.5],\n [-0.866, -0.5]\n ]\n\n const hexWidth = hexBinXScale.invert(actualResolution) - finalXExtent[0]\n const hexHeight = hexBinYScale.invert(actualResolution) - finalYExtent[0]\n\n const hexacoordinates = hexBase.map((d) => [\n d[0] * hexWidth,\n d[1] * hexHeight\n ])\n\n const hexbinProjectedSummaries = hexes.map((d: Record<string, any>) => {\n const hexValue = binValue(d)\n const gx = d.x\n const gy = d.y\n d.x = hexBinXScale.invert(d.x)\n d.y = hexBinYScale.invert(d.y)\n const percent = hexValue / hexMax\n return {\n customMark: customMark && (\n <g transform={`translate(${gx},${size[1] - gy})`}>\n {customMark({\n d: {\n ...d,\n binItems: d,\n percent,\n value: hexValue,\n radius: actualResolution,\n hexCoordinates: hexBase.map((d) => [\n d[0] * actualResolution,\n d[1] * actualResolution\n ])\n },\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n ),\n _xyfCoordinates: hexacoordinates.map((p) => [p[0] + d.x, p[1] + d.y]),\n value: hexValue,\n percent,\n data: d,\n parentSummary: hexbinData,\n centroid: true\n }\n })\n projectedSummaries = [...projectedSummaries, ...hexbinProjectedSummaries]\n })\n\n if (preprocess) {\n projectedSummaries.forEach((d) => {\n d.x = d.data.x\n d.y = d.data.y\n })\n return {\n type: \"hexbin\",\n processedData: true,\n coordinates: projectedSummaries,\n binMax: hexMax\n }\n }\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { scaleLinear } from \"d3-scale\"\nimport regression from \"regression\"\nimport { curveCardinal } from \"d3-shape\"\n\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\nimport { ProjectedSummary } from \"../types/generalTypes\"\n\n// Re-export from new locations for backwards compatibility\nexport { contouring } from \"./contourLayout\"\nexport { hexbinning } from \"./hexbinLayout\"\n\nconst generateLineBounds = (\n xydata,\n basedata,\n topBoundingAccessor,\n bottomBoundingAccessor\n) => {\n const tops = xydata.map((d, i) => [\n d[0],\n d[1] + topBoundingAccessor(basedata[i])\n ])\n const bottoms = xydata.map((d, i) => [\n d[0],\n d[1] - bottomBoundingAccessor(basedata[i])\n ])\n return [...tops, ...bottoms.reverse()]\n}\n\nexport function lineBounding({ summaryType, data, defined }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n boundingAccessor,\n topBoundingAccessor = boundingAccessor,\n bottomBoundingAccessor = boundingAccessor\n } = summaryType\n\n data.forEach((lineData) => {\n const definedData = lineData._baseData.map(defined)\n let currentBaseData = []\n let currentXYFC = []\n const boundingPieces = [\n {\n xyf: currentXYFC,\n base: currentBaseData\n }\n ]\n definedData.forEach((d, i) => {\n if (d === true) {\n currentBaseData.push(lineData._baseData[i])\n currentXYFC.push(lineData._xyfCoordinates[i])\n } else if (definedData[i + 1]) {\n currentBaseData = []\n currentXYFC = []\n boundingPieces.push({\n xyf: currentXYFC,\n base: currentBaseData\n })\n }\n })\n\n boundingPieces.forEach(({ xyf, base }) => {\n const boundingProjectedSummary = {\n data: lineData,\n parentSummary: lineData,\n _xyfCoordinates: generateLineBounds(\n xyf,\n base,\n topBoundingAccessor,\n bottomBoundingAccessor\n )\n }\n\n projectedSummaries = [...projectedSummaries, boundingProjectedSummary]\n })\n })\n\n return projectedSummaries\n}\n\nexport function heatmapping({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n finalYExtent = [\n Math.min(...baseData.coordinates.map((d) => d.y)),\n Math.max(...baseData.coordinates.map((d) => d.y))\n ],\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n let projectedSummaries: ProjectedSummary[] = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n // binGraphic = \"square\",\n binValue = (d) => d.length,\n xBins = summaryType.yBins || 0.05,\n yBins = xBins,\n xCellPx = !summaryType.xBins && summaryType.xCellPx,\n yCellPx = !summaryType.yBins && summaryType.yCellPx,\n customMark,\n binMax\n } = summaryType\n const xBinPercent = xBins < 1 ? xBins : 1 / xBins\n const yBinPercent = yBins < 1 ? yBins : 1 / yBins\n\n const heatmapBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const heatmapBinYScale = yScaleType.domain(finalYExtent).range([size[1], 0])\n\n const actualResolution = [\n Math.ceil(((xCellPx && xCellPx / size[0]) || xBinPercent) * size[0] * 10) /\n 10,\n Math.ceil(((yCellPx && yCellPx / size[1]) || yBinPercent) * size[1] * 10) /\n 10\n ]\n let maxValue = -Infinity\n\n data.forEach((heatmapData) => {\n const grid = []\n const flatGrid = []\n\n let cell\n let gridColumn\n\n for (let i = 0; Math.ceil(i) < size[0]; i += actualResolution[0]) {\n const x = heatmapBinXScale.invert(i)\n const x1 = heatmapBinXScale.invert(i + actualResolution[0])\n\n gridColumn = []\n grid.push(gridColumn)\n for (let j = 0; Math.ceil(j) < size[1]; j += actualResolution[1]) {\n const y = heatmapBinYScale.invert(j)\n const y1 = heatmapBinYScale.invert(j + actualResolution[1])\n cell = {\n gx: i,\n gy: j,\n gw: actualResolution[0],\n gh: actualResolution[1],\n x: (x + x1) / 2,\n y: (y + y1) / 2,\n binItems: [],\n value: 0,\n _xyfCoordinates: [\n [x, y],\n [x1, y],\n [x1, y1],\n [x, y1]\n ],\n parentSummary: heatmapData\n }\n gridColumn.push(cell)\n flatGrid.push(cell)\n }\n gridColumn.push(cell)\n }\n grid.push(gridColumn)\n\n heatmapData._xyfCoordinates.forEach((d: [number, number], di: number) => {\n const baseX = heatmapBinXScale(d[0]) as number\n const baseY = heatmapBinYScale(d[1]) as number\n\n const xCoordinate = Math.floor(baseX / actualResolution[0])\n const yCoordinate = Math.floor(baseY / actualResolution[1])\n\n if (grid[xCoordinate][yCoordinate]) {\n grid[xCoordinate][yCoordinate].binItems.push(\n heatmapData.coordinates[di]\n )\n }\n })\n\n flatGrid.forEach((d) => {\n d.value = binValue(d.binItems)\n maxValue = Math.max(maxValue, d.value)\n })\n\n flatGrid.forEach((d) => {\n d.percent = d.value / maxValue\n d.customMark = customMark && (\n <g transform={`translate(${d.gx},${d.gy})`}>\n {customMark({\n d,\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n )\n })\n\n projectedSummaries = [...projectedSummaries, ...flatGrid]\n })\n if (binMax) {\n binMax(maxValue)\n }\n if (preprocess) {\n const preprocessedSummary: ProjectedSummary = {\n type: \"heatmap\",\n processedData: true,\n _baseData: [],\n _xyfCoordinates: [],\n data: [],\n bounds: [],\n x: 0,\n y: 0,\n coordinates: projectedSummaries,\n binMax: maxValue\n }\n return preprocessedSummary\n }\n\n return projectedSummaries\n}\n\nexport function trendlining({\n preprocess = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n xScaleType = scaleLinear()\n}: SummaryLayoutType) {\n if (preprocess) {\n return baseData[0].coordinates\n }\n\n let projectedSummaries = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n regressionType: baseRegressionType = \"linear\",\n order = 2,\n precision = 4,\n controlPoints = 20,\n curve = curveCardinal\n } = summaryType\n\n let regressionType = baseRegressionType\n\n if (\n finalXExtent[0] < 0 &&\n (baseRegressionType === \"logarithmic\" ||\n baseRegressionType === \"power\" ||\n baseRegressionType === \"exponential\")\n ) {\n console.error(\n `Cannot use this ${baseRegressionType} regressionType type with value range that goes below 0, defaulting to linear`\n )\n regressionType = \"linear\"\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const xScale = xScaleType.domain([0, 1]).range(finalXExtent)\n\n projectedSummaries = []\n data.forEach((bdata) => {\n const regressionLine = regression[regressionType](\n bdata._xyfCoordinates.map((d) => {\n let x = d[0]\n let y = d[1]\n\n if (typeof x !== \"number\") {\n x = x.getTime()\n }\n if (typeof y !== \"number\") {\n y = y.getTime()\n }\n\n return [x, y]\n }),\n {\n order,\n precision\n }\n )\n const controlStep = 1 / controlPoints\n\n let steps = [0, 1]\n\n if (regressionType !== \"linear\") {\n steps = []\n for (let step = 0; step < 1 + controlStep; step += controlStep) {\n steps.push(step)\n }\n }\n\n const controlPointArray = []\n\n steps.forEach((controlPoint) => {\n controlPointArray.push(regressionLine.predict(xScale(controlPoint)))\n })\n\n projectedSummaries.push({\n centroid: false,\n customMark: undefined,\n data: bdata,\n parentSummary: bdata,\n value: regressionLine.string,\n r2: regressionLine.r2,\n curve,\n _xyfCoordinates: controlPointArray\n })\n })\n\n return projectedSummaries\n}\n\nexport function shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n","export const extentValue = extent =>\n (extent && extent.extent) || (Array.isArray(extent) && extent) || []\n","import { projectLineData, projectSummaryData } from \"../geometry/lineDrawing\"\nimport {\n projectedX,\n projectedY,\n projectedYTop,\n projectedYMiddle,\n projectedYBottom,\n projectedXBottom,\n projectedXMiddle,\n projectedXTop\n} from \"../constants/coordinateNames\"\nimport {\n differenceLine,\n stackedArea,\n bumpChart,\n lineChart,\n cumulativeLine\n} from \"../geometry/lineDrawing\"\n\nimport {\n contouring,\n hexbinning,\n heatmapping,\n trendlining,\n lineBounding\n} from \"../geometry/areaDrawing\"\nimport { max, min } from \"d3-array\"\n\nimport { extentValue } from \"./unflowedFunctions\"\n\nimport {\n ProjectedPoint,\n ProjectedLine,\n ProjectedSummary,\n ProjectedBin,\n RawSummary,\n RawPoint,\n RawLine,\n LineTypeSettings,\n SummaryTypeSettings,\n ExtentType,\n MarginType\n} from \"../types/generalTypes\"\n\nconst baseDefinedFunction = () => true\n\nconst whichPointsHashY = {\n top: projectedYTop,\n bottom: projectedYBottom,\n orphan: projectedY\n}\n\nconst whichPointsHashX = {\n top: projectedXTop,\n bottom: projectedXBottom,\n orphan: projectedX\n}\n\nconst builtInTransformations = {\n stackedarea: stackedArea,\n \"stackedarea-invert\": stackedArea,\n stackedpercent: stackedArea,\n \"stackedpercent-invert\": stackedArea,\n linepercent: stackedArea,\n difference: differenceLine,\n bumparea: bumpChart,\n bumpline: bumpChart,\n \"bumparea-invert\": bumpChart,\n line: lineChart,\n area: lineChart,\n cumulative: cumulativeLine,\n \"cumulative-reverse\": cumulativeLine\n}\n\ntype validStrFnTypes =\n | boolean\n | string\n | number\n | Record<string, any>\n | Record<string, any>[]\n | RawPoint\n | RawPoint[]\n\nexport function stringToFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((args?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType,\n defaultAccessor?: (arg?: Record<string, any>, i?: number) => StrFnType,\n raw?: boolean\n): (d?: Record<string, any>, i?: number) => StrFnType {\n if (!accessor && defaultAccessor) {\n return defaultAccessor\n } else if (typeof accessor === \"object\") {\n return () => accessor\n } else if (accessor instanceof Function) {\n return accessor\n } else if (raw === true) {\n const castAccessor = accessor as unknown as StrFnType\n return () => castAccessor\n } else if (typeof accessor === \"string\") {\n return (d: Record<string, any>) => (d ? d[accessor] : undefined)\n }\n\n return () => undefined\n}\n\nexport function stringToArrayFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n | Array<\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n >,\n defaultAccessor?: (arg?: Record<string, any>, index?: number) => StrFnType,\n raw?: boolean\n): Array<(arg?: Record<string, any>, index?: number) => StrFnType> {\n if (accessor === undefined) {\n return [stringToFn<StrFnType>(undefined, defaultAccessor, raw)]\n }\n let arrayOfAccessors = []\n if (Array.isArray(accessor)) {\n arrayOfAccessors = accessor\n } else {\n arrayOfAccessors = [accessor]\n }\n\n return arrayOfAccessors.map((a) =>\n stringToFn<StrFnType>(a, defaultAccessor, raw)\n )\n}\n\nfunction rebuildFullDatasetWithSummaries(\n fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary>,\n projectedSummaries: ProjectedSummary[]\n): Array<ProjectedPoint | ProjectedBin | ProjectedSummary> {\n const rebuilt: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n for (const d of projectedSummaries) {\n rebuilt.push({ ...d })\n }\n for (const d of fullDataset) {\n if (!(d as ProjectedPoint).parentSummary) {\n rebuilt.push(d)\n }\n }\n return rebuilt\n}\n\ntype CalculateDataTypes = {\n lineDataAccessor: Array<Function>\n summaryDataAccessor: Array<Function>\n summaryStyleFn: Function\n summaryClassFn: Function\n summaryRenderModeFn: Function\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n summaries?: Array<RawSummary>\n points?: Array<RawPoint>\n lines?: Array<RawLine>\n lineType: LineTypeSettings\n showLinePoints?: boolean | string\n showSummaryPoints?: boolean\n xExtent?: ExtentType\n yExtent?: ExtentType\n invertX?: boolean\n invertY?: boolean\n summaryType: SummaryTypeSettings\n adjustedSize: Array<number>\n chartSize: Array<number>\n xScaleType: Function\n yScaleType: Function\n margin: MarginType\n defined?: Function\n annotations: object[]\n filterRenderedLines: (\n value: ProjectedLine,\n index: number,\n array: ProjectedLine[]\n ) => any\n filterRenderedSummaries: (\n value: ProjectedSummary,\n index: number,\n array: ProjectedSummary[]\n ) => any\n filterRenderedPoints: (\n value: ProjectedPoint | ProjectedBin | ProjectedSummary,\n index: number,\n array: (ProjectedPoint | ProjectedBin | ProjectedSummary)[]\n ) => any\n}\n\nexport const calculateDataExtent = ({\n lineDataAccessor,\n xAccessor,\n yAccessor,\n summaries,\n points,\n lines,\n lineType,\n showLinePoints,\n showSummaryPoints,\n xExtent,\n yExtent,\n invertX,\n invertY,\n summaryDataAccessor,\n summaryType,\n adjustedSize: size,\n margin,\n summaryStyleFn,\n summaryClassFn,\n summaryRenderModeFn,\n chartSize,\n filterRenderedLines,\n filterRenderedSummaries,\n filterRenderedPoints,\n defined = baseDefinedFunction,\n annotations = []\n}: CalculateDataTypes) => {\n let fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n let initialProjectedLines = []\n\n let projectedPoints: Array<ProjectedPoint> = [],\n projectedLines: Array<ProjectedLine> = [],\n projectedSummaries: Array<ProjectedSummary> = []\n if (points) {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n let i = 0\n for (const d of points) {\n const x = actualXAccessor(d, i)\n const y = actualYAccessor(d, i)\n const projectedPoint = { x, y, data: d, xIndex, yIndex }\n if (Array.isArray(y)) {\n projectedPoint[projectedYBottom] = Math.min(...y)\n projectedPoint[projectedYTop] = Math.max(...y)\n projectedPoint[projectedYMiddle] =\n (projectedPoint[projectedYBottom] +\n projectedPoint[projectedYTop]) /\n 2\n }\n if (Array.isArray(x)) {\n projectedPoint[projectedXBottom] = Math.min(...x)\n projectedPoint[projectedXTop] = Math.max(...x)\n projectedPoint[projectedXMiddle] =\n (projectedPoint[projectedXBottom] +\n projectedPoint[projectedXTop]) /\n 2\n }\n projectedPoints.push(projectedPoint)\n i++\n }\n })\n })\n\n for (const d of projectedPoints) {\n fullDataset.push({\n ...d,\n [projectedX]: d[projectedXTop] || d[projectedXBottom] || d.x,\n [projectedY]: d[projectedYTop] || d[projectedYBottom] || d.y\n })\n }\n }\n if (lines) {\n initialProjectedLines = projectLineData({\n data: lines,\n lineDataAccessor,\n xProp: projectedX,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom,\n yProp: projectedY,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xAccessor,\n yAccessor\n })\n\n const optionsObject = {\n xProp: projectedX,\n yProp: projectedY,\n yPropMiddle: projectedYMiddle,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xPropMiddle: projectedXMiddle,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom\n }\n\n projectedLines = lineTransformation(\n lineType,\n optionsObject\n )(initialProjectedLines)\n\n for (const d of projectedLines) {\n for (let q = 0; q < d.data.length; q++) {\n const p = d.data[q]\n if (!defined(Object.assign({}, p.data, p), q)) continue\n const mappedP: ProjectedPoint = {\n parentLine: d,\n y: p.y,\n x: p.x,\n xTop: p.xTop,\n xMiddle: p.xMiddle,\n xBottom: p.xBottom,\n yTop: p.yTop,\n yMiddle: p.yMiddle,\n yBottom: p.yBottom,\n data: p.data\n }\n if (p.percent) {\n mappedP.percent = p.percent\n }\n fullDataset.push(mappedP)\n }\n }\n if (showLinePoints) {\n const whichPointsX =\n showLinePoints === true\n ? projectedXMiddle\n : whichPointsHashX[showLinePoints]\n\n const whichPointsY =\n showLinePoints === true\n ? projectedYMiddle\n : whichPointsHashY[showLinePoints]\n\n projectedLines.forEach((d: ProjectedLine) => {\n d.data\n .filter((p, q) => {\n const isDefined = defined(Object.assign({}, p.data, p))\n if (isDefined) {\n if (showLinePoints === \"orphan\") {\n const prePoint = d.data[q - 1]\n const postPoint = d.data[q + 1]\n\n if (\n (!prePoint ||\n !defined(Object.assign({}, prePoint.data, prePoint))) &&\n (!postPoint ||\n !defined(Object.assign({}, postPoint.data, postPoint)))\n ) {\n return true\n } else {\n return false\n }\n } else {\n return true\n }\n } else {\n return false\n }\n })\n .forEach((p) => {\n projectedPoints.push({\n ...p,\n parentLine: d,\n [projectedY]:\n p[whichPointsY] !== undefined\n ? p[whichPointsY]\n : p[projectedYMiddle] !== undefined\n ? p[projectedYMiddle]\n : p[projectedYBottom] !== undefined\n ? p[projectedYBottom]\n : p.y,\n [projectedX]:\n p[whichPointsX] !== undefined\n ? p[whichPointsX]\n : p[projectedXMiddle] !== undefined\n ? p[projectedXMiddle]\n : p[projectedXBottom] !== undefined\n ? p[projectedXBottom]\n : p.y\n })\n })\n })\n }\n }\n\n if (summaries) {\n projectedSummaries = projectSummaryData({\n data: summaries,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n })\n\n projectedSummaries.forEach((d) => {\n const baseData = d._baseData\n\n if (d._xyfCoordinates.length > 0 && d._xyfCoordinates[0][0][0]) {\n d._xyfCoordinates[0].forEach((multi) => {\n if (Array.isArray(multi)) {\n multi\n .map((p, q) =>\n Object.assign({ parentSummary: d }, baseData[q], {\n [projectedX]: p[0],\n [projectedY]: p[1]\n })\n )\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n })\n } else if (d._xyfCoordinates.length > 0) {\n if (Array.isArray(d._xyfCoordinates)) {\n const coordArray: [number, number][] = d._xyfCoordinates as [\n number,\n number\n ][]\n coordArray\n .map((p, q) => ({\n parentSummary: d,\n ...baseData[q],\n [projectedX]: p[0],\n [projectedY]: p[1]\n }))\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n }\n })\n }\n\n let suitableXAnnotations = []\n let suitableYAnnotations = []\n\n if (\n xExtent &&\n !Array.isArray(xExtent) &&\n xExtent.includeAnnotations === true\n ) {\n xAccessor.forEach((actualXAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const x = actualXAccessor(annotation, annotationIndex)\n if (isFinite(x)) {\n suitableXAnnotations.push({\n [projectedX]: x\n })\n }\n })\n })\n }\n\n if (\n yExtent &&\n !Array.isArray(yExtent) &&\n yExtent.includeAnnotations === true\n ) {\n yAccessor.forEach((actualYAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const y = actualYAccessor(annotation, annotationIndex)\n if (isFinite(y)) {\n suitableYAnnotations.push({\n [projectedY]: y\n })\n }\n })\n })\n }\n\n // Single-pass extent calculation over fullDataset + annotations\n let xMinVal: number | undefined\n let xMaxVal: number | undefined\n let yMinVal: number | undefined\n let yMaxVal: number | undefined\n\n for (const d of fullDataset) {\n const xLo = d[projectedXBottom] === undefined\n ? d[projectedX]\n : Math.min(d[projectedXTop], d[projectedXBottom])\n const xHi = d[projectedXTop] === undefined\n ? d[projectedX]\n : Math.max(d[projectedXBottom], d[projectedXTop])\n const yLo = d[projectedYBottom] === undefined\n ? d[projectedY]\n : Math.min(d[projectedYTop], d[projectedYBottom])\n const yHi = d[projectedYTop] === undefined\n ? d[projectedY]\n : Math.max(d[projectedYBottom], d[projectedYTop])\n\n if (xLo !== undefined && (xMinVal === undefined || xLo < xMinVal)) xMinVal = xLo\n if (xHi !== undefined && (xMaxVal === undefined || xHi > xMaxVal)) xMaxVal = xHi\n if (yLo !== undefined && (yMinVal === undefined || yLo < yMinVal)) yMinVal = yLo\n if (yHi !== undefined && (yMaxVal === undefined || yHi > yMaxVal)) yMaxVal = yHi\n }\n\n for (const d of suitableXAnnotations) {\n const v = d[projectedX]\n if (v !== undefined && (xMinVal === undefined || v < xMinVal)) xMinVal = v\n if (v !== undefined && (xMaxVal === undefined || v > xMaxVal)) xMaxVal = v\n }\n\n for (const d of suitableYAnnotations) {\n const v = d[projectedY]\n if (v !== undefined && (yMinVal === undefined || v < yMinVal)) yMinVal = v\n if (v !== undefined && (yMaxVal === undefined || v > yMaxVal)) yMaxVal = v\n }\n\n const calculatedXExtent = [xMinVal, xMaxVal]\n const calculatedYExtent = [yMinVal, yMaxVal]\n\n const actualXExtent: number[] = extentValue(xExtent)\n const actualYExtent: number[] = extentValue(yExtent)\n\n const xMin =\n actualXExtent && actualXExtent[0] !== undefined\n ? actualXExtent[0]\n : calculatedXExtent[0]\n const xMax =\n actualXExtent && actualXExtent[1] !== undefined\n ? actualXExtent[1]\n : calculatedXExtent[1]\n\n const yMin =\n actualYExtent && actualYExtent[0] !== undefined\n ? actualYExtent[0]\n : calculatedYExtent[0]\n const yMax =\n actualYExtent && actualYExtent[1] !== undefined\n ? actualYExtent[1]\n : calculatedYExtent[1]\n\n let finalYExtent = [yMin, yMax]\n let finalXExtent = [xMin, xMax]\n\n if (invertX && !(actualXExtent && actualXExtent.length === 2)) {\n finalXExtent = [finalXExtent[1], finalXExtent[0]]\n }\n\n if (\n (lineType.type === \"bumpline\" || invertY) &&\n !(actualYExtent && actualYExtent.length === 2)\n ) {\n finalYExtent = [finalYExtent[1], finalYExtent[0]]\n }\n\n if (summaryType.type && summaryType.type === \"contour\") {\n projectedSummaries = contouring({\n summaryType,\n data: projectedSummaries,\n finalXExtent,\n finalYExtent\n })\n } else if (summaryType.type && summaryType.type === \"linebounds\") {\n projectedSummaries = lineBounding({\n summaryType,\n data: projectedSummaries,\n defined\n })\n\n // Expand y extent to include the bounds so they aren't clipped\n if (!(actualYExtent && actualYExtent.length === 2)) {\n for (const summary of projectedSummaries) {\n for (const coord of summary._xyfCoordinates) {\n const yVal = coord[1] as number\n if (yVal !== undefined && isFinite(yVal)) {\n if (yVal < finalYExtent[0]) finalYExtent[0] = yVal\n if (yVal > finalYExtent[1]) finalYExtent[1] = yVal\n }\n }\n }\n }\n } else if (summaryType.type && summaryType.type === \"hexbin\") {\n projectedSummaries = hexbinning({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"heatmap\") {\n projectedSummaries = heatmapping({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"trendline\") {\n projectedSummaries = trendlining({\n summaryType,\n data: projectedSummaries[0],\n preprocess: summaries && !!summaries[0].processedData,\n finalXExtent\n })\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n }\n\n if (filterRenderedLines) {\n projectedLines = projectedLines.filter(filterRenderedLines)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentLine || filterRenderedLines(d.parentLine, i, [])\n })\n }\n if (filterRenderedPoints) {\n fullDataset = fullDataset.filter(filterRenderedPoints)\n }\n if (filterRenderedSummaries) {\n projectedSummaries = projectedSummaries.filter(filterRenderedSummaries)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentSummary || filterRenderedSummaries(d.parentSummary, i, [])\n })\n }\n\n return {\n xExtent: finalXExtent,\n yExtent: finalYExtent,\n projectedLines,\n projectedPoints,\n projectedSummaries,\n fullDataset,\n calculatedXExtent,\n calculatedYExtent\n }\n}\n\nconst differenceCatch = (olineType, data) => {\n if (\n !builtInTransformations[olineType] ||\n (olineType === \"difference\" && data.length !== 2)\n ) {\n return \"line\"\n }\n return olineType\n}\n\nfunction lineTransformation(lineType, options) {\n return (data) =>\n builtInTransformations[differenceCatch(lineType.type, data)]({\n ...lineType,\n ...options,\n data\n })\n}\n","import { hierarchy } from \"d3-hierarchy\"\n\nexport function recursiveIDAccessor(idAccessor, node, accessorString) {\n if (node.parent) {\n accessorString = `${accessorString}-${recursiveIDAccessor(\n idAccessor,\n { ...node.parent, ...node.parent.data },\n accessorString\n )}`\n }\n return `${accessorString}-${idAccessor({ ...node, ...node.data })}`\n}\n\nexport const defaultHierarchicalIDAccessor = (d) => d.id || d.descendantIndex\n\nexport const nodesEdgesFromHierarchy = (\n baseRootNode,\n idAccessor = defaultHierarchicalIDAccessor\n) => {\n const edges = []\n const nodes = []\n\n const rootNode = baseRootNode.descendants\n ? baseRootNode\n : hierarchy(baseRootNode)\n\n const descendants = rootNode.descendants()\n\n let i = 0\n\n for (const node of descendants) {\n node.descendantIndex = i\n i++\n }\n\n for (const node of descendants) {\n const generatedID = `${\n idAccessor({\n ...node,\n ...node.data\n }) ?? defaultHierarchicalIDAccessor(node)\n }-${\n node.parent\n ? recursiveIDAccessor(\n idAccessor,\n { ...node.parent, ...node.parent.data },\n \"\"\n ) ?? node.parent.name\n : \"root\"\n }`\n\n const dataD = Object.assign(node, node.data || {}, {\n hierarchicalID: generatedID\n })\n nodes.push(dataD)\n if (node.parent !== null) {\n const dataParent = Object.assign(node.parent, node.parent.data || {})\n edges.push({\n source: dataParent,\n target: dataD,\n depth: node.depth,\n weight: 1,\n value: 1,\n _NWFEdgeKey: generatedID\n })\n }\n }\n\n return { edges, nodes }\n}\n\nexport function breadthFirstCompontents(baseNodes, hash) {\n const componentMap = {\n \"0\": { componentNodes: [], componentEdges: [] }\n }\n const components = [componentMap[\"0\"]]\n\n let componentID = 0\n\n traverseNodesBF(baseNodes, true)\n\n function traverseNodesBF(nodes, top) {\n for (const node of nodes) {\n const hashNode = hash.get(node)\n if (!hashNode) {\n componentMap[\"0\"].componentNodes.push(node)\n } else if (hashNode.component === -99) {\n if (top === true) {\n componentID++\n componentMap[componentID] = {\n componentNodes: [],\n componentEdges: []\n }\n components.push(componentMap[componentID])\n }\n\n hashNode.component = componentID\n componentMap[componentID].componentNodes.push(node)\n componentMap[componentID].componentEdges.push(...hashNode.edges)\n const traversibleNodes = [...hashNode.connectedNodes]\n traverseNodesBF(traversibleNodes, hash)\n }\n }\n }\n\n return components.sort(\n (a, b) => b.componentNodes.length - a.componentNodes.length\n )\n}\n\nexport const matrixify = ({ edgeHash, nodes, edgeWidthAccessor, nodeIDAccessor }) => {\n const matrix = []\n for (const nodeSource of nodes) {\n const nodeSourceID = nodeIDAccessor(nodeSource)\n const sourceRow = []\n matrix.push(sourceRow)\n for (const nodeTarget of nodes) {\n const nodeTargetID = nodeIDAccessor(nodeTarget)\n const theEdge = edgeHash.get(`${nodeSourceID}|${nodeTargetID}`)\n if (theEdge) {\n sourceRow.push(edgeWidthAccessor(theEdge))\n } else {\n sourceRow.push(0)\n }\n }\n }\n return matrix\n}\n","import type { Accessor } from \"./types\"\n\n/**\n * Create a legend configuration for HOC components\n *\n * @param data - Array of data points\n * @param colorBy - Field or function to determine color categories\n * @param colorScale - Optional d3 color scale function\n * @param getColor - Function to get color for a data point\n * @param strokeColor - Optional stroke color for legend items\n * @param strokeWidth - Optional stroke width for legend items\n * @returns Legend configuration object for Semiotic frames\n */\nexport function createLegend({\n data,\n colorBy,\n colorScale,\n getColor,\n strokeColor,\n strokeWidth\n}: {\n data: Array<Record<string, any>>\n colorBy: Accessor<string>\n colorScale?: ((v: string) => string)\n getColor: (d: Record<string, any>, accessor: Accessor<string>, scale?: ((v: string) => string)) => string\n strokeColor?: string\n strokeWidth?: number\n}) {\n // Get unique category values\n const uniqueValues = Array.from(\n new Set(\n data.map((d) => {\n if (typeof colorBy === \"function\") {\n return colorBy(d)\n }\n return d[colorBy as string]\n })\n )\n )\n\n // Create items array for the legend\n const items = uniqueValues.map((value) => {\n const sampleData =\n typeof colorBy === \"function\"\n ? data.find((d) => colorBy(d) === value)\n : data.find((d) => d[colorBy as string] === value)\n\n const color = sampleData\n ? getColor(sampleData, colorBy, colorScale)\n : colorScale\n ? colorScale(value)\n : \"#000000\"\n\n return {\n label: String(value),\n color\n }\n })\n\n return {\n legendGroups: [\n {\n styleFn: (d: { color: string }) => {\n const style: Record<string, string | number> = { fill: d.color, stroke: d.color }\n if (strokeColor !== undefined) {\n style.stroke = strokeColor\n }\n if (strokeWidth !== undefined) {\n style.strokeWidth = strokeWidth\n }\n return style\n },\n type: \"fill\" as const,\n items,\n label: \"\" // Required by LegendGroup interface\n }\n ]\n }\n}\n","import * as React from \"react\"\nimport type { Accessor } from \"../charts/shared/types\"\n\n/**\n * Configuration for a single tooltip field\n */\nexport interface TooltipField {\n /**\n * Label for this field\n */\n label?: string\n\n /**\n * Field name or accessor function to get the value\n * (alias for 'accessor')\n */\n key?: Accessor\n\n /**\n * Field name or accessor function to get the value\n */\n accessor?: Accessor\n\n /**\n * Optional format function for the value\n */\n format?: (value: unknown) => string\n}\n\n/**\n * Base tooltip configuration\n */\nexport interface TooltipConfig {\n /**\n * Array of fields to display in the tooltip\n * Can be simple field names or full TooltipField objects\n */\n fields?: Array<string | TooltipField>\n\n /**\n * Custom title accessor (field name or function)\n */\n title?: Accessor<string>\n\n /**\n * Custom format function for all values (if fields don't specify their own)\n */\n format?: (value: unknown) => string\n\n /**\n * Custom style object for the tooltip container\n */\n style?: React.CSSProperties\n\n /**\n * Custom className for the tooltip container\n */\n className?: string\n}\n\n/**\n * Multi-line tooltip configuration\n */\nexport interface MultiLineTooltipConfig extends TooltipConfig {\n /**\n * Show field labels (default: true)\n */\n showLabels?: boolean\n\n /**\n * Separator between label and value (default: \": \")\n */\n separator?: string\n}\n\n/**\n * Default tooltip styles following best practices\n */\nexport const defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n fontSize: \"14px\",\n lineHeight: \"1.5\",\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n maxWidth: \"300px\",\n wordWrap: \"break-word\"\n}\n\n/**\n * Extract value from data using accessor\n */\nfunction getValue(data: Record<string, unknown>, accessor: Accessor): unknown {\n if (typeof accessor === \"function\") {\n return accessor(data)\n }\n return data[accessor]\n}\n\n/**\n * Format a value for display\n */\nfunction formatValue(value: unknown, format?: (value: unknown) => string): string {\n if (format) {\n return format(value)\n }\n\n if (value === null || value === undefined) {\n return \"\"\n }\n\n // Format numbers with commas\n if (typeof value === \"number\") {\n return value.toLocaleString()\n }\n\n // Format dates\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n // Handle objects (e.g. resolved network nodes with an id property)\n if (typeof value === \"object\" && value !== null) {\n const obj = value as Record<string, unknown>\n if (obj.id !== undefined) return String(obj.id)\n if (obj.name !== undefined) return String(obj.name)\n return JSON.stringify(value)\n }\n\n return String(value)\n}\n\n/**\n * Create a simple tooltip that displays a single value or title\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={Tooltip({ title: \"name\" })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={Tooltip({\n * title: d => `${d.category}: ${d.value}`,\n * style: { background: \"#333\" }\n * })}\n * />\n * ```\n */\nexport function Tooltip(config: TooltipConfig = {}) {\n const {\n fields,\n title,\n format,\n style = {},\n className = \"\"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n let titleContent: React.ReactNode\n const fieldLines: Array<{ label?: string; value: string }> = []\n\n if (title) {\n const titleValue = getValue(data, title)\n titleContent = formatValue(titleValue, format)\n }\n\n if (fields && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n label = field\n accessor = field\n fieldFormat = format\n } else {\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n fieldLines.push({\n label,\n value: formatValue(value, fieldFormat)\n })\n })\n } else if (!title) {\n // Default: try common field names (only when no title or fields specified)\n const commonFields = [\"value\", \"y\", \"name\", \"id\", \"label\"]\n for (const field of commonFields) {\n if (data[field] !== undefined) {\n titleContent = formatValue(data[field], format)\n break\n }\n }\n\n // If still nothing, show first non-internal property\n if (!titleContent) {\n const keys = Object.keys(data).filter(k => !k.startsWith(\"_\"))\n if (keys.length > 0) {\n titleContent = formatValue(data[keys[0]], format)\n }\n }\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n return (\n <div\n className={`semiotic-tooltip ${className}`.trim()}\n style={mergedStyle}\n >\n {titleContent && <div style={{ fontWeight: fieldLines.length > 0 ? \"bold\" : \"normal\" }}>{titleContent}</div>}\n {fieldLines.map((line, index) => (\n <div key={index} style={{ marginTop: index === 0 && titleContent ? \"4px\" : 0 }}>\n {line.label && <span>{line.label}: </span>}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Create a multi-line tooltip that displays multiple fields\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\"name\", \"value\", \"category\"]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <LineChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * title: \"series\",\n * fields: [\n * { label: \"X\", accessor: \"x\", format: v => v.toFixed(2) },\n * { label: \"Y\", accessor: \"y\", format: v => v.toFixed(2) },\n * { label: \"Category\", accessor: \"category\" }\n * ]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\n * { label: \"Category\", accessor: \"category\" },\n * { label: \"Sales\", accessor: \"value\", format: v => `$${v.toLocaleString()}` }\n * ],\n * showLabels: true\n * })}\n * />\n * ```\n */\nexport function MultiLineTooltip(config: MultiLineTooltipConfig = {}) {\n const {\n fields = [],\n title,\n format,\n style = {},\n className = \"\",\n showLabels = true,\n separator = \": \"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n const lines: Array<{ label?: string; value: string }> = []\n\n // Add title line if specified\n if (title) {\n const titleValue = getValue(data, title)\n lines.push({\n value: formatValue(titleValue, format)\n })\n }\n\n // Add field lines\n if (fields && Array.isArray(fields) && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n // Simple string field name\n label = field\n accessor = field\n fieldFormat = format\n } else {\n // Full TooltipField object\n // Support both 'key' and 'accessor' for backward compatibility\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n const formattedValue = formatValue(value, fieldFormat)\n\n lines.push({\n label: showLabels ? label : undefined,\n value: formattedValue\n })\n })\n } else {\n // Default: show all non-internal properties\n const keys = Object.keys(data).filter(\n (k) => !k.startsWith(\"_\") && k !== \"data\"\n )\n keys.forEach((key) => {\n lines.push({\n label: showLabels ? key : undefined,\n value: formatValue(data[key], format)\n })\n })\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n // Safety check: ensure lines is an array\n if (!Array.isArray(lines) || lines.length === 0) {\n return null\n }\n\n return (\n <div\n className={`semiotic-tooltip semiotic-tooltip-multiline ${className}`.trim()}\n style={mergedStyle}\n >\n {lines.map((line, index) => (\n <div key={index} style={{ marginBottom: index < lines.length - 1 ? \"4px\" : 0 }}>\n {line.label && (\n <strong>\n {line.label}\n {separator}\n </strong>\n )}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Type for tooltip prop that chart components accept\n */\nexport type TooltipProp =\n | boolean\n | ((data: Record<string, unknown>) => React.ReactNode)\n | ReturnType<typeof Tooltip>\n | ReturnType<typeof MultiLineTooltip>\n | TooltipConfig\n\n/**\n * Convert a tooltip prop to the format Semiotic expects\n */\nexport function normalizeTooltip(tooltip: TooltipProp): boolean | Function {\n if (tooltip === true) {\n // Enable default tooltip\n return true\n }\n\n if (typeof tooltip === \"function\") {\n // Already a tooltip function, use it as tooltipContent\n return tooltip\n }\n\n if (tooltip === false || tooltip === undefined) {\n // No tooltip\n return false\n }\n\n // Config object with fields/title — convert to a tooltip function\n if (typeof tooltip === \"object\" && tooltip !== null && (\"fields\" in tooltip || \"title\" in tooltip)) {\n const config = tooltip as TooltipConfig\n return Tooltip(config)\n }\n\n // Should not reach here but return true to enable default tooltip\n return true\n}\n","import * as React from \"react\"\nimport { defaultTooltipStyle } from \"../../Tooltip/Tooltip\"\nimport type { HoverData } from \"../../realtime/types\"\n\nexport interface TooltipFieldConfig {\n label: string\n accessor: string | ((d: Record<string, any>) => any)\n role?: \"x\" | \"y\" | \"color\" | \"size\" | \"group\" | \"value\"\n}\n\n/**\n * Extract a display name from an accessor.\n * Strings return themselves; functions return \"value\".\n */\nexport function accessorName(acc: string | Function): string {\n return typeof acc === \"string\" ? acc : \"value\"\n}\n\nfunction formatVal(v: unknown): string {\n if (v == null) return \"–\"\n if (typeof v === \"number\") return v.toLocaleString()\n if (v instanceof Date) return v.toLocaleDateString()\n return String(v)\n}\n\nfunction resolveValue(d: Record<string, any>, acc: string | ((d: Record<string, any>) => any)): unknown {\n return typeof acc === \"function\" ? acc(d) : d[acc]\n}\n\n/**\n * Build a default tooltipContent function for StreamXYFrame HOCs.\n * Receives HoverData ({ data, time, value, x, y }) and renders\n * labeled fields derived from the HOC's props.\n */\nexport function buildDefaultTooltip(\n fields: TooltipFieldConfig[]\n): (hover: HoverData) => React.ReactNode {\n return (hover: HoverData) => {\n const d = hover.data\n if (!d) return null\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {fields.map((field, i) => {\n const raw = resolveValue(d, field.accessor)\n const display = formatVal(raw)\n return (\n <div key={i} style={i > 0 ? { marginTop: 2 } : undefined}>\n <span style={{ opacity: 0.8 }}>{field.label}: </span>\n <span style={{ fontWeight: field.role === \"color\" || field.role === \"group\" ? \"bold\" : \"normal\" }}>\n {display}\n </span>\n </div>\n )\n })}\n </div>\n )\n }\n}\n","import { useMemo } from \"react\"\nimport { createColorScale } from \"./colorUtils\"\nimport type { Accessor } from \"./types\"\n\n/**\n * Default fill color used when no colorBy is specified\n */\nexport const DEFAULT_COLOR = \"#007bff\"\n\n/**\n * Resolve an accessor (string key or function) into a function.\n * Used across chart components to normalize `valueAccessor`, `categoryAccessor`, etc.\n */\nexport function resolveAccessor<T = any>(\n accessor: string | ((d: Record<string, any>, i?: number) => T)\n): (d: Record<string, any>) => T {\n return typeof accessor === \"function\"\n ? accessor\n : (d: Record<string, any>) => d[accessor]\n}\n\n/**\n * Hook to create a color scale from data and colorBy configuration.\n * Returns undefined when colorBy is absent or is a function accessor.\n */\nexport function useColorScale(\n data: Array<Record<string, any>>,\n colorBy: Accessor<string> | undefined,\n colorScheme: string | string[] = \"category10\"\n): ((v: string) => string) | undefined {\n return useMemo(() => {\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(data, colorBy as string, colorScheme)\n }, [data, colorBy, colorScheme])\n}\n\n/**\n * Hook to sort data by a value accessor.\n * Used by BarChart and DotPlot.\n */\nexport function useSortedData(\n data: Array<Record<string, any>>,\n sort: boolean | \"asc\" | \"desc\" | ((a: Record<string, any>, b: Record<string, any>) => number),\n valueAccessor: Accessor<number>\n): Array<Record<string, any>> {\n return useMemo(() => {\n if (!sort) return data\n const copy = [...data]\n if (typeof sort === \"function\") return copy.sort(sort)\n const getValue = resolveAccessor<number>(valueAccessor)\n return sort === \"asc\"\n ? copy.sort((a, b) => getValue(a) - getValue(b))\n : copy.sort((a, b) => getValue(b) - getValue(a))\n }, [data, sort, valueAccessor])\n}\n","\"use client\"\nimport * as React from \"react\"\n\nexport interface ChartErrorProps {\n /** Component name for the error message */\n componentName: string\n /** The error message to display */\n message: string\n /** Chart width */\n width: number\n /** Chart height */\n height: number\n}\n\n/**\n * Renders a visible, styled error state inside the chart's dimensions.\n * Shows the component name, error message, and a hint for developers.\n *\n * Designed to be obvious in development but not alarming in production —\n * uses muted colors that adapt to light/dark backgrounds.\n */\nexport default function ChartError({\n componentName,\n message,\n width,\n height,\n}: ChartErrorProps) {\n return (\n <div\n role=\"alert\"\n style={{\n width,\n height: Math.max(height, 120),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px dashed rgba(128, 128, 128, 0.4)\",\n borderRadius: 8,\n background: \"rgba(128, 128, 128, 0.04)\",\n padding: 24,\n boxSizing: \"border-box\",\n }}\n >\n <div style={{ textAlign: \"center\", maxWidth: 400 }}>\n <div\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"rgba(128, 128, 128, 0.7)\",\n marginBottom: 6,\n fontFamily: \"monospace\",\n }}\n >\n {componentName}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"rgba(128, 128, 128, 0.9)\",\n lineHeight: 1.5,\n }}\n >\n {message}\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Validates chart data and accessors at render time.\n * Returns null if data is valid, or an error message string if not.\n *\n * Validation is intentionally lightweight — it checks the first data point\n * to catch common mistakes (wrong field names, missing data) without\n * iterating the entire dataset.\n */\n\ntype AccessorLike = string | ((...args: any[]) => any)\n\ninterface ArrayDataValidation {\n componentName: string\n data: any[] | undefined | null\n accessors?: Record<string, AccessorLike | undefined>\n requiredProps?: Record<string, any>\n}\n\ninterface ObjectDataValidation {\n componentName: string\n data: any | undefined | null\n dataLabel?: string\n}\n\ninterface NetworkDataValidation {\n componentName: string\n nodes?: any[] | undefined | null\n edges?: any[] | undefined | null\n nodesRequired?: boolean\n edgesRequired?: boolean\n accessors?: Record<string, AccessorLike | undefined>\n}\n\n/**\n * Validate array-based chart data (LineChart, BarChart, Scatterplot, etc.)\n */\nexport function validateArrayData({\n componentName,\n data,\n accessors,\n requiredProps,\n}: ArrayDataValidation): string | null {\n // Check required props first\n if (requiredProps) {\n for (const [name, value] of Object.entries(requiredProps)) {\n if (value === undefined || value === null) {\n return `${name} is required. Provide a field name or function.`\n }\n }\n }\n\n // Check data exists and is non-empty\n if (!data || !Array.isArray(data) || data.length === 0) {\n return \"No data provided. Pass a non-empty array to the data prop.\"\n }\n\n // Check accessors against the first data point\n if (accessors) {\n const sample = data[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n\n return null\n}\n\n/**\n * Validate object/hierarchical data (TreeDiagram, Treemap, CirclePack)\n */\nexport function validateObjectData({\n componentName,\n data,\n dataLabel = \"data\",\n}: ObjectDataValidation): string | null {\n if (data === undefined || data === null) {\n return `No ${dataLabel} provided. Pass a hierarchical data object to the ${dataLabel} prop.`\n }\n return null\n}\n\n/**\n * Validate network data (ForceDirectedGraph, ChordDiagram, SankeyDiagram)\n */\nexport function validateNetworkData({\n componentName,\n nodes,\n edges,\n nodesRequired = false,\n edgesRequired = true,\n accessors,\n}: NetworkDataValidation): string | null {\n if (edgesRequired && (!edges || !Array.isArray(edges) || edges.length === 0)) {\n return \"No edges provided. Pass a non-empty array to the edges prop.\"\n }\n\n if (nodesRequired && (!nodes || !Array.isArray(nodes) || nodes.length === 0)) {\n return \"No nodes provided. Pass a non-empty array to the nodes prop.\"\n }\n\n // Check accessors against first data point\n if (accessors) {\n if (nodes && nodes.length > 0) {\n const sample = nodes[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in node data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n }\n\n return null\n}\n","\"use client\"\n\n/**\n * Selection integration utilities for HOC charts.\n *\n * Provides helpers to normalize linkedHover/linkedBrush props and\n * wrap style functions with selection-aware opacity.\n */\n\n// ── Normalized config types ────────────────────────────────────────────────\n\nexport interface NormalizedLinkedHover {\n name: string\n fields: string[]\n}\n\nexport interface NormalizedLinkedBrush {\n name: string\n xField?: string\n yField?: string\n}\n\n// ── Prop normalizers ───────────────────────────────────────────────────────\n\n/**\n * Normalize the linkedHover prop into a consistent config object.\n *\n * - `true` → { name: \"hover\", fields: [] }\n * - `\"mySelection\"` → { name: \"mySelection\", fields: [] }\n * - `{ name: \"hl\", fields: [\"category\"] }` → as-is\n */\nexport function normalizeLinkedHover(\n prop: boolean | string | { name?: string; fields: string[] } | undefined,\n fallbackFields?: string[]\n): NormalizedLinkedHover | null {\n if (!prop) return null\n if (prop === true) {\n return { name: \"hover\", fields: fallbackFields || [] }\n }\n if (typeof prop === \"string\") {\n return { name: prop, fields: fallbackFields || [] }\n }\n return { name: prop.name || \"hover\", fields: prop.fields }\n}\n\n/**\n * Normalize the linkedBrush prop into a consistent config object.\n *\n * - `\"timeRange\"` → { name: \"timeRange\" }\n * - `{ name: \"dash\", xField: \"age\", yField: \"income\" }` → as-is\n */\nexport function normalizeLinkedBrush(\n prop: string | { name: string; xField?: string; yField?: string } | undefined\n): NormalizedLinkedBrush | null {\n if (!prop) return null\n if (typeof prop === \"string\") {\n return { name: prop }\n }\n return prop\n}\n\n// ── Style wrapper ──────────────────────────────────────────────────────────\n\nexport interface SelectionHookResult {\n isActive: boolean\n predicate: (datum: Record<string, any>) => boolean\n}\n\nexport interface SelectionStyleConfig {\n unselectedOpacity?: number\n unselectedStyle?: Record<string, any>\n selectedStyle?: Record<string, any>\n}\n\n/**\n * Wrap a base style function with selection awareness.\n * When a selection is active, non-matching datums get dimmed.\n */\nexport function wrapStyleWithSelection(\n baseStyleFn: (d: Record<string, any>) => Record<string, any>,\n selectionHook: SelectionHookResult | null,\n config?: SelectionStyleConfig\n): (d: Record<string, any>) => Record<string, any> {\n if (!selectionHook) return baseStyleFn\n\n return (d: Record<string, any>) => {\n const style = { ...baseStyleFn(d) }\n\n if (selectionHook.isActive) {\n if (selectionHook.predicate(d)) {\n // Selected: apply selectedStyle overrides if any\n if (config?.selectedStyle) {\n Object.assign(style, config.selectedStyle)\n }\n } else {\n // Unselected: dim the element\n style.fillOpacity = config?.unselectedOpacity ?? 0.2\n style.strokeOpacity = config?.unselectedOpacity ?? 0.2\n if (config?.unselectedStyle) {\n Object.assign(style, config.unselectedStyle)\n }\n }\n }\n\n return style\n }\n}\n","\"use client\"\nimport { createStore } from \"./createStore\"\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport type ResolutionMode = \"union\" | \"intersect\" | \"crossfilter\"\n\nexport interface FieldConstraint {\n type: \"point\"\n values: Set<any>\n}\n\nexport interface IntervalConstraint {\n type: \"interval\"\n range: [number, number]\n}\n\nexport type FieldSelection = FieldConstraint | IntervalConstraint\n\nexport interface SelectionClause {\n clientId: string\n type: \"point\" | \"interval\"\n fields: Record<string, FieldSelection>\n}\n\nexport interface Selection {\n name: string\n resolution: ResolutionMode\n clauses: Map<string, SelectionClause> // keyed by clientId\n}\n\nexport interface SelectionStoreState {\n selections: Map<string, Selection>\n setClause: (selectionName: string, clause: SelectionClause) => void\n clearClause: (selectionName: string, clientId: string) => void\n setResolution: (selectionName: string, mode: ResolutionMode) => void\n clearSelection: (selectionName: string) => void\n}\n\n// ── Predicate builders ─────────────────────────────────────────────────────\n\nfunction buildClausePredicate(clause: SelectionClause): (d: Record<string, any>) => boolean {\n const fieldTests: Array<(d: Record<string, any>) => boolean> = []\n\n for (const [field, constraint] of Object.entries(clause.fields)) {\n if (constraint.type === \"point\") {\n fieldTests.push((d) => constraint.values.has(d[field]))\n } else {\n const [lo, hi] = constraint.range\n fieldTests.push((d) => {\n const v = d[field]\n return v >= lo && v <= hi\n })\n }\n }\n\n // All fields in a clause must match (AND within clause)\n return (d) => fieldTests.every((fn) => fn(d))\n}\n\nexport function buildPredicate(\n selection: Selection,\n requestingClientId?: string\n): (d: Record<string, any>) => boolean {\n const clausePredicates: Array<(d: Record<string, any>) => boolean> = []\n\n for (const [clientId, clause] of selection.clauses) {\n // In crossfilter mode, exclude the requesting client's own clause\n if (selection.resolution === \"crossfilter\" && clientId === requestingClientId) continue\n clausePredicates.push(buildClausePredicate(clause))\n }\n\n if (clausePredicates.length === 0) return () => true\n\n return selection.resolution === \"intersect\"\n ? (d) => clausePredicates.every((fn) => fn(d))\n : (d) => clausePredicates.some((fn) => fn(d))\n}\n\n// ── Store factory ──────────────────────────────────────────────────────────\n\nfunction ensureSelection(\n selections: Map<string, Selection>,\n name: string\n): Selection {\n let sel = selections.get(name)\n if (!sel) {\n sel = { name, resolution: \"union\", clauses: new Map() }\n selections.set(name, sel)\n }\n return sel\n}\n\nexport const [SelectionProvider, useSelectionSelector] = createStore(\n (set: Function) => ({\n selections: new Map<string, Selection>(),\n\n setClause(selectionName: string, clause: SelectionClause) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = ensureSelection(selections, selectionName)\n const clauses = new Map(sel.clauses)\n clauses.set(clause.clientId, clause)\n selections.set(selectionName, { ...sel, clauses })\n return { selections }\n })\n },\n\n clearClause(selectionName: string, clientId: string) {\n set((current: SelectionStoreState) => {\n const existing = current.selections.get(selectionName)\n if (!existing) return {}\n const selections = new Map(current.selections)\n const clauses = new Map(existing.clauses)\n clauses.delete(clientId)\n selections.set(selectionName, { ...existing, clauses })\n return { selections }\n })\n },\n\n setResolution(selectionName: string, mode: ResolutionMode) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = ensureSelection(selections, selectionName)\n selections.set(selectionName, { ...sel, resolution: mode })\n return { selections }\n })\n },\n\n clearSelection(selectionName: string) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = selections.get(selectionName)\n if (sel) {\n selections.set(selectionName, { ...sel, clauses: new Map() })\n }\n return { selections }\n })\n }\n })\n)\n","\"use client\"\nimport { useId, useMemo, useCallback } from \"react\"\nimport {\n useSelectionSelector,\n buildPredicate,\n type SelectionClause,\n type FieldSelection\n} from \"./SelectionStore\"\n\n// ── useSelection ───────────────────────────────────────────────────────────\n\nexport interface UseSelectionOptions {\n /** Name of the selection to participate in */\n name: string\n /** Unique client ID. Defaults to React.useId() */\n clientId?: string\n /** Fields this client cares about (for predicate context) */\n fields?: string[]\n}\n\nexport interface UseSelectionResult {\n /** Returns true if the datum matches the current selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any selection clause is currently active */\n isActive: boolean\n /** Set a point selection (categorical values) */\n selectPoints: (fieldValues: Record<string, any[]>) => void\n /** Set an interval selection (numeric ranges) */\n selectInterval: (fieldRanges: Record<string, [number, number]>) => void\n /** Clear this client's clause */\n clear: () => void\n /** This client's ID */\n clientId: string\n}\n\nexport function useSelection(options: UseSelectionOptions): UseSelectionResult {\n const autoId = useId()\n const clientId = options.clientId || autoId\n const { name } = options\n\n const selection = useSelectionSelector(\n (state: any) => state.selections.get(name)\n )\n\n const setClause = useSelectionSelector((state: any) => state.setClause)\n const clearClauseFn = useSelectionSelector((state: any) => state.clearClause)\n\n const isActive = useMemo(() => {\n if (!selection) return false\n return selection.clauses.size > 0\n }, [selection])\n\n const predicate = useMemo(() => {\n if (!selection || selection.clauses.size === 0) return () => true\n return buildPredicate(selection, clientId)\n }, [selection, clientId])\n\n const selectPoints = useCallback(\n (fieldValues: Record<string, any[]>) => {\n const fields: Record<string, FieldSelection> = {}\n for (const [field, values] of Object.entries(fieldValues)) {\n fields[field] = { type: \"point\", values: new Set(values) }\n }\n const clause: SelectionClause = {\n clientId,\n type: \"point\",\n fields\n }\n setClause(name, clause)\n },\n [clientId, name, setClause]\n )\n\n const selectInterval = useCallback(\n (fieldRanges: Record<string, [number, number]>) => {\n const fields: Record<string, FieldSelection> = {}\n for (const [field, range] of Object.entries(fieldRanges)) {\n fields[field] = { type: \"interval\", range }\n }\n const clause: SelectionClause = {\n clientId,\n type: \"interval\",\n fields\n }\n setClause(name, clause)\n },\n [clientId, name, setClause]\n )\n\n const clear = useCallback(() => {\n clearClauseFn(name, clientId)\n }, [clearClauseFn, name, clientId])\n\n return { predicate, isActive, selectPoints, selectInterval, clear, clientId }\n}\n\n// ── useLinkedHover ─────────────────────────────────────────────────────────\n\nexport interface UseLinkedHoverOptions {\n /** Selection name. Defaults to \"hover\" */\n name?: string\n /** Fields to include in the hover selection */\n fields: string[]\n}\n\nexport interface UseLinkedHoverResult {\n /** Call with a datum to set hover, or null to clear */\n onHover: (datum: Record<string, any> | null) => void\n /** Returns true if datum matches the hover selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any hover is active */\n isActive: boolean\n}\n\nexport function useLinkedHover(options: UseLinkedHoverOptions): UseLinkedHoverResult {\n const selName = options.name || \"hover\"\n const { fields } = options\n\n const { predicate, isActive, selectPoints, clear, clientId } = useSelection({\n name: selName,\n fields\n })\n\n const onHover = useCallback(\n (datum: Record<string, any> | null) => {\n if (!datum) {\n clear()\n return\n }\n const fieldValues: Record<string, any[]> = {}\n for (const field of fields) {\n const val = datum[field]\n if (val !== undefined) {\n fieldValues[field] = [val]\n }\n }\n if (Object.keys(fieldValues).length > 0) {\n selectPoints(fieldValues)\n }\n },\n [fields, selectPoints, clear]\n )\n\n return { onHover, predicate, isActive }\n}\n\n// ── useBrushSelection ──────────────────────────────────────────────────────\n\nexport interface UseBrushSelectionOptions {\n /** Selection name */\n name: string\n /** Field mapped to the x-axis brush extent */\n xField?: string\n /** Field mapped to the y-axis brush extent */\n yField?: string\n}\n\nexport interface UseBrushSelectionResult {\n /** Interaction config to pass to frameProps.interaction */\n brushInteraction: {\n brush: \"xyBrush\" | \"xBrush\" | \"yBrush\"\n during: (extent: any) => void\n end: (extent: any) => void\n }\n /** Returns true if datum matches the brush selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any brush is active */\n isActive: boolean\n /** Clear the brush */\n clear: () => void\n}\n\nexport function useBrushSelection(options: UseBrushSelectionOptions): UseBrushSelectionResult {\n const { name, xField, yField } = options\n\n const { predicate, isActive, selectInterval, clear, clientId } = useSelection({\n name,\n fields: [xField, yField].filter(Boolean) as string[]\n })\n\n const brushType = xField && yField ? \"xyBrush\" : xField ? \"xBrush\" : \"yBrush\"\n\n const handleBrush = useCallback(\n (extent: any) => {\n if (!extent) {\n clear()\n return\n }\n\n const fieldRanges: Record<string, [number, number]> = {}\n\n if (brushType === \"xyBrush\" && Array.isArray(extent) && extent.length === 2) {\n // extent = [[x0, y0], [x1, y1]]\n if (xField) fieldRanges[xField] = [Math.min(extent[0][0], extent[1][0]), Math.max(extent[0][0], extent[1][0])]\n if (yField) fieldRanges[yField] = [Math.min(extent[0][1], extent[1][1]), Math.max(extent[0][1], extent[1][1])]\n } else if (brushType === \"xBrush\" && Array.isArray(extent)) {\n if (xField) fieldRanges[xField] = [Math.min(...extent), Math.max(...extent)]\n } else if (brushType === \"yBrush\" && Array.isArray(extent)) {\n if (yField) fieldRanges[yField] = [Math.min(...extent), Math.max(...extent)]\n }\n\n if (Object.keys(fieldRanges).length > 0) {\n selectInterval(fieldRanges)\n }\n },\n [brushType, xField, yField, selectInterval, clear]\n )\n\n const brushInteraction = useMemo(\n () => ({\n brush: brushType as \"xyBrush\" | \"xBrush\" | \"yBrush\",\n during: handleBrush,\n end: handleBrush\n }),\n [brushType, handleBrush]\n )\n\n return { brushInteraction, predicate, isActive, clear }\n}\n\n// ── useFilteredData ────────────────────────────────────────────────────────\n\n/**\n * Returns the subset of `data` that matches the given selection.\n * In crossfilter mode, pass the consumer's clientId so its own clause is excluded.\n */\nexport function useFilteredData<T extends Record<string, any>>(\n data: T[],\n selectionName: string,\n clientId?: string\n): T[] {\n const selection = useSelectionSelector(\n (state: any) => state.selections.get(selectionName)\n )\n\n return useMemo(() => {\n if (!selection || selection.clauses.size === 0) return data\n const pred = buildPredicate(selection, clientId)\n return data.filter(pred)\n }, [data, selection, clientId])\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps, MarginalGraphicsConfig } from \"../../stream/types\"\nimport { getColor, getSize } from \"../shared/colorUtils\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, normalizeLinkedBrush, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\nimport { useBrushSelection } from \"../../store/useSelection\"\n\n/**\n * Scatterplot component props\n */\nexport interface ScatterplotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps, AxisConfig {\n /** Array of data points. Each point should have x and y properties. */\n data: TDatum[]\n /** Field name or function to access x values @default \"x\" */\n xAccessor?: ChartAccessor<TDatum, number>\n /** Field name or function to access y values @default \"y\" */\n yAccessor?: ChartAccessor<TDatum, number>\n /** Field name or function to determine point color */\n colorBy?: ChartAccessor<TDatum, string>\n /** Color scheme for categorical data or custom colors array @default \"category10\" */\n colorScheme?: string | string[]\n /** Field name or function to determine point size */\n sizeBy?: ChartAccessor<TDatum, number>\n /** Min and max radius for points @default [3, 15] */\n sizeRange?: [number, number]\n /** Default point radius when sizeBy is not specified @default 5 */\n pointRadius?: number\n /** Point opacity @default 0.8 */\n pointOpacity?: number\n /** Enable hover annotations @default true */\n enableHover?: boolean\n /** Show grid lines @default false */\n showGrid?: boolean\n /** Show legend @default true (when colorBy is specified) */\n showLegend?: boolean\n /** Tooltip configuration */\n tooltip?: TooltipProp\n /** Marginal distribution plots in axis margins */\n marginalGraphics?: MarginalGraphicsConfig\n /** Additional StreamXYFrame props for advanced customization */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * Scatterplot - Visualize relationships between two continuous variables\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={[{x: 1, y: 10}, {x: 2, y: 20}]}\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n */\nexport function Scatterplot<TDatum extends Record<string, any> = Record<string, any>>(props: ScatterplotProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n colorBy,\n colorScheme = \"category10\",\n sizeBy,\n sizeRange = [3, 15],\n pointRadius = 5,\n pointOpacity = 0.8,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n marginalGraphics,\n frameProps = {},\n selection,\n linkedHover,\n linkedBrush\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n const brushConfig = normalizeLinkedBrush(linkedBrush)\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const brushHook = useBrushSelection({\n name: brushConfig?.name || \"__unused_brush__\",\n xField: brushConfig?.xField || (typeof xAccessor === \"string\" ? xAccessor : undefined),\n yField: brushConfig?.yField || (typeof yAccessor === \"string\" ? yAccessor : undefined)\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const sizeDomain = useMemo(() => {\n if (!sizeBy || safeData.length === 0) return undefined\n const sizes = safeData.map((d) =>\n typeof sizeBy === \"function\" ? sizeBy(d) : d[sizeBy]\n )\n return [Math.min(...sizes), Math.max(...sizes)] as [number, number]\n }, [safeData, sizeBy])\n\n const basePointStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { fillOpacity: pointOpacity }\n baseStyle.fill = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n baseStyle.r = sizeBy\n ? getSize(d, sizeBy, sizeRange, sizeDomain)\n : pointRadius\n return baseStyle\n }\n }, [colorBy, colorScale, sizeBy, sizeRange, sizeDomain, pointRadius, pointOpacity])\n\n const pointStyle = useMemo(\n () => wrapStyleWithSelection(basePointStyle, activeSelectionHook, selection),\n [basePointStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing all configured fields\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n ...(colorBy ? [{ label: accessorName(colorBy), accessor: colorBy, role: \"color\" as const }] : []),\n ...(sizeBy ? [{ label: accessorName(sizeBy), accessor: sizeBy, role: \"size\" as const }] : []),\n ]), [xAccessor, yAccessor, xLabel, yLabel, colorBy, sizeBy])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"Scatterplot\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n },\n })\n if (error) return <ChartError componentName=\"Scatterplot\" message={error} width={width} height={height} />\n\n const streamProps: StreamXYFrameProps = {\n chartType: \"scatter\",\n data: safeData,\n xAccessor,\n yAccessor,\n colorAccessor: colorBy || undefined,\n sizeAccessor: sizeBy || undefined,\n sizeRange,\n pointStyle,\n colorScheme,\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...(marginalGraphics && { marginalGraphics }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nScatterplot.displayName = \"Scatterplot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps } from \"../../stream/types\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\n/**\n * LineChart component props\n */\nexport interface LineChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps, AxisConfig {\n /**\n * Array of data points or array of line objects with coordinates.\n * @example\n * ```ts\n * // Simple format (single line)\n * [{x: 1, y: 10}, {x: 2, y: 20}]\n *\n * // Multiple lines with grouping\n * [{x: 1, y: 10, series: 'A'}, {x: 2, y: 20, series: 'A'}, {x: 1, y: 15, series: 'B'}]\n *\n * // Line objects format\n * [{label: 'Series A', coordinates: [{x: 1, y: 10}, {x: 2, y: 20}]}]\n * ```\n */\n data: TDatum[]\n\n /**\n * Field name or function to access x values\n * @default \"x\"\n */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access y values\n * @default \"y\"\n */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to group data into multiple lines\n * @example\n * ```ts\n * lineBy=\"series\" // Group by series field\n * lineBy={d => d.category} // Use function\n * ```\n */\n lineBy?: ChartAccessor<TDatum, string>\n\n /**\n * Field name in line objects that contains coordinate arrays\n * Used when data is in line objects format\n * @default \"coordinates\"\n */\n lineDataAccessor?: string\n\n /**\n * Field name or function to determine line color\n * @example\n * ```ts\n * colorBy=\"series\"\n * colorBy={d => d.label}\n * ```\n */\n colorBy?: ChartAccessor<TDatum, string>\n\n /**\n * Color scheme for categorical data or custom colors array\n * @default \"category10\"\n */\n colorScheme?: string | string[]\n\n /**\n * Curve interpolation type\n * @default \"linear\"\n */\n curve?: \"linear\" | \"monotoneX\" | \"monotoneY\" | \"step\" | \"stepAfter\" | \"stepBefore\" | \"basis\" | \"cardinal\" | \"catmullRom\"\n\n /**\n * Show points on the line\n * @default false\n */\n showPoints?: boolean\n\n /**\n * Point radius when showPoints is true\n * @default 3\n */\n pointRadius?: number\n\n /**\n * Fill area under the line\n * @default false\n */\n fillArea?: boolean\n\n /**\n * Area opacity when fillArea is true\n * @default 0.3\n */\n areaOpacity?: number\n\n /**\n * Line stroke width\n * @default 2\n */\n lineWidth?: number\n\n /**\n * Enable hover annotations\n * @default true\n */\n enableHover?: boolean\n\n /**\n * Show grid lines\n * @default false\n */\n showGrid?: boolean\n\n /**\n * Show legend for multiple lines\n * @default true (when multiple lines)\n */\n showLegend?: boolean\n\n /**\n * Tooltip configuration\n */\n tooltip?: TooltipProp\n\n /**\n * Additional StreamXYFrame props for advanced customization\n * For full control, consider using StreamXYFrame directly\n * @see https://semiotic.nteract.io/guides/xy-frame\n */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * LineChart - Visualize trends and time series data with lines\n *\n * A simplified wrapper around StreamXYFrame for creating line charts. Perfect for\n * showing trends, comparisons, and temporal patterns in your data.\n *\n * @example\n * ```tsx\n * // Simple line chart\n * <LineChart\n * data={[\n * {x: 1, y: 10},\n * {x: 2, y: 20},\n * {x: 3, y: 15}\n * ]}\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Multiple lines with grouping\n * <LineChart\n * data={[\n * {x: 1, y: 10, series: 'A'},\n * {x: 2, y: 20, series: 'A'},\n * {x: 1, y: 15, series: 'B'},\n * {x: 2, y: 25, series: 'B'}\n * ]}\n * lineBy=\"series\"\n * colorBy=\"series\"\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Area chart with custom curve\n * <LineChart\n * data={data}\n * curve=\"monotoneX\"\n * fillArea={true}\n * areaOpacity={0.3}\n * showPoints={true}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Advanced: Override StreamXYFrame props\n * <LineChart\n * data={data}\n * frameProps={{\n * lineType: { type: \"line\", interpolator: d3.curveCardinal },\n * customLineMark: ({ d }) => <path stroke=\"red\" />\n * }}\n * />\n * ```\n *\n * @remarks\n * This component wraps {@link StreamXYFrame} with sensible defaults for line charts.\n * For more advanced features like custom marks, annotations, or complex interactions,\n * use StreamXYFrame directly.\n *\n * **Breadcrumb to advanced usage:**\n * - Use the `frameProps` prop to pass any StreamXYFrame prop\n * - See StreamXYFrame documentation: https://semiotic.nteract.io/guides/xy-frame\n * - All StreamXYFrame props are available via `frameProps`\n *\n * @param props - LineChart configuration\n * @returns Rendered line chart\n */\nexport function LineChart<TDatum extends Record<string, any> = Record<string, any>>(props: LineChartProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n lineBy,\n lineDataAccessor = \"coordinates\",\n colorBy,\n colorScheme = \"category10\",\n curve = \"linear\",\n showPoints = false,\n pointRadius = 3,\n fillArea = false,\n areaOpacity = 0.3,\n lineWidth = 2,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n frameProps = {},\n selection,\n linkedHover\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n // Check if data is in line objects format (has lineDataAccessor field)\n const isLineObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined\n\n // Transform data to line format if needed\n const lineData = useMemo(() => {\n if (isLineObjectFormat) {\n // Data is already in line objects format\n return safeData\n }\n\n if (lineBy) {\n // Group data by lineBy field\n const grouped = safeData.reduce((acc, d) => {\n const key = typeof lineBy === \"function\" ? lineBy(d) : d[lineBy]\n if (!acc[key]) {\n const lineObj: Record<string, any> = { [lineDataAccessor]: [] }\n // Add the grouping field\n if (typeof lineBy === \"string\") {\n lineObj[lineBy] = key\n }\n acc[key] = lineObj\n }\n acc[key][lineDataAccessor].push(d)\n return acc\n }, {} as Record<string, Record<string, any>>)\n\n return Object.values(grouped)\n }\n\n // Single line - wrap in line object\n return [{ [lineDataAccessor]: safeData }]\n }, [safeData, lineBy, lineDataAccessor, isLineObjectFormat])\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n // Line style function\n const baseLineStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n strokeWidth: lineWidth\n }\n\n // Apply color\n if (colorBy) {\n baseStyle.stroke = getColor(d, colorBy, colorScale)\n } else {\n baseStyle.stroke = DEFAULT_COLOR\n }\n\n // Apply fill for area chart\n if (fillArea) {\n baseStyle.fill = baseStyle.stroke\n baseStyle.fillOpacity = areaOpacity\n }\n\n return baseStyle\n }\n }, [colorBy, colorScale, lineWidth, fillArea, areaOpacity])\n\n const lineStyle = useMemo(\n () => wrapStyleWithSelection(baseLineStyle, activeSelectionHook, selection),\n [baseLineStyle, activeSelectionHook, selection]\n )\n\n // Point style function (if showPoints is true)\n const pointStyle = useMemo(() => {\n if (!showPoints) return undefined\n\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n r: pointRadius,\n fillOpacity: 1\n }\n\n // Match line color\n if (colorBy) {\n baseStyle.fill = getColor(d.parentLine || d, colorBy, colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n\n return baseStyle\n }\n }, [showPoints, pointRadius, colorBy, colorScale])\n\n // Determine chart type for StreamXYFrame\n const chartType = fillArea ? \"area\" as const : \"line\" as const\n\n // Determine if we should show legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : lineData.length > 1\n\n // Build legend if needed\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n\n return createLegend({\n data: lineData,\n colorBy,\n colorScale,\n getColor\n })\n }, [shouldShowLegend, colorBy, lineData, colorScale])\n\n // Adjust margin for legend if present\n const margin = useMemo(() => {\n const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n\n // If legend is present and right margin is too small, increase it\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing all configured fields\n const groupField = lineBy || colorBy\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n ...(groupField ? [{ label: accessorName(groupField), accessor: groupField, role: \"group\" as const }] : []),\n ]), [xAccessor, yAccessor, xLabel, yLabel, groupField])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"LineChart\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n },\n })\n if (error) return <ChartError componentName=\"LineChart\" message={error} width={width} height={height} />\n\n // Flatten line data into a single array for StreamXYFrame\n const flattenedData = useMemo(() => {\n if (isLineObjectFormat || lineBy) {\n // Already grouped into line objects — flatten coordinates out\n return lineData.flatMap((line: Record<string, any>) => {\n const coords = line[lineDataAccessor] || []\n // Carry grouping field onto each datum\n if (lineBy && typeof lineBy === \"string\") {\n return coords.map((c: Record<string, any>) => ({ ...c, [lineBy]: line[lineBy] }))\n }\n return coords\n })\n }\n return safeData\n }, [lineData, lineDataAccessor, isLineObjectFormat, lineBy, safeData])\n\n // Build StreamXYFrame props\n const streamProps: StreamXYFrameProps = {\n chartType,\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: lineBy || undefined,\n curve,\n lineStyle,\n ...(showPoints && { pointStyle }),\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nLineChart.displayName = \"LineChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps } from \"../../stream/types\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\n/**\n * AreaChart component props\n */\nexport interface AreaChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps, AxisConfig {\n /**\n * Array of data points, grouped by category.\n * @example\n * ```ts\n * // Multiple areas with grouping\n * [{x: 1, y: 10, category: 'A'}, {x: 2, y: 20, category: 'A'}, {x: 1, y: 15, category: 'B'}]\n * ```\n */\n data: TDatum[]\n\n /**\n * Field name or function to access x values\n * @default \"x\"\n */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access y values\n * @default \"y\"\n */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to group data into multiple areas\n * @example\n * ```ts\n * areaBy=\"category\" // Group by category field\n * areaBy={d => d.group} // Use function\n * ```\n */\n areaBy?: ChartAccessor<TDatum, string>\n\n /**\n * Field name in area objects that contains coordinate arrays\n * Used when data is in area objects format\n * @default \"coordinates\"\n */\n lineDataAccessor?: string\n\n /**\n * Field name or function to determine area color\n * @example\n * ```ts\n * colorBy=\"category\"\n * colorBy={d => d.label}\n * ```\n */\n colorBy?: ChartAccessor<TDatum, string>\n\n /**\n * Color scheme for categorical data or custom colors array\n * @default \"category10\"\n */\n colorScheme?: string | string[]\n\n /**\n * Curve interpolation type\n * @default \"monotoneX\"\n */\n curve?: \"linear\" | \"monotoneX\" | \"monotoneY\" | \"step\" | \"stepAfter\" | \"stepBefore\" | \"basis\" | \"cardinal\" | \"catmullRom\"\n\n /**\n * Area opacity\n * @default 0.7\n */\n areaOpacity?: number\n\n /**\n * Show line on top of area\n * @default true\n */\n showLine?: boolean\n\n /**\n * Line stroke width when showLine is true\n * @default 2\n */\n lineWidth?: number\n\n /**\n * Enable hover annotations\n * @default true\n */\n enableHover?: boolean\n\n /**\n * Show grid lines\n * @default false\n */\n showGrid?: boolean\n\n /**\n * Show legend for multiple areas\n * @default true (when multiple areas)\n */\n showLegend?: boolean\n\n /**\n * Tooltip configuration\n */\n tooltip?: TooltipProp\n\n /**\n * Additional StreamXYFrame props for advanced customization\n * For full control, consider using StreamXYFrame directly\n * @see https://semiotic.nteract.io/guides/xy-frame\n */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * AreaChart - Visualize quantities over continuous intervals with overlapping filled areas\n *\n * Each series fills from its line down to the baseline. Multiple series overlap\n * with transparency so all shapes remain visible.\n *\n * For stacked areas use {@link StackedAreaChart}.\n *\n * @example\n * ```tsx\n * <AreaChart\n * data={[\n * {x: 1, y: 10, category: 'A'},\n * {x: 2, y: 20, category: 'A'},\n * {x: 1, y: 15, category: 'B'},\n * {x: 2, y: 25, category: 'B'}\n * ]}\n * areaBy=\"category\"\n * colorBy=\"category\"\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n */\nexport function AreaChart<TDatum extends Record<string, any> = Record<string, any>>(props: AreaChartProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n areaBy,\n lineDataAccessor = \"coordinates\",\n colorBy,\n colorScheme = \"category10\",\n curve = \"monotoneX\",\n areaOpacity = 0.7,\n showLine = true,\n lineWidth = 2,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n frameProps = {},\n selection,\n linkedHover\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n // Check if data is in area objects format (has lineDataAccessor field)\n const isAreaObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined\n\n // Transform data to line/area format if needed\n const areaData = useMemo(() => {\n if (isAreaObjectFormat) {\n // Data is already in area objects format\n return safeData\n }\n\n if (areaBy) {\n // Group data by areaBy field\n const grouped = safeData.reduce((acc, d) => {\n const key = typeof areaBy === \"function\" ? areaBy(d) : d[areaBy]\n if (!acc[key]) {\n const areaObj: Record<string, any> = { [lineDataAccessor]: [] }\n // Add the grouping field\n if (typeof areaBy === \"string\") {\n areaObj[areaBy] = key\n }\n acc[key] = areaObj\n }\n acc[key][lineDataAccessor].push(d)\n return acc\n }, {} as Record<string, Record<string, any>>)\n\n return Object.values(grouped)\n }\n\n // Single area - wrap in area object\n return [{ [lineDataAccessor]: safeData }]\n }, [safeData, areaBy, lineDataAccessor, isAreaObjectFormat])\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n // Area/line style function\n const baseLineStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {}\n\n // Apply color\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n\n baseStyle.fill = color\n baseStyle.fillOpacity = areaOpacity\n\n if (showLine) {\n baseStyle.stroke = color\n baseStyle.strokeWidth = lineWidth\n } else {\n baseStyle.stroke = \"none\"\n }\n\n return baseStyle\n }\n }, [colorBy, colorScale, areaOpacity, showLine, lineWidth])\n\n const lineStyle = useMemo(\n () => wrapStyleWithSelection(baseLineStyle, activeSelectionHook, selection),\n [baseLineStyle, activeSelectionHook, selection]\n )\n\n // Determine if we should show legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : areaData.length > 1\n\n // Build legend if needed\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n\n return createLegend({\n data: areaData,\n colorBy,\n colorScale,\n getColor\n })\n }, [shouldShowLegend, colorBy, areaData, colorScale])\n\n // Adjust margin for legend if present\n const margin = useMemo(() => {\n const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n\n // If legend is present and right margin is too small, increase it\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing all configured fields\n const groupField = areaBy || colorBy\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n ...(groupField ? [{ label: accessorName(groupField), accessor: groupField, role: \"group\" as const }] : []),\n ]), [xAccessor, yAccessor, xLabel, yLabel, groupField])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"AreaChart\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n },\n })\n if (error) return <ChartError componentName=\"AreaChart\" message={error} width={width} height={height} />\n\n // Flatten area data into a single array for StreamXYFrame\n const flattenedData = useMemo(() => {\n if (isAreaObjectFormat || areaBy) {\n return areaData.flatMap((area: Record<string, any>) => {\n const coords = area[lineDataAccessor] || []\n if (areaBy && typeof areaBy === \"string\") {\n return coords.map((c: Record<string, any>) => ({ ...c, [areaBy]: area[areaBy] }))\n }\n return coords\n })\n }\n return safeData\n }, [areaData, lineDataAccessor, isAreaObjectFormat, areaBy, safeData])\n\n // Build StreamXYFrame props\n const streamProps: StreamXYFrameProps = {\n chartType: \"area\",\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: areaBy || undefined,\n curve,\n lineStyle,\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nAreaChart.displayName = \"AreaChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps } from \"../../stream/types\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\n/**\n * StackedAreaChart component props\n */\nexport interface StackedAreaChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps, AxisConfig {\n /**\n * Array of data points, grouped by category.\n * @example\n * ```ts\n * [{x: 1, y: 10, category: 'A'}, {x: 2, y: 20, category: 'A'}, {x: 1, y: 15, category: 'B'}]\n * ```\n */\n data: TDatum[]\n\n /**\n * Field name or function to access x values\n * @default \"x\"\n */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access y values\n * @default \"y\"\n */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to group data into multiple areas\n * @example\n * ```ts\n * areaBy=\"category\" // Group by category field\n * areaBy={d => d.group} // Use function\n * ```\n */\n areaBy?: ChartAccessor<TDatum, string>\n\n /**\n * Field name in area objects that contains coordinate arrays\n * Used when data is in area objects format\n * @default \"coordinates\"\n */\n lineDataAccessor?: string\n\n /**\n * Field name or function to determine area color\n * @example\n * ```ts\n * colorBy=\"category\"\n * colorBy={d => d.label}\n * ```\n */\n colorBy?: ChartAccessor<TDatum, string>\n\n /**\n * Color scheme for categorical data or custom colors array\n * @default \"category10\"\n */\n colorScheme?: string | string[]\n\n /**\n * Curve interpolation type\n * @default \"monotoneX\"\n */\n curve?: \"linear\" | \"monotoneX\" | \"monotoneY\" | \"step\" | \"stepAfter\" | \"stepBefore\" | \"basis\" | \"cardinal\" | \"catmullRom\"\n\n /**\n * Area opacity\n * @default 0.7\n */\n areaOpacity?: number\n\n /**\n * Show line on top of area\n * @default true\n */\n showLine?: boolean\n\n /**\n * Line stroke width when showLine is true\n * @default 2\n */\n lineWidth?: number\n\n /**\n * Normalize to 100% stacked (proportional)\n * @default false\n */\n normalize?: boolean\n\n /**\n * Enable hover annotations\n * @default true\n */\n enableHover?: boolean\n\n /**\n * Show grid lines\n * @default false\n */\n showGrid?: boolean\n\n /**\n * Show legend for multiple areas\n * @default true (when multiple areas)\n */\n showLegend?: boolean\n\n /**\n * Tooltip configuration\n */\n tooltip?: TooltipProp\n\n /**\n * Additional StreamXYFrame props for advanced customization\n * For full control, consider using StreamXYFrame directly\n * @see https://semiotic.nteract.io/guides/xy-frame\n */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * StackedAreaChart - Visualize quantities stacked on top of each other over continuous intervals\n *\n * Each series is stacked so that the total height represents the sum of all series.\n * Use `normalize` for 100% stacked (proportional) areas.\n *\n * For overlapping (non-stacked) areas use {@link AreaChart}.\n *\n * @example\n * ```tsx\n * <StackedAreaChart\n * data={[\n * {x: 1, y: 10, category: 'A'},\n * {x: 2, y: 20, category: 'A'},\n * {x: 1, y: 15, category: 'B'},\n * {x: 2, y: 25, category: 'B'}\n * ]}\n * areaBy=\"category\"\n * colorBy=\"category\"\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n */\nexport function StackedAreaChart<TDatum extends Record<string, any> = Record<string, any>>(props: StackedAreaChartProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n areaBy,\n lineDataAccessor = \"coordinates\",\n colorBy,\n colorScheme = \"category10\",\n curve = \"monotoneX\",\n areaOpacity = 0.7,\n showLine = true,\n lineWidth = 2,\n normalize = false,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n frameProps = {},\n selection,\n linkedHover\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n // Check if data is in area objects format (has lineDataAccessor field)\n const isAreaObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined\n\n // Transform data to line/area format if needed\n const areaData = useMemo(() => {\n if (isAreaObjectFormat) {\n // Data is already in area objects format\n return safeData\n }\n\n if (areaBy) {\n // Group data by areaBy field\n const grouped = safeData.reduce((acc, d) => {\n const key = typeof areaBy === \"function\" ? areaBy(d) : d[areaBy]\n if (!acc[key]) {\n const areaObj: Record<string, any> = { [lineDataAccessor]: [] }\n // Add the grouping field\n if (typeof areaBy === \"string\") {\n areaObj[areaBy] = key\n }\n acc[key] = areaObj\n }\n acc[key][lineDataAccessor].push(d)\n return acc\n }, {} as Record<string, Record<string, any>>)\n\n return Object.values(grouped)\n }\n\n // Single area - wrap in area object\n return [{ [lineDataAccessor]: safeData }]\n }, [safeData, areaBy, lineDataAccessor, isAreaObjectFormat])\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n // Area/line style function\n const baseLineStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {}\n\n // Apply color\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n\n baseStyle.fill = color\n baseStyle.fillOpacity = areaOpacity\n\n if (showLine) {\n baseStyle.stroke = color\n baseStyle.strokeWidth = lineWidth\n } else {\n baseStyle.stroke = \"none\"\n }\n\n return baseStyle\n }\n }, [colorBy, colorScale, areaOpacity, showLine, lineWidth])\n\n const lineStyle = useMemo(\n () => wrapStyleWithSelection(baseLineStyle, activeSelectionHook, selection),\n [baseLineStyle, activeSelectionHook, selection]\n )\n\n // Determine if we should show legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : areaData.length > 1\n\n // Build legend if needed\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n\n return createLegend({\n data: areaData,\n colorBy,\n colorScale,\n getColor\n })\n }, [shouldShowLegend, colorBy, areaData, colorScale])\n\n // Adjust margin for legend if present\n const margin = useMemo(() => {\n const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n\n // If legend is present and right margin is too small, increase it\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing all configured fields\n const groupField = areaBy || colorBy\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n ...(groupField ? [{ label: accessorName(groupField), accessor: groupField, role: \"group\" as const }] : []),\n ]), [xAccessor, yAccessor, xLabel, yLabel, groupField])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"StackedAreaChart\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n },\n })\n if (error) return <ChartError componentName=\"StackedAreaChart\" message={error} width={width} height={height} />\n\n // Flatten area data into a single array for StreamXYFrame\n const flattenedData = useMemo(() => {\n if (isAreaObjectFormat || areaBy) {\n return areaData.flatMap((area: Record<string, any>) => {\n const coords = area[lineDataAccessor] || []\n if (areaBy && typeof areaBy === \"string\") {\n return coords.map((c: Record<string, any>) => ({ ...c, [areaBy]: area[areaBy] }))\n }\n return coords\n })\n }\n return safeData\n }, [areaData, lineDataAccessor, isAreaObjectFormat, areaBy, safeData])\n\n // Build StreamXYFrame props\n const streamProps: StreamXYFrameProps = {\n chartType: \"stackedarea\",\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: areaBy || undefined,\n curve,\n normalize,\n lineStyle,\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nStackedAreaChart.displayName = \"StackedAreaChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport { scaleSequential } from \"d3-scale\"\nimport { interpolateBlues, interpolateReds, interpolateGreens, interpolateViridis } from \"d3-scale-chromatic\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps } from \"../../stream/types\"\nimport { DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\n/**\n * Heatmap component props\n */\nexport interface HeatmapProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n /**\n * Array of data points with x, y, and value properties.\n * @example\n * ```ts\n * [{x: 1, y: 1, value: 10}, {x: 1, y: 2, value: 20}, {x: 2, y: 1, value: 15}]\n * ```\n */\n data: TDatum[]\n\n /**\n * Field name or function to access x values\n * @default \"x\"\n */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access y values\n * @default \"y\"\n */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access cell values\n * @default \"value\"\n */\n valueAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Label for the x-axis\n */\n xLabel?: string\n\n /**\n * Label for the y-axis\n */\n yLabel?: string\n\n /**\n * Format function for x-axis tick labels\n */\n xFormat?: (d: any) => string\n\n /**\n * Format function for y-axis tick labels\n */\n yFormat?: (d: any) => string\n\n /**\n * Color scheme for the heatmap\n * @default \"blues\"\n */\n colorScheme?: \"blues\" | \"reds\" | \"greens\" | \"viridis\" | \"custom\"\n\n /**\n * Custom color scale (used when colorScheme is \"custom\")\n * @example\n * ```ts\n * customColorScale={scaleSequential(interpolatePlasma).domain([0, 100])}\n * ```\n */\n customColorScale?: any\n\n /**\n * Show values in cells\n * @default false\n */\n showValues?: boolean\n\n /**\n * Format function for cell value labels\n */\n valueFormat?: (d: number) => string\n\n /**\n * Cell border color\n * @default \"#fff\"\n */\n cellBorderColor?: string\n\n /**\n * Cell border width\n * @default 1\n */\n cellBorderWidth?: number\n\n /**\n * Enable hover annotations\n * @default true\n */\n enableHover?: boolean\n\n /**\n * Tooltip configuration\n */\n tooltip?: TooltipProp\n\n /**\n * Additional StreamXYFrame props for advanced customization\n * For full control, consider using StreamXYFrame directly\n * @see https://semiotic.nteract.io/guides/xy-frame\n */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * Heatmap - Visualize matrix data with color-encoded cells\n *\n * A simplified wrapper around StreamXYFrame for creating heatmaps. Perfect for\n * showing patterns, correlations, and distributions in 2D data.\n *\n * @example\n * ```tsx\n * // Simple heatmap\n * <Heatmap\n * data={[\n * {x: 1, y: 1, value: 10},\n * {x: 1, y: 2, value: 20},\n * {x: 2, y: 1, value: 15},\n * {x: 2, y: 2, value: 25}\n * ]}\n * xLabel=\"Time\"\n * yLabel=\"Category\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With custom color scheme and value labels\n * <Heatmap\n * data={data}\n * colorScheme=\"viridis\"\n * showValues={true}\n * valueFormat={d => d.toFixed(1)}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Advanced: Custom color scale\n * <Heatmap\n * data={data}\n * colorScheme=\"custom\"\n * customColorScale={\n * scaleSequential(interpolatePlasma).domain([0, 100])\n * }\n * />\n * ```\n *\n * @remarks\n * This component wraps {@link StreamXYFrame} with sensible defaults for heatmaps.\n * For more advanced features like hexbins, contours, or custom summaries,\n * use StreamXYFrame directly.\n *\n * **Breadcrumb to advanced usage:**\n * - Use the `frameProps` prop to pass any StreamXYFrame prop\n * - See StreamXYFrame documentation: https://semiotic.nteract.io/guides/xy-frame\n * - All StreamXYFrame props are available via `frameProps`\n *\n * @param props - Heatmap configuration\n * @returns Rendered heatmap\n */\nexport function Heatmap<TDatum extends Record<string, any> = Record<string, any>>(props: HeatmapProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin = { top: 50, bottom: 60, left: 70, right: 80 },\n className,\n title,\n xAccessor = \"x\",\n yAccessor = \"y\",\n valueAccessor = \"value\",\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n colorScheme = \"blues\",\n customColorScale,\n showValues = false,\n valueFormat,\n cellBorderColor = \"#fff\",\n cellBorderWidth = 1,\n enableHover = true,\n tooltip,\n frameProps = {},\n selection,\n linkedHover\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, [])\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n // Get value accessor function\n const getValueFn = useMemo(() => {\n return typeof valueAccessor === \"function\"\n ? (d: Record<string, any>) => valueAccessor(d as TDatum)\n : (d: Record<string, any>) => d[valueAccessor]\n }, [valueAccessor])\n\n // Calculate value domain\n const valueDomain = useMemo(() => {\n const values = safeData.map(getValueFn)\n return [Math.min(...values), Math.max(...values)] as [number, number]\n }, [safeData, getValueFn])\n\n // Create color scale\n const colorScale = useMemo(() => {\n if (colorScheme === \"custom\" && customColorScale) {\n return customColorScale\n }\n\n const interpolators = {\n blues: interpolateBlues,\n reds: interpolateReds,\n greens: interpolateGreens,\n viridis: interpolateViridis\n }\n\n const interpolator = interpolators[colorScheme] || interpolateBlues\n\n return scaleSequential(interpolator).domain(valueDomain)\n }, [colorScheme, customColorScale, valueDomain])\n\n // Get unique x and y values for bin sizing\n const { xBinCount, yBinCount } = useMemo(() => {\n const getX = resolveAccessor(xAccessor)\n const getY = resolveAccessor(yAccessor)\n\n return {\n xBinCount: new Set(safeData.map(getX)).size,\n yBinCount: new Set(safeData.map(getY)).size\n }\n }, [safeData, xAccessor, yAccessor])\n\n // Transform data to summary format for StreamXYFrame\n const summaryData = useMemo(() => {\n return { coordinates: safeData }\n }, [safeData])\n\n // Summary style function\n const baseSummaryStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const value = getValueFn(d)\n return {\n fill: colorScale(value),\n stroke: cellBorderColor,\n strokeWidth: cellBorderWidth\n }\n }\n }, [getValueFn, colorScale, cellBorderColor, cellBorderWidth])\n\n const summaryStyle = useMemo(\n () => wrapStyleWithSelection(baseSummaryStyle, activeSelectionHook, selection),\n [baseSummaryStyle, activeSelectionHook, selection]\n )\n\n // Summary render function (for value labels)\n const summaryRenderMode = useMemo(() => {\n if (!showValues) return undefined\n\n const midpoint = (valueDomain[0] + valueDomain[1]) / 2\n\n return (d: Record<string, any>, i: number) => {\n const value = getValueFn(d)\n const displayValue = valueFormat ? valueFormat(value) : String(value)\n\n return (\n <text\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill={getValueFn(d) > midpoint ? \"#fff\" : \"#000\"}\n fontSize=\"12px\"\n >\n {displayValue}\n </text>\n )\n }\n }, [showValues, getValueFn, valueFormat, valueDomain])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing x, y, and value\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n { label: accessorName(valueAccessor), accessor: valueAccessor, role: \"value\" },\n ]), [xAccessor, yAccessor, xLabel, yLabel, valueAccessor])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"Heatmap\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n valueAccessor,\n },\n })\n if (error) return <ChartError componentName=\"Heatmap\" message={error} width={width} height={height} />\n\n // Build StreamXYFrame props\n const streamProps: StreamXYFrameProps = {\n chartType: \"heatmap\",\n data: safeData,\n xAccessor,\n yAccessor,\n valueAccessor,\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nHeatmap.displayName = \"Heatmap\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps, MarginalGraphicsConfig } from \"../../stream/types\"\nimport { getColor, getSize } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { buildDefaultTooltip, accessorName } from \"../shared/tooltipUtils\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, normalizeLinkedBrush, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\nimport { useBrushSelection } from \"../../store/useSelection\"\n\n/**\n * BubbleChart component props\n */\nexport interface BubbleChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps, AxisConfig {\n /**\n * Array of data points. Each point should have x, y, and size properties.\n * @example\n * ```ts\n * [{x: 1, y: 10, size: 50, category: 'A'}, {x: 2, y: 20, size: 30, category: 'B'}]\n * ```\n */\n data: TDatum[]\n\n /**\n * Field name or function to access x values\n * @default \"x\"\n */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to access y values\n * @default \"y\"\n */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /**\n * Field name or function to determine bubble size (required)\n * @example\n * ```ts\n * sizeBy=\"population\"\n * sizeBy={d => Math.sqrt(d.value)}\n * ```\n */\n sizeBy: ChartAccessor<TDatum, number>\n\n /**\n * Min and max radius for bubbles\n * @default [5, 40]\n */\n sizeRange?: [number, number]\n\n /**\n * Field name or function to determine bubble color\n * @example\n * ```ts\n * colorBy=\"category\"\n * colorBy={d => d.value > 10 ? 'red' : 'blue'}\n * ```\n */\n colorBy?: ChartAccessor<TDatum, string>\n\n /**\n * Color scheme for categorical data or custom colors array\n * @default \"category10\"\n */\n colorScheme?: string | string[]\n\n /**\n * Bubble opacity\n * @default 0.6\n */\n bubbleOpacity?: number\n\n /**\n * Bubble stroke width\n * @default 1\n */\n bubbleStrokeWidth?: number\n\n /**\n * Bubble stroke color\n * @default \"white\"\n */\n bubbleStrokeColor?: string\n\n /**\n * Enable hover annotations\n * @default true\n */\n enableHover?: boolean\n\n /**\n * Show grid lines\n * @default false\n */\n showGrid?: boolean\n\n /**\n * Show legend\n * @default true (when colorBy is specified)\n */\n showLegend?: boolean\n\n /**\n * Tooltip configuration\n */\n tooltip?: TooltipProp\n\n /**\n * Marginal distribution plots in axis margins\n */\n marginalGraphics?: MarginalGraphicsConfig\n\n /**\n * Additional StreamXYFrame props for advanced customization\n * For full control, consider using StreamXYFrame directly\n * @see https://semiotic.nteract.io/guides/xy-frame\n */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n/**\n * BubbleChart - Visualize three dimensions of data using x, y, and size\n *\n * A simplified wrapper around StreamXYFrame for creating bubble charts. Perfect for\n * showing relationships between three continuous variables or comparing\n * magnitudes across categories.\n *\n * @example\n * ```tsx\n * // Simple bubble chart\n * <BubbleChart\n * data={[\n * {x: 1, y: 10, size: 50, name: 'A'},\n * {x: 2, y: 20, size: 30, name: 'B'},\n * {x: 3, y: 15, size: 70, name: 'C'}\n * ]}\n * sizeBy=\"size\"\n * xLabel=\"Time\"\n * yLabel=\"Value\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With color encoding\n * <BubbleChart\n * data={data}\n * sizeBy=\"population\"\n * colorBy=\"continent\"\n * sizeRange={[5, 50]}\n * bubbleOpacity={0.7}\n * xLabel=\"GDP per Capita\"\n * yLabel=\"Life Expectancy\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Advanced: Override StreamXYFrame props\n * <BubbleChart\n * data={data}\n * sizeBy=\"value\"\n * frameProps={{\n * customPointMark: ({ d }) => <circle r={d.r} fill=\"gold\" />\n * }}\n * />\n * ```\n *\n * @remarks\n * This component wraps {@link StreamXYFrame} with sensible defaults for bubble charts.\n * For more advanced features like custom marks, annotations, or complex interactions,\n * use StreamXYFrame directly.\n *\n * **Breadcrumb to advanced usage:**\n * - Use the `frameProps` prop to pass any StreamXYFrame prop\n * - See StreamXYFrame documentation: https://semiotic.nteract.io/guides/xy-frame\n * - All StreamXYFrame props are available via `frameProps`\n *\n * @param props - BubbleChart configuration\n * @returns Rendered bubble chart\n */\nexport function BubbleChart<TDatum extends Record<string, any> = Record<string, any>>(props: BubbleChartProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n sizeBy,\n sizeRange = [5, 40],\n colorBy,\n colorScheme = \"category10\",\n bubbleOpacity = 0.6,\n bubbleStrokeWidth = 1,\n bubbleStrokeColor = \"white\",\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n marginalGraphics,\n frameProps = {},\n selection,\n linkedHover,\n linkedBrush\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called, conditional logic inside) ──────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n const brushConfig = normalizeLinkedBrush(linkedBrush)\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const brushHook = useBrushSelection({\n name: brushConfig?.name || \"__unused_brush__\",\n xField: brushConfig?.xField || (typeof xAccessor === \"string\" ? xAccessor : undefined),\n yField: brushConfig?.yField || (typeof yAccessor === \"string\" ? yAccessor : undefined)\n })\n\n // Only use the hooks when the corresponding props are provided\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n // Calculate size domain\n const sizeDomain = useMemo(() => {\n const sizes = safeData.map((d) => {\n if (typeof sizeBy === \"function\") {\n return sizeBy(d)\n }\n return d[sizeBy]\n })\n\n return [Math.min(...sizes), Math.max(...sizes)] as [number, number]\n }, [safeData, sizeBy])\n\n // Point style function\n const basePointStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n fillOpacity: bubbleOpacity,\n strokeWidth: bubbleStrokeWidth,\n stroke: bubbleStrokeColor\n }\n\n // Apply color\n if (colorBy) {\n baseStyle.fill = getColor(d, colorBy, colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n\n // Apply size\n baseStyle.r = getSize(d, sizeBy, sizeRange, sizeDomain)\n\n return baseStyle\n }\n }, [colorBy, colorScale, sizeBy, sizeRange, sizeDomain, bubbleOpacity, bubbleStrokeWidth, bubbleStrokeColor])\n\n const pointStyle = useMemo(\n () => wrapStyleWithSelection(basePointStyle, activeSelectionHook, selection),\n [basePointStyle, activeSelectionHook, selection]\n )\n\n // Determine if we should show legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n\n // Build legend if needed\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n\n return createLegend({\n data: safeData,\n colorBy,\n colorScale,\n getColor,\n strokeColor: bubbleStrokeColor,\n strokeWidth: bubbleStrokeWidth\n })\n }, [shouldShowLegend, colorBy, safeData, colorScale, bubbleStrokeColor, bubbleStrokeWidth])\n\n // Adjust margin for legend if present\n const margin = useMemo(() => {\n const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n\n // If legend is present and right margin is too small, increase it\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) {\n linkedHoverHook.onHover(d)\n }\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip showing all configured fields\n const defaultTooltipContent = useMemo(() => buildDefaultTooltip([\n { label: xLabel || accessorName(xAccessor), accessor: xAccessor, role: \"x\" },\n { label: yLabel || accessorName(yAccessor), accessor: yAccessor, role: \"y\" },\n { label: accessorName(sizeBy), accessor: sizeBy, role: \"size\" },\n ...(colorBy ? [{ label: accessorName(colorBy), accessor: colorBy, role: \"color\" as const }] : []),\n ]), [xAccessor, yAccessor, xLabel, yLabel, sizeBy, colorBy])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"BubbleChart\",\n data: safeData,\n accessors: {\n xAccessor,\n yAccessor,\n },\n requiredProps: { sizeBy },\n })\n if (error) return <ChartError componentName=\"BubbleChart\" message={error} width={width} height={height} />\n\n // Build StreamXYFrame props\n const streamProps: StreamXYFrameProps = {\n chartType: \"bubble\",\n data: safeData,\n xAccessor,\n yAccessor,\n colorAccessor: colorBy || undefined,\n sizeAccessor: sizeBy,\n sizeRange,\n pointStyle,\n colorScheme,\n size: [width, height],\n margin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...(marginalGraphics && { marginalGraphics }),\n ...frameProps\n }\n\n return <StreamXYFrame {...streamProps} />\n}\nBubbleChart.displayName = \"BubbleChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useEffect } from \"react\"\nimport { SelectionProvider, useSelectionSelector } from \"./store/SelectionStore\"\nimport type { ResolutionMode } from \"./store/SelectionStore\"\n\n// Re-export hooks for convenience\nexport { useSelection, useLinkedHover, useBrushSelection, useFilteredData } from \"./store/useSelection\"\nexport type {\n UseSelectionOptions,\n UseSelectionResult,\n UseLinkedHoverOptions,\n UseLinkedHoverResult,\n UseBrushSelectionOptions,\n UseBrushSelectionResult\n} from \"./store/useSelection\"\n\n// ── Props ──────────────────────────────────────────────────────────────────\n\nexport interface LinkedChartsProps {\n children: React.ReactNode\n /** Pre-configure selections with resolution modes */\n selections?: Record<string, { resolution?: ResolutionMode }>\n}\n\n// ── Resolution initializer ─────────────────────────────────────────────────\n\nfunction ResolutionInit({ selections }: { selections: Record<string, { resolution?: ResolutionMode }> }) {\n const setResolution = useSelectionSelector((state: any) => state.setResolution)\n\n useEffect(() => {\n for (const [name, config] of Object.entries(selections)) {\n if (config.resolution) {\n setResolution(name, config.resolution)\n }\n }\n }, []) // Run once on mount\n\n return null\n}\n\n// ── LinkedCharts component ─────────────────────────────────────────────────\n\n/**\n * LinkedCharts — context provider for coordinated chart views.\n *\n * Wraps any number of chart components (at any depth) and enables\n * cross-highlighting, brushing-and-linking, and cross-filtering via\n * the `selection`, `linkedHover`, and `linkedBrush` props on each chart.\n *\n * @example\n * ```tsx\n * <LinkedCharts>\n * <Scatterplot data={d} xAccessor=\"x\" yAccessor=\"y\" colorBy=\"cat\"\n * linkedHover={{ name: \"hl\", fields: [\"cat\"] }}\n * selection={{ name: \"hl\" }} />\n * <BarChart data={agg} categoryAccessor=\"cat\" valueAccessor=\"total\"\n * selection={{ name: \"hl\" }} />\n * </LinkedCharts>\n * ```\n *\n * @example\n * ```tsx\n * // Cross-filtering (each chart's own brush is excluded from its filter)\n * <LinkedCharts selections={{ dash: { resolution: \"crossfilter\" } }}>\n * <Scatterplot data={d} xAccessor=\"age\" yAccessor=\"income\"\n * linkedBrush={{ name: \"dash\", xField: \"age\", yField: \"income\" }}\n * selection={{ name: \"dash\" }} />\n * <BarChart data={d} categoryAccessor=\"region\" valueAccessor=\"count\"\n * selection={{ name: \"dash\" }} />\n * </LinkedCharts>\n * ```\n */\nexport function LinkedCharts({ children, selections }: LinkedChartsProps) {\n return (\n <SelectionProvider>\n {selections && <ResolutionInit selections={selections} />}\n {children}\n </SelectionProvider>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback, useState, useRef, useEffect } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameHandle, HoverData } from \"../../stream/types\"\nimport { brush as d3Brush } from \"d3-brush\"\nimport { select as d3Select } from \"d3-selection\"\nimport { getColor } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { LinkedCharts } from \"../../LinkedCharts\"\nimport { useSelection, useBrushSelection } from \"../../store/useSelection\"\nimport { useSelectionSelector } from \"../../store/SelectionStore\"\n\n// Internal field used to identify datums across cells\nconst SPLOM_IDX = \"__splomIdx\"\n\n// Shared clientId for all hover writers — ensures each new hover REPLACES\n// the previous one (same key in the clause Map) instead of accumulating.\nconst HOVER_CLIENT_ID = \"splom-hover-source\"\n\nconst CELL_MARGIN = { top: 4, bottom: 4, left: 4, right: 4 }\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ScatterplotMatrixProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n /** Array of data objects */\n data: TDatum[]\n /** Array of field names to include in the matrix */\n fields: string[]\n /** Optional display labels for fields */\n fieldLabels?: Record<string, string>\n /** Field or function to determine point color */\n colorBy?: ChartAccessor<TDatum, string>\n /** Color scheme @default \"category10\" */\n colorScheme?: string | string[]\n /** Size of each cell in pixels @default 150 */\n cellSize?: number\n /** Gap between cells in pixels @default 4 */\n cellGap?: number\n /** Point radius @default 2 */\n pointRadius?: number\n /** Point opacity @default 0.5 */\n pointOpacity?: number\n /** What to show on the diagonal @default \"histogram\" */\n diagonal?: \"histogram\" | \"density\" | \"label\"\n /** Number of histogram bins @default 20 */\n histogramBins?: number\n /** Brush interaction mode @default \"crossfilter\" */\n brushMode?: \"crossfilter\" | \"intersect\" | false\n /** Enable hover cross-highlighting @default true */\n hoverMode?: boolean\n /** Opacity for unselected points @default 0.1 */\n unselectedOpacity?: number\n /** Show grid lines @default false */\n showGrid?: boolean\n /** Tooltip configuration */\n tooltip?: TooltipProp\n /** Show legend @default true when colorBy is set */\n showLegend?: boolean\n /** Field or function to identify each data point in tooltips. Defaults to \"Row {index}\" */\n idAccessor?: string | ((d: TDatum) => string)\n}\n\n// ── Cell Brush Overlay ────────────────────────────────────────────────────\n\ninterface CellBrushOverlayProps {\n frameRef: React.RefObject<StreamXYFrameHandle | null>\n cellSize: number\n xField: string\n yField: string\n onBrush: (extent: [number, number][] | null) => void\n}\n\nfunction CellBrushOverlay({ frameRef, cellSize, xField, yField, onBrush }: CellBrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n\n const chartW = cellSize - CELL_MARGIN.left - CELL_MARGIN.right\n const chartH = cellSize - CELL_MARGIN.top - CELL_MARGIN.bottom\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const g = d3Select(svgRef.current).select<SVGGElement>(\".brush-g\")\n const brush = d3Brush()\n .extent([[0, 0], [chartW, chartH]])\n .on(\"brush end\", (event: any) => {\n const scales = frameRef.current?.getScales()\n if (!scales) return\n\n if (!event.selection) {\n onBrush(null)\n return\n }\n\n const [[px0, py0], [px1, py1]] = event.selection\n const dataExtent: [number, number][] = [\n [scales.x.invert(px0), scales.y.invert(py0)],\n [scales.x.invert(px1), scales.y.invert(py1)]\n ]\n onBrush(dataExtent)\n })\n\n g.call(brush as any)\n\n // Style the brush\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.15)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brush.on(\"brush end\", null)\n }\n }, [chartW, chartH, frameRef, onBrush])\n\n return (\n <svg\n ref={svgRef}\n width={cellSize}\n height={cellSize}\n style={{ position: \"absolute\", top: 0, left: 0 }}\n >\n <g className=\"brush-g\" transform={`translate(${CELL_MARGIN.left},${CELL_MARGIN.top})`} />\n </svg>\n )\n}\n\n// ── Scatterplot Cell ───────────────────────────────────────────────────────\n\ninterface CellProps {\n data: Record<string, any>[]\n xField: string\n yField: string\n fieldLabels: Record<string, string>\n cellSize: number\n pointRadius: number\n pointOpacity: number\n colorBy?: ChartAccessor<any, string>\n colorScale?: (v: string) => string\n brushSelectionName: string\n hoverSelectionName: string\n unselectedOpacity: number\n showGrid: boolean\n tooltip?: TooltipProp\n /** \"brush\" or \"hover\" — mutually exclusive */\n mode: \"brush\" | \"hover\"\n /** Callback when a point is hovered (hover mode only). */\n onPointHover?: (datum: Record<string, any> | null, px?: number, py?: number) => void\n}\n\nfunction ScatterplotCell({\n data,\n xField,\n yField,\n fieldLabels,\n cellSize,\n pointRadius,\n pointOpacity,\n colorBy,\n colorScale,\n brushSelectionName,\n hoverSelectionName,\n unselectedOpacity,\n showGrid,\n tooltip,\n mode,\n onPointHover\n}: CellProps) {\n const frameRef = useRef<StreamXYFrameHandle>(null)\n const clientId = `splom-${xField}-${yField}`\n\n // Brush selection (crossfilter) — only used in brush mode\n const brushSelectionHook = useSelection({\n name: brushSelectionName,\n clientId,\n fields: [xField, yField]\n })\n\n const brushHook = useBrushSelection({\n name: brushSelectionName,\n xField,\n yField\n })\n\n // Hover selection — all cells share HOVER_CLIENT_ID so each new hover\n // REPLACES the previous cell's clause instead of accumulating.\n const hoverHook = useSelection({\n name: hoverSelectionName,\n clientId: HOVER_CLIENT_ID,\n fields: [SPLOM_IDX]\n })\n\n const hoverSelectPoints = hoverHook.selectPoints\n\n // Brush callback: convert d3-brush data-space extent to useBrushSelection format\n const handleBrush = useCallback(\n (extent: [number, number][] | null) => {\n if (!extent) {\n brushHook.brushInteraction.end(null)\n return\n }\n brushHook.brushInteraction.during(extent)\n },\n [brushHook.brushInteraction]\n )\n\n const customHoverBehavior = useCallback(\n (hover: HoverData | null) => {\n if (!hover) {\n onPointHover?.(null)\n return\n }\n const d = hover.data\n const idx = d?.[SPLOM_IDX]\n if (idx !== undefined) {\n hoverSelectPoints({ [SPLOM_IDX]: [idx] })\n onPointHover?.(d, hover.x + CELL_MARGIN.left, hover.y + CELL_MARGIN.top)\n }\n },\n [hoverSelectPoints, onPointHover]\n )\n\n const pointStyle = useCallback(\n (d: Record<string, any>) => {\n const style: Record<string, any> = {\n opacity: pointOpacity,\n r: pointRadius\n }\n\n if (colorBy) {\n style.fill = getColor(d, colorBy, colorScale)\n } else {\n style.fill = DEFAULT_COLOR\n }\n\n if (mode === \"hover\") {\n const hoverHighlighted = hoverHook.isActive && hoverHook.predicate(d)\n if (hoverHighlighted) {\n style.opacity = 1\n style.r = pointRadius * 2.5\n style.stroke = \"#333\"\n style.strokeWidth = 1.5\n } else if (hoverHook.isActive) {\n style.opacity = pointOpacity * 0.6\n }\n } else {\n // brush mode\n const brushDimmed = brushSelectionHook.isActive && !brushSelectionHook.predicate(d)\n if (brushDimmed) {\n style.opacity = unselectedOpacity\n }\n }\n\n return style\n },\n [colorBy, colorScale, pointOpacity, pointRadius, mode, brushSelectionHook.isActive, brushSelectionHook.predicate, hoverHook.isActive, hoverHook.predicate, unselectedOpacity]\n )\n\n return (\n <div style={{ position: \"relative\", width: cellSize, height: cellSize }}>\n <StreamXYFrame\n ref={frameRef}\n chartType=\"scatter\"\n data={data}\n size={[cellSize, cellSize]}\n xAccessor={xField}\n yAccessor={yField}\n pointStyle={pointStyle}\n margin={CELL_MARGIN}\n showAxes={false}\n enableHover={mode === \"hover\"}\n customHoverBehavior={mode === \"hover\" ? customHoverBehavior : undefined}\n tooltipContent={mode === \"hover\" ? (() => null) : undefined}\n />\n {mode === \"brush\" && (\n <CellBrushOverlay\n frameRef={frameRef}\n cellSize={cellSize}\n xField={xField}\n yField={yField}\n onBrush={handleBrush}\n />\n )}\n </div>\n )\n}\n\n// ── Diagonal Cell (Histogram) ──────────────────────────────────────────────\n\ninterface DiagonalCellProps {\n data: Record<string, any>[]\n field: string\n label: string\n cellSize: number\n bins: number\n colorBy?: ChartAccessor<any, string>\n colorScale?: (v: string) => string\n brushSelectionName: string\n hoverSelectionName: string\n unselectedOpacity: number\n /** \"brush\" or \"hover\" — matches parent mode */\n mode: \"brush\" | \"hover\"\n}\n\nfunction DiagonalCell({\n data,\n field,\n label,\n cellSize,\n bins,\n colorBy,\n colorScale,\n brushSelectionName,\n hoverSelectionName,\n unselectedOpacity,\n mode\n}: DiagonalCellProps) {\n const brushHook = useSelection({\n name: brushSelectionName,\n clientId: `splom-diag-${field}`,\n fields: [field]\n })\n\n const hoverHook = useSelection({\n name: hoverSelectionName,\n clientId: `splom-diag-${field}-hover`,\n fields: [SPLOM_IDX]\n })\n\n // Use the active mode's predicate\n const activeHook = mode === \"hover\" ? hoverHook : brushHook\n const isActive = activeHook.isActive\n const activePredicate = activeHook.predicate\n\n const histogram = useMemo(() => {\n const values = data.map((d) => d[field]).filter((v) => v != null && !isNaN(v))\n if (values.length === 0) return { bars: [], selectedBars: [], max: 0 }\n\n const min = Math.min(...values)\n const max = Math.max(...values)\n const binWidth = (max - min) / bins || 1\n\n const counts = new Array(bins).fill(0)\n const selectedCounts = new Array(bins).fill(0)\n\n for (const d of data) {\n const v = d[field]\n if (v == null || isNaN(v)) continue\n const idx = Math.min(Math.floor((v - min) / binWidth), bins - 1)\n counts[idx]++\n if (!isActive || activePredicate(d)) {\n selectedCounts[idx]++\n }\n }\n\n const maxCount = Math.max(...counts, 1)\n\n return {\n bars: counts.map((c, i) => ({\n x: (i / bins) * cellSize,\n w: (cellSize / bins) - 1,\n h: (c / maxCount) * (cellSize - 24),\n count: c\n })),\n selectedBars: selectedCounts.map((c, i) => ({\n x: (i / bins) * cellSize,\n w: (cellSize / bins) - 1,\n h: (c / maxCount) * (cellSize - 24),\n count: c\n })),\n max: maxCount\n }\n }, [data, field, bins, cellSize, isActive, activePredicate])\n\n return (\n <svg width={cellSize} height={cellSize} style={{ overflow: \"hidden\" }}>\n <text\n x={cellSize / 2}\n y={14}\n textAnchor=\"middle\"\n fontSize={11}\n fontWeight=\"bold\"\n fill=\"#333\"\n >\n {label}\n </text>\n {/* Full distribution (dimmed when selection active) */}\n {histogram.bars.map((bar, i) => (\n <rect\n key={`bg-${i}`}\n x={bar.x}\n y={cellSize - bar.h}\n width={Math.max(bar.w, 1)}\n height={bar.h}\n fill=\"#ccc\"\n opacity={isActive ? 0.3 : 0.6}\n />\n ))}\n {/* Selected distribution */}\n {isActive &&\n histogram.selectedBars.map((bar, i) => (\n <rect\n key={`sel-${i}`}\n x={bar.x}\n y={cellSize - bar.h}\n width={Math.max(bar.w, 1)}\n height={bar.h}\n fill={DEFAULT_COLOR}\n opacity={0.7}\n />\n ))}\n </svg>\n )\n}\n\n// ── Label Cell ─────────────────────────────────────────────────────────────\n\nfunction LabelCell({ label, cellSize }: { label: string; cellSize: number }) {\n return (\n <svg width={cellSize} height={cellSize}>\n <text\n x={cellSize / 2}\n y={cellSize / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fontSize={12}\n fontWeight=\"bold\"\n fill=\"#333\"\n >\n {label}\n </text>\n </svg>\n )\n}\n\n// ── ScatterplotMatrix ──────────────────────────────────────────────────────\n\nfunction ScatterplotMatrixInner<TDatum extends Record<string, any> = Record<string, any>>(\n props: ScatterplotMatrixProps<TDatum>\n) {\n const {\n data,\n fields,\n fieldLabels = {},\n colorBy,\n colorScheme = \"category10\",\n cellSize = 150,\n cellGap = 4,\n pointRadius = 2,\n pointOpacity = 0.5,\n diagonal = \"histogram\",\n histogramBins = 20,\n brushMode = \"crossfilter\",\n hoverMode = true,\n unselectedOpacity = 0.1,\n showGrid = false,\n tooltip,\n showLegend,\n idAccessor,\n width,\n height,\n className\n } = props\n\n const brushSelectionName = \"splom\"\n const hoverSelectionName = \"splom-hover\"\n\n // Brush and hover are mutually exclusive: hover wins when enabled\n const cellMode: \"brush\" | \"hover\" = hoverMode ? \"hover\" : (brushMode ? \"brush\" : \"hover\")\n\n // Grid-level hover state — single tooltip for the entire matrix\n const clearSelection = useSelectionSelector((s: any) => s.clearSelection)\n const [hoveredInfo, setHoveredInfo] = useState<{\n datum: Record<string, any>\n xField: string\n yField: string\n colIndex: number\n rowIndex: number\n /** Pixel x of the point within its cell */\n px: number\n /** Pixel y of the point within its cell */\n py: number\n } | null>(null)\n\n // Clear all hover state when mouse leaves the grid\n const handleGridMouseLeave = useCallback(() => {\n clearSelection(hoverSelectionName)\n setHoveredInfo(null)\n }, [clearSelection, hoverSelectionName])\n\n // Stamp each datum with a stable index for cross-cell identity matching\n const indexedData = useMemo(() => {\n return ((data || []) as Record<string, any>[]).map((d, i) => {\n if (d[SPLOM_IDX] !== undefined) return d\n return { ...d, [SPLOM_IDX]: i }\n })\n }, [data])\n\n const colorScale = useColorScale(indexedData, colorBy, colorScheme)\n\n const n = fields.length\n const labelWidth = 40\n\n // Legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return null\n const colorField = typeof colorBy === \"string\" ? colorBy : null\n if (!colorField) return null\n const categories = [...new Set(indexedData.map((d) => d[colorField]))]\n return categories.map((cat) => ({\n label: String(cat),\n color: colorScale ? colorScale(String(cat)) : DEFAULT_COLOR\n }))\n }, [shouldShowLegend, colorBy, indexedData, colorScale])\n\n const gridStyle = useMemo(\n () => ({\n display: \"grid\",\n gridTemplateColumns: `${labelWidth}px ${fields.map(() => `${cellSize}px`).join(\" \")}`,\n gridTemplateRows: `${fields.map(() => `${cellSize}px`).join(\" \")} ${labelWidth}px`,\n gap: `${cellGap}px`,\n width: \"fit-content\"\n }),\n [fields, cellSize, cellGap, labelWidth]\n )\n\n return (\n <div className={className} style={{ position: \"relative\" }}>\n {legend && (\n <div style={{ display: \"flex\", gap: 12, marginBottom: 8, flexWrap: \"wrap\" }}>\n {legend.map((item) => (\n <div key={item.label} style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <span\n style={{\n display: \"inline-block\",\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n backgroundColor: item.color\n }}\n />\n <span style={{ fontSize: 11 }}>{item.label}</span>\n </div>\n ))}\n </div>\n )}\n <div style={gridStyle} onMouseLeave={cellMode === \"hover\" ? handleGridMouseLeave : undefined}>\n {fields.map((rowField, row) => (\n <React.Fragment key={`row-${rowField}`}>\n {/* Row label */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\",\n fontSize: 11,\n fontWeight: \"bold\",\n color: \"#333\"\n }}\n >\n {fieldLabels[rowField] || rowField}\n </div>\n\n {/* Cells for this row */}\n {fields.map((colField, col) => {\n if (row === col) {\n // Diagonal\n if (diagonal === \"label\") {\n return (\n <LabelCell\n key={`diag-${rowField}`}\n label={fieldLabels[rowField] || rowField}\n cellSize={cellSize}\n />\n )\n }\n return (\n <DiagonalCell\n key={`diag-${rowField}`}\n data={indexedData}\n field={rowField}\n label={fieldLabels[rowField] || rowField}\n cellSize={cellSize}\n bins={histogramBins}\n colorBy={colorBy}\n colorScale={colorScale}\n brushSelectionName={brushSelectionName}\n hoverSelectionName={hoverSelectionName}\n unselectedOpacity={unselectedOpacity}\n mode={cellMode}\n />\n )\n }\n\n return (\n <ScatterplotCell\n key={`cell-${rowField}-${colField}`}\n data={indexedData}\n xField={colField}\n yField={rowField}\n fieldLabels={fieldLabels}\n cellSize={cellSize}\n pointRadius={pointRadius}\n pointOpacity={pointOpacity}\n colorBy={colorBy}\n colorScale={colorScale}\n brushSelectionName={brushSelectionName}\n hoverSelectionName={hoverSelectionName}\n unselectedOpacity={unselectedOpacity}\n showGrid={showGrid}\n tooltip={tooltip}\n mode={cellMode}\n onPointHover={cellMode === \"hover\" ? (datum, px, py) => {\n if (datum) {\n setHoveredInfo({\n datum,\n xField: colField,\n yField: rowField,\n colIndex: col,\n rowIndex: row,\n px: px ?? 0,\n py: py ?? 0\n })\n } else {\n setHoveredInfo(null)\n }\n } : undefined}\n />\n )\n })}\n </React.Fragment>\n ))}\n\n {/* Bottom column labels */}\n <div /> {/* Empty corner cell */}\n {fields.map((field) => (\n <div\n key={`col-label-${field}`}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 11,\n fontWeight: \"bold\",\n color: \"#333\"\n }}\n >\n {fieldLabels[field] || field}\n </div>\n ))}\n </div>\n {/* Single tooltip for the entire matrix — positioned above the hovered point */}\n {hoveredInfo && cellMode === \"hover\" && (() => {\n const d = hoveredInfo.datum\n const xFieldLabel = fieldLabels[hoveredInfo.xField] || hoveredInfo.xField\n const yFieldLabel = fieldLabels[hoveredInfo.yField] || hoveredInfo.yField\n const colorLabel = colorBy\n ? typeof colorBy === \"function\" ? (colorBy as Function)(d) : d[colorBy as string]\n : null\n // Resolve ID for header\n const idLabel = idAccessor\n ? (typeof idAccessor === \"function\" ? (idAccessor as Function)(d) : d[idAccessor as string])\n : `Row ${d[SPLOM_IDX]}`\n // Cell origin in grid coordinates\n const cellLeft = labelWidth + hoveredInfo.colIndex * (cellSize + cellGap)\n const cellTop = hoveredInfo.rowIndex * (cellSize + cellGap)\n // Point position within the cell\n const tooltipLeft = cellLeft + hoveredInfo.px\n const tooltipTop = cellTop + hoveredInfo.py - 8 // 8px above the point\n return (\n <div\n style={{\n position: \"absolute\",\n left: tooltipLeft,\n top: tooltipTop,\n transform: \"translate(-50%, -100%)\",\n color: \"#333\",\n background: \"rgba(255,255,255,0.95)\",\n border: \"1px solid #ddd\",\n borderRadius: 3,\n padding: \"4px 8px\",\n fontSize: 11,\n lineHeight: 1.4,\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n zIndex: 10\n }}\n >\n <div style={{ fontWeight: \"bold\", marginBottom: 2 }}>{String(idLabel)}</div>\n <div>{xFieldLabel}: {d[hoveredInfo.xField] != null ? Number(d[hoveredInfo.xField]).toFixed(1) : \"–\"}</div>\n <div>{yFieldLabel}: {d[hoveredInfo.yField] != null ? Number(d[hoveredInfo.yField]).toFixed(1) : \"–\"}</div>\n {colorLabel != null && <div style={{ opacity: 0.8 }}>{typeof colorBy === \"string\" ? colorBy : \"group\"}: {String(colorLabel)}</div>}\n </div>\n )\n })()}\n </div>\n )\n}\n\n/**\n * ScatterplotMatrix (SPLOM) — multi-dimensional scatter visualization\n *\n * Renders an N×N grid of scatterplots for all pairwise combinations of the\n * specified fields. Diagonal cells show histograms. Supports two interaction\n * modes:\n *\n * - **Hover** (default): hover a point to cross-highlight the same datum\n * in every cell. Set `hoverMode={true}` (the default).\n * - **Brush**: drag to select a region in one cell; matching points are\n * highlighted across all cells (crossfilter: the brushed cell excludes\n * its own filter). Set `hoverMode={false}` to enable brush mode.\n *\n * The two modes are mutually exclusive — hover takes priority when enabled.\n *\n * @example\n * ```tsx\n * <ScatterplotMatrix\n * data={iris}\n * fields={[\"sepalLength\", \"sepalWidth\", \"petalLength\", \"petalWidth\"]}\n * colorBy=\"species\"\n * cellSize={160}\n * diagonal=\"histogram\"\n * />\n * ```\n */\nexport function ScatterplotMatrix<TDatum extends Record<string, any> = Record<string, any>>(\n props: ScatterplotMatrixProps<TDatum>\n) {\n const { brushMode = \"crossfilter\", hoverMode = true } = props\n\n const selectionConfig: Record<string, { resolution?: \"union\" | \"intersect\" | \"crossfilter\" }> = {}\n if (!hoverMode && brushMode) {\n selectionConfig.splom = { resolution: brushMode as \"crossfilter\" | \"intersect\" }\n }\n if (hoverMode) {\n selectionConfig[\"splom-hover\"] = { resolution: \"union\" }\n }\n\n return (\n <LinkedCharts selections={selectionConfig}>\n <ScatterplotMatrixInner {...props} />\n </LinkedCharts>\n )\n}\nScatterplotMatrix.displayName = \"ScatterplotMatrix\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useState, useRef, useEffect, useMemo, useCallback } from \"react\"\nimport { brushX, brushY } from \"d3-brush\"\nimport { select } from \"d3-selection\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type { StreamXYFrameProps, StreamScales } from \"../../stream/types\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, AxisConfig, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\n\n// ── Types ──────────────────────────────────────────────────────────────\n\nexport interface MinimapConfig {\n /** Height of the minimap overview (default: 60) */\n height?: number\n /** Margin for the minimap chart */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Line style override for the minimap */\n lineStyle?: (d: Record<string, any>) => Record<string, any>\n /** Show axes in minimap (default: false) */\n showAxes?: boolean\n /** Background color for minimap */\n background?: string\n /** Brush direction: \"x\" (default) or \"y\" */\n brushDirection?: \"x\" | \"y\"\n}\n\nexport interface MinimapChartProps<TDatum extends Record<string, any> = Record<string, any>>\n extends BaseChartProps,\n AxisConfig {\n /** Array of data points or line objects with coordinates */\n data: TDatum[]\n\n /** X accessor (default: \"x\") */\n xAccessor?: ChartAccessor<TDatum, number>\n\n /** Y accessor (default: \"y\") */\n yAccessor?: ChartAccessor<TDatum, number>\n\n /** Group data into multiple lines */\n lineBy?: ChartAccessor<TDatum, string>\n\n /** Field containing coordinate arrays in line objects (default: \"coordinates\") */\n lineDataAccessor?: string\n\n /** Color-by field or function */\n colorBy?: ChartAccessor<TDatum, string>\n\n /** Color scheme (default: \"category10\") */\n colorScheme?: string | string[]\n\n /** Curve type (default: \"linear\") */\n curve?: \"linear\" | \"monotoneX\" | \"monotoneY\" | \"step\" | \"stepAfter\" | \"stepBefore\" | \"basis\" | \"cardinal\" | \"catmullRom\"\n\n /** Line stroke width (default: 2) */\n lineWidth?: number\n\n /** Fill area under lines */\n fillArea?: boolean\n\n /** Area opacity when fillArea is true (default: 0.3) */\n areaOpacity?: number\n\n /** Show points on lines */\n showPoints?: boolean\n\n /** Point radius (default: 3) */\n pointRadius?: number\n\n /** Enable hover (default: true) */\n enableHover?: boolean\n\n /** Show grid (default: false) */\n showGrid?: boolean\n\n /** Show legend */\n showLegend?: boolean\n\n /** Tooltip config */\n tooltip?: TooltipProp\n\n /** Minimap configuration */\n minimap?: MinimapConfig\n\n /** Show minimap above the main chart (default: false — below) */\n renderBefore?: boolean\n\n /** Callback when brush extent changes */\n onBrush?: (extent: [number, number] | null) => void\n\n /** Controlled brush extent */\n brushExtent?: [number, number]\n\n /** Additional StreamXYFrame props */\n frameProps?: Partial<Omit<StreamXYFrameProps, \"chartType\" | \"data\" | \"size\">>\n}\n\n// ── Brush overlay ──────────────────────────────────────────────────────\n\ninterface BrushOverlayProps {\n width: number\n height: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: StreamScales | null\n brushDirection: \"x\" | \"y\"\n extent: [number, number] | null\n onBrush: (extent: [number, number] | null) => void\n}\n\nfunction BrushOverlay({\n width,\n height,\n margin,\n scales,\n brushDirection,\n extent,\n onBrush\n}: BrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const brushRef = useRef<any>(null)\n const isUpdatingRef = useRef(false)\n\n const totalWidth = width + margin.left + margin.right\n const totalHeight = height + margin.top + margin.bottom\n\n useEffect(() => {\n if (!svgRef.current || !scales) return\n\n const g = select(svgRef.current).select<SVGGElement>(\".brush-group\")\n\n const brush = brushDirection === \"x\"\n ? brushX().extent([[0, 0], [width, height]])\n : brushY().extent([[0, 0], [width, height]])\n\n brush.on(\"brush end\", (event: any) => {\n if (isUpdatingRef.current) return\n if (!event.sourceEvent) return // programmatic — skip\n\n const sel = event.selection\n if (!sel) {\n onBrush(null)\n return\n }\n\n const scale = brushDirection === \"x\" ? scales.x : scales.y\n const inv = scale.invert\n if (!inv) return\n\n const domain: [number, number] = brushDirection === \"x\"\n ? [inv(sel[0]), inv(sel[1])]\n : [inv(sel[0]), inv(sel[1])]\n\n onBrush(domain)\n })\n\n g.call(brush)\n brushRef.current = brush\n\n // Style the brush selection\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.2)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brush.on(\"brush end\", null)\n }\n }, [scales, width, height, brushDirection, onBrush])\n\n // Sync controlled extent to brush position\n useEffect(() => {\n if (!brushRef.current || !scales || !svgRef.current) return\n\n const g = select(svgRef.current).select<SVGGElement>(\".brush-group\")\n const scale = brushDirection === \"x\" ? scales.x : scales.y\n\n isUpdatingRef.current = true\n if (extent) {\n const pixelExtent: [number, number] = [scale(extent[0]), scale(extent[1])]\n g.call(brushRef.current.move, pixelExtent)\n } else {\n g.call(brushRef.current.move, null)\n }\n isUpdatingRef.current = false\n }, [extent, scales, brushDirection])\n\n return (\n <svg\n ref={svgRef}\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"all\"\n }}\n >\n <g className=\"brush-group\" transform={`translate(${margin.left},${margin.top})`} />\n </svg>\n )\n}\n\n// ── MinimapChart ────────────────────────────────────────────────────────\n\nexport function MinimapChart<TDatum extends Record<string, any> = Record<string, any>>(\n props: MinimapChartProps<TDatum>\n) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n xAccessor = \"x\",\n yAccessor = \"y\",\n lineBy,\n lineDataAccessor = \"coordinates\",\n colorBy,\n colorScheme = \"category10\",\n curve = \"linear\",\n lineWidth = 2,\n fillArea = false,\n areaOpacity = 0.3,\n showPoints = false,\n pointRadius = 3,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n minimap: minimapConfig = {},\n renderBefore = false,\n onBrush,\n brushExtent: controlledExtent,\n frameProps = {}\n } = props\n\n const safeData = data || []\n\n // ── Brush state ─────────────────────────────────────────────────────\n const [internalExtent, setInternalExtent] = useState<[number, number] | null>(null)\n const brushExtent = controlledExtent ?? internalExtent\n\n const handleBrush = useCallback(\n (ext: [number, number] | null) => {\n if (!controlledExtent) {\n setInternalExtent(ext)\n }\n onBrush?.(ext)\n },\n [controlledExtent, onBrush]\n )\n\n // ── Overview ref to get scales ──────────────────────────────────────\n const overviewRef = useRef<any>(null)\n const [overviewScales, setOverviewScales] = useState<StreamScales | null>(null)\n\n // Poll for scales after mount (overview sets them async via rAF)\n useEffect(() => {\n const check = () => {\n const s = overviewRef.current?.getScales?.()\n if (s) {\n setOverviewScales(s)\n } else {\n requestAnimationFrame(check)\n }\n }\n requestAnimationFrame(check)\n }, [data])\n\n // ── Data normalization (same as LineChart) ──────────────────────────\n\n const isLineObjectFormat = safeData[0]?.[lineDataAccessor] !== undefined\n\n const lineData = useMemo(() => {\n if (isLineObjectFormat) return safeData\n\n if (lineBy) {\n const grouped = safeData.reduce((acc, d) => {\n const key = typeof lineBy === \"function\" ? lineBy(d) : d[lineBy as string]\n if (!acc[key]) {\n const lineObj: Record<string, any> = { [lineDataAccessor]: [] }\n if (typeof lineBy === \"string\") lineObj[lineBy] = key\n acc[key] = lineObj\n }\n acc[key][lineDataAccessor].push(d)\n return acc\n }, {} as Record<string, Record<string, any>>)\n return Object.values(grouped)\n }\n\n return [{ [lineDataAccessor]: safeData }]\n }, [safeData, lineBy, lineDataAccessor, isLineObjectFormat])\n\n const flattenedData = useMemo(() => {\n if (isLineObjectFormat || lineBy) {\n return lineData.flatMap((line: Record<string, any>) => {\n const coords = line[lineDataAccessor] || []\n if (lineBy && typeof lineBy === \"string\") {\n return coords.map((c: Record<string, any>) => ({ ...c, [lineBy]: line[lineBy] }))\n }\n return coords\n })\n }\n return safeData\n }, [lineData, lineDataAccessor, isLineObjectFormat, lineBy, safeData])\n\n // ── Color / style ───────────────────────────────────────────────────\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const mainLineStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { strokeWidth: lineWidth }\n style.stroke = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n if (fillArea) {\n style.fill = style.stroke\n style.fillOpacity = areaOpacity\n }\n return style\n }\n }, [colorBy, colorScale, lineWidth, fillArea, areaOpacity])\n\n const overviewLineStyle = useMemo(() => {\n if (minimapConfig.lineStyle) return minimapConfig.lineStyle\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { strokeWidth: 1 }\n style.stroke = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return style\n }\n }, [colorBy, colorScale, minimapConfig.lineStyle])\n\n const pointStyle = useMemo(() => {\n if (!showPoints) return undefined\n return (d: Record<string, any>) => {\n const style: Record<string, any> = { r: pointRadius, fillOpacity: 1 }\n style.fill = colorBy ? getColor(d.parentLine || d, colorBy, colorScale) : DEFAULT_COLOR\n return style\n }\n }, [showPoints, pointRadius, colorBy, colorScale])\n\n // ── Legend ───────────────────────────────────────────────────────────\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : lineData.length > 1\n\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: lineData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, lineData, colorScale])\n\n // ── Margins ─────────────────────────────────────────────────────────\n\n const mainMargin = useMemo(() => {\n const def = { top: 50, bottom: 60, left: 70, right: 40 }\n const m = { ...def, ...userMargin }\n if (legend && m.right < 120) m.right = 120\n return m\n }, [userMargin, legend])\n\n const minimapHeight = minimapConfig.height || 60\n const minimapMargin = useMemo(() => {\n return {\n top: minimapConfig.margin?.top ?? 0,\n bottom: minimapConfig.margin?.bottom ?? 20,\n left: minimapConfig.margin?.left ?? mainMargin.left,\n right: minimapConfig.margin?.right ?? mainMargin.right\n }\n }, [minimapConfig.margin, mainMargin])\n\n const brushDirection = minimapConfig.brushDirection || \"x\"\n\n // ── Validation ──────────────────────────────────────────────────────\n\n const error = validateArrayData({\n componentName: \"MinimapChart\",\n data: safeData,\n accessors: { xAccessor, yAccessor }\n })\n if (error) return <ChartError componentName=\"MinimapChart\" message={error} width={width} height={height} />\n\n // ── Chart type ──────────────────────────────────────────────────────\n\n const chartType = fillArea ? \"area\" as const : \"line\" as const\n\n // ── Build StreamXYFrame props ───────────────────────────────────────\n\n const mainProps: StreamXYFrameProps = {\n chartType,\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: lineBy || undefined,\n curve,\n lineStyle: mainLineStyle,\n ...(showPoints && { pointStyle }),\n size: [width, height],\n margin: mainMargin,\n showAxes: true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n enableHover,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(tooltip && { tooltipContent: normalizeTooltip(tooltip) as any }),\n // Apply brush extent to main chart\n ...(brushExtent && { xExtent: brushExtent }),\n ...frameProps\n }\n\n const overviewProps: StreamXYFrameProps = {\n chartType,\n data: flattenedData,\n xAccessor,\n yAccessor,\n groupAccessor: lineBy || undefined,\n curve,\n lineStyle: overviewLineStyle,\n size: [width, minimapHeight + minimapMargin.top + minimapMargin.bottom],\n margin: minimapMargin,\n showAxes: minimapConfig.showAxes ?? false,\n background: minimapConfig.background,\n enableHover: false\n }\n\n // ── Render ──────────────────────────────────────────────────────────\n\n const overviewChart = (\n <div\n key=\"minimap\"\n style={{ position: \"relative\", width }}\n >\n <StreamXYFrame ref={overviewRef} {...overviewProps} />\n <BrushOverlay\n width={width - minimapMargin.left - minimapMargin.right}\n height={minimapHeight}\n margin={minimapMargin}\n scales={overviewScales}\n brushDirection={brushDirection}\n extent={brushExtent}\n onBrush={handleBrush}\n />\n </div>\n )\n\n const mainChart = (\n <div key=\"main\">\n <StreamXYFrame {...mainProps} />\n </div>\n )\n\n return (\n <div className={`minimap-chart${className ? ` ${className}` : \"\"}`}>\n {renderBefore ? overviewChart : mainChart}\n {renderBefore ? mainChart : overviewChart}\n </div>\n )\n}\nMinimapChart.displayName = \"MinimapChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, useSortedData, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\n/**\n * BarChart component props\n */\nexport interface BarChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n sort?: boolean | \"asc\" | \"desc\" | ((a: Record<string, any>, b: Record<string, any>) => number)\n barPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\n/**\n * BarChart - Visualize categorical data with bars.\n */\nexport function BarChart<TDatum extends Record<string, any> = Record<string, any>>(props: BarChartProps<TDatum>) {\n const {\n data,\n width = 600,\n height = 400,\n margin: userMargin,\n className,\n title,\n categoryAccessor = \"category\",\n valueAccessor = \"value\",\n orientation = \"vertical\",\n categoryLabel,\n valueLabel,\n valueFormat,\n colorBy,\n colorScheme = \"category10\",\n sort = false,\n barPadding = 5,\n enableHover = true,\n showGrid = false,\n showLegend,\n tooltip,\n frameProps = {},\n selection,\n linkedHover\n } = props\n\n const safeData = data || []\n\n // ── Selection hooks (always called) ────────────────────────────────────\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [])\n\n const selectionHook = useSelection({\n name: selection?.name || \"__unused__\",\n fields: []\n })\n\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n // ── Core chart logic ───────────────────────────────────────────────────\n\n const sortedData = useSortedData(safeData, sort, valueAccessor)\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {}\n if (colorBy) {\n baseStyle.fill = getColor(d, colorBy, colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorScale])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: sortedData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, sortedData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n // ── Hover behavior ─────────────────────────────────────────────────────\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => {\n if (linkedHover) linkedHoverHook.onHover(d ? (d.data || d) : null)\n },\n [linkedHover, linkedHoverHook]\n )\n\n // Default tooltip\n const defaultTooltipContent = useMemo(() => {\n const showColorField = colorBy && colorBy !== categoryAccessor\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const cat = typeof categoryAccessor === \"function\" ? categoryAccessor(datum as TDatum) : datum[categoryAccessor]\n const val = typeof valueAccessor === \"function\" ? valueAccessor(datum as TDatum) : datum[valueAccessor]\n const colorVal = showColorField\n ? (typeof colorBy === \"function\" ? (colorBy as Function)(datum) : datum[colorBy as string])\n : null\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(cat)}</div>\n <div style={{ marginTop: \"4px\" }}>\n {typeof val === \"number\" ? val.toLocaleString() : String(val)}\n </div>\n {colorVal != null && (\n <div style={{ marginTop: \"2px\", opacity: 0.8 }}>\n {typeof colorBy === \"string\" ? colorBy : \"group\"}: {String(colorVal)}\n </div>\n )}\n </div>\n )\n }\n }, [categoryAccessor, valueAccessor, colorBy])\n\n // Validate data (after all hooks)\n const error = validateArrayData({\n componentName: \"BarChart\",\n data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"BarChart\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"bar\",\n data: sortedData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n pieceStyle,\n size: [width, height],\n margin,\n barPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n oSort: sort as any,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nBarChart.displayName = \"BarChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface StackedBarChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n stackBy: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n normalize?: boolean\n barPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function StackedBarChart<TDatum extends Record<string, any> = Record<string, any>>(props: StackedBarChartProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", stackBy, valueAccessor = \"value\",\n orientation = \"vertical\", categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", normalize = false, barPadding = 5,\n enableHover = true, showGrid = false, showLegend = true, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n const actualColorBy = colorBy || stackBy\n\n const hoverConfig = normalizeLinkedHover(linkedHover, actualColorBy ? [typeof actualColorBy === \"string\" ? actualColorBy : \"\"] : [])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, actualColorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n if (actualColorBy) return { fill: getColor(d, actualColorBy, colorScale) }\n return { fill: DEFAULT_COLOR }\n }\n }, [actualColorBy, colorScale])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const legend = useMemo(() => {\n if (!showLegend) return undefined\n return createLegend({ data: safeData, colorBy: actualColorBy, colorScale, getColor })\n }, [showLegend, safeData, actualColorBy, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 120, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const getStack = resolveAccessor(stackBy)\n const getCat = resolveAccessor(categoryAccessor)\n const getVal = resolveAccessor<number>(valueAccessor)\n return (d: Record<string, any>) => {\n const datum = d.data || d\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(getStack(datum))}</div>\n <div style={{ marginTop: \"4px\" }}>\n {String(getCat(datum))} · {Number(getVal(datum)).toLocaleString()}\n </div>\n </div>\n )\n }\n }, [stackBy, categoryAccessor, valueAccessor])\n\n const error = validateArrayData({\n componentName: \"StackedBarChart\", data: safeData,\n accessors: { categoryAccessor, valueAccessor }, requiredProps: { stackBy },\n })\n if (error) return <ChartError componentName=\"StackedBarChart\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"bar\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n stackBy,\n normalize,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n pieceStyle,\n size: [width, height],\n margin,\n barPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nStackedBarChart.displayName = \"StackedBarChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor, getSize } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface SwarmPlotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n sizeBy?: ChartAccessor<TDatum, number>\n sizeRange?: [number, number]\n pointRadius?: number\n pointOpacity?: number\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function SwarmPlot<TDatum extends Record<string, any> = Record<string, any>>(props: SwarmPlotProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n orientation = \"vertical\", categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\",\n sizeBy, sizeRange = [3, 8], pointRadius = 4, pointOpacity = 0.7,\n categoryPadding = 20, enableHover = true, showGrid = false, showLegend,\n tooltip, frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const sizeDomain = useMemo(() => {\n if (!sizeBy) return undefined\n const sizes = safeData.map((d) => typeof sizeBy === \"function\" ? sizeBy(d) : d[sizeBy])\n return [Math.min(...sizes), Math.max(...sizes)] as [number, number]\n }, [safeData, sizeBy])\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { fillOpacity: pointOpacity }\n baseStyle.fill = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n baseStyle.r = sizeBy ? getSize(d, sizeBy, sizeRange, sizeDomain) : pointRadius\n return baseStyle\n }\n }, [colorBy, colorScale, sizeBy, sizeRange, sizeDomain, pointRadius, pointOpacity])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const getVal = resolveAccessor<number>(valueAccessor)\n const getCat = resolveAccessor(categoryAccessor)\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const cat = getCat(datum)\n const val = getVal(datum)\n const colorVal = colorBy\n ? (typeof colorBy === \"function\" ? (colorBy as Function)(datum) : datum[colorBy as string])\n : null\n const sizeVal = sizeBy\n ? (typeof sizeBy === \"function\" ? (sizeBy as Function)(datum) : datum[sizeBy as string])\n : null\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(cat)}</div>\n <div style={{ marginTop: \"4px\" }}>\n {typeof val === \"number\" ? val.toLocaleString() : String(val)}\n </div>\n {colorVal != null && (\n <div style={{ marginTop: \"2px\", opacity: 0.8 }}>\n {typeof colorBy === \"string\" ? colorBy : \"color\"}: {String(colorVal)}\n </div>\n )}\n {sizeVal != null && (\n <div style={{ marginTop: \"2px\", opacity: 0.8 }}>\n {typeof sizeBy === \"string\" ? sizeBy : \"size\"}: {typeof sizeVal === \"number\" ? sizeVal.toLocaleString() : String(sizeVal)}\n </div>\n )}\n </div>\n )\n }\n }, [categoryAccessor, valueAccessor, colorBy, sizeBy])\n\n const error = validateArrayData({\n componentName: \"SwarmPlot\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"SwarmPlot\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"swarm\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n pieceStyle,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nSwarmPlot.displayName = \"SwarmPlot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface BoxPlotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n showOutliers?: boolean\n outlierRadius?: number\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function BoxPlot<TDatum extends Record<string, any> = Record<string, any>>(props: BoxPlotProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n orientation = \"vertical\", categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\",\n showOutliers = true, outlierRadius = 3, categoryPadding = 20,\n enableHover = true, showGrid = false, showLegend, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const baseSummaryStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return { fill: color, stroke: color, fillOpacity: 0.8 }\n }\n }, [colorBy, colorScale])\n\n const summaryStyle = useMemo(\n () => wrapStyleWithSelection(baseSummaryStyle, activeSelectionHook, selection),\n [baseSummaryStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const stats = datum.stats || {}\n const category = datum.category || d.category || \"\"\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\", marginBottom: \"4px\" }}>{String(category)}</div>\n {stats.median != null && (\n <>\n <div>Median: {stats.median.toLocaleString()}</div>\n <div>Q1: {stats.q1.toLocaleString()}</div>\n <div>Q3: {stats.q3.toLocaleString()}</div>\n <div>Min: {stats.min.toLocaleString()}</div>\n <div>Max: {stats.max.toLocaleString()}</div>\n </>\n )}\n </div>\n )\n }\n }, [])\n\n const error = validateArrayData({\n componentName: \"BoxPlot\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"BoxPlot\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"boxplot\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n summaryStyle,\n showOutliers,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nBoxPlot.displayName = \"BoxPlot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface HistogramProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n bins?: number\n relative?: boolean\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function Histogram<TDatum extends Record<string, any> = Record<string, any>>(props: HistogramProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n bins = 25, relative = false,\n categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", categoryPadding = 20,\n enableHover = true, showGrid = false, showLegend, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const baseSummaryStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return { fill: color, stroke: color, fillOpacity: 0.8 }\n }\n }, [colorBy, colorScale])\n\n const summaryStyle = useMemo(\n () => wrapStyleWithSelection(baseSummaryStyle, activeSelectionHook, selection),\n [baseSummaryStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const category = datum.category || d.category || \"\"\n const count = datum.count\n const range = datum.range\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {category && <div style={{ fontWeight: \"bold\" }}>{String(category)}</div>}\n {count != null && <div>Count: {count}</div>}\n {range && range.length === 2 && (\n <div style={{ opacity: 0.8 }}>\n {Number(range[0]).toFixed(1)} – {Number(range[1]).toFixed(1)}\n </div>\n )}\n </div>\n )\n }\n }, [])\n\n const error = validateArrayData({\n componentName: \"Histogram\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"Histogram\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"histogram\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: \"horizontal\",\n summaryStyle,\n bins,\n normalize: relative,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nHistogram.displayName = \"Histogram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface ViolinPlotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n bins?: number\n curve?: string\n showIQR?: boolean\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function ViolinPlot<TDatum extends Record<string, any> = Record<string, any>>(props: ViolinPlotProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n orientation = \"vertical\", bins = 25, curve = \"catmullRom\", showIQR = true,\n categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", categoryPadding = 20,\n enableHover = true, showGrid = false, showLegend, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const baseSummaryStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return { fill: color, stroke: color, fillOpacity: 0.6 }\n }\n }, [colorBy, colorScale])\n\n const summaryStyle = useMemo(\n () => wrapStyleWithSelection(baseSummaryStyle, activeSelectionHook, selection),\n [baseSummaryStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const getVal = resolveAccessor<number>(valueAccessor)\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const category = datum.category || d.category || \"\"\n // datum is the array of piece data for the column\n const pieces = Array.isArray(datum) ? datum : []\n const values = pieces.map((p: any) => {\n const v = typeof valueAccessor === \"function\" ? (valueAccessor as Function)(p) : p[valueAccessor as string]\n return Number(v)\n }).filter((v: number) => !isNaN(v)).sort((a: number, b: number) => a - b)\n const n = values.length\n const median = n > 0 ? values[Math.floor(n / 2)] : null\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n {category && <div style={{ fontWeight: \"bold\" }}>{String(category)}</div>}\n {n > 0 && <div>n = {n}</div>}\n {median != null && <div>Median: {median.toLocaleString()}</div>}\n </div>\n )\n }\n }, [valueAccessor])\n\n const error = validateArrayData({\n componentName: \"ViolinPlot\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"ViolinPlot\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"violin\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n summaryStyle,\n bins,\n showIQR,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nViolinPlot.displayName = \"ViolinPlot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RidgelinePlotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n bins?: number\n /** Amplitude factor controlling how far density extends (>1 allows overlap) @default 1.5 */\n amplitude?: number\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\n/**\n * RidgelinePlot - Visualize distributions as overlapping one-sided density curves.\n *\n * Each category shows its value distribution as a filled area extending from a\n * baseline. The amplitude prop controls overlap between rows.\n */\nexport function RidgelinePlot<TDatum extends Record<string, any> = Record<string, any>>(props: RidgelinePlotProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n orientation = \"horizontal\", bins = 20, amplitude = 1.5,\n categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", categoryPadding = 5,\n enableHover = true, showGrid = false, showLegend, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const baseSummaryStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const color = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return { fill: color, stroke: color, fillOpacity: 0.5 }\n }\n }, [colorBy, colorScale])\n\n const summaryStyle = useMemo(\n () => wrapStyleWithSelection(baseSummaryStyle, activeSelectionHook, selection),\n [baseSummaryStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: orientation === \"horizontal\" ? 120 : 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend, orientation])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const category = datum.category || d.category || \"\"\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(category)}</div>\n </div>\n )\n }\n }, [])\n\n const error = validateArrayData({\n componentName: \"RidgelinePlot\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"RidgelinePlot\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"ridgeline\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n summaryStyle,\n bins,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n oSort: false,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n } as any\n\n // Pass amplitude through (not in typed props, handled by store cast)\n ;(streamProps as any).amplitude = amplitude\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nRidgelinePlot.displayName = \"RidgelinePlot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, useSortedData, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface DotPlotProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n sort?: boolean | \"asc\" | \"desc\" | ((a: Record<string, any>, b: Record<string, any>) => number)\n dotRadius?: number\n categoryPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function DotPlot<TDatum extends Record<string, any> = Record<string, any>>(props: DotPlotProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n orientation = \"horizontal\", categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", sort = true, dotRadius = 5,\n categoryPadding = 10, enableHover = true, showGrid = true, showLegend,\n tooltip, frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n\n const hoverConfig = normalizeLinkedHover(linkedHover, colorBy ? [typeof colorBy === \"string\" ? colorBy : \"\"] : [typeof categoryAccessor === \"string\" ? categoryAccessor : \"\"])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const sortedData = useSortedData(safeData, sort, valueAccessor)\n const colorScale = useColorScale(safeData, colorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { r: dotRadius, fillOpacity: 0.8 }\n baseStyle.fill = colorBy ? getColor(d, colorBy, colorScale) : DEFAULT_COLOR\n return baseStyle\n }\n }, [colorBy, colorScale, dotRadius])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: sortedData, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, sortedData, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 120, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n return (d: Record<string, any>) => {\n const datum = d.data || d\n const cat = typeof categoryAccessor === \"function\" ? categoryAccessor(datum as TDatum) : datum[categoryAccessor]\n const val = typeof valueAccessor === \"function\" ? valueAccessor(datum as TDatum) : datum[valueAccessor]\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(cat)}</div>\n <div style={{ marginTop: \"4px\" }}>\n {typeof val === \"number\" ? val.toLocaleString() : String(val)}\n </div>\n </div>\n )\n }\n }, [categoryAccessor, valueAccessor])\n\n const error = validateArrayData({\n componentName: \"DotPlot\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"DotPlot\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"point\",\n data: sortedData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n pieceStyle,\n size: [width, height],\n margin,\n barPadding: categoryPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n oSort: sort as any,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nDotPlot.displayName = \"DotPlot\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface PieChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n startAngle?: number\n slicePadding?: number\n enableHover?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function PieChart<TDatum extends Record<string, any> = Record<string, any>>(props: PieChartProps<TDatum>) {\n const {\n data, width = 400, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n colorBy, colorScheme = \"category10\", startAngle = 0, slicePadding = 2,\n enableHover = true, showLegend = true, tooltip, frameProps = {},\n selection, linkedHover\n } = props\n\n const safeData = data || []\n const actualColorBy = colorBy || categoryAccessor\n\n const hoverConfig = normalizeLinkedHover(linkedHover, actualColorBy ? [typeof actualColorBy === \"string\" ? actualColorBy : \"\"] : [])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, actualColorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n if (actualColorBy) return { fill: getColor(d, actualColorBy, colorScale) }\n return { fill: DEFAULT_COLOR }\n }\n }, [actualColorBy, colorScale])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const legend = useMemo(() => {\n if (!showLegend) return undefined\n return createLegend({ data: safeData, colorBy: actualColorBy, colorScale, getColor })\n }, [showLegend, safeData, actualColorBy, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 20, bottom: 20, left: 20, right: 20, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const showColorField = colorBy && colorBy !== categoryAccessor\n return (d: Record<string, any>) => {\n const datum = d.data?.[0] || d.data || d\n const cat = typeof categoryAccessor === \"function\" ? categoryAccessor(datum as TDatum) : datum[categoryAccessor]\n const val = typeof valueAccessor === \"function\" ? valueAccessor(datum as TDatum) : datum[valueAccessor]\n const colorVal = showColorField\n ? (typeof colorBy === \"function\" ? (colorBy as Function)(datum) : datum[colorBy as string])\n : null\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(cat)}</div>\n <div style={{ marginTop: \"4px\" }}>\n {typeof val === \"number\" ? val.toLocaleString() : String(val)}\n </div>\n {colorVal != null && (\n <div style={{ marginTop: \"2px\", opacity: 0.8 }}>\n {typeof colorBy === \"string\" ? colorBy : \"group\"}: {String(colorVal)}\n </div>\n )}\n </div>\n )\n }\n }, [categoryAccessor, valueAccessor, colorBy])\n\n const error = validateArrayData({\n componentName: \"PieChart\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"PieChart\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"pie\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: \"radial\",\n pieceStyle,\n startAngle,\n size: [width, height],\n margin,\n enableHover,\n showAxes: false,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nPieChart.displayName = \"PieChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface DonutChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n innerRadius?: number\n centerContent?: React.ReactNode\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n startAngle?: number\n slicePadding?: number\n enableHover?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function DonutChart<TDatum extends Record<string, any> = Record<string, any>>(props: DonutChartProps<TDatum>) {\n const {\n data, width = 400, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", valueAccessor = \"value\",\n innerRadius = 60, centerContent,\n colorBy, colorScheme = \"category10\", startAngle = 0, slicePadding = 2,\n enableHover = true, showLegend = true, tooltip, frameProps = {},\n selection, linkedHover\n } = props\n\n const safeData = data || []\n const actualColorBy = colorBy || categoryAccessor\n\n const hoverConfig = normalizeLinkedHover(linkedHover, actualColorBy ? [typeof actualColorBy === \"string\" ? actualColorBy : \"\"] : [])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, actualColorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n if (actualColorBy) return { fill: getColor(d, actualColorBy, colorScale) }\n return { fill: DEFAULT_COLOR }\n }\n }, [actualColorBy, colorScale])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const legend = useMemo(() => {\n if (!showLegend) return undefined\n return createLegend({ data: safeData, colorBy: actualColorBy, colorScale, getColor })\n }, [showLegend, safeData, actualColorBy, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 20, bottom: 20, left: 20, right: 20, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const showColorField = colorBy && colorBy !== categoryAccessor\n return (d: Record<string, any>) => {\n const datum = d.data?.[0] || d.data || d\n const cat = typeof categoryAccessor === \"function\" ? categoryAccessor(datum as TDatum) : datum[categoryAccessor]\n const val = typeof valueAccessor === \"function\" ? valueAccessor(datum as TDatum) : datum[valueAccessor]\n const colorVal = showColorField\n ? (typeof colorBy === \"function\" ? (colorBy as Function)(datum) : datum[colorBy as string])\n : null\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(cat)}</div>\n <div style={{ marginTop: \"4px\" }}>\n {typeof val === \"number\" ? val.toLocaleString() : String(val)}\n </div>\n {colorVal != null && (\n <div style={{ marginTop: \"2px\", opacity: 0.8 }}>\n {typeof colorBy === \"string\" ? colorBy : \"group\"}: {String(colorVal)}\n </div>\n )}\n </div>\n )\n }\n }, [categoryAccessor, valueAccessor, colorBy])\n\n const error = validateArrayData({\n componentName: \"DonutChart\", data: safeData,\n accessors: { categoryAccessor, valueAccessor },\n })\n if (error) return <ChartError componentName=\"DonutChart\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"donut\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n projection: \"radial\",\n pieceStyle,\n innerRadius,\n startAngle,\n centerContent,\n size: [width, height],\n margin,\n enableHover,\n showAxes: false,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nDonutChart.displayName = \"DonutChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo, useCallback } from \"react\"\nimport StreamOrdinalFrame from \"../../stream/StreamOrdinalFrame\"\nimport type { StreamOrdinalFrameProps } from \"../../stream/ordinalTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { useColorScale, DEFAULT_COLOR, resolveAccessor } from \"../shared/hooks\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateArrayData } from \"../shared/validateChartData\"\nimport { normalizeLinkedHover, wrapStyleWithSelection } from \"../shared/selectionUtils\"\nimport { useSelection } from \"../../store/useSelection\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface GroupedBarChartProps<TDatum extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TDatum[]\n categoryAccessor?: ChartAccessor<TDatum, string>\n groupBy: ChartAccessor<TDatum, string>\n valueAccessor?: ChartAccessor<TDatum, number>\n orientation?: \"vertical\" | \"horizontal\"\n categoryLabel?: string\n valueLabel?: string\n valueFormat?: (d: number | string) => string\n colorBy?: ChartAccessor<TDatum, string>\n colorScheme?: string | string[]\n barPadding?: number\n enableHover?: boolean\n showGrid?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamOrdinalFrameProps, \"data\" | \"size\">>\n}\n\nexport function GroupedBarChart<TDatum extends Record<string, any> = Record<string, any>>(props: GroupedBarChartProps<TDatum>) {\n const {\n data, width = 600, height = 400, margin: userMargin, className, title,\n categoryAccessor = \"category\", groupBy, valueAccessor = \"value\",\n orientation = \"vertical\", categoryLabel, valueLabel, valueFormat,\n colorBy, colorScheme = \"category10\", barPadding = 5,\n enableHover = true, showGrid = false, showLegend = true, tooltip,\n frameProps = {}, selection, linkedHover\n } = props\n\n const safeData = data || []\n const actualColorBy = colorBy || groupBy\n\n const hoverConfig = normalizeLinkedHover(linkedHover, actualColorBy ? [typeof actualColorBy === \"string\" ? actualColorBy : \"\"] : [])\n const selectionHook = useSelection({ name: selection?.name || \"__unused__\", fields: [] })\n const linkedHoverHook = useLinkedHover({ name: hoverConfig?.name || \"hover\", fields: hoverConfig?.fields || [] })\n const activeSelectionHook = selection ? { isActive: selectionHook.isActive, predicate: selectionHook.predicate } : null\n\n const colorScale = useColorScale(safeData, actualColorBy, colorScheme)\n\n const basePieceStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n if (actualColorBy) return { fill: getColor(d, actualColorBy, colorScale) }\n return { fill: DEFAULT_COLOR }\n }\n }, [actualColorBy, colorScale])\n\n const pieceStyle = useMemo(\n () => wrapStyleWithSelection(basePieceStyle, activeSelectionHook, selection),\n [basePieceStyle, activeSelectionHook, selection]\n )\n\n const legend = useMemo(() => {\n if (!showLegend) return undefined\n return createLegend({ data: safeData, colorBy: actualColorBy, colorScale, getColor })\n }, [showLegend, safeData, actualColorBy, colorScale])\n\n const margin = useMemo(() => {\n const finalMargin = { top: 50, bottom: 60, left: 70, right: 40, ...userMargin }\n if (legend && finalMargin.right < 120) finalMargin.right = 120\n return finalMargin\n }, [userMargin, legend])\n\n const customHoverBehavior = useCallback(\n (d: Record<string, any> | null) => { if (linkedHover) linkedHoverHook.onHover(d) },\n [linkedHover, linkedHoverHook]\n )\n\n const defaultTooltipContent = useMemo(() => {\n const getGroup = resolveAccessor(groupBy)\n const getCat = resolveAccessor(categoryAccessor)\n const getVal = resolveAccessor<number>(valueAccessor)\n return (d: Record<string, any>) => {\n const datum = d.data || d\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: \"bold\" }}>{String(getGroup(datum))}</div>\n <div style={{ marginTop: \"4px\" }}>\n {String(getCat(datum))} · {Number(getVal(datum)).toLocaleString()}\n </div>\n </div>\n )\n }\n }, [groupBy, categoryAccessor, valueAccessor])\n\n const error = validateArrayData({\n componentName: \"GroupedBarChart\", data: safeData,\n accessors: { categoryAccessor, valueAccessor }, requiredProps: { groupBy },\n })\n if (error) return <ChartError componentName=\"GroupedBarChart\" message={error} width={width} height={height} />\n\n const streamProps: StreamOrdinalFrameProps = {\n chartType: \"clusterbar\",\n data: safeData,\n oAccessor: categoryAccessor,\n rAccessor: valueAccessor,\n groupBy,\n projection: orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n pieceStyle,\n size: [width, height],\n margin,\n barPadding,\n enableHover,\n showAxes: true,\n oLabel: categoryLabel,\n rLabel: valueLabel,\n rFormat: valueFormat as any,\n showGrid,\n ...(legend && { legend }),\n ...(title && { title }),\n ...(className && { className }),\n tooltipContent: (tooltip ? normalizeTooltip(tooltip) : defaultTooltipContent) as any,\n ...(linkedHover && { customHoverBehavior }),\n ...frameProps\n }\n\n return <StreamOrdinalFrame {...streamProps} />\n}\nGroupedBarChart.displayName = \"GroupedBarChart\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, getSize } from \"../shared/colorUtils\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * ForceDirectedGraph component props\n */\nexport interface ForceDirectedGraphProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes: TNode[]\n edges: TEdge[]\n nodeIDAccessor?: ChartAccessor<TNode, string>\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n nodeLabel?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n nodeSize?: number | ChartAccessor<TNode, number>\n nodeSizeRange?: [number, number]\n edgeWidth?: number | ChartAccessor<TEdge, number>\n edgeColor?: string\n edgeOpacity?: number\n iterations?: number\n forceStrength?: number\n showLabels?: boolean\n enableHover?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"nodes\" | \"edges\" | \"size\">>\n}\n\n/**\n * ForceDirectedGraph - Visualize network relationships with force-directed layout\n *\n * Wraps StreamNetworkFrame (canvas-first) for force-directed network visualization.\n */\nexport function ForceDirectedGraph<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: ForceDirectedGraphProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 600,\n height = 600,\n margin: userMargin,\n className,\n title,\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n nodeLabel,\n colorBy,\n colorScheme = \"category10\",\n nodeSize = 8,\n nodeSizeRange = [5, 20],\n edgeWidth = 1,\n edgeColor = \"#999\",\n edgeOpacity = 0.6,\n iterations = 300,\n forceStrength = 0.1,\n showLabels = false,\n enableHover = true,\n showLegend,\n tooltip,\n frameProps = {}\n } = props\n\n const safeNodes = nodes || []\n const safeEdges = edges || []\n\n const colorScale = useColorScale(safeNodes, colorBy, colorScheme)\n\n // Node style function — d is a RealtimeNode, user data on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {}\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n if (typeof nodeSize === \"number\") {\n baseStyle.r = nodeSize\n }\n return baseStyle\n }\n }, [colorBy, colorScale, nodeSize])\n\n // Edge style function\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => ({\n stroke: edgeColor,\n strokeWidth: typeof edgeWidth === \"number\" ? edgeWidth : typeof edgeWidth === \"function\" ? edgeWidth(d as TEdge) : d[edgeWidth] || 1,\n opacity: edgeOpacity\n })\n }, [edgeWidth, edgeColor, edgeOpacity])\n\n // Node label function\n const nodeLabelFn = useMemo(() => {\n if (!showLabels || !nodeLabel) return undefined\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: Record<string, any>) => d[nodeLabel]\n }, [showLabels, nodeLabel])\n\n // Legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeNodes, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeNodes, colorScale])\n\n // Adjust margin for legend\n const margin = useMemo(() => {\n const defaultMargin = { top: 20, bottom: 20, left: 20, right: 20 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n return finalMargin\n }, [userMargin, legend])\n\n // Validate\n const error = validateNetworkData({\n componentName: \"ForceDirectedGraph\",\n nodes,\n edges,\n nodesRequired: true,\n edgesRequired: true,\n accessors: { nodeIDAccessor },\n })\n if (error) return <ChartError componentName=\"ForceDirectedGraph\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"force\"\n nodes={safeNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIDAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n iterations={iterations}\n forceStrength={forceStrength}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n nodeSize={nodeSize}\n nodeSizeRange={nodeSizeRange}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n legend={legend}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nForceDirectedGraph.displayName = \"ForceDirectedGraph\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, COLOR_SCHEMES, DEFAULT_COLORS } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * ChordDiagram component props\n */\nexport interface ChordDiagramProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes?: TNode[]\n edges: TEdge[]\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n valueAccessor?: ChartAccessor<TEdge, number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | ((d: any) => string)\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n enableHover?: boolean\n edgeOpacity?: number\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * ChordDiagram - Visualize directed relationships with circular chord layout\n *\n * Wraps StreamNetworkFrame (canvas-first) for chord relationship visualization.\n */\nexport function ChordDiagram<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: ChordDiagramProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 600,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"id\",\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n padAngle = 0.01,\n groupWidth = 20,\n sortGroups,\n nodeLabel,\n showLabels = true,\n enableHover = true,\n edgeOpacity = 0.5,\n tooltip,\n frameProps = {}\n } = props\n\n const safeEdges = edges || []\n\n // Infer nodes from edges if not provided\n const inferredNodes = useMemo(() => {\n if (nodes && nodes.length > 0) return nodes\n\n const nodeSet = new Set<string>()\n safeEdges.forEach((edge) => {\n const sourceId = typeof sourceAccessor === \"function\" ? sourceAccessor(edge) : edge[sourceAccessor]\n const targetId = typeof targetAccessor === \"function\" ? targetAccessor(edge) : edge[targetAccessor]\n nodeSet.add(sourceId)\n nodeSet.add(targetId)\n })\n\n return Array.from(nodeSet).map((id) => ({ id }))\n }, [nodes, safeEdges, sourceAccessor, targetAccessor])\n\n const colorScale = useColorScale(inferredNodes, colorBy, colorScheme)\n\n // Node style function — d is a RealtimeNode, user data on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>, i?: number) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 1\n }\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n const palette = Array.isArray(colorScheme) ? colorScheme : (COLOR_SCHEMES[colorScheme] || DEFAULT_COLORS)\n const colors = Array.isArray(palette) ? palette : DEFAULT_COLORS\n const index = (d as any).index ?? i ?? 0\n baseStyle.fill = colors[index % colors.length]\n }\n return baseStyle\n }\n }, [colorBy, colorScale, colorScheme])\n\n // Edge style function — d is a RealtimeEdge\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 0.5,\n fillOpacity: edgeOpacity,\n strokeOpacity: edgeOpacity\n }\n if (typeof edgeColorBy === \"function\") {\n baseStyle.fill = edgeColorBy(d)\n } else if (edgeColorBy === \"source\") {\n const src = typeof d.source === \"object\" ? d.source : null\n if (colorBy && src) {\n baseStyle.fill = getColor(src.data || src, colorBy, colorScale)\n } else if (src) {\n baseStyle.fill = nodeStyle(src, src.index).fill\n }\n } else if (edgeColorBy === \"target\") {\n const tgt = typeof d.target === \"object\" ? d.target : null\n if (colorBy && tgt) {\n baseStyle.fill = getColor(tgt.data || tgt, colorBy, colorScale)\n } else if (tgt) {\n baseStyle.fill = nodeStyle(tgt, tgt.index).fill\n }\n }\n return baseStyle\n }\n }, [edgeColorBy, colorBy, colorScale, nodeStyle, edgeOpacity])\n\n // Node label accessor\n const nodeLabelFn = useMemo(() => {\n if (!showLabels) return undefined\n const accessor = nodeLabel || nodeIdAccessor\n if (typeof accessor === \"function\") return accessor\n return (d: Record<string, any>) => d[accessor]\n }, [showLabels, nodeLabel, nodeIdAccessor])\n\n // Validate\n const error = validateNetworkData({\n componentName: \"ChordDiagram\",\n edges,\n edgesRequired: true,\n })\n if (error) return <ChartError componentName=\"ChordDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"chord\"\n nodes={inferredNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n valueAccessor={valueAccessor}\n padAngle={padAngle}\n groupWidth={groupWidth}\n sortGroups={sortGroups}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n edgeColorBy={edgeColorBy}\n edgeOpacity={edgeOpacity}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nChordDiagram.displayName = \"ChordDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * SankeyDiagram component props\n */\nexport interface SankeyDiagramProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes?: TNode[]\n edges: TEdge[]\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n valueAccessor?: ChartAccessor<TEdge, number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n enableHover?: boolean\n edgeOpacity?: number\n edgeSort?: (a: any, b: any) => number\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * SankeyDiagram - Visualize flow and magnitude of movement between nodes\n *\n * Wraps StreamNetworkFrame (canvas-first) for Sankey flow visualization.\n */\nexport function SankeyDiagram<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: SankeyDiagramProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 800,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"id\",\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n orientation = \"horizontal\",\n nodeAlign = \"justify\",\n nodePaddingRatio = 0.05,\n nodeWidth = 15,\n nodeLabel,\n showLabels = true,\n enableHover = true,\n edgeOpacity = 0.5,\n edgeSort,\n tooltip,\n frameProps = {}\n } = props\n\n // Safe data defaults (hooks must always run)\n const safeEdges = edges || []\n\n // Infer nodes from edges if not provided\n const inferredNodes = useMemo(() => {\n if (nodes && nodes.length > 0) return nodes\n\n const nodeSet = new Set<string>()\n safeEdges.forEach((edge) => {\n const sourceId =\n typeof sourceAccessor === \"function\"\n ? sourceAccessor(edge)\n : edge[sourceAccessor]\n const targetId =\n typeof targetAccessor === \"function\"\n ? targetAccessor(edge)\n : edge[targetAccessor]\n\n nodeSet.add(sourceId)\n nodeSet.add(targetId)\n })\n\n return Array.from(nodeSet).map((id) => ({ id }))\n }, [nodes, safeEdges, sourceAccessor, targetAccessor])\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(inferredNodes, colorBy, colorScheme)\n\n // Node style function\n // d is a RealtimeNode — user data lives on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 1\n }\n\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n baseStyle.fill = \"#4d430c\"\n }\n\n return baseStyle\n }\n }, [colorBy, colorScale])\n\n // Edge style function\n // d is a RealtimeEdge — d.source/d.target are RealtimeNode objects\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"none\",\n strokeWidth: 0,\n fillOpacity: edgeOpacity\n }\n\n if (typeof edgeColorBy === \"function\") {\n baseStyle.fill = edgeColorBy(d)\n } else if (edgeColorBy === \"source\") {\n const src = typeof d.source === \"object\" ? d.source : null\n if (colorBy && src) {\n baseStyle.fill = getColor(src.data || src, colorBy, colorScale)\n } else if (src) {\n baseStyle.fill = nodeStyle(src).fill\n }\n } else if (edgeColorBy === \"target\") {\n const tgt = typeof d.target === \"object\" ? d.target : null\n if (colorBy && tgt) {\n baseStyle.fill = getColor(tgt.data || tgt, colorBy, colorScale)\n } else if (tgt) {\n baseStyle.fill = nodeStyle(tgt).fill\n }\n } else if (edgeColorBy === \"gradient\") {\n baseStyle.fill = \"#999\"\n baseStyle.fillOpacity = edgeOpacity * 0.7\n }\n\n return baseStyle\n }\n }, [edgeColorBy, colorBy, colorScale, nodeStyle, edgeOpacity])\n\n // Node label accessor\n const nodeLabelFn = useMemo(() => {\n if (!showLabels) return undefined\n const accessor = nodeLabel || nodeIdAccessor\n if (typeof accessor === \"function\") return accessor\n return (d: Record<string, any>) => d[accessor]\n }, [showLabels, nodeLabel, nodeIdAccessor])\n\n // Tooltip\n const tooltipFn = useMemo(() => {\n if (typeof tooltip === \"function\") return tooltip\n return undefined\n }, [tooltip])\n\n // Validate data (after all hooks)\n const error = validateNetworkData({\n componentName: \"SankeyDiagram\",\n edges,\n edgesRequired: true,\n })\n if (error) return <ChartError componentName=\"SankeyDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"sankey\"\n nodes={inferredNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n valueAccessor={valueAccessor}\n orientation={orientation}\n nodeAlign={nodeAlign}\n nodePaddingRatio={nodePaddingRatio}\n nodeWidth={nodeWidth}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n edgeColorBy={edgeColorBy}\n edgeOpacity={edgeOpacity}\n edgeSort={edgeSort}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltipFn ? (d) => tooltipFn(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nSankeyDiagram.displayName = \"SankeyDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * TreeDiagram component props\n */\nexport interface TreeDiagramProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n layout?: \"tree\" | \"cluster\" | \"partition\" | \"treemap\" | \"circlepack\"\n orientation?: \"vertical\" | \"horizontal\" | \"radial\"\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n edgeStyle?: \"line\" | \"curve\"\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n nodeSize?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * TreeDiagram - Visualize hierarchical data structures\n *\n * Wraps StreamNetworkFrame (canvas-first) for hierarchical tree visualization.\n */\nexport function TreeDiagram<TNode extends Record<string, any> = Record<string, any>>(props: TreeDiagramProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n layout = \"tree\",\n orientation = \"vertical\",\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n edgeStyle = \"curve\",\n nodeLabel,\n showLabels = true,\n nodeSize = 5,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n // Node style function\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return createColorScale(allNodes.map((_, idx) => ({ depth: idx % 5 })), \"depth\", colorScheme)\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n // d is a RealtimeNode — user data on d.data, depth on d.depth\n const nodeStyleFn = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { stroke: \"black\", strokeWidth: 1 }\n if (colorByDepth) {\n baseStyle.fill = getColor({ depth: d.depth || 0 }, \"depth\", colorScale)\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale])\n\n const edgeStyleFn = useMemo(() => {\n return () => ({ stroke: \"#999\", strokeWidth: 1, fill: \"none\" })\n }, [])\n\n const hierarchySumFn = useMemo(() => {\n if (layout === \"treemap\" || layout === \"circlepack\" || layout === \"partition\") {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }\n return undefined\n }, [layout, valueAccessor])\n\n // Validate\n const error = validateObjectData({ componentName: \"TreeDiagram\", data })\n if (error) return <ChartError componentName=\"TreeDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType={layout}\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n treeOrientation={orientation}\n edgeType={edgeStyle}\n nodeStyle={nodeStyleFn}\n edgeStyle={edgeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeSize={nodeSize}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nTreeDiagram.displayName = \"TreeDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * Treemap component props\n */\nexport interface TreemapProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n showLabels?: boolean\n labelMode?: \"leaf\" | \"parent\" | \"all\"\n nodeLabel?: ChartAccessor<TNode, string>\n padding?: number\n paddingTop?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * Treemap - Visualize hierarchical data as nested rectangles.\n *\n * Wraps StreamNetworkFrame (canvas-first) for treemap visualization.\n */\nexport function Treemap<TNode extends Record<string, any> = Record<string, any>>(props: TreemapProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 10, bottom: 10, left: 10, right: 10 },\n className,\n title,\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n showLabels = true,\n labelMode = \"leaf\",\n nodeLabel,\n padding: paddingProp = 4,\n paddingTop: paddingTopProp,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return undefined\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n const nodeStyleFn = useMemo(() => {\n const DEPTH_PASTELS = [\"#f0f0f0\", \"#b5d4ea\", \"#f4c2a1\", \"#b8dab2\", \"#d4b5e0\", \"#f9e0a2\", \"#a8d8d8\"]\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { stroke: \"#fff\", strokeWidth: 1, strokeOpacity: 0.8 }\n if (colorByDepth) {\n baseStyle.fill = DEPTH_PASTELS[(d.depth || 0) % DEPTH_PASTELS.length]\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale])\n\n const hierarchySumFn = useMemo(() => {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }, [valueAccessor])\n\n const resolvedPaddingTop = paddingTopProp !== undefined\n ? paddingTopProp\n : (showLabels && labelMode === \"parent\" ? 18 : undefined)\n\n // Validate\n const error = validateObjectData({ componentName: \"Treemap\", data })\n if (error) return <ChartError componentName=\"Treemap\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"treemap\"\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n padding={paddingProp}\n paddingTop={resolvedPaddingTop}\n nodeStyle={nodeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nTreemap.displayName = \"Treemap\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * CirclePack component props\n */\nexport interface CirclePackProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n showLabels?: boolean\n nodeLabel?: ChartAccessor<TNode, string>\n circleOpacity?: number\n padding?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * CirclePack - Visualize hierarchical data as nested circles.\n *\n * Wraps StreamNetworkFrame (canvas-first) for circle-pack visualization.\n */\nexport function CirclePack<TNode extends Record<string, any> = Record<string, any>>(props: CirclePackProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 10, bottom: 10, left: 10, right: 10 },\n className,\n title,\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n showLabels = true,\n nodeLabel,\n circleOpacity = 0.7,\n padding: paddingProp = 4,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return undefined\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n const nodeStyleFn = useMemo(() => {\n const DEPTH_PASTELS = [\"#f0f0f0\", \"#b5d4ea\", \"#f4c2a1\", \"#b8dab2\", \"#d4b5e0\", \"#f9e0a2\", \"#a8d8d8\"]\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"currentColor\",\n strokeWidth: 1,\n strokeOpacity: 0.3,\n fillOpacity: circleOpacity\n }\n if (colorByDepth) {\n baseStyle.fill = DEPTH_PASTELS[(d.depth || 0) % DEPTH_PASTELS.length]\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale, circleOpacity])\n\n const hierarchySumFn = useMemo(() => {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }, [valueAccessor])\n\n // Validate\n const error = validateObjectData({ componentName: \"CirclePack\", data })\n if (error) return <ChartError componentName=\"CirclePack\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"circlepack\"\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n padding={paddingProp}\n nodeStyle={nodeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nCirclePack.displayName = \"CirclePack\"\n","import * as React from \"react\"\nimport { useRef, useEffect, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n LineStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle,\n DecayConfig,\n PulseConfig,\n StalenessConfig,\n TransitionConfig\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeLineChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Line color */\n stroke?: string\n /** Line width */\n strokeWidth?: number\n /** Dash pattern (e.g. \"4,2\") */\n strokeDasharray?: string\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Configurable opacity decay for older data */\n decay?: DecayConfig\n /** Flash effect on newly inserted data */\n pulse?: PulseConfig\n /** Frame-level data liveness indicator */\n staleness?: StalenessConfig\n /** Smooth position interpolation on data change */\n transition?: TransitionConfig\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeLineChart - Simplified wrapper for streaming line charts.\n *\n * Wraps StreamXYFrame with `chartType=\"line\"` and `runtimeMode=\"streaming\"`,\n * exposing stroke/strokeWidth as top-level props instead of requiring a `lineStyle` object.\n *\n * @example\n * ```tsx\n * const ref = useRef<RealtimeFrameHandle>(null)\n *\n * <RealtimeLineChart\n * ref={ref}\n * stroke=\"#007bff\"\n * strokeWidth={2}\n * windowSize={200}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeLineChart = forwardRef<RealtimeFrameHandle, RealtimeLineChartProps>(\n function RealtimeLineChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n stroke = \"#007bff\",\n strokeWidth = 2,\n strokeDasharray,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n decay,\n pulse,\n staleness,\n transition,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const lineStyle: LineStyle = { stroke, strokeWidth, strokeDasharray }\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"line\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n lineStyle={lineStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n decay={decay}\n pulse={pulse}\n staleness={staleness}\n transition={transition}\n />\n )\n }\n)\nRealtimeLineChart.displayName = \"RealtimeLineChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n BarStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeTemporalHistogramProps {\n /** Time interval for binning */\n binSize: number\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /**\n * Category accessor for stacked bars.\n * When provided, bars are stacked by category within each bin.\n */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /**\n * Category-to-color map for stacked bars.\n * Keys also determine stack order (listed keys first, then alphabetical).\n */\n colors?: Record<string, string>\n /** Bar fill color (non-stacked mode) */\n fill?: string\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeTemporalHistogram - Streaming temporal histogram.\n *\n * Wraps StreamXYFrame with `chartType=\"bar\"` and `runtimeMode=\"streaming\"`,\n * binning pushed data points into time-windowed bars. Supports both simple\n * and stacked (categorical) modes.\n *\n * Edge bins that only partially fall within the visible time window are\n * rendered at proportionally narrower widths (Datadog-style).\n *\n * @example\n * ```tsx\n * // Simple histogram\n * <RealtimeTemporalHistogram\n * ref={ref}\n * binSize={20}\n * fill=\"#007bff\"\n * enableHover\n * />\n *\n * // Stacked by category\n * <RealtimeTemporalHistogram\n * ref={ref}\n * binSize={25}\n * categoryAccessor=\"category\"\n * colors={{ errors: \"#dc3545\", warnings: \"#fd7e14\", info: \"#007bff\" }}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeTemporalHistogram = forwardRef<RealtimeFrameHandle, RealtimeTemporalHistogramProps>(\n function RealtimeTemporalHistogram(props, ref) {\n const {\n binSize,\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n fill,\n stroke,\n strokeWidth,\n gap,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const barStyle: BarStyle = {}\n if (fill != null) barStyle.fill = fill\n if (stroke != null) barStyle.stroke = stroke\n if (strokeWidth != null) barStyle.strokeWidth = strokeWidth\n if (gap != null) barStyle.gap = gap\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"bar\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n binSize={binSize}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n barStyle={barStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeTemporalHistogram.displayName = \"RealtimeTemporalHistogram\"\n\n/** @deprecated Use RealtimeTemporalHistogram instead */\nexport const RealtimeHistogram = RealtimeTemporalHistogram\n/** @deprecated Use RealtimeTemporalHistogramProps instead */\nexport type RealtimeHistogramProps = RealtimeTemporalHistogramProps\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n SwarmStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeSwarmChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Category accessor for color-coding dots */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /** Category-to-color map */\n colors?: Record<string, string>\n /** Dot radius */\n radius?: number\n /** Dot fill color (when no categoryAccessor) */\n fill?: string\n /** Dot opacity */\n opacity?: number\n /** Dot stroke color */\n stroke?: string\n /** Dot stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects (including threshold coloring) */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeSwarmChart - Simplified wrapper for streaming dot/swarm charts.\n *\n * Wraps StreamXYFrame with `chartType=\"swarm\"` and `runtimeMode=\"streaming\"`,\n * exposing dot styling as top-level props. Each data point renders as an individual\n * dot at its (time, value) coordinates.\n *\n * Supports threshold coloring via annotations to recolor dots that cross\n * value boundaries.\n *\n * @example\n * ```tsx\n * <RealtimeSwarmChart\n * ref={ref}\n * radius={4}\n * opacity={0.8}\n * categoryAccessor=\"sensor\"\n * colors={{ sensor1: \"#007bff\", sensor2: \"#28a745\" }}\n * />\n * ```\n */\nexport const RealtimeSwarmChart = forwardRef<RealtimeFrameHandle, RealtimeSwarmChartProps>(\n function RealtimeSwarmChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n radius,\n fill,\n opacity,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const swarmStyle: SwarmStyle = {}\n if (radius != null) swarmStyle.radius = radius\n if (fill != null) swarmStyle.fill = fill\n if (opacity != null) swarmStyle.opacity = opacity\n if (stroke != null) swarmStyle.stroke = stroke\n if (strokeWidth != null) swarmStyle.strokeWidth = strokeWidth\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"swarm\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n swarmStyle={swarmStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeSwarmChart.displayName = \"RealtimeSwarmChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n WaterfallStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeWaterfallChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor (positive = gain, negative = loss) */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Color for positive (gain) bars */\n positiveColor?: string\n /** Color for negative (loss) bars */\n negativeColor?: string\n /** Connector line stroke color (omit to hide connectors) */\n connectorStroke?: string\n /** Connector line width */\n connectorWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeWaterfallChart - Simplified wrapper for streaming waterfall charts.\n *\n * Wraps StreamXYFrame with `chartType=\"waterfall\"` and `runtimeMode=\"streaming\"`,\n * exposing waterfall styling as top-level props. Visualizes cumulative deltas as\n * connected bars rising and falling from a running baseline.\n *\n * @example\n * ```tsx\n * <RealtimeWaterfallChart\n * ref={ref}\n * positiveColor=\"#28a745\"\n * negativeColor=\"#dc3545\"\n * connectorStroke=\"#999\"\n * windowSize={300}\n * />\n * ```\n */\nexport const RealtimeWaterfallChart = forwardRef<RealtimeFrameHandle, RealtimeWaterfallChartProps>(\n function RealtimeWaterfallChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n positiveColor,\n negativeColor,\n connectorStroke,\n connectorWidth,\n gap,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const waterfallStyle: WaterfallStyle = {}\n if (positiveColor != null) waterfallStyle.positiveColor = positiveColor\n if (negativeColor != null) waterfallStyle.negativeColor = negativeColor\n if (connectorStroke != null) waterfallStyle.connectorStroke = connectorStroke\n if (connectorWidth != null) waterfallStyle.connectorWidth = connectorWidth\n if (gap != null) waterfallStyle.gap = gap\n if (stroke != null) waterfallStyle.stroke = stroke\n if (strokeWidth != null) waterfallStyle.strokeWidth = strokeWidth\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"waterfall\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n waterfallStyle={waterfallStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeWaterfallChart.displayName = \"RealtimeWaterfallChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle,\n DecayConfig,\n PulseConfig,\n StalenessConfig\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeHeatmapProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time/x value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value/y accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Category accessor for colored cells */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Number of x-axis bins (default: 20) */\n heatmapXBins?: number\n /** Number of y-axis bins (default: 20) */\n heatmapYBins?: number\n /** Aggregation mode: \"count\", \"sum\", or \"mean\" (default: \"count\") */\n aggregation?: \"count\" | \"sum\" | \"mean\"\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Configurable opacity decay for older data */\n decay?: DecayConfig\n /** Flash effect on newly inserted data */\n pulse?: PulseConfig\n /** Frame-level data liveness indicator */\n staleness?: StalenessConfig\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n}\n\n/**\n * RealtimeHeatmap - Streaming heatmap with 2D grid binning.\n *\n * Wraps StreamXYFrame with `chartType=\"heatmap\"` and `runtimeMode=\"streaming\"`,\n * providing configurable bin counts and aggregation modes.\n *\n * @example\n * ```tsx\n * const ref = useRef<RealtimeFrameHandle>(null)\n * ref.current.push({ time: Date.now(), x: 42, y: 7 })\n *\n * <RealtimeHeatmap\n * ref={ref}\n * timeAccessor=\"time\"\n * valueAccessor=\"y\"\n * heatmapXBins={30}\n * heatmapYBins={20}\n * aggregation=\"count\"\n * />\n * ```\n */\nexport const RealtimeHeatmap = forwardRef<RealtimeFrameHandle, RealtimeHeatmapProps>(\n function RealtimeHeatmap(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n categoryAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n heatmapXBins = 20,\n heatmapYBins = 20,\n aggregation = \"count\",\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n decay,\n pulse,\n staleness\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"heatmap\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n categoryAccessor={categoryAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n heatmapXBins={heatmapXBins}\n heatmapYBins={heatmapYBins}\n heatmapAggregation={aggregation}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n decay={decay}\n pulse={pulse}\n staleness={staleness}\n />\n )\n }\n)\nRealtimeHeatmap.displayName = \"RealtimeHeatmap\"\n","\"use client\"\nimport { createStore } from \"./createStore\"\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SemioticTheme {\n mode: \"light\" | \"dark\" | \"auto\"\n colors: {\n primary: string\n categorical: string[]\n sequential: string\n background: string\n text: string\n textSecondary: string\n grid: string\n border: string\n }\n typography: {\n fontFamily: string\n titleSize: number\n labelSize: number\n tickSize: number\n }\n}\n\n// ── Presets ─────────────────────────────────────────────────────────────────\n\nexport const LIGHT_THEME: SemioticTheme = {\n mode: \"light\",\n colors: {\n primary: \"#00a2ce\",\n categorical: [\n \"#1f77b4\", \"#ff7f0e\", \"#2ca02c\", \"#d62728\", \"#9467bd\",\n \"#8c564b\", \"#e377c2\", \"#7f7f7f\", \"#bcbd22\", \"#17becf\"\n ],\n sequential: \"blues\",\n background: \"transparent\",\n text: \"#333\",\n textSecondary: \"#666\",\n grid: \"#e0e0e0\",\n border: \"#ccc\"\n },\n typography: {\n fontFamily: \"sans-serif\",\n titleSize: 16,\n labelSize: 12,\n tickSize: 10\n }\n}\n\nexport const DARK_THEME: SemioticTheme = {\n mode: \"dark\",\n colors: {\n primary: \"#4fc3f7\",\n categorical: [\n \"#4fc3f7\", \"#ffb74d\", \"#81c784\", \"#ef5350\", \"#ba68c8\",\n \"#a1887f\", \"#f06292\", \"#90a4ae\", \"#dce775\", \"#4dd0e1\"\n ],\n sequential: \"blues\",\n background: \"#1a1a2e\",\n text: \"#e0e0e0\",\n textSecondary: \"#aaa\",\n grid: \"#333\",\n border: \"#555\"\n },\n typography: {\n fontFamily: \"sans-serif\",\n titleSize: 16,\n labelSize: 12,\n tickSize: 10\n }\n}\n\n// ── Store ───────────────────────────────────────────────────────────────────\n\nexport interface ThemeStoreState {\n theme: SemioticTheme\n setTheme: (theme: Partial<SemioticTheme> | \"light\" | \"dark\") => void\n}\n\nexport const [ThemeProvider, useThemeSelector] = createStore(\n (set: Function) => ({\n theme: LIGHT_THEME,\n\n setTheme(theme: Partial<SemioticTheme> | \"light\" | \"dark\") {\n set((current: ThemeStoreState) => {\n if (theme === \"light\") {\n return { theme: LIGHT_THEME }\n }\n if (theme === \"dark\") {\n return { theme: DARK_THEME }\n }\n return {\n theme: {\n ...current.theme,\n ...theme,\n colors: {\n ...current.theme.colors,\n ...(theme.colors || {})\n },\n typography: {\n ...current.theme.typography,\n ...(theme.typography || {})\n }\n }\n }\n })\n }\n })\n)\n","\"use client\"\nimport * as React from \"react\"\nimport {\n ThemeProvider as StoreProvider,\n useThemeSelector,\n LIGHT_THEME,\n DARK_THEME\n} from \"./store/ThemeStore\"\nimport type { SemioticTheme } from \"./store/ThemeStore\"\n\n// ── Props ───────────────────────────────────────────────────────────────────\n\ninterface ThemeProviderProps {\n theme?: \"light\" | \"dark\" | Partial<SemioticTheme>\n children: React.ReactNode\n}\n\n// ── ThemeInitializer ────────────────────────────────────────────────────────\n// Calls setTheme on mount to sync the store with the prop value.\n\nfunction ThemeInitializer({\n theme\n}: {\n theme?: \"light\" | \"dark\" | Partial<SemioticTheme>\n}) {\n const setTheme = useThemeSelector(\n (state: { setTheme: (t: Partial<SemioticTheme> | \"light\" | \"dark\") => void }) => state.setTheme\n )\n\n React.useEffect(() => {\n if (theme !== undefined) {\n setTheme(theme)\n }\n }, [theme, setTheme])\n\n return null\n}\n\n// ── CSS Custom Properties wrapper ───────────────────────────────────────────\n\nfunction ThemeCSSWrapper({ children }: { children: React.ReactNode }) {\n const theme = useThemeSelector(\n (state: { theme: SemioticTheme }) => state.theme\n )\n\n const style: React.CSSProperties & Record<string, string> = {\n position: \"relative\",\n \"--semiotic-bg\": theme.colors.background,\n \"--semiotic-text\": theme.colors.text,\n \"--semiotic-text-secondary\": theme.colors.textSecondary,\n \"--semiotic-grid\": theme.colors.grid,\n \"--semiotic-border\": theme.colors.border,\n \"--semiotic-primary\": theme.colors.primary,\n \"--semiotic-font-family\": theme.typography.fontFamily\n }\n\n return <div style={style}>{children}</div>\n}\n\n// ── ThemeProvider (public) ──────────────────────────────────────────────────\n\nfunction ThemeProviderWrapper({ theme, children }: ThemeProviderProps) {\n return (\n <StoreProvider>\n <ThemeInitializer theme={theme} />\n <ThemeCSSWrapper>{children}</ThemeCSSWrapper>\n </StoreProvider>\n )\n}\n\n// ── useTheme hook ───────────────────────────────────────────────────────────\n\nfunction useTheme(): SemioticTheme {\n return useThemeSelector((state: { theme: SemioticTheme }) => state.theme)\n}\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nexport { ThemeProviderWrapper as ThemeProvider, useTheme }\nexport { LIGHT_THEME, DARK_THEME }\nexport type { SemioticTheme }\n","/**\n * Export a semiotic chart to SVG or PNG from the browser.\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLDivElement>(null)\n * // ... render chart inside ref ...\n * <button onClick={() => exportChart(ref.current!)}>Download</button>\n * ```\n */\nexport async function exportChart(\n container: HTMLElement,\n options?: {\n format?: \"svg\" | \"png\" // default \"svg\"\n filename?: string // default \"chart\"\n scale?: number // default 2 (for PNG retina)\n background?: string // default \"white\"\n }\n): Promise<void> {\n const {\n format = \"svg\",\n filename = \"chart\",\n scale = 2,\n background = \"white\"\n } = options || {}\n\n // Find the SVG element inside the container\n const svgElement = container.querySelector(\"svg\")\n if (!svgElement) {\n throw new Error(\"No SVG element found in the container\")\n }\n\n // Clone the SVG to avoid modifying the original\n const clone = svgElement.cloneNode(true) as SVGSVGElement\n\n // Ensure the clone has explicit width/height attributes\n const bbox = svgElement.getBoundingClientRect()\n if (!clone.getAttribute(\"width\")) {\n clone.setAttribute(\"width\", String(bbox.width))\n }\n if (!clone.getAttribute(\"height\")) {\n clone.setAttribute(\"height\", String(bbox.height))\n }\n\n // Add xmlns if missing\n if (!clone.getAttribute(\"xmlns\")) {\n clone.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\")\n }\n\n // Inline computed styles for standalone rendering\n inlineStyles(svgElement, clone)\n\n if (format === \"svg\") {\n const serializer = new XMLSerializer()\n const svgString = serializer.serializeToString(clone)\n const blob = new Blob([svgString], { type: \"image/svg+xml;charset=utf-8\" })\n downloadBlob(blob, `${filename}.svg`)\n } else {\n // PNG: render SVG to canvas\n const width = bbox.width * scale\n const height = bbox.height * scale\n\n const serializer = new XMLSerializer()\n const svgString = serializer.serializeToString(clone)\n const svgBlob = new Blob([svgString], { type: \"image/svg+xml;charset=utf-8\" })\n const url = URL.createObjectURL(svgBlob)\n\n const img = new Image()\n img.width = bbox.width\n img.height = bbox.height\n\n await new Promise<void>((resolve, reject) => {\n img.onload = () => {\n const canvas = document.createElement(\"canvas\")\n canvas.width = width\n canvas.height = height\n const ctx = canvas.getContext(\"2d\")!\n\n // Fill background\n ctx.fillStyle = background\n ctx.fillRect(0, 0, width, height)\n\n // Scale and draw\n ctx.scale(scale, scale)\n ctx.drawImage(img, 0, 0)\n\n canvas.toBlob((blob) => {\n if (blob) {\n downloadBlob(blob, `${filename}.png`)\n resolve()\n } else {\n reject(new Error(\"Failed to create PNG blob\"))\n }\n }, \"image/png\")\n\n URL.revokeObjectURL(url)\n }\n img.onerror = () => {\n URL.revokeObjectURL(url)\n reject(new Error(\"Failed to load SVG image\"))\n }\n img.src = url\n })\n }\n}\n\n/**\n * Inline computed styles from source SVG elements into clone elements.\n * This ensures the exported SVG/PNG looks the same as on screen.\n */\nfunction inlineStyles(source: Element, target: Element): void {\n const sourceChildren = source.children\n const targetChildren = target.children\n\n // Copy computed styles for the element itself\n const computed = window.getComputedStyle(source)\n const important = [\"fill\", \"stroke\", \"stroke-width\", \"stroke-dasharray\",\n \"opacity\", \"fill-opacity\", \"stroke-opacity\", \"font-family\",\n \"font-size\", \"font-weight\", \"text-anchor\", \"dominant-baseline\"]\n\n for (const prop of important) {\n const value = computed.getPropertyValue(prop)\n if (value && value !== \"none\" && value !== \"\") {\n ;(target as SVGElement | HTMLElement).style?.setProperty(prop, value)\n }\n }\n\n // Recurse into children\n for (let i = 0; i < Math.min(sourceChildren.length, targetChildren.length); i++) {\n inlineStyles(sourceChildren[i], targetChildren[i])\n }\n}\n\n/**\n * Trigger a file download from a blob.\n */\nfunction downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob)\n const a = document.createElement(\"a\")\n a.href = url\n a.download = filename\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n URL.revokeObjectURL(url)\n}\n","\"use client\"\nimport * as React from \"react\"\nimport ChartError from \"./charts/shared/ChartError\"\n\nexport interface ChartErrorBoundaryProps {\n children: React.ReactNode\n /** Custom fallback to show on error. Can be a ReactNode or render function. */\n fallback?: React.ReactNode | ((error: Error) => React.ReactNode)\n /** Callback when an error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n}\n\ninterface ChartErrorBoundaryState {\n error: Error | null\n}\n\n/**\n * Error boundary for Semiotic charts.\n * Catches render errors and shows a friendly fallback instead of crashing the app.\n *\n * @example\n * ```tsx\n * <ChartErrorBoundary>\n * <LineChart data={data} xAccessor=\"x\" yAccessor=\"y\" />\n * </ChartErrorBoundary>\n *\n * // With custom fallback:\n * <ChartErrorBoundary fallback={<div>Chart failed to render</div>}>\n * <BarChart data={data} categoryAccessor=\"cat\" valueAccessor=\"val\" />\n * </ChartErrorBoundary>\n *\n * // With error callback:\n * <ChartErrorBoundary onError={(err) => logError(err)}>\n * <Scatterplot data={data} xAccessor=\"x\" yAccessor=\"y\" />\n * </ChartErrorBoundary>\n * ```\n */\nexport class ChartErrorBoundary extends React.Component<\n ChartErrorBoundaryProps,\n ChartErrorBoundaryState\n> {\n constructor(props: ChartErrorBoundaryProps) {\n super(props)\n this.state = { error: null }\n }\n\n static getDerivedStateFromError(error: Error): ChartErrorBoundaryState {\n return { error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n this.props.onError?.(error, errorInfo)\n }\n\n render(): React.ReactNode {\n if (this.state.error) {\n const { fallback } = this.props\n const error = this.state.error\n\n if (typeof fallback === \"function\") {\n return fallback(error)\n }\n if (fallback !== undefined) {\n return fallback\n }\n\n // Default fallback using ChartError\n return (\n <ChartError\n componentName=\"ChartErrorBoundary\"\n message={error.message || \"An unexpected error occurred while rendering this chart.\"}\n width={600}\n height={400}\n />\n )\n }\n\n return this.props.children\n }\n}\n"],"names":["resolveAccessor","hitTestPoint","hitTestRect","d3Bin","isLegendConfig","RENDERERS","DEFAULT_MARGIN","LIGHT_THEME","defaultTooltipStyle","BrushOverlay","d3Select","d3BrushX","d3BrushY","d3Brush","d3Quantile","resolveLabelFn","d3Hierarchy","d3Tree","d3Cluster","d3Treemap","d3Pack","d3Partition","React","Annotation","formatValue","brush","StoreProvider"],"mappings":";;;;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;AAWG;AAEH;AACA,MAAM,eAAe,GAAG,IAAI;AAC5B;AACA,MAAM,UAAU,GAAG,IAAI;MAIV,iBAAiB,CAAA;AAK5B,IAAA,WAAA,CAAY,QAA8B,EAAA;QAHlC,IAAA,CAAA,eAAe,GAAe,IAAI;QAClC,IAAA,CAAA,UAAU,GAAW,CAAC;AAG5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA;;;;;;;;AAQG;AACH,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe;YAAE;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;AAG3B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACrB;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE;;AAElC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/C;QACF;;;;QAKA,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5F,IAAI,MAAM,GAAG,UAAU;QACvB,MAAM,YAAY,GAAG,MAAK;AACxB,YAAA,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM;gBAAE;;AAE3B,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe;gBAAE;AAEnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACnE,MAAM,GAAG,GAAG;AAEZ,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC;YACvD;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;YACrB;AACF,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC;IACvD;AAEA;;;AAGG;AACH,IAAA,IAAI,CAAC,KAAQ,EAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACrD;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,IAAS,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClD;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACrB;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;AACD;;MC5GY,UAAU,CAAA;AAKrB,IAAA,WAAA,CAAoB,SAAiB,EAAA;QAAjB,IAAA,CAAA,SAAS,GAAT,SAAS;QAHrB,IAAA,CAAA,IAAI,GAAW,CAAC;QAChB,IAAA,CAAA,KAAK,GAAW,CAAC;AAGvB,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;QACA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC;IACpC;AAEA,IAAA,IAAI,CAAC,KAAQ,EAAA;AACX,QAAA,IAAI,OAAsB;QAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;;YAEjC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC;aAAO;YACL,IAAI,CAAC,KAAK,EAAE;QACd;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS;AAC5C,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,GAAG,CAAC,KAAa,EAAA;QACf,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,SAAS;QACtD,MAAM,SAAS,GACb,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;AACpE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;IACvE;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;IAChF;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;QACf,IAAI,CAAC,GAAG,CAAC;QACT,MAAM,IAAI,GAAG,IAAI;QACjB,OAAO;YACL,IAAI,GAAA;AACF,gBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAqC;AAC/F,gBAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAE,EAAE;YAC/C;SACD;IACH;IAEA,OAAO,GAAA;QACL,MAAM,MAAM,GAAQ,EAAE;AACtB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACnB;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,MAAM,CAAC,WAAmB,EAAA;AACxB,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;QAC9B;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;IAChB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;IACtC;AACD;;MC5GY,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,IAAI,GAAW,QAAQ;QACvB,IAAA,CAAA,IAAI,GAAW,CAAC,QAAQ;QACxB,IAAA,CAAA,MAAM,GAAY,KAAK;IAkDjC;AAhDE,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE;AACzB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACxC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;IAC1C;AAEA,IAAA,KAAK,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;IACF;IAEA,WAAW,CACT,MAAmB,EACnB,QAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ;AACrB,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAI,CAAY;AAChD,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE;AACrB,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAC/B;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AACD;;AC9CK,SAAU,WAAW,CACzB,IAAmC,EACnC,OAA2C,EAC3C,QAA4C,EAC5C,OAAe,EACf,WAAgD,EAAA;AAEhD,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe;AAEnC,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE;AAElE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO;QAElD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE;AACnF,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;QACzB;AAEA,QAAA,GAAG,CAAC,KAAK,IAAI,CAAC;QAEd,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;YAC1B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,gBAAgB,CAC9B,IAAmC,EACnC,OAA2C,EAC3C,QAA4C,EAC5C,OAAe,EACf,WAAgD,EAAA;AAEhD,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEvE,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAElC,IAAI,QAAQ,GAAG,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAC/B,QAAA,IAAI,GAAG,CAAC,KAAK,GAAG,QAAQ;AAAE,YAAA,QAAQ,GAAG,GAAG,CAAC,KAAK;IAChD;AAEA,IAAA,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;AACtB;;ACrDM,SAAU,sBAAsB,CACpC,IAAmC,EACnC,QAA4C,EAAA;IAE5C,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,UAAU,GAAG,CAAC;AAElB,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE;QAClC,UAAU,IAAI,CAAC;QACf,IAAI,UAAU,GAAG,GAAG;YAAE,GAAG,GAAG,UAAU;QACtC,IAAI,UAAU,GAAG,GAAG;YAAE,GAAG,GAAG,UAAU;IACxC;AAEA,IAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACnB;;ACVA;AAEM,SAAU,aAAa,CAC3B,IAA2B,EAC3B,MAAoB,EACpB,IAAwC,EACxC,IAAwC,EACxC,KAAY,EACZ,KAAc,EAAA;IAEd,MAAM,IAAI,GAAuB,EAAE;IACnC,MAAM,SAAS,GAAa,EAAE;AAC9B,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IACtB;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACrE;AAEM,SAAU,aAAa,CAC3B,IAA2B,EAC3B,MAAoB,EACpB,IAAwC,EACxC,IAAwC,EACxC,SAAiB,EACjB,KAAY,EACZ,KAAc,EAAA;IAEd,MAAM,OAAO,GAAuB,EAAE;IACtC,MAAM,UAAU,GAAuB,EAAE;AACzC,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE;QAC9E,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,QAAA,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACzE;AAEM,SAAU,qBAAqB,CACnC,MAAsD,EACtD,MAAoB,EACpB,IAAwC,EACxC,IAAwC,EACxC,OAAoE,EACpE,SAAmB,EAAA;;;AAGnB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;AACtB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD;IACF;IACA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAGtD,IAAA,MAAM,SAAS,GAAqC,IAAI,GAAG,EAAE;AAC7D,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB;AACnC,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;AACtB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAClE,gBAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B;QACF;QACA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzB;;AAGA,IAAA,IAAI,MAAuC;IAC3C,IAAI,SAAS,EAAE;AACb,QAAA,MAAM,GAAG,IAAI,GAAG,EAAE;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,IAAI,GAAG,GAAG,CAAC;AACX,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAA,GAAA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,KAAI,CAAC;YAC1C;YACA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QACzB;IACF;;IAGA,MAAM,KAAK,GAAoB,EAAE;AACjC,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,OAAO;AAAE,QAAA,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5C,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;QACtB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE;QAClC,MAAM,OAAO,GAAuB,EAAE;QACtC,MAAM,UAAU,GAAuB,EAAE;AAEzC,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE;YAE9B,IAAI,SAAS,EAAE;gBACb,MAAM,KAAK,GAAG,MAAO,CAAC,GAAG,CAAC,CAAC,CAAE;AAC7B,gBAAA,IAAI,GAAG,IAAI,GAAG,KAAK;YACrB;YAEA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QAC/B;QAEA,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,UAAU;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,KAAK,EAAE,CAAC,CAAC;AACV,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,cAAc,CAC5B,KAA0B,EAC1B,MAAoB,EACpB,IAAwC,EACxC,IAAwC,EACxC,CAAS,EACT,KAAY,EAAA;AAEZ,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IACxB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;IACzF,OAAO;AACL,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACjB,CAAC;QACD,KAAK;QACL;KACD;AACH;AAEM,SAAU,aAAa,CAC3B,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,KAAY,EACZ,KAAU,EACV,KAAc,EAAA;AAEd,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1D;AAEM,SAAU,iBAAiB,CAC/B,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,IAAY,EACZ,KAAU,EAAA;AAEV,IAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;AACtD;;ACrLA;AAEM,SAAUA,iBAAe,CAC7B,QAAiD,EACjD,QAAgB,EAAA;IAEhB,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,CAAC,CAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,IAAA,MAAM,GAAG,GAAG,QAAQ,IAAI,QAAQ;IAChC,OAAO,CAAC,CAAI,KAAK,CAAE,CAAS,CAAC,GAAG,CAAC;AACnC;AAEM,SAAU,qBAAqB,CACnC,QAAiD,EACjD,QAAiB,EAAA;IAEjB,IAAI,OAAO,QAAQ,KAAK,UAAU;AAAE,QAAA,OAAO,QAAQ;AACnD,IAAA,IAAI,QAAQ;AAAE,QAAA,OAAO,CAAC,CAAI,KAAK,MAAM,CAAE,CAAS,CAAC,QAAQ,CAAC,CAAC;AAC3D,IAAA,IAAI,QAAQ;AAAE,QAAA,OAAO,CAAC,CAAI,KAAK,MAAM,CAAE,CAAS,CAAC,QAAQ,CAAC,CAAC;AAC3D,IAAA,OAAO,SAAS;AAClB;;ACaA;AAEA,SAAS,WAAW,CAAC,WAAwB,EAAA;AAC3C,IAAA,OAAO,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG;AACnE;AAkEA;MAEa,aAAa,CAAA;AAiCxB,IAAA,WAAA,CAAY,MAAsB,EAAA;AA/B1B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,iBAAiB,EAAE;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,iBAAiB,EAAE;;QAiBjC,IAAA,CAAA,eAAe,GAA8B,IAAI;;QAGzD,IAAA,CAAA,gBAAgB,GAAmD,IAAI;AAC/D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAwE;;QAGzG,IAAA,CAAA,cAAc,GAAG,CAAC;QAElB,IAAA,CAAA,MAAM,GAAwB,IAAI;QAClC,IAAA,CAAA,KAAK,GAAgB,EAAE;QACvB,IAAA,CAAA,OAAO,GAAG,CAAC;AAGT,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;;;AAInC,QAAA,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAChF,MAAM,oBAAoB,GAAG,eAAe,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW;QAElF,IAAI,oBAAoB,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAGA,iBAAe,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;AAC5E,YAAA,IAAI,CAAC,IAAI,GAAGA,iBAAe,CACzB,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,EACxC,OAAO,CACR;QACH;aAAO;YACL,IAAI,CAAC,IAAI,GAAGA,iBAAe,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;YAClD,IAAI,CAAC,IAAI,GAAGA,iBAAe,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;QACpD;QAEA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;cAClBA,iBAAe,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM;cAC3C,SAAS;QACb,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;cACpBA,iBAAe,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ;cAC/C,SAAS;;AAGb,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa,EAAE;YACtC,IAAI,CAAC,OAAO,GAAGA,iBAAe,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;YAC3D,IAAI,CAAC,OAAO,GAAGA,iBAAe,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAGA,iBAAe,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC;YACxD,IAAI,CAAC,QAAQ,GAAGA,iBAAe,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;QAChE;;AAGA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,eAAe,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAC1D;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,SAAoB,EAAA;QACzB,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AAEzB,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;;AAErB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,IAAI,CAAC,eAAe;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;;;YAKtD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM;YAClE,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9B,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AACtE,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;gBACzC;YACF;AAEA,YAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,eAAe;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;AAC1E,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjC;YACF;QACF;aAAO;;AAEL,YAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC5D,oBAAA,IAAI,CAAC,UAAU,IAAI,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACnC,IAAI,IAAI,CAAC,eAAe;wBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACxE;gBAEA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,eAAe;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;AAC1E,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjC;AAEA,gBAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,oBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;AAC1E,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC1C;yBAAO;AACL,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxC;gBACF;YACF;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAoB,EAAA;;AAC/B,QAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;;AAG/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;;AAErE,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,gBAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC;YACF;iBAAO;gBACL,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;YAC7C;QACF;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;AACvC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;AACvC,QAAA,IAAI,OAAO,GAAqB,MAAM,CAAC;AACrC,cAAE;gBACE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,CAAC,CAAC;gBACnC,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,CAAC;AACnC;cACD,WAAW;AACf,QAAA,IAAI,OAAO,GAAqB,MAAM,CAAC;AACrC,cAAE;gBACE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,CAAC,CAAC;gBACnC,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,CAAC;AACnC;cACD,WAAW;;QAGf,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;;AAIhG,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE;;AAE7E,YAAA,IAAI,MAAM,CAAC,SAAS,EAAE;;gBAEpB,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;YACzC;iBAAO;AACL,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;AAGnC,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AACzC,gBAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,oBAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;wBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAClE,4BAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3C;oBACF;gBACF;gBAEA,IAAI,UAAU,GAAG,CAAC;gBAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;oBACpC,IAAI,KAAK,GAAG,UAAU;wBAAE,UAAU,GAAG,KAAK;gBAC5C;AAEA,gBAAA,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC;gBAClE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC;YACjC;QACF;AAAO,aAAA,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE;YAC9F,MAAM,GAAG,QAAQ,CAAC,GAAG,gBAAgB,CACnC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAC/D;AACD,YAAA,OAAO,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3D;AAAO,aAAA,IAAI,MAAM,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE;AAClF,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AAClE,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM;AAC7B,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC;AACxD,YAAA,OAAO,GAAG;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aACnC;QACH;aAAO,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAEtD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;AAC7B,gBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAChC,oBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;wBAAE;AAC7C,oBAAA,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AAAE,wBAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;AACpD,oBAAA,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AAAE,wBAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;gBACtD;YACF;YACA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC;;YAExD,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;AACnC,YAAA,OAAO,GAAG;AACR,gBAAA,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;AAC/C,gBAAA,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG;aAC7C;QACH;;AAGA,QAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAAE,YAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,QAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAAE,YAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;;AAIzE,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS;QACpD,IAAI,WAAW,EAAE;YACf,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,YAAA,IAAI,QAAQ,KAAK,GAAG,EAAE;AACpB,gBAAA,MAAM,MAAM,GAAqB,MAAM,CAAC,WAAW,KAAK;AACtD,sBAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK;sBAChB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrB,IAAI,CAAC,MAAM,GAAG;AACZ,oBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,oBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC1D;YACH;iBAAO;AACL,gBAAA,MAAM,MAAM,GAAqB,MAAM,CAAC,WAAW,KAAK;AACtD,sBAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM;sBACjB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG;AACZ,oBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,oBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM;iBAC9C;YACH;QACF;aAAO;YACL,IAAI,CAAC,MAAM,GAAG;AACZ,gBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,gBAAA,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;aAC1D;QACH;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,IAAI,CAAC,iBAAiB,EAAE;QAC1B;;AAGA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;;AAGzC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC3D,IAAI,CAAC,eAAe,EAAE;QACxB;QAEA,IAAI,CAAC,OAAO,EAAE;IAChB;AAEQ,IAAA,eAAe,CAAC,MAAoB,EAAA;QAC1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAE3C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;AAE7B,QAAA,QAAQ,MAAM,CAAC,SAAS;AACtB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACzC,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACnC,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC;AAC7C,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACjC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACnC,YAAA,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC;AACjD,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEQ,IAAA,cAAc,CAAC,IAA2B,EAAA;;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACnC,MAAM,KAAK,GAAgB,EAAE;;AAG7B,QAAA,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAC3C,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAA,CACrD,GAAG,CAAC,CAAC,CAAM,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAe;YACxB,KAAK,EAAE,CAAC,CAAC,KAAe;AACxB,YAAA,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS;AAC7C,SAAA,CAAC,CAAC;;AAGL,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;AAC1D,gBAAA,IAAI,UAAU;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC;QACF;AAEA,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;;YAExF,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAA,QAAQ,CAAC,eAAe,GAAG,eAAe;YAC5C;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtB;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,cAAc,CAAC,IAA2B,EAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACnC,MAAM,KAAK,GAAgB,EAAE;;QAG7B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,MAAM,EAAsB;AAC3D,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,YAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/F;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,qBAAqB,CAAC,IAA2B,EAAA;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,WAAiC,KAC/D,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;QAC3C,OAAO,qBAAqB,CAC1B,MAAM,EACN,IAAI,CAAC,MAAO,EACZ,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB;IACH;AAEQ,IAAA,eAAe,CAAC,IAA2B,EAAA;QACjD,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;;QAGlD,IAAI,SAAS,GAAmC,IAAI;QACpD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxF,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClC,gBAAA,SAAS,GAAG,CAAC,CAAS,KAAI;oBACxB,IAAI,OAAO,KAAK,OAAO;AAAE,wBAAA,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,oBAAA,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7F,gBAAA,CAAC;YACH;QACF;;QAGA,IAAI,QAAQ,GAA+B,IAAI;QAC/C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC5C,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU;AACpC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1B,gBAAA,IAAI,CAAC;AAAE,oBAAA,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B;AACA,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;kBACjE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAClH,YAAA,QAAQ,GAAG,IAAI,GAAG,EAAE;YACpB,IAAI,EAAE,GAAG,CAAC;AACV,YAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/C,gBAAA,EAAE,EAAE;YACN;QACF;AAEA,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE;;AAGlG,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ;AAC3B,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAC7C,oBAAA,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;gBACxB;YACF;;AAGA,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACtC,oBAAA,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,KAAK,CAAA,EAAA,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAA,CAAE;gBACrD;YACF;YAEA,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;AAC5E,YAAA,IAAI,IAAI;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,iBAAiB,CAAC,IAA2B,EAAE,MAAoB,EAAA;QACzE,MAAM,KAAK,GAAgB,EAAE;;AAG7B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAClC,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;QACtD;AAEA,QAAA,MAAM,MAAM,GAAGA,iBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;;AAGlE,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB;QAEA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAE9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;;AAG5C,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuC;AAC/D,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC7C,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACjD;;QAGA,IAAI,MAAM,GAAG,QAAQ;AACrB,QAAA,IAAI,MAAM,GAAG,CAAC,QAAQ;QACtB,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;YACvC,IAAI,GAAG,GAAG,MAAM;gBAAE,MAAM,GAAG,GAAG;YAC9B,IAAI,GAAG,GAAG,MAAM;gBAAE,MAAM,GAAG,GAAG;QAChC;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC;AAErC,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC1C,YAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC1C,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,OAAO,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,EAAE,CAAC,EAAE;gBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,KAAK;oBAAE;gBAEZ,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,IAAI,QAAQ;;AAEzC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,CAAA,IAAA,EAAO,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG;AAElC,gBAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAC1B,EAAE,GAAG,KAAK,EACV,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,EACjC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,CAAC,KAAK,CACZ,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACK,0BAA0B,CAAC,IAA2B,EAAE,MAAoB,EAAA;;QAClF,MAAM,KAAK,GAAgB,EAAE;QAC7B,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;QAC5C,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,OAAO;AACrD,QAAA,MAAM,MAAM,GAAGA,iBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;QAElE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAEnD,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAsB;AAC/D,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAsB;AAC/D,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK;AAC/B,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK;;AAG/B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuD;AAE3E,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACpE,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE;AAEtB,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;AACrC,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;YACrB;YACA,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB;;QAGA,IAAI,MAAM,GAAG,QAAQ;AACrB,QAAA,IAAI,MAAM,GAAG,CAAC,QAAQ;AACtB,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,IAAI,GAAW;YACf,QAAQ,GAAG;AACT,gBAAA,KAAK,KAAK;AAAE,oBAAA,GAAG,GAAG,IAAI,CAAC,GAAG;oBAAE;AAC5B,gBAAA,KAAK,MAAM;oBAAE,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;oBAAE;AAC/D,gBAAA;AAAS,oBAAA,GAAG,GAAG,IAAI,CAAC,KAAK;oBAAE;;AAE7B,YAAA,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YACxB,IAAI,GAAG,GAAG,MAAM;gBAAE,MAAM,GAAG,GAAG;YAC9B,IAAI,GAAG,GAAG,MAAM;gBAAE,MAAM,GAAG,GAAG;QAChC;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC;AAErC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK;AAClC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE;AACnC,YAAA,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACrC,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK;AACjB,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK;YAEjB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,IAAI,QAAQ;AACnC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,CAAA,IAAA,EAAO,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG;YAElC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAC1B,EAAE,GAAG,KAAK,EACV,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,EACxB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAC1E,CAAC;QACJ;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,aAAa,CAAC,IAA2B,EAAA;;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QAEnC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3F,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;;;;;;QAQ9B,IAAI,aAAa,GAAoB,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;YACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE;AACvC,oBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;gBACxB;YACF;YACA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;AACjF,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAC7E,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC;QAC/E;QAEA,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO;AAC3B,QAAA,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAsB;AACpE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;QAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;AACnD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;YAC/C,IAAI,YAAY,IAAI,UAAU;gBAAE;YAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AAClC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE;YACxB,IAAI,QAAQ,IAAI,CAAC;gBAAE;YAEnB,IAAI,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;gBAC5C,IAAI,cAAc,GAAG,CAAC;AACtB,gBAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,oBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC3C,IAAI,MAAM,KAAK,CAAC;wBAAE;oBAClB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;oBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC;oBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;oBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AAEtC,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAC1B,EAAE,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,GAAG,CAAC,KAAI,SAAS,EAAE,EACnD,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,EAChG,GAAG,CACJ,CAAC;oBACF,cAAc,IAAI,MAAM;gBAC1B;YACF;iBAAO;gBACL,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAEpC,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAC1B,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAC3D,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,eAAe,CAAC,IAA2B,EAAA;;QACjD,MAAM,KAAK,GAAgB,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;QAChC,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS;QAC3C,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACpC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;AAErC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE;YAExC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAE9B,IAAI,IAAI,GAAG,WAAW;AACtB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,GAAG,CAAC,KAAI,IAAI;YAC7C;YAEA,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AAC7C,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,mBAAmB,CAAC,IAA2B,EAAE,MAAoB,EAAA;QAC3E,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO;;QAG3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAG;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAElC,MAAM,GAAG,GAAG,CAAC;QACb,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,KAAK;;AAG/B,YAAA,IAAI,YAAoB;YACxB,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C;AAAO,iBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AAChB,gBAAA,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C;iBAAO;gBACL,YAAY,GAAG,CAAC;YAClB;YAEA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE;AACzF,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE;AACxB,YAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,QAAQ,GAAG,MAAM;gBACjB;YACF;YAEA,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAExC,YAAA,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS;YAC/C,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAC1B,EAAE,IAAI,EAAE,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAA,CAAA,CAChC,CAAC;YAEF,QAAQ,GAAG,MAAM;QACnB;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,qBAAqB,CAAC,IAA2B,EAAE,MAAoB,EAAA;QAC7E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAE/F,MAAM,KAAK,GAAgB,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE;AAC7C,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,SAAS;AACvC,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,SAAS;AAC3C,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,MAAM;AACxC,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC;;QAGnC,MAAM,OAAO,GAAG;aACb,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEvC,IAAI,MAAM,GAAG,QAAQ;AACrB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjF,gBAAA,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM;oBAAE,MAAM,GAAG,GAAG;YAC3C;AACA,YAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,gBAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;YACrD;QACF;AAEA,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE;YAExC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE;AAEtE,YAAA,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI;YAE1B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,aAAa;gBACnB,CAAC,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvB,KAAK,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC7B,KAAK,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzB,SAAS;gBACT,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,SAAS;gBACT,IAAI;AACJ,gBAAA,KAAK,EAAE;AACgB,aAAA,CAAC;QAC5B;AAEA,QAAA,OAAO,KAAK;IACd;;IAIQ,mBAAmB,CAAC,IAA2B,EAAE,KAAa,EAAA;QACpE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAEhD,MAAM,OAAO,GAAuB,EAAE;QACtC,MAAM,UAAU,GAAuB,EAAE;AAEzC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE;YAElE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5B,YAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;;gBAE3B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9C,gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACnD;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QAEnC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,KAAK,EAAE,IAAI;YACX,KAAK;AACL,YAAA,WAAW,EAAE;SACd;IACH;IAEQ,kBAAkB,CAAC,KAAa,EAAE,WAAiC,EAAA;AACzE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAClC,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,OAAO,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;AAChC,YAAA,OAAO,EAAE;QACX;;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;QAC3D,OAAO;AACL,YAAA,IAAI,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;AACnC,YAAA,WAAW,EAAE,GAAG;AAChB,YAAA,MAAM,EAAE;SACT;IACH;;AAIA;;;AAGG;IACH,mBAAmB,CAAC,WAAmB,EAAE,UAAkB,EAAA;;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC;QAEvC,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;;AAE1C,QAAA,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW;AAExC,QAAA,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,QAAQ,EAAE;gBACb,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,UAAU,GAAG,CAAC,CAAC;gBACpC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC1C;YACA,KAAK,aAAa,EAAE;gBAClB,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,GAAG,CAAC;AACjD,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC;gBACvC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC1C;YACA,KAAK,MAAM,EAAE;gBACX,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,GAAG,GAAG;gBACzD,OAAO,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU;YACzC;AACA,YAAA;AACE,gBAAA,OAAO,CAAC;;IAEd;AAEA;;;AAGG;IACK,UAAU,CAAC,KAAkB,EAAE,IAA2B,EAAA;;AAChE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;QAC9B,IAAI,UAAU,IAAI,CAAC;YAAE;;AAGrB,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI;gBAAE;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC;AAC9D,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC1B,IAAY,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE;YAClD;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAEpC,gBAAA,IAAY,CAAC,aAAa,GAAG,YAAY;YAC7C;iBAAO;gBACL,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,KAAK,CAAA,EAAA,EAAE,OAAO,EAAE,WAAW,GAAG,YAAY,GAAE;YACrE;QACF;IACF;;AAIA;;;AAGG;IACK,qBAAqB,CAAC,UAAkB,EAAE,GAAW,EAAA;;AAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC;QACpB,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACtC,QAAA,MAAM,GAAG,GAAG,GAAG,GAAG,UAAU;QAC5B,IAAI,GAAG,IAAI,QAAQ;AAAE,YAAA,OAAO,CAAC;AAC7B,QAAA,OAAO,CAAC,GAAG,GAAG,GAAG,QAAQ;IAC3B;AAEA;;AAEG;IACK,UAAU,CAAC,KAAkB,EAAE,IAA2B,EAAA;;QAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;QACjD,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,uBAAuB;;AAGrE,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI;gBAAE;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAChD,IAAI,UAAU,IAAI,IAAI;gBAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7D,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AAChB,gBAAA,IAAY,CAAC,eAAe,GAAG,SAAS;AACvC,gBAAA,IAAY,CAAC,WAAW,GAAG,UAAU;YACzC;QACF;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAChG,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC1C,OAAO,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,QAAQ;IACpD;;AAIA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACpE;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7D;QACF;IACF;AAEA;;AAEG;IACK,eAAe,CAAC,IAAe,EAAE,KAAa,EAAA;;AACpD,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjG,YAAA,KAAK,MAAM;gBACT,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAA,CAAE;AACzF,YAAA,KAAK,UAAU;gBACb,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA,CAAE;AAChC,YAAA,KAAK,aAAa;gBAChB,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE;AACrC,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEA;;AAEG;IACK,eAAe,GAAA;;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;YAAE;AAChE,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAEvD,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI;gBAAE;;AAGX,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AAClD,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE;AAC9C,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI;gBACnB;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AAC7D,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE;AAC5F,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI;gBACnB;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBACnC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AAC7D,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE;AAC9C,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI;gBACnB;YACF;QACF;QAEA,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,gBAAgB,GAAG;AACtB,gBAAA,SAAS,EAAE,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC9E;aACD;QACH;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,GAAW,EAAA;;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;QAExC,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAElE,QAAA,MAAM,CAAC,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAK;AAC3C,cAAE;AACF,cAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAE7B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG;oBAAE;gBACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,EAAE;AACvD,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;gBAChD;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG;oBAAE;gBACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS;AAAE,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AACzE,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS;AAAE,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;YAC3E;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG;oBAAE;gBACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS;AAAE,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AACzE,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS;AAAE,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;YAC3E;QACF;AAEA,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;;AAEb,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;wBAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,wBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACvD,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;gBAC3B;AAAO,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;wBAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;gBAC3B;AAAO,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;wBAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;gBAC3B;YACF;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;AAIQ,IAAA,SAAS,CAAC,IAA2B,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpC;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC;AACvD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B;AAEA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E;IAEQ,gBAAgB,CAAC,KAAa,EAAE,WAAiC,EAAA;AACvE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AAChC,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,OAAO,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;YAChC,OAAO;AACL,gBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS;AAC9B,gBAAA,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,CAAC;gBAChC,eAAe,EAAE,EAAE,CAAC,eAAe;gBACnC,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,OAAO,EAAE,EAAE,CAAC;aACb;QACH;QACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE;IAC9C;IAEQ,gBAAgB,CAAC,KAAa,EAAE,WAAiC,EAAA;;AACvE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;QACjD;;AAEA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AAChC,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,OAAO,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;YAChC,OAAO;gBACL,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,IAAI,SAAS;AACvC,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,EAAE,CAAC,WAAW,mCAAI,GAAG;AAClC,gBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS;AAC9B,gBAAA,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI;aAChC;QACH;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE;IACjF;;IAIA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAC9B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAC9C,OAAO;AACL,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AACtB,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;SACjB;IACH;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACpB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IACzB;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,YAAY,CAAC,MAA+B,EAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IACpC;AACD;;ACp5CD;;;AAGG;AACG,SAAU,eAAe,CAC7B,KAAkB,EAClB,EAAU,EACV,EAAU,EACV,WAAA,GAAsB,EAAE,EAAA;IAExB,IAAI,IAAI,GAAqB,IAAI;AAEjC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,MAAM,GAAqB,IAAI;AAEnC,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;gBACV,MAAM,GAAGC,cAAY,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACnC;AACF,YAAA,KAAK,MAAM;gBACT,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC;AACF,YAAA,KAAK,MAAM;gBACT,MAAM,GAAGC,aAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC;AACF,YAAA,KAAK,UAAU;gBACb,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;oBAAE;;gBAEhC,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACtC;AACF,YAAA,KAAK,aAAa;gBAChB,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACzC;;QAGJ,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,WAAW,EAAE;YAC3C,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC5C,IAAI,GAAG,MAAM;YACf;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAASD,cAAY,CAAC,IAAoB,EAAE,EAAU,EAAE,EAAU,EAAA;AAChE,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAEzC,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI;IAClC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1E;AAEA,SAAS,WAAW,CAAC,IAAmB,EAAE,EAAU,EAAE,EAAU,EAAA;AAC9D,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;;IAGvC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3C,IAAI,GAAG,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAGzC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG;AACvD,UAAE,IAAI,CAAC,KAAK,CAAC,GAAG;AAChB,UAAE,IAAI,CAAC,KAAK;AAEd,IAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtD;AAEA,SAASC,aAAW,CAAC,IAAmB,EAAE,EAAU,EAAE,EAAU,EAAA;AAC9D,IAAA,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;;QAElF,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC/D;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CAAC,IAAuB,EAAE,EAAU,EAAE,EAAU,EAAA;AACtE,IAAA,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;QAClF,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC/D;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,kBAAkB,CAAC,IAA0B,EAAE,EAAU,EAAE,EAAU,EAAA;AAC5E,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;;AAEnC,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACpD,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC;AAEpD,IAAA,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;AAC1D,QAAA,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;;AAE/C,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC;AACnC,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtB,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,QAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;IAC9F;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CAAC,IAA+D,EAAE,EAAU,EAAE,EAAU,EAAA;AAC9G,IAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IAC1C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,IAAI,GAAG,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEzC,OAAO,EAAE,IAAI,EAAE,IAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AACrF;AAEA;;AAEG;AACH,SAAS,gBAAgB,CAAC,IAAwB,EAAE,OAAe,EAAA;AACjE,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE;IAEhC,IAAI,EAAE,GAAG,CAAC;AACV,IAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAExB,IAAA,OAAO,EAAE,GAAG,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AAAE,YAAA,EAAE,GAAG,GAAG,GAAG,CAAC;;YACnC,EAAE,GAAG,GAAG;IACf;;AAGA,IAAA,IAAI,EAAE,GAAG,CAAC,EAAE;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QACjD,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,EAAE,GAAG,CAAC;IACjC;AAEA,IAAA,OAAO,EAAE;AACX;;AC9JA,MAAM,QAAQ,GAAG;AACf,IAAA,IAAI,EAAE,CAAC,KAAa,KAAK,8BAAM,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAA,CAAI;IACtE,IAAI,EAAE,CAAC,KAAa,KAAK,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAA;CAC1E;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,CAAS,EACT,IAAc,EACd,OAAiB,EAAA;AAEjB,IAAA,IAAI,YAAY;AAChB,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,QAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B;SAAO;AACL,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,QAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;IAC5B;AACA,IAAA,OAAO,YAAY;AACrB;AAEA,MAAM,yBAAyB,GAAG,CAChC,WAAwB,EACxB,mBAA8B,KAC5B;IACF,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW;IACrD,MAAM,aAAa,GAAG,EAAE;IACxB,IAAI,UAAU,GAAG,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACxB,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;AACvD,QAAA,aAAa,CAAC,IAAI,CAChB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,CAAA,YAAA,EAAe,CAAC,CAAA,CAAE,EACvB,SAAS,EAAE,CAAA,YAAA,EAAe,UAAU,GAAG,EACvC,OAAO,EACL,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,GAAG,SAAS,EAEnE,KAAK,EAAE;gBACL,MAAM,EAAE,mBAAmB,GAAG,SAAS,GAAG;AAC3C,aAAA,EAAA;YAEA,YAAY;AACb,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAA,EACf,IAAI,CAAC,KAAK,CACN,CACL,CACL;QACD,UAAU,IAAI,EAAE;AAClB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,aAAa;AACtB,CAAC;AAED,MAAM,2BAA2B,GAAG,CAClC,WAAwB,EACxB,mBAA8B,KAC5B;IACF,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW;IACrD,MAAM,aAAa,GAAG,EAAE;IACxB,IAAI,UAAU,GAAG,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACxB,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;AACvD,QAAA,aAAa,CAAC,IAAI,CAChB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,CAAA,YAAA,EAAe,CAAC,CAAA,CAAE,EACvB,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,KAAK,EACvC,OAAO,EACL,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,GAAG,SAAS,EAEnE,KAAK,EAAE;gBACL,MAAM,EAAE,mBAAmB,GAAG,SAAS,GAAG;AAC3C,aAAA,EAAA;YAEA,YAAY;AACb,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAA,EACf,IAAI,CAAC,KAAK,CACN,CACL,CACL;QACD,UAAU,IAAI,EAAE;QAChB,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE;AACrD,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,EAC3B,YAAY,EACZ,KAAK,EACL,mBAAmB,EAKpB,KAAI;IACH,IAAI,MAAM,GAAG,EAAE;IAEf,MAAM,cAAc,GAAG,EAAE;IAEzB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QAC5B,MAAM,IAAI,CAAC;AACX,QAAA,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,8BAAA,EAAiC,CAAC,CAAA,CAAE,EACzC,MAAM,EAAC,MAAM,EACb,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,MAAM,EAAA,CACV,CACH;QACD,MAAM,IAAI,EAAE;AACZ,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,MAAM,IAAI,EAAE;YACZ,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,YAAA,EAAe,CAAC,CAAA,CAAE,EACvB,CAAC,EAAE,MAAM,EACT,SAAS,EAAC,oBAAoB,EAAA,EAE7B,CAAC,CAAC,KAAK,CACH,CACR;YACD,MAAM,IAAI,EAAE;QACd;AAEA,QAAA,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAE,EACxB,SAAS,EAAC,aAAa,EACvB,SAAS,EAAE,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,CAAG,EAAA,EAElC,yBAAyB,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAChD,CACL;QACD,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE;AACpC,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,cAAc;AACvB,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,EAC7B,YAAY,EACZ,KAAK,EACL,MAAM,EACN,mBAAmB,EAMpB,KAAI;IACH,IAAI,MAAM,GAAG,CAAC;IAEd,MAAM,cAAc,GAAG,EAAE;AAEzB,IAAA,MAAM,cAAc,GAAG,KAAK,KAAK,KAAK,GAAG,EAAE,GAAG,EAAE;IAEhD,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,YAAA,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,YAAA,EAAe,CAAC,CAAA,CAAE,EACvB,SAAS,EAAE,aAAa,MAAM,CAAA,CAAA,EAAI,cAAc,CAAA,YAAA,CAAc,EAC9D,UAAU,EAAC,OAAO,EAClB,SAAS,EAAC,oBAAoB,EAAA,EAE7B,CAAC,CAAC,KAAK,CACH,CACR;YACD,MAAM,IAAI,EAAE;QACd;QAEA,MAAM,aAAa,GAAG,2BAA2B,CAAC,CAAC,EAAE,mBAAmB,CAAC;QAEzE,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAE,EACxB,SAAS,EAAC,aAAa,EACvB,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,CAAG,EAAA,EAElD,aAAa,CAAC,KAAK,CAClB,CACL;AACD,QAAA,MAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AAElC,QAAA,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACvB,YAAA,cAAc,CAAC,IAAI,CACjB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,8BAAA,EAAiC,CAAC,CAAA,CAAE,EACzC,MAAM,EAAC,MAAM,EACb,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,cAAc,GAAG,EAAE,EACvB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,EAAE,EAAA,CAChC,CACH;QACH;QACA,MAAM,IAAI,EAAE;AACd,IAAA,CAAC,CAAC;AAEF,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;AACG,QAAA,KAAK,KAAK,KAAK,KACd,8BACE,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GAAG,EAAE,EACf,EAAE,EAAE,cAAc,GAAG,EAAE,EACvB,EAAE,EAAE,cAAc,GAAG,EAAE,EACvB,MAAM,EAAC,MAAM,EACb,SAAS,EAAC,gBAAgB,GAC1B,CACH;QACA,cAAc,CACb;AAER,CAAC;AAEa,SAAU,MAAM,CAAC,KAAkB,EAAA;IAC/C,MAAM,EACJ,YAAY,EACZ,mBAAmB,EACnB,KAAK,GAAG,QAAQ,EAChB,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,EAAE,EACX,WAAW,GAAG,UAAU,EACzB,GAAG,KAAK;AACT,IAAA,MAAM,cAAc,GAClB,WAAW,KAAK;UACZ,mBAAmB,CAAC;YAClB,YAAY;YACZ,KAAK;YACL;SACD;UACD,qBAAqB,CAAC;YACpB,YAAY;YACZ,KAAK;YACL,MAAM;YACN;AACD,SAAA,CAAC;AAER,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;QACG,KAAK,KAAK,SAAS,KAClB,8BACE,SAAS,EAAC,cAAc,EACxB,CAAC,EAAE,EAAE,EACL,CAAC,EAAE,WAAW,KAAK,YAAY,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAC/C,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,OAAO,GAAG,QAAQ,EAAA,EAE5D,KAAK,CACD,CACR;QACA,cAAc,CACb;AAER;;AC7OA;AACM,SAAU,uBAAuB,CACrC,KAAoC,EAAA;AAEpC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IACxB;AACA,IAAA,OAAO,KAAK;AACd;AAEA,MAAM,QAAQ,GAAG;AACf,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,WAAW,EAAE;CACd;AAED,SAAS,aAAa,CAAC,MAAsB,EAAA;;IAC3C,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,IAAI;QAClC,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,IAAI;QAClC,WAAW,EAAE,MAAA,MAAM,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,WAAW;QACvD,MAAM,EAAE,MAAA,MAAM,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,MAAM;QACxC,WAAW,EAAE,MAAA,MAAM,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ,CAAC;KAC7C;AACH;AAEA;AACA,SAAS,YAAY,CAAC,MAAgB,EAAA;IACpC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChD,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM;IACvB,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1C,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvC,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACtD,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IAE3D,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE;AACpD;SAEgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EAAE,SAAS,EACjB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,MAAM,EACgB,EAAA;AACtB,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC;IAEjB,MAAM,YAAY,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ;AAE5D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAK;AAC3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAsB;AACjD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,CAAC;AAExC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK;AACzD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,GAAG,EAAE,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,aAAa,GAAG,YAAY,IAAI,CAAC,GAAG,OAAO;YAE3D,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;AAC/B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;AACjC,gBAAA,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;AACzC,gBAAA,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;AAEtC,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,aAAA,EAAgB,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAE,EAAA;oBAE1C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,EAC5D,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,EAC7D,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AAEF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EACvC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,CAAC,EACxD,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EACxC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,CAAC,EACzD,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AAEF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EACnB,CAAC,EAAE,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,EACpE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACxB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAC9D,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CAC/B;AAEF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,EAC/E,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,EAC/E,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAA,CACnC,CACA;YAER;iBAAO;;AAEL,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;AAC/B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;AACjC,gBAAA,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,KAAK,GAAG,CAAC;AAEf,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,aAAA,EAAgB,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAE,EAAA;oBAC1C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,EACjD,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EACxE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAAE,EAAE,EAAE,KAAK,EACvC,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EACxD,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,EACxC,EAAE,EAAE,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EACzD,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACpD;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,EACrE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EACnB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACzB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAC9D,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CAC/B;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,EACtE,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,EACtE,EAAE,EAAE,IAAI,EACR,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAA,CACnC,CACA;YAER;QACF;;QAGA,MAAM,MAAM,GAAGC,GAAK;aACjB,MAAM,CAAC,MAAM;AACb,aAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAE1B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAE/B,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;AAC/B,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,aAAA,EAAgB,CAAA,mBAAA,EAAsB,MAAM,EAAE,EAAA,EAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBACnB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;AAAE,oBAAA,OAAO,IAAI;AACjD,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM;gBACxB,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,QAAQ,IAAI,aAAa;gBAElD,IAAI,YAAY,EAAE;oBAChB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,oBAAA,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO;oBACzD,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAC,EACN,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EACpD,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAClD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACtD;gBAEN;qBAAO;oBACL,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,oBAAA,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO;AAC1D,oBAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAC,EACN,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAChE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAClD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CACtD;gBAEN;YACF,CAAC,CAAC,CACA;QAER;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAE5B,YAAA,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC,GAAG,OAAO;YAE3C,MAAM,MAAM,GAAa,EAAE;;AAE3B,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;oBAAE;AACtC,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;AACjC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,KAAK,aAAa,GAAG,CAAC,CAAC;AACvD,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;gBAEtB,IAAI,YAAY,EAAE;oBAChB,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;gBAC5B;qBAAO;oBACL,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC;gBAC5B;YACF;;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;oBAAE;AACtC,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;AACjC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,KAAK,aAAa,GAAG,CAAC,CAAC;AACvD,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;gBAEtB,IAAI,YAAY,EAAE;oBAChB,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;gBAC5B;qBAAO;oBACL,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC;gBAC5B;YACF;AAEA,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,aAAA,EAAgB,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,EAAA;gBACzC,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EACE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACxB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAClD,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAC9D,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CAC/B,CACA;QAER;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;;YAE/B,MAAM,SAAS,GAAa,EAAE;YAE9B,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;;gBAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBACzD,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;AAErC,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACtB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;wBAAE;AACtC,oBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;oBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,IAAI,aAAa;AACjD,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AACpB,oBAAA,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO;oBACvD,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;gBAC9B;;AAGA,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAG,CAAC,GAAG,MAAM;gBACzF,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;AACnC,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB;iBAAO;gBACL,MAAM,KAAK,GAAG,CAAC;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBACzD,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;AAErC,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACtB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;wBAAE;AACtC,oBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;oBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,IAAI,aAAa;AACjD,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AACpB,oBAAA,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO;oBACxD,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;gBAC9B;AAEA,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAG,CAAC,GAAG,MAAM;gBACzF,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AACnC,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB;AAEA,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,aAAA,EAAgB,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAE,EAAA;gBAC5C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAClD,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAC9D,WAAW,EAAE,MAAM,CAAC,WAAW,EAAA,CAC/B,CACA;QAER;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAExE,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;;;;;;AAyBzB,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,YAAY,MAAM,CAAA,CAAE,EAAA,aAAA,EAAe,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,EAAA,EAClE,OAAO,CACN;AAER;;AClUA,SAASC,gBAAc,CAAC,KAAc,EAAA;AACpC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;AACd,QAAA,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAC5B,cAAc,IAAI,KAAK;AAE3B;AAEA,SAAS,iBAAiB,CAAC,CAAS,EAAA;AAClC,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1C;AAEM,SAAU,UAAU,CAAC,KAAsB,EAAA;IAC/C,MAAM,EACJ,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACT,GAAG,KAAK;;AAGT,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACnC,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;AACjC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,KAAK,EAAE,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACxC,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACnC,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;AACjC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,KAAK,EAAE,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACxC,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;;AAG/B,IAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAK;QACvC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB;AAAE,YAAA,OAAO,IAAI;AAChF,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,KACjB,kBAAkB,CAAC,UAAU,EAAE,CAAC,EAAE;YAChC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI;AAC3D,YAAA,QAAQ,EAAE,GAAG;YACb,KAAK;YACL;AACD,SAAA,CAAC;aAEH,MAAM,CAAC,OAAO,CAAC;;AAEpB,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,kBAAkB,IAAI,gBAAgB,KAAK,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ;AAE3K,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,IAAI;IAE5B,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,aAAa,EAAE;AAChB,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,EAAA;AAEpD,YAAA,QAAQ,IAAI,MAAM,KACjB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,aAAa,EAAA;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAClB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,MAAA,EAAS,CAAC,EAAE,EACjB,EAAE,EAAE,IAAI,CAAC,KAAK,EACd,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,IAAI,CAAC,KAAK,EACd,EAAE,EAAE,MAAM,EACV,MAAM,EAAC,SAAS,EAChB,WAAW,EAAE,CAAC,EAAA,CACd,CACH,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAClB,8BACE,GAAG,EAAE,SAAS,CAAC,CAAA,CAAE,EACjB,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,IAAI,CAAC,KAAK,EACd,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,IAAI,CAAC,KAAK,EACd,MAAM,EAAC,SAAS,EAChB,WAAW,EAAE,CAAC,EAAA,CACd,CACH,CAAC,CACA,CACL;AAGA,YAAA,QAAQ,IAAI,MAAM,KACjB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,aAAa,EAAA;gBAExB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBAC/E,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAClB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,EAAA;oBACnE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC7C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;AACD,gBAAA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,KAAK,GAAG,CAAC,EACZ,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR;gBAGD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBACtE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAClB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG,EAAA;AAC3D,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC9C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,KAAK,EAChB,gBAAgB,EAAC,QAAQ,EACzB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;gBACD,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EACpB,CAAC,EAAE,MAAM,GAAG,CAAC,EACb,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,CAAA,YAAA,EAAe,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA,EAAA,EAAK,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG,EAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR,CACC,CACL;YAGA,mBAAmB;AAGnB,YAAA,gBAAgB,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,KAC/C,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACG,gBAAA,gBAAgB,CAAC,GAAG,KACnB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,eAAA,CAAiB,EAAA;AAC7B,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EAAC,KAAK,EACZ,MAAM,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,GAAG,CAAC,EACrD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,CAAC,GAAG,EAChB,MAAM,EAAE,KAAK,EAAA,CACb,CACA,CACL;gBACA,gBAAgB,CAAC,MAAM,KACtB,2BAAG,SAAS,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAA,CAAG,EAAA;AACrC,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EAAC,QAAQ,EACf,MAAM,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACxD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EACnB,MAAM,EAAE,KAAK,EAAA,CACb,CACA,CACL;AACA,gBAAA,gBAAgB,CAAC,IAAI,KACpB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,eAAA,CAAiB,EAAA;AAC7B,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EAAC,MAAM,EACb,MAAM,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACtD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,MAAM,EAAE,MAAM,EAAA,CACd,CACA,CACL;gBACA,gBAAgB,CAAC,KAAK,KACrB,2BAAG,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAA,IAAA,CAAM,EAAA;AACpC,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EAAC,OAAO,EACd,MAAM,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EACvD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,CAAC,KAAK,EAClB,MAAM,EAAE,MAAM,GACd,CACA,CACL,CACA,CACJ;YAGA,kBAAkB;AAElB,YAAA,QAAQ,CACP;QAGH,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,UAAU,GAAG,CAAC,EACjB,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAC,MAAM,EACjB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CACpC,CACR;QAGA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA,EAAA,EAAK,MAAM,CAAC,GAAG,GAAG,EAAA,EACxEA,gBAAc,CAAC,MAAM;AACpB,cAAE,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAC,EAAE,EAAC,KAAK,EAAE,GAAG,EAAA;AAChE,cAAG,MAAoB,CACvB,CACL,CACG;AAEV;;ACjUA,SAAS,YAAY,CACnB,KAAa,EACb,UAAgC,EAChC,SAAiB,EAAA;IAEjB,IAAI,KAAK,GAAG,SAAS;AACrB,IAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC,aAAa,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,gBAAA,KAAK,GAAG,CAAC,CAAC,KAAK;QACtC;aAAO;AACL,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK;AAAE,gBAAA,KAAK,GAAG,CAAC,CAAC,KAAK;QACtC;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;;;;AAKG;AACI,MAAM,kBAAkB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;AACjF,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAyB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAE5E,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe;AACvC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAEhC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AAC9B,YAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzE;aAAO;AACL,YAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACrB;QAEA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;YAC9B,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;QACtC;AAEA,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;;QAGzB,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjG,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,WAAW,GAAG,SAAS;AAE3B,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C;YACA,GAAG,CAAC,MAAM,EAAE;QACd;aAAO;;YAEL,IAAI,KAAK,GAAkB,IAAI;YAC/B,IAAI,KAAK,GAAkB,IAAI;YAC/B,IAAI,SAAS,GAAkB,IAAI;YACnC,IAAI,SAAS,GAAkB,IAAI;YACnC,IAAI,WAAW,GAAG,KAAK;AAEvB,YAAA,SAAS,YAAY,CAAC,KAAa,EAAE,CAAS,EAAE,CAAS,EAAA;gBACvD,GAAG,CAAC,SAAS,EAAE;AACf,gBAAA,GAAG,CAAC,WAAW,GAAG,KAAK;AACvB,gBAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChB,WAAW,GAAG,IAAI;YACpB;AAEA,YAAA,SAAS,UAAU,GAAA;gBACjB,IAAI,WAAW,EAAE;oBACf,GAAG,CAAC,MAAM,EAAE;oBACZ,WAAW,GAAG,KAAK;gBACrB;YACF;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,gBAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;AAExD,gBAAA,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE;AAC9D,oBAAA,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7B,KAAK,GAAG,CAAC;oBACT,KAAK,GAAG,CAAC;oBACT,SAAS,GAAG,CAAC;oBACb,SAAS,GAAG,SAAS;oBACrB;gBACF;AAEA,gBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,oBAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB;qBAAO;;oBAEL,MAAM,SAAS,GAAyB,EAAE;AAE1C,oBAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,wBAAA,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK;wBAC1B,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,SAAS,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;4BAChE,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AAChC,gCAAA,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS,CAAC;gCAClD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;4BAChC;wBACF;oBACF;AAEA,oBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,wBAAA,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC;AAC7C,wBAAA,MAAM,IAAI,GAAG,KAAM,GAAG,CAAC,CAAC,GAAG,KAAM,IAAI,QAAQ,CAAC,CAAC;wBAE/C,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;wBAClF,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;AAElE,wBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACtB,wBAAA,UAAU,EAAE;AACZ,wBAAA,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;oBACrC;AAEA,oBAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB;gBAEA,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,SAAS,GAAG,CAAC;gBACb,SAAS,GAAG,SAAS;YACvB;AAEA,YAAA,UAAU,EAAE;QACd;;QAGA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE;YAC3E,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;YACxC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AAC/B,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C;AACA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACjC,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,IAAI,EAAE;QACZ;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,QAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;IACrB;AACF,CAAC;;AC3JD;;;;AAIG;AACI,MAAM,kBAAkB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;;AACjF,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAyB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAE5E,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE;QAE7B,GAAG,CAAC,SAAS,EAAE;;AAGf,QAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD;;AAGA,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACpD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D;QAEA,GAAG,CAAC,SAAS,EAAE;;QAGf,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACjD,QAAA,GAAG,CAAC,WAAW,GAAG,WAAW;QAC7B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;QAC5C,GAAG,CAAC,IAAI,EAAE;;AAGV,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrD,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;YACnB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC3C,YAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;;YAGnB,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD;YACA,GAAG,CAAC,MAAM,EAAE;QACd;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;IACrB;AACF,CAAC;;ACnDD;;;;AAIG;AACI,MAAM,mBAAmB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;;AAClF,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA0B,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAE/E,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAE/C,QAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW;AAC1D,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,GAAG,CAAC,WAAW,GAAG,KAAK;QACzB;QAEA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;QAC5C,GAAG,CAAC,IAAI,EAAE;AAEV,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACrB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;YAC3C,GAAG,CAAC,MAAM,EAAE;QACd;;QAGA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YACpD,MAAM,UAAU,GAAG,CAAC;YACpB,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACnF,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB;YAC7D,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe;YACxC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG;YAC5C,GAAG,CAAC,MAAM,EAAE;QACd;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;IACrB;AACF,CAAC;;ACvCD;;;;AAIG;AACI,MAAM,iBAAiB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;AAChF,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAyB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAE5E,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;YAC9B,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;QACtC;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;;AAEnB,YAAA,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;QACxB;aAAO;;YAEL,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;AAC5C,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAE5C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACrB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;gBACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC3C,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD;QACF;;QAGA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YACpD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG;YAC5C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB;AAC3D,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;IACrB;AACF,CAAC;AAED,SAAS,WAAW,CAAC,GAA6B,EAAE,IAAmB,EAAA;AACrE,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAK;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;;AAG3C,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO;IACnD,IAAI,QAAQ,IAAI,CAAC;QAAE;;IAGnB,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErC,GAAG,CAAC,IAAI,EAAE;IACV,GAAG,CAAC,SAAS,EAAE;AACf,IAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxC,GAAG,CAAC,IAAI,EAAE;IAEV,IAAI,aAAa,EAAE;;AAEjB,QAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,OAAO;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;AAEhD,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,IAAI,EAAE;AACtD,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrD;IACF;SAAO;;AAEL,QAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,OAAO;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;QAEhD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;AACnD,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrD;IACF;IAEA,GAAG,CAAC,OAAO,EAAE;AACf;;AC3EA;;;;AAIG;AACI,MAAM,mBAAmB,GAAqB,mBAAmB;;ACLxE;;;;;AAKG;AACI,MAAM,uBAAuB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;;;IAEtF,iBAAiB,CAAC,GAAG,EAAE,KAAqB,CAAC;;AAG7C,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAClD,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE;IAEtB,GAAG,CAAC,IAAI,EAAE;AACV,IAAA,GAAG,CAAC,WAAW,GAAG,MAAM;AACxB,IAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,IAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;AAEnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAQ;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAQ;AAChC,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAA;YAAE;;AAGlD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QAEjB,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;AACrB,QAAA,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;QACrB,GAAG,CAAC,MAAM,EAAE;IACd;IAEA,GAAG,CAAC,OAAO,EAAE;AACf,CAAC;;ACpCD;;;AAGG;AACI,MAAM,qBAAqB,GAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;AACpF,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA6B,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAEpF,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;;AAE5B,QAAA,MAAM,SAAS,GAAI,IAAY,CAAC,KAAK;QACrC,IAAI,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,IAAI,EAAE;AAC9B,YAAA,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO;QACrC;AAEA,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;AACzB,QAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;;AAG5C,QAAA,GAAG,CAAC,WAAW,GAAG,MAAM;AACxB,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,QAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;;QAG9C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YACpD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG;YAC5C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB;AAC3D,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;IACrB;AACF,CAAC;;AC/BM,MAAM,yBAAyB,GAAqB,CACzD,GAA6B,EAC7B,KAAkB,EAClB,OAAqB,EACrB,OAAqB,KACnB;AACF,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;YAAE;QACjC,MAAM,CAAC,GAAG,IAA4B;;QAGtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QACxB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AACvB,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS;AAC7B,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,EAAE;;AAGZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;AAC3C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/C,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS;AAElD,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;AACzB,QAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;;AAGlF,QAAA,GAAG,CAAC,WAAW,GAAG,SAAS;AAC3B,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,QAAA,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACtF;AACF,CAAC;;ACKD;AAEA,MAAMC,WAAS,GAAgD;AAC7D,IAAA,IAAI,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,kBAAkB,CAAC;IAC1B,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,OAAO,EAAE,CAAC,mBAAmB,CAAC;IAC9B,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,OAAO,EAAE,CAAC,qBAAqB,CAAC;IAChC,GAAG,EAAE,CAAC,iBAAiB,CAAC;IACxB,KAAK,EAAE,CAAC,mBAAmB,CAAC;IAC5B,SAAS,EAAE,CAAC,uBAAuB,CAAC;IACpC,WAAW,EAAE,CAAC,yBAAyB;CACxC;AAED;AAEA,MAAMC,gBAAc,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAanE,MAAMC,aAAW,GAAgB;AAC/B,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,SAAS,EAAE,0BAA0B;AACrC,IAAA,WAAW,EAAE,oBAAoB;AACjC,IAAA,SAAS,EAAE;CACZ;AAED,SAAS,kBAAkB,CAAC,EAAsB,EAAA;AAChD,IAAA,IAAI,CAAC,EAAE;AAAE,QAAA,OAAOA,aAAW;AAC3B,IAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;IACvE,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;IAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;AAE7D,IAAA,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;AAAE,QAAA,OAAOA,aAAW;IAEtD,OAAO;AACL,QAAA,UAAU,EAAE,QAAQ,IAAIA,aAAW,CAAC,UAAU;AAC9C,QAAA,QAAQ,EAAE,aAAa,IAAIA,aAAW,CAAC,QAAQ;AAC/C,QAAA,SAAS,EAAE,aAAa,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI,GAAGA,aAAW,CAAC,SAAS;AACvE,QAAA,SAAS,EAAE,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,GAAGA,aAAW,CAAC,SAAS;AAC7D,QAAA,WAAW,EAAE,aAAa,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI,GAAGA,aAAW,CAAC,WAAW;AAC3E,QAAA,SAAS,EAAE,QAAQ,IAAIA,aAAW,CAAC;KACpC;AACH;AAEA;AAEA,MAAMC,qBAAmB,GAAwB;AAC/C,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,SAAS,EAAE,+BAA+B;AAC1C,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,UAAU,EAAE;CACb;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAwB,EAAA;AACrD,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAS,KACzB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhD,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AAC1D,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,IAC7C,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAClB;QACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,EACvC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CACjB,CACF;AAEV;AAEA;AAEA,SAAS,aAAa,CACpB,GAA6B,EAC7B,KAAgB,EAChB,KAAa,EACb,MAAc,EACd,MAA6B,EAC7B,UAAkB,EAClB,KAAkB,EAAA;AAElB,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK;AAChD,IAAA,IAAI,CAAC,aAAa;QAAE;IAEpB,GAAG,CAAC,IAAI,EAAE;AACV,IAAA,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,GAAG,MAAM,CAAC,SAAS,GAAG,EAAE;IAC/E,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;IACtD,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC;AAC3C,IAAA,IAAI,UAAU,CAAC,eAAe,EAAE;AAC9B,QAAA,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzE;SAAO;QACL,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB;IAEA,GAAG,CAAC,SAAS,EAAE;IACf,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,MAAM,EAAE;IAEZ,GAAG,CAAC,SAAS,EAAE;IACf,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,MAAM,EAAE;IAEZ,GAAG,CAAC,OAAO,EAAE;;IAGb,GAAG,CAAC,SAAS,EAAE;IACf,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,IAAA,GAAG,CAAC,SAAS,GAAG,UAAU;IAC1B,GAAG,CAAC,IAAI,EAAE;AACV,IAAA,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS;AACjC,IAAA,GAAG,CAAC,SAAS,GAAG,CAAC;IACjB,GAAG,CAAC,MAAM,EAAE;AACd;AAeA,SAASC,cAAY,CAAC,EACpB,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,OAAO,EACW,EAAA;AAClB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC1C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAM,IAAI,CAAC;IAElC,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAErB,QAAA,MAAM,CAAC,GAAGC,MAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAc,UAAU,CAAC;AAElE,QAAA,MAAM,OAAO,GACX,SAAS,KAAK;cACVC,MAAQ;cACR,SAAS,KAAK;kBACZC,MAAQ;kBACRC,KAAO,EAAE;AAEjB,QAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAEzC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAU,KAAI;AACrC,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC;gBACb;YACF;AAEA,YAAA,IAAI,MAAwB;AAC5B,YAAA,IAAI,MAAwB;AAE5B,YAAA,IAAI,SAAS,KAAK,GAAG,EAAE;gBACrB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,SAA6B;gBACtD,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxD;AAAO,iBAAA,IAAI,SAAS,KAAK,GAAG,EAAE;gBAC5B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,SAA6B;gBACtD,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrD,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD;iBAAO;AACL,gBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAiD;gBACxF,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD;YAEA,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACnC,QAAA,CAAC,CAAC;AAEF,QAAA,CAAC,CAAC,IAAI,CAAC,OAAc,CAAC;AACtB,QAAA,QAAQ,CAAC,OAAO,GAAG,OAAO;;AAG1B,QAAA,CAAC,CAAC,MAAM,CAAC,YAAY;AAClB,aAAA,IAAI,CAAC,MAAM,EAAE,WAAW;AACxB,aAAA,IAAI,CAAC,cAAc,EAAE,IAAI;AACzB,aAAA,IAAI,CAAC,QAAQ,EAAE,WAAW;AAC1B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE1B,QAAA,OAAO,MAAK;AACV,YAAA,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;AAC7B,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACzB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;;AAEP,YAAA,aAAa,EAAE;AAChB,SAAA,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,SAAS,EAAC,SAAS,EAAE,aAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,GAAG,EAAA,CAAI,CAC3E;AAEV;AAEA;AAEA,MAAM,aAAa,GAAG,UAAU,CAC9B,SAAS,aAAa,CAAC,KAAK,EAAE,GAAG,EAAA;;AAC/B,IAAA,MAAM,EACJ,SAAS,EACT,WAAW,EACX,IAAI,EACJ,SAAS,EACT,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAEhB,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,YAAY,EACZ,OAAO,EACP,OAAO,EACP,aAAa,GAAG,GAAG,EACnB,SAAS,EACT,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EAGT,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,QAAQ,GAAG,IAAI,EACf,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,GAAG,KAAK;AAET,IAAA,MAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQP,gBAAc,CAAA,EAAK,UAAU,CAAE;;IAGnD,IAAI,gBAAgB,EAAE;QACpB,MAAM,YAAY,GAAG,EAAE;QACvB,IAAI,gBAAgB,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,YAAY;AAAE,YAAA,MAAM,CAAC,GAAG,GAAG,YAAY;QAChF,IAAI,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY;AAAE,YAAA,MAAM,CAAC,MAAM,GAAG,YAAY;QACzF,IAAI,gBAAgB,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,YAAY;AAAE,YAAA,MAAM,CAAC,IAAI,GAAG,YAAY;QACnF,IAAI,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,GAAG,YAAY;AAAE,YAAA,MAAM,CAAC,KAAK,GAAG,YAAY;IACxF;AAEA,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AAC1D,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;;IAG3D,MAAM,wBAAwB,GAAG,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,MAAA,GAAf,eAAe,GAAI,WAAW;;AAI/D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC;AACjD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACxB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IAC9B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;;IAGzD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC;;AAG7E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAC/C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC;;IAGpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAG7C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IACpE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;;IAIpE,MAAM,WAAW,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;;AAIhD,IAAA,MAAM,WAAW,GAAG,WAAW,KAAK,WAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;AAEpG,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAAuB;QACpD,SAAS;QACT,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;QAClD,UAAU;QACV,UAAU;QACV,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO;QAChD,aAAa;QACb,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;QAC9C,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;QAC9C,YAAY,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS;QACpD,aAAa;QACb,aAAa;QACb,YAAY;QACZ,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,OAAO;QACP,OAAO;QACP,SAAS;QACT,OAAO;QACP,SAAS;QACT,cAAc;QACd,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,aAAa;QACb,gBAAgB;QAChB,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,WAAW;QACX,SAAS;QACT,WAAW;QACX,KAAK;QACL,KAAK;QACL,UAAU;QACV,SAAS;QACT,kBAAkB;QAClB,YAAY;QACZ;AACD,KAAA,CAAC,EAAE;AACF,QAAA,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa;AAC7D,QAAA,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa;AACjD,QAAA,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB;QAC5D,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;AACjE,QAAA,cAAc,EAAE,WAAW;AAC3B,QAAA,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB;QACxE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW;AACjF,QAAA,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS;QACnC,kBAAkB,EAAE,YAAY,EAAE,YAAY;QAC9C;AACD,KAAA,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAuB,IAAI,CAAC;AACnD,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,QAAQ,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC;IACtD;;AAIA,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;QACtC,IAAI,MAAM,CAAC,OAAO;YAAE;AACpB,QAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IACrE,CAAC,EAAE,EAAE,CAAC;;;IAIN,SAAS,CAAC,MAAK;;QACb,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAC,cAAc,CAAC;AAC9C,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;;AAIpC,IAAA,MAAM,UAAU,GAAG,MAAM,CAA2B,IAAI,CAAC;AACzD,IAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QACvB,UAAU,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,CAAC,SAAS,KAAI;AACvD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,KAAK;gBAAE;YACZ,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,IAAI,WAAW,EAAE;AACf,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;YAClB;AACF,QAAA,CAAC,CAAC;IACJ;;AAIA,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,KAA0B,KAAI;;QAC3D,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAA2B,KAAI;;QACjE,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,IAAI,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAChC,QAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AAC3B,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AACzB,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA,CAAA;AAChD,QAAA,SAAS,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAA,CAAA,CAAA;AACjD,QAAA,UAAU,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,UAAU,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAA,CAAA;KACzD,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;;IAI1C,SAAS,CAAC,MAAK;;AACb,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,cAAc,CAAC,IAAI,CAAC;AAC1C,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;;IAIV,MAAM,eAAe,GAAG,MAAM,CAAgC,MAAK,EAAE,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;AAElD,IAAA,eAAe,CAAC,OAAO,GAAG,CAAC,CAAmB,KAAI;AAChD,QAAA,IAAI,CAAC,wBAAwB;YAAE;AAE/B,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAClD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;AAEhD,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,aAAa,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,cAAc,EAAE;AACjF,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,aAAa,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,mBAAmB;oBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;;AAGxC,QAAA,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QACxD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,aAAa,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,mBAAmB;oBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAc;YACvB,IAAI,EAAE,GAAG,CAAC,KAAK;YACf,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,CAAC;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC;SACR;AAED,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;QACxB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,mBAAmB;YAAE,mBAAmB,CAAC,KAAK,CAAC;AACnD,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,aAAa,CAAC,OAAO,GAAG,MAAK;AAC3B,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;YACvB,aAAa,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,mBAAmB;gBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,YAAA,cAAc,EAAE;QAClB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAmB,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EACnD,EAAE,CACH;AACD,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,MAAM,aAAa,CAAC,OAAO,EAAE,EAC7B,EAAE,CACH;;AAID,IAAA,WAAW,CAAC,OAAO,GAAG,MAAK;;AACzB,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC;AAClB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;;QAG/E,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC;;QAGpD,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACtE;;AAGA,QAAA,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC;QAC5E,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC5B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACpC,QAAA,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;QACnB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;QACtC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1D,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC;;AAGxC,QAAA,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;QACnD,MAAM,cAAc,GAAG,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC;YAC1D,CAAC,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,cAAc;QAE/C,IAAI,cAAc,EAAE;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAChD;;QAGA,IAAI,UAAU,EAAE;AACd,YAAA,GAAG,CAAC,SAAS,GAAG,UAAU;YAC1B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC;QACnD;;AAGA,QAAA,MAAM,SAAS,GAAGD,WAAS,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;AAC7B,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,QAAQ,CACN,GAAG,EACH,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CACjD;YACH;QACF;;QAGA,IAAI,cAAc,EAAE;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;QACrB;;QAGA,IAAI,wBAAwB,IAAI,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;AAChE,YAAA,MAAM,MAAM,GACV,OAAO,wBAAwB,KAAK,QAAQ,GAAG,wBAAwB,GAAG,EAAE;AAC9E,YAAA,aAAa,CACX,GAAG,EACH,QAAQ,CAAC,OAAO,EAChB,aAAa,EACb,cAAc,EACd,MAAM,EACN,SAAS,EACT,KAAK,CACN;QACH;AAEA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;AACjC,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;AAGxB,QAAA,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AAC5B,YAAA,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;;YAG9B,IAAI,gBAAgB,EAAE;AACpB,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;AAC/B,gBAAA,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK;AAChC,sBAAE;AACF,sBAAE,CAAC,CAAsB,KAAK,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;AACnD,gBAAA,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK;AAChC,sBAAE;AACF,sBAAE,CAAC,CAAsB,KAAK,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;AACnD,gBAAA,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAkB,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9G,gBAAA,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAkB,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAChH;QACF;;AAGA,QAAA,IAAI,QAAQ,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,EAAE;YAC3E,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC;;QAGA,IAAI,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,EAAE;AACxB,YAAA,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;QAC9B;;AAGA,QAAA,IAAI,eAAe,IAAI,KAAK,CAAC,eAAe,EAAE;AAC5C,YAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QACrE;AACF,IAAA,CAAC;;IAID,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,EAAE;AAChB,QAAA,OAAO,MAAK;YACV,IAAI,MAAM,CAAC,OAAO;AAAE,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;;IAGpB,SAAS,CAAC,MAAK;AACb,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;IAG/F,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;AAChB,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAChC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC;gBAAE;YAC1C,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAC/E,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,SAAS;AACtD,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,UAAU,CAAC,KAAK,CAAC;AACjB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;YAClB;QACF,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC;IACtC,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;;AAIxC,IAAA,MAAM,eAAe,GAAG,wBAAwB,IAAI;WAC/C,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAC,cAAc,EAAA,EAAC,KAAK,EAAE,UAAU,GAAI;UACpF,IAAI;AAER,IAAA,MAAM,cAAc,GAAG,eAAe,IACpC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,UAAW,CAAC,CAAC;AACjC,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,UAAW,CAAC,CAAC;AAC/B,YAAA,SAAS,EAAE,CAAA,UAAA,EACT,UAAW,CAAC,CAAC,GAAG,aAAa,GAAG,GAAG,GAAG,oBAAoB,GAAG,MAC/D,CAAA,EAAA,EACE,UAAW,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,GAAG,KAAK,GAAG,mBACjD,CAAA,CAAA,CAAG;AACH,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,MAAM,EAAE;AACT,SAAA,EAAA,EAEA,eAAe,CACZ,IACJ,IAAI;;AAIR,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,eAAA,EAAkB,SAAS,GAAG,IAAI,SAAS,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EAC/D,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC;SACf,EACD,WAAW,EAAE,wBAAwB,GAAG,WAAW,GAAG,SAAS,EAC/D,YAAY,EAAE,wBAAwB,GAAG,YAAY,GAAG,SAAS,EAAA;AAEhE,QAAA,kBAAkB,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACf,gBAAA,aAAa,EAAE;aAChB,EAAA,EAEA,kBAAkB,CACf,CACP;AACD,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,GAAG,EAAE;aACN,EAAA,CACD;QACF,KAAA,CAAA,aAAA,CAAC,UAAU,IACT,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,IAAI,cAAc,EAClC,OAAO,EAAE,OAAO,IAAI,eAAe,EACnC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAAA,CAChC;AACD,QAAA,CAAC,KAAK,IAAI,OAAO,MAChB,KAAA,CAAA,aAAA,CAACI,cAAY,EAAA,EACX,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAA,EAAA,GAAA,KAAK,aAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,EACnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,cAAP,OAAO,IAAK,MAAK,EAAE,CAAC,CAAC,GAC9B,CACH;AACA,QAAA,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,MACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACH,QAAQ,EAAE,UAAU,EAAA,GAChB,SAAS,CAAC,aAAa,KAAK,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAC9D,gBAAA,SAAS,CAAC,aAAa,KAAK,aAAa,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,SAAS,CAAC,aAAa,KAAK,cAAc,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;wBACpE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAC,EAAA,EACvB,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,GAAG,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,EAAE,OAAO,EAAA,CAAA,EAAA,EAGf,OAAO,GAAG,OAAO,GAAG,MAAM,CACvB,CACP;QACA,cAAc,CACX;AAEV,CAAC;AAGH,aAAa,CAAC,WAAW,GAAG,eAAe;;ACj2BrC,SAAU,aAAa,CAAC,GAAwB,EAAE,MAAqB,EAAA;AAC3E,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,GAAG;IAC1E,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;AAC5C,IAAA,MAAM,YAAY,GAAG,UAAU,KAAK,YAAY;AAChD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;IAElC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;;AAExC,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4D;AAClF,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;AAC9B,YAAA,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;AACtB,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;;QAGA,IAAI,QAAQ,GAAG,CAAC;QAChB,IAAI,SAAS,EAAE;AACb,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;gBAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE;QAEA,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC;QAEjB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;;AAEtC,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK;AACrB,YAAA,IAAI,SAAS,IAAI,QAAQ,GAAG,CAAC;AAAE,gBAAA,GAAG,GAAG,GAAG,GAAG,QAAQ;;YAGnD,MAAM,KAAK,GAAG;kBACV,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ;AAC7C,kBAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;;AAEhD,YAAA,MAAM,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACT,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,EAClB,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAC7B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EACjC,QAAQ,EAAE,GAAG,CAAC,IAAI,GACnB;YAED,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,OAAO,GAAG,GAAG,IAAI;AACrB,sBAAE,MAAM,CAAC,SAAS,GAAG,GAAG;AACxB,sBAAE,MAAM,CAAC,SAAS,CAAC;AACrB,gBAAA,MAAM,OAAO,GAAG,GAAG,IAAI;sBACnB,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG;AAC5C,sBAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;AAE/C,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAC5C,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAC1B,CAAC;gBAEF,IAAI,GAAG,IAAI,CAAC;oBAAE,SAAS,IAAI,GAAG;;oBACzB,SAAS,IAAI,GAAG;YACvB;iBAAO,IAAI,YAAY,EAAE;AACvB,gBAAA,MAAM,OAAO,GAAG,GAAG,IAAI;AACrB,sBAAE,MAAM,CAAC,SAAS;AAClB,sBAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;AAC3B,gBAAA,MAAM,OAAO,GAAG,GAAG,IAAI;sBACnB,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS;AAC5C,sBAAE,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;AAE/C,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,EAC5C,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAC1B,CAAC;gBAEF,IAAI,GAAG,IAAI,CAAC;oBAAE,SAAS,IAAI,GAAG;;oBACzB,SAAS,IAAI,GAAG;YACvB;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,oBAAoB,CAAC,GAAwB,EAAE,MAAqB,EAAA;AAClF,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,GAAG;IAClE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;;IAG5C,MAAM,SAAS,GAAa,EAAE;AAC9B,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU;YAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACjB,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB;QACF;IACF;AACA,IAAA,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,UAAU;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC;AACxD,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B;AAEA,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAClD,YAAA,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;gBAE5C,IAAI,UAAU,EAAE;oBACd,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ;AAClC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAC7D,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CACxB,CAAC;gBACJ;qBAAO;oBACL,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ;AAClC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,QAAQ,EAC7D,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CACxB,CAAC;gBACJ;YACF;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;AC5IM,SAAU,eAAe,CAAC,GAAwB,EAAE,MAAqB,EAAA;;AAC7E,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,GAAG;IACrE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;AAC5C,IAAA,MAAM,QAAQ,GAAG,UAAU,KAAK,QAAQ;AACxC,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAE3C,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;IACzB,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;YAC7B,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC,CAAC;AACjC,YAAA,MAAM,KAAK,GAAG,YAAY,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,MAAM;YACrE,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAI,KAAa,CAAC,CAAC,IAAI,CAAC;YAE/B,IAAI,EAAU,EAAE,EAAU;YAE1B,IAAI,QAAQ,EAAE;;AAEZ,gBAAA,MAAM,QAAQ,GAAG,gBAAgB,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK;AACxE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;gBACzB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM;gBAChC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM;YAClC;iBAAO,IAAI,UAAU,EAAE;AACrB,gBAAA,EAAE,GAAG,GAAG,CAAC,MAAM;AACf,gBAAA,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;YACjB;iBAAO;AACL,gBAAA,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;AACf,gBAAA,EAAE,GAAG,GAAG,CAAC,MAAM;YACjB;YAEA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACjE;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,eAAe,CAAC,GAAwB,EAAE,MAAqB,EAAA;IAC7E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,GAAG;IACxD,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;IAE5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;;AAExC,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAI,KAAa,CAAC,CAAC,IAAI,CAAC;;YAG/B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,SAAS,GAAG,GAAG;AAEjE,YAAA,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AACzD,YAAA,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM;YAEzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACjE;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;ACpEM,SAAU,aAAa,CAAC,GAAwB,EAAE,MAAqB,EAAA;IAC3E,MAAM,EAAU,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG;IAC1D,MAAM,KAAK,GAAqB,EAAE;;;IAGlC,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;AACZ,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,IAAI,CAAC;;IAEjF,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG;AAElF,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;IAEzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACxC,MAAM,UAAU,GAAG,gBAAgB,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK;AAC1D,QAAA,MAAM,QAAQ,GAAG,gBAAgB,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK;AACpE,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;QAE3D,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,EAAE;YACN,WAAW;YACX,WAAW;YACX,UAAU;YACV,QAAQ;YACR,KAAK;YACL,KAAK,EAAE,GAAG,CAAC,SAAS;YACpB,QAAQ,EAAE,GAAG,CAAC;AACf,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,KAAK;AACd;;AC1BM,SAAU,iBAAiB,CAAC,GAAwB,EAAE,MAAqB,EAAA;;AAC/E,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,GAAG;IAClE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;AAC5C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,KAAK;IAElD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC;aAChB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChB,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AAEzB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,CAAA,EAAA,GAAAK,QAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC1C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAAA,QAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACzD,MAAM,EAAE,GAAG,CAAA,EAAA,GAAAA,QAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;;AAG1C,QAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,QAAA,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG;AACjC,QAAA,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG;AACjC,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAC3D,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAE1E,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;QAE7D,MAAM,QAAQ,GAAiC,EAAE;QACjD,IAAI,YAAY,EAAE;AAChB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE;AACpC,oBAAA,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9C,oBAAA,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM;AAC9C,oBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC/C;YACF;QACF;QAEA,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,SAAS;YACf,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM;YAC9B,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY;AAClD,YAAA,WAAW,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG;AAC5B,YAAA,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;AAC1B,YAAA,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACjB,YAAA,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;AACzB,YAAA,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACjB,YAAA,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;AAC1B,YAAA,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE;YAC3D,KAAK;YACL,KAAK,EAAE,GAAG,CAAC,SAAS;YACpB,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB;AACmB,SAAA,CAAC;;QAGtB,IAAI,YAAY,EAAE;AAChB,YAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;gBACxB,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,OAAO;oBACb,CAAC,EAAE,CAAC,CAAC,EAAE;oBACP,CAAC,EAAE,CAAC,CAAC,EAAE;AACP,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;oBACnD,KAAK,EAAE,CAAC,CAAC;AACV,iBAAA,CAAC;YACJ;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,gBAAgB,CAAC,GAAwB,EAAE,MAAqB,EAAA;;AAC9E,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,GAAG;IAClE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;AAC5C,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;AAC9B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK;IAExC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC;aAChB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChB,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC;;AAG1C,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AACjE,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE;QACf;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;;QAGvC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG;QACrC,IAAI,OAAO,GAAG,EAAE;QAEhB,IAAI,UAAU,EAAE;;AAEd,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS;AAC5C,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA,EAAA,EAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,GAAG,CAAA,GAAA,EAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;YAC/E;;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS;gBAC5C,OAAO,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;YACxC;YACA,OAAO,IAAI,IAAI;QACjB;aAAO;;AAEL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS;AAC5C,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,GAAG,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;YAC/E;;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS;gBAC5C,OAAO,IAAI,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;YACxC;YACA,OAAO,IAAI,IAAI;QACjB;AAEA,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;;AAG7D,QAAA,IAAI,OAAmC;QACvC,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACjC,MAAM,EAAE,GAAG,CAAA,EAAA,GAAAA,QAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAC3C,YAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAAA,QAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;YAC3D,MAAM,EAAE,GAAG,CAAA,EAAA,GAAAA,QAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAC3C,YAAA,OAAO,GAAG;AACR,gBAAA,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACjB,gBAAA,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;AACzB,gBAAA,KAAK,EAAE,MAAM,CAAC,EAAE;aACjB;QACH;QAEA,MAAM,YAAY,GAAG;cACjB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;cACpH,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE;QAE1H,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,YAAY;YACpB,OAAO;YACP,KAAK;YACL,KAAK,EAAE,GAAG,CAAC,SAAS;YACpB,QAAQ,EAAE,GAAG,CAAC;AACI,SAAA,CAAC;IACvB;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,mBAAmB,CAAC,GAAwB,EAAE,MAAqB,EAAA;AACjF,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,GAAG;AAClE,IAAA,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAC5B,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;AACjC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;;IAGnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC;aAChB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChB,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAChC,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC;AAE7C,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE;QACf;AAEA,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;AAEvC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAE7D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE;YAErB,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ;;YAEvE,MAAM,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG;;YAGxC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;AAC5C,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;;YAGrC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI;YAElC,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EACb,KAAK,EACL,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EACzG,GAAG,CAAC,IAAI,CACT,CAAC;QACJ;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,mBAAmB,CAAC,GAAwB,EAAE,MAAqB,EAAA;;AACjF,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,GAAG;IAClE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;AACjC,IAAA,MAAM,YAAY,GAAG,UAAU,KAAK,YAAY;;AAEhD,IAAA,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,IAAI,GAAG;IAElD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC;aAChB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChB,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC;;AAG7C,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE;QACf;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;AAEvC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAC7D,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS;;QAGtC,IAAI,OAAO,GAAG,EAAE;QAEhB,IAAI,YAAY,EAAE;;;YAGhB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK;;YAGlC,OAAO,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;;AAEzC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ;gBAC3C,OAAO,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,QAAQ,GAAG,CAAC,EAAE;YACtC;;YAEA,OAAO,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,CAAI;QAC/C;aAAO;;;AAGL,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC;YAEtB,OAAO,GAAG,KAAK,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,CAAA,CAAE;AACzC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC7C,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ;gBAC3C,OAAO,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;YACtC;YACA,OAAO,IAAI,MAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI;QAC/C;QAEA,MAAM,WAAW,GAAG;cAChB,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK;cACpH,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;QAE1H,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,WAAW;YACnB,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,CAAA,EAAA,EAAE,WAAW,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG,EAAA,CAAE;YAC1D,KAAK,EAAE,GAAG,CAAC,SAAS;YACpB,QAAQ,EAAE,GAAG,CAAC;AACI,SAAA,CAAC;IACvB;AAEA,IAAA,OAAO,KAAK;AACd;;AChUM,SAAU,kBAAkB,CAAC,GAAwB,EAAE,MAAqB,EAAA;IAChF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,GAAG;IAC/D,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;IACxC,MAAM,KAAK,GAAuB,EAAE;AACpC,IAAA,MAAM,YAAY,GAAG,UAAU,KAAK,YAAY;IAEhD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;YAC1B,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;YAE5C,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,EAC7B,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CACnB,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CACtB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAC7B,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CACnB,CAAC;YACJ;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;SCjCgB,eAAe,CAC7B,GAAwB,EACxB,UAA8B,EAC9B,MAAqB,EAAA;IAErB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,GAAG;AAClD,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IACvC,MAAM,UAAU,GAAyB,EAAE;AAC3C,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;;AAG7B,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoE;AAE1F,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE;AACnD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,IAAI,EAAU,EAAE,EAAU;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,EAAE,GAAG,IAAI,CAAC,CAAC;AACX,YAAA,EAAE,GAAG,IAAI,CAAC,CAAC;QACb;aAAO;;YAEL,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACxB,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,UAAU,KAAK,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvE;;IAGA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE;AACjC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc;IAE9C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE;AAClC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE;;AAGvB,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEhF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,YAAA,MAAM,KAAK,GAAU,OAAO,gBAAgB,KAAK;AAC/C,kBAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK;AAC7B,mBAAG,gBAAgB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAE1E,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,IAAI,CAAC,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,CAAC;gBACV,EAAE,EAAE,EAAE,CAAC,CAAC;gBACR,EAAE,EAAE,EAAE,CAAC,CAAC;gBACR,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,OAAO,UAAU;AACnB;;ACjDA,MAAM,cAAc,GAAmC;AACrD,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,UAAU,EAAE,oBAAoB;AAChC,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,KAAK,EAAE,aAAa;AACpB,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,SAAS,EAAE,mBAAmB;AAC9B,IAAA,SAAS,EAAE,mBAAmB;AAC9B,IAAA,QAAQ,EAAE,kBAAkB;CAC7B;AAED;MAEa,oBAAoB,CAAA;AAuC/B,IAAA,WAAA,CAAY,MAA6B,EAAA;AArCjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,iBAAiB,EAAE;;QAEjC,IAAA,CAAA,QAAQ,GAAwB,EAAE;;QAMlC,IAAA,CAAA,UAAU,GAA2B,EAAE;;AAOvC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAU;;QAE9B,IAAA,CAAA,eAAe,GAA+B,IAAI;QAClD,IAAA,CAAA,iBAAiB,GAAG,CAAC;;QAGrB,IAAA,CAAA,eAAe,GAA8B,IAAI;;QAGzD,IAAA,CAAA,gBAAgB,GAAmD,IAAI;AAC/D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAwE;;QAGzG,IAAA,CAAA,cAAc,GAAG,CAAC;QAElB,IAAA,CAAA,MAAM,GAAyB,IAAI;;QAEnC,IAAA,CAAA,WAAW,GAAoC,EAAE;QACjD,IAAA,CAAA,KAAK,GAAuB,EAAE;QAC9B,IAAA,CAAA,OAAO,GAAkC,EAAE;QAC3C,IAAA,CAAA,OAAO,GAAG,CAAC;AAGT,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;;AAG/C,QAAA,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAC/B,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB,EAC3C,UAAU,CACW;AAEvB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,WAAW;;AAGtD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS;AAC7B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAId,iBAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACzD;aAAO;AACL,YAAA,IAAI,WAAW,KAAK,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,IAAI,GAAGA,iBAAe,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,OAAO,CAAC;YACpE;iBAAO;gBACL,IAAI,CAAC,IAAI,GAAGA,iBAAe,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C;YACA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC;QAEA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAEnE,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,eAAe,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAC1D;IACF;;AAIA,IAAA,MAAM,CAAC,SAAoB,EAAA;QACzB,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AAEzB,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACvB,IAAI,IAAI,CAAC,eAAe;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAEtD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM;YAClE,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9B,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AACtE,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;gBACzC;YACF;AAEA,YAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,eAAe;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACzB;QACF;aAAO;;AAEL,YAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,eAAe;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAEvB,gBAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBAChC;YACF;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CAAC,CAAM,EAAA;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B;QACF;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;AAErC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C;;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC;IACF;AAEQ,IAAA,gBAAgB,CAAC,CAAM,EAAA;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B;QACF;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC;IACF;;AAGQ,IAAA,WAAW,CAAC,CAAM,EAAA;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AACjC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QACrB,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,GAAI,GAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAa,CAAC;AAClF,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/C,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC;AACA,QAAA,OAAO,IAAI;IACb;;AAIA,IAAA,YAAY,CAAC,MAAqB,EAAA;AAChC,QAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;AAC/B,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE;YACd;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;QAC7C;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;AAC7B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU;;AAGlD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;QAG9D,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC;;AAGtD,QAAA,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU;AAC5C,QAAA,MAAM,YAAY,GAAG,UAAU,KAAK,YAAY;AAChD,QAAA,MAAM,QAAQ,GAAG,UAAU,KAAK,QAAQ;AAExC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG;AAEjH,QAAA,IAAI,MAAyB;AAC7B,QAAA,IAAI,MAAmC;QAEvC,IAAI,QAAQ,EAAE;;YAEZ,MAAM,GAAG,SAAS,EAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AACtD,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC;AACtC,YAAA,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9D;aAAO,IAAI,YAAY,EAAE;YACvB,MAAM,GAAG,SAAS,EAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACvF,YAAA,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE;aAAO;;YAEL,MAAM,GAAG,SAAS,EAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACtF,YAAA,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE;;AAGlD,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5B,IAAI,GAAG,CAAC,KAAK;AAAE,oBAAA,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC3C,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM;AAC3B,gBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;oBAAE,GAAG,GAAG,CAAC;oBAAE,GAAG,GAAG,CAAC;gBAAC;AACzC,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI;AACxC,gBAAA,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG;AACvB,gBAAA,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;gBAC1C,GAAG,IAAI,MAAM;gBACb,GAAG,IAAI,MAAM;gBACb,IAAI,GAAG,GAAG,CAAC;oBAAE,GAAG,GAAG,CAAC;AAEpB,gBAAA,IAAI,YAAY;oBAAE,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClF,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnE,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACvB;;QAGA,IAAI,YAAY,GAAG,IAAI;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChC,CAAC,CAAA,EAAA,EACJ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAChB,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAA,CAAA,CAC1C,CAAC,CACJ;QACH;;AAGA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC;;AAGnF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,IAAI,CAAC,iBAAiB,EAAE;QAC1B;;QAGA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC;;AAGvD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC3D,IAAI,CAAC,eAAe,EAAE;QACxB;QAEA,IAAI,CAAC,OAAO,EAAE;IAChB;AAEQ,IAAA,oBAAoB,CAAC,KAAa,EAAA;AACxC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AACvG,QAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,CAAA,KAAA,EAAQ,KAAK,EAAE;IACxD;;AAIQ,IAAA,iBAAiB,CAAC,IAA2B,EAAA;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;;;AAI9B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE;AACjE,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,IAAI,KAAK,KAAK;AAAE,YAAA,OAAO,IAAI;AAE/B,QAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB;;AAGA,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB;AACtC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D;AAEA,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE;;AAGA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE;;IAIQ,kBAAkB,CAAC,IAA2B,EAAE,OAAiB,EAAA;;AACvE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;;;AAI7C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,KAAK,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,CAAC,EAAE;AACzF,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACf;QAEA,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,GAAG,GAAG,CAAC;QAEX,IAAI,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAExC,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AAEzC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,gBAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBACjD;qBAAO;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBACjD;YACF;AAEA,YAAA,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC;AACtD,YAAA,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC;QACxD;AAAO,aAAA,IAAI,SAAS,KAAK,KAAK,EAAE;;;AAG9B,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AACzC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YACjD;YACA,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;gBAChC,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC;gBACpB,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC;YACtB;QACF;AAAO,aAAA,IAAI,SAAS,KAAK,YAAY,EAAE;;AAErC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB,IAAI,GAAG,GAAG,GAAG;oBAAE,GAAG,GAAG,GAAG;gBACxB,IAAI,GAAG,GAAG,GAAG;oBAAE,GAAG,GAAG,GAAG;YAC1B;QACF;aAAO;;YAEL,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,QAAQ;gBAAE,GAAG,GAAG,OAAO;YACvC,IAAI,OAAO,KAAK,CAAC,QAAQ;gBAAE,GAAG,GAAG,OAAO;QAC1C;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACvB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;gBAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;gBAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE;;AAGA,QAAA,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG;AACvB,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;QAC7C,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,CAAA;YAAE,GAAG,IAAI,SAAS;QAC/C,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,CAAA;YAAE,GAAG,IAAI,SAAS;;QAG/C,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,YAAY,EAAE;YACrD,IAAI,GAAG,GAAG,CAAC;gBAAE,GAAG,GAAG,CAAC;YACpB,IAAI,GAAG,GAAG,CAAC;gBAAE,GAAG,GAAG,CAAC;QACtB;AAEA,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB;;IAIQ,YAAY,CAClB,IAA2B,EAC3B,OAAiB,EACjB,MAAyB,EACzB,UAAkB,EAClB,MAAqB,EAAA;;QAErB,MAAM,OAAO,GAAkC,EAAE;;AAGjD,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC;AACxD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B;;QAGA,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,gBAAA,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC;QACF;;AAGA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB;QAC1C,IAAI,aAAa,GAA+B,IAAI;AACpD,QAAA,IAAI,GAAG,IAAI,UAAU,KAAK,QAAQ,EAAE;AAClC,YAAA,aAAa,GAAG,IAAI,GAAG,EAAE;YACzB,IAAI,UAAU,GAAG,CAAC;AAClB,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBACzB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,gBAAA,IAAI,QAAgB;AACpB,gBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,oBAAA,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrE;qBAAO;AACL,oBAAA,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC3B;AACA,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAChC,UAAU,IAAI,QAAQ;YACxB;;AAEA,YAAA,MAAM,cAAc,GAAG,UAAU,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK;AACjF,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM;AACtE,YAAA,MAAM,WAAW,GAAG,cAAc,GAAG,YAAY;AACjD,YAAA,IAAI,UAAU,GAAG,CAAC,EAAE;gBAClB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,aAAa,EAAE;AACtC,oBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,UAAU,IAAI,WAAW,CAAC;gBAC1D;YACF;QACF;QAEA,IAAI,aAAa,GAAG,CAAC;QACrB,IAAI,WAAW,GAAG,CAAC;AAEnB,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC;AAE1C,YAAA,IAAI,SAAiB;AACrB,YAAA,IAAI,SAAiB;YACrB,IAAI,aAAa,EAAE;gBACjB,SAAS,GAAG,WAAW;AACvB,gBAAA,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE;AACxD,gBAAA,WAAW,IAAI,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/D;iBAAO;gBACL,SAAS,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAC5B,gBAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE;YAChC;YAEA,OAAO,CAAC,GAAG,CAAC,GAAG;AACb,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,CAAC;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE;gBACzC,SAAS;gBACT,GAAG;AACH,gBAAA,QAAQ,EAAE;aACX;YAED,aAAa,IAAI,GAAG;QACtB;AAEA,QAAA,OAAO,OAAO;IAChB;;IAIQ,eAAe,GAAA;QACrB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAO;YACpB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,iBAAiB,EAAE,CAAC,CAAM,EAAE,QAAiB,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC;AACrF,YAAA,mBAAmB,EAAE,CAAC,CAAM,EAAE,QAAiB,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC;YACzF,WAAW,EAAE,CAAC,CAAM,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;SAC5C;IACH;IAEQ,eAAe,CAAC,IAA2B,EAAE,MAAqB,EAAA;QACxE,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAE3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;QAClC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACrD,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;;QAG/C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;YACpC,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,EAAE,KAAa,CAAC;;YAE1D,KAAK,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,CAAC;QACvC;AAEA,QAAA,OAAO,KAAK;IACd;;IAIQ,iBAAiB,CAAC,CAAM,EAAE,QAAiB,EAAA;QACjD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;YAChD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC5C;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE;AACxE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAA8B;QACnD;QACA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,EAAE;AACrC,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE;QAC/D;;QAEA,IAAI,QAAQ,EAAE;YACZ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QACpD;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;IAC5B;AAEQ,IAAA,kBAAkB,CAAC,GAAW,EAAA;QACpC,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9C,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;AACnD,cAAE,IAAI,CAAC,MAAM,CAAC;cACZ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAClH,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9D,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACpC,QAAA,OAAO,KAAK;IACd;IAEQ,mBAAmB,CAAC,CAAM,EAAE,QAAiB,EAAA;QACnD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC9C;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE;AAC5E,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAgC;QACrD;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE;IACjF;;IAIA,mBAAmB,CAAC,WAAmB,EAAE,UAAkB,EAAA;;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC;QAEvC,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC1C,QAAA,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW;AAExC,QAAA,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,QAAQ,EAAE;gBACb,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,UAAU,GAAG,CAAC,CAAC;gBACpC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC1C;YACA,KAAK,aAAa,EAAE;gBAClB,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,GAAG,CAAC;AACjD,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC;gBACvC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC1C;YACA,KAAK,MAAM,EAAE;gBACX,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,GAAG,GAAG;gBACzD,OAAO,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU;YACzC;AACA,YAAA;AACE,gBAAA,OAAO,CAAC;;IAEd;IAEQ,UAAU,CAAC,KAAyB,EAAE,IAA2B,EAAA;;AACvE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;QAC9B,IAAI,UAAU,IAAI,CAAC;YAAE;AAErB,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE;YAC7G,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI;gBAAE;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC;YAC9D,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAC1C,YAAA,IAAY,CAAC,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAS,IAAY,CAAC,KAAK,CAAA,EAAA,EAAE,OAAO,EAAE,WAAW,GAAG,YAAY,GAAE;QACxF;IACF;;IAIQ,UAAU,CAAC,KAAyB,EAAE,IAA2B,EAAA;;QACvE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;QACjD,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAClD,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,uBAAuB;AAErE,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE;YAC7G,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI;gBAAE;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAChD,IAAI,UAAU,IAAI,IAAI;gBAAE;AACxB,YAAA,MAAM,GAAG,GAAG,GAAG,GAAG,UAAU;AAC5B,YAAA,IAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,gBAAA,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ;AAClC,gBAAA,IAAY,CAAC,eAAe,GAAG,SAAS;AACxC,gBAAA,IAAY,CAAC,WAAW,GAAG,UAAU;YACzC;QACF;IACF;AAEA,IAAA,IAAI,eAAe,GAAA;;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAChG,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC1C,OAAO,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,QAAQ;IACpD;;IAIQ,iBAAiB,GAAA;;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACzE;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E;QACF;IACF;IAEQ,eAAe,GAAA;;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;YAAE;AAChE,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAEvD,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAkB,IAAI;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,GAAG,GAAG,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE;YAChB;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,GAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,EAAE;YAC5D;AACA,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,UAAU,GAAG,IAAI;gBACnB;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;AACpF,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI;gBACnB;YACF;QACF;QAEA,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,gBAAgB,GAAG;AACtB,gBAAA,SAAS,EAAE,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC9E;aACD;QACH;IACF;AAEA,IAAA,iBAAiB,CAAC,GAAW,EAAA;;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;QAExC,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClE,QAAA,MAAM,CAAC,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAK;AAC3C,cAAE;AACF,cAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAE7B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE;AACjC,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAA,EAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;YACjD;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE;AACjC,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,EAAE;gBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,gBAAA,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,EAAE;AACxB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,QAAS,GAAG,IAAI,CAAC,CAAE,IAAI,CAAC;gBACnD;YACF;QACF;AAEA,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;wBAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;gBAC3B;AAAO,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;wBAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAS;AACvB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;gBAC3B;YACF;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;IAIA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAC9B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;QACvB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IACzB;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA,IAAA,YAAY,CAAC,MAAsC,EAAA;QACjD,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAClD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;QAC5B;QACA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IACpC;AACD;;AC30BK,SAAU,sBAAsB,CACpC,KAAyB,EACzB,EAAU,EACV,EAAU,EACV,WAAA,GAAsB,EAAE,EAAA;IAExB,IAAI,IAAI,GAA4B,IAAI;AAExC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,MAAM,GAA4B,IAAI;AAE1C,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,MAAM;gBACT,MAAM,GAAGE,aAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC;AACF,YAAA,KAAK,OAAO;gBACV,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACnC;AACF,YAAA,KAAK,OAAO;gBACV,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACnC;AACF,YAAA,KAAK,SAAS;gBACZ,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACrC;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACpC;;QAGJ,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,WAAW,EAAE;YAC3C,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC5C,IAAI,GAAG,MAAM;YACf;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAASA,aAAW,CAAC,IAAmB,EAAE,EAAU,EAAE,EAAU,EAAA;AAC9D,IAAA,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;QAClF,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACtB,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,YAAA,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,IAAI,CAAC;SAChB;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,YAAY,CAAC,IAAoB,EAAE,EAAU,EAAE,EAAU,EAAA;AAChE,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChC,IAAA,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,YAAA,QAAQ,EAAE;SACX;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,YAAY,CAAC,IAAoB,EAAE,EAAU,EAAE,EAAU,EAAA;;AAEhE,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;IAGzC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;AAAE,QAAA,OAAO,IAAI;;;IAInE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;;AAGnC,IAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3C,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC;AAAE,QAAA,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;;AAG/B,IAAA,MAAM,KAAK,GAAG,KAAK,IAAI;AACrB,UAAE,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;UAC3B,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAElC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;;AAGvB,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC;AACtD,IAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;IAC3D,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,QAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC3C,QAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC3C,QAAA,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,IAAI,CAAC;KAChB;AACH;AAEA,SAAS,cAAc,CAAC,IAAsB,EAAE,EAAU,EAAE,EAAU,EAAA;AACpE,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AAEtC,IAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AAEjD,QAAA,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,MAAM,EAAE;YAC1D,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,SAAS;AACjB,gBAAA,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC;aAChB;QACH;IACF;SAAO;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AAEhD,QAAA,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,MAAM,EAAE;YAC1D,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,CAAC,EAAE,IAAI,CAAC,SAAS;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,gBAAA,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC;aAChB;QACH;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CAAC,IAAqB,EAAE,EAAU,EAAE,EAAU,EAAA;IAClE,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAE7B,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM;IAE3C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE;;QAE7D,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC;AAChB,YAAA,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC;AACjB,YAAA,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,IAAI,CAAC;SAChB;IACH;AAEA,IAAA,OAAO,IAAI;AACb;;AC9HA,SAAS,cAAc,CAAC,KAAc,EAAA;AACpC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;AACd,QAAA,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAC5B,cAAc,IAAI,KAAK;AAE3B;AAEA,SAAS,cAAc,CAAC,CAAS,EAAA;AAC/B,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1C;AAEM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;AAC7D,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACT,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,UAAU,MAAK,QAAQ;AAChD,IAAA,MAAM,YAAY,GAAG,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,UAAU,MAAK,YAAY;;AAGxD,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,QAAQ;AAAE,YAAA,OAAO,EAAE;QAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,IAAG;;AAAC,YAAA,QAAC;AACnC,gBAAA,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC;AACtD,gBAAA,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG;AACjC,aAAA;AAAC,QAAA,CAAA,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAGzC,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,QAAQ;AAAE,YAAA,OAAO,EAAE;AAC/C,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;AACjC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,KAAK,EAAE,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;AACrC,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAGzC,IAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAK;QACvC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB;AAAE,YAAA,OAAO,IAAI;AAChF,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,KACjB,kBAAkB,CAAC,UAAU,EAAE,CAAC,EAAE;YAChC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI;AAC3D,YAAA,QAAQ,EAAE,GAAG;YACb,KAAK;YACL;AACD,SAAA,CAAC;aAEH,MAAM,CAAC,OAAO,CAAC;;AAEpB,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,kBAAkB,KAAK,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ;AACvJ,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,IAAI;IAE5B,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,aAAa,EAAE;AAChB,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,EAAA;YAEpD,QAAQ,IAAI,MAAM,IAAI,CAAC,QAAQ,KAC9B,2BAAG,SAAS,EAAC,cAAc,EAAA,EACxB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACtB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,KAAA,EAAQ,CAAC,EAAE,EAChB,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EACjC,EAAE,EAAE,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EACjC,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,EACrC,EAAE,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,EACtC,MAAM,EAAC,SAAS,EAChB,WAAW,EAAE,CAAC,EAAA,CACd,CACH,CAAC,CACA,CACL;AAGA,YAAA,QAAQ,IAAI,MAAM,IAAI,CAAC,QAAQ,KAC9B,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,cAAc,EAAA,EACxB,YAAY,IACX,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBAGE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBACtE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACzB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG,EAAA;AACzD,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC9C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,KAAK,EAChB,gBAAgB,EAAC,QAAQ,EACzB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;gBACD,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EACpB,CAAC,EAAE,MAAM,GAAG,CAAC,EACb,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,CAAA,YAAA,EAAe,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA,EAAA,EAAK,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG,EAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR;gBAGD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBAC/E,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACtB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,EAAA;oBACjE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC7C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;AACD,gBAAA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,KAAK,GAAG,CAAC,EACZ,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR,CACA,KAEH,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBAGE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBAC/E,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACzB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,EAAA;oBACjE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC7C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;AACD,gBAAA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,KAAK,GAAG,CAAC,EACZ,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR;gBAGD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;gBACtE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACtB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG,EAAA;AACzD,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,EAAC,WAAW,EAAE,CAAC,EAAA,CAAI;AAC9C,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,KAAK,EAChB,gBAAgB,EAAC,QAAQ,EACzB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC;gBACD,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EACpB,CAAC,EAAE,MAAM,GAAG,CAAC,EACb,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,CAAA,YAAA,EAAe,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA,EAAA,EAAK,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG,EAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,MAAM,CACF,CACR,CACA,CACJ,CACC,CACL;YAGA,mBAAmB;YAGnB,kBAAkB;AAElB,YAAA,QAAQ,CACP;QAGH,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,UAAU,GAAG,CAAC,EACjB,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAC,MAAM,EACjB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAE5B,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CACpC,CACR;QAGA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA,EAAA,EAAK,MAAM,CAAC,GAAG,GAAG,EAAA,EACxE,cAAc,CAAC,MAAM;AACpB,cAAE,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAC,EAAE,EAAC,KAAK,EAAE,GAAG,EAAA;AAChE,cAAG,MAAoB,CACvB,CACL,CACG;AAEV;;AC/TO,MAAM,mBAAmB,GAAG,CACjC,GAA6B,EAC7B,KAAyB,EACzB,OAAsB,EACtB,OAAsB,KACd;AACR,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA0B,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAE/E,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,GAAG,CAAC,SAAS,EAAE;AAEf,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;;YAExB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;QACnF;aAAO;;YAEL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC7E;QAEA,GAAG,CAAC,SAAS,EAAE;AAEf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI;YAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;AACpE,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;YAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;QAE5E,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;QAC5C,GAAG,CAAC,IAAI,EAAE;AAEV,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;YAC3C,GAAG,CAAC,MAAM,EAAE;QACd;AAEA,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;IACrB;AACF,CAAC;;ACrCM,MAAM,qBAAqB,GAAG,CACnC,GAA6B,EAC7B,KAAyB,EACzB,OAAsB,EACtB,OAAsB,KACd;;AACR,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AAEjF,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,UAAU;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAEnE,GAAG,CAAC,IAAI,EAAE;;AAGV,QAAA,GAAG,CAAC,WAAW,GAAG,WAAW;AAC7B,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;QACzB,GAAG,CAAC,SAAS,EAAE;QACf,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QACjC;aAAO;YACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACjC;QACA,GAAG,CAAC,MAAM,EAAE;;QAGZ,GAAG,CAAC,SAAS,EAAE;QACf,IAAI,MAAM,EAAE;AACV,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QACnD;aAAO;AACL,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;QACnD;QACA,GAAG,CAAC,MAAM,EAAE;;AAGZ,QAAA,GAAG,CAAC,WAAW,GAAG,OAAO;AACzB,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;QACzB,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC/C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AAChE,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,YAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;QACpE;aAAO;AACL,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAChD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,YAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;AACjE,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,YAAA,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;QACrE;;AAGA,QAAA,GAAG,CAAC,WAAW,GAAG,MAAM;AACxB,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;QACjB,GAAG,CAAC,SAAS,EAAE;QACf,IAAI,MAAM,EAAE;AACV,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;AAC9C,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;QAChD;aAAO;AACL,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;AAC9C,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;QAChD;QACA,GAAG,CAAC,MAAM,EAAE;QAEZ,GAAG,CAAC,OAAO,EAAE;IACf;AACF,CAAC;;AC/EM,MAAM,oBAAoB,GAAG,CAClC,GAA6B,EAC7B,KAAyB,EACzB,OAAsB,EACtB,OAAsB,KACd;;AACR,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA2B,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAElF,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC9B,GAAG,CAAC,IAAI,EAAE;QAEV,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;YACtC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QACjD;;QAGA,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAExC,QAAA,GAAG,CAAC,WAAW,GAAG,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QACrE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;AAC5C,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAEd,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC3C,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,GAAG,CAAC,WAAW,GAAG,MAAM;AACxB,YAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,YAAA,GAAG,CAAC,WAAW,GAAG,GAAG;;YAGrB,GAAG,CAAC,SAAS,EAAE;;;YAGf,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjC,GAAG,CAAC,MAAM,EAAE;;YAGZ,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACrD,YAAA,GAAG,CAAC,SAAS,GAAG,MAAM;YACtB,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,GAAG,CAAC,WAAW,GAAG,MAAM;AACxB,YAAA,GAAG,CAAC,SAAS,GAAG,CAAC;YACjB,GAAG,CAAC,MAAM,EAAE;AAEZ,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;QACrB;QAEA,GAAG,CAAC,OAAO,EAAE;IACf;AACF,CAAC;;ACzDM,MAAM,uBAAuB,GAAG,CACrC,GAA6B,EAC7B,KAAyB,EACzB,OAAsB,EACtB,OAAsB,KACd;;AACR,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAA8B,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;AAC3F,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE;;AAGjC,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgC;AACtD,IAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,MAAM,EAAE;AACjC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;QAE3B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;QACpC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM;;QAG7D,IAAI,OAAO,EAAE;YACX,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC1B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5B;YACA,GAAG,CAAC,SAAS,EAAE;AAEf,YAAA,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,MAAA,UAAU,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACrE,YAAA,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,IAAK;YAChC,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;QACrB;;AAGA,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AAE5B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM;YAChE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;YAC3C,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;YAC3C,GAAG,CAAC,MAAM,EAAE;AACZ,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;QACrB;IACF;AACF,CAAC;;ACjBD;AAEA;AACA;AACA,MAAM,cAAc,GAAG,CAAC,SAA8B,KACpD,CAAC,uBAA8B,EAAE,GAAG,SAAS,CAAC;AAEhD,MAAM,SAAS,GAAkD;AAC/D,IAAA,GAAG,EAAE,cAAc,CAAC,CAAC,iBAAwB,CAAC,CAAC;AAC/C,IAAA,UAAU,EAAE,cAAc,CAAC,CAAC,iBAAwB,CAAC,CAAC;AACtD,IAAA,KAAK,EAAE,cAAc,CAAC,CAAC,mBAA0B,CAAC,CAAC;AACnD,IAAA,KAAK,EAAE,cAAc,CAAC,CAAC,mBAA0B,CAAC,CAAC;IACnD,GAAG,EAAE,CAAC,mBAA0B,CAAC;IACjC,KAAK,EAAE,CAAC,mBAA0B,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC,CAAC,qBAA4B,EAAE,mBAA0B,CAAC,CAAC;AACnF,IAAA,MAAM,EAAE,cAAc,CAAC,CAAC,oBAA2B,CAAC,CAAC;AACrD,IAAA,SAAS,EAAE,cAAc,CAAC,CAAC,iBAAwB,CAAC,CAAC;AACrD,IAAA,SAAS,EAAE,cAAc,CAAC,CAAC,oBAA2B,CAAC,CAAC;AACxD,IAAA,QAAQ,EAAE,cAAc,CAAC,CAAC,iBAAwB,CAAC;CACpD;AAED;AAEA,MAAMI,gBAAc,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAEnE;AAEA,MAAME,qBAAmB,GAAwB;AAC/C,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,+BAA+B;AAC1C,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,UAAU,EAAE;CACb;AAED,SAAS,qBAAqB,CAAC,EAAE,KAAK,EAAwB,EAAA;;AAC5D,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;;AAG1B,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,QAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,EAAE;AACrC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM;QAClB,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AACzD,YAAA,QAAQ,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO;AACzE,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;gBAAM,CAAC;AAAa,gBAAA,QAAA,CAAA,CAChB;IAEV;;AAGA,IAAA,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;AACpC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC3B,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AACzD,YAAA,CAAC,CAAC,QAAQ,IAAI,6BAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAO;AAC7E,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;gBAAa,CAAC,CAAC,KAAK,CAAO;AAC1B,YAAA,KAAK,CAAC,MAAM,KAAK,CAAC,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;AAAK,gBAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACxD,CACP,CACG;IAEV;;AAGA,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE;AACnE,IAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;;AAGlD,IAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CACtC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAC5C;QACD,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA,EACzD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,CAAC,EAAA;AACT,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;gBAAG,CAAC;AAAS,gBAAA,GAAA,CAAA;YAAC,GAAG;YAC7C,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CACnD,CACP,CAAC,CACE;IAEV;IAEA,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AACzD,QAAA,QAAQ,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO;QACxE,KAAK,KAAK,EAAE,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAM,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAO,CAC5F;AAEV;AAEA;AAEA,MAAM,kBAAkB,GAAG,UAAU,CACnC,SAAS,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAA;AACpC,IAAA,MAAM,EACJ,SAAS,EACT,WAAW,EACX,IAAI,EACJ,SAAS,GAAG,UAAU,EACtB,SAAS,GAAG,OAAO,EACnB,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,GAAG,UAAU,EACvB,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,UAAU,EAClB,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,KAAK,EAEL,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GAAG,IAAI,EACf,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,GAAG,IAAI,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,QAAQ,GAAG,KAAK,EAChB,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,KAAK,EACL,KAAK,EACL,UAAU,EACV,SAAS,EACV,GAAG,KAAK;;AAIT,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAMF,gBAAc,CAAA,EAAK,UAAU,CAAA,CAAG,EAAE,CAAC,UAAU,CAAC,CAAC;AAClF,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AAC1D,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;;AAI3D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC;AACjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AAC7B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAS,CAAC,CAAC;AAChC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;;IAIhD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC;IAC9E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAI7C,IAAA,MAAM,wBAAwB,GAAG,WAAW,IAAI,eAAe;;AAI/D,IAAA,MAAM,WAAW,GAAG,WAAW,KAAK,WAAW;AAE/C,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAA8B;QAC3D,SAAS;QACT,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;QAClD,UAAU;QACV,UAAU;QACV,aAAa;QACb,UAAU;QACV,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;QAC9C,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;QAC9C,aAAa;QACb,OAAO;QACP,OAAO;QACP,SAAS;QACT,YAAY,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS;AACpD,QAAA,aAAa,EAAE,WAAW,IAAI,aAAa,KAAK,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,IAAI,SAAS;AACtJ,QAAA,gBAAgB,EAAE,WAAW,IAAI,gBAAgB,IAAI,SAAS,IAAI,SAAS;QAC3E,OAAO;QACP,OAAO;QACP,UAAU;QACV,WAAW;QACX,SAAS;QACT,UAAU;QACV,kBAAkB;QAClB,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,SAAS;QACT,iBAAiB;QACjB,cAAc;QACd,KAAK;QACL,UAAU;QACV,YAAY;QACZ,WAAW;QACX,SAAS;QACT,KAAK;QACL,KAAK;QACL,UAAU;QACV;AACD,KAAA,CAAC,EAAE;AACF,QAAA,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU;QAC5D,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS;QAChE,YAAY,EAAE,aAAa,EAAE,gBAAgB;QAC7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU;QAChE,kBAAkB;QAClB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK;AAChF,QAAA,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS;AAChD,QAAA,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS;QACnC;AACD,KAAA,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA8B,IAAI,CAAC;AAC1D,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,QAAQ,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,cAAc,CAAC;IAC7D;;AAIA,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;QACtC,IAAI,MAAM,CAAC,OAAO;YAAE;AACpB,QAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IACrE,CAAC,EAAE,EAAE,CAAC;;IAGN,SAAS,CAAC,MAAK;;QACb,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAC,cAAc,CAAC;AAC9C,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;;AAIpC,IAAA,MAAM,UAAU,GAAG,MAAM,CAA2B,IAAI,CAAC;AACzD,IAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QACvB,UAAU,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,CAAC,SAAS,KAAI;AACvD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,KAAK;gBAAE;YACZ,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,IAAI,WAAW,EAAE;AACf,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;YAClB;AACF,QAAA,CAAC,CAAC;IACJ;;AAIA,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,KAA0B,KAAI;;QAC3D,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAA2B,KAAI;;QACjE,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,IAAI,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAChC,QAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AAC3B,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AACzB,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA,CAAA;AAChD,QAAA,SAAS,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAA,CAAA;KAClD,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;;IAI1C,SAAS,CAAC,MAAK;;AACb,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,cAAc,CAAC,IAAI,CAAC;AAC1C,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;;IAIV,MAAM,eAAe,GAAG,MAAM,CAAgC,MAAK,EAAE,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;AAElD,IAAA,eAAe,CAAC,OAAO,GAAG,CAAC,CAAmB,KAAI;AAChD,QAAA,IAAI,CAAC,wBAAwB;YAAE;AAE/B,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAClD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;AAEhD,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,aAAa,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,cAAc,EAAE;AACjF,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,aAAa,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,mBAAmB;oBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;;;AAIxC,QAAA,MAAM,YAAY,GAAG,UAAU,KAAK,QAAQ;AAC5C,QAAA,MAAM,IAAI,GAAG,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,CAAC,GAAG,MAAM;AAC/D,QAAA,MAAM,IAAI,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,CAAC,GAAG,MAAM;AAEhE,QAAA,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,aAAa,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,mBAAmB;oBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAc;YACvB,IAAI,EAAE,GAAG,CAAC,KAAK;YACf,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,CAAC;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC;SACR;AAED,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;QACxB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,mBAAmB;YAAE,mBAAmB,CAAC,KAAK,CAAC;AACnD,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,aAAa,CAAC,OAAO,GAAG,MAAK;AAC3B,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;YACvB,aAAa,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,mBAAmB;gBAAE,mBAAmB,CAAC,IAAI,CAAC;AAClD,YAAA,cAAc,EAAE;QAClB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAmB,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EACnD,EAAE,CACH;AACD,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,MAAM,aAAa,CAAC,OAAO,EAAE,EAC7B,EAAE,CACH;;AAID,IAAA,WAAW,CAAC,OAAO,GAAG,MAAK;;AACzB,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC;AAClB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;;QAG/E,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAEpD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;AACjC,QAAA,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE;AAChC,YAAA,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AACpE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;QAC1B;;AAGA,QAAA,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC;QAC5E,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC5B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACpC,QAAA,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;;AAGnB,QAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;;AAGrC,QAAA,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;QACnD,MAAM,cAAc,GAAG,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC;YAC1D,CAAC,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,cAAc;QAE/C,IAAI,cAAc,EAAE;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;QAChD;;QAGA,IAAI,UAAU,EAAE;AACd,YAAA,GAAG,CAAC,SAAS,GAAG,UAAU;AAC1B,YAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC;AAEA,QAAA,MAAM,QAAQ,GAAG,UAAU,KAAK,QAAQ;QAExC,IAAI,QAAQ,EAAE;;YAEZ,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC;QACjF;aAAO;YACL,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;QACxC;;QAGA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAkB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE;AAE9E,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,KAAY,EAAE,KAAK,CAAC,MAAa,EAAE,MAAM,CAAC;QAChE;QAEA,IAAI,QAAQ,EAAE;YACZ,GAAG,CAAC,OAAO,EAAE;QACf;;QAGA,IAAI,cAAc,EAAE;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;QACrB;;AAGA,QAAA,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AAC5B,YAAA,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9B,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC;;QAGA,IAAI,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,EAAE;AACxB,YAAA,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;QAC9B;;AAGA,QAAA,IAAI,eAAe,IAAI,KAAK,CAAC,eAAe,EAAE;AAC5C,YAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QACrE;AACF,IAAA,CAAC;;IAID,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,EAAE;AAChB,QAAA,OAAO,MAAK;YACV,IAAI,MAAM,CAAC,OAAO;AAAE,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IAEpB,SAAS,CAAC,MAAK;AACb,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;;IAGpF,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;AAChB,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAChC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC;gBAAE;YAC1C,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAC/E,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,SAAS;AACtD,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,UAAU,CAAC,KAAK,CAAC;AACjB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;YAClB;QACF,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC;IACtC,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;;AAIxC,IAAA,MAAM,eAAe,GAAG,wBAAwB,IAAI;WAC/C,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAC,qBAAqB,EAAA,EAAC,KAAK,EAAE,UAAU,GAAI;UAC3F,IAAI;;;AAIR,IAAA,MAAM,YAAY,GAAG,UAAU,KAAK,QAAQ;IAC5C,MAAM,QAAQ,GAAG;AACf,WAAG,YAAY,GAAG,UAAU,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;UAC/D,CAAC;IACL,MAAM,QAAQ,GAAG;AACf,WAAG,YAAY,GAAG,UAAU,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;UAChE,CAAC;AAEL,IAAA,MAAM,cAAc,GAAG,eAAe,IACpC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,QAAQ;AAC5B,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,QAAQ;AAC1B,YAAA,SAAS,EAAE,CAAA,UAAA,EACT,QAAQ,GAAG,aAAa,GAAG,GAAG,GAAG,oBAAoB,GAAG,MAC1D,CAAA,EAAA,EACE,QAAQ,GAAG,cAAc,GAAG,GAAG,GAAG,KAAK,GAAG,mBAC5C,CAAA,CAAA,CAAG;AACH,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,MAAM,EAAE;AACT,SAAA,EAAA,EAEA,eAAe,CACZ,IACJ,IAAI;;AAIR,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,oBAAA,EAAuB,SAAS,GAAG,IAAI,SAAS,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EACpE,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC;SACf,EACD,WAAW,EAAE,wBAAwB,GAAG,WAAW,GAAG,SAAS,EAC/D,YAAY,EAAE,wBAAwB,GAAG,YAAY,GAAG,SAAS,EAAA;AAEhE,QAAA,kBAAkB,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACf,gBAAA,aAAa,EAAE;AAChB,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,EAAA,EACpD,kBAAkB,CACjB,CACA,CACP;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,CAAC;aACf,EAAA,CACD;AAEF,QAAA,KAAA,CAAA,aAAA,CAAC,iBAAiB,EAAA,EAChB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAAA,CAChC;QAGD,aAAa,IAAI,UAAU,KAAK,QAAQ,KACvC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC;AACrC,gBAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC;AACpC,gBAAA,SAAS,EAAE,uBAAuB;AAClC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,SAAS,EAAE;aACZ,EAAA,EAEA,aAAa,CACV,CACP;AAEA,QAAA,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,SAAS,MACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACH,QAAQ,EAAE,UAAU,EAAA,GAChB,SAAS,CAAC,aAAa,KAAK,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAC9D,gBAAA,SAAS,CAAC,aAAa,KAAK,aAAa,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,SAAS,CAAC,aAAa,KAAK,cAAc,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;wBACpE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAC,EAAA,EACvB,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,GAAG,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,EAAE,OAAO,EAAA,CAAA,EAAA,EAGf,OAAO,GAAG,OAAO,GAAG,MAAM,CACvB,CACP;QACA,cAAc,CACX;AAEV,CAAC;AAGH,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;ACpqB9C,MAAM,sBAAsB,GAAkB;AACnD,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,kBAAkB,EAAE;CACrB;AAsFM,MAAM,sBAAsB,GAE/B;AACF,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,SAAS,EAAE;CACZ;;ACjHD;;;;;AAKG;MACU,YAAY,CAAA;AAIvB,IAAA,WAAA,CAAY,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AAClB,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,CAAC,EAAE;aACJ;QACH;IACF;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,SAAiB,EAAA;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;AACb,gBAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AACf,gBAAA,CAAC,CAAC,CAAC,GAAG,CAAC;gBACP,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAA;AAC9B,gBAAA,CAAC,CAAC,SAAS,GAAG,SAAS;AACvB,gBAAA,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,gBAAA,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,gBAAA,OAAO,CAAC;YACV;QACF;QACA,OAAO,IAAI,CAAA;IACb;AAEA;;;AAGG;AACH,IAAA,IAAI,CAAC,SAAiB,EAAE,KAAa,EAAE,KAAqB,EAAA;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE;YAEf,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAA,CAAC,CAAC,MAAM,GAAG,KAAK;gBAChB;YACF;;AAGA,YAAA,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,KAAK;AAExB,YAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACZ,gBAAA,CAAC,CAAC,MAAM,GAAG,KAAK;gBAChB;YACF;;AAGA,YAAA,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACtD,YAAA,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACb;IACF;;AAGA,IAAA,YAAY,CAAC,SAAiB,EAAA;QAC5B,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE;AACzE,gBAAA,KAAK,EAAE;YACT;QACF;AACA,QAAA,OAAO,KAAK;IACd;;IAGA,KAAK,GAAA;AACH,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK;QAClC;IACF;;AAGA,IAAA,MAAM,CAAC,WAAmB,EAAA;AACxB,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ;YAAE;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE;gBAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACrC;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AAClB,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,CAAC,EAAE;iBACJ;YACH;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC7B;AACD;AAED;;;;;;AAMG;AACH,SAAS,cAAc,CACrB,KAAkB,EAClB,CAAS,EACT,MAAc,EAAA;IAEd,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpC,QAAA,OAAO,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACzE;IAEA,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAExC,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM;AACrC,IAAA,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;IAG1C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACtB,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAExC,IAAA,IAAI,GAAG,GAAG,KAAK,EAAE;;AAEf,QAAA,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG;AACpB,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG;AACnB,QAAA,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;AAC1C,QAAA,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;IAC5C;AAEA,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;AACH,SAAS,oBAAoB,CAC3B,QAAqE,EACrE,CAAS,EACT,MAAc,EACd,SAAiB,EAAA;AAEjB,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM;AACzB,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC;AACrB,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACrD,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,QAAQ;AAEjC,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAC3C,IAAA,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;;IAG/C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACtB,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAExC,IAAA,IAAI,GAAG,GAAG,KAAK,EAAE;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG;AACpB,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG;QACnB,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC;QACpC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC;IACtC;AAEA,IAAA,OAAO,GAAG;AACZ;AAEA;AACA,SAAS,WAAW,CAClB,EAAe,EACf,EAAe,EACf,EAAe,EACf,EAAe,EACf,CAAS,EAAA;AAET,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE;AACpB,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IAEjB,OAAO;AACL,QAAA,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACnE,QAAA,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;KACnE;AACH;;AC5MA,MAAM,kBAAkB,GACtB,CAAC,MAAM,GAAG,CAAC,KACX,CAAC,CAAC,EAAE,CAAC,KAAI;IACP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,IAAA,IACE,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EACrD;AACA,QAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACX;AACA,IAAA,OAAO,CAAC;AACV,CAAC;AAEH,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,gBAAgB,GAAG,IAAI,EAAE;IAC/B,IAAI,UAAU,GAAG,UAAU,CAAC,EAAA;QAC1B,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IACD,IAAI,UAAU,GAAG,UAAU,CAAC,EAAA;QAC1B,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IACD,IAAI,UAAU,GAAG,UAAU,CAAC,EAAA;QAC1B,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IACD,IAAI,aAAa,GAAG,iBAAiB;IAErC,SAAS,OAAO,CAAC,QAAQ,EAAA;AACvB,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,MAAM,UAAU,GAAG,UAAU;YAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEzE,YAAA,UAAU,GAAG,MAAM,aAAa;YAEhC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEhD,IAAI,aAAa,GAAG;iBACjB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS;AACvC,iBAAA,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC;YAEnC,MAAM,UAAU,GAAG,EAAE;YAErB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,QAAQ,KAAI;AAClD,gBAAA,UAAU,GAAG,MAAM,WAAW,CAAC,MAAM;AACrC,gBAAA,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;AAChD,gBAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAEnD,IAAI,WAAW,EAAE;oBACf,MAAM,eAAe,GAAG;AACrB,yBAAA,OAAO;yBACP,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,MAAM;AACpC,yBAAA,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC;AAEnC,oBAAA,UAAU,GAAG,MAAM,WAAW,CAAC,MAAM;AAErC,oBAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,eAAe,CAAC;AAC3D,oBAAA,aAAa,GAAG;AACb,yBAAA,OAAO;yBACP,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,MAAM;AACpC,yBAAA,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC;gBACrC;AACF,YAAA,CAAC,CAAC;YAEF,UAAU,GAAG,UAAU;AACvB,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KACtB,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACrE;QACH;AACA,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC;AAEzE,QAAA,OAAO,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CACtE,UAAU,CACX;IACH;AAEA,IAAA,OAAO,CAAC,CAAC,GAAG,UAAU,MAAM,EAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,UAAU;QAExC,UAAU,GAAG,MAAM;AACnB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,CAAC,GAAG,UAAU,MAAM,EAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,UAAU;QAExC,UAAU,GAAG,MAAM;AACnB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,CAAC,GAAG,UAAU,MAAM,EAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,UAAU;QAExC,UAAU,GAAG,MAAM;AACnB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,WAAW,GAAG,UAAU,MAAM,EAAA;QACpC,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,aAAa;QAE3C,aAAa,GAAG,MAAM;AACtB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,OAAO;IAEd,SAAS,UAAU,CAAC,CAAC,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAEzD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG;QACrC,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG;QAErC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACzE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACzE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACzE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAEzE,QAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3C;IAEA,SAAS,WAAW,CAAC,MAAM,EAAA;QACzB,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,IAAI,iBAAiB,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AAEtD,QAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,iBAAiB,GAAG,UAAU,CAAC;AAC7B,oBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjB,oBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC;AACrB,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE,GAAG;oBACT,CAAC,EAAE,iBAAiB,CAAC,EAAE;oBACvB,CAAC,EAAE,iBAAiB,CAAC,EAAE;AACvB,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,MAAM,EAAE,GAAG;oBACT,CAAC,EAAE,iBAAiB,CAAC,EAAE;oBACvB,CAAC,EAAE,iBAAiB,CAAC,EAAE;AACvB,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACxD,oBAAA,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACpD,MAAM,SAAS,GAAG,aAAa,CAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,CACV;AACD,oBAAA,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE;wBAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;oBACzB;gBACF;YACF;AAEA,YAAA,CAAC,EAAE;QACL;AACA,QAAA,CAAC,EAAE;;AAEH,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,iBAAiB,GAAG,UAAU,CAAC;AAC7B,oBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjB,oBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC;AACrB,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE,GAAG;oBACT,CAAC,EAAE,iBAAiB,CAAC,EAAE;oBACvB,CAAC,EAAE,iBAAiB,CAAC,EAAE;AACvB,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,MAAM,EAAE,GAAG;oBACT,CAAC,EAAE,iBAAiB,CAAC,EAAE;oBACvB,CAAC,EAAE,iBAAiB,CAAC,EAAE;AACvB,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACxD,oBAAA,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACpD,MAAM,SAAS,GAAG,aAAa,CAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,CAAC,CAAC,CAAC,CACV;AACD,oBAAA,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE;wBAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;oBACzB;gBACF;YACF;AAEA,YAAA,CAAC,EAAE;QACL;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,SAAS,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAA;QACnE,IAAI,CAAC,EAAE,CAAC;AAER,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,KAAK,EAAE;SACR;QAED,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;AACvE,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,OAAO,MAAM;QACf;AACA,QAAA,CAAC,GAAG,IAAI,GAAG,IAAI;AACf,QAAA,CAAC,GAAG,IAAI,GAAG,IAAI;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AAChD,QAAA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AAChD,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC;AACV,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC;AAEV,QAAA,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;AACnC,QAAA,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;AAEnC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;QACrB;AAEA,QAAA,OAAO,MAAM;IACf;AACF;AAEA,MAAM,SAAS,GAAG,GAAG;AAwDd,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAI;AAC5B,IAAA,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAEtC,IAAA,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE;QAC1B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;QAC7B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;QAC7B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;QAC7B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;AAC7B,QAAA,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;AAChB,QAAA,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;AAChB,QAAA,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;AAC9B,QAAA,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;AAClB,QAAA,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;AAEtB,QAAA,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,GAAG;IAC5G;IACC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;AAChB,SAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;SAChB,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;AAC/B,SAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SAClB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;SACtB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;SAC7B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;SAC7B,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;AAC9B,SAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;AAEjC,IAAA,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,GAAG;AAC5G,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAI,EAAA;AACnC,IAAA,MAAM,aAAa,GAAG,YAAY,EAAE;AAEpC,IAAA,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,IAAA,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,IAAA,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAE3C,IAAA,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,KAAK;AACjB,UAAE;AACE,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB;AAC3C,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB;AAC3C,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B;AACF;AACH,UAAE;AACE,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc;AACvC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc;AACvC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,eAAe;AACxC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,eAAe;AACxC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1B;SACF;AAEP,IAAA,OAAO,aAAa,CAAC,SAAS,CAAC;AACjC;;ACxXA,MAAM,gBAAgB,GAAwB;AAC5C,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,OAAO,EAAE;CACV;AAED;;;;;AAKG;AACI,MAAM,kBAAkB,GAAwB;AACrD,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,YAAY,EAAE,KAAK;AAEnB,IAAA,aAAa,CACX,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAExB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO;AACtE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS;QAC5C,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;QACxC,MAAM,gBAAgB,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;QACxD,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;;AAG3C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,CAAA,CAAG,CAAC;AAChD,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChC,CAAC,CAAA,EAAA,EACJ,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAC7D,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAA,CAAA,CAC7D,CAAC;AAEH,QAAA,IAAI,WAAiD;AACrD,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C;aAAO;YACL,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,cAAc;aAC1B,MAAM,CAAC,WAAW;aAClB,KAAK,CAAC,WAAW;aACjB,KAAK,CAAC,WAAW;AACjB,aAAA,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,aAAa;aACnD,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE;aACvB,SAAS,CAAC,SAAS;aACnB,UAAU,CAAC,UAAU,CAAC;AAEzB,QAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,YAAA,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;QAC3C;;AAGA,QAAA,MAAM,EAAE;;AAGR,QAAA,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAClD,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,gBAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,gBAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,gBAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,gBAAA,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;AACzB,gBAAA,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;AACzB,gBAAA,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW;AACrC,gBAAA,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW;;gBAErC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;gBAC9B,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AAC/B,gBAAA,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,gBAAA,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;YAC1C;QACF;;AAGA,QAAA,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,MAAa;AAC5B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,MAAa;YAC5B,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;YAC/E,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;;YAG/E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;gBAChC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;gBAClE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;AAClE,gBAAA,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;AAC/C,YAAA,CAAC,CAAC;YAEF,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,EAAE,GAAI,EAAU,CAAC,EAAE;AAC5B,gBAAA,QAAQ,CAAC,EAAE,GAAI,EAAU,CAAC,EAAE;gBAC5B,QAAQ,CAAC,WAAW,GAAG,CAAA,EAAA,GAAC,EAAU,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;gBAC7C,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAE,EAAU,CAAC,QAAQ;AAC1C,gBAAA,QAAQ,CAAC,gBAAgB,GAAI,EAAU,CAAC,gBAAgB;AACxD,gBAAA,QAAQ,CAAC,SAAS,GAAG,SAAS;;AAG9B,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACpD,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACpD,gBAAA,IAAI,OAAO;AAAE,oBAAA,QAAQ,CAAC,MAAM,GAAG,OAAO;AACtC,gBAAA,IAAI,OAAO;AAAE,oBAAA,QAAQ,CAAC,MAAM,GAAG,OAAO;YACxC;QACF;IACF,CAAC;AAED,IAAA,UAAU,CACR,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;AAMtB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO;AACtE,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;QACpC,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC7C,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ;;QAGlD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;cAC5C,MAAM,CAAC;cACN,gBAAsC;AAC3C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrB,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,MAAM,UAAU,GAAsB,EAAE;QACxC,MAAM,UAAU,GAAwB,EAAE;QAC1C,MAAM,MAAM,GAAmB,EAAE;;AAGjC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE;AAEtB,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;AACnB,gBAAA,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,SAAS;gBAC9D,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,OAAO,EAAE,SAAS,CAAC;aACpB;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,MAAM;gBACZ,CAAC,EAAE,IAAI,CAAC,EAAE;gBACV,CAAC,EAAE,IAAI,CAAC,EAAE;gBACV,CAAC;gBACD,CAAC;gBACD,KAAK;AACL,gBAAA,KAAK,EAAE,IAAI;gBACX,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC;AACb,aAAA,CAAC;QACJ;;;AAIA,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CACtD;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC;gBAAE;AAEhD,YAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,YAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;gBAAE;;AAGhC,YAAA,IAAI,KAAa;YACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1C,gBAAA,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;YAChC;iBAAO;AACL,gBAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YACxB;;;YAIA,IAAI,IAAI,GAAG,MAAM;YACjB,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,gBAAA,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI;YAC/B;AAAO,iBAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,UAAU,EAAE;gBACjD,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;YAChD;iBAAO,IAAI,UAAU,EAAE;gBACrB,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;YAChD;AAEA,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;gBACnB,IAAI;AACJ,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,WAAW;AACjD,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;gBAClC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,OAAO,EAAE,SAAS,CAAC;aACpB;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,QAAQ;gBACd,KAAK;gBACL,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,KAAK;AACL,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;YAC/B,MAAM,OAAO,GAAGS,gBAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAEhD,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE;AAEtB,gBAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AAEX,gBAAA,IAAI,CAAS;AACb,gBAAA,IAAI,CAAS;AACb,gBAAA,IAAI,MAAuB;AAE3B,gBAAA,IAAI,SAAS,KAAK,MAAM,EAAE;oBACxB,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AACnB,oBAAA,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE;oBAChB,MAAM,GAAG,QAAe;gBAC1B;qBAAO;;oBAEL,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBACxB,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAC1B,wBAAA,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;wBACf,MAAM,GAAG,KAAK;oBAChB;yBAAO;AACL,wBAAA,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;wBACf,MAAM,GAAG,OAAO;oBAClB;oBACA,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;gBACrB;gBAEA,MAAM,CAAC,IAAI,CAAC;oBACV,CAAC;oBACD,CAAC;AACD,oBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;oBAClB,MAAM;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3C;CACD;AAED,SAASA,gBAAc,CACrB,SAAoD,EAAA;AAEpD,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAC3B,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,QAAA,OAAO,SAAS;AACrD,IAAA,OAAO,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;AACzC;;AClRA;;;;;;AAMG;AACI,MAAM,iBAAiB,GAAwB;AACpD,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,YAAY,EAAE,KAAK;AAEnB,IAAA,aAAa,CACX,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;;AAGxB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM;AAC9B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CACjC,EAAE,EACF,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CACtD;QAED,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB;QAC1D,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;;;;;;QAOjD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACtE,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE;AACjC,gBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW;AAC7B,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACnC;QACF;;AAGA,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAClC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,KAAK,CACN;QACD,MAAM,UAAU,GAAG,CAAC,CAAM,KAAK,UAAU,CAAC,CAAC,CAAC;;QAG5C,MAAM,SAAS,GAAG,SAAS;AACxB,aAAA,QAAQ,CAAC,CAAC,CAAM,KACf,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;aAEnE,EAAE,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC;;QAGvB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,eAAe;aAC/B,KAAK,CACJ,QAAQ,EACR,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAM,KAAK,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAE1D,aAAA,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;AACvD,aAAA,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEhD,QAAA,UAAU,CAAC,KAAK,CAAC,KAAY,CAAC;AAE9B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEpB,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC7B,CAAC,CAAA,EAAA,EACJ,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAC7D,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAA,CAAA,CAC7D,CAAC;AAEH,YAAA,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;YACjC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpD;;AAGA,QAAA,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE;AAC5B,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB;QAEA,UAAU,CAAC,IAAI,EAAE;;AAGjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;YACnC,UAAU,CAAC,IAAI,EAAE;QACnB;;;AAIA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;YACxB;AACA,YAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAM,IAAI,CAAC,MAAc,CAAC;AAC5D,gBAAA,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;YACxB;QACF;IACF,CAAC;AAED,IAAA,UAAU,CACR,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;AAMtB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;AACpC,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAClC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,KAAK,CACN;;QAGD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;cAC5C,MAAM,CAAC;cACN,gBAAsC;AAC3C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrB,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,MAAM,UAAU,GAAwB,EAAE;QAC1C,MAAM,UAAU,GAAsB,EAAE;QACxC,MAAM,MAAM,GAAmB,EAAE;;AAGjC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI;gBAAE;AAEtC,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;AACnB,gBAAA,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,SAAS;AAC9D,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;gBACvC,OAAO,EAAE,SAAS,CAAC;aACpB;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI,CAAC,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,CAAC;gBACV,CAAC;gBACD,KAAK;AACL,gBAAA,KAAK,EAAE,IAAI;gBACX,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC;AACb,aAAA,CAAC;QACJ;;AAGA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YAC9E,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC9E,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;gBAAE;YAChC,IAAI,UAAU,CAAC,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,CAAC,IAAI,IAAI;gBAAE;YAClD,IAAI,UAAU,CAAC,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,CAAC,IAAI,IAAI;gBAAE;AAElD,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;AACnB,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;AACvC,gBAAA,OAAO,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,mCAAI;aAC/B;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,UAAU,CAAC,CAAC;gBAChB,EAAE,EAAE,UAAU,CAAC,CAAC;gBAChB,EAAE,EAAE,UAAU,CAAC,CAAC;gBAChB,EAAE,EAAE,UAAU,CAAC,CAAC;gBAChB,KAAK;AACL,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;YAC/B,MAAM,OAAO,GAAGA,gBAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAEhD,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI;oBAAE;AAEtC,gBAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AAEX,gBAAA,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;gBAE1B,MAAM,CAAC,IAAI,CAAC;oBACV,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,oBAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACjB,oBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAClB,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3C;CACD;AAED;AAEA,SAAS,QAAQ,CACf,KAAqB,EACrB,EAAU,EAAA;AAEV,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AACvC;AAEA,SAASA,gBAAc,CACrB,SAAoD,EAAA;AAEpD,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAC3B,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,QAAA,OAAO,SAAS;AACrD,IAAA,OAAO,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;AACzC;AAEA;;;;;AAKG;AACH,SAAS,iBAAiB,CACxB,QAA4D,EAC5D,aAA2C,EAC3C,QAAwB,EAAA;;AAExB,IAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,QAAA,OAAO,MAAM,CAAC;IAChB;AAEA,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,QAAA,OAAO,MAAM,QAAQ;IACvB;AAEA,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,OAAO,CAAC,IAAkB,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD;;IAGA,MAAM,KAAK,GAAG,aAAa,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;;IAGtC,MAAM,MAAM,GAAG;AACZ,SAAA,GAAG,CAAC,CAAC,CAAC,eAAK,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,QAAQ,CAAC,CAAA,EAAA;AAC7B,SAAA,MAAM,CAAC,CAAC,CAAC,KAAkB,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AAEjE,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;IACvB;IAEA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IAClC,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;;AAGlC,IAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC;IAEA,MAAM,KAAK,GAAG,WAAW;AACtB,SAAA,MAAM,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,KAAK,CAAC,KAAK;SACX,KAAK,CAAC,IAAI,CAAC;IAEd,OAAO,CAAC,IAAkB,KAAI;;QAC5B,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,QAAQ,CAAC;AACjC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AAC3D,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,IAAA,CAAC;AACH;;AC7SA,MAAM,eAAe,GAAG,gBAAqC;AAE7D;;;;;AAKG;AACI,MAAM,iBAAiB,GAAwB;AACpD,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,YAAY,EAAE,KAAK;AAEnB,IAAA,aAAa,CACX,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAExB,QAAA,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,MAAM;AAE/D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAEtB,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC;;AAGlE,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B;;AAGA,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM;AACtB,QAAA,MAAM,MAAM,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MACnD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACnC;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YAChE,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YAEhE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;gBAAE;AAE1C,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC;YACnC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK;QACxB;;QAGA,MAAM,cAAc,GAAG,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjD,IAAI,UAAU,EAAE;AACd,YAAA,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AACrC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;;QAG5B,MAAM,YAAY,GAAG,GAAG;aACrB,WAAW,CAAC,WAAW;aACvB,WAAW,CAAC,MAAM,CAAC;;AAGtB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YAE7C,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE;YAGvB,IAAY,CAAC,OAAO,GAAG;gBACvB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,KAAK,CAAC;aACjB;QACH;;;;AAKA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YAC5E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5E,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC;AACjD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC;AACjD,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,OAAO;AAClC,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,OAAO;QACpC;;AAGA,QAAA,KAAK,MAAM,cAAc,IAAI,MAAM,EAAE;AACnC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACtD,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;;;YAItD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;gBACnC,MAAM,IAAI,GACR,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;gBACvD,MAAM,IAAI,GACR,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;gBACvD,QACE,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;qBACtC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAAC;AAE5C,YAAA,CAAC,CAAC;YAEF,IAAI,WAAW,EAAE;AACb,gBAAA,WAAmB,CAAC,SAAS,GAAG,cAAc;YAClD;QACF;IACF,CAAC;AAED,IAAA,UAAU,CACR,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;QAMtB,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,WAAW,GAAG,GAAG,EAAE,GAAG,MAAM;AAErD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAEtB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ;;QAGlD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;cAC5C,MAAM,CAAC;cACP,eAAe;;AAEnB,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrB,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,MAAM,EAAY,CAAC,MAAM,CAAC,WAAW,CAAC;QAE9D,MAAM,UAAU,GAAqB,EAAE;QACvC,MAAM,UAAU,GAAwB,EAAE;QAC1C,MAAM,MAAM,GAAmB,EAAE;;AAGjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,OAAO,GAAI,IAAY,CAAC,OAAO;AACrC,YAAA,IAAI,CAAC,OAAO;gBAAE;AAEd,YAAA,IAAI,IAAY;YAChB,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;gBACnC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACnF;iBAAO;AACL,gBAAA,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACjE;AAEA,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;gBACnB,IAAI;AACJ,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,OAAO;AACnC,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;gBACvC,OAAO,EAAE,SAAS,CAAC;aACpB;;;YAID,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,KAAK;gBACX,EAAE;gBACF,EAAE;AACF,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;gBAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;gBACxC,KAAK;AACL,gBAAA,KAAK,EAAE,IAAI;gBACX,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC;AACb,aAAA,CAAC;QACJ;;;;AAKA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,SAAS,GAAI,IAAY,CAAC,SAAS;AACzC,YAAA,IAAI,CAAC,SAAS;gBAAE;;AAGhB,YAAA,MAAM,WAAW,GAAG;AAClB,gBAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,SAAS,CAAC,MAAM,KAAE,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAA,CAAE;AACzI,gBAAA,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,SAAS,CAAC,MAAM,KAAE,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAA;aACxI;AACD,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO;gBAAE;YAEd,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;;;YAI/C,IAAI,IAAI,GAAG,MAAM;YACjB,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,gBAAA,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI;YAC/B;iBAAO;;AAEL,gBAAA,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACpE,gBAAA,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACpE,gBAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,OAAO,EAAE;oBACvC,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI;gBAC7C;qBAAO,IAAI,OAAO,EAAE;oBAClB,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI;gBAC7C;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,KAAK,GAAU;gBACnB,IAAI;AACJ,gBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,WAAW;AACjD,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;gBAClC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,OAAO,EAAE,SAAS,CAAC;aACpB;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,QAAQ;gBACd,KAAK;gBACL,KAAK;AACL,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;YAC/B,MAAM,OAAO,GAAGA,gBAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAChD,YAAA,MAAM,WAAW,GAAG,MAAM,GAAG,EAAE;AAE/B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,MAAM,OAAO,GAAI,IAAY,CAAC,OAAO;AACrC,gBAAA,IAAI,CAAC,OAAO;oBAAE;AAEd,gBAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,IAAI;oBAAE;AAEX,gBAAA,MAAM,QAAQ,GACZ,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC;;;gBAG7C,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AACpC,gBAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW;AAC7C,gBAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW;;AAG7C,gBAAA,MAAM,MAAM,GACV,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,OAAO;gBAEtC,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,CAAC,EAAE,EAAE;AACL,oBAAA,CAAC,EAAE,EAAE;AACL,oBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;oBAClB,MAAM;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3C;CACD;AAED,SAASA,gBAAc,CACrB,SAAoD,EAAA;AAEpD,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAC3B,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,QAAA,OAAO,SAAS;AACrD,IAAA,OAAO,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;AACzC;AAEA,SAAS,oBAAoB,CAC3B,aAAwD,EAAA;AAExD,IAAA,IAAI,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,CAAM,eAAK,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA;IACnD,IAAI,OAAO,aAAa,KAAK,UAAU;AAAE,QAAA,OAAO,aAAa;AAC7D,IAAA,OAAO,CAAC,CAAM,eAAK,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA;AAC1C;AAEA;;;;;;;AAOG;AACH,SAAS,gBAAgB,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAA;;IAEzD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,2CAA2C,CAAC;AACnE,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC;IAErB,MAAM,GAAG,GAAa,EAAE;IACxB,IAAI,CAAC,GAAG,CAAC;AAET,IAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;QAErB,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AAC9B,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,YAAA,CAAC,EAAE;;AAEH,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,gBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,gBAAA,CAAC,EAAE;AACH,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,oBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC,EAAE;gBACL;YACF;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACtB,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,YAAA,CAAC,EAAE;;AAEH,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE;AAC9B,oBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC,EAAE;AACH,oBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,wBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,wBAAA,CAAC,EAAE;oBACL;gBACF;YACF;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACtB,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,YAAA,CAAC,EAAE;;AAEH,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE;AAC9B,oBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC,EAAE;AACH,oBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,wBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,wBAAA,CAAC,EAAE;oBACL;gBACF;YACF;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACtB,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,YAAA,CAAC,EAAE;;AAEH,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;;gBAErD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5C,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5C,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5C,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;;AAE5C,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AACrB,oBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC,EAAE;gBACL;AACA,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AACrB,oBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC,EAAE;gBACL;YACF;QACF;aAAO,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACrC,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,YAAA,CAAC,EAAE;QACL;aAAO;;YAEL,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,CAAC,EAAE;QACL;IACF;AAEA,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB;;AClYA;;;;;;;;;;;;;;AAcG;AACI,MAAM,qBAAqB,GAAwB;AACxD,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,YAAY,EAAE,IAAI;AAElB,IAAA,aAAa,CACX,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;;AAEtB,QAAA,MAAM,aAAa,GAAI,MAAc,CAAC,eAAe;AACrD,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAgC;QAC1D,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,CAAC,CAAM,eAAK,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,mCAAI,CAAC,CAAA,CAAA,CAAA,CAAC;;QAGtE,MAAM,IAAI,GAAGC,SAAW,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACzD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,CAAC,MAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,KAAK,MAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAA,CAAA,CAAA,CAAC;AAEpD,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI;;QAG5B,QAAQ,UAAU;AAChB,YAAA,KAAK,MAAM;gBACT,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;gBAC9C;AACF,YAAA,KAAK,SAAS;gBACZ,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;gBACjD;AACF,YAAA,KAAK,SAAS;gBACZ,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;gBACjD;AACF,YAAA,KAAK,YAAY;gBACf,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;gBACpD;AACF,YAAA,KAAK,WAAW;gBACd,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;gBACnD;;;AAIJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;;AAGtC,QAAA,KAAK,CAAC,MAAM,GAAG,CAAC;AAChB,QAAA,KAAK,CAAC,MAAM,GAAG,CAAC;AAEhB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEtC,YAAA,MAAM,IAAI,GAAiB;gBACzB,EAAE;AACF,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,mCAAI,CAAC;gBACnB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,gBAAA,cAAc,EAAE;aACjB;;YAGD,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE;AACrD,gBAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC;YACnC;iBAAO,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,WAAW,EAAE;AACjE,gBAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B;AAAO,iBAAA,IAAI,UAAU,KAAK,YAAY,EAAE;AACtC,gBAAA,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B;AAGE,YAAA,IAAY,CAAC,eAAe,GAAG,CAAC;AAElC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;QACtB;;QAGA,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE;AACrD,YAAA,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;AAC3B,gBAAA,IAAI,CAAC,CAAC,MAAM,EAAE;oBACZ,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBACxC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,oBAAA,IAAI,UAAU,IAAI,UAAU,EAAE;wBAC5B,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,MAAM,EAAE,UAAU;AAClB,4BAAA,MAAM,EAAE,UAAU;AAClB,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,EAAE,EAAE,CAAC;AACL,4BAAA,EAAE,EAAE,CAAC;AACL,4BAAA,WAAW,EAAE,CAAC;AACd,4BAAA,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;AACvB,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;IACF,CAAC;AAED,IAAA,UAAU,CACR,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EAAA;AAMtB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAgC;AAC1D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,OAA4B,EAAE,CAAC,CAAC;AACzE,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,OAA4B,EAAE,CAAC,CAAC;QAEzE,QAAQ,UAAU;AAChB,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC;AAC7E,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,WAAW;gBACd,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC;AACzD,YAAA,KAAK,YAAY;gBACf,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC;AAC3D,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;;IAE3D;CACD;AAED;AAEA,SAAS,iBAAiB,CACxB,IAAS,EACT,MAA6B,EAC7B,KAAa,EACb,MAAc,EAAA;AAEd,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU;AACxD,IAAA,MAAM,MAAM,GAAGC,IAAM,EAAO;AAE5B,IAAA,IAAI,WAAW,KAAK,YAAY,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B;AAAO,SAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;;AAEnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IAC1C;SAAO;QACL,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B;IAEA,MAAM,CAAC,IAAI,CAAC;AACd;AAEA,SAAS,oBAAoB,CAC3B,IAAS,EACT,MAA6B,EAC7B,KAAa,EACb,MAAc,EAAA;AAEd,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU;AACxD,IAAA,MAAM,MAAM,GAAGC,OAAS,EAAO;AAE/B,IAAA,IAAI,WAAW,KAAK,YAAY,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B;AAAO,SAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IAC1C;SAAO;QACL,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B;IAEA,MAAM,CAAC,IAAI,CAAC;AACd;AAEA,SAAS,oBAAoB,CAC3B,IAAS,EACT,MAA6B,EAC7B,KAAa,EACb,MAAc,EAAA;;IAEd,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IACnC,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IAEzC,MAAM,MAAM,GAAGC,OAAS;AACrB,SAAA,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC;SACpB,IAAI,CAAC,aAAa;SAClB,OAAO,CAAC,OAAO,CAAC;AAEnB,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,QAAA,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;IAC/B;IAEA,MAAM,CAAC,IAAI,CAAC;AACd;AAEA,SAAS,uBAAuB,CAC9B,IAAS,EACT,MAA6B,EAC7B,KAAa,EACb,MAAc,EAAA;;IAEd,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IAEnC,MAAM,MAAM,GAAGC,IAAM;AAClB,SAAA,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC;IAEnB,MAAM,CAAC,IAAI,CAAC;AACd;AAEA,SAAS,sBAAsB,CAC7B,IAAS,EACT,MAA6B,EAC7B,KAAa,EACb,MAAc,EAAA;;IAEd,MAAM,MAAM,GAAGC,SAAW;AACvB,SAAA,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC;SACpB,OAAO,CAAC,MAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC;IAE/B,MAAM,CAAC,IAAI,CAAC;AACd;AAEA;AAEA,SAAS,gBAAgB,CACvB,IAAkB,EAClB,CAAM,EACN,MAA6B,EAAA;AAE7B,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU;AAExD,IAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;;AAE5B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAW;AAC3B,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,CAAW;;;AAG5B,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD;AAAO,SAAA,IAAI,WAAW,KAAK,YAAY,EAAE;;AAEvC,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAW;AACtB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAW;IACxB;SAAO;;AAEL,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAW;AACtB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAW;IACxB;;IAGA,MAAM,CAAC,GAAG,CAAC;IACX,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AACpB,IAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;AAClB,IAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AACrB;AAEA,SAAS,gBAAgB,CACvB,IAAkB,EAClB,CAAM,EAAA;AAEN,IAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACd,IAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACd,IAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACd,IAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACd,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AAC1B,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACxB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3B;AAEA,SAAS,kBAAkB,CACzB,IAAkB,EAClB,CAAM,EAAA;;IAEN,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAClB,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;IAEZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACjB,IAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;AAClB,IAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AAEjB,IAAA,IAAY,CAAC,QAAQ,GAAG,CAAC;AAC7B;AAEA;AAEA,SAAS,cAAc,CACrB,KAAqB,EACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EACtB,WAA4C,EAC5C,WAA4C,EAAA;;IAM5C,MAAM,UAAU,GAAwB,EAAE;IAC1C,MAAM,UAAU,GAAwB,EAAE;IAC1C,MAAM,MAAM,GAAmB,EAAE;AAEjC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU;AACxD,IAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,QAAQ;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAG/D,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;;QAGf,IAAI,QAAQ,EAAE;YACZ,EAAE,IAAI,EAAE;YACR,EAAE,IAAI,EAAE;QACV;AAEA,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,KAAK,GAAU;AACnB,YAAA,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS;AACjC,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,YAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;YACvC,OAAO,EAAE,SAAS,CAAC;SACpB;QAED,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,CAAC,EAAE,eAAe;YAClB,KAAK;AACL,YAAA,KAAK,EAAE,IAAI;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC;AACb,SAAA,CAAC;IACJ;;IAGA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC7C,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;YAAE;AAEhC,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AACrB,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AACrB,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AACrB,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;QAErB,IAAI,QAAQ,EAAE;YACZ,EAAE,IAAI,EAAE;YACR,EAAE,IAAI,EAAE;YACR,EAAE,IAAI,EAAE;YACR,EAAE,IAAI,EAAE;QACV;;AAGA,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC;AAE/D,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,KAAK,GAAU;AACnB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,YAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,GAAG;AACzC,YAAA,OAAO,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,mCAAI;SAC/B;QAED,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,QAAQ;YACd,KAAK;YACL,KAAK;AACL,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;QAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAEhD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AACf,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YAEf,IAAI,QAAQ,EAAE;gBACZ,EAAE,IAAI,EAAE;gBACR,EAAE,IAAI,EAAE;YACV;;AAGA,YAAA,IAAI,CAAS;AACb,YAAA,IAAI,CAAS;AACb,YAAA,IAAI,MAAkC;YAEtC,IAAI,QAAQ,EAAE;;AAEZ,gBAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,gBAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,gBAAA,IAAI,IAAI,GAAG,CAAC,EAAE;oBACZ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE;oBACzB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE;AACzB,oBAAA,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK;gBACpC;qBAAO;oBACL,CAAC,GAAG,EAAE;AACN,oBAAA,CAAC,GAAG,EAAE,GAAG,EAAE;oBACX,MAAM,GAAG,QAAQ;gBACnB;YACF;AAAO,iBAAA,IAAI,WAAW,KAAK,YAAY,EAAE;;gBAEvC,MAAM,MAAM,GAAG,EAAC,MAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACtE,IAAI,MAAM,EAAE;AACV,oBAAA,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,CAAC;oBAC5B,MAAM,GAAG,OAAO;gBAClB;qBAAO;AACL,oBAAA,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,CAAC;oBAC5B,MAAM,GAAG,KAAK;gBAChB;gBACA,CAAC,GAAG,EAAE;YACR;iBAAO;;gBAEL,CAAC,GAAG,EAAE;AACN,gBAAA,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,EAAE;gBAC7B,MAAM,GAAG,QAAQ;YACnB;YAEA,MAAM,CAAC,IAAI,CAAC;gBACV,CAAC;gBACD,CAAC;AACD,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;gBAClB,MAAM;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;AAC3C;AAEA,SAAS,cAAc,CACrB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EACtB,WAA4C,EAAA;;IAM5C,MAAM,UAAU,GAAsB,EAAE;IACxC,MAAM,MAAM,GAAmB,EAAE;AAEjC,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAC1C,QAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;KAClC;AAED,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE;AAEtB,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS;;QAGtC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACnD,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;QACvD;AAEA,QAAA,MAAM,KAAK,GAAU;YACnB,IAAI;AACJ,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,YAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;YACvC,OAAO,EAAE,SAAS,CAAC;SACpB;QAED,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,MAAM;YACZ,CAAC,EAAE,IAAI,CAAC,EAAE;YACV,CAAC,EAAE,IAAI,CAAC,EAAE;YACV,CAAC;YACD,CAAC;YACD,KAAK;AACL,YAAA,KAAK,EAAE,IAAI;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC;AACb,SAAA,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;QAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAEhD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE;;YAGtB,MAAM,MAAM,GAAG,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACtE,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAK,WAAW;AAEpD,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;gBAAE;AAE7B,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI;gBAAE;;AAGX,YAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBAAE;YAEtB,MAAM,CAAC,IAAI,CAAC;AACV,gBAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAClB,gBAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAClB,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAClB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,aAAA,CAAC;QACJ;IACF;IAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE;AAC/C;AAEA,SAAS,gBAAgB,CACvB,KAAqB,EACrB,MAA6B,EAC7B,IAAsB,EACtB,WAA4C,EAAA;;IAM5C,MAAM,UAAU,GAAwB,EAAE;IAC1C,MAAM,MAAM,GAAmB,EAAE;IACjC,MAAM,aAAa,GAAG,GAAG;AAEzB,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAC1C,QAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;KAClC;AAED,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,CAAC,GAAG,CAAA,EAAA,GAAC,IAAY,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC;YAAE;AAEZ,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS;;QAGtC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACnD,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;QACvD;AAEA,QAAA,MAAM,KAAK,GAAU;YACnB,IAAI;AACJ,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;AAClC,YAAA,WAAW,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,WAAW,mCAAI,CAAC;AACvC,YAAA,OAAO,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,mCAAI;SAC/B;QAED,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,IAAI,CAAC,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,CAAC;YACV,CAAC;YACD,KAAK;AACL,YAAA,KAAK,EAAE,IAAI;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC;AACb,SAAA,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;QAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;AAEhD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,CAAC,GAAG,CAAA,EAAA,GAAC,IAAY,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAErC,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI;gBAAE;;YAGX,IAAI,CAAC,GAAG,EAAE;gBAAE;;YAGZ,MAAM,MAAM,GAAG,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAEtE,MAAM,CAAC,IAAI,CAAC;gBACV,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,gBAAA,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AACpC,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAClB,gBAAA,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;AACvC,gBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;gBACjC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;gBACnC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC;gBACnC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG;AAClC,aAAA,CAAC;QACJ;IACF;IAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE;AAC/C;AAEA;AAEA;;;AAGG;AACH,SAAS,oBAAoB,CAC3B,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EACV,WAAmB,EAAA;AAEnB,IAAA,IAAI,WAAW,KAAK,YAAY,EAAE;;QAEhC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1B,QAAA,OAAO,KAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;IAClE;AAAO,SAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;;QAEnC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1B,QAAA,OAAO,KAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,IAAI,IAAI,CAAA,GAAA,EAAM,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;IACtE;SAAO;;QAEL,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1B,QAAA,OAAO,KAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;IAClE;AACF;AAEA;AAEA,SAAS,uBAAuB,CAC9B,QAAkD,EAAA;AAElD,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;IAC/B,IAAI,OAAO,QAAQ,KAAK,UAAU;AAAE,QAAA,OAAO,QAAQ;IACnD,OAAO,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC;AAChC;AAEA,SAAS,aAAa,CACpB,CAAM,EACN,MAA6B,EAC7B,KAAa,EAAA;AAEb,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc;AACtC,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC;AACA,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;QAClE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC;;AAEA,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzD,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACrD,OAAO,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE;AACxB;AAEA,SAAS,cAAc,CACrB,SAAoD,EAAA;AAEpD,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAC3B,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,QAAA,OAAO,SAAS;IACrD,OAAO,CAAC,CAAM,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,SAAS,CAAC,KAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,CAAA,CAAA;AAChE;AAEA,SAAS,sBAAsB,CAC7B,QAA4D,EAAA;IAE5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;AACjD,IAAA,OAAO,CAAC;AACV;;ACnuBA;;AAEG;AACI,MAAM,qBAAqB,GAAwC;AACxE,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,OAAO,EAAE,qBAAqB;AAC9B,IAAA,OAAO,EAAE,qBAAqB;AAC9B,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,SAAS,EAAE;CACZ;AAEK,SAAU,eAAe,CAC7B,SAA2B,EAAA;AAE3B,IAAA,OAAO,qBAAqB,CAAC,SAAS,CAAC;AACzC;;ACHA,MAAM,SAAS,GAAG,GAAG;AAErB;;;;;;;;AAQG;MACU,oBAAoB,CAAA;AA8B/B,IAAA,WAAA,CAAY,MAA6B,EAAA;;AA3BzC,QAAA,IAAA,CAAA,KAAK,GAA8B,IAAI,GAAG,EAAE;AAC5C,QAAA,IAAA,CAAA,KAAK,GAA8B,IAAI,GAAG,EAAE;QAC5C,IAAA,CAAA,OAAO,GAAG,CAAC;QACX,IAAA,CAAA,aAAa,GAAG,CAAC;;QAIjB,IAAA,CAAA,UAAU,GAAuB,EAAE;QACnC,IAAA,CAAA,UAAU,GAAuB,EAAE;QACnC,IAAA,CAAA,MAAM,GAAmB,EAAE;;QAI3B,IAAA,CAAA,YAAY,GAAwB,IAAI;;QASxC,IAAA,CAAA,UAAU,GAGC,IAAI;AAGb,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,sBAAsB,GACtB,MAAM,CAAC,aAAa,CACxB;;QAGD,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE;YACzD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;QAC5C;IACF;;AAIA,IAAA,YAAY,CAAC,MAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,sBAAsB,GACtB,MAAM,CAAC,aAAa,CACxB;;QAGD,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;YAC5C;QACF;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;IACF;;AAIA;;;AAGG;IACH,eAAe,CACb,QAAa,EACb,IAAsB,EAAA;AAEtB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAGhB,QAAA,IAAI,CAAC,MAAc,CAAC,eAAe,GAAG,QAAQ;;AAGhD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;;AAIA;;;AAGG;AACH,IAAA,aAAa,CACX,QAAe,EACf,QAAe,EACf,IAAsB,EAAA;QAEtB,MAAM,EACJ,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,QAAQ,EACzB,cAAc,GAAG,QAAQ,EACzB,aAAa,GAAG,OAAO,EACxB,GAAG,IAAI,CAAC,MAAM;AAEf,QAAA,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK;AAC1C,cAAE;cACA,CAAC,CAAM,KAAK,CAAC,CAAC,cAAc,CAAC;AAEjC,QAAA,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK;AAC1C,cAAE;cACA,CAAC,CAAM,KAAK,CAAC,CAAC,cAAc,CAAC;AAEjC,QAAA,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK;AAC1C,cAAE;cACA,CAAC,CAAM,KAAK,CAAC,CAAC,cAAc,CAAC;AAEjC,QAAA,MAAM,QAAQ,GAAG,OAAO,aAAa,KAAK;AACxC,cAAE;AACF,cAAE,CAAC,CAAM,eAAK,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA;AAErC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAGlB,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA,EACjB,IAAI,EAAE,GAAG,IACT;QACJ;;AAGA,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,UAAU,CAAC,QAAQ,CAAC,CAAA,EAAA,EAAE,IAAI,EAAE,GAAG,IAAG;YAClE;YACA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,UAAU,CAAC,QAAQ,CAAC,CAAA,EAAA,EAAE,IAAI,EAAE,GAAG,IAAG;YAClE;AAEA,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AAClB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,QAAQ;gBAChB,KAAK;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;;AAIA;;AAEG;IACK,OAAO,CAAC,MAAc,EAAE,MAAc,EAAA;AAC5C,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,MAAM,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAc,EAAA;QACvB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QACrC,IAAI,eAAe,GAAG,KAAK;QAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC1C,eAAe,GAAG,IAAI;QACxB;QAEA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC1C,eAAe,GAAG,IAAI;QACxB;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAEpC,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK;YACvB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY;QACjD;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBAClB,MAAM;gBACN,MAAM;gBACN,KAAK;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC1C,eAAe,GAAG,IAAI;QACxB;AAEA,QAAA,OAAO,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;IACnF;;AAIA;;AAEG;AACH,IAAA,SAAS,CAAC,IAAsB,EAAA;QAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC9C,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;;;;QAK9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE;;QAGnD,IAAI,CAAC,kBAAkB,EAAE;;AAGzB,QAAA,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;QAI3D,IAAI,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gBAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YAC/B;AACA,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gBAC3B,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC5E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5E,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,EAAE,IAAI,CAAC;YAC5C;QACF;;QAGA,IAAI,CAAC,cAAc,EAAE;;QAGrB,IAAI,CAAC,mBAAmB,EAAE;;AAG1B,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CACnC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,SAAS;aAC3B,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAC7E;QAED,IAAI,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,CAAC,EAAE;;YAEhE,IAAI,CAAC,wBAAwB,EAAE;;YAG/B,IAAI,CAAC,UAAU,GAAG;AAChB,gBAAA,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;AAC5B,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;aAC9B;QACH;QAEA,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,IAAsB,EAAA;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEhD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAC1D,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,IAAI,CACL;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;;AAIA;;AAEG;AACH,IAAA,iBAAiB,CAAC,GAAW,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;QAElC,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAE5D,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IACE,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC5B,IAAI,CAAC,OAAO,KAAK,SAAS;AAC1B,iBAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,EAC1C;AACA,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;AAC5D,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,GAAG,CAAC,IAAI,CAAC,SAAU,GAAG,IAAI,CAAC,OAAQ,IAAI,CAAC;AAC/D,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,GAAG,CAAC,IAAI,CAAC,SAAU,GAAG,IAAI,CAAC,OAAQ,IAAI,CAAC;AAC/D,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,GAAG,CAAC,IAAI,CAAC,SAAU,GAAG,IAAI,CAAC,OAAQ,IAAI,CAAC;YACjE;QACF;QAEA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IACE,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC5B,IAAI,CAAC,OAAO,KAAK,SAAS;gBAC1B,IAAI,CAAC,gBAAgB,KAAK,SAAS;AACnC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,EACzB;AACA,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;AAC5D,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,GAAG,CAAC,IAAI,CAAC,SAAU,GAAG,IAAI,CAAC,OAAQ,IAAI,CAAC;AAC/D,gBAAA,IAAI,CAAC,WAAW;AACd,oBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,kBAAmB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC;YAClF;QACF;;QAGA,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;;YAEb,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;IAIQ,kBAAkB,GAAA;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;QACxB;QACA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW;QAC1C;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO;QAE3E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;;;YAGtC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC;YAC/E,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACjC,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACpC;iBAAO;;gBAEL,MAAM,CAAC,GAAG,CAAC;gBACX,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AACpB,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;AAClB,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;YACrB;QACF;QAEA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;IAClB;IAEQ,mBAAmB,GAAA;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;QAC1B;QACA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW;QAC5C;IACF;IAEQ,wBAAwB,GAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IACE,IAAI,CAAC,OAAO,KAAK,SAAS;AAC1B,iBAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,EAC1C;AACA,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO;AACtB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ;AACvB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ;AACvB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ;YACzB;QACF;QACA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IACE,IAAI,CAAC,OAAO,KAAK,SAAS;gBAC1B,IAAI,CAAC,gBAAgB,KAAK,SAAS;AACnC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,EACzB;AACA,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO;AACtB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB;YAC1C;QACF;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,aAAa,GAAA;QACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS;AACxB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAU;AACzB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAU;AACzB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAU;YAC3B;QACF;QACA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS;AACxB,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAU;AACzB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAmB;YAC7C;QACF;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;AAIQ,IAAA,gBAAgB,CAAC,IAAkB,EAAA;AACzC,QAAA,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK;cACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;AAC5B,cAAE,IAAI,CAAC,MAAM;AACjB,QAAA,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK;cACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;AAC5B,cAAE,IAAI,CAAC,MAAM;AAEjB,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;YAAE;QAEhC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9C;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;QACtE;IACF;AAEQ,IAAA,mBAAmB,CACzB,IAAkB,EAClB,UAAwB,EACxB,UAAwB,EAAA;QAExB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC;AAEtC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;AACxB,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;YACxB,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;AACpC,YAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;AAC7C,YAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;AACxD,YAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE;AAC5D,YAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;YAC7C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACrE;;AAGA,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;AACxB,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;QACxB,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AAC7C,QAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AACxD,QAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AAC5D,QAAA,MAAM,EAAE,GAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;QAC7C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IACrE;AAEQ,IAAA,mBAAmB,CAAC,IAAkB,EAAA;QAC5C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB;AAEjC,QAAA,IAAI,SAAwB;AAE5B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,YAAA,SAAS,GAAG;gBACV,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE;gBAClC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE;gBACzC,EAAE,CAAC,EAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE;gBACpD,EAAE,CAAC,EAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE;gBACrD,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE;gBAC1C,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO;aACjC;QACH;aAAO;AACL,YAAA,SAAS,GAAG;gBACV,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE;gBAClC,EAAE,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE;gBACzC,EAAE,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,kBAAkB,EAAE;gBACpD,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,kBAAkB,EAAE;gBACrD,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE;gBAC1C,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO;aACjC;QACH;QAEA,MAAM,QAAQ,GAAgE,EAAE;AAChF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC;gBACZ,CAAC;AACD,gBAAA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACpC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;gBAChD;AACD,aAAA,CAAC;QACJ;QAEA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IACpD;IAEA,iBAAiB,GAAA;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QACpC;QACA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;IACF;;IAIA,aAAa,GAAA;QACX,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;SACtC;IACH;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QAC3B;IACF;AACD;AAED,SAAS,UAAU,CAAC,EAAU,EAAA;IAC5B,OAAO;QACL,EAAE;AACF,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,cAAc,EAAE;KACjB;AACH;;ACrmBA;;;;AAIG;AACG,SAAU,sBAAsB,CACpC,UAA8B,EAC9B,UAA8B,EAC9B,EAAU,EACV,EAAU,EACV,WAAW,GAAG,EAAE,EAAA;;;IAIhB,IAAI,QAAQ,GAA4B,IAAI;IAC5C,IAAI,QAAQ,GAAG,WAAW;IAC1B,IAAI,YAAY,GAAG,QAAQ;AAE3B,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;;YAExB,MAAM,IAAI,GAAI,IAAwB,CAAC,CAAC,GAAI,IAAwB,CAAC,CAAC;AACtE,YAAA,IAAI,IAAI,GAAG,YAAY,EAAE;gBACvB,QAAQ,GAAG,MAAM;gBACjB,YAAY,GAAG,IAAI;YACrB;QACF;AAAO,aAAA,IAAI,MAAM,CAAC,QAAQ,GAAG,QAAQ,EAAE;YACrC,QAAQ,GAAG,MAAM;AACjB,YAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAC5B;IACF;AAEA,IAAA,IAAI,QAAQ;AAAE,QAAA,OAAO,QAAQ;;AAG7B,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,QAAQ,EAAE;YACxC,QAAQ,GAAG,MAAM;AACjB,YAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAC5B;IACF;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEA;AAEA,SAAS,WAAW,CAClB,IAAsB,EACtB,EAAU,EACV,EAAU,EAAA;AAEV,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AAClC,QAAA,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAEA,SAAS,aAAa,CACpB,IAAuB,EACvB,EAAU,EACV,EAAU,EAAA;AAEV,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;AAEzC,IAAA,IAAI,IAAI,IAAI,SAAS,EAAE;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,CAAC,EAAE,IAAI,CAAC,EAAE;YACV,CAAC,EAAE,IAAI,CAAC,EAAE;AACV,YAAA,QAAQ,EAAE;SACX;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,WAAW,CAClB,IAAqB,EACrB,EAAU,EACV,EAAU,EAAA;AAEV,IAAA,IACE,EAAE,IAAI,IAAI,CAAC,CAAC;AACZ,QAAA,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,EAAE,IAAI,IAAI,CAAC,CAAC;QACZ,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACrB;QACA,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACtB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE;SACX;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,UAAU,CACjB,IAAoB,EACpB,EAAU,EACV,EAAU,EAAA;;AAGV,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AACvB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAG3C,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI;;IAGrE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;;IAE9B,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;AAEnC,IAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU;AAC3B,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;;IAEvB,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC;AAAE,QAAA,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;AAE/B,IAAA,IAAI,KAAc;AAClB,IAAA,IAAI,KAAK,IAAI,GAAG,EAAE;QAChB,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;IACxC;SAAO;;QAEL,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;IACxC;IAEA,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC;AACtD,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;QAC5C,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtC,YAAA,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtC,YAAA,QAAQ,EAAE;SACX;IACH;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;AAEA,SAAS,WAAW,CAClB,IAAsB,EACtB,EAAU,EACV,EAAU,EAAA;AAEV,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACxC,QAAA,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACtC,QAAA,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACtC,QAAA,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACtC,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAEA,SAAS,iBAAiB,CACxB,IAAuB,EACvB,EAAU,EACV,EAAU,EAAA;;;IAGV,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAE5B,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;;;QAInC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QAErB,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;;YAEnC,MAAM,UAAU,GAAG,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;YACpF,MAAM,UAAU,GAAG,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAEpF,YAAA,MAAM,IAAI,GAAG,UAAU,IAAI;kBACvB,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,IAAI;kBAClC,EAAE;AACN,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC;AAChB,kBAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI;kBAClC,EAAE;YAEN,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,CAAC,EAAE,IAAI;AACP,gBAAA,CAAC,EAAE,IAAI;AACP,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;AAAE,IAAA,OAAA,EAAA,EAAM;;IAER;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CACtB,IAAkF,EAClF,EAAU,EACV,EAAU,EAAA;;IAGV,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;IAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAE9B,IAAI,IAAI,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IAE3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI;AAC1D,IAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,CAAA,GAAA,EAAC,EAAE,GAAG,KAAK,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,EAAE,GAAG,KAAK,GAAK,CAAC,CAAA,CAAC;IAE7D,MAAM,SAAS,GAAG,CAAC;AACnB,IAAA,IAAI,IAAI,IAAI,SAAS,EAAE;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,CAAC,EAAE,KAAK;AACR,YAAA,CAAC,EAAE,KAAK;AACR,YAAA,QAAQ,EAAE;SACX;IACH;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CACtB,IAAmC,EACnC,EAAU,EACV,EAAU,EAAA;IAEV,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAE5B,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QAErB,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;YACnC,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,CAAC,EAAE,EAAE;AACL,gBAAA,CAAC,EAAE,EAAE;AACL,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;AAAE,IAAA,OAAA,EAAA,EAAM;;IAER;AAEA,IAAA,OAAO,IAAI;AACb;;AC1QA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,KAA6B,EAAA;IAC7D,MAAM,EACJ,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,kBACe,CAChB,GAAG,KAAK;IAET,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,aAAa,EAAE;AAChB,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,EAAA;YAEpD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MACnB,8BACE,GAAG,EAAE,SAAS,CAAC,CAAA,CAAE,EACjB,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO,EACnC,gBAAgB,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAQ,EACrD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,cAAc,EAClC,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAA,EAE/B,KAAK,CAAC,IAAI,CACN,CACR,CAAC;YAGD,WAAW;gBACV,kBAAkB;gBAClB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,KAAI;AAChC,oBAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,EAAE;wBAChD,KAAK;wBACL;AACD,qBAAA,CAAC;oBACF,OAAO,OAAO,IACZ,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,CAAA,WAAA,EAAc,CAAC,CAAA,CAAE,EAAA,EACnC,OAAO,CACO,IACf,IAAI;AACV,gBAAA,CAAC,CAAC;AAGH,YAAA,kBAAkB,CACjB;AAGH,QAAA,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IACjC,8BACE,CAAC,EAAE,UAAU,GAAG,CAAC,EACjB,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,GAAG,EACf,IAAI,EAAC,cAAc,EAAA,EAElB,KAAK,CACD,IACL,KAAK,IACP,uCAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAA,EAC7D,KAAK,CACQ,IACd,IAAI;AAGP,QAAA,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,cAAc,IAAK,MAAc,IACxE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,GAAG,EAAA,EACrE,MAAc,CAAC,YAA8B,CAAC,GAAG,CAClD,CAAC,KAAK,EAAE,EAAE,KAAI;;AAAC,YAAA,QACb,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAE,EAAA,EACzB,CAAA,EAAA,GAAA,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,IAAS,EAAE,EAAU,MACtC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,CAAA,YAAA,EAAe,EAAE,CAAA,CAAE,EAAE,SAAS,EAAE,CAAA,YAAA,EAAe,EAAE,GAAG,EAAE,CAAA,CAAA,CAAG,EAAA;gBAC/D,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,IAAI,EAAE,IAAI,CAAC,KAAK,EAChB,EAAE,EAAE,CAAC,EAAA,CACL;gBACF,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,EAAE,EACL,CAAC,EAAE,EAAE,EACL,QAAQ,EAAE,EAAE,EACZ,IAAI,EAAC,cAAc,EAAA,EAElB,IAAI,CAAC,KAAK,CACN,CACL,CACL,CAAC,CACA;AACL,QAAA,CAAA,CACF,CACC,IACF,MAAM,IACR,2BAAG,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,GAAG,EAAA,EACvE,MAAyB,CACxB,IACF,IAAI,CACJ;AAEV;AAEA,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;ACnKnD;;AAEG;AACG,SAAU,mBAAmB,CACjC,GAA6B,EAC7B,KAAyB,EAAA;;AAEzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE;QAC1B,MAAM,CAAC,GAAG,IAAuB;QAEjC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE;QAE1B,GAAG,CAAC,IAAI,EAAE;QAEV,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;YACjC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO;QACnC;;AAGA,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;YAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE;AACrC,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW;YAChE;AACA,YAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC;;AAGA,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC/C,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;YAChC,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACxC,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AACtC,YAAA,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC;QAEA,GAAG,CAAC,OAAO,EAAE;IACf;AACF;;ACtCA;;AAEG;AACG,SAAU,qBAAqB,CACnC,GAA6B,EAC7B,KAAyB,EAAA;;AAEzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE;QAC5B,MAAM,CAAC,GAAG,IAAyB;AAEnC,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE;QAEd,GAAG,CAAC,IAAI,EAAE;QAEV,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;YACjC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO;QACnC;QAEA,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;;AAGxC,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;YAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE;AACrC,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW;YAChE;YACA,GAAG,CAAC,IAAI,EAAE;QACZ;;AAGA,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC/C,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;YAChC,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACxC,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACtC,GAAG,CAAC,MAAM,EAAE;QACd;QAEA,GAAG,CAAC,OAAO,EAAE;IACf;AACF;;ACzCA;;AAEG;AACG,SAAU,kBAAkB,CAChC,GAA6B,EAC7B,KAAyB,EAAA;;AAEzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE;QACzB,MAAM,CAAC,GAAG,IAAsB;QAEhC,GAAG,CAAC,IAAI,EAAE;QAEV,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;YACjC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO;QACnC;;QAGA,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC;QAC7D,GAAG,CAAC,SAAS,EAAE;;AAGf,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;YAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE;AACrC,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW;YAChE;YACA,GAAG,CAAC,IAAI,EAAE;QACZ;;AAGA,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC/C,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;YAChC,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACxC,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACtC,GAAG,CAAC,MAAM,EAAE;QACd;QAEA,GAAG,CAAC,OAAO,EAAE;IACf;AACF;;ACpCA;;;;;;;AAOG;AACG,SAAU,mBAAmB,CACjC,GAA6B,EAC7B,KAAyB,EAAA;AAEzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;gBACzB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;gBAC3B;;IAEN;AACF;AAEA,SAAS,gBAAgB,CACvB,GAA6B,EAC7B,IAAuB,EAAA;;IAEvB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE;IAEjB,GAAG,CAAC,IAAI,EAAE;IAEV,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGnC,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACjD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AAC/B,QAAA,GAAG,CAAC,WAAW,GAAG,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACrE,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;;AAGA,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;QACrD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QACnC,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC7C,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,GAAG;AACjD,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAClB;IAEA,GAAG,CAAC,OAAO,EAAE;AACf;AAEA,SAAS,cAAc,CACrB,GAA6B,EAC7B,IAAqB,EAAA;;IAErB,GAAG,CAAC,IAAI,EAAE;IAEV,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;IAC7C,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;QACpC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;IACtC;AACA,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AAC9B,QAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzE;IAEA,GAAG,CAAC,SAAS,EAAE;IACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IAC5B,GAAG,CAAC,MAAM,EAAE;IAEZ,GAAG,CAAC,OAAO,EAAE;AACf;AAEA,SAAS,gBAAgB,CACvB,GAA6B,EAC7B,IAAuB,EAAA;;IAEvB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE;IAEjB,GAAG,CAAC,IAAI,EAAE;IAEV,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAEnC,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACjD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AAC/B,QAAA,GAAG,CAAC,WAAW,GAAG,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACrE,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;AAEA,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;QACrD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QACnC,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC7C,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,GAAG;AACjD,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAClB;IAEA,GAAG,CAAC,OAAO,EAAE;AACf;AAEA,SAAS,gBAAgB,CACvB,GAA6B,EAC7B,IAAuB,EAAA;;IAEvB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE;IAEjB,GAAG,CAAC,IAAI,EAAE;IAEV,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAEnC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;IAC7C,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;QACpC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;IACtC;AACA,IAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;;AAGhB,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACjD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;QAC/B,GAAG,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AAC/C,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;IAEA,GAAG,CAAC,OAAO,EAAE;AACf;;ACxIA;;;AAGG;AACG,SAAU,sBAAsB,CACpC,GAA6B,EAC7B,IAAkB,EAClB,KAAqB,EACrB,KAAoB,EACpB,WAA2C,EAAA;;IAE3C,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,sBAAsB,CAAC,MAAM;IAC5D,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,sBAAsB,CAAC,OAAO;AAE/D,IAAA,GAAG,CAAC,WAAW,GAAG,OAAO;AAEzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE;QAEf,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI;YAAE;;AAGX,QAAA,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE;AACrC,YAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,YAAA,GAAG,CAAC,SAAS,GAAG,UAAU,GAAI,KAAK,CAAC,KAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,MAAM;QACnF;aAAO,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;AACnD,YAAA,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,KAAe;QACvC;aAAO;AACL,YAAA,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;QACnC;QAEA,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,GAAG,CAAC,IAAI,EAAE;IACZ;AAEA,IAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACrB;AAEA;;AAEG;AACG,SAAU,qBAAqB,CACnC,IAAkB,EAClB,KAAqB,EACrB,SAAiB,EACjB,KAAoB,EAAA;;IAEpB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,sBAAsB,CAAC,SAAS;IACrE,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,sBAAsB,CAAC,UAAU;AAExE,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAElB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,IAAI,YAAY,IAAI,UAAU;YAAE;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,SAAS;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK;QAEzB,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI;AAAE,YAAA,OAAO,EAAE;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,UAAU;gBAAE;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACf;IACF;AACF;;AC9DA;;AAEG;AACI,MAAM,aAAa,GAAG;;AAE3B,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,SAAS,EAAE,eAAe;AAC1B,IAAA,IAAI,EAAE,UAAU;;AAGhB,IAAA,KAAK,EAAE,gBAAgB;AACvB,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,MAAM,EAAE;CACT;AAED;;AAEG;AACI,MAAM,cAAc,GAAG,gBAAgB;AAE9C;;;;;;;;;;;;;;;;AAgBG;SACa,QAAQ,CACtB,SAAc,EACd,OAAsC,EACtC,UAA+B,EAAA;AAE/B,IAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC;IAC3B;AAEA,IAAA,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;IAErC,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,UAAU,CAAC,UAAU,CAAC;IAC/B;;AAGA,IAAA,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;AACzF;AAEA;;;;;;;;;;;;;AAaG;AACG,SAAU,gBAAgB,CAC9B,IAAgC,EAChC,OAAe,EACf,SAA4B,YAAY,EAAA;;IAGxC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;IAGnE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGrF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,QAAA,OAAO,YAAY;aAChB,MAAM,CAAC,YAAY;aACnB,KAAK,CAAC,MAAM;aACZ,OAAO,CAAC,MAAM,CAAuB;IAC1C;IAEA,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,UAAU;AAErE,IAAA,IAAI,SAAS,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;;QAElD,OAAO,CAAC,CAAM,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF;SAAO;;AAEL,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,cAAc;AACxE,QAAA,OAAO,YAAY;aAChB,MAAM,CAAC,YAAY;aACnB,KAAK,CAAC,MAAM;aACZ,OAAO,CAAC,MAAM,CAAuB;IAC1C;AACF;AAEA;;AAEG;AACH,SAAS,UAAU,CAAC,GAAW,EAAA;IAC7B,IAAI,IAAI,GAAG,CAAC;AACZ,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;AAChC,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACpB;AACA,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB;AAEA;;;;;;;;AAQG;AACG,SAAU,OAAO,CACrB,SAAc,EACd,MAAqC,EACrC,SAAA,GAA8B,CAAC,CAAC,EAAE,EAAE,CAAC,EACrC,MAAyB,EAAA;AAEzB,IAAA,IAAI,KAAa;AAEjB,IAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,QAAA,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;IAC3B;SAAO;AACL,QAAA,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAC3B;IAEA,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM;AACrC,IAAA,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;AAEpC,IAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC;IAChC;AAEA,IAAA,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,CAAC;IAChE,OAAO,OAAO,GAAG,UAAU,IAAI,OAAO,GAAG,OAAO,CAAC;AACnD;;ACjIA;AAEA,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACnE,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACpE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAChE,MAAM,YAAY,GAAqB,CAAC,GAAG,EAAE,GAAG,CAAC;AAEjD;AAEA,MAAMb,qBAAmB,GAAwB;AAC/C,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,SAAS,EAAE,+BAA+B;AAC1C,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,UAAU,EAAE;CACb;AAED,SAAS,qBAAqB,CAAC,EAC7B,IAAI,EAGL,EAAA;;AACC,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM;QAChE,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM;QAChE,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AAC1D,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA;gBAC5B,QAAQ;;AAAK,gBAAA,QAAQ,CAClB;AACL,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;;gBACjC,GAAG;AACT,gBAAA,OAAO,IAAI,CAAC,KAAK,KAAK;AACrB,sBAAE,IAAI,CAAC,KAAK,CAAC,cAAc;sBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CACP,CACG;IAEV;AAEA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;;;IAItB,MAAM,KAAK,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,eAAe;IACnC,IAAI,KAAK,EAAE;QACT,MAAM,SAAS,GAAa,EAAE;QAC9B,IAAI,GAAG,GAAG,KAAK;QACf,OAAO,GAAG,EAAE;YACV,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,GAAG,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,mCAAI,CAAA,EAAA,GAAA,GAAG,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,EAAE;YACtD,IAAI,IAAI,IAAI,IAAI;gBAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM;QAClB;;AAEA,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,KAAK,EAAE;AAE3C,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QACjC,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;AAC1D,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EACG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACrB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,CAAC,EAAA;AACT,gBAAA,CAAC,GAAG,CAAC,KACJ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,EAAG,KAAK,CAAQ,CAC/D;AACA,gBAAA,CAAC,KAAK,IAAI,IACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAS,IAAI,CAAU,KAEvB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,EAAG,IAAI,CAAQ,CAC7C,CACI,CACR,CAAC,CACE;AACL,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,KACnC,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,EACvC,OAAO,IAAI,CAAC,KAAK,KAAK;AACrB,kBAAE,IAAI,CAAC,KAAK,CAAC,cAAc;kBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CACP,CACG;IAEV;;IAGA,MAAM,MAAM,GAAG,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,KAAI,CAAC,KAAK,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,KAAI,CAAC,CAAC;AAChF,IAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAS,EAAE,CAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;AAC/F,UAAA,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAS,EAAE,CAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjF,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAEA,qBAAmB,EAAA;QAC1D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAAG,IAAI,CAAC,EAAE,CAAO;QAC/C,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,KACnC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;;YACjC,GAAG;AACT,YAAA,OAAO,IAAI,CAAC,KAAK,KAAK;AACrB,kBAAE,IAAI,CAAC,KAAK,CAAC,cAAc;kBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CACP;AACA,QAAA,MAAM,GAAG,CAAC,KACT,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;;YAC1B,MAAM;AACnB,YAAA,cAAc,KAAK,MAAM,IAAI,CAAA,YAAA,EAAe,cAAc,CAAC,cAAc,EAAE,CAAA,CAAA,CAAG,CAC3E,CACP,CACG;AAEV;AAEA;AAEA,MAAM,kBAAkB,GAAG,UAAU,CAGnC,SAAS,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAA;AACtC,IAAA,MAAM,EACJ,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,QAAQ,EACzB,cAAc,GAAG,QAAQ,EACzB,aAAa,GAAG,OAAO,EACvB,gBAAgB,EAChB,YAAY,EACZ,WAAW,GAAG,YAAY,EAC1B,SAAS,GAAG,SAAS,EACrB,gBAAgB,GAAG,IAAI,EACvB,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,GAAG,EAChB,aAAa,GAAG,GAAG,EACnB,QAAQ,GAAG,IAAI,EACf,UAAU,GAAG,EAAE,EACf,UAAU,EACV,QAAQ,EACR,eAAe,GAAG,UAAU,EAC5B,QAAQ,GAAG,OAAO,EAClB,OAAO,EACP,UAAU,EACV,aAAa,EAAE,iBAAiB,EAChC,aAAa,GAAG,KAAK,EACrB,aAAa,EAAE,iBAAiB,EAChC,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,WAAW,GAAG,QAAQ,EACtB,WAAW,GAAG,GAAG,EACjB,YAAY,GAAG,KAAK,EACpB,QAAQ,GAAG,CAAC,EACZ,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,SAAS,EACT,UAAU,GAAG,IAAI,EACjB,IAAI,GAAG,YAAY,EACnB,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,UAAU,EACV,WAAW,GAAG,IAAI,EAClB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EACnB,GAAG,KAAK;AAET,IAAA,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,eAAe,GAAG,cAAc;AACnF,IAAA,MAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,UAAU,CAAA,EAAK,UAAU,CAAE;AAC/C,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AAC1D,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;AAE3D,IAAA,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,sBAAsB,CAAA,EAAK,iBAAiB,CAAA,CAAG,EAC3D,CAAC,iBAAiB,CAAC,CACpB;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,sBAAsB,CAAA,EAAK,iBAAiB,CAAA,CAAG,EAC3D,CAAC,iBAAiB,CAAC,CACpB;;AAID,IAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,OAA8B;QAC5B,SAAS;QACT,cAAc;QACd,cAAc;QACd,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,WAAW;QACX,SAAS;QACT,gBAAgB;QAChB,SAAS;QACT,UAAU;QACV,aAAa;QACb,QAAQ;QACR,UAAU;QACV,UAAU;QACV,QAAQ;QACR,eAAe;QACf,QAAQ;QACR,OAAO;QACP,UAAU;QACV,aAAa;QACb,aAAa;QACb,aAAa;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;QACV,OAAO;QACP,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC,EACF;QACE,SAAS;QACT,cAAc;QACd,cAAc;QACd,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,WAAW;QACX,SAAS;QACT,gBAAgB;QAChB,SAAS;QACT,UAAU;QACV,aAAa;QACb,QAAQ;QACR,UAAU;QACV,UAAU;QACV,QAAQ;QACR,eAAe;QACf,QAAQ;QACR,OAAO;QACP,UAAU;QACV,aAAa;QACb,aAAa;QACb,aAAa;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;QACV,OAAO;QACP,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CACF;;AAID,IAAA,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC;AACjD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACxB,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;;AAIhD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA8B,IAAI,CAAC;AAC1D,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,QAAQ,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,cAAc,CAAC;IAC7D;;IAIA,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAKhC,IAAI,CAAC;IACf,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAEzD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;;IAI/C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,GAAG,EAAkB,CAAC;AACtD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,IAAkB,KAAY;QAC7B,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC;QACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1C,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AACtC,0BAAE;0BACA,cAAc;oBAClB,YAAY,CAAC,OAAO,CAAC,GAAG,CACtB,MAAM,CAAC,GAAG,CAAC,EACX,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAChD;gBACH;gBACA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE;YAC/C;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AACtC,kBAAE;kBACA,cAAc;YAClB,YAAY,CAAC,OAAO,CAAC,GAAG,CACtB,IAAI,CAAC,EAAE,EACP,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAChD;QACH;QACA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE;AAC3C,IAAA,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB;AAED,IAAqB,WAAW,CAC9B,CAAC,IAAkB,KAAY;QAC7B,IAAI,OAAO,WAAW,KAAK,UAAU;AAAE,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC;AAC/D,QAAA,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACtD,QAAA,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AAEtD,QAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,UAAU,EAAE;AAC1C,YAAA,OAAO,YAAY,CAAC,UAAU,CAAC;QACjC;QACA,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,YAAY,CAAC,UAAU,CAAC;QACjC;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,YAAY,CAAC;AAG7B,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAkB,KAAY;AAC7B,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,IAAI,QAAQ;AACrD,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACvE,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AAEvE,QAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,UAAU,EAAE;AAC1C,YAAA,OAAO,YAAY,CAAC,UAAU,CAAC;QACjC;QACA,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,YAAY,CAAC,UAAU,CAAC;QACjC;AACA,QAAA,OAAO,MAAM;IACf,CAAC,EACD,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CACtC;;AAID,IAAA,MAAM,YAAY,GAChB,SAAS,KAAK,QAAQ,IAAI,aAAa;AAEzC,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;AACtC,QAAA,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,YAAY;YAAE;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QACrE;AACF,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;;IAGlB,SAAS,CAAC,MAAK;;QACb,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAC,cAAc,CAAC;AAC9C,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;;AAIpC,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,MAAK;AACjC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,KAAK,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACjD,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AAEvB,QAAA,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC;QAErC,IAAI,gBAAgB,EAAE;YACpB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE;AAC9C,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;QAChC;IACF,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;;AAIrD,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAAc,KAAI;AACjB,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5C,IAAI,aAAa,EAAE;AACjB,YAAA,SAAS,EAAE;QACb;AACA,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,cAAc,CAAC,CAC5B;AAED,IAAA,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,KAAiB,KAAI;AACpB,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,IAAI,aAAa,GAAG,KAAK;AACzB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC1B,aAAa,GAAG,IAAI;YACtB;QACF;QACA,IAAI,aAAa,EAAE;AACjB,YAAA,SAAS,EAAE;QACb;AACA,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,cAAc,CAAC,CAC5B;AAED,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAChC,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AACzB,QAAA,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;AAC5B,QAAA,aAAa,CAAC,OAAO,GAAG,CAAC;QACzB,gBAAgB,CAAC,CAAC,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC;AAClB,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAK;AACrC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,KAAK,CAAC,OAAO,IAAI,GAAG;AACpB,QAAA,SAAS,EAAE;AACX,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAE/B,IAAA,mBAAmB,CACjB,GAAG,EACH,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAChB,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,aAAa,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA,CAAA,CAAA;AAC/D,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,UAAU,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAA,CAAA;KACjD,CAAC,EACF,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CACnD;;;AAKD,IAAA,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;;AAEpG,IAAA,MAAM,aAAa,GAAG,cAAc,IAAI,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,IAAI,SAAS;IAEpH,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,cAAc,IAAI,aAAa,EAAE;;YAEnC,KAAK,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACrE,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACjD,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,YAAA,cAAc,EAAE;QAClB;aAAO;;AAEL,YAAA,MAAM,QAAQ,GAAG,SAAS,IAAI,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,EAAE;YAE1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE;AAEpD,YAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACxE,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACjD,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,YAAA,cAAc,EAAE;QAClB;IACF,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;;IAIlI,SAAS,CAAC,MAAK;QACb,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,aAAa,CAAC,YAAY,CAAC;QAC7B;;;IAGF,CAAC,EAAE,EAAE,CAAC;;IAIN,MAAM,eAAe,GAAG,MAAM,CAAgC,MAAK,EAAE,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,MAAM,CAAa,MAAK,EAAE,CAAC,CAAC;AAElD,IAAA,eAAe,CAAC,OAAO,GAAG,CAAC,CAAmB,KAAI;AAChD,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAClD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;QAEhD,IACE,MAAM,GAAG,CAAC;AACV,YAAA,MAAM,GAAG,aAAa;AACtB,YAAA,MAAM,GAAG,CAAC;YACV,MAAM,GAAG,cAAc,EACvB;AACA,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,YAAY,CAAC,IAAI,CAAC;AAClB,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,GAAG,GAAG,sBAAsB,CAChC,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAChB,MAAM,EACN,MAAM,CACP;QAED,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;gBACvB,YAAY,CAAC,IAAI,CAAC;AAClB,gBAAA,cAAc,EAAE;YAClB;YACA;QACF;AAEA,QAAA,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,KAAK;YACf,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC;SACR;AAED,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;QACxB,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,aAAa,CAAC,OAAO,GAAG,MAAK;AAC3B,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;YACvB,YAAY,CAAC,IAAI,CAAC;AAClB,YAAA,cAAc,EAAE;QAClB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAmB,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EACnD,EAAE,CACH;AACD,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,MAAM,aAAa,CAAC,OAAO,EAAE,EAC7B,EAAE,CACH;;AAID,IAAA,WAAW,CAAC,OAAO,GAAG,MAAK;;AACzB,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC;AAClB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;AAC7B,QAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACjC,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,OAAO,IAAI,IAAI,EAAE,GAAG;cACrD,KAAK;AACT,QAAA,gBAAgB,CAAC,OAAO,GAAG,GAAG;;QAG9B,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACpD,QAAA,IAAI,eAAe,IAAI,QAAQ,CAAC,OAAO,EAAE;;YAEvC,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACnD;;AAGA,QAAA,MAAM,GAAG,GACP,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC;QAClE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC5B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;QAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACpC,QAAA,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;QACnB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;QACtC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;;QAG1D,IAAI,UAAU,EAAE;AACd,YAAA,GAAG,CAAC,SAAS,GAAG,UAAU;YAC1B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC;QACnD;;AAGA,QAAA,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC;;AAG1C,QAAA,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC;AAC1C,QAAA,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC;AAC5C,QAAA,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC;;AAGzC,QAAA,IAAI,aAAa,IAAI,KAAK,CAAC,YAAY,EAAE;AACvC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC9C,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,qBAAqB,CACnB,KAAK,CAAC,YAAY,EAClB,KAAK,EACL,SAAS,EACT,aAAa,CACd;AACD,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAA,EAAA,GAAA,aAAa,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,GAAG;gBACxD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;AAChD,gBAAA,sBAAsB,CACpB,GAAG,EACH,KAAK,CAAC,YAAY,EAClB,KAAK,EACL,aAAa,EACb,gBAAgB,CACjB;YACH;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;AACjC,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;AAGxB,QAAA,IAAI,QAAQ,IAAI,eAAe,EAAE;YAC/B,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC;;AAGA,QAAA,IAAI,YAAY,IAAI,eAAe,EAAE;AACnC,YAAA,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QACrE;AACF,IAAA,CAAC;;IAID,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,EAAE;AAChB,QAAA,OAAO,MAAK;YACV,IAAI,MAAM,CAAC,OAAO;AAAE,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IAEpB,SAAS,CAAC,MAAK;AACb,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,cAAc,EAAE;AAClB,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;;AAI1E,IAAA,MAAM,cAAc,GAClB,WAAW,IAAI,SAAS,IACtB,6BACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;AAC/B,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;YAC7B,SAAS,EAAE,aACT,SAAS,CAAC,CAAC,GAAG,aAAa,GAAG;AAC5B,kBAAE;kBACA,MACN,CAAA,EAAA,EACE,SAAS,CAAC,CAAC,GAAG,cAAc,GAAG;AAC7B,kBAAE;kBACA,mBACN,CAAA,CAAA,CAAG;AACH,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,MAAM,EAAE;AACT,SAAA,EAAA,EAEA,cAAc,IACb,cAAc,CAAC,SAAS,CAAC,KAEzB,KAAA,CAAA,aAAA,CAAC,qBAAqB,EAAA,EAAC,IAAI,EAAE,SAAS,EAAA,CAAI,CAC3C,CACG,IACJ,IAAI;;AAIV,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAE9B,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,oBAAA,EAAuB,SAAS,GAAG,IAAI,SAAS,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EACpE,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC;SACf,EACD,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,EAClD,YAAY,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,EAAA;AAEnD,QAAA,kBAAkB,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACf,gBAAA,aAAa,EAAE;AAChB,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,EAAA,EACpD,kBAAkB,CACjB,CACA,CACP;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,IAAI,EAAE;aACP,EAAA,CACD;AAEF,QAAA,KAAA,CAAA,aAAA,CAAC,iBAAiB,EAAA,EAChB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM,KAAI,EAAE,EAC3B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAAA,CAChC;QAED,cAAc,CACX;AAEV,CAAC;AAED,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;ACh0BrD;AACc,gBAAA,IAAA;AACZ,IAAA,IAAI,GAAG,GAAG,EAAE,EACV,GAAG,GAAG,EAAE,EACR,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;AACL,IAAA,OAAO,GAAG;AACR,QAAA,KAAK,EAAE,CAAC,MAAK,CAAC;AACd,QAAA,KAAK,EAAE,CAAC,MAAK,CAAC;AACd,QAAA,MAAM,EAAE,CAAC,MAAK,CAAC;AACf,QAAA,KAAK,EAAE,CAAC,MAAK,CAAC;AACd,QAAA,MAAM,EAAE,CAAC,MAAK,CAAC;AACf,QAAA,UAAU,EAAE,CAAC,MAAK,CAAC;AACnB,QAAA,YAAY,EAAE,CAAC,MAAK;KACrB;AAEH,IAAA,IAAI,QAAQ,GAAG,GAAG,EAChB,SAAS,GAAG,GAAG;;AAGjB,IAAA,IAAI,KAAK,GAAG,GAAG;IACb,OAAO,GAAG,GAAG;IACb,MAAM,GAAG,IAAI;IACb,SAAS,GAAG,IAAI;AAChB,IAAA,QAAQ,GAAG,GAAG,CAAA;;AAGhB,IAAA,IAAI,WAAW,GAAG,KAAK;IAGvB,IAAI,mBAAmB;IAEvB,MAAM,MAAM,GAAG,UAAS,KAAK,EAAA;;AAG3B,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAA,CAChB,IAAI,GAAG,CAAC,CAAA,CACR,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAChC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;QAMrC,IAAI,IAAI,GAAG,CAAC;AAAE,YAAA,IAAI,IAAI,IAAI,GAAG,KAAK;;QAGlC,EAAE,IAAI,IAAI;QACV,EAAE,IAAI,IAAI;QACV,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,GAAG,QAAQ;QACtB;aAAO,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,GAAG,QAAQ;QACtB;aAAO,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,GAAG,QAAQ;QACtB;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,GAAG,QAAQ;QACtB;QAEA,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACpB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,EAC5C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EACrC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AAC1B,QAAA,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY;AAE1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,KAAK,EAAE;;AAEf,gBAAA,MAAM,OAAO,GAAG,SAAS,CACvB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACT;AACD,gBAAA,IAAI,OAAO;oBAAE,IAAI,IAAI,OAAO;;AAG5B,gBAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACd,gBAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG;AACpC,gBAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC7B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;gBACpB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChE,gBAAA,YAAY,GAAG,SAAS,GAAG,SAAS;AACpC,gBAAA,IAAI,IAAI,YAAY,GAAG,MAAM;YAC/B;;AAGA,YAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChE,YAAA,YAAY,GAAG,SAAS,GAAG,SAAS;AACpC,YAAA,IAAI,IAAI,YAAY,GAAG,SAAS;QAClC;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,MAAM,MAAM,GAAG,UAAS,KAAK,EAAA;;;AAI3B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;;QAG9C,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGpB,QAAA,IAAI,UAAU;QACd,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB;;AAGA,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,QAAQ;AAC5C,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,QAAQ;;AAG5C,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;;AAGlC,QAAA,IAAI,UAAU;QACd,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB;;AAGA,QAAA,IAAI,YAAY,GAAG,UAAU,GAAG,UAAU;AAE1C,QAAA,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE;;AAEtD,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAChB,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QAClB;AACF,IAAA,CAAC;IAED,MAAM,QAAQ,GAAG,UAAS,KAAK,EAAA;;;AAI7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;;QAG9C,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGpB,QAAA,IAAI,UAAU;QACd,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB;;AAGA,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,SAAS;QAE7C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGvB,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGpB,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACrC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;;AAGrC,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG3B,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;;AAGlC,QAAA,IAAI,UAAU;QACd,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB;;AAGA,QAAA,IAAI,YAAY,GAAG,UAAU,GAAG,UAAU;AAE1C,QAAA,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE;;AAEtD,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAChB,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QAClB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,SAAS,GAAG,UAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAA;;;QAIvD,IAAI,GAAG,EAAE,GAAG;AACZ,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM;QAEzB,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACrD,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACtD,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;;AAGtD,QAAA,GAAG,GAAG,MAAM,GAAG,KAAK;AACpB,QAAA,GAAG,GAAG,MAAM,GAAG,KAAK;AACpB,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAS,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAA;;AAExD,QAAA,OAAO,KAAK,GAAG,QAAQ,GAAG,OAAO;AACnC,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,KAAK,GAAG,UAAS,OAAO,EAAA;;AAE9B,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAChB,KAAK,GAAG,GAAG,EACX,QAAQ,GAAG,GAAG;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;oBACvB,MAAM,CAAC,KAAK,CAAC;gBACf;qBAAO;oBACL,QAAQ,CAAC,KAAK,CAAC;gBACjB;YACF;YACA,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;QACpD;AACF,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,KAAK,GAAG,UAAS,CAAC,EAAA;;QAExB,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAC/B,CAAC,GAAG,CAAC;AACL,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,MAAM,GAAG,UAAS,CAAC,EAAA;;QAEzB,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAC/B,CAAC,GAAG,CAAC;AACL,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,KAAK,GAAG,UAAS,CAAC,EAAA;;QAExB,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,GAAG;QACjC,GAAG,GAAG,CAAC;AACP,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,MAAM,GAAG,UAAS,CAAC,EAAA;;QAEzB,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,GAAG;QACjC,GAAG,GAAG,CAAC;AACP,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,UAAU,GAAG,UAAS,CAAC,EAAA;;QAE7B,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,MAAM;QACpC,mBAAmB,GAAG,CAAC;QACvB,WAAW,GAAG,IAAI;AAClB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,YAAY,GAAG,UAAS,CAAC,EAAA;;QAE/B,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,gBAAgB;AAG9C,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,OAAO;AAChB;AACA;;ACtRA,MAAM,sBAAsB,GAAG,CAC7B,QAAQ,EACR,cAAc,EACd,UAAU,EACV,OAAO,KACL;AACF,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK;AAEvD,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG;AACtC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,GAAG,OAAO,GAAG,CAAC;IACvE,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,cAAc,IAAI,GAAG,CAAC,GAAG,UAAU,GAAG,OAAO,GAAG,CAAC;AAC3E,IAAA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AACxB,CAAC;AAEK,SAAU,eAAe,CAC7B,eAA2B,EAC3B,SAAiB,EACjB,IAAc,EACd,sBAAiC,EACjC,sBAAiC,EAAA;AAEjC,IAAA,MAAM,EACJ,OAAO,GAAG,CAAC,EACX,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,GAAG,EAChB,iBAAiB,GAAG,sBAAsB,EAC1C,iBAAiB,GAAG,sBAAsB,IAAI,sBAAsB,EACrE,GAAG,SAAS;IAEb,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QAC1C,MAAM,OAAO,GACX,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC3C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK;AACvB,kBAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnB,kBAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAC1B,MAAM,OAAO,GACX,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC3C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK;AACvB,kBAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnB,kBAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEzB,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,iBAAiB,CACjD,CAAC,CAAC,KAAK,CAAC,QAAQ,EAChB,cAAc,EACd,UAAU,EACV,OAAO,CACR;QACD,OAAO;AACL,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,CAAC,EAAE,OAAO;YACV,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClC,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,YAAY,EAAE;SACf;AACH,IAAA,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK;AACvC,QAAA,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrB,QAAA,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrB,QAAA,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtB,QAAA,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtB,QAAA,CAAC,EAAE,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,YAAY,EAAE;AACf,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,mBAAmB,GAAG,OAAO,EAAE;AAErC,IAAA,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,IAAA,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,IAAA,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;AAErC,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;AACjB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AACtB,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC;AACtE,YAAA,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC9C,YAAA,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;QAChD;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,eAAe;AACxB;AAEA,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAA;IAC3C,IAAI,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE;;QAEzB,OAAO;YACL,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC;YACjD,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO,GAAG;SAC9C;IACH;AACA,IAAA,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5D;;ACvHA,SAAS,QAAQ,CACf,IAAY,EACZ,OAAe,GAAG,EAClB,YAAoB,CAAC,EAAA;AAErB,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AACpB,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE;IAC1B,IAAI,WAAW,GAAG,EAAE;AAEpB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE;AAClE,YAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YACvB,WAAW,GAAG,IAAI;QACpB;aAAO;AACL,YAAA,WAAW,GAAG,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,IAAI;QAC7D;IACF;AACA,IAAA,IAAI,WAAW;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,WAAW,CAClB,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,UAAmB,EAAA;AAEnB,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,CAAA,MAAA,EAAS,KAAK,GAAG,GAAG,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,GAAG,CAAC,CAAA,EAAA,EAAK,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,GAAA,EAAM,IAAI,EAAE;QAC9I;AACA,QAAA,OAAO,CAAA,QAAA,EAAW,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,IAAI;IAC9I;;IAEA,IAAI,UAAU,EAAE;QACd,OAAO,CAAA,MAAA,EAAS,KAAK,CAAA,IAAA,EAAO,KAAK,IAAI,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE;IACxD;IACA,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,EAAK,IAAI,IAAI,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAI;AACxD;AAEA,SAAS,UAAU,CACjB,IAOC,EACD,EAAU,EACV,EAAU,EACV,KAAc,EAAA;AAEd,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,iBAAiB,GAAG;IACnD,MAAM,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EAAE,mBAAmB,EAChC,KAAK,EAAE,aAAa,EACpB,IAAI,GAAG,GAAG,EACV,MAAM,EACP,GAAG,IAAI;AAER,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,iBAAiB,GAAG;IAE9D,IAAI,WAAW,GAAG,mBAAmB;IACrC,IAAI,CAAC,WAAW,EAAE;QAChB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,WAAW;IACvE;IAEA,IAAI,KAAK,GAAG,aAAa;AACzB,IAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,QAAA,IAAI,WAAW,KAAK,WAAW,EAAE;AAC/B,YAAA,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO;QACpC;aAAO;AACL,YAAA,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,QAAQ;QACpC;IACF;IAEA,IAAI,UAAU,GAA+B,OAAO;AACpD,IAAA,IAAI,WAAW,KAAK,WAAW,EAAE;QAC/B,IAAI,KAAK,KAAK,OAAO;YAAE,UAAU,GAAG,KAAK;aACpC,IAAI,KAAK,KAAK,QAAQ;YAAE,UAAU,GAAG,QAAQ;IACpD;SAAO;AACL,QAAA,UAAU,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK;IACxC;IAEA,MAAM,UAAU,GAAG,EAAE;IACrB,MAAM,OAAO,GAAG,CAAC;AACjB,IAAA,MAAM,UAAU,GACd,KAAK,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;AACzD,IAAA,MAAM,UAAU,GACd,KAAK,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;;AAGzD,IAAA,MAAM,KAAK,GAAG,WAAW,KAAK;AAC5B,WAAG,UAAU,KAAK,KAAK,GAAG,CAAC,OAAO,GAAG,OAAO;UAC1C,CAAC;IAEL,IAAI,OAAO,GAAG,CAAC;IACf,MAAM,YAAY,GAAyB,EAAE;AAE7C,IAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,QAAA,YAAY,CAAC,IAAI,CACf,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,uBAAuB,EAC3B,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAE,KAAK,IAAI,SAAS,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAC,MAAM,EAAA,EAEhB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACtB,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,EAAA,EAClD,IAAI,CACC,CACT,CAAC,CACG,CACR;AACD,QAAA,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU;IAC1C;AAEA,IAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,QAAA,YAAY,CAAC,IAAI,CACf,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,uBAAuB,EAC3B,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAE,KAAK,IAAI,SAAS,EACxB,UAAU,EAAE,UAAU,EACtB,CAAC,EAAE,OAAO,EAAA,EAET,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACtB,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,UAAU,EAAA,EAC3D,IAAI,CACC,CACT,CAAC,CACG,CACR;IACH;IAEA,IAAI,QAAQ,GAAG,IAAI;AACnB,IAAA,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;AAC9C,QAAA,IAAI,WAAW,KAAK,WAAW,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC;YACV,IAAI,EAAE,GAAG,SAAS;AAClB,YAAA,IAAI,UAAU,KAAK,KAAK,EAAE;gBACxB,EAAE,GAAG,CAAC,SAAS;gBACf,EAAE,GAAG,CAAC;YACR;AAAO,iBAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAClC,gBAAA,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC;AACnB,gBAAA,EAAE,GAAG,SAAS,GAAG,CAAC;YACpB;AACA,YAAA,QAAQ,IACN,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,WAAW,EACrB,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;QACH;aAAO;AACL,YAAA,MAAM,WAAW,GACf,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU;AACpD,iBAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YAC1C,IAAI,EAAE,GAAG,CAAC;YACV,IAAI,EAAE,GAAG,WAAW;AACpB,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACtB,EAAE,GAAG,CAAC,WAAW;gBACjB,EAAE,GAAG,CAAC;YACR;AAAO,iBAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC;AACrB,gBAAA,EAAE,GAAG,WAAW,GAAG,CAAC;YACtB;AACA,YAAA,QAAQ,IACN,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,WAAW,EACrB,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;QACH;IACF;;;;IAKA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;AACxD,IAAA,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU;AAC/C,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;AACvD,IAAA,MAAM,YAAY,GAAG,eAAe,GAAG,QAAQ;IAC/C,IAAI,cAAc,GAAG,CAAC;AAEtB,IAAA,IAAI,WAAW,KAAK,WAAW,EAAE;AAC/B,QAAA,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,cAAc,GAAG,CAAC,YAAY;QAChC;IACF;AAAO,SAAA,IAAI,WAAW,KAAK,WAAW,EAAE;AACtC,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,cAAc,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC;QACtC;aAAO,IAAI,KAAK,KAAK,QAAQ,IAAI,EAAE,GAAG,CAAC,EAAE;YACvC,cAAc,GAAG,CAAC,YAAY;QAChC;IACF;AAEA,IAAA,MAAM,gBAAgB,GAAG,cAAc,KAAK;UACxC,CAAA,YAAA,EAAe,cAAc,CAAA,CAAA;UAC7B,SAAS;AAEb,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,iBAAiB,EAAC,SAAS,EAAE,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG,EAAA;QAChE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,yBAAyB,EAAC,SAAS,EAAE,gBAAgB,EAAA,EAAG,YAAY,CAAK;QACrF,QAAQ,CACP;AAER;AAEA,SAAS,aAAa,CACpB,IAAY,EACZ,OAAY,EACZ,KAAc,EACd,MAAe,EACf,MAAe,EAAA;;IAEf,MAAM,QAAQ,GAAyB,EAAE;IAEzC,QAAQ,IAAI;QACV,KAAK,gBAAgB,EAAE;YACrB,MAAM,WAAW,GACf,CAAC,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,KAAI,CAAC,KAAK,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,aAAa,KAAI,CAAC,CAAC;AACxD,YAAA,IAAI,WAAW,GAAG,CAAC,EAAE;gBACnB,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,CAAC,EAAE,WAAW,EACd,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;YACH;YACA;QACF;QACA,KAAK,cAAc,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,KAAI,CAAC;AACjC,YAAA,MAAM,MAAM,GAAG,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,KAAI,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;gBAC3B,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,cAAc,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;YACH;YACA;QACF;QACA,KAAK,gBAAgB,EAAE;YACrB,IAAI,OAAO,aAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAAE;gBACnB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;sBAC/C,OAAO,CAAC;AACV,sBAAE,CAAC,OAAO,CAAC,MAAM,CAAC;AACpB,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;YAClC;YACA;QACF;QACA,KAAK,cAAc,EAAE;AACnB,YAAA,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;AACrB,YAAA,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;YAErB,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,CAAC,MAAK,SAAS,EAAE;gBAC5B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,KAAK,IAAI,cAAc,EAC/B,eAAe,EAAC,KAAK,EAAA,CACrB,CACH;YACH;iBAAO,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,CAAC,MAAK,SAAS,EAAE;gBACnC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,KAAK,IAAI,cAAc,EAC/B,eAAe,EAAC,KAAK,EAAA,CACrB,CACH;YACH;iBAAO,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,MAAK,SAAS,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,EAAE,MAAK,SAAS,EAAE;;gBAEjE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,CAAC,EACL,MAAM,EAAE,KAAK,IAAI,cAAc,EAC/B,eAAe,EAAC,KAAK,EAAA,CACrB,CACH;YACH;iBAAO,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,MAAK,SAAS,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,EAAE,MAAK,SAAS,EAAE;;gBAEjE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,KAAK,IAAI,cAAc,EAC/B,eAAe,EAAC,KAAK,EAAA,CACrB,CACH;YACH;YACA;QACF;QACA,KAAK,SAAS,EAAE;AACd,YAAA,MAAM,WAAW,GAAG,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,IAAI,KAAI,OAAO;AAC5C,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;AAC9C,YAAA,MAAM,KAAK,GAAG,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,KAAI,EAAE;AAClC,YAAA,MAAM,UAAU,GAAG,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,MAAK,SAAS;AAE/C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,gBAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,cAAc,EAClB,CAAC,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,EACpD,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;YACH;YACA;QACF;;AAGF,IAAA,OAAO,2BAAG,SAAS,EAAC,oBAAoB,EAAA,EAAE,QAAQ,CAAK;AACzD;AAEA,SAAS,eAAe,CACtB,EAAU,EACV,EAAU,EACV,SAAc,EACd,KAAc,EACd,IAAa,EACb,OAAa,EAAA;IAEb,MAAM,QAAQ,GAAyB,EAAE;IAEzC,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,MAAM,GAAG,CAAC;IAEd,IACE,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,OAAO;SAC9C,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,CAAA,EACf;AACA,QAAA,MAAM,WAAW,GACf,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;AACtD,QAAA,IAAI,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW;YACtC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW;QACxC;IACF;AAAO,SAAA,IAAI,IAAI,KAAK,cAAc,IAAI,OAAO,EAAE;AAC7C,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,YAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,YAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;YACnB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,gBAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,gBAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;gBAChB,MAAM,CAAC,GACL,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM;AACvD,gBAAA,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC;AACrB,gBAAA,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC;YACvB;QACF;IACF;AAAO,SAAA,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAC3B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;AACjC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,GAAG,KAAK,GAAG,CAAC;YAClB,MAAM,GAAG,KAAK;QAChB;AAAO,aAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YAC/B,MAAM,GAAG,KAAK;AACd,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC;QACrB;IACF;IAEA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,IAAA,CAAA,GAAA,EAAC,EAAE,GAAG,MAAM,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,EAAE,GAAG,MAAM,GAAK,CAAC,CAAA,CACxC;AAED,IAAA,IAAI,eAAe,GAAG,GAAG,EAAE;AACzB,QAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,gBAAgB,EACpB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,KAAK,IAAI,cAAc,EAAA,CAC/B,CACH;QAED,IAAI,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,GAAG,MAAK,OAAO,EAAE;YAC9B,MAAM,SAAS,GAAG,EAAE;YACpB,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC;AAClD,YAAA,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;AAC9D,YAAA,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;AAC9D,YAAA,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;AAC9D,YAAA,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;AAE9D,YAAA,QAAQ,CAAC,IAAI,CACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,iBAAiB,EACrB,CAAC,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,EACtD,IAAI,EAAE,KAAK,IAAI,cAAc,EAC7B,MAAM,EAAC,MAAM,EAAA,CACb,CACH;QACH;IACF;AAEA,IAAA,OAAO,2BAAG,SAAS,EAAC,sBAAsB,EAAA,EAAE,QAAQ,CAAK;AAC3D;AAEA,SAAS,kBAAkB,CAAC,KAAU,EAAA;IACpC,MAAM,EACJ,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EACF,EAAE,EACF,IAAI,EACJ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,KAAK,EACL,SAAS,EACT,OAAO,EACP,MAAM,GAAG,EAAE,EACX,aAAa,EAAE,UAAU,EAC1B,GAAG,KAAK;IAET,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AAEjE,IAAA,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC;AACpB,IAAA,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC;AAEpB,IAAA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;AAAE,QAAA,EAAE,GAAG,EAAE,GAAG,CAAC;AAChD,IAAA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;AAAE,QAAA,EAAE,GAAG,EAAE,GAAG,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,OAAO;;AAG9D,IAAA,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACjE,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AAC/B,YAAA,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;AACtB,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;AACpC,YAAA,EAAE,GAAG,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC1C;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;AACpC,YAAA,EAAE,GAAG,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACxC,YAAA,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QACzB;IACF;IAEA,QACE,yCACE,SAAS,EAAE,cAAc,SAAS,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,EACjD,SAAS,EAAE,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,EAAA,aAAA,EACpB,UAAU,EAAA,EACnB,MAAM,CAAA;QAET,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;AAChG,QAAA,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/E,QAAA,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CACzD;AAER;AAEc,SAAU,kBAAkB,CAAC,KAAsB,EAAA;AAC/D,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK;AAC1B,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,QAAQ;AAEtC,IAAA,MAAM,cAAc,GAClB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,OAAO;IAE7D,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE;AAEvE,IAAA,IAAI,QAAQ,CAAC,WAAW,IAAI,iBAAiB,EAAE;AAC7C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE;AAClE,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE;QAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;AAC9C,gBAAA,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7C,gBAAA,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACP,gBAAA,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACP,gBAAA,EAAE,EAAE,KAAK;AACT,gBAAA,EAAE,EAAE;AACL,aAAA,CAAC;AACF,YAAA,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,iCACL,qBAAqB,EACjC,GAAG,EAAE,CAAA,iBAAA,EAAoB,CAAC,CAAA,CAAE,EAAA,EACxB,WAAW,EAAA,EACf,IAAI,EAAE,cAAc,EAAA,CAAA,CACpB;AAEN,QAAA,CAAC,CAAC;QAEF,OAAO,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,EAAI,KAAK,CAAK;IACvB;AAEA,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;AACzE,IAAA,MAAM,aAAa,GAAG,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,EAAE;IAEvE,QACE,oBAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,aAAA,EACL,qBAAqB,EACjC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,IAClB,QAAQ,EAAA,EACZ,IAAI,EAAE,cAAc,EAAA,CAAA,CACpB;AAEN;;ACziBA,SAAS,wBAAwB,CAC/B,SAAuC,EACvC,WAAoB,EAAA;IAEpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,WAAW,CAAC;IAClD,eAAe,CAAC,MAAK;QACnB,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACf,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,WAAW,CAAC,EAAE,EAAA;AAC5B,IAAA,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC;;;;AAI7B,IAAA,IAAI,cAAc,GAAG,YAAY,CAAC,EAAE,CAAC;AAErC,IAAA,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAA;AAC5B,QAAA,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAEhD,QAAA,OAAO,KAAA,CAAA,aAAA,CAAC,GAAG,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAI;IAC5D;AAEA,IAAA,IAAI,WAAW,GAAG,CAAC,QAAQ,KAAI;;QAC7B,IAAI,MAAM,GAAG,CAAA,EAAA,GAAA,UAAU,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,cAAc;AAC9C,QAAA,IAAI,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnD,OAAO,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;AAChE,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;AAChC;AAEA,SAAS,YAAY,CAAC,EAAE,EAAA;AACtB,IAAA,IAAI,MAAM,GAAG,IAAI,WAAW,EAAE;AAC9B,IAAA,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;IAEnB,SAAS,GAAG,CAAC,EAAE,EAAA;AACb,QAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjD;IAEA,SAAS,SAAS,CAAC,EAAE,EAAA;AACnB,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC;QACrC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;IACvD;IAEA,OAAO;QACL,QAAQ,GAAA;AACN,YAAA,OAAO,KAAK;QACd,CAAC;QACD;KACD;AACH;;AC5DA,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,MAAM;AACxD,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,aAAa,CAAC,OAAO,EAAA;QACnB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1B;AACD,CAAA,CAAC,CAAC;;ACNH,SAAS,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE;AAC5D,EAAE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AACxC,IAAI,OAAO;AACX,EAAE;AACF,EAAE,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE;AAC3E,IAAI,OAAO;AACX,EAAE;AACF,EAAE,OAAO;AACT;;AAEA,MAAM,qBAAqB,GAAG;AAC9B,EAAE,qBAAqB;AACvB,EAAE,mBAAmB;AACrB,EAAE;AACF,KAAK;AACL,EAAE,OAAO,CAAC,EAAE;AACZ,KAAK,GAAG,CAAC,2BAA2B;AACpC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtE;;AAEA,SAAS,2BAA2B,CAAC,CAAC,EAAE;AACxC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC3C,IAAI,OAAO;AACX,EAAE;AACF,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AAChC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAC3B,EAAE,MAAM,EAAE;AACV,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACjC;;AAEA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,EAAE,MAAM,IAAI,GAAG,IAAI,GAAG;AACtB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;AACzC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACrB,MAAM,OAAO;AACb,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAC/B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE;AACxB,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AACrC,MAAM;AACN,MAAM,IAAI,CAAC,KAAK,WAAW,EAAE;AAC7B,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AAClC,MAAM;AACN,MAAM,IAAI,CAAC,KAAK,SAAS,EAAE;AAC3B,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAC3B,MAAM;AACN,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE;AACxC,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5D,MAAM;;AAEN,MAAM;AACN,QAAQ,CAAC,CAAC,QAAQ;AAClB,QAAQ,CAAC,CAAC,QAAQ;AAClB,QAAQ,CAAC,CAAC,CAAC;AACX,QAAQ,CAAC,CAAC,CAAC;AACX,QAAQ,CAAC,CAAC,EAAE;AACZ,QAAQ,CAAC,CAAC,EAAE;AACZ,QAAQ,CAAC,CAAC,KAAK;AACf,QAAQ,CAAC,CAAC,IAAI;AACd,QAAQ,CAAC,CAAC,GAAG;AACb,QAAQ,CAAC,CAAC,cAAc;AACxB,QAAQ,CAAC,CAAC,EAAE;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ;AACR,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AAC7I,MAAM;;AAEN,MAAM,OAAO;AACb,IAAI;AACJ,IAAI,OAAO;AACX,EAAE,CAAC;AACH;;AAEA,SAAS,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,EAAE,eAAe,EAAE;AACjE,EAAE,MAAM,EAAE,SAAS,GAAG,eAAe,EAAE,GAAG;;AAE1C,EAAE,IAAI,WAAW,GAAG;;AAEpB,EAAE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACrC,IAAI,WAAW,GAAG,MAAM;AACxB,EAAE;;AAEF,EAAE,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK;AACxD,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI;AACjE,EAAE,MAAM,KAAK;AACb,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC;AACvC,KAAKc,cAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI;AACvC,QAAQ;AACR,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;AACnD,EAAE,OAAO;AACT;;AAEA,SAAS,cAAc;AACvB,EAAE,QAAQ;AACV,EAAE,SAAS,GAAG,CAAC;AACf,EAAE,UAAU,GAAG,EAAE;AACjB,EAAE;AACF,EAAE;AACF,EAAE,MAAM,EAAE,UAAU,GAAG,gBAAgB,EAAE,GAAG;;AAE5C,EAAE,IAAI,YAAY,GAAG;;AAErB,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,YAAY,GAAG,MAAM;AACzB,EAAE;AACF,EAAE,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK;AACxD,EAAE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI;AAC7D;AACA,EAAE,MAAM,MAAM;AACd,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,QAAQ,CAAC;AACzC,KAAKA,cAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI;AACvC,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,UAAU;AAChE,SAAS,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC;;AAErE,EAAE,OAAO;AACT;;ACpEA,MAAM,kBAAkB,GAAG,CACzB,qBAAiC,EACjC,mBAAuC,EACvC,KAA2B,KACzB;AAEF,IAAA,MAAM,EACJ,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EACtE,GAAG,mBAAmB;AAEvB,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;AACzB,QAAA,OAAO,qBAAqB;IAC9B;IAEA,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM;IAE3E,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK;IAEjE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK;IAEjC,MAAM;QACJ,OAAO,MAAM,KAAK;AAChB,cAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;cAC1D,MAAM;AAEZ,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AAC1B,QAAA,MAAM,mBAAmB,GAAG,eAAe,CACzC,qBAAqB,EACrB,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,iBAAiB,CACxB;AACD,QAAA,OAAO,mBAAmB;IAC5B;AAAO,SAAA,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;QACvC,MAAM,EACJ,YAAY,EACZ,MAAM,GAAG,SAAS,EAClB,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,EAAE,EACf,OAAO,GAAG,CAAC,EACX,kBAAkB,GAAG,EAAE,EACxB,GAAG,MAAM;AACV,QAAA,MAAM,gBAAgB,GACpB,MAAM,KAAK;cACP,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;AACnC,cAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACtB,kBAAE;AACF,kBAAE,CAAC,MAAM,CAAC;AAEd,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AAC3D,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AACvD,QAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC;QAE7D,MAAM,SAAS,GAAG,EAAE;QACpB,MAAM,UAAU,GAAG,EAAE;QACrB,MAAM,QAAQ,GAAG,EAAE;QACnB,MAAM,WAAW,GAAG,EAAE;AAEtB,QAAA,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE;AACzC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ;AAErC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AACzC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;YAEzC,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ;AAC1C,YAAA,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ;YACtD,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ;AACxC,YAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ;AAExD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;AAElE,YAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,gBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YACvB;AAAO,iBAAA,IAAI,SAAS,KAAK,OAAO,EAAE;AAChC,gBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB;AAAO,iBAAA,IAAI,OAAO,KAAK,OAAO,EAAE;AAC9B,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB;iBAAO;AACL,gBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB;QACF;;AAIA,QAAA,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;AAClC,YAAA,MAAM,EACJ,kBAAkB,CAAC,GAAG,KAAK;AACzB,kBAAE,CAAC,GAAG,kBAAkB,CAAC;AACzB,kBAAE,CAAC,GAAG,MAAM,CAAC,GAAG;AACpB,YAAA,MAAM,EACJ,kBAAkB,CAAC,MAAM,KAAK;kBAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;AAC/B,kBAAE;AACF,sBAAE,IAAI,CAAC,CAAC;sBACN,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACxB;aACE,KAAK,CACJ,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAClB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CACrB,KAAK,EACL,cAAc,CACZ,CAAC,CAAC,KAAK,CAAC,QAAQ,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,CACjB,GAAG,OAAO,CACZ;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,OAAO,EAAE;AAEZ,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;AACnC,YAAA,MAAM,EACJ,kBAAkB,CAAC,GAAG,KAAK;AACzB,kBAAE,CAAC,GAAG,kBAAkB,CAAC;AACzB,kBAAE;AACF,sBAAE;AACF,sBAAE,CAAC,GAAG,MAAM,CAAC,GAAG;AACpB,YAAA,MAAM,EACJ,kBAAkB,CAAC,MAAM,KAAK;kBAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;kBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACxB;aACE,KAAK,CACJ,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YACnB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CACrB,KAAK,EACL,cAAc,CACZ,CAAC,CAAC,KAAK,CAAC,QAAQ,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,CACjB,GAAG,OAAO,CACZ;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,OAAO,EAAE;AAEZ,QAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;AACjC,YAAA,MAAM,EACJ,kBAAkB,CAAC,IAAI,KAAK;AAC1B,kBAAE,CAAC,GAAG,kBAAkB,CAAC;AACzB,kBAAE;AACF,sBAAE;AACF,sBAAE,CAAC,GAAG,MAAM,CAAC,IAAI;AACrB,YAAA,MAAM,EACJ,kBAAkB,CAAC,KAAK,KAAK;kBACzB,IAAI,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;kBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACxB;aACE,KAAK,CACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YACjB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzD,YAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CACrB,KAAK,EACL,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC;AAC9D,gBAAA,OAAO,CACV;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,OAAO,EAAE;AAEZ,QAAA,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;AACpC,YAAA,MAAM,EACJ,kBAAkB,CAAC,IAAI,KAAK;AAC1B,kBAAE,CAAC,GAAG,kBAAkB,CAAC;AACzB,kBAAE,CAAC,GAAG,MAAM,CAAC,IAAI;AACrB,YAAA,MAAM,EACJ,kBAAkB,CAAC,KAAK,KAAK;kBACzB,IAAI,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;AAC/B,kBAAE;AACF,sBAAE,IAAI,CAAC,CAAC;sBACN,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACxB;aACE,KAAK,CACJ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YACpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzD,YAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CACrB,KAAK,EACL,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC;AAC9D,gBAAA,OAAO,CACV;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,OAAO,EAAE;AAEZ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,WAAW,CAAC,GAAG,CAChB,CAAC,CAAC,KACA,cAAc,CACZ,CAAC,CAAC,KAAK,CAAC,QAAQ,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,CACjB,GAAG,OAAO,CACd,CACF;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,KACA,cAAc,CACZ,CAAC,CAAC,KAAK,CAAC,QAAQ,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,CACjB,GAAG,OAAO,CACd,CACF;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,SAAS,CAAC,GAAG,CACd,CAAC,CAAC,KACA,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC;YAChE,OAAO,CACV,CACF;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,GAAG,UAAU,CAAC,GAAG,CACf,CAAC,CAAC,KACA,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC;YAChE,OAAO,CACV,CACF;;AAID,QAAA,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE;AACzC,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,EAAE;AAC3C,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE;AACvC,QAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE;QAE7C,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC5B,MAAM,CAAC,GACL,CAAC;AACD,gBAAA,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU;AAC1C,gBAAA,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC;YAE5C,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;AAE1B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC3D,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW;oBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW;AACrD,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO;YAC7C;AACF,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC7B,YAAA,MAAM,CAAC,GACL,IAAI,CAAC,CAAC,CAAC;AACP,gBAAA,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,WAAW;AAC5C,gBAAA,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;YAC7C,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU;YAExC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;AAE1B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC3D,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW;oBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW;AACrD,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM;YAC5C;AACF,QAAA,CAAC,CAAC;QAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC3B,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU;YACtC,MAAM,CAAC,GACL,CAAC;AACD,gBAAA,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,SAAS;AACxC,gBAAA,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC9B,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU;AACzC,YAAA,MAAM,CAAC,GACL,IAAI,CAAC,CAAC,CAAC;AACP,gBAAA,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,YAAY;AAC9C,gBAAA,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC;YAE9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,qBAAqB;IAC9B;AACA,IAAA,OAAO,qBAAqB;AAC9B,CAAC;AAED,MAAM,sBAAsB,GAAG,CAC7B,KAA2B,EAC3B,WAAqB,KACP;IACd,MAAM,mBAAmB,GAAG;AACzB,SAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAClD,SAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;AAE/C,IAAA,OAAO,mBAAmB;AAC5B,CAAC;AAED,MAAM,uBAAuB,GAAG,CAC9B,KAA2B,EAC3B,WAAqB,KACT;IACZ,MAAM,mBAAmB,GAAG;AACzB,SAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnD,SAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;AAE/C,IAAA,OAAO,mBAAmB;AAC5B,CAAC;AAED,MAAM,iBAAiB,GAAG,CACxB,KAA2B,EAC3B,KAA2B,KACzB;IACF,IAAI,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,EACjD,wBAAwB,GAAG,KAAK,CAAC,sBAAsB,EACvD,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,EACnD,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;IAE3C,IAAI,sBAAsB,GAAG,EAAE;IAC/B,IAAI,uBAAuB,GAAG,EAAE;IAEhC,MAAM,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,EACzD,8BAA8B,GAAG,KAAK,CAAC,8BAA8B;AAEvE,IAAA,MAAM,EACJ,WAAW,EACX,kBAAkB,GAAG,KAAK,EAC1B,IAAI,EACJ,iBAAiB,EACjB,kBAAkB,EACnB,GAAG,KAAK;AAET,IAAA,MAAM,mBAAmB,GACvB,OAAO,kBAAkB,KAAK;AAC5B,UAAE;AACF,UAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;AAE/D,IAAA,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,mBAAmB;IAEhD,IAAI,iBAAiB,EAAE;QACrB,MAAM,qBAAqB,GAAe,sBAAsB,CAC9D,KAAK,EACL,WAAW,CACZ;QAED,wBAAwB,GAAG,qBAAqB,CAC9C,qBAAqB,EACrB,mBAAmB,EACnB,IAAI,CACL;AAED,QAAA,IAAI,kBAAkB,KAAK,KAAK,EAAE;YAChC,mBAAmB,GAAG,qBAAqB;QAC7C;AAEA,QAAA,IACE,mBAAmB,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM;AAC3D,YAAA,sBAAsB,KAAK,wBAAwB;YACnD,8BAA8B,KAAK,WAAW,EAC9C;YACA,mBAAmB,GAAG,kBAAkB,CACtC,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,CACN;QACH;aAAO;;YAEL,mBAAmB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAW,EAAE,CAAC,KAAI;AACjE,gBAAA,MAAM,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAa;AACxD,gBAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAA,EAC5B,CAAC,CAAC,KAAK,CAAC,QAAQ,CACpB;AAED,gBAAA,OAAO,KAAA,CAAA,aAAA,CAACC,kBAAU,EAAA,EAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAI;AAC1D,YAAA,CAAC,CAAC;QACJ;QAEA,sBAAsB,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,gBAAgB,CAAC;IACxE;IAEA,IAAI,kBAAkB,EAAE;AACtB,QAAA,uBAAuB,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC;IACvE;IAEA,OAAO;AACL,QAAA,cAAc,EAAE,sBAAsB;AACtC,QAAA,eAAe,EAAE,uBAAuB;AACxC,QAAA,mBAAmB,EAAE,mBAAmB;AACxC,QAAA,sBAAsB,EAAE,wBAAwB;AAChD,QAAA,8BAA8B,EAAE;KACjC;AACH,CAAC;AAEa,SAAU,eAAe,CAAC,KAA2B,EAAA;AACjE,IAAA,MAAM,EACJ,cAAc,EACd,MAAM,EACN,IAAI,EACJ,WAAW,EAAE,eAAe,EAC5B,kBAAkB,EACnB,GAAG,KAAK;AAET,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,KAAK,KAAI;QACnC,OAAO,KAAK,CAAC,OAAO;AACtB,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,WAAW,GACb,OAAO,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,eAAe;AAErE,IAAA,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,aAAa,CAAC;AAE9D,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;QACzB,aAAa,CAAC,CAAC,CAAC;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,sBAAsB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACvB,KAAK,CAAA,EAAA,EACR,WAAW;AACX,QAAA,YAAY,GACb;AAED,IAAA,MAAM,mBAAmB,GACvB,OAAO,kBAAkB,KAAK;AAC5B,UAAE;AACF,UAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;AAE/D,IAAA,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,mBAAmB;IAEhD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IACrE,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC3D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC7D,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC3E,MAAM,CAAC,8BAA8B,EAAE,oCAAoC,CAAC,GAC1E,QAAQ,CAAC,WAAW,CAAC;IAEvB,MAAM,qBAAqB,GAAe,sBAAsB,CAC9D,sBAAsB,EACtB,WAAW,CACZ;AAED,IAAA,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CACxD,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CACtE;IAED,MAAM,qBAAqB,GAAG,qBAAqB,CACjD,qBAAqB,EACrB,mBAAmB,EACnB,IAAI,CACL;IAED,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CACvE;AAED,QAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,sBAAsB,EAAE;YAC7D,mBAAmB;YACnB,sBAAsB;YACtB,8BAA8B;YAC9B,qBAAqB;YACrB;AACD,SAAA,CAAC;AAEF,QAAA,yBAAyB,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAC3D,QAAA,4BAA4B,CAAC,YAAY,CAAC,sBAAsB,CAAC;AACjE,QAAA,oCAAoC,CAClC,YAAY,CAAC,8BAA8B,CAC5C;AACD,QAAA,oBAAoB,CAAC,YAAY,CAAC,cAAc,CAAC;AACjD,QAAA,qBAAqB,CAAC,YAAY,CAAC,eAAe,CAAC;AACrD,IAAA,CAAC,EAAE;QACD,qBAAqB;QACrB,WAAW;AACX,QAAA,WAAW,CAAC,MAAM;AAClB,QAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;AAClD,KAAA,CAAC;AAEF,IAAA,IAAI,cAAc;IAClB,IAAI,cAAc,EAAE;AAClB,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACd,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE;SACzB;QACD,MAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,cAAc;AAC/D,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC;AAC7C,QAAA,cAAc,IACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EAAA;AACpD,YAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,cAAc,EAAA,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAA,CAAA,CAAI,CAC9D,CACL;IACH;;IAGA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,UAAU,EAAE;AACb,SAAA,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,sBAAsB,EAChC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EACd,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,IAAI,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI;AACxB,gBAAA,GAAG,EAAE,CAAA,EAAG,MAAM,CAAC,GAAG,CAAA,EAAA,CAAI;AACtB,gBAAA,QAAQ,EAAE;AACX,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;gBACG,cAAc;AACd,gBAAA,cAAc,CACb,CACA;AACN,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACtB,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACrB,gBAAA,IAAI,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI;AACxB,gBAAA,GAAG,EAAE,CAAA,EAAG,MAAM,CAAC,GAAG,CAAA,EAAA;AACnB,aAAA,EAAA,EAEA,eAAe,CACZ,CACF;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/kBA,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AA6D5D,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,mBAAmB,EACnB,SAAS,EACT,SAAS,EACc,KAAI;IAC3B,MAAM,aAAa,GAAG,EAAE;AACxB,IAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,qBAAqB,KAAI;AACpD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;AACpC,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;gBACpC,MAAM,UAAU,GAAG,CAAC,CAAS,KAC3B,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrC,oBAAA,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,oBAAA,eAAe,CAAC,CAAC,EAAE,CAAC;AACrB,iBAAA,CAAC;AAEJ,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACjB,oBAAA,aAAa,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,CAAC,CAAA,EAAA,EACJ,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC,EACnC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,IAC9B;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,aAAa;AACtB,CAAC;AAEM,MAAM,eAAe,GAAG,CAAC,EAC9B,IAAI,EACJ,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACW,KAAI;IACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,QAAA,IAAI,GAAG,CAAC,IAAI,CAAC;IACf;IACA,MAAM,aAAa,GAAyB,EAAE;IAE9C,gBAAgB,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,SAAS,KAAI;QACzD,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,MAAM,KAAI;YAC5C,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,MAAM,KAAI;AAC5C,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAgB,KAAI;oBAChC,MAAM,gBAAgB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,CAAC,CAAA,EAAA,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAA,CAAE;AAE5D,oBAAA,gBAAgB,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACzD,wBAAA,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;wBAElC,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7C,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;wBAChD,cAAc,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;wBACnD,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7C,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;wBAChD,cAAc,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;AAEnD,wBAAA,OAAO,cAAc;AACvB,oBAAA,CAAC,CAAC;oBACF,gBAAgB,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM;AACnE,oBAAA,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACtC,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,aAAa;AACtB,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,WAAW,EACS,KAAI;IACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC1B,YAAA,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACjD,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnD,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YAChC;iBAAO;gBACL,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC9B,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,WAAW,GAAG,CAAC,EAC1B,IAAI,GAAG,aAAa,EACpB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,WAAW,EACM,KAAI;AACrB,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB;;;;AAIE;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACzB,gBAAA,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B;YACA,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK;QACzC;AACA,QAAA,SAAS,EAAE;IACb;IAEA,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,IAAI,IAAI,KAAK,uBAAuB,IAAI,IAAI,KAAK,oBAAoB,EAAE;QACrE,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD;AACA,IAAA,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;AAE5C,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEA,IAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC;IAEhE,KAAK,MAAM,GAAG,SAAS,CAAC,IAAI,QAAQ,EAAE;QACpC,IAAI,cAAc,GAAG,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC;AAEtB,QAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,KACzC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,MAAA,GAAA,MAAA,GAAD,CAAC,CAAG,KAAK,CAAC,IAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAC9B;AACD,QAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,KACzC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,MAAA,GAAA,MAAA,GAAD,CAAC,CAAG,KAAK,CAAC,IAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAC9B;AAED,QAAA,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE;AAC1C,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAChB,IACE,IAAI,KAAK,aAAa;AACtB,wBAAA,IAAI,KAAK,gBAAgB;wBACzB,IAAI,KAAK,uBAAuB,EAChC;wBACA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,iBAAiB;AAC5C,wBAAA,CAAC,CAAC,OAAO,GAAG,OAAO;AACnB,wBAAA,IAAI,IAAI,KAAK,aAAa,EAAE;4BAC1B,CAAC,CAAC,WAAW,CAAC;gCACZ,CAAC,CAAC,WAAW,CAAC;oCACd,CAAC,CAAC,QAAQ,CAAC;wCACX,CAAC,CAAC,WAAW,CAAC;AACZ,4CAAA,OAAO;wBACb;6BAAO;AACL,4BAAA,MAAM,UAAU,GAAG,iBAAiB,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO;4BACvD,CAAC,CAAC,WAAW,CAAC;AACZ,gCAAA,iBAAiB,KAAK;AACpB,sCAAE;AACF,sCAAE,EAAE,cAAc,GAAG,iBAAiB,CAAC;4BAC3C,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU;AACzC,4BAAA,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU,GAAG,CAAC;wBAClD;oBACF;yBAAO;AACL,wBAAA,CAAC,CAAC,WAAW,CAAC,GAAG,cAAc;wBAC/B,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC;AACvC,wBAAA,CAAC,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;oBAChD;AACA,oBAAA,cAAc,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC5B;qBAAO;oBACL,IACE,IAAI,KAAK,aAAa;AACtB,wBAAA,IAAI,KAAK,gBAAgB;wBACzB,IAAI,KAAK,uBAAuB,EAChC;wBACA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,iBAAiB;AAC5C,wBAAA,CAAC,CAAC,OAAO,GAAG,OAAO;AAEnB,wBAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,4BAAA,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,OAAO;wBACzD;6BAAO;AACL,4BAAA,MAAM,UAAU,GAAG,iBAAiB,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO;4BACvD,CAAC,CAAC,WAAW,CAAC;AACZ,gCAAA,iBAAiB,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,iBAAiB;4BAClE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU;AACzC,4BAAA,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU,GAAG,CAAC;wBAClD;oBACF;yBAAO;AACL,wBAAA,CAAC,CAAC,WAAW,CAAC,GAAG,cAAc;wBAC/B,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC;AACvC,wBAAA,CAAC,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;oBAChD;AACA,oBAAA,cAAc,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC5B;YACF;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,EACxB,IAAI,EACJ,EAAE,EACF,EAAE,EACF,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACI,KAAI;IACnB,IAAI,EAAE,EAAE;AACN,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC7B,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;;;gBAG9B,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YACtC;QACF;IACF;IAEA,IAAI,EAAE,EAAE;AACN,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC7B,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC9B,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjE;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,EAC7B,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,WAAW,EACX,WAAW,EACX,IAAI,GAAG,YAAY,EACC,KAAI;AACxB,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,IAAI,eAAe,GAAG,CAAC;QACvB,MAAM,SAAS,GACb,IAAI,KAAK,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI;AAEjE,QAAA,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AAC7B,YAAA,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC;YAClC,KAAK,CAAC,WAAW,CAAC;gBAChB,KAAK,CAAC,QAAQ,CAAC;oBACf,KAAK,CAAC,WAAW,CAAC;AAChB,wBAAA,eAAe;YACnB,IAAI,EAAE,EAAE;gBACN,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC9B,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC/D;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,EACxB,IAAI,GAAG,UAAU,EACjB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACM,KAAI;AACrB,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC5B,gBAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7B;YACA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC;IACF;AAEA,IAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;QACtB,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,CAAC;QACV;QACA,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,EAAE;QACX;QACA,OAAO,EAAE;AACX,IAAA,CAAC;IACD,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,EAAE;AAC5D,QAAA,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;YAClB,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,CAAC;YACV;YACA,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO,EAAE;YACX;YACA,OAAO,EAAE;AACX,QAAA,CAAC;IACH;IAEA,KAAK,MAAM,GAAG,cAAc,CAAC,IAAI,WAAW,EAAE;QAC5C,IAAI,cAAc,GAAG,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC;AAEtB,QAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE7B,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;YAElC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,iBAAiB,EAAE;AACrD,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACpB,KAAK,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/C,oBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACtD,oBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,cAAc;AACnC,oBAAA,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC;gBAChC;qBAAO;oBACL,KAAK,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/C,oBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACtD,oBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,cAAc;AACnC,oBAAA,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC;gBAChC;YACF;iBAAO;AACL,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;AACnB,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;AACtB,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;YAC3B;AACA,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,WAAW,GAAG,CACzB,UAAoB,EACpB,MAAqB,EACrB,gBAAA,GAA2B,EAAE,KAC3B;IACF,IAAI,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,kBAAkB,GAAG,EAAE;AAC3B,IAAA,MAAM,gBAAgB,GAAG;AACvB,QAAA,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB;KACrD;IACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,KAAI;QAC/B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AAE/C,QAAA,IAAI,cAAc,GAAG,aAAa,KAAK,iBAAiB;QACxD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;AAE7D,QAAA,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AACzC,YAAA,cAAc,GAAG,eAAe,KAAK,mBAAmB;QAC1D;QAEA,IAAI,cAAc,EAAE;AAClB,YAAA,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC;aAAO;YACL,MAAM,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;YACnE,IAAI,MAAM,GAAG,SAAS;YACtB,IAAI,MAAM,GAAG,KAAK;YAClB,IAAI,aAAa,GAAG,eAAe;YAEnC,IAAI,CAAC,GAAG,CAAC;YACT,OAAO,CAAC,GAAG,gBAAgB,IAAI,eAAe,KAAK,aAAa,EAAE;gBAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAChC,MAAM,UAAU,GAAG,oBAAoB,CAAC;oBACtC,MAAM;oBACN,MAAM;oBACN,iBAAiB;oBACjB,UAAU;oBACV;AACD,iBAAA,CAAC;AACF,gBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;AACtB,gBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;gBACtB,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAClD,gBAAA,CAAC,EAAE;YACL;AACA,YAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,YAAA,kBAAkB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AACpC,YAAA,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACzE,iBAAiB,GAAG,aAAa;QACnC;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,gBAAgB;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,IAAI,EAOL,EAAA;IACC,MAAM,YAAY,GAAG,EAAE;AACvB,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;QACnB,YAAY,CAAC,GAAG,CAAC;AACf,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK;AACrB,kBAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI;kBAC9B,SAAS;AACjB,IAAA,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;AAEvD,IAAA,IAAI,aAAa,KAAK,aAAa,EAAE;AACnC,QAAA,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B;AACA,IAAA,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;AAC/B;AAEM,SAAU,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,GAAG,EAKJ,EAAA;IACC,MAAM,UAAU,GAAG,EAAE;IACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,QAAA,IAAI,GAAG,CAAC,IAAI,CAAC;IACf;IACA,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3E;IAEA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,QAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,WAAW,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;AACvE,YAAA,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC3B,YAAA,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,YAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,UAAU;AACnB;;ACpgBA,MAAM,kBAAkB,GAAG,CAAC,KAAK,KAAI;IACnC,MAAM,EACJ,UAAU,EACV,SAAS,EACT,WAAW,GAAG,WAAW,EACzB,eAAe,EACf,gBAAgB,EAChB,IAAI,EACJ,gBAAgB,EAAA,GAEd,KAAK,EADJ,IAAI,GAAA,MAAA,CACL,KAAK,EATH,CAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,kBAAA,CASL,CAAQ;AAET,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,eAAe;IAEhC,MAAM,QAAQ,GAAG,eAAe,CAAC;AAC/B,QAAA,IAAI,EAAE,IAAI;QACV,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;AACpC,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,CAAC,CAAC,CAAC;QACd,SAAS,EAAE,CAAC,CAAC;AACd,KAAA,CAAC;;AAGF,IAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;QACjC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,sCAAW,CAAC,CAAC,IAAI,CAAA,EAAK,CAAC,CAAA,CAAG,CAAC;IACrE;AAEA,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEzE,MAAM,UAAU,GAAG,IAAI;SACpB,KAAK,CAAC,WAAW;SACjB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SACZ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhB,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MACpB,8CAAU,IAAI,EAAA,EACZ,SAAS,EAAE,SAAS,EAEpB,GAAG,EAAE,CAAA,YAAA,EAAe,CAAC,EAAE,EACvB,KAAK,EAAE,CAAC,CAAC,GAAG,EACZ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAA,CAAA,CACvB,CACH,CAAC;AACJ,CAAC;AAEa,SAAU,WAAW,CAAC,KAAuB,EAAA;AACzD,IAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;IAEvC,OAAO,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,EAAI,KAAK,CAAK;AACvB;;ACjDA,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,KAAI;AAC9D,IAAA,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK;IAC1B,IAAI,WAAW,GAAG,CAAC;AACnB,IAAA,IAAI,QAAQ,GAAG,CAAA,GAAA,EAAM,CAAC,EAAE;AACxB,IAAA,MAAM,GAAG,GAAG,MAAM,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;AACvC,IAAA,OAAO,WAAW,IAAI,KAAK,EAAE;AAC3B,QAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,CAAC,EAAE;AAClC,QAAA,IAAI,WAAW,GAAG,KAAK,EAAE;AACvB,YAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,WAAW,GAAG,IAAI,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QAC1D;QACA,WAAW,IAAI,IAAI;IACrB;AACA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,KAAI;AAC7D,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,KAAK;IAC3B,IAAI,WAAW,GAAG,CAAC;AACnB,IAAA,IAAI,QAAQ,GAAG,CAAA,CAAA,EAAI,CAAC,IAAI;AACxB,IAAA,MAAM,GAAG,GAAG,MAAM,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAC;AACxC,IAAA,OAAO,WAAW,IAAI,MAAM,EAAE;AAC5B,QAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,WAAW,EAAE;AAClC,QAAA,IAAI,WAAW,GAAG,MAAM,EAAE;AACxB,YAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAA,EAAI,WAAW,GAAG,IAAI,GAAG,CAAC,EAAE;QAC1D;QACA,WAAW,IAAI,IAAI;IACrB;AACA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAI;IACxD,IAAI,KAAK,GAAG,EAAE;IACd,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,gBAAgB;IAC3C,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACvC,KAAK,GAAG,2BAA2B,CACjC,SAAS,EACT,KAAK,EACL,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,EAC3B,MAAM,CACP;IACH;SAAO;QACL,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACxC,KAAK,GAAG,yBAAyB,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC;IAClE;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,wBAAwB,GAAG,CAAC,EAChC,EAAE,EACF,MAAM,EACN,CAAC,EAED,SAAS,GAAG,EAAE,EACd,UAAU,EACX,KAAI;AACH,IAAA,IAAI,IAAI,GAAG,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,EAAE;AACjD,IAAA,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE;AACzB,QAAA,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;IACzC;AACA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,CAAC,EAEV,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,CAAC,EAAE,IAAI,EACP,SAAS,EAAE,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAA,CAChD;AAER,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,KAAI;IACtE,MAAM,UAAU,GAAG,CAAC;AACpB,IAAA,IAAI,IAAI,GAAG,CAAA,IAAA,EAAO,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,EAAE;AAC3C,IAAA,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,EAAE;IAC5D;AAAO,SAAA,IAAI,MAAM,KAAK,OAAO,EAAE;QAC7B,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,GAAG,UAAU,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,EAAE;IAC5D;AAAO,SAAA,IAAI,MAAM,KAAK,KAAK,EAAE;QAC3B,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,GAAG,UAAU,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,EAAE;IAC5D;AAAO,SAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;QAC9B,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE;IAC5D;AACA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,CAAC,EAEV,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,CAAC,EAAE,IAAI,EACP,SAAS,EAAE,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAA,CAC3D;AAEN,CAAC;SAEe,kBAAkB,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC,UAAU,EAAE;QACf,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAChD;AACA,QAAA,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;IACpE;AAEA,IAAA,OAAO,UAAU;AACnB;SAEgB,UAAU,CAAC,EACzB,UAAU,GAAG,MAAM,SAAS,EAC5B,OAAO,GAAG,CAAC,EACX,KAAK,EACL,KAAK,EACL,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EACxD,MAAM,GAAG,MAAM,EACf,IAAI,EACJ,MAAM,GAAG,KAAK,EACd,QAAQ,GAAG;MACP;AACF,MAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM;AAC5C,WAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACrB,WAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACxB,UAAU,EACO,EAAA;;IAEjB,IAAI,UAAU,GAAG,EAAE,EACjB,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,eAAe,GAAG,CAAC,EACnB,gBAAgB,GAAG,CAAC,EACpB,aAAa,GAAG,QAAQ;IAE1B,QAAQ,MAAM;AACZ,QAAA,KAAK,KAAK;YACR,SAAS,GAAG,IAAI;YAChB,SAAS,GAAG,IAAI;YAChB,OAAO,GAAG,IAAI;YACd,OAAO,GAAG,IAAI;AACd,YAAA,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC1B,UAAU,GAAG,IAAI;YACjB,UAAU,GAAG,IAAI;AACjB,YAAA,eAAe,IAAI,EAAE,GAAG,OAAO;YAC/B;AACF,QAAA,KAAK,QAAQ;YACX,SAAS,GAAG,IAAI;YAChB,SAAS,GAAG,IAAI;YAChB,OAAO,GAAG,IAAI;YACd,OAAO,GAAG,IAAI;YACd,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;YAClE,UAAU,GAAG,IAAI;YACjB,UAAU,GAAG,IAAI;AACjB,YAAA,eAAe,IAAI,EAAE,GAAG,OAAO;YAC/B;AACF,QAAA,KAAK,OAAO;YACV,SAAS,GAAG,IAAI;YAChB,SAAS,GAAG,IAAI;YAChB,OAAO,GAAG,IAAI;YACd,OAAO,GAAG,IAAI;YACd,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;YAClE,UAAU,GAAG,IAAI;YACjB,UAAU,GAAG,IAAI;AACjB,YAAA,eAAe,IAAI,CAAC,GAAG,OAAO;YAC9B,gBAAgB,IAAI,CAAC;YACrB,aAAa,GAAG,OAAO;YACvB;;AAEF,QAAA;YACE,SAAS,GAAG,IAAI;YAChB,SAAS,GAAG,IAAI;YAChB,OAAO,GAAG,IAAI;YACd,OAAO,GAAG,IAAI;AACd,YAAA,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC1B,UAAU,GAAG,IAAI;YACjB,UAAU,GAAG,IAAI;AACjB,YAAA,eAAe,IAAI,CAAC,GAAG,OAAO;YAC9B,gBAAgB,IAAI,CAAC;YACrB,aAAa,GAAG,KAAK;YACrB;;AAEJ,IAAA,IAAI,cAAc,GAChB,UAAU,YAAY,QAAQ,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU;AAEtE,IAAA,IACE,UAAU;QACV,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EACjE;AACA,QAAA,cAAc,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC;IACzD;IAEA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,OAAO;YACL,CAAC,SAAS,GAAG,YAAY;YACzB,CAAC,SAAS,GAAG,YAAY;AACzB,YAAA,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;AACxB,YAAA,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;AACxB,YAAA,CAAC,UAAU,GAAG,YAAY,GAAG,gBAAgB;YAC7C,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe;YAC7C,aAAa;AACb,YAAA,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,YAAA,KAAK,EAAE;SACR;AACH,IAAA,CAAC,CAAC;AACJ;AAEO,MAAM,UAAU,GAAG,CAAC,EACzB,SAAS,EACT,UAAU,EACV,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,KAAK,EACd,MAAM,EACP,KAAI;;AAEH,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM;QAC9C,QAAQ;QACR,CAAC;QACD,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACxC,KAAA,CAAC,CAAC;;;IAIH,MAAM,YAAY,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ;IAC5D,MAAM,UAAU,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO;IAC1D,IAAI,OAAO,GAAG,OAAO;IAErB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,MAAM,UAAU,GAAG,CAAC;QACpB,MAAM,WAAW,GAAG,EAAE;QACtB,MAAM,OAAO,GAAG,CAAC;AAEjB,QAAA,MAAM,MAAM,GAAG,CAAC,SAAS,KAAI;YAC3B,IAAI,OAAO,SAAS,KAAK,QAAQ;AAAE,gBAAA,OAAO,SAAS;YACnD,IAAI,OAAO,SAAS,KAAK,QAAQ;AAAE,gBAAA,OAAO,MAAM,CAAC,SAAS,CAAC;YAC3D,OAAO,IAAI,CAAA;AACb,QAAA,CAAC;QAED,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,YAAA,IAAI,SAAS,GAAG,CAAC,QAAQ;AACzB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE;AAEtB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE;AAAE,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAE;gBAAS;gBACzC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,CAAC;AAC5C,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,GAAG,OAAO,EAAE;AACpD,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;oBACjB,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK;gBACvC;YACF;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD;aAAO,IAAI,UAAU,EAAE;AACrB,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,YAAA,IAAI,UAAU,GAAG,CAAC,QAAQ;AAC1B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE;AAEtB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,UAAU,GAAG,WAAW,GAAG,OAAO,EAAE;AAC3D,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjB,oBAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAChC;YACF;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD;IACF;AAEA,IAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAI;QAC/D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,YAAY,IAAI,EAAE;AACtE,YAAA,aAAa,IACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAC,YAAY,EAAA,EAC7D,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,aAAa,CAC7D,CACR;QACH;AAEA,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE;AACvB,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE;QACvB,IAAI,MAAM,EAAE;YACV,QAAQ,MAAM;AACZ,gBAAA,KAAK,OAAO;AACV,oBAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC;oBACxC;AACF,gBAAA,KAAK,MAAM;AACT,oBAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC;oBACxC;AACF,gBAAA,KAAK,KAAK;AACR,oBAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC;oBACxC;AACF,gBAAA,KAAK,QAAQ;AACX,oBAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC;oBACxC;;QAEN;QAEA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,CAAC,EACN,aAAa,EAAC,MAAM,EACpB,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA,CAAG,EAC3D,SAAS,EAAC,YAAY,EAAA,EAErB,aAAa,CACZ;AAER,IAAA,CAAC,CAAC;AACJ,CAAC;AA0BM,MAAM,SAAS,GAAG,CAAC,EACxB,SAAS,EACT,MAAM,EACN,iBAAiB,GAAG,wBAAwB,EAE5C,SAAS,EACT,UAAU,EACV,KAAK,EACL,qBAAqB,GAAG,KAAK,EAS9B,KAAI;AACH,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,KAC1C,iBAAiB,CAAC;AAChB,QAAA,EAAE,EAAE,QAAQ;QACZ,MAAM;QACN,CAAC;QAED,SAAS;QACT,UAAU;QACV;AACD,KAAA,CAAC,CACkB;IAEtB,MAAM,iBAAiB,GAAG;AACxB,UAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,KACzB,yBAAyB,CAAC;AACxB,YAAA,EAAE,EAAE,QAAQ;YACZ,MAAM;YACN,CAAC;YACD;AACD,SAAA,CAAC;UAEJ,EAAE;AAEN,IAAA,OAAO,CAAC,GAAG,SAAS,EAAE,iBAAiB,CAAC;AAC1C,CAAC;;AC/XD,SAAS,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAuC,EAAA;IAClE,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE;QAC3E,OAAO,CAAC,GAAG,CAAC;IACd;SAAO;AACL,QAAA,OAAO,CAAC;IACV;AACF;AAEA,SAAS,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAuC,EAAA;IAClE,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE;QAC3E,OAAO,CAAC,GAAG,CAAC;IACd;SAAO;AACL,QAAA,OAAO,CAAC;IACV;AACF;AAEc,SAAU,cAAc,CAAC,KAA0B,EAAA;AAC/D,IAAA,MAAM,EACJ,WAAW,EACX,MAAM,EACN,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,MAAM,EACP,GAAG,KAAK;AACT,IAAA,QACED,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAC,mBAAmB,EAC7B,SAAS,EAAE,CAAA,UAAA,EAAa,WAAW,CAAC,MAAM,CAAC,CAAA,CAAA,CAAG,EAAA;AAE9C,QAAAA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,CAAC;gBACjC,CAAC,EAAE,oBAAoB,CAAC,IAAI;AAC5B,gBAAA,CAAC,EAAE,MAAM;AACT,gBAAA,CAAC,EAAE;aACJ,CAAC,CAAA,CAAA,EAAI,UAAU,CAAC;gBACf,CAAC,EAAE,oBAAoB,CAAC,IAAI;AAC5B,gBAAA,CAAC,EAAE,MAAM;AACT,gBAAA,CAAC,EAAE;aACJ,CAAC,CAAA,CAAA,CAAG,EAAA,EAEJ,eAAe,CACd;QACH,MAAM,CACL;AAER;;ACtDc,SAAU,SAAS,CAAC,KAAqB,EAAA;AACrD,IAAA,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK;IAClF,QACIA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,CAAA,WAAA,EAAc,SAAS,CAAA,CAAE,EACpC,SAAS,EAAE,CAAA,UAAA,EAAa;AACtB,YAAA,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5B,YAAA,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC5B,SAAA,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,CAAG,EAAA,EAEvBA,cAAK,CAAC,cAAc,CAAC,SAAS,CAAC,IAC9B,SAAS,KAETA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,UAAU,EAAE,SAAS,EAAA,EAAG,SAAS,CAAQ,CAChD,CACC;AAEV;;AC2HA;;;;;;;;;;AAUG;AACG,SAAU,eAAe,CAAC,KAAU,EAAA;IACxC,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,EAAE;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACnD,IAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IAC1C,IAAI,KAAK,KAAK,CAAC;AAAE,QAAA,OAAO,GAAG;;IAG3B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;IAG7B,IAAI,GAAG,IAAI,GAAG;AAAE,QAAA,OAAO,CAAA,EAAG,UAAU,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;IACvE,IAAI,GAAG,IAAI,GAAG;AAAE,QAAA,OAAO,CAAA,EAAG,UAAU,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;IACvE,IAAI,GAAG,IAAI,GAAG;AAAE,QAAA,OAAO,CAAA,EAAG,UAAU,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;;AAGvE,IAAA,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC;;AAGrD,IAAA,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD;;AClKM,SAAU,sBAAsB,CAAC,EACrC,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,uBAAuB,EACvB,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,SAAS,EACT,MAAM,EACN,WAAW,EACiB,EAAA;AAC5B,IAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,IAAI;YACJ,IAAI;YACJ,UAAU;YACV,uBAAuB;YACvB,OAAO;YACP,OAAO;YACP,UAAU;YACV,YAAY;YACZ,SAAS;YACT,MAAM;YACN;AACD,SAAA,CAAC;IACJ;IACA,OAAO,CAAC,KAAK,CACX,CAAA,sBAAA,EAAyB,IAAI,CAAC,IAAI,CAAA,qBAAA,CAAuB,CAC1D;AACD,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,EAC5B,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,uBAAuB,EACvB,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,MAAM,EACN,WAAW,EAYZ,KAAI;AACH,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE;AACzB,IAAA,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI;AACjD,IAAA,MAAM,SAAS,GACb,UAAU,KAAK,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAE/D,IAAA,OAAO,sBAAsB,CAAC;AAC5B,QAAA,IAAI,EAAE,IAAgC;AACtC,QAAA,IAAI,EAAE,IAAmB;QACzB,UAAU;QACV,uBAAuB;QACvB,OAAO;QACP,OAAO;QACP,UAAU;QACV,YAAY;QACZ,SAAS;QACT,MAAM;QACN;AACD,KAAA,CAAC;AACJ,CAAC;AAQD;;AAEG;AACG,SAAU,0BAA0B,CAAC,IAA0B,EAAA;IACnE,MAAM,iBAAiB,GAAkB,EAAE;AAC3C,IAAA,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE;QAC5B,MAAM,gBAAgB,GAAkB,EAAE;AAC1C,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAC,GAAG,SAAS;AAC7C,QAAA,IAAI,SAAS,CAAC,IAAI,EAAE;AAClB,YAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACxC;aAAO;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAwB,QAAQ,CAAC,CAAC,CAAwB;gBACvE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,EAAA,GAAmB,OAAO,EAArB,SAAS,GAAA,MAAA,CAAK;;AAAzC,kBAAA,CAAA,UAAA,EAAA,OAAA,CAAsC,CAAU;;AAGtD,gBAAA,MAAM,YAAY,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAA6B,SAAS,CAAE;AAC1D,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAC5D,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAClE,gBAAA,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACjF,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AACrE,gBAAA,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACjF,gBAAA,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;AAAE,oBAAA,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;;AAGvF,gBAAA,MAAM,eAAe,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAA6B,KAAK,CAAE;gBACzD,OAAO,eAAe,CAAC,IAAI;gBAC3B,OAAO,eAAe,CAAC,MAAM;gBAC7B,OAAO,eAAe,CAAC,WAAW;gBAClC,OAAO,eAAe,CAAC,OAAO;gBAC9B,OAAO,eAAe,CAAC,WAAW;gBAClC,OAAO,eAAe,CAAC,aAAa;gBACpC,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,oBAAA,YAAY,CAAC,KAAK,GAAG,eAAe;gBACtC;gBAEA,YAAY,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;gBAEnC,IAAI,QAAQ,EAAE;AACZ,oBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACpE;YACF;YACA,IAAI,cAAc,EAAE;gBAClB,iBAAiB,CAAC,IAAI,CAAC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,cAAc,CAAA,EAAG,gBAAgB,CAAK,CAAC;YACvE;iBAAO;AACL,gBAAA,iBAAiB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;YAC7C;QACF;IACF;AACA,IAAA,OAAO,iBAAiB;AAC1B;;ACvIA;AAEA,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,KAAI;AAClD,IAAA,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;AACpE,IAAA,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAASE,aAAW,CAAC,KAAK,EAAE,KAAK,EAAA;AAC/B,IAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACpB,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IAChC;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;IACzB;AACA,IAAA,OAAO,KAAK;AACd;AAEA,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAI;AAC1C,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;AAChC,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,EAAE;AAEvB,IAAA,MAAM,YAAY,GAChB,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ;AAE9D,IAAA,MAAM,YAAY,GAChB,IAAI,CAAC,GAAG,CACN,GAAG,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC;SAC3C,GAAG,CACF,CAAC,CAAwB,KACvB,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAE1D,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAC/B,GAAG,EAAE;AAER,IAAA,OAAO,YAAY;AACrB,CAAC;AAEa,SAAU,IAAI,CAAC,KAAgB,EAAA;IAC3C,MAAM,EACJ,MAAM,EACN,KAAK,EACL,oBAAoB,EACpB,MAAM,GAAG,MAAM,EACf,mBAAmB,EACnB,UAAU,GAAG,mBAAmB,GAAG,MAAM,EAAE,GAAG,eAAe,EAC7D,IAAI,EACJ,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAC9B,MAAM,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,UAAU,EACV,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,QAAQ,GAAG,IAAI,EACf,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EACjD,MAAM,GAAG,KAAK,EACd,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACT,GAAG,KAAK;IAET,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,GAC5D,QAAQ,CAAC,SAAS,CAAC;AAErB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,EAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,QAAQ,CAAA,IAAI,oBAAoB,EAAE;YAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;AACjD,YAAA,IAAI,QAAQ,KAAK,uBAAuB,EAAE;gBACxC,6BAA6B,CAAC,QAAQ,CAAC;YACzC;QACF;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAEjC,IAAA,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK;AAE5C,IAAA,IAAI,aAAa;IAEjB,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,UAAU,CAAC;AACrB,YAAA,OAAO,EAAE,OAAO;YAChB,UAAU;YACV,KAAK;YACL,KAAK;YACL,MAAM;AACN,YAAA,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YACrB,MAAM;YACN;AACD,SAAA,CAAC;QACF,aAAa,IACX,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,QAAQ,SAAS,CAAA,CAAE,EAAA,EAC9B,SAAS,CAAC;YACT,SAAS;YACT,MAAM;YACN,iBAAiB;YACjB,SAAS;YACT;SACD,CAAC,CACA,CACL;IACH;AACA,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,UAAU,GAAG,EAAE;IACnB,IAAI,WAAW,GAAG,MAAM;AACxB,IAAA,IAAI,MAAM,GAAG,GAAG;IAChB,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,UAAU,GAAG,MAAM;;AAEvB,IAAA,IAAI,aAAa;IACjB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAA,IAAI,KAAK,GAAG,GAAG;IACf,IAAI,KAAK,GAAG,EAAE;AACd,IAAA,IAAI,SAAS,GAAG,KAAK,GAAG,EAAE;IAC1B,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,OAAO,GAAG,aAAa;IAC3B,IAAI,gBAAgB,GAAG,CAAC;IACxB,IAAI,cAAc,GAAG,GAAG;IAExB,QAAQ,MAAM;AACZ,QAAA,KAAK,OAAO;AACV,YAAA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,GAAG,KAAK;AACd,YAAA,UAAU,GAAG,SAAS,GAAG,KAAK;AAC9B,YAAA,gBAAgB,GAAG,MAAM,CAAC,GAAG;AAC7B,YAAA,SAAS,GAAG,CAAC,KAAK,GAAG,EAAE;YACvB,KAAK,GAAG,CAAC;AACT,YAAA,aAAa,GAAG,CAAC,CAAC,KAAI;gBACpB,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;AAC/D,YAAA,CAAC;AACD,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC;YACpC;YACA;AACF,QAAA,KAAK,KAAK;YACR,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,UAAU,GAAG,KAAK;YAClB,WAAW,GAAG,EAAE;YAChB,MAAM,GAAG,GAAG;YACZ,MAAM,GAAG,CAAC;AACV,YAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI;YAC9B,cAAc,GAAG,GAAG;YACpB,UAAU,GAAG,KAAK;YAClB,UAAU,GAAG,CAAC;AACd,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC;YACrC;AACA,YAAA,aAAa,GAAG,CAAC,CAAC,KAAI;gBACpB,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;AAC/D,YAAA,CAAC;YACD,OAAO,GAAG,aAAa;YACvB,OAAO,GAAG,EAAE;YACZ,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,GAAG;YACX,SAAS,GAAG,CAAC;AACb,YAAA,UAAU,GAAG,MAAM,GAAG,EAAE;YACxB;AACF,QAAA,KAAK,QAAQ;YACX,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,UAAU,GAAG,KAAK;YAClB,WAAW,GAAG,EAAE;AAChB,YAAA,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM;AACxC,YAAA,SAAS,GAAG,MAAM,GAAG,CAAC;YACtB,UAAU,GAAG,KAAK;AAClB,YAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI;AAE9B,YAAA,aAAa,GAAG,CAAC,CAAC,KAAI;gBACpB,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;AAC/D,YAAA,CAAC;YACD,OAAO,GAAG,aAAa;YACvB,OAAO,GAAG,EAAE;YACZ,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,EAAE;YACV,SAAS,GAAG,CAAC;AACb,YAAA,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE;YACzB,cAAc,GAAG,GAAG;AACpB,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC;YACrC;YACA;AACF,QAAA;AACE,YAAA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,YAAA,gBAAgB,GAAG,MAAM,CAAC,GAAG;AAC7B,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC;YACpC;AACA,YAAA,aAAa,GAAG,CAAC,CAAC,KAAI;gBACpB,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;AAC/D,YAAA,CAAC;;AAGL,IAAA,IAAI,eAAe;IAEnB,IAAI,kBAAkB,EAAE;AACtB,QAAA,MAAM,cAAc,GAAGA,aAAW,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;QACtE,MAAM,UAAU,GAAQ,aAAa,IACnC,aAAa,CAAC;YACZ,UAAU;YACV,SAAS;AACT,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AAClC,SAAA,CAAC,KAEF,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;AACG,YAAA,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,IACnC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAA,EAAG,cAAc,CAAK,KAElE,8BAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAA,EACrB,cAAc,CACV,CACR;YACD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,CAAC,EAAE,CAAC,EAAA,CAAI;AAChB,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAA,CAAI,CACjE,CACL;AACD,QAAA,MAAM,gBAAgB,GAAG,aAAa,IACpC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAChC,SAAS,EAAE,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAG,EAAA,EAE5C,UAAU,CACT,IACF,IAAI;AAER,QAAA,eAAe,IACb,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAC,kBAAkB,EAC5B,SAAS,EAAE,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,EAAA;AAE3C,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EACzB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,CAAC,CAAC,KACT,kBAAkB,CAAC;AACjB,oBAAA,SAAS,EAAE,yBAAyB;AACpC,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;oBAClC;AACD,iBAAA,CAAC,EAEJ,UAAU,EAAE,MAAK;oBACf,mBAAmB,CAAC,SAAS,CAAC;AAChC,gBAAA,CAAC,EAAA,CACD;YACD,gBAAgB,CACf,CACL;IACH;AAEA,IAAA,IAAI,cAAc;AAElB,IAAA,IAAI,mBAAmB,IAAI,QAAQ,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEpD,QAAA,MAAM,oBAAoB,GACxB,OAAO,mBAAmB,KAAK;AAC7B,cAAE,EAAE,IAAI,EAAE,mBAAmB;cAC3B,mBAAmB;AAEzB,QAAA,IACE,oBAAoB,CAAC,IAAI,KAAK,SAAS;aACtC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,CAAC,EAC3C;AACA,YAAA,oBAAoB,CAAC,IAAI,GAAG,IAAI;QAClC;AAEA,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC;AACxC,cAAE,MAAM,oBAAoB,CAAC;AAC7B,cAAE,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,eAAe,EAAE;AAClB,aAAA,CAAC;AAEN,QAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAC7C,cAAE,MAAM,oBAAoB,CAAC;AAC7B,cAAE,MAAM,SAAS;AAEnB,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC;AACxC,cAAE,MAAM,oBAAoB,CAAC;AAC7B,cAAE,MAAM,EAAE;AAEZ,QAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC;QAE9D,MAAM,cAAc,GAAG;aACpB,MAAM,CACL,CAAC,CAA4C,KAC3C,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;aAE/D,GAAG,CAAC,CAAC,CAA2B,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACjC,CAAC,CAAA,EAAA,EACJ,EAAE,EAAE;gBACF,CAAC,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3D,CAAC,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAC3D,aAAA,EACD,KAAK,EAAE;AACL,gBAAA,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;aACvB,EACD,KAAK,EACH,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACnE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAA,CAAA,CAC/B,CAAC;QAEL,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACtC,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE;oBACN,MAAM,EAAE,YAAY,GAAG,CAAC;AACxB,oBAAA,SAAS,EAAE,cAAc;AACzB,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,MAAM,EAAE;AACT;AACF,aAAA;AACD,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,UAAU,EAAE,iBAAiB;AAC7B,YAAA,uBAAuB,EACrB,oBAAoB,CAAC,uBAAuB,KAAK,OAAO,EAAE,CAAC,CAAC;AAC9D,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EACR,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,GAAG,YAAY,GAAG,UAAU;AACrE,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/C,SAAA,CAAC;QAEF,MAAM,eAAe,GAAG,0BAA0B,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAE3E,QAAA,IAAI,MAAM;AAEV,QAAA,IAAI,oBAAoB,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5C,MAAM,YAAY,GAAG,mBAAmB,CACtC,MAAM,EACN,YAAY,EACZ,cAAc,CACf;YAED,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAC7B,gCACE,GAAG,EAAE,sBAAsB,CAAC,CAAA,CAAE,EAC9B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACR,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACR,CAAC,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAC9B,KAAK,EACH,oBAAoB,CAAC,UAAU,IAAI;AACjC,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,WAAW,EAAE;iBACd,EAAA,CAEH,CACH,CAAC;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;SACxB;AAED,QAAA,cAAc,IACZ,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,EACb,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,oBAAoB,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EAAA,CACd,CACH;IACH;AAEA,IAAA,IAAI,SAAS;IAEb,MAAM,cAAc,GAAG,UAAU,CAAC;QAChC,UAAU;QACV,SAAS;QACT,MAAM;QACN,MAAM;QACN;AACD,KAAA,CAAC;IACF,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,SAAS,GAAQ,KAAK,CAAC,IAAI,IAAI,KAAK;AAC1C,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE;AAC1C,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,IAAI,SAAS;QACvD,IAAI,SAAS,IAAI,aAAa,CAAC,MAAM,IAAI,QAAQ,CAA2C;AAC5F,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,IAAI,uBAAuB;AAElE,QAAA,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE;SACT;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC;AAE7D,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,gBAAA,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACX,gBAAA,MAAM,EAAE,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3B,OAAO,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/B,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,gBAAA,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,MAAM,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,gBAAA,OAAO,EAAE,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC5B,aAAA;AACD,YAAA,GAAG,EAAE;AACH,gBAAA,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,gBAAA,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,gBAAA,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;AAC/B,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,gBAAA,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;AAC7B,gBAAA,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE;AAC5B;SACF;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;QACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;AAElD,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC7C,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAE7C,IAAI,SAAS,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;YAC/C,SAAS,GAAG,KAAK;QACnB;aAAO,IAAI,SAAS,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,EAAE;YACpD,SAAS,GAAG,OAAO;QACrB;AAEA,QAAA,SAAS,IACP,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EACR,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,CACH;IACH;AAEA,IAAA,MAAM,aAAa,GAAG,CAAA,EAAG,MAAM,CAAA,MAAA,EAC7B,CAAC,SAAS;QACR,SAAS,CAAC,MAAM,GAAG,CAAC;AACpB,QAAA,CAAA,KAAA,EAAQ,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,IAAA,EAAO,UAAU,CACxD,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EACrC,SAAS,CAAC,MAAM,GAAG,CAAC,CACrB,EAAE;AACL,QAAA,eACF,EAAE;IAEF,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,SAAS,gBAAc,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAA;QAC9D,eAAe;QACf,cAAc;QACd,aAAa;QACb,QAAQ,KAAK,IAAI,IAChB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAC,UAAU,EACd,SAAS,EAAE,iBAAiB,SAAS,CAAA,CAAE,EACvC,MAAM,EAAC,OAAO,EACd,aAAa,EAAC,QAAQ,EACtB,EAAE,EAAE,SAAS,EACb,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,SAAS,EACb,EAAE,EAAE,UAAU,GACd,IACA,IAAI;QACP,SAAS;QACT,cAAc,CACb;AAER;;AChgBA,MAAM,OAAO,GAAG,CAAC,IAAI,KACnB,IAAI,CAAC,MAAM,CACT,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAC3E,EAAE,CACH;AAEH,SAAS,cAAc,CAAC,SAAS,GAAG,EAAE,EAAA;AACpC,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,QAAA,OAAO,WAAW;AACjD,IAAA,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5B,QAAA,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C;AACA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAE3B,MAAM,oBAAoB,GAAG;AAC1B,SAAA,GAAG,CACF,CAAC,CAAC,KACA,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE;AAClC,SAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,OAAO;AAEV,SAAA,QAAQ,EAAE;AACb,IAAA,OAAO,oBAAoB;AAC7B;AAEA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,KAAK,KAAI;IAClC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,KAAK;IACrE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB,IAAI,kBAAkB,EAAE;QACtB,IAAI,cAAc,GAAG,kBAAkB;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/D,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAChB;AACD,YAAA,cAAc,GAAG;AACf,gBAAA,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;aAClC;QACH;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC;IAC/C;AACF,CAAC;AASa,SAAU,KAAK,CAAC,KAAiB,EAAA;AAC7C,IAAA,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK;AAExC,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,IAAA,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC;AACzC,IAAA,MAAM,kBAAkB,GAAG,cAAc,CAAC,cAAc,CAAC;IAEzD,SAAS,CAAC,MAAK;QACb,IAAI,IAAI,aAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,EAAE;AACjB,YAAA,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAClC;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAE1C,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK;AACnC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAA,CAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAC,SAAS,EAAA,CAAG;AAE7E;;AC1EO,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,gBAAgB,GAAG,SAAS;AAClC,MAAM,aAAa,GAAG,MAAM;AAC5B,MAAM,gBAAgB,GAAG,SAAS;AAClC,MAAM,gBAAgB,GAAG,SAAS;AAClC,MAAM,aAAa,GAAG,MAAM;AAC5B,MAAM,gBAAgB,GAAG,SAAS;;ACJzC,SAAS,WAAW,CAAC,WAAW,EAAA;AAC9B,IAAA,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1B,IAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC3B,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACxB,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AAChC,QAAA,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,QAAA,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;AACtC,QAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;AAC/B,IAAA,CAAC,CAAC;IAEF,OAAO;AACL,QAAA,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,GAAG;QACH,IAAI;QACJ,KAAK;QACL;KACD;AACH;AAEM,SAAU,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,EAAA;IAC1E,IAAI,kBAAkB,GAAG,EAAE;AAC3B,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACrB,QAAA,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC;AAEA,IAAA,MAAM,EACJ,UAAU,GAAG,GAAG,EAChB,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,YAAY,EACb,GAAG,WAAW;IAEf,MAAM,MAAM,GAAG,WAAW;SACvB,MAAM,CAAC,YAAY;AACnB,SAAA,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;AAC1B,SAAA,IAAI,EAAE;IACT,MAAM,MAAM,GAAG,WAAW;SACvB,MAAM,CAAC,YAAY;AACnB,SAAA,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1B,SAAA,IAAI,EAAE;AAET,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;QAC3B,IAAI,yBAAyB,GAAG,cAAc;AAC3C,aAAA,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,aAAA,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACrB,UAAU,CAAC,UAAU;aACrB,SAAS,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;QAEpD,IAAI,YAAY,EAAE;AAChB,YAAA,yBAAyB,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAC5D;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAEtE,QAAA,yBAAyB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,OAAO,CAAC,aAAa,GAAG,WAAW;AACnC,YAAA,OAAO,CAAC,MAAM,GAAG,EAAE;YACnB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG;YACrC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACnC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,KAAI;oBAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;AAClC,wBAAA,SAAS,GAAG;AACV,4BAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,4BAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;yBAC3B;AACD,wBAAA,OAAO,SAAS;AAClB,oBAAA,CAAC,CAAC;;AAEF,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,wBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,yBAAyB,CAAC;AAC5E,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,kBAAkB;AAC3B;;ACxEM,SAAU,UAAU,CAAC,EACzB,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,KAAK,EACrB,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,WAAW,EACzB,YAAY,EAAE,WAAW,EACzB,IAAI,EACJ,UAAU,GAAG,WAAW,EAAE,EAC1B,UAAU,GAAG,WAAW,EAAE,EAC1B,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACS,EAAA;IAClB,IAAI,YAAY,GAAG,WAAW;IAC9B,IAAI,YAAY,GAAG,WAAW;IAE9B,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACzD;IAEA,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACzD;AAEA,IAAA,IAAI,aAAa,IAAI,QAAQ,EAAE;QAC7B,OAAO,QAAQ,CAAC,WAAW;IAC7B;IAEA,IAAI,kBAAkB,GAAG,EAAE;AAC3B,IAAA,IAAI,WAAgC;AACpC,IAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC;SAAO;QACL,WAAW,GAAG,eAAe;IAC/B;IAEA,MAAM,EACJ,IAAI,GAAG,IAAI,EACX,MAAM,EACN,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAC1B,MAAM,EACN,UAAU,EACX,GAAG,WAAW;IAEf,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;QACrD,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE;AAEA,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAE5D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE,IAAA,MAAM,gBAAgB,GACpB,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM;AACrB,SAAA,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrC,SAAA,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACrC,MAAM,CAAC,gBAAgB;SACvB,IAAI,CAAC,IAAI,CAAC;AAEb,IAAA,IAAI,MAAM;AACV,IAAA,MAAM,QAAQ,GAAqB,SAAS,CAAC,OAAO,EAAE;AAEtD,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;QAC1B,MAAM,GAAG,CAAC;AACV,QAAA,MAAM,KAAK,GAAG,SAAS,CACrB,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,EACvC,SAAS,EAAE,CAAC,IACT,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAC5B,CAAC,CACJ;QAED,MAAM,UAAU,GAAG,EAAE;AAErB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAClB,YAAA,UAAU,CAAC,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;AACxD,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC7B,IAAI,CAAC,UAAU,CAAC,CAAA,EAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,EAAE;gBACtE,MAAM,MAAM,GAAa,EAAE;AAC3B,gBAAA,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACvB,gBAAA,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,MAAM,CAAC;QAChB;AAEA,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,CAAC,CAAC,EAAE,EAAE,CAAC;AACP,YAAA,CAAC,KAAK,EAAE,IAAI,CAAC;YACb,CAAC,KAAK,EAAE,GAAG,CAAC;YACZ,CAAC,CAAC,EAAE,CAAC,CAAC;AACN,YAAA,CAAC,MAAM,EAAE,GAAG,CAAC;AACb,YAAA,CAAC,MAAM,EAAE,IAAI;SACd;AAED,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AACxE,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QAEzE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AACzC,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ;AACf,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG;AACR,SAAA,CAAC;QAEF,MAAM,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAsB,KAAI;AACpE,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AACd,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM;YACjC,OAAO;AACL,gBAAA,UAAU,EAAE,UAAU,KACpB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA,CAAA,CAAG,EAAA,EAC7C,UAAU,CAAC;oBACV,CAAC,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACI,CAAC,CAAA,EAAA,EACJ,QAAQ,EAAE,CAAC,EACX,OAAO,EACP,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AACjC,4BAAA,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB;AACvB,4BAAA,CAAC,CAAC,CAAC,CAAC,GAAG;AACR,yBAAA,CAAC,EAAA,CACH;oBACD,MAAM;oBACN,OAAO;oBACP,OAAO;oBACP,QAAQ;oBACR,SAAS;AACT,oBAAA,YAAY,EAAE;AACf,iBAAA,CAAC,CACA,CACL;AACD,gBAAA,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,gBAAA,KAAK,EAAE,QAAQ;gBACf,OAAO;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE;aACX;AACH,QAAA,CAAC,CAAC;QACF,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,wBAAwB,CAAC;AAC3E,IAAA,CAAC,CAAC;IAEF,IAAI,UAAU,EAAE;AACd,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,QAAA,CAAC,CAAC;QACF,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,MAAM,EAAE;SACT;IACH;AAEA,IAAA,OAAO,kBAAkB;AAC3B;;AC5KA,MAAM,kBAAkB,GAAG,CACzB,MAAM,EACN,QAAQ,EACR,mBAAmB,EACnB,sBAAsB,KACpB;AACF,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;QAChC,CAAC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvC,KAAA,CAAC;AACF,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;QACnC,CAAC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,KAAA,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACxC,CAAC;AAEK,SAAU,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAA;IACzD,IAAI,kBAAkB,GAAG,EAAE;AAC3B,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACrB,QAAA,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC;AAEA,IAAA,MAAM,EACJ,gBAAgB,EAChB,mBAAmB,GAAG,gBAAgB,EACtC,sBAAsB,GAAG,gBAAgB,EAC1C,GAAG,WAAW;AAEf,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;QACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QACnD,IAAI,eAAe,GAAG,EAAE;QACxB,IAAI,WAAW,GAAG,EAAE;AACpB,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,IAAI,EAAE;AACP;SACF;QACD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC3B,YAAA,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3C,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/C;AAAO,iBAAA,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7B,eAAe,GAAG,EAAE;gBACpB,WAAW,GAAG,EAAE;gBAChB,cAAc,CAAC,IAAI,CAAC;AAClB,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;AACvC,YAAA,MAAM,wBAAwB,GAAG;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,aAAa,EAAE,QAAQ;gBACvB,eAAe,EAAE,kBAAkB,CACjC,GAAG,EACH,IAAI,EACJ,mBAAmB,EACnB,sBAAsB;aAEzB;AAED,YAAA,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,wBAAwB,CAAC;AACxE,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,kBAAkB;AAC3B;AAEM,SAAU,WAAW,CAAC,EAC1B,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,KAAK,EACrB,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,QAAQ,EACd,YAAY,GAAG;AACb,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjD,CAAA,EACD,YAAY,GAAG;AACb,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACjD,EACD,IAAI,EACJ,UAAU,GAAG,WAAW,EAAE,EAC1B,UAAU,GAAG,WAAW,EAAE,EAC1B,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACS,EAAA;AAClB,IAAA,IAAI,aAAa,IAAI,QAAQ,EAAE;QAC7B,OAAO,QAAQ,CAAC,WAAW;IAC7B;IAEA,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;QACrD,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE;AAEA,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAE5D,IAAI,kBAAkB,GAAuB,EAAE;AAE/C,IAAA,IAAI,WAAgC;AACpC,IAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC;SAAO;QACL,WAAW,GAAG,eAAe;IAC/B;IAEA,MAAM;;IAEJ,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAC1B,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,IAAI,EACjC,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,OAAO,EACnD,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,OAAO,EACnD,UAAU,EACV,MAAM,EACP,GAAG,WAAW;AACf,IAAA,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK;AACjD,IAAA,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK;IAEjD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5E,IAAA,MAAM,gBAAgB,GAAG;QACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACvE,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACvE;KACH;AACD,IAAA,IAAI,QAAQ,GAAG,CAAC,QAAQ;AAExB,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;QAC3B,MAAM,IAAI,GAAG,EAAE;QACf,MAAM,QAAQ,GAAG,EAAE;AAEnB,QAAA,IAAI,IAAI;AACR,QAAA,IAAI,UAAU;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE;YAChE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAE3D,UAAU,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE;gBAChE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAA,IAAI,GAAG;AACL,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvB,oBAAA,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvB,oBAAA,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACf,oBAAA,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACf,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,eAAe,EAAE;wBACf,CAAC,CAAC,EAAE,CAAC,CAAC;wBACN,CAAC,EAAE,EAAE,CAAC,CAAC;wBACP,CAAC,EAAE,EAAE,EAAE,CAAC;wBACR,CAAC,CAAC,EAAE,EAAE;AACP,qBAAA;AACD,oBAAA,aAAa,EAAE;iBAChB;AACD,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACrB;AACA,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAErB,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAmB,EAAE,EAAU,KAAI;YACtE,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW;AAE9C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAE3D,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC1C,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAC5B;YACH;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACrB,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;AACxC,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACrB,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ;YAC9B,CAAC,CAAC,UAAU,GAAG,UAAU,KACvB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,UAAA,EAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,EAAA,EACvC,UAAU,CAAC;gBACV,CAAC;gBACD,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,QAAQ;gBACR,SAAS;AACT,gBAAA,YAAY,EAAE;aACf,CAAC,CACA,CACL;AACH,QAAA,CAAC,CAAC;QAEF,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,QAAQ,CAAC;AAC3D,IAAA,CAAC,CAAC;IACF,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,QAAQ,CAAC;IAClB;IACA,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,mBAAmB,GAAqB;AAC5C,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,mBAAmB;IAC5B;AAEA,IAAA,OAAO,kBAAkB;AAC3B;SAEgB,WAAW,CAAC,EAC1B,UAAU,GAAG,KAAK,EAClB,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,QAAQ,EACd,YAAY,GAAG;AACb,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjD,CAAA,EACD,UAAU,GAAG,WAAW,EAAE,EACR,EAAA;IAClB,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW;IAChC;IAEA,IAAI,kBAAkB,GAAG,EAAE;AAE3B,IAAA,IAAI,WAAgC;AACpC,IAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC;SAAO;QACL,WAAW,GAAG,eAAe;IAC/B;IAEA,MAAM,EACJ,cAAc,EAAE,kBAAkB,GAAG,QAAQ,EAC7C,KAAK,GAAG,CAAC,EACT,SAAS,GAAG,CAAC,EACb,aAAa,GAAG,EAAE,EAClB,KAAK,GAAG,aAAa,EACtB,GAAG,WAAW;IAEf,IAAI,cAAc,GAAG,kBAAkB;AAEvC,IAAA,IACE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;SAClB,kBAAkB,KAAK,aAAa;AACnC,YAAA,kBAAkB,KAAK,OAAO;AAC9B,YAAA,kBAAkB,KAAK,aAAa,CAAC,EACvC;AACA,QAAA,OAAO,CAAC,KAAK,CACX,mBAAmB,kBAAkB,CAAA,6EAAA,CAA+E,CACrH;QACD,cAAc,GAAG,QAAQ;IAC3B;IAEA,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;QACrD,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE;AAEA,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAE5D,IAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAE5D,kBAAkB,GAAG,EAAE;AACvB,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrB,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAC/C,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEZ,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,gBAAA,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;YACjB;AACA,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,gBAAA,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;YACjB;AAEA,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,QAAA,CAAC,CAAC,EACF;YACE,KAAK;YACL;AACD,SAAA,CACF;AACD,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa;AAErC,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAElB,QAAA,IAAI,cAAc,KAAK,QAAQ,EAAE;YAC/B,KAAK,GAAG,EAAE;AACV,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE;AAC9D,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB;QACF;QAEA,MAAM,iBAAiB,GAAG,EAAE;AAE5B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;AAC7B,YAAA,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AACtE,QAAA,CAAC,CAAC;QAEF,kBAAkB,CAAC,IAAI,CAAC;AACtB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,cAAc,CAAC,MAAM;YAC5B,EAAE,EAAE,cAAc,CAAC,EAAE;YACrB,KAAK;AACL,YAAA,eAAe,EAAE;AAClB,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,kBAAkB;AAC3B;;AClWO,MAAM,WAAW,GAAG,MAAM,IAC/B,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;;AC2CtE,MAAM,mBAAmB,GAAG,MAAM,IAAI;AAEtC,MAAM,gBAAgB,GAAG;AACvB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE;CACT;AAED,MAAM,gBAAgB,GAAG;AACvB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE;CACT;AAED,MAAM,sBAAsB,GAAG;AAC7B,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,oBAAoB,EAAE,WAAW;AACjC,IAAA,cAAc,EAAE,WAAW;AAC3B,IAAA,uBAAuB,EAAE,WAAW;AACpC,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,oBAAoB,EAAE;CACvB;AA+DD,SAAS,+BAA+B,CACtC,WAAoE,EACpE,kBAAsC,EAAA;IAEtC,MAAM,OAAO,GAA4D,EAAE;AAC3E,IAAA,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE;AAClC,QAAA,OAAO,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,EAAG;IACxB;AACA,IAAA,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;AAC3B,QAAA,IAAI,CAAE,CAAoB,CAAC,aAAa,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;IACF;AACA,IAAA,OAAO,OAAO;AAChB;AA6CO,MAAM,mBAAmB,GAAG,CAAC,EAClC,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,KAAK,EACL,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,YAAY,EAAE,IAAI,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,OAAO,GAAG,mBAAmB,EAC7B,WAAW,GAAG,EAAE,EACG,KAAI;IACvB,IAAI,WAAW,GAA4D,EAAE;IAC7E,IAAI,qBAAqB,GAAG,EAAE;IAE9B,IAAI,eAAe,GAA0B,EAAE,EAC7C,cAAc,GAAyB,EAAE,EACzC,kBAAkB,GAA4B,EAAE;IAClD,IAAI,MAAM,EAAE;QACV,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,MAAM,KAAI;YAC5C,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,MAAM,KAAI;gBAC5C,IAAI,CAAC,GAAG,CAAC;AACT,gBAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;oBACtB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,oBAAA,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;AACxD,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACpB,cAAc,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjD,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC9C,cAAc,CAAC,gBAAgB,CAAC;4BAC9B,CAAC,cAAc,CAAC,gBAAgB,CAAC;gCAC/B,cAAc,CAAC,aAAa,CAAC;AAC/B,gCAAA,CAAC;oBACL;AACA,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACpB,cAAc,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjD,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC9C,cAAc,CAAC,gBAAgB,CAAC;4BAC9B,CAAC,cAAc,CAAC,gBAAgB,CAAC;gCAC/B,cAAc,CAAC,aAAa,CAAC;AAC/B,gCAAA,CAAC;oBACL;AACA,oBAAA,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;AACpC,oBAAA,CAAC,EAAE;gBACL;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;AAC/B,YAAA,WAAW,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,CAAC,CAAA,EAAA,EACJ,CAAC,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5D,CAAC,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAC5D;QACJ;IACF;IACA,IAAI,KAAK,EAAE;QACT,qBAAqB,GAAG,eAAe,CAAC;AACtC,YAAA,IAAI,EAAE,KAAK;YACX,gBAAgB;AAChB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,WAAW,EAAE,gBAAgB;YAC7B,SAAS;YACT;AACD,SAAA,CAAC;AAEF,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,WAAW,EAAE;SACd;QAED,cAAc,GAAG,kBAAkB,CACjC,QAAQ,EACR,aAAa,CACd,CAAC,qBAAqB,CAAC;AAExB,QAAA,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE;AAC9B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE;AAC/C,gBAAA,MAAM,OAAO,GAAmB;AAC9B,oBAAA,UAAU,EAAE,CAAC;oBACb,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,IAAI,EAAE,CAAC,CAAC;iBACT;AACD,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,oBAAA,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;gBAC7B;AACA,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3B;QACF;QACA,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,YAAY,GAChB,cAAc,KAAK;AACjB,kBAAE;AACF,kBAAE,gBAAgB,CAAC,cAAc,CAAC;AAEtC,YAAA,MAAM,YAAY,GAChB,cAAc,KAAK;AACjB,kBAAE;AACF,kBAAE,gBAAgB,CAAC,cAAc,CAAC;AAEtC,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAgB,KAAI;AAC1C,gBAAA,CAAC,CAAC;AACC,qBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACf,oBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACvD,IAAI,SAAS,EAAE;AACb,wBAAA,IAAI,cAAc,KAAK,QAAQ,EAAE;4BAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAE/B,IACE,CAAC,CAAC,QAAQ;AACR,gCAAA,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtD,iCAAC,CAAC,SAAS;AACT,oCAAA,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EACzD;AACA,gCAAA,OAAO,IAAI;4BACb;iCAAO;AACL,gCAAA,OAAO,KAAK;4BACd;wBACF;6BAAO;AACL,4BAAA,OAAO,IAAI;wBACb;oBACF;yBAAO;AACL,wBAAA,OAAO,KAAK;oBACd;AACF,gBAAA,CAAC;AACA,qBAAA,OAAO,CAAC,CAAC,CAAC,KAAI;AACb,oBAAA,eAAe,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACf,CAAC,CAAA,EAAA,EACJ,UAAU,EAAE,CAAC,EACb,CAAC,UAAU,GACT,CAAC,CAAC,YAAY,CAAC,KAAK;AAClB,8BAAE,CAAC,CAAC,YAAY;AAChB,8BAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAC1B,kCAAE,CAAC,CAAC,gBAAgB;AACpB,kCAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAC1B,sCAAE,CAAC,CAAC,gBAAgB;AACpB,sCAAE,CAAC,CAAC,CAAC,EACT,CAAC,UAAU,GACT,CAAC,CAAC,YAAY,CAAC,KAAK;AAClB,8BAAE,CAAC,CAAC,YAAY;AAChB,8BAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAC1B,kCAAE,CAAC,CAAC,gBAAgB;AACpB,kCAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAC1B,sCAAE,CAAC,CAAC,gBAAgB;AACpB,sCAAE,CAAC,CAAC,CAAC,IACT;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,IAAI,SAAS,EAAE;QACb,kBAAkB,GAAG,kBAAkB,CAAC;AACtC,YAAA,IAAI,EAAE,SAAS;YACf,mBAAmB;YACnB,SAAS;YACT;AACD,SAAA,CAAC;AAEF,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC/B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS;YAE5B,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC9D,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrC,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACxB;6BACG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACR,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC/C,4BAAA,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,4BAAA,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAClB,yBAAA,CAAC;AAEH,6BAAA,OAAO,CAAC,CAAC,CAAC,KAAI;4BACb,IAAI,iBAAiB,EAAE;AACrB,gCAAA,eAAe,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAClB,CAAC,EAAE,CAAC,EAAA,EACD,CAAC,CAAA,EAAA,EACJ,CAAC,UAAU,GACT,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAA,CAAA,CAC1D;4BACJ;AACA,4BAAA,WAAW,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,EAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA,EAAK,CAAC,EAAG;AACxC,wBAAA,CAAC,CAAC;oBACN;AACF,gBAAA,CAAC,CAAC;YACJ;iBAAO,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE;AACpC,oBAAA,MAAM,UAAU,GAAuB,CAAC,CAAC,eAGtC;oBACH;AACG,yBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACb,aAAa,EAAE,CAAC,EAAA,EACb,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAA,EACd,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAClB,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAClB;AACD,yBAAA,OAAO,CAAC,CAAC,CAAC,KAAI;wBACb,IAAI,iBAAiB,EAAE;AACrB,4BAAA,eAAe,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAClB,CAAC,EAAE,CAAC,EAAA,EACD,CAAC,CAAA,EAAA,EACJ,CAAC,UAAU,GACT,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAA,CAAA,CAC1D;wBACJ;AACA,wBAAA,WAAW,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,EAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA,EAAK,CAAC,EAAG;AACxC,oBAAA,CAAC,CAAC;gBACN;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,IAAI,oBAAoB,GAAG,EAAE;IAC7B,IAAI,oBAAoB,GAAG,EAAE;AAE7B,IAAA,IACE,OAAO;AACP,QAAA,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvB,QAAA,OAAO,CAAC,kBAAkB,KAAK,IAAI,EACnC;AACA,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;YACpC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,eAAe,KAAI;gBAClD,MAAM,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC;AACtD,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACf,oBAAoB,CAAC,IAAI,CAAC;wBACxB,CAAC,UAAU,GAAG;AACf,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IACE,OAAO;AACP,QAAA,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvB,QAAA,OAAO,CAAC,kBAAkB,KAAK,IAAI,EACnC;AACA,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;YACpC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,eAAe,KAAI;gBAClD,MAAM,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC;AACtD,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACf,oBAAoB,CAAC,IAAI,CAAC;wBACxB,CAAC,UAAU,GAAG;AACf,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,OAA2B;AAC/B,IAAA,IAAI,OAA2B;AAC/B,IAAA,IAAI,OAA2B;AAC/B,IAAA,IAAI,OAA2B;AAE/B,IAAA,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAClC,cAAE,CAAC,CAAC,UAAU;AACd,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK;AAC/B,cAAE,CAAC,CAAC,UAAU;AACd,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK;AAClC,cAAE,CAAC,CAAC,UAAU;AACd,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK;AAC/B,cAAE,CAAC,CAAC,UAAU;AACd,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;AAEnD,QAAA,IAAI,GAAG,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,GAAG;AAChF,QAAA,IAAI,GAAG,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,GAAG;AAChF,QAAA,IAAI,GAAG,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,GAAG;AAChF,QAAA,IAAI,GAAG,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,GAAG;IAClF;AAEA,IAAA,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC;AAC1E,QAAA,IAAI,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5E;AAEA,IAAA,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC;AAC1E,QAAA,IAAI,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5E;AAEA,IAAA,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAA,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAE5C,IAAA,MAAM,aAAa,GAAa,WAAW,CAAC,OAAO,CAAC;AACpD,IAAA,MAAM,aAAa,GAAa,WAAW,CAAC,OAAO,CAAC;IAEpD,MAAM,IAAI,GACR,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK;AACpC,UAAE,aAAa,CAAC,CAAC;AACjB,UAAE,iBAAiB,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GACR,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK;AACpC,UAAE,aAAa,CAAC,CAAC;AACjB,UAAE,iBAAiB,CAAC,CAAC,CAAC;IAE1B,MAAM,IAAI,GACR,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK;AACpC,UAAE,aAAa,CAAC,CAAC;AACjB,UAAE,iBAAiB,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GACR,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK;AACpC,UAAE,aAAa,CAAC,CAAC;AACjB,UAAE,iBAAiB,CAAC,CAAC,CAAC;AAE1B,IAAA,IAAI,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/B,IAAA,IAAI,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAE/B,IAAA,IAAI,OAAO,IAAI,EAAE,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC7D,QAAA,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACnD;IAEA,IACE,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO;QACxC,EAAE,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9C;AACA,QAAA,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACnD;IAEA,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE;QACtD,kBAAkB,GAAG,UAAU,CAAC;YAC9B,WAAW;AACX,YAAA,IAAI,EAAE,kBAAkB;YACxB,YAAY;YACZ;AACD,SAAA,CAAC;IACJ;SAAO,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;QAChE,kBAAkB,GAAG,YAAY,CAAC;YAChC,WAAW;AACX,YAAA,IAAI,EAAE,kBAAkB;YACxB;AACD,SAAA,CAAC;;QAGF,IAAI,EAAE,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAClD,YAAA,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;AACxC,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE;AAC3C,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAW;oBAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxC,wBAAA,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;AAAE,4BAAA,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;AAClD,wBAAA,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;AAAE,4BAAA,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;oBACpD;gBACF;YACF;QACF;IACF;SAAO,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC5D,kBAAkB,GAAG,UAAU,CAAC;YAC9B,WAAW;AACX,YAAA,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3B,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa;AACxD,YAAA,UAAU,EAAE,KAAK;YACjB,YAAY;YACZ,YAAY;YACZ,IAAI;YACJ,MAAM;AACN,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,mBAAmB;YAC7B;AACD,SAAA,CAAkC;AAEnC,QAAA,WAAW,GAAG,+BAA+B,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAChF;SAAO,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE;QAC7D,kBAAkB,GAAG,WAAW,CAAC;YAC/B,WAAW;AACX,YAAA,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3B,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa;AACxD,YAAA,UAAU,EAAE,KAAK;YACjB,YAAY;YACZ,YAAY;YACZ,IAAI;YACJ,MAAM;AACN,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,mBAAmB;YAC7B;AACD,SAAA,CAAkC;AAEnC,QAAA,WAAW,GAAG,+BAA+B,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAChF;SAAO,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;QAC/D,kBAAkB,GAAG,WAAW,CAAC;YAC/B,WAAW;AACX,YAAA,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3B,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa;YACrD;AACD,SAAA,CAAC;AAEF,QAAA,WAAW,GAAG,+BAA+B,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAChF;IAEA,IAAI,mBAAmB,EAAE;AACvB,QAAA,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAC3D,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,CAAC,KAAI;AACxD,YAAA,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;AAClE,QAAA,CAAC,CAAC;IACJ;IACA,IAAI,oBAAoB,EAAE;AACxB,QAAA,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;IACxD;IACA,IAAI,uBAAuB,EAAE;AAC3B,QAAA,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,uBAAuB,CAAC;QACvE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,CAAC,KAAI;AACxD,YAAA,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,uBAAuB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5E,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO;AACL,QAAA,OAAO,EAAE,YAAY;AACrB,QAAA,OAAO,EAAE,YAAY;QACrB,cAAc;QACd,eAAe;QACf,kBAAkB;QAClB,WAAW;QACX,iBAAiB;QACjB;KACD;AACH;AAEA,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,IAAI,KAAI;AAC1C,IAAA,IACE,CAAC,sBAAsB,CAAC,SAAS,CAAC;SACjC,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EACjD;AACA,QAAA,OAAO,MAAM;IACf;AACA,IAAA,OAAO,SAAS;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAA;IAC3C,OAAO,CAAC,IAAI,KACV,sBAAsB,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACvD,QAAQ,GACR,OAAO,CAAA,EAAA,EACV,IAAI,EAAA,CAAA,CACJ;AACN;;SC/pBgB,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,EAAA;AAClE,IAAA,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,cAAc,GAAG,GAAG,cAAc,CAAA,CAAA,EAAI,mBAAmB,CACvD,UAAU,kCACL,IAAI,CAAC,MAAM,CAAA,EAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,EACrC,cAAc,CACf,CAAA,CAAE;IACL;AACA,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,UAAU,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAA,EAAK,IAAI,CAAC,IAAI,CAAA,CAAG,CAAA,CAAE;AACrE;AAEO,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,eAAe;AAEtE,MAAM,uBAAuB,GAAG,CACrC,YAAY,EACZ,UAAU,GAAG,6BAA6B,KACxC;;IACF,MAAM,KAAK,GAAG,EAAE;IAChB,MAAM,KAAK,GAAG,EAAE;AAEhB,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC5B,UAAE;AACF,UAAE,SAAS,CAAC,YAAY,CAAC;AAE3B,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE;IAE1C,IAAI,CAAC,GAAG,CAAC;AAET,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,CAAC,EAAE;IACL;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC9B,MAAM,WAAW,GAAG,CAAA,EAClB,CAAA,EAAA,GAAA,UAAU,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,IAAI,GACJ,IAAI,CAAC,IAAI,CAAA,CACZ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,6BAA6B,CAAC,IAAI,CAC1C,CAAA,CAAA,EACE,IAAI,CAAC;cACD,MAAA,mBAAmB,CACjB,UAAU,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,IAAI,CAAC,MAAM,CAAA,EAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,EACrC,EAAE,CACH,mCAAI,IAAI,CAAC,MAAM,CAAC;cACjB,MACN,CAAA,CAAE;AAEF,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACjD,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;AACF,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACxB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;AACzB;;ACnEA;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EAQZ,EAAA;;AAEC,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,IAAI,GAAG,CACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACb,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC;QACnB;AACA,QAAA,OAAO,CAAC,CAAC,OAAiB,CAAC;IAC7B,CAAC,CAAC,CACH,CACF;;IAGD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACvC,QAAA,MAAM,UAAU,GACd,OAAO,OAAO,KAAK;AACjB,cAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK;AACvC,cAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAiB,CAAC,KAAK,KAAK,CAAC;QAEtD,MAAM,KAAK,GAAG;cACV,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU;AAC1C,cAAE;AACF,kBAAE,UAAU,CAAC,KAAK;kBAChB,SAAS;QAEb,OAAO;AACL,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB;SACD;AACH,IAAA,CAAC,CAAC;IAEF,OAAO;AACL,QAAA,YAAY,EAAE;AACZ,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC,CAAoB,KAAI;AAChC,oBAAA,MAAM,KAAK,GAAoC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE;AACjF,oBAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,wBAAA,KAAK,CAAC,MAAM,GAAG,WAAW;oBAC5B;AACA,oBAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,wBAAA,KAAK,CAAC,WAAW,GAAG,WAAW;oBACjC;AACA,oBAAA,OAAO,KAAK;gBACd,CAAC;AACD,gBAAA,IAAI,EAAE,MAAe;gBACrB,KAAK;gBACL,KAAK,EAAE,EAAE;AACV;AACF;KACF;AACH;;ACHA;;AAEG;AACI,MAAM,mBAAmB,GAAwB;AACtD,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,+BAA+B;AAC1C,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,QAAQ,EAAE;CACX;AAED;;AAEG;AACH,SAAS,QAAQ,CAAC,IAA6B,EAAE,QAAkB,EAAA;AACjE,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB;AACA,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB;AAEA;;AAEG;AACH,SAAS,WAAW,CAAC,KAAc,EAAE,MAAmC,EAAA;IACtE,IAAI,MAAM,EAAE;AACV,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;IAEA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,QAAA,OAAO,EAAE;IACX;;AAGA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK,CAAC,cAAc,EAAE;IAC/B;;AAGA,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,OAAO,KAAK,CAAC,kBAAkB,EAAE;IACnC;;IAGA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,GAAG,KAAgC;AAC5C,QAAA,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;AAAE,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,SAAU,OAAO,CAAC,MAAA,GAAwB,EAAE,EAAA;AAChD,IAAA,MAAM,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,GAAG,EAAE,EACV,SAAS,GAAG,EAAE,EACf,GAAG,MAAM;;IAGV,OAAO,CAAC,IAA6B,KAAI;;QAEvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,YAA6B;QACjC,MAAM,UAAU,GAA6C,EAAE;QAE/D,IAAI,KAAK,EAAE;YACT,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;AACxC,YAAA,YAAY,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;QAChD;QAEA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,gBAAA,IAAI,KAAyB;AAC7B,gBAAA,IAAI,QAAkB;AACtB,gBAAA,IAAI,WAAqD;AAEzD,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,KAAK,GAAG,KAAK;oBACb,QAAQ,GAAG,KAAK;oBAChB,WAAW,GAAG,MAAM;gBACtB;qBAAO;AACL,oBAAA,KAAK,GAAG,KAAK,CAAC,KAAK;oBACnB,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;AAC5C,oBAAA,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM;gBACtC;gBAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK;AACL,oBAAA,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW;AACtC,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;aAAO,IAAI,CAAC,KAAK,EAAE;;AAEjB,YAAA,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;AAC1D,YAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;AAChC,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;oBAC7B,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;oBAC/C;gBACF;YACF;;YAGA,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9D,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,oBAAA,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;gBACnD;YACF;QACF;AAEA,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,mBAAmB,CAAA,EAAK,KAAK,CAAE;AAExD,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,CAAC,IAAI,EAAE,EACjD,KAAK,EAAE,WAAW,EAAA;YAEjB,YAAY,IAAI,6BAAK,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,EAAA,EAAG,YAAY,CAAO;AAC3G,YAAA,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAC1B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,KAAK,CAAC,IAAI,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,EAAA;gBAC3E,IAAI,CAAC,KAAK,IAAI,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAO,oBAAA,IAAI,CAAC,KAAK;AAAU,oBAAA,IAAA,CAAA;AACzC,gBAAA,IAAI,CAAC,KAAK,CACP,CACP,CAAC,CACE;AAEV,IAAA,CAAC;AACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;AACG,SAAU,gBAAgB,CAAC,MAAA,GAAiC,EAAE,EAAA;IAClE,MAAM,EACJ,MAAM,GAAG,EAAE,EACX,KAAK,EACL,MAAM,EACN,KAAK,GAAG,EAAE,EACV,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,IAAI,EACjB,SAAS,GAAG,IAAI,EACjB,GAAG,MAAM;;IAGV,OAAO,CAAC,IAA6B,KAAI;;QAEvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAA6C,EAAE;;QAG1D,IAAI,KAAK,EAAE;YACT,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM;AACtC,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,gBAAA,IAAI,KAAyB;AAC7B,gBAAA,IAAI,QAAkB;AACtB,gBAAA,IAAI,WAAqD;AAEzD,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;oBAE7B,KAAK,GAAG,KAAK;oBACb,QAAQ,GAAG,KAAK;oBAChB,WAAW,GAAG,MAAM;gBACtB;qBAAO;;;AAGL,oBAAA,KAAK,GAAG,KAAK,CAAC,KAAK;oBACnB,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;AAC5C,oBAAA,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM;gBACtC;gBAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACtC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;gBAEtD,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,UAAU,GAAG,KAAK,GAAG,SAAS;AACrC,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;aAAO;;AAEL,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CACnC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAC1C;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACnB,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,UAAU,GAAG,GAAG,GAAG,SAAS;oBACnC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM;AACrC,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,mBAAmB,CAAA,EAAK,KAAK,CAAE;;AAGxD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI;QACb;QAEA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAE,CAAC,IAAI,EAAE,EAC5E,KAAK,EAAE,WAAW,EAAA,EAEjB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAA;YAC3E,IAAI,CAAC,KAAK,KACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA;AACG,gBAAA,IAAI,CAAC,KAAK;AACV,gBAAA,SAAS,CACH,CACV;AACA,YAAA,IAAI,CAAC,KAAK,CACP,CACP,CAAC,CACE;AAEV,IAAA,CAAC;AACH;AAYA;;AAEG;AACG,SAAU,gBAAgB,CAAC,OAAoB,EAAA;AACnD,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;;AAEpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;;AAEjC,QAAA,OAAO,OAAO;IAChB;IAEA,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,SAAS,EAAE;;AAE9C,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE;QAClG,MAAM,MAAM,GAAG,OAAwB;AACvC,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB;;AAGA,IAAA,OAAO,IAAI;AACb;;ACtZA;;;AAGG;AACG,SAAU,YAAY,CAAC,GAAsB,EAAA;AACjD,IAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,OAAO;AAChD;AAEA,SAAS,SAAS,CAAC,CAAU,EAAA;IAC3B,IAAI,CAAC,IAAI,IAAI;AAAE,QAAA,OAAO,GAAG;IACzB,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,CAAC,CAAC,cAAc,EAAE;IACpD,IAAI,CAAC,YAAY,IAAI;AAAE,QAAA,OAAO,CAAC,CAAC,kBAAkB,EAAE;AACpD,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AAClB;AAEA,SAAS,YAAY,CAAC,CAAsB,EAAE,GAA+C,EAAA;AAC3F,IAAA,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACpD;AAEA;;;;AAIG;AACG,SAAU,mBAAmB,CACjC,MAA4B,EAAA;IAE5B,OAAO,CAAC,KAAgB,KAAI;AAC1B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI;AACpB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,IACzD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;YACvB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC3C,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;YAC9B,QACE,6BAAK,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,SAAS,EAAA;AACtD,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;AAAG,oBAAA,KAAK,CAAC,KAAK;AAAU,oBAAA,IAAA,CAAA;AACrD,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,GAAG,QAAQ,EAAE,EAAA,EAC9F,OAAO,CACH,CACH;QAEV,CAAC,CAAC,CACE;AAEV,IAAA,CAAC;AACH;;ACtDA;;AAEG;AACI,MAAM,aAAa,GAAG,SAAS;AAEtC;;;AAGG;AACG,SAAU,eAAe,CAC7B,QAA8D,EAAA;IAE9D,OAAO,OAAO,QAAQ,KAAK;AACzB,UAAE;UACA,CAAC,CAAsB,KAAK,CAAC,CAAC,QAAQ,CAAC;AAC7C;AAEA;;;AAGG;AACG,SAAU,aAAa,CAC3B,IAAgC,EAChC,OAAqC,EACrC,cAAiC,YAAY,EAAA;IAE7C,OAAO,OAAO,CAAC,MAAK;AAClB,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAiB,EAAE,WAAW,CAAC;IAC/D,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAClC;AAEA;;;AAGG;SACa,aAAa,CAC3B,IAAgC,EAChC,IAA6F,EAC7F,aAA+B,EAAA;IAE/B,OAAO,OAAO,CAAC,MAAK;AAClB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,IAAI,OAAO,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACtD,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAS,aAAa,CAAC;QACvD,OAAO,IAAI,KAAK;cACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;cAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AACjC;;ACxCA;;;;;;AAMG;AACW,SAAU,UAAU,CAAC,EACjC,aAAa,EACb,OAAO,EACP,KAAK,EACL,MAAM,GACU,EAAA;AAChB,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE;YACL,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;AAC7B,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,MAAM,EAAE,qCAAqC;AAC7C,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,UAAU,EAAE,2BAA2B;AACvC,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,YAAY;AACxB,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA;AAChD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,KAAK,EAAE,0BAA0B;AACjC,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,UAAU,EAAE,WAAW;AACxB,iBAAA,EAAA,EAEA,aAAa,CACV;AACN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,KAAK,EAAE,0BAA0B;AACjC,oBAAA,UAAU,EAAE,GAAG;AAChB,iBAAA,EAAA,EAEA,OAAO,CACJ,CACF,CACF;AAEV;;ACnEA;;;;;;;AAOG;AA0BH;;AAEG;AACG,SAAU,iBAAiB,CAAC,EAChC,aAAa,EACb,IAAI,EACJ,SAAS,EACT,aAAa,GACO,EAAA;;IAEpB,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzC,OAAO,CAAA,EAAG,IAAI,CAAA,+CAAA,CAAiD;YACjE;QACF;IACF;;AAGA,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,QAAA,OAAO,4DAA4D;IACrE;;IAGA,IAAI,SAAS,EAAE;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACxC,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,QAAQ;oBAAE;AACf,gBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE;AACzD,oBAAA,QACE,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,qBAAA,CAAuB;AAC5C,wBAAA,CAAA,kBAAA,EAAqB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;gBAE1D;YACF;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,EACjC,aAAa,EACb,IAAI,EACJ,SAAS,GAAG,MAAM,GACG,EAAA;IACrB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AACvC,QAAA,OAAO,CAAA,GAAA,EAAM,SAAS,CAAA,kDAAA,EAAqD,SAAS,QAAQ;IAC9F;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;SACa,mBAAmB,CAAC,EAClC,aAAa,EACb,KAAK,EACL,KAAK,EACL,aAAa,GAAG,KAAK,EACrB,aAAa,GAAG,IAAI,EACpB,SAAS,GACa,EAAA;IACtB,IAAI,aAAa,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC5E,QAAA,OAAO,8DAA8D;IACvE;IAEA,IAAI,aAAa,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC5E,QAAA,OAAO,8DAA8D;IACvE;;IAGA,IAAI,SAAS,EAAE;QACb,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACxC,gBAAA,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,QAAQ;wBAAE;AACf,oBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE;AACzD,wBAAA,QACE,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,0BAAA,CAA4B;AACjD,4BAAA,CAAA,kBAAA,EAAqB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;oBAE1D;gBACF;YACF;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;ACzGA;AAEA;;;;;;AAMG;AACG,SAAU,oBAAoB,CAClC,IAAwE,EACxE,cAAyB,EAAA;AAEzB,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AACtB,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE,EAAE;IACxD;AACA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE,EAAE;IACrD;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AAC5D;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAClC,IAA6E,EAAA;AAE7E,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AACtB,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB;AACA,IAAA,OAAO,IAAI;AACb;AAeA;;;AAGG;SACa,sBAAsB,CACpC,WAA4D,EAC5D,aAAyC,EACzC,MAA6B,EAAA;AAE7B,IAAA,IAAI,CAAC,aAAa;AAAE,QAAA,OAAO,WAAW;IAEtC,OAAO,CAAC,CAAsB,KAAI;;AAChC,QAAA,MAAM,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,WAAW,CAAC,CAAC,CAAC,CAAE;AAEnC,QAAA,IAAI,aAAa,CAAC,QAAQ,EAAE;AAC1B,YAAA,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;gBAE9B,IAAI,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,aAAa,EAAE;oBACzB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;gBAC5C;YACF;iBAAO;;AAEL,gBAAA,KAAK,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;AACpD,gBAAA,KAAK,CAAC,aAAa,GAAG,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG;gBACtD,IAAI,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,eAAe,EAAE;oBAC3B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC;gBAC9C;YACF;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH;;ACnEA;AAEA,SAAS,oBAAoB,CAAC,MAAuB,EAAA;IACnD,MAAM,UAAU,GAA+C,EAAE;AAEjE,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC/D,QAAA,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;YAC/B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD;aAAO;YACL,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK;AACjC,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AACpB,gBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAClB,gBAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAA,CAAC,CAAC;QACJ;IACF;;AAGA,IAAA,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C;AAEM,SAAU,cAAc,CAC5B,SAAoB,EACpB,kBAA2B,EAAA;IAE3B,MAAM,gBAAgB,GAA+C,EAAE;IAEvE,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;;QAElD,IAAI,SAAS,CAAC,UAAU,KAAK,aAAa,IAAI,QAAQ,KAAK,kBAAkB;YAAE;QAC/E,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD;AAEA,IAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM,IAAI;AAEpD,IAAA,OAAO,SAAS,CAAC,UAAU,KAAK;AAC9B,UAAE,CAAC,CAAC,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;UAC3C,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD;AAEA;AAEA,SAAS,eAAe,CACtB,UAAkC,EAClC,IAAY,EAAA;IAEZ,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,GAAG,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AACvD,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;IAC3B;AACA,IAAA,OAAO,GAAG;AACZ;AAEO,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,WAAW,CAClE,CAAC,GAAa,MAAM;IAClB,UAAU,EAAE,IAAI,GAAG,EAAqB;IAExC,SAAS,CAAC,aAAqB,EAAE,MAAuB,EAAA;AACtD,QAAA,GAAG,CAAC,CAAC,OAA4B,KAAI;YACnC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9C,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;YACpC,UAAU,CAAC,GAAG,CAAC,aAAa,kCAAO,GAAG,CAAA,EAAA,EAAE,OAAO,EAAA,CAAA,CAAG;YAClD,OAAO,EAAE,UAAU,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,aAAqB,EAAE,QAAgB,EAAA;AACjD,QAAA,GAAG,CAAC,CAAC,OAA4B,KAAI;YACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;AACtD,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,OAAO,EAAE;YACxB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzC,YAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YACxB,UAAU,CAAC,GAAG,CAAC,aAAa,kCAAO,QAAQ,CAAA,EAAA,EAAE,OAAO,EAAA,CAAA,CAAG;YACvD,OAAO,EAAE,UAAU,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAAqB,EAAE,IAAoB,EAAA;AACvD,QAAA,GAAG,CAAC,CAAC,OAA4B,KAAI;YACnC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9C,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC;YACtD,UAAU,CAAC,GAAG,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,GAAG,CAAA,EAAA,EAAE,UAAU,EAAE,IAAI,EAAA,CAAA,CAAG;YAC3D,OAAO,EAAE,UAAU,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ,CAAC;AAED,IAAA,cAAc,CAAC,aAAqB,EAAA;AAClC,QAAA,GAAG,CAAC,CAAC,OAA4B,KAAI;YACnC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;YACzC,IAAI,GAAG,EAAE;AACP,gBAAA,UAAU,CAAC,GAAG,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,GAAG,CAAA,EAAA,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAG;YAC/D;YACA,OAAO,EAAE,UAAU,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;AACD,CAAA,CAAC,CACH;;ACzGK,SAAU,YAAY,CAAC,OAA4B,EAAA;AACvD,IAAA,MAAM,MAAM,GAAG,KAAK,EAAE;AACtB,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM;AAC3C,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO;AAExB,IAAA,MAAM,SAAS,GAAG,oBAAoB,CACpC,CAAC,KAAU,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAC3C;AAED,IAAA,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,SAAS,CAAC;AACvE,IAAA,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,WAAW,CAAC;AAE7E,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;AAC5B,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AAC5B,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;AACnC,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,MAAM,IAAI;AACjE,QAAA,OAAO,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC5C,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEzB,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,WAAkC,KAAI;QACrC,MAAM,MAAM,GAAmC,EAAE;AACjD,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzD,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE;QAC5D;AACA,QAAA,MAAM,MAAM,GAAoB;YAC9B,QAAQ;AACR,YAAA,IAAI,EAAE,OAAO;YACb;SACD;AACD,QAAA,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACzB,CAAC,EACD,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAC5B;AAED,IAAA,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,WAA6C,KAAI;QAChD,MAAM,MAAM,GAAmC,EAAE;AACjD,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACxD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7C;AACA,QAAA,MAAM,MAAM,GAAoB;YAC9B,QAAQ;AACR,YAAA,IAAI,EAAE,UAAU;YAChB;SACD;AACD,QAAA,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACzB,CAAC,EACD,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAC5B;AAED,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,QAAA,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC/B,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEnC,IAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC/E;AAoBM,SAAU,cAAc,CAAC,OAA8B,EAAA;AAC3D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO;AACvC,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;AAE1B,IAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAe,CAAE,GAAG,YAAY,CAAC;AAC1E,QAAA,IAAI,EAAE,OAEP,CAAA,CAAC;AAEF,IAAA,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAAiC,KAAI;QACpC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,EAAE;YACP;QACF;QACA,MAAM,WAAW,GAA0B,EAAE;AAC7C,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAC5B;QACF;QACA,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,YAAY,CAAC,WAAW,CAAC;QAC3B;IACF,CAAC,EACD,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAC9B;AAED,IAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AACzC;AA4BM,SAAU,iBAAiB,CAAC,OAAiC,EAAA;IACjE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;AAExC,IAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAe,CAAE,GAAG,YAAY,CAAC;QAC5E,IAED,CAAA,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ;AAE7E,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAW,KAAI;QACd,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,KAAK,EAAE;YACP;QACF;QAEA,MAAM,WAAW,GAAqC,EAAE;AAExD,QAAA,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE3E,YAAA,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9G,YAAA,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH;aAAO,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1D,YAAA,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9E;aAAO,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1D,YAAA,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9E;QAEA,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,cAAc,CAAC,WAAW,CAAC;QAC7B;AACF,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CACnD;AAED,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAC9B,OAAO;AACL,QAAA,KAAK,EAAE,SAA4C;AACnD,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,GAAG,EAAE;AACN,KAAA,CAAC,EACF,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;IAED,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACzD;AAEA;AAEA;;;AAGG;SACa,eAAe,CAC7B,IAAS,EACT,aAAqB,EACrB,QAAiB,EAAA;AAEjB,IAAA,MAAM,SAAS,GAAG,oBAAoB,CACpC,CAAC,KAAU,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CACpD;IAED,OAAO,OAAO,CAAC,MAAK;QAClB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAC3D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACjC;;AC1LA;;;;;;;;;;;AAWG;AACG,SAAU,WAAW,CAA2D,KAA+B,EAAA;AACnH,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,MAAM,EACN,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EACnB,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,GAAG,EAClB,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACX,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAClH,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IAErD,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;IAEgB,iBAAiB,CAAC;QAClC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,kBAAkB;QAC7C,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,MAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QACtF,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,MAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS;AACtF,KAAA;;IAGD,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;IAIvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;AACtD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAC3B,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CACrD;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAqB;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEtB,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC,EAAE,WAAW,EAAE,YAAY,EAAE;AAChF,YAAA,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;YAC3E,SAAS,CAAC,CAAC,GAAG;kBACV,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;kBACxC,WAAW;AACf,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAE1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;IAGD,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;QAC5E,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;QACjG,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9F,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;;IAG5D,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,aAAa;AAC5B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;AACV,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,aAAa,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAE1G,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ,EACd,SAAS;AACT,QAAA,SAAS,EACT,aAAa,EAAE,OAAO,IAAI,SAAS,EACnC,YAAY,EAAE,MAAM,IAAI,SAAS,EACjC,SAAS;QACT,UAAU;AACV,QAAA,WAAW,EACX,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;AACX,QAAA,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,GACvC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,EAAC,EAC1C,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,WAAW,CAAC,WAAW,GAAG,aAAa;;AC3EvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEG;AACG,SAAU,SAAS,CAA2D,KAA6B,EAAA;;IAC/G,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,MAAM,EACN,gBAAgB,GAAG,aAAa,EAChC,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,KAAK,EAClB,WAAW,GAAG,CAAC,EACf,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,GAAG,EACjB,SAAS,GAAG,CAAC,EACb,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAElH,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;;IAGF,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;;AAKvH,IAAA,MAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,gBAAgB,CAAC,MAAK,SAAS;;AAGxE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,IAAI,kBAAkB,EAAE;;AAEtB,YAAA,OAAO,QAAQ;QACjB;QAEA,IAAI,MAAM,EAAE;;YAEV,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAChE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACb,MAAM,OAAO,GAAwB,EAAE,CAAC,gBAAgB,GAAG,EAAE,EAAE;;AAE/D,oBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;oBACvB;AACA,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;gBACpB;gBACA,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAyC,CAAC;AAE7C,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B;;QAGA,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;;IAG5D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGhE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,WAAW,EAAE;aACd;;YAGD,IAAI,OAAO,EAAE;gBACX,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YACrD;iBAAO;AACL,gBAAA,SAAS,CAAC,MAAM,GAAG,aAAa;YAClC;;YAGA,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM;AACjC,gBAAA,SAAS,CAAC,WAAW,GAAG,WAAW;YACrC;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,OAAO,CACvB,MAAM,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC3E,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAChD;;AAGD,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;QAEjC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,CAAC,EAAE,WAAW;AACd,gBAAA,WAAW,EAAE;aACd;;YAGD,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YACnE;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;;IAGlD,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAe,GAAG,MAAe;;AAG9D,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;;AAGpF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAEnD,QAAA,OAAO,YAAY,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,UAAU;YACV;AACD,SAAA,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;;AAGrD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAClE,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAA,EAAK,UAAU,CAAE;;QAGvD,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE;AACrC,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;QACzB;AAEA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;AAGD,IAAA,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO;IACpC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;QAC5E,IAAI,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3G,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;IAGvD,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,WAAW;AAC1B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;AACV,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,WAAW,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;AAGxG,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,kBAAkB,IAAI,MAAM,EAAE;;AAEhC,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyB,KAAI;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;AAE3C,gBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAA,CAAA,CAAG,CAAC;gBACnF;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;IAGtE,MAAM,WAAW,qHACf,SAAS,EACT,IAAI,EAAE,aAAa,EACnB,SAAS;AACT,QAAA,SAAS,EACT,aAAa,EAAE,MAAM,IAAI,SAAS,EAClC,KAAK;QACL,SAAS,EAAA,GACL,UAAU,IAAI,EAAE,UAAU,EAAE,EAAC,EAAA,EACjC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;QACX,QAAQ,EAAA,CAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,SAAS,CAAC,WAAW,GAAG,WAAW;;AClVnC;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACG,SAAU,SAAS,CAA2D,KAA6B,EAAA;;AAC/G,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,MAAM,EACN,gBAAgB,GAAG,aAAa,EAChC,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,KAAK,GAAG,WAAW,EACnB,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,CAAC,EACb,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAElH,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;;IAGF,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;;AAKvH,IAAA,MAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,gBAAgB,CAAC,MAAK,SAAS;;AAGxE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,IAAI,kBAAkB,EAAE;;AAEtB,YAAA,OAAO,QAAQ;QACjB;QAEA,IAAI,MAAM,EAAE;;YAEV,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAChE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACb,MAAM,OAAO,GAAwB,EAAE,CAAC,gBAAgB,GAAG,EAAE,EAAE;;AAE/D,oBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;oBACvB;AACA,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;gBACpB;gBACA,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAyC,CAAC;AAE7C,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B;;QAGA,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;;IAG5D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGhE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE;;AAGrD,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AAExE,YAAA,SAAS,CAAC,IAAI,GAAG,KAAK;AACtB,YAAA,SAAS,CAAC,WAAW,GAAG,WAAW;YAEnC,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,CAAC,MAAM,GAAG,KAAK;AACxB,gBAAA,SAAS,CAAC,WAAW,GAAG,SAAS;YACnC;iBAAO;AACL,gBAAA,SAAS,CAAC,MAAM,GAAG,MAAM;YAC3B;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,OAAO,CACvB,MAAM,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC3E,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAChD;;AAGD,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;;AAGpF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAEnD,QAAA,OAAO,YAAY,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,UAAU;YACV;AACD,SAAA,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;;AAGrD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAClE,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAA,EAAK,UAAU,CAAE;;QAGvD,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE;AACrC,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;QACzB;AAEA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;AAGD,IAAA,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO;IACpC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;QAC5E,IAAI,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3G,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;IAGvD,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,WAAW;AAC1B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;AACV,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,WAAW,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;AAGxG,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,kBAAkB,IAAI,MAAM,EAAE;AAChC,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyB,KAAI;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAA,CAAA,CAAG,CAAC;gBACnF;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;IAGtE,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,EACnB,SAAS;AACT,QAAA,SAAS,EACT,aAAa,EAAE,MAAM,IAAI,SAAS,EAClC,KAAK;AACL,QAAA,SAAS,EACT,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;QACX,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,SAAS,CAAC,WAAW,GAAG,WAAW;;AC1OnC;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACG,SAAU,gBAAgB,CAA2D,KAAoC,EAAA;;AAC7H,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,MAAM,EACN,gBAAgB,GAAG,aAAa,EAChC,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,KAAK,GAAG,WAAW,EACnB,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,CAAC,EACb,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAElH,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;;IAGF,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;;AAKvH,IAAA,MAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,gBAAgB,CAAC,MAAK,SAAS;;AAGxE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,IAAI,kBAAkB,EAAE;;AAEtB,YAAA,OAAO,QAAQ;QACjB;QAEA,IAAI,MAAM,EAAE;;YAEV,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAChE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACb,MAAM,OAAO,GAAwB,EAAE,CAAC,gBAAgB,GAAG,EAAE,EAAE;;AAE/D,oBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;oBACvB;AACA,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;gBACpB;gBACA,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAyC,CAAC;AAE7C,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B;;QAGA,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;;IAG5D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGhE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE;;AAGrD,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AAExE,YAAA,SAAS,CAAC,IAAI,GAAG,KAAK;AACtB,YAAA,SAAS,CAAC,WAAW,GAAG,WAAW;YAEnC,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,CAAC,MAAM,GAAG,KAAK;AACxB,gBAAA,SAAS,CAAC,WAAW,GAAG,SAAS;YACnC;iBAAO;AACL,gBAAA,SAAS,CAAC,MAAM,GAAG,MAAM;YAC3B;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,OAAO,CACvB,MAAM,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC3E,CAAC,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAChD;;AAGD,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;;AAGpF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAEnD,QAAA,OAAO,YAAY,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,UAAU;YACV;AACD,SAAA,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;;AAGrD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAClE,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAA,EAAK,UAAU,CAAE;;QAGvD,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE;AACrC,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;QACzB;AAEA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;AAGD,IAAA,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO;IACpC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;QAC5E,IAAI,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3G,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;IAGvD,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,kBAAkB;AACjC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;AACV,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,kBAAkB,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;AAG/G,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,kBAAkB,IAAI,MAAM,EAAE;AAChC,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyB,KAAI;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAA,CAAA,CAAG,CAAC;gBACnF;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;IAGtE,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,aAAa,EACnB,SAAS;AACT,QAAA,SAAS,EACT,aAAa,EAAE,MAAM,IAAI,SAAS,EAClC,KAAK;QACL,SAAS;AACT,QAAA,SAAS,EACT,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;QACX,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,gBAAgB,CAAC,WAAW,GAAG,kBAAkB;;AC5PjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDG;AACG,SAAU,OAAO,CAA2D,KAA2B,EAAA;AAC3G,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,aAAa,GAAG,OAAO,EACvB,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,GAAG,OAAO,EACrB,gBAAgB,EAChB,UAAU,GAAG,KAAK,EAClB,WAAW,EACX,eAAe,GAAG,MAAM,EACxB,eAAe,GAAG,CAAC,EACnB,WAAW,GAAG,IAAI,EAClB,OAAO,EACP,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;IAI3B,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,EAAE,CAAC;IAEzD,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;;IAGF,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;;AAKvH,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;QAC9B,OAAO,OAAO,aAAa,KAAK;cAC5B,CAAC,CAAsB,KAAK,aAAa,CAAC,CAAW;cACrD,CAAC,CAAsB,KAAK,CAAC,CAAC,aAAa,CAAC;AAClD,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;;AAGnB,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AACvC,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAqB;AACvE,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;;AAG1B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,gBAAgB,EAAE;AAChD,YAAA,OAAO,gBAAgB;QACzB;AAEA,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,MAAM,EAAE,iBAAiB;AACzB,YAAA,OAAO,EAAE;SACV;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,gBAAgB;QAEnE,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC1D,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;;IAGf,OAAO,CAAC,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC;AACvC,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC;QAEvC,OAAO;AACL,YAAA,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;AAC3C,YAAA,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;SACxC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;;AAGnC,IAAoB,OAAO,CAAC,MAAK;AAC/B,QAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE;AAClC,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC;;AAGb,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;YAC3B,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;AACvB,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,WAAW,EAAE;aACd;AACH,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;IAEzC,OAAO,CAC1B,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC9E,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC;;AAIpD,IAA0B,OAAO,CAAC,MAAK;AACrC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AAEjC,QAAA,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAEtD,QAAA,OAAO,CAAC,CAAsB,EAAE,CAAS,KAAI;AAC3C,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAErE,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,QAAQ,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,EAChD,QAAQ,EAAC,MAAM,EAAA,EAEd,YAAY,CACR;AAEX,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC;;AAIrD,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;IAGD,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE;AAC/E,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;;IAG1D,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;YACT,aAAa;AACd,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;IAGtG,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ,EACd,SAAS;QACT,SAAS;AACT,QAAA,aAAa,EACb,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW,EAAA,GACP,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,MAC9B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,OAAO,CAAC,WAAW,GAAG,SAAS;;ACnP/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DG;AACG,SAAU,WAAW,CAA2D,KAA+B,EAAA;AACnH,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,MAAM,EACN,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EACnB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,aAAa,GAAG,GAAG,EACnB,iBAAiB,GAAG,CAAC,EACrB,iBAAiB,GAAG,OAAO,EAC3B,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACX,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAClH,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IAErD,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;IAEgB,iBAAiB,CAAC;QAClC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,kBAAkB;QAC7C,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,MAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QACtF,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,MAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS;AACtF,KAAA;;IAGD,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;;IAKvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGhE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC/B,YAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,gBAAA,OAAO,MAAM,CAAC,CAAC,CAAC;YAClB;AACA,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC;AAClB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAqB;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;;AAGtB,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,WAAW,EAAE,aAAa;AAC1B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,MAAM,EAAE;aACT;;YAGD,IAAI,OAAO,EAAE;gBACX,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YACnD;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;;AAGA,YAAA,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;AAEvD,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAE7G,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;;AAGD,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;;AAG1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAEnD,QAAA,OAAO,YAAY,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,UAAU;YACV,QAAQ;AACR,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;;AAG3F,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAClE,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAA,EAAK,UAAU,CAAE;;QAGvD,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE;AACrC,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;QACzB;AAEA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;QAChC,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5B;AACF,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;IAGD,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAC9D,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AAC5E,QAAA,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QAC/D,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;AAClG,KAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;;IAG5D,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,aAAa;AAC5B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE;YACT,SAAS;YACT,SAAS;AACV,SAAA;QACD,aAAa,EAAE,EAAE,MAAM,EAAE;AAC1B,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,aAAa,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;IAG1G,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,QAAQ,EACd,SAAS;QACT,SAAS,EACT,aAAa,EAAE,OAAO,IAAI,SAAS,EACnC,YAAY,EAAE,MAAM,EACpB,SAAS;QACT,UAAU;AACV,QAAA,WAAW,EACX,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;AACX,QAAA,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,GACvC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,EAAC,EAC1C,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAC3C;AACA,WAAW,CAAC,WAAW,GAAG,aAAa;;ACxWvC;AAEA,SAAS,cAAc,CAAC,EAAE,UAAU,EAAmE,EAAA;AACrG,IAAA,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,aAAa,CAAC;IAE/E,SAAS,CAAC,MAAK;AACb,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACvD,YAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,gBAAA,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC;YACxC;QACF;AACF,IAAA,CAAC,EAAE,EAAE,CAAC,CAAA;AAEN,IAAA,OAAO,IAAI;AACb;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;SACa,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAqB,EAAA;IACtE,QACE,oBAAC,iBAAiB,EAAA,IAAA;AACf,QAAA,UAAU,IAAI,KAAA,CAAA,aAAA,CAAC,cAAc,IAAC,UAAU,EAAE,UAAU,EAAA,CAAI;QACxD,QAAQ,CACS;AAExB;;ACjEA;AACA,MAAM,SAAS,GAAG,YAAY;AAE9B;AACA;AACA,MAAM,eAAe,GAAG,oBAAoB;AAE5C,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAqD5D,SAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAyB,EAAA;AAC9F,IAAA,MAAM,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC;IAE1C,MAAM,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK;IAC9D,MAAM,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM;IAE9D,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAErB,QAAA,MAAM,CAAC,GAAGd,MAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAc,UAAU,CAAC;QAClE,MAAMe,OAAK,GAAGZ,KAAO;AAClB,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,aAAA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAU,KAAI;;YAC9B,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC;gBACb;YACF;AAEA,YAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS;AAChD,YAAA,MAAM,UAAU,GAAuB;AACrC,gBAAA,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5C,gBAAA,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC5C;YACD,OAAO,CAAC,UAAU,CAAC;AACrB,QAAA,CAAC,CAAC;AAEJ,QAAA,CAAC,CAAC,IAAI,CAACY,OAAY,CAAC;;AAGpB,QAAA,CAAC,CAAC,MAAM,CAAC,YAAY;AAClB,aAAA,IAAI,CAAC,MAAM,EAAE,WAAW;AACxB,aAAA,IAAI,CAAC,cAAc,EAAE,IAAI;AACzB,aAAA,IAAI,CAAC,QAAQ,EAAE,WAAW;AAC1B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE1B,QAAA,OAAO,MAAK;AACV,YAAAA,OAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;AAC7B,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEvC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAA;AAEhD,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,SAAS,EAAC,SAAS,EAAE,aAAa,WAAW,CAAC,IAAI,CAAA,CAAA,EAAI,WAAW,CAAC,GAAG,GAAG,EAAA,CAAI,CACrF;AAEV;AAyBA,SAAS,eAAe,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,YAAY,EACF,EAAA;AACV,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;AAClD,IAAA,MAAM,QAAQ,GAAG,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,MAAM,EAAE;;IAG5C,MAAM,kBAAkB,GAAG,YAAY,CAAC;AACtC,QAAA,IAAI,EAAE,kBAAkB;QACxB,QAED,CAAA,CAAC;IAEF,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAClC,QAAA,IAAI,EAAE,kBAAkB;QACxB,MAAM;QACN;AACD,KAAA,CAAC;;;IAIF,MAAM,SAAS,GAAG,YAAY,CAAC;AAC7B,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,QAAQ,EAAE,eAEX,CAAA,CAAC;AAEF,IAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,YAAY;;AAGhD,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAiC,KAAI;QACpC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC;QACF;AACA,QAAA,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;AAC3C,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAC7B;AAED,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,KAAuB,KAAI;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAG,IAAI,CAAC;YACpB;QACF;AACA,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI;QACpB,MAAM,GAAG,GAAG,CAAC,KAAA,IAAA,IAAD,CAAC,uBAAD,CAAC,CAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,iBAAiB,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;QAC1E;AACF,IAAA,CAAC,EACD,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAClC;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,CAAsB,KAAI;AACzB,QAAA,MAAM,KAAK,GAAwB;AACjC,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,CAAC,EAAE;SACJ;QAED,IAAI,OAAO,EAAE;YACX,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;QAC/C;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,GAAG,aAAa;QAC5B;AAEA,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACrE,IAAI,gBAAgB,EAAE;AACpB,gBAAA,KAAK,CAAC,OAAO,GAAG,CAAC;AACjB,gBAAA,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG;AAC3B,gBAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,gBAAA,KAAK,CAAC,WAAW,GAAG,GAAG;YACzB;AAAO,iBAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AAC7B,gBAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,GAAG;YACpC;QACF;aAAO;;AAEL,YAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;YACnF,IAAI,WAAW,EAAE;AACf,gBAAA,KAAK,CAAC,OAAO,GAAG,iBAAiB;YACnC;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EACD,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAC9K;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAA;AACrE,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,SAAS,EACnB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,KAAK,EACf,WAAW,EAAE,IAAI,KAAK,OAAO,EAC7B,mBAAmB,EAAE,IAAI,KAAK,OAAO,GAAG,mBAAmB,GAAG,SAAS,EACvE,cAAc,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,IAAI,IAAI,SAAS,EAAA,CAC3D;AACD,QAAA,IAAI,KAAK,OAAO,KACf,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EAAA,CACpB,CACH,CACG;AAEV;AAmBA,SAAS,YAAY,CAAC,EACpB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,IAAI,EACc,EAAA;IAClB,MAAM,SAAS,GAAG,YAAY,CAAC;AAC7B,QAAA,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,CAAA,WAAA,EAAc,KAAK,CAAA,CAE9B,CAAA,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC;AAC7B,QAAA,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,CAAA,WAAA,EAAc,KAAK,CAAA,MAAA,CAE9B,CAAA,CAAC;;AAGF,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS;AAC3D,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ;AACpC,IAAA,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS;AAE5C,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;QAEtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC;AAExC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE9C,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAClB,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;gBAAE;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAChE,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE;YACb,IAAI,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;AACnC,gBAAA,cAAc,CAAC,GAAG,CAAC,EAAE;YACvB;QACF;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;QAEvC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AAC1B,gBAAA,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ;AACxB,gBAAA,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC;gBACxB,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC;AACnC,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,CAAC;AACH,YAAA,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AAC1C,gBAAA,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ;AACxB,gBAAA,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC;gBACxB,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC;AACnC,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,CAAC;AACH,YAAA,GAAG,EAAE;SACN;AACH,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AAE5D,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAA;QACnE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,QAAQ,GAAG,CAAC,EACf,CAAC,EAAE,EAAE,EACL,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAC,MAAM,EACjB,IAAI,EAAC,MAAM,EAAA,EAEV,KAAK,CACD;AAEN,QAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MACzB,8BACE,GAAG,EAAE,CAAA,GAAA,EAAM,CAAC,CAAA,CAAE,EACd,CAAC,EAAE,GAAG,CAAC,CAAC,EACR,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,EACnB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,MAAM,EAAE,GAAG,CAAC,CAAC,EACb,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAA,CAC7B,CACH,CAAC;QAED,QAAQ;AACP,YAAA,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MAChC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,EACf,CAAC,EAAE,GAAG,CAAC,CAAC,EACR,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,EACnB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,MAAM,EAAE,GAAG,CAAC,CAAC,EACb,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,GAAG,EAAA,CACZ,CACH,CAAC,CACA;AAEV;AAEA;AAEA,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAuC,EAAA;IACzE,QACE,6BAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAA;AACpC,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAE,QAAQ,GAAG,CAAC,EACf,CAAC,EAAE,QAAQ,GAAG,CAAC,EACf,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,QAAQ,EACzB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAC,MAAM,EACjB,IAAI,EAAC,MAAM,EAAA,EAEV,KAAK,CACD,CACH;AAEV;AAEA;AAEA,SAAS,sBAAsB,CAC7B,KAAqC,EAAA;AAErC,IAAA,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,WAAW,GAAG,EAAE,EAChB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,QAAQ,GAAG,GAAG,EACd,OAAO,GAAG,CAAC,EACX,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,GAAG,EAClB,QAAQ,GAAG,WAAW,EACtB,aAAa,GAAG,EAAE,EAClB,SAAS,GAAG,aAAa,EACzB,SAAS,GAAG,IAAI,EAChB,iBAAiB,GAAG,GAAG,EACvB,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,UAAU,EACV,UAAU,EAGV,SAAS,EACV,GAAG,KAAK;IAET,MAAM,kBAAkB,GAAG,OAAO;IAClC,MAAM,kBAAkB,GAAG,aAAa;;IAGxC,MAAM,QAAQ,GAAsB,SAAS,GAAG,OAAO,IAAI,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;;AAGzF,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,cAAc,CAAC;IACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAUpC,IAAI,CAAC;;AAGf,IAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAK;QAC5C,cAAc,CAAC,kBAAkB,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;;AAGxC,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,OAAQ,CAAC,IAAI,IAAI,EAAE,EAA4B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC1D,YAAA,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,CAAC;AACxC,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,CAAC,CAAA,EAAA,EAAE,CAAC,SAAS,GAAG,CAAC,EAAA,CAAA;AAC/B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEV,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;IAGnE,MAAM,UAAU,GAAG,EAAE;;AAGrB,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAC9C,QAAA,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,IAAI;AAC/D,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC9B,YAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;AAClB,YAAA,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG;AAC/C,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAExD,IAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO;AACL,QAAA,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,GAAG,UAAU,CAAA,GAAA,EAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAA,EAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;QACrF,gBAAgB,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,EAAA,CAAI;QAClF,GAAG,EAAE,CAAA,EAAG,OAAO,CAAA,EAAA,CAAI;AACnB,QAAA,KAAK,EAAE;KACR,CAAC,EACF,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CACxC;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAA;QACvD,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAA,EACxE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MACf,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAA;AAC5E,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,cAAc;AACvB,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,YAAY,EAAE,KAAK;oBACnB,eAAe,EAAE,IAAI,CAAC;iBACvB,EAAA,CACD;AACF,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,EAAG,IAAI,CAAC,KAAK,CAAQ,CAC9C,CACP,CAAC,CACE,CACP;AACD,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,KAAK,OAAO,GAAG,oBAAoB,GAAG,SAAS,EAAA;YACzF,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,MACxB,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAE,EAAA;AAEpC,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,MAAM;AACf,wBAAA,UAAU,EAAE,QAAQ;AACpB,wBAAA,cAAc,EAAE,QAAQ;AACxB,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,QAAQ,EAAE,EAAE;AACZ,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,EAEA,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAC9B;gBAGL,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC5B,oBAAA,IAAI,GAAG,KAAK,GAAG,EAAE;;AAEf,wBAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;4BACxB,QACE,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EACR,GAAG,EAAE,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,EACvB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,EACxC,QAAQ,EAAE,QAAQ,EAAA,CAClB;wBAEN;AACA,wBAAA,QACE,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EACX,GAAG,EAAE,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,EACvB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,EACxC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,kBAAkB,EAAE,kBAAkB,EACtC,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,QAAQ,EAAA,CACd;oBAEN;AAEA,oBAAA,QACE,KAAA,CAAA,aAAA,CAAC,eAAe,IACd,GAAG,EAAE,QAAQ,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EACnC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,kBAAkB,EAAE,kBAAkB,EACtC,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,QAAQ,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAI;4BACrD,IAAI,KAAK,EAAE;AACT,gCAAA,cAAc,CAAC;oCACb,KAAK;AACL,oCAAA,MAAM,EAAE,QAAQ;AAChB,oCAAA,MAAM,EAAE,QAAQ;AAChB,oCAAA,QAAQ,EAAE,GAAG;AACb,oCAAA,QAAQ,EAAE,GAAG;AACb,oCAAA,EAAE,EAAE,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,MAAA,GAAF,EAAE,GAAI,CAAC;AACX,oCAAA,EAAE,EAAE,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,MAAA,GAAF,EAAE,GAAI;AACX,iCAAA,CAAC;4BACJ;iCAAO;gCACL,cAAc,CAAC,IAAI,CAAC;4BACtB;AACF,wBAAA,CAAC,GAAG,SAAS,EAAA,CACb;gBAEN,CAAC,CAAC,CACa,CAClB,CAAC;YAGF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,CAAO;;AACN,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,EACzB,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,cAAc,EAAE,QAAQ;AACxB,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,KAAK,EAAE;iBACR,EAAA,EAEA,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CACxB,CACP,CAAC,CACE;AAEL,QAAA,WAAW,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAK;AAC5C,YAAA,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK;AAC3B,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM;AACzE,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM;YACzE,MAAM,UAAU,GAAG;AACjB,kBAAE,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAiB;kBAC9E,IAAI;;YAER,MAAM,OAAO,GAAG;mBACX,OAAO,UAAU,KAAK,UAAU,GAAI,UAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAoB,CAAC;AAC3F,kBAAE,CAAA,IAAA,EAAO,CAAC,CAAC,SAAS,CAAC,EAAE;;AAEzB,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC;YACzE,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC;;AAE3D,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC,EAAE;YAC7C,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;YAC/C,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,GAAG,EAAE,UAAU;AACf,oBAAA,SAAS,EAAE,wBAAwB;AACnC,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,UAAU,EAAE,wBAAwB;AACpC,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,aAAa,EAAE,MAAM;AACrB,oBAAA,MAAM,EAAE;AACT,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,EAAA,EAAG,MAAM,CAAC,OAAO,CAAC,CAAO;AAC5E,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;oBAAM,WAAW;;AAAI,oBAAA,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAO;AAC1G,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;oBAAM,WAAW;;AAAI,oBAAA,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAO;gBACzG,UAAU,IAAI,IAAI,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO;;AAAI,oBAAA,MAAM,CAAC,UAAU,CAAC,CAAO,CAC9H;AAEV,QAAA,CAAC,GAAG,CACA;AAEV;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACG,SAAU,iBAAiB,CAC/B,KAAqC,EAAA;IAErC,MAAM,EAAE,SAAS,GAAG,aAAa,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,KAAK;IAE7D,MAAM,eAAe,GAA2E,EAAE;AAClG,IAAA,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;QAC3B,eAAe,CAAC,KAAK,GAAG,EAAE,UAAU,EAAE,SAAwC,EAAE;IAClF;IACA,IAAI,SAAS,EAAE;QACb,eAAe,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE;IAC1D;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EAAC,UAAU,EAAE,eAAe,EAAA;AACvC,QAAA,KAAA,CAAA,aAAA,CAAC,sBAAsB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,KAAK,CAAA,CAAI,CACxB;AAEnB;AACA,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;AC5nBnD,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,cAAc,EACd,MAAM,EACN,OAAO,EACW,EAAA;AAClB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC1C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAM,IAAI,CAAC;AAClC,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAEnC,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;IACrD,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;IAEvD,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM;YAAE;AAEhC,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAc,cAAc,CAAC;AAEpE,QAAA,MAAM,KAAK,GAAG,cAAc,KAAK;AAC/B,cAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;cACzC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9C,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAU,KAAI;YACnC,IAAI,aAAa,CAAC,OAAO;gBAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,WAAW;AAAE,gBAAA,OAAM;AAE9B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS;YAC3B,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,CAAC,IAAI,CAAC;gBACb;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,cAAc,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC1D,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;AACxB,YAAA,IAAI,CAAC,GAAG;gBAAE;AAEV,YAAA,MAAM,MAAM,GAAqB,cAAc,KAAK;AAClD,kBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3B,kBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9B,OAAO,CAAC,MAAM,CAAC;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACb,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;AAGxB,QAAA,CAAC,CAAC,MAAM,CAAC,YAAY;AAClB,aAAA,IAAI,CAAC,MAAM,EAAE,WAAW;AACxB,aAAA,IAAI,CAAC,cAAc,EAAE,GAAG;AACxB,aAAA,IAAI,CAAC,QAAQ,EAAE,WAAW;AAC1B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE1B,QAAA,OAAO,MAAK;AACV,YAAA,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;AAC7B,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;;IAGpD,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAErD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAc,cAAc,CAAC;AACpE,QAAA,MAAM,KAAK,GAAG,cAAc,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAE1D,QAAA,aAAa,CAAC,OAAO,GAAG,IAAI;QAC5B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,WAAW,GAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;QAC5C;aAAO;YACL,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACrC;AACA,QAAA,aAAa,CAAC,OAAO,GAAG,KAAK;IAC/B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAEpC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,aAAa,EAAE;AAChB,SAAA,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,aAAa,EAAC,SAAS,EAAE,aAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,GAAG,EAAA,CAAI,CAC/E;AAEV;AAEA;AAEM,SAAU,YAAY,CAC1B,KAAgC,EAAA;;IAEhC,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,MAAM,EACN,gBAAgB,GAAG,aAAa,EAChC,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,KAAK,GAAG,QAAQ,EAChB,SAAS,GAAG,CAAC,EACb,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,GAAG,EACjB,UAAU,GAAG,KAAK,EAClB,WAAW,GAAG,CAAC,EACf,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,OAAO,EAAE,aAAa,GAAG,EAAE,EAC3B,YAAY,GAAG,KAAK,EACpB,OAAO,EACP,WAAW,EAAE,gBAAgB,EAC7B,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;IAG3B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC;IACnF,MAAM,WAAW,GAAG,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,MAAA,GAAhB,gBAAgB,GAAI,cAAc;AAEtD,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,GAA4B,KAAI;QAC/B,IAAI,CAAC,gBAAgB,EAAE;YACrB,iBAAiB,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,OAAO,aAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAG,GAAG,CAAC;AAChB,IAAA,CAAC,EACD,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAC5B;;AAGD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAM,IAAI,CAAC;IACrC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC;;IAG/E,SAAS,CAAC,MAAK;QACb,MAAM,KAAK,GAAG,MAAK;;YACjB,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAW,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI;YAC5C,IAAI,CAAC,EAAE;gBACL,iBAAiB,CAAC,CAAC,CAAC;YACtB;iBAAO;gBACL,qBAAqB,CAAC,KAAK,CAAC;YAC9B;AACF,QAAA,CAAC;QACD,qBAAqB,CAAC,KAAK,CAAC;AAC9B,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;;AAIV,IAAA,MAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,gBAAgB,CAAC,MAAK,SAAS;AAExE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;AAC5B,QAAA,IAAI,kBAAkB;AAAE,YAAA,OAAO,QAAQ;QAEvC,IAAI,MAAM,EAAE;YACV,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gBACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAgB,CAAC;AAC1E,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACb,MAAM,OAAO,GAAwB,EAAE,CAAC,gBAAgB,GAAG,EAAE,EAAE;oBAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;AACrD,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;gBACpB;gBACA,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAyC,CAAC;AAC7C,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B;QAEA,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAE5D,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,kBAAkB,IAAI,MAAM,EAAE;AAChC,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyB,KAAI;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC3C,gBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,CAAC,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAA,CAAA,CAAG,CAAC;gBACnF;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;IAItE,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAwB,EAAE,WAAW,EAAE,SAAS,EAAE;AAC7D,YAAA,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;YACzE,IAAI,QAAQ,EAAE;AACZ,gBAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM;AACzB,gBAAA,KAAK,CAAC,WAAW,GAAG,WAAW;YACjC;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE3D,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAK;QACrC,IAAI,aAAa,CAAC,SAAS;YAAE,OAAO,aAAa,CAAC,SAAS;QAC3D,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAwB,EAAE,WAAW,EAAE,CAAC,EAAE;AACrD,YAAA,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACzE,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;AAElD,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;QACjC,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,KAAK,GAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE;YACrE,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACvF,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;;AAIlD,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AAEpF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;;AAIrD,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AACxD,QAAA,MAAM,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,GAAG,CAAA,EAAK,UAAU,CAAE;AACnC,QAAA,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,CAAC,CAAC,KAAK,GAAG,GAAG;AAC1C,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAExB,IAAA,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,IAAI,EAAE;AAChD,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;;QACjC,OAAO;YACL,GAAG,EAAE,MAAA,CAAA,EAAA,GAAA,aAAa,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACnC,MAAM,EAAE,MAAA,CAAA,EAAA,GAAA,aAAa,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;YAC1C,IAAI,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,aAAa,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,CAAC,IAAI;YACnD,KAAK,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,aAAa,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,UAAU,CAAC;SAClD;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtC,IAAA,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,IAAI,GAAG;;IAI1D,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS;AAClC,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,cAAc,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;;IAI3G,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAe,GAAG,MAAe;;IAI9D,MAAM,SAAS,uGACb,SAAS,EACT,IAAI,EAAE,aAAa,EACnB,SAAS;AACT,QAAA,SAAS,EACT,aAAa,EAAE,MAAM,IAAI,SAAS,EAClC,KAAK,EACL,SAAS,EAAE,aAAa,EAAA,GACpB,UAAU,IAAI,EAAE,UAAU,EAAE,MAChC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,IAAI,EACd,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,WAAW;AACX,QAAA,QAAQ,MACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,OAAO,IAAI,EAAE,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAQ,EAAE,KAE/D,WAAW,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAC,EACzC,UAAU,CACd;AAED,IAAA,MAAM,aAAa,GAAuB;QACxC,SAAS;AACT,QAAA,IAAI,EAAE,aAAa;QACnB,SAAS;QACT,SAAS;QACT,aAAa,EAAE,MAAM,IAAI,SAAS;QAClC,KAAK;AACL,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;AACvE,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,aAAa,CAAC,QAAQ,mCAAI,KAAK;QACzC,UAAU,EAAE,aAAa,CAAC,UAAU;AACpC,QAAA,WAAW,EAAE;KACd;;AAID,IAAA,MAAM,aAAa,IACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAC,SAAS,EACb,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,EAAA;AAEtC,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,GAAG,EAAE,WAAW,EAAA,EAAM,aAAa,CAAA,CAAI;AACtD,QAAA,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EACX,KAAK,EAAE,KAAK,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,EACvD,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,WAAW,EAAA,CACpB,CACE,CACP;AAED,IAAA,MAAM,SAAS,IACb,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAC,MAAM,EAAA;AACb,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,SAAS,CAAA,CAAI,CAC5B,CACP;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,aAAA,EAAgB,SAAS,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EAAA;AAC/D,QAAA,YAAY,GAAG,aAAa,GAAG,SAAS;QACxC,YAAY,GAAG,SAAS,GAAG,aAAa,CACrC;AAEV;AACA,YAAY,CAAC,WAAW,GAAG,cAAc;;ACjbzC;;AAEG;AACG,SAAU,QAAQ,CAA2D,KAA4B,EAAA;AAC7G,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,gBAAgB,GAAG,UAAU,EAC7B,aAAa,GAAG,OAAO,EACvB,WAAW,GAAG,UAAU,EACxB,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,IAAI,GAAG,KAAK,EACZ,UAAU,GAAG,CAAC,EACd,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,OAAO,EACP,UAAU,GAAG,EAAE,EACf,SAAS,EACT,WAAW,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;;AAI3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAElH,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAE1B,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;IAEF,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;;IAIvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC;IAC/D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE;YACrD,IAAI,OAAO,EAAE;gBACX,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YACnD;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAE1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAC1E,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEvD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAIxB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI;AAChC,QAAA,IAAI,WAAW;AAAE,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AACpE,IAAA,CAAC,EACD,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;;AAGD,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO,KAAK,gBAAgB;QAC9D,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,MAAM,GAAG,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAChH,MAAM,GAAG,GAAG,OAAO,aAAa,KAAK,UAAU,GAAG,aAAa,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;YACvG,MAAM,QAAQ,GAAG;mBACZ,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAiB,CAAC;kBACxF,IAAI;YACR,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAO;gBACvD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAC7B,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CACzD;AACL,gBAAA,QAAQ,IAAI,IAAI,KACf,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAC3C,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO;;AAAI,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAChE,CACP,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;;IAG9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,UAAU;AACzB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,UAAU,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAEvG,IAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM;QACN,UAAU;AACV,QAAA,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EACR,KAAK,EAAE,IAAW,EAAA,GACd,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,MAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,QAAQ,CAAC,WAAW,GAAG,UAAU;;AC3J3B,SAAU,eAAe,CAA2D,KAAmC,EAAA;AAC3H,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,EAC/D,WAAW,GAAG,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAChE,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,SAAS,GAAG,KAAK,EAAE,UAAU,GAAG,CAAC,EACtE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAChE,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,IAAA,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO;AAExC,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACpI,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC;AAEtE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;AAC1E,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAA,EAAK,UAAU,CAAE;AAChF,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG,eAAe,CAAS,aAAa,CAAC;QACrD,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAO;AACnE,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA;AAC7B,oBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAAY,oBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,CACpE,CACF;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ;QAChD,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE;AAC3E,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,iBAAiB,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAE9G,IAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,OAAO;QACP,SAAS,EACT,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM;QACN,UAAU;AACV,QAAA,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,MAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,eAAe,CAAC,WAAW,GAAG,iBAAiB;;ACjGzC,SAAU,SAAS,CAA2D,KAA6B,EAAA;AAC/G,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAChE,OAAO,EAAE,WAAW,GAAG,YAAY,EACnC,MAAM,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,GAAG,EAC/D,eAAe,GAAG,EAAE,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EACtE,OAAO,EAAE,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACjD,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;AAC7B,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AACvF,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAqB;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEtB,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC,EAAE,WAAW,EAAE,YAAY,EAAE;AAChF,YAAA,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;YAC3E,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,WAAW;AAC9E,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,MAAM,GAAG,eAAe,CAAS,aAAa,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC;QAChD,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACzB,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG;mBACZ,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAiB,CAAC;kBACxF,IAAI;YACR,MAAM,OAAO,GAAG;mBACX,OAAO,MAAM,KAAK,UAAU,GAAI,MAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAgB,CAAC;kBACrF,IAAI;YACR,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAO;gBACvD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAC7B,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CACzD;AACL,gBAAA,QAAQ,IAAI,IAAI,KACf,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAC3C,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO;;AAAI,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAChE,CACP;AACA,gBAAA,OAAO,IAAI,IAAI,KACd,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAC3C,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM;;oBAAI,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CACrH,CACP,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ;AAC1C,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,WAAW,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAExG,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,SAAS,CAAC,WAAW,GAAG,WAAW;;AC7H7B,SAAU,OAAO,CAA2D,KAA2B,EAAA;AAC3G,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAChE,OAAO,EAAE,WAAW,GAAG,YAAY,EACnC,YAAY,GAAG,IAAI,EAAqB,eAAe,GAAG,EAAE,EAC5D,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EACzD,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACxE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;AACzD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC9E,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACnD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;QACzC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACzB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;YACnD,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO;AAChF,gBAAA,KAAK,CAAC,MAAM,IAAI,IAAI,KACnB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAc,wBAAA,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAO;AAClD,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAU,wBAAA,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAO;AAC1C,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAU,wBAAA,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAO;AAC1C,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAW,wBAAA,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAO;AAC5C,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;wBAAW,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAO,CAC3C,CACJ,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;AACxC,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAEtG,IAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,YAAY;AACZ,QAAA,YAAY,EACZ,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,KACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,OAAO,CAAC,WAAW,GAAG,SAAS;;ACzGzB,SAAU,SAAS,CAA2D,KAA6B,EAAA;AAC/G,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,IAAI,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAC3B,aAAa,EAAE,UAAU,EAAE,WAAW,EACtC,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,eAAe,GAAG,EAAE,EACzD,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EACzD,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACxE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;AACzD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC9E,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACnD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;QACzC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;AACnD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;YACzB,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AACzD,gBAAA,QAAQ,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO;gBACxE,KAAK,IAAI,IAAI,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAa,oBAAA,KAAK,CAAO;AAC1C,gBAAA,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,KAC1B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;AAAK,oBAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACxD,CACP,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ;AAC1C,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,WAAW,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAExG,MAAM,WAAW,yFACf,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,YAAY,EACxB,YAAY;AACZ,QAAA,IAAI,EACJ,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,MAC9B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,SAAS,CAAC,WAAW,GAAG,WAAW;;ACrG7B,SAAU,UAAU,CAA2D,KAA8B,EAAA;AACjH,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,UAAU,EAAE,IAAI,GAAG,EAAE,EAAwB,OAAO,GAAG,IAAI,EACzE,aAAa,EAAE,UAAU,EAAE,WAAW,EACtC,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,eAAe,GAAG,EAAE,EACzD,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EACzD,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACxE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;AACzD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC9E,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACnD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;QAEzC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;;AAEnD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAI;gBACnC,MAAM,CAAC,GAAG,OAAO,aAAa,KAAK,UAAU,GAAI,aAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAuB,CAAC;AAC3G,gBAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AAClB,YAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC;AACzE,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM;YACvB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;YACvD,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AACzD,gBAAA,QAAQ,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO;gBACxE,CAAC,GAAG,CAAC,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAU,oBAAA,CAAC,CAAO;gBAC3B,MAAM,IAAI,IAAI,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;;AAAc,oBAAA,MAAM,CAAC,cAAc,EAAE,CAAO,CAC3D;AAEV,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;IAEnB,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ;AAC3C,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,YAAY,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAEzG,IAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,YAAY;QACZ,IAAI;AACJ,QAAA,OAAO,EACP,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,KACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,UAAU,CAAC,WAAW,GAAG,YAAY;;AC1GrC;;;;;AAKG;AACG,SAAU,aAAa,CAA2D,KAAiC,EAAA;AACvH,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG,EACtD,aAAa,EAAE,UAAU,EAAE,WAAW,EACtC,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,eAAe,GAAG,CAAC,EACxD,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EACzD,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AACxE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;AACzD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC9E,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACnD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,EAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,KAAK,YAAY,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AACpH,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;IACpB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;QACzC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;YACnD,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,CAAO,CACxD;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ;AAC9C,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,eAAe,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAE5G,IAAA,MAAM,WAAW,GAA4B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAC3C,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,YAAY;AACZ,QAAA,IAAI,EACJ,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EACR,KAAK,EAAE,KAAK,EAAA,GACR,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,MAC9B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACP;AAGN,IAAA,WAAmB,CAAC,SAAS,GAAG,SAAS;AAE3C,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,aAAa,CAAC,WAAW,GAAG,eAAe;;ACzGrC,SAAU,OAAO,CAA2D,KAA2B,EAAA;AAC3G,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAClE,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,CAAC,EAC/D,eAAe,GAAG,EAAE,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,UAAU,EACrE,OAAO,EAAE,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACjD,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAE3B,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC9K,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC;IAC/D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE;AACrF,YAAA,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa;AAC3E,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAC1E,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEvD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAChF,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;QACzC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,MAAM,GAAG,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAChH,MAAM,GAAG,GAAG,OAAO,aAAa,KAAK,UAAU,GAAG,aAAa,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;YACvG,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAO;AACvD,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAC7B,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CACzD,CACF;AAEV,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;AACxC,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAEtG,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACf,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EAAE,eAAe,EAC3B,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EACR,KAAK,EAAE,IAAW,EAAA,GACd,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,OAAO,CAAC,WAAW,GAAG,SAAS;;ACzGzB,SAAU,QAAQ,CAA2D,KAA4B,EAAA;AAC7G,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,GAAG,CAAC,EACnD,WAAW,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,EAAE,EAC/D,SAAS,EAAE,WAAW,EACvB,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,IAAA,MAAM,aAAa,GAAG,OAAO,IAAI,gBAAgB;AAEjD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACpI,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC;AAEtE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;AAC1E,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO,KAAK,gBAAgB;QAC9D,OAAO,CAAC,CAAsB,KAAI;;AAChC,YAAA,MAAM,KAAK,GAAG,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,KAAI,CAAC,CAAC,IAAI,IAAI,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAChH,MAAM,GAAG,GAAG,OAAO,aAAa,KAAK,UAAU,GAAG,aAAa,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;YACvG,MAAM,QAAQ,GAAG;mBACZ,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAiB,CAAC;kBACxF,IAAI;YACR,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAO;gBACvD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAC7B,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CACzD;AACL,gBAAA,QAAQ,IAAI,IAAI,KACf,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAC3C,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO;;AAAI,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAChE,CACP,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ;AACzC,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,UAAU,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAEvG,MAAM,WAAW,yFACf,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,QAAQ,EACpB,UAAU;QACV,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM;QACN,WAAW,EACX,QAAQ,EAAE,KAAK,EAAA,GACX,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,MAC9B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,QAAQ,CAAC,WAAW,GAAG,UAAU;;AClG3B,SAAU,UAAU,CAA2D,KAA8B,EAAA;AACjH,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,aAAa,GAAG,OAAO,EACtD,WAAW,GAAG,EAAE,EAAE,aAAa,EAC/B,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,GAAG,CAAC,EACnD,WAAW,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,EAAE,EAC/D,SAAS,EAAE,WAAW,EACvB,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,IAAA,MAAM,aAAa,GAAG,OAAO,IAAI,gBAAgB;AAEjD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACpI,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC;AAEtE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;AAC1E,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO,KAAK,gBAAgB;QAC9D,OAAO,CAAC,CAAsB,KAAI;;AAChC,YAAA,MAAM,KAAK,GAAG,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,KAAI,CAAC,CAAC,IAAI,IAAI,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAChH,MAAM,GAAG,GAAG,OAAO,aAAa,KAAK,UAAU,GAAG,aAAa,CAAC,KAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;YACvG,MAAM,QAAQ,GAAG;mBACZ,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAiB,CAAC;kBACxF,IAAI;YACR,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAO;gBACvD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAC7B,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CACzD;AACL,gBAAA,QAAQ,IAAI,IAAI,KACf,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA;oBAC3C,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO;;AAAI,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAChE,CACP,CACG;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ;AAC3C,QAAA,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE;AAC/C,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,YAAY,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAEzG,MAAM,WAAW,yFACf,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,QAAQ,EACpB,UAAU;QACV,WAAW;QACX,UAAU;QACV,aAAa,EACb,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM;QACN,WAAW,EACX,QAAQ,EAAE,KAAK,EAAA,GACX,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,MAC9B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,EAAA,CAAA,GAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,UAAU,CAAC,WAAW,GAAG,YAAY;;ACpG/B,SAAU,eAAe,CAA2D,KAAmC,EAAA;AAC3H,IAAA,MAAM,EACJ,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EACrE,gBAAgB,GAAG,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,EAC/D,WAAW,GAAG,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAChE,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,GAAG,CAAC,EACnD,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAChE,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EACxC,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,IAAA,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO;AAExC,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACpI,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,YAAwB,CAAE,CAAC;AACzF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,IAAI,KAAI,OAAO,EAAE,MAAM,EAAE,CAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,KAAI,EAAE,EAAE,CAAC;IACjH,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI;IAEvH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC;AAEtE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;AAC1E,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CACxB,MAAM,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAC5E,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,CAAC,CACjD;AAED,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAErD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;QAC1B,MAAM,WAAW,mBAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAA,EAAK,UAAU,CAAE;AAC/E,QAAA,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG;AAAE,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;AAC9D,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,CAA6B,KAAI,EAAG,IAAI,WAAW;AAAE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAClF,CAAC,WAAW,EAAE,eAAe,CAAC,CAC/B;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG,eAAe,CAAS,aAAa,CAAC;QACrD,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACzB,QACE,6BAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,mBAAmB,EAAA;AAC1D,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAO;AACnE,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA;AAC7B,oBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAAY,oBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,CACpE,CACF;AAEV,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAC9B,QAAA,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ;QAChD,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE;AAC3E,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,iBAAiB,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAE9G,MAAM,WAAW,yFACf,SAAS,EAAE,YAAY,EACvB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,aAAa,EACxB,OAAO,EACP,UAAU,EAAE,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,UAAU,EACpE,UAAU,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM;QACN,UAAU;AACV,QAAA,WAAW,EACX,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAkB,EAC3B,QAAQ,EAAA,GACJ,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,GACrB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAC,GACnB,SAAS,IAAI,EAAE,SAAS,EAAE,EAAC,EAAA,EAC/B,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAQ,MAChF,WAAW,IAAI,EAAE,mBAAmB,EAAE,EAAC,EACxC,UAAU,CACd;AAED,IAAA,OAAO,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,WAAW,EAAI;AAChD;AACA,eAAe,CAAC,WAAW,GAAG,iBAAiB;;AC9F/C;;;;AAIG;AACG,SAAU,kBAAkB,CAAmH,KAA4C,EAAA;AAC/L,IAAA,MAAM,EACJ,KAAK,EACL,KAAK,EACL,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,EAAE,UAAU,EAClB,SAAS,EACT,KAAK,EACL,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,QAAQ,EACzB,cAAc,GAAG,QAAQ,EACzB,SAAS,EACT,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,QAAQ,GAAG,CAAC,EACZ,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,SAAS,GAAG,CAAC,EACb,SAAS,GAAG,MAAM,EAClB,WAAW,GAAG,GAAG,EACjB,UAAU,GAAG,GAAG,EAChB,aAAa,GAAG,GAAG,EACnB,UAAU,GAAG,KAAK,EAClB,WAAW,GAAG,IAAI,EAClB,UAAU,EACV,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;AAET,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;AAC7B,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;IAE7B,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGjE,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE;YACrD,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YAC7D;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AACA,YAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,gBAAA,SAAS,CAAC,CAAC,GAAG,QAAQ;YACxB;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;;AAGnC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,OAAO,CAAC,CAAsB,MAAM;AAClC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,SAAS,KAAK,UAAU,GAAG,SAAS,CAAC,CAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;AACpI,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAGvC,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/C,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,YAAA,OAAO,SAAS;QACrD,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,SAAS,CAAC;AACjD,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;;AAG3B,IAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AACnD,QAAA,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACzE,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;;AAGtD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAClE,QAAA,MAAM,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAA,EAAK,UAAU,CAAE;QACvD,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE;AACrC,YAAA,WAAW,CAAC,KAAK,GAAG,GAAG;QACzB;AACA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;IAGxB,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAChC,QAAA,aAAa,EAAE,oBAAoB;QACnC,KAAK;QACL,KAAK;AACL,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,EAAE,cAAc,EAAE;AAC9B,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,oBAAoB,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAEjH,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,KAAM,gBAAgB,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAC5F,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;ACnIrD;;;;AAIG;AACG,SAAU,YAAY,CAAmH,KAAsC,EAAA;IACnL,MAAM,EACJ,KAAK,EACL,KAAK,EACL,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,cAAc,GAAG,QAAQ,EACzB,cAAc,GAAG,QAAQ,EACzB,aAAa,GAAG,OAAO,EACvB,cAAc,GAAG,IAAI,EACrB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,WAAW,GAAG,QAAQ,EACtB,QAAQ,GAAG,IAAI,EACf,UAAU,GAAG,EAAE,EACf,UAAU,EACV,SAAS,EACT,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,GAAG,EACjB,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;AAET,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;;AAG7B,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AAE3C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACzB,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;YACnG,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;AACnG,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC;;AAGrE,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,OAAO,CAAC,CAAsB,EAAE,CAAU,KAAI;;AAC5C,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,WAAW,EAAE;aACd;YACD,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YAC7D;iBAAO;gBACL,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC;AACzG,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,cAAc;gBAChE,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,CAAS,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;gBACxC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAChD;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;;AAGtC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,aAAa,EAAE;aAChB;AACD,YAAA,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;AACrC,gBAAA,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;YACjC;AAAO,iBAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;AAC1D,gBAAA,IAAI,OAAO,IAAI,GAAG,EAAE;AAClB,oBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC;gBACjE;qBAAO,IAAI,GAAG,EAAE;AACd,oBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI;gBACjD;YACF;AAAO,iBAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;AAC1D,gBAAA,IAAI,OAAO,IAAI,GAAG,EAAE;AAClB,oBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC;gBACjE;qBAAO,IAAI,GAAG,EAAE;AACd,oBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI;gBACjD;YACF;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAG9D,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,MAAM,QAAQ,GAAG,SAAS,IAAI,cAAc;QAC5C,IAAI,OAAO,QAAQ,KAAK,UAAU;AAAE,YAAA,OAAO,QAAQ;QACnD,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,QAAQ,CAAC;IAChD,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;IAG3C,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAChC,QAAA,aAAa,EAAE,cAAc;QAC7B,KAAK;AACL,QAAA,aAAa,EAAE,IAAI;AACpB,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,cAAc,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAE3G,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,KAAM,gBAAgB,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAC5F,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,YAAY,CAAC,WAAW,GAAG,cAAc;;AC/IzC;;;;AAIG;AACG,SAAU,aAAa,CAAmH,KAAuC,EAAA;IACrL,MAAM,EACJ,KAAK,EACL,KAAK,EACL,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,cAAc,GAAG,QAAQ,EACzB,cAAc,GAAG,QAAQ,EACzB,aAAa,GAAG,OAAO,EACvB,cAAc,GAAG,IAAI,EACrB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,WAAW,GAAG,QAAQ,EACtB,WAAW,GAAG,YAAY,EAC1B,SAAS,GAAG,SAAS,EACrB,gBAAgB,GAAG,IAAI,EACvB,SAAS,GAAG,EAAE,EACd,SAAS,EACT,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,GAAG,EACjB,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;;AAGT,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;;AAG7B,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AAE3C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,MAAM,QAAQ,GACZ,OAAO,cAAc,KAAK;AACxB,kBAAE,cAAc,CAAC,IAAI;AACrB,kBAAE,IAAI,CAAC,cAAc,CAAC;AAC1B,YAAA,MAAM,QAAQ,GACZ,OAAO,cAAc,KAAK;AACxB,kBAAE,cAAc,CAAC,IAAI;AACrB,kBAAE,IAAI,CAAC,cAAc,CAAC;AAE1B,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;;IAGtD,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC;;;AAIrE,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,WAAW,EAAE;aACd;YAED,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YAC7D;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS;YAC5B;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;;;AAIzB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,WAAW,EAAE;aACd;AAED,YAAA,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;AACrC,gBAAA,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;YACjC;AAAO,iBAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;AAC1D,gBAAA,IAAI,OAAO,IAAI,GAAG,EAAE;AAClB,oBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC;gBACjE;qBAAO,IAAI,GAAG,EAAE;oBACd,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI;gBACtC;YACF;AAAO,iBAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;AAC1D,gBAAA,IAAI,OAAO,IAAI,GAAG,EAAE;AAClB,oBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC;gBACjE;qBAAO,IAAI,GAAG,EAAE;oBACd,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI;gBACtC;YACF;AAAO,iBAAA,IAAI,WAAW,KAAK,UAAU,EAAE;AACrC,gBAAA,SAAS,CAAC,IAAI,GAAG,MAAM;AACvB,gBAAA,SAAS,CAAC,WAAW,GAAG,WAAW,GAAG,GAAG;YAC3C;AAEA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAG9D,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,MAAM,QAAQ,GAAG,SAAS,IAAI,cAAc;QAC5C,IAAI,OAAO,QAAQ,KAAK,UAAU;AAAE,YAAA,OAAO,QAAQ;QACnD,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,QAAQ,CAAC;IAChD,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;AAG3C,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;QAC7B,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,OAAO;AACjD,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;IAGb,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAChC,QAAA,aAAa,EAAE,eAAe;QAC9B,KAAK;AACL,QAAA,aAAa,EAAE,IAAI;AACpB,KAAA,CAAC;AACF,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,eAAe,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAE5G,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAChE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,aAAa,CAAC,WAAW,GAAG,eAAe;;AC/K3C;;;;AAIG;AACG,SAAU,WAAW,CAA0D,KAA8B,EAAA;AACjH,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,MAAM,GAAG,MAAM,EACf,WAAW,GAAG,UAAU,EACxB,gBAAgB,GAAG,UAAU,EAC7B,aAAa,GAAG,OAAO,EACvB,cAAc,GAAG,MAAM,EACvB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,YAAY,GAAG,KAAK,EACpB,SAAS,GAAG,OAAO,EACnB,SAAS,EACT,UAAU,GAAG,IAAI,EACjB,QAAQ,GAAG,CAAC,EACZ,WAAW,GAAG,IAAI,EAClB,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;;AAGT,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;AAC5B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,KAAK,GAA+B,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAyB,KAAI;AAC7C,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,IAAa,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAClH,YAAA,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;AACrE,QAAA,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;AACd,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAE5B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC;AAC/G,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAiB,EAAE,WAAW,CAAC;IACnE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;QAC/B,OAAO,CAAC,CAAsB,KAAI;YAChC,MAAM,SAAS,GAAoC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE;YACtF,IAAI,YAAY,EAAE;AAChB,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC;YACzE;iBAAO,IAAI,OAAO,EAAE;AAClB,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAwC,EAAE,UAAU,CAAC;YAC9F;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAEvC,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,OAAO,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;AAClC,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,WAAW,EAAE;YAC7E,IAAI,OAAO,aAAa,KAAK,UAAU;AAAE,gBAAA,OAAO,aAAa;YAC7D,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1D;AACA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;;AAG3B,IAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACxE,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,aAAa,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;AAE1G,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,cAAc,EAC5B,eAAe,EAAE,WAAW,EAC5B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,OAAc,EACvB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,UAAU,IAAI,SAAS,IAAI,cAAc,IAAI,SAAS,EACjE,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,KAAM,gBAAgB,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAC5F,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,WAAW,CAAC,WAAW,GAAG,aAAa;;AC5GvC;;;;AAIG;AACG,SAAU,OAAO,CAA0D,KAA0B,EAAA;AACzG,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,gBAAgB,GAAG,UAAU,EAC7B,aAAa,GAAG,OAAO,EACvB,cAAc,GAAG,MAAM,EACvB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,YAAY,GAAG,KAAK,EACpB,UAAU,GAAG,IAAI,EACjB,SAAS,GAAG,MAAM,EAClB,SAAS,EACT,OAAO,EAAE,WAAW,GAAG,CAAC,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAW,GAAG,IAAI,EAClB,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;AAC5B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,KAAK,GAA+B,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAyB,KAAI;AAC7C,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,IAAa,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAClH,YAAA,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;AACrE,QAAA,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;AACd,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAE5B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,SAAS;AAClC,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAiB,EAAE,WAAW,CAAC;IACnE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAElD,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACnG,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE;YACzG,IAAI,YAAY,EAAE;AAChB,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;YACvE;iBAAO,IAAI,OAAO,EAAE;AAClB,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAwC,EAAE,UAAU,CAAC;YAC9F;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAEvC,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,IAAI,OAAO,aAAa,KAAK,UAAU;AAAE,YAAA,OAAO,aAAa;QAC7D,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1D,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAEnB,IAAA,MAAM,kBAAkB,GAAG,cAAc,KAAK;AAC5C,UAAE;AACF,WAAG,UAAU,IAAI,SAAS,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAC;;AAG3D,IAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpE,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAEtG,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAC,SAAS,EACnB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,cAAc,EAC5B,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,OAAc,EACvB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,UAAU,IAAI,SAAS,IAAI,cAAc,IAAI,SAAS,EACjE,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,KAAM,gBAAgB,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAC5F,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,OAAO,CAAC,WAAW,GAAG,SAAS;;ACrG/B;;;;AAIG;AACG,SAAU,UAAU,CAA0D,KAA6B,EAAA;AAC/G,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACrD,SAAS,EACT,KAAK,EACL,gBAAgB,GAAG,UAAU,EAC7B,aAAa,GAAG,OAAO,EACvB,cAAc,GAAG,MAAM,EACvB,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,YAAY,GAAG,KAAK,EACpB,UAAU,GAAG,IAAI,EACjB,SAAS,EACT,aAAa,GAAG,GAAG,EACnB,OAAO,EAAE,WAAW,GAAG,CAAC,EACxB,WAAW,GAAG,IAAI,EAClB,OAAO,EACP,UAAU,GAAG,EAAE,EAChB,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;AAC5B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,KAAK,GAA+B,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAyB,KAAI;AAC7C,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,IAAa,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAClH,YAAA,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;AACrE,QAAA,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;AACd,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAE5B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,SAAS;AAClC,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAiB,EAAE,WAAW,CAAC;IACnE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAElD,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAC/B,QAAA,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACnG,OAAO,CAAC,CAAsB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAoC;AACjD,gBAAA,MAAM,EAAE,cAAc;AACtB,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,aAAa,EAAE,GAAG;AAClB,gBAAA,WAAW,EAAE;aACd;YACD,IAAI,YAAY,EAAE;AAChB,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;YACvE;iBAAO,IAAI,OAAO,EAAE;AAClB,gBAAA,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,OAAwC,EAAE,UAAU,CAAC;YAC9F;iBAAO;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,aAAa;YAChC;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAEtD,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;QAClC,IAAI,OAAO,aAAa,KAAK,UAAU;AAAE,YAAA,OAAO,aAAa;QAC7D,OAAO,CAAC,CAAsB,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1D,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;;AAGnB,IAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACvE,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,oBAAC,UAAU,EAAA,EAAC,aAAa,EAAC,YAAY,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI;IAEzG,QACE,KAAA,CAAA,aAAA,CAAC,kBAAkB,EAAA,MAAA,CAAA,MAAA,CAAA,EACjB,SAAS,EAAC,YAAY,EACtB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,cAAc,EAC5B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,OAAc,EACvB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,UAAU,IAAI,SAAS,IAAI,cAAc,IAAI,SAAS,EACjE,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,KAAM,gBAAgB,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,EAC5F,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,EACR,UAAU,CAAA,CACd;AAEN;AACA,UAAU,CAAC,WAAW,GAAG,YAAY;;AC3CrC;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,iBAAiB,GAAG,UAAU,CACzC,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAA;AACnC,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,WAAW,GAAG,CAAC,EACf,eAAe,EACf,QAAQ,GAAG,IAAI,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,KAAK,EACL,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACZ,GAAG,KAAK;IAET,MAAM,YAAY,GAAqB,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI;AAChE,UAAE,CAAC,KAAK,EAAE,MAAM;UACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,OAAO;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,CAAmB,KAAI;AACtB,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACnD;IACF,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CACxC;AAED,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,CAAC,KAAK,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9C,QAAA,QAAQ,EAAE,CAAC,MAAM,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA;AACxD,QAAA,KAAK,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AACtC,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA;AACjD,KAAA,CAAC,CAAC;IAEH,MAAM,SAAS,GAAc,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE;IAErE,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,MAAM,EAChB,WAAW,EAAC,WAAW,EACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,WAAW,EAC5B,cAAc,EAAE,eAAe,EAC/B,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EAAA,CACtB;AAEN,CAAC;AAEH,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;AC1HnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACI,MAAM,yBAAyB,GAAG,UAAU,CACjD,SAAS,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAA;AAC3C,IAAA,MAAM,EACJ,OAAO,EACP,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,IAAI,EACJ,MAAM,EACN,WAAW,EACX,GAAG,EACH,QAAQ,GAAG,IAAI,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACZ,GAAG,KAAK;IAET,MAAM,YAAY,GAAqB,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI;AAChE,UAAE,CAAC,KAAK,EAAE,MAAM;UACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,OAAO;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,CAAmB,KAAI;AACtB,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACnD;IACF,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CACxC;AAED,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,CAAC,KAAK,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9C,QAAA,QAAQ,EAAE,CAAC,MAAM,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA;AACxD,QAAA,KAAK,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AACtC,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA;AACjD,KAAA,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAa,EAAE;IAC7B,IAAI,IAAI,IAAI,IAAI;AAAE,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI;IACtC,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM;IAC5C,IAAI,WAAW,IAAI,IAAI;AAAE,QAAA,QAAQ,CAAC,WAAW,GAAG,WAAW;IAC3D,IAAI,GAAG,IAAI,IAAI;AAAE,QAAA,QAAQ,CAAC,GAAG,GAAG,GAAG;IAEnC,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,KAAK,EACf,WAAW,EAAC,WAAW,EACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,WAAW,EAC5B,cAAc,EAAE,eAAe,EAC/B,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAAA,CAChC;AAEN,CAAC;AAEH,yBAAyB,CAAC,WAAW,GAAG,2BAA2B;AAEnE;AACO,MAAM,iBAAiB,GAAG;;ACnJjC;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,kBAAkB,GAAG,UAAU,CAC1C,SAAS,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAA;AACpC,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,GAAG,IAAI,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACZ,GAAG,KAAK;IAET,MAAM,YAAY,GAAqB,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI;AAChE,UAAE,CAAC,KAAK,EAAE,MAAM;UACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,OAAO;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,CAAmB,KAAI;AACtB,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACnD;IACF,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CACxC;AAED,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,CAAC,KAAK,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9C,QAAA,QAAQ,EAAE,CAAC,MAAM,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA;AACxD,QAAA,KAAK,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AACtC,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA;AACjD,KAAA,CAAC,CAAC;IAEH,MAAM,UAAU,GAAe,EAAE;IACjC,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,UAAU,CAAC,MAAM,GAAG,MAAM;IAC9C,IAAI,IAAI,IAAI,IAAI;AAAE,QAAA,UAAU,CAAC,IAAI,GAAG,IAAI;IACxC,IAAI,OAAO,IAAI,IAAI;AAAE,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;IACjD,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,UAAU,CAAC,MAAM,GAAG,MAAM;IAC9C,IAAI,WAAW,IAAI,IAAI;AAAE,QAAA,UAAU,CAAC,WAAW,GAAG,WAAW;IAE7D,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,OAAO,EACjB,WAAW,EAAC,WAAW,EACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,WAAW,EAC5B,cAAc,EAAE,eAAe,EAC/B,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAAA,CAChC;AAEN,CAAC;AAEH,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;ACjIrD;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAM,sBAAsB,GAAG,UAAU,CAC9C,SAAS,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAA;AACxC,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,GAAG,EACH,MAAM,EACN,WAAW,EACX,QAAQ,GAAG,IAAI,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACZ,GAAG,KAAK;IAET,MAAM,YAAY,GAAqB,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI;AAChE,UAAE,CAAC,KAAK,EAAE,MAAM;UACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,OAAO;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,CAAC;QACrC,IAAI,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,OAAO;QAClC,MAAM,EAAE,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI;AAChC,KAAA,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,CAAmB,KAAI;AACtB,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,EAAE;AACf,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACnD;IACF,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CACxC;AAED,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,CAAC,KAAK,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9C,QAAA,QAAQ,EAAE,CAAC,MAAM,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA;AACxD,QAAA,KAAK,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AACtC,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA;AACjD,KAAA,CAAC,CAAC;IAEH,MAAM,cAAc,GAAmB,EAAE;IACzC,IAAI,aAAa,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,aAAa,GAAG,aAAa;IACvE,IAAI,aAAa,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,aAAa,GAAG,aAAa;IACvE,IAAI,eAAe,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,eAAe,GAAG,eAAe;IAC7E,IAAI,cAAc,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,cAAc,GAAG,cAAc;IAC1E,IAAI,GAAG,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,GAAG,GAAG,GAAG;IACzC,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,MAAM,GAAG,MAAM;IAClD,IAAI,WAAW,IAAI,IAAI;AAAE,QAAA,cAAc,CAAC,WAAW,GAAG,WAAW;IAEjE,QACE,oBAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,WAAW,EACrB,WAAW,EAAC,WAAW,EACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,WAAW,EAC5B,cAAc,EAAE,eAAe,EAC/B,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAAA,CAChC;AAEN,CAAC;AAEH,sBAAsB,CAAC,WAAW,GAAG,wBAAwB;;AChI7D;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,eAAe,GAAG,UAAU,CACvC,SAAS,eAAe,CAAC,KAAK,EAAE,GAAG,EAAA;AACjC,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,SAAS,EACtB,UAAU,GAAG,GAAG,EAChB,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,WAAW,GAAG,OAAO,EACrB,QAAQ,GAAG,IAAI,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,KAAK,EACL,KAAK,EACL,SAAS,EACV,GAAG,KAAK;IAET,MAAM,YAAY,GAAqB,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI;AAChE,UAAE,CAAC,KAAK,EAAE,MAAM;UACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACtB,MAAM,eAAe,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,OAAO;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC;AAElD,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,IAAI,EAAE,CAAC,KAAK,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9C,QAAA,QAAQ,EAAE,CAAC,MAAM,eAAK,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA;AACxD,QAAA,KAAK,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AACtC,QAAA,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAA,CAAA;AACjD,KAAA,CAAC,CAAC;AAEH,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,SAAS,EACnB,WAAW,EAAC,WAAW,EACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,WAAW,EAC/B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,WAAW,EAC5B,cAAc,EAAE,eAAe,EAC/B,mBAAmB,EAAE,OAAO,EAC5B,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EAAA,CACpB;AAEN,CAAC;AAEH,eAAe,CAAC,WAAW,GAAG,iBAAiB;;ACrK/C;AAEO,MAAM,WAAW,GAAkB;AACxC,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,WAAW,EAAE;AACX,YAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AACrD,YAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;AAC7C,SAAA;AACD,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE;AACT,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,QAAQ,EAAE;AACX;;AAGI,MAAM,UAAU,GAAkB;AACvC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,WAAW,EAAE;AACX,YAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AACrD,YAAA,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;AAC7C,SAAA;AACD,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE;AACT,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,QAAQ,EAAE;AACX;;AAUI,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAC1D,CAAC,GAAa,MAAM;AAClB,IAAA,KAAK,EAAE,WAAW;AAElB,IAAA,QAAQ,CAAC,KAAgD,EAAA;AACvD,QAAA,GAAG,CAAC,CAAC,OAAwB,KAAI;AAC/B,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACrB,gBAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;YAC/B;AACA,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,gBAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;YAC9B;YACA,OAAO;AACL,gBAAA,KAAK,gDACA,OAAO,CAAC,KAAK,CAAA,EACb,KAAK,CAAA,EAAA,EACR,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA,GACnB,KAAK,CAAC,MAAM,IAAI,EAAE,EAAC,EAEzB,UAAU,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,OAAO,CAAC,KAAK,CAAC,UAAU,CAAA,GACvB,KAAK,CAAC,UAAU,IAAI,EAAE,EAAC,EAAA;aAGhC;AACH,QAAA,CAAC,CAAC;IACJ;AACD,CAAA,CAAC,CACH;;AC5FD;AACA;AAEA,SAAS,gBAAgB,CAAC,EACxB,KAAK,EAGN,EAAA;AACC,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,CAAC,KAA2E,KAAK,KAAK,CAAC,QAAQ,CAChG;AAED,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,QAAQ,CAAC,KAAK,CAAC;QACjB;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAErB,IAAA,OAAO,IAAI;AACb;AAEA;AAEA,SAAS,eAAe,CAAC,EAAE,QAAQ,EAAiC,EAAA;AAClE,IAAA,MAAM,KAAK,GAAG,gBAAgB,CAC5B,CAAC,KAA+B,KAAK,KAAK,CAAC,KAAK,CACjD;AAED,IAAA,MAAM,KAAK,GAAiD;AAC1D,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,QAAA,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACpC,QAAA,2BAA2B,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AACvD,QAAA,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACpC,QAAA,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;AACxC,QAAA,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC1C,QAAA,wBAAwB,EAAE,KAAK,CAAC,UAAU,CAAC;KAC5C;AAED,IAAA,OAAO,6BAAK,KAAK,EAAE,KAAK,EAAA,EAAG,QAAQ,CAAO;AAC5C;AAEA;AAEA,SAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAsB,EAAA;IACnE,QACE,oBAACC,aAAa,EAAA,IAAA;AACZ,QAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,CAAI;AAClC,QAAA,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,IAAA,EAAE,QAAQ,CAAmB,CAC/B;AAEpB;AAEA;AAEA,SAAS,QAAQ,GAAA;IACf,OAAO,gBAAgB,CAAC,CAAC,KAA+B,KAAK,KAAK,CAAC,KAAK,CAAC;AAC3E;;AC1EA;;;;;;;;;AASG;AACG,SAAgB,WAAW,CAC/B,SAAsB,EACtB,OAKC,EAAA;;QAED,MAAM,EACJ,MAAM,GAAG,KAAK,EACd,QAAQ,GAAG,OAAO,EAClB,KAAK,GAAG,CAAC,EACT,UAAU,GAAG,OAAO,EACrB,GAAG,OAAO,IAAI,EAAE;;QAGjB,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC1D;;QAGA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAkB;;AAGzD,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,qBAAqB,EAAE;QAC/C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD;QACA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD;;QAGA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,4BAA4B,CAAC;QAC3D;;AAGA,QAAA,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;AAE/B,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE;YACtC,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACrD,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;AAC3E,YAAA,YAAY,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAA,IAAA,CAAM,CAAC;QACvC;aAAO;;AAEL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK;AAChC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK;AAElC,YAAA,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE;YACtC,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACrD,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;YAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;AAExC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACtB,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAExB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC1C,gBAAA,GAAG,CAAC,MAAM,GAAG,MAAK;oBAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,oBAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,oBAAA,MAAM,CAAC,MAAM,GAAG,MAAM;oBACtB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;;AAGpC,oBAAA,GAAG,CAAC,SAAS,GAAG,UAAU;oBAC1B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;;AAGjC,oBAAA,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;oBACvB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAExB,oBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;wBACrB,IAAI,IAAI,EAAE;AACR,4BAAA,YAAY,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAA,IAAA,CAAM,CAAC;AACrC,4BAAA,OAAO,EAAE;wBACX;6BAAO;AACL,4BAAA,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;wBAChD;oBACF,CAAC,EAAE,WAAW,CAAC;AAEf,oBAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B,gBAAA,CAAC;AACD,gBAAA,GAAG,CAAC,OAAO,GAAG,MAAK;AACjB,oBAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACxB,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC/C,gBAAA,CAAC;AACD,gBAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACf,YAAA,CAAC,CAAC;QACJ;IACF,CAAC,CAAA;AAAA;AAED;;;AAGG;AACH,SAAS,YAAY,CAAC,MAAe,EAAE,MAAe,EAAA;;AACpD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ;AACtC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ;;IAGtC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAChD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB;AACrE,QAAA,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa;AAC1D,QAAA,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC;AAEjE,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7C,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE,EAAE;YAC5C,CAAA,EAAA,GAAC,MAAmC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;QACvE;IACF;;IAGA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/E,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACpD;AACF;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAA;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;AACT,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B;;ACjIA;;;;;;;;;;;;;;;;;;;;AAoBG;AACG,MAAO,kBAAmB,SAAQ,KAAK,CAAC,SAG7C,CAAA;AACC,IAAA,WAAA,CAAY,KAA8B,EAAA;QACxC,KAAK,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9B;IAEA,OAAO,wBAAwB,CAAC,KAAY,EAAA;QAC1C,OAAO,EAAE,KAAK,EAAE;IAClB;IAEA,iBAAiB,CAAC,KAAY,EAAE,SAA0B,EAAA;;QACxD,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,EAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,KAAK,EAAE,SAAS,CAAC;IACxC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpB,YAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;AAC/B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAE9B,YAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;YACxB;AACA,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,OAAO,QAAQ;YACjB;;YAGA,QACE,KAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EACT,aAAa,EAAC,oBAAoB,EAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0DAA0D,EACpF,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,GAAG,EAAA,CACX;QAEN;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AACD;;;;"}
|