@vectoriox/iox-builder 1.4.48 → 1.4.49

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.
@@ -1 +1 @@
1
- {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../projects/iox-builder/src/lib/panels/panel-event.service.ts","../../../projects/iox-builder/src/lib/panels/panel.model.ts","../../../projects/iox-builder/src/lib/services/component-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.service.ts","../../../projects/iox-builder/src/lib/services/drag-engine.service.ts","../../../projects/iox-builder/src/lib/services/data-source-registry.service.ts","../../../projects/iox-builder/src/lib/services/viewport.service.ts","../../../projects/iox-builder/src/lib/services/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/interaction-preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/builder-clipboard.service.ts","../../../projects/iox-builder/src/lib/style-compose.ts","../../../projects/iox-builder/src/lib/models/component.model.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.directive.ts","../../../projects/iox-builder/src/lib/services/preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/symbol-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.html","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.ts","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.html","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.ts","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.html","../../../projects/iox-builder/src/lib/builder.component.ts","../../../projects/iox-builder/src/lib/builder.component.html","../../../projects/iox-builder/src/lib/directives/iox-dropzone.directive.ts","../../../projects/iox-builder/src/lib/components/section/section.component.ts","../../../projects/iox-builder/src/lib/components/container/container.component.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.component.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel-child.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.html","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.html","../../../projects/iox-builder/src/lib/services/builder-history.service.ts","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/components/button/button.config.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.config.ts","../../../projects/iox-builder/src/lib/components/card/card.config.ts","../../../projects/iox-builder/src/lib/components/container/container.config.ts","../../../projects/iox-builder/src/lib/components/divider/divider.config.ts","../../../projects/iox-builder/src/lib/components/heading/heading.config.ts","../../../projects/iox-builder/src/lib/components/icon/icon.config.ts","../../../projects/iox-builder/src/lib/components/image/image.config.ts","../../../projects/iox-builder/src/lib/components/link/link.config.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.config.ts","../../../projects/iox-builder/src/lib/components/list-item/list-item.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/lib/components/list/list.config.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nexport enum PanelEventTypes {\n ELEMENT_SELECT = 'elementselect',\n ELEMENT_DESELECT = 'elementdeselect',\n PANEL_SELECTED = 'panelselect',\n PANEL_OPEN = 'panelopen',\n PANEL_CLOSE = 'panelclose',\n BINDING_CHANGED = 'bindingchanged',\n NODE_RENDERED = 'noderendered',\n /** Open the Style panel in preset-edit mode for the given preset ID. */\n PRESET_EDIT = 'presetedit',\n /** Fired after a preset is created, updated, or deleted so panels refresh their list. */\n PRESETS_CHANGED = 'presetschanged',\n /** Fired when a linked symbol instance's styles change — propagates to all instances. */\n SYMBOLS_CHANGED = 'symbolschanged',\n /** Fired on every structural or style mutation — used by BuilderHistoryService to snapshot. */\n LAYOUT_CHANGED = 'layoutchanged',\n /** Open the Interactions panel in preset-edit mode for the given preset ID. */\n INTERACTION_PRESET_EDIT = 'interactionpresetedit',\n /** Fired after an interaction preset is created, updated, or deleted so panels refresh. */\n INTERACTION_PRESETS_CHANGED = 'interactionpresetschanged',\n}\n\nexport interface PanelEvent {\n type: PanelEventTypes;\n data: any;\n}\n\n@Injectable()\nexport class PanelEventService {\n private panelEventSubject = new Subject<PanelEvent>();\n\n subscribe(next: (panelEvent: PanelEvent) => void): Subscription {\n return this.panelEventSubject.asObservable().subscribe(next);\n }\n\n emit(type: PanelEventTypes, data?: any): void {\n this.panelEventSubject.next({ type, data });\n }\n}","export enum PanelTypes {\n BINDINGS = 'Bindings',\n STYLES = 'Styles',\n PAGE = 'Page',\n INTERACTIONS = 'Interactions',\n}\n\n// ── Route animation presets ──────────────────────────────\nexport type RouteAnimationPreset =\n | 'none'\n | 'fade'\n | 'slideUp'\n | 'slideDown'\n | 'zoomIn'\n | 'zoomOut'\n | 'blurIn'\n | 'flip';\n\nexport const ROUTE_ANIMATION_OPTIONS: { label: string; value: RouteAnimationPreset; description: string }[] = [\n { value: 'none', label: 'None', description: 'No animation' },\n { value: 'fade', label: 'Fade', description: 'Opacity cross-dissolve' },\n { value: 'slideUp', label: 'Slide Up', description: 'Rise from below + fade' },\n { value: 'slideDown', label: 'Slide Down', description: 'Drop from above + fade' },\n { value: 'zoomIn', label: 'Zoom In', description: 'Scale up from 96% + fade' },\n { value: 'zoomOut', label: 'Zoom Out', description: 'Scale down from 104% + fade' },\n { value: 'blurIn', label: 'Blur', description: 'Unblur + fade' },\n { value: 'flip', label: 'Flip', description: 'Perspective tilt + fade' },\n];\n\nexport const EASING_OPTIONS: { label: string; value: string }[] = [\n { label: 'Ease', value: 'ease' },\n { label: 'Ease In', value: 'ease-in' },\n { label: 'Ease Out', value: 'ease-out' },\n { label: 'Ease In Out', value: 'ease-in-out' },\n { label: 'Linear', value: 'linear' },\n { label: 'Spring', value: 'cubic-bezier(0.34, 1.56, 0.64, 1)' },\n];\n\n// ── Page-level settings ──────────────────────────────────\nexport interface PageStyleSettings {\n backgroundColor: string;\n backgroundType: 'solid' | 'gradient' | 'image';\n backgroundGradient: string;\n backgroundImage: string;\n fontFamily: string;\n textColor: string;\n maxWidth: string;\n}\n\nexport interface PageScrollSettings {\n enabled: boolean;\n lerp: number;\n wheelMultiplier: number;\n touchMultiplier: number;\n direction: 'vertical' | 'horizontal';\n infinite: boolean;\n}\n\nexport interface PageRouteAnimationSettings {\n enter: RouteAnimationPreset;\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n}\n\nexport interface PageSettings {\n style: PageStyleSettings;\n scroll: PageScrollSettings;\n routeAnimation: PageRouteAnimationSettings;\n}\n\nexport function defaultPageSettings(): PageSettings {\n return {\n style: {\n backgroundColor: '#ffffff',\n backgroundType: 'solid',\n backgroundGradient: 'linear-gradient(135deg, #ffffff 0%, #f0f0f0 100%)',\n backgroundImage: '',\n fontFamily: 'Poppins, sans-serif',\n textColor: '#000000',\n maxWidth: '1440px',\n },\n scroll: {\n enabled: true,\n lerp: 0.1,\n wheelMultiplier: 1,\n touchMultiplier: 1,\n direction: 'vertical',\n infinite: false,\n },\n routeAnimation: {\n enter: 'fade',\n leave: 'fade',\n duration: 400,\n easing: 'ease',\n },\n };\n}\n\nexport enum ToolbarAction {\n SelectParent = 'select-parent',\n Duplicate = 'duplicate',\n Delete = 'delete',\n Play = 'play',\n SaveAsBlock = 'save-as-block',\n MakeGlobal = 'make-global',\n RemoveGlobal = 'remove-global',\n EditPreset = 'edit-preset',\n DetachSymbol = 'detach-symbol',\n EditInteractionPreset = 'edit-interaction-preset',\n CopyPreset = 'copy-preset',\n PastePreset = 'paste-preset',\n CopyInteractionPreset = 'copy-interaction-preset',\n PasteInteractionPreset = 'paste-interaction-preset',\n Copy = 'copy',\n Paste = 'paste',\n}\n\nexport enum NodeAction {\n Delete = 'delete',\n Duplicate = 'duplicate',\n}\n\nexport enum BuilderMode {\n Select = 'select',\n Style = 'style',\n Pan = 'pan'\n}\n\nexport enum DeviceMode {\n Desktop = 'desktop',\n Tablet = 'tablet',\n Mobile = 'mobile',\n}\n\nexport interface DeviceOption {\n mode: DeviceMode;\n label: string;\n icon: string;\n width: number;\n /** Simulated browser viewport height in CSS px. */\n height: number;\n}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440, height: 900 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768, height: 1024 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375, height: 812 },\n];\n\nexport interface ZoomOption {\n label: string;\n value: number | 'fit';\n}\n\nexport const ZOOM_OPTIONS: ZoomOption[] = [\n { label: '25%', value: 25 },\n { label: '50%', value: 50 },\n { label: '75%', value: 75 },\n { label: '100%', value: 100 },\n { label: 'Fit', value: 'fit' },\n];\n\nexport interface ScreenWidthOption {\n label: string;\n width: number;\n}\n\nexport const SCREEN_WIDTH_OPTIONS: ScreenWidthOption[] = [\n { label: '1280', width: 1280 },\n { label: '1440', width: 1440 },\n { label: '1920', width: 1920 },\n { label: '2560', width: 2560 },\n];","import { Injectable, Type } from '@angular/core';\n\n@Injectable()\nexport class ComponentRegistryService {\n private components: Record<string, { type: string; component: Type<any>; config: any }> = {};\n\n getComponent(type: string): Type<any> | null {\n return this.components[type]?.component ?? null;\n }\n\n hasComponent(type: string): boolean {\n return !!this.components[type];\n }\n\n createConfig(type: string): any | null {\n const configType = this.components[type]?.config;\n return configType ? new configType() : null;\n }\n\n register(type: string, component: Type<any>, config: any): void {\n this.components[type] = { type, component, config };\n }\n\n getAll() {\n return Object.values(this.components);\n }\n}","import { ComponentRef, Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { BuilderMode, ToolbarAction } from '../panels/panel.model';\n\nexport interface OverlayBoxSpacing {\n top: number; right: number; bottom: number; left: number;\n}\n\nexport interface OverlayBoxModel {\n margin: OverlayBoxSpacing;\n padding: OverlayBoxSpacing;\n border: OverlayBoxSpacing;\n}\n\nexport interface OverlayEntry {\n element: HTMLElement;\n componentName: string;\n boxModel?: OverlayBoxModel; // populated for hover only\n mode: BuilderMode;\n node?: ComponentNode;\n componentRef?: ComponentRef<any>;\n}\n\nexport { ToolbarAction } from '../panels/panel.model';\n\nexport interface NodeRef {\n element: HTMLElement;\n componentRef: ComponentRef<any>;\n}\n\n@Injectable()\nexport class OverlayService {\n private hoverSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private selectSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private nodeMap = new Map<ComponentNode, NodeRef>();\n\n public hover$ = this.hoverSubject.asObservable();\n public select$ = this.selectSubject.asObservable();\n\n private containerElement: HTMLElement | null = null;\n private scrollContainerElement: HTMLElement | null = null;\n\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\n\n /** Emits cursor coords when a canvas element is right-clicked. */\n public contextMenu$ = new Subject<{ x: number; y: number }>();\n\n triggerContextMenu(x: number, y: number): void {\n this.contextMenu$.next({ x, y });\n }\n\n setContainer(container: HTMLElement | null): void {\n this.containerElement = container;\n }\n\n getContainer(): HTMLElement | null {\n return this.containerElement;\n }\n\n setScrollContainer(el: HTMLElement | null): void {\n this.scrollContainerElement = el;\n if (el) { this.scrollContainer$.next(el); }\n }\n\n getScrollContainer(): HTMLElement | null {\n return this.scrollContainerElement;\n }\n\n /**\n * Resolve the inner styled element.\n * Builder components apply [ngStyle] on their first child element,\n * so computed styles (padding, margin) live there — not on the host.\n */\n getStyledElement(host: HTMLElement): HTMLElement {\n return (host.firstElementChild as HTMLElement) || host;\n }\n\n // ── Node → Element registry ──────────────────────────────\n registerNode(node: ComponentNode, element: HTMLElement, componentRef: ComponentRef<any>): void {\n this.nodeMap.set(node, { element, componentRef });\n }\n\n unregisterNode(node: ComponentNode): void {\n this.nodeMap.delete(node);\n }\n\n getNodeRef(node: ComponentNode): NodeRef | undefined {\n return this.nodeMap.get(node);\n }\n\n /** Return all registered node → ref entries. */\n getAllNodeEntries(): IterableIterator<[ComponentNode, NodeRef]> {\n return this.nodeMap.entries();\n }\n\n /** Find a registered node whose host element matches the given DOM element. */\n findNodeByElement(element: HTMLElement): { node: ComponentNode; ref: NodeRef } | undefined {\n for (const [node, ref] of this.nodeMap) {\n if (ref.element === element) {\n return { node, ref };\n }\n }\n return undefined;\n }\n\n setHover(element: HTMLElement, componentName: string, mode: BuilderMode): void {\n if (this.selectSubject.getValue()?.element === element) return;\n this.hoverSubject.next({ element, componentName, boxModel: this.buildBoxModel(element), mode });\n }\n\n clearHover(): void {\n this.hoverSubject.next(null);\n }\n\n setSelect(element: HTMLElement, componentName: string, mode: BuilderMode, node?: ComponentNode, componentRef?: ComponentRef<any>): void {\n this.hoverSubject.next(null);\n this.selectSubject.next({ element, componentName, mode, node, componentRef });\n }\n\n clearSelect(): void {\n this.selectSubject.next(null);\n }\n\n refreshSelect(): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current });\n }\n\n /** Lightweight swap for drag-preview tracking. */\n updateSelectElement(element: HTMLElement): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current, element });\n }\n\n buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const inner = this.getStyledElement(host);\n // Margin lives on the wrapper div (host.parentElement) — iox-outer-{id} is\n // applied there so it participates in the parent flex layout.\n const wrapper = (host.parentElement as HTMLElement) || host;\n const si = window.getComputedStyle(inner);\n const sw = window.getComputedStyle(wrapper);\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(sw.marginTop), right: px(sw.marginRight), bottom: px(sw.marginBottom), left: px(sw.marginLeft) },\n padding: { top: px(si.paddingTop), right: px(si.paddingRight), bottom: px(si.paddingBottom), left: px(si.paddingLeft) },\n border: { top: px(si.borderTopWidth), right: px(si.borderRightWidth), bottom: px(si.borderBottomWidth), left: px(si.borderLeftWidth) },\n };\n }\n\n}","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from './component-registry.service';\n\nexport interface DragPayload {\n type: 'internal' | 'external';\n data: ComponentNode | string;\n sourceId: string | null;\n sourceIndex: number;\n}\n\nexport interface IoxDropEvent {\n payload: DragPayload;\n targetId: string;\n insertIndex: number;\n}\n\nfunction deepCloneNode(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n regenerateIds(clone);\n return clone;\n}\n\nfunction regenerateIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).substr(2, 9);\n node.styleId = undefined;\n (node.children || []).forEach(regenerateIds);\n}\n\n@Injectable()\nexport class DragEngineService {\n\n constructor(private registry: ComponentRegistryService) {}\n\n // ── Shared drop handler — used by all layout components ───────────────────\n\n handleDrop(\n children: ComponentNode[],\n event: IoxDropEvent,\n dropListId: string,\n cdr: ChangeDetectorRef,\n afterDrop?: () => void,\n ): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n const config = this.registry.createConfig(payload.data as string);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\n this.dropComplete$.next(config);\n }\n afterDrop?.();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId !== dropListId) {\n const sourceData = payload.sourceId ? this.getData(payload.sourceId) : null;\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.getCdr(payload.sourceId!)?.detectChanges();\n }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n } else {\n // Source not in the drop-zone registry → came from an external panel\n // (e.g. the built-in blocks panel stores one pre-built node object and\n // reuses it across drags). Deep-clone with fresh IDs so each drop\n // produces a fully independent node, preventing shared CSS rules.\n const cloned = deepCloneNode(item);\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const currentIdx = children.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n children.splice(currentIdx, 1);\n children.splice(adjustedIdx, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n }\n afterDrop?.();\n }\n\n // ── Drop-zone registry ────────────────────────────────────\n\n private ids: string[] = [];\n private elMap = new Map<string, HTMLElement>();\n private dataMap = new Map<string, any[]>();\n private cdrMap = new Map<string, ChangeDetectorRef>();\n private dropCbMap = new Map<string, (e: IoxDropEvent) => void>();\n private postDropMap = new Map<string, () => void>();\n\n public readonly ids$ = new BehaviorSubject<string[]>([]);\n public readonly isDragging$ = new BehaviorSubject<boolean>(false);\n public readonly deepTarget$ = new BehaviorSubject<string | null>(null);\n /** Emits the dropped/inserted ComponentNode after every successful drop. */\n public readonly dropComplete$ = new Subject<ComponentNode>();\n\n // ── Active drag state ─────────────────────────────────────\n\n private _isDragging = false;\n private _payload: DragPayload | null = null;\n private _sourceEl: HTMLElement | null = null;\n\n /**\n * For internal drags: a DOM clone of the dragged element appended to <body>.\n * Lives outside any CSS transform, so position:fixed works in viewport coords.\n * For external drags: the label chip overlay.\n */\n private _overlay: HTMLElement | null = null;\n /** Where on the element the user grabbed it (for accurate ghost positioning). */\n private _grabOffsetX = 0;\n private _grabOffsetY = 0;\n\n // ── Pointer tracking ──────────────────────────────────────\n\n private _lastPointerX = 0;\n private _lastPointerY = 0;\n\n // ── Deep-target tracking ──────────────────────────────────\n\n private _deepTargetId: string | null = null;\n\n /** Injected overlay div marking the active drop target. */\n private _targetOverlay: HTMLElement | null = null;\n\n // ── Insertion indicator ───────────────────────────────────\n\n private _indicator: HTMLElement | null = null;\n private _indicatorContainerId: string | null = null;\n private _indicatorIndex = -1;\n private _indicatorRaf = 0;\n\n /** Elements that have temporary FLIP inline styles — cleared on drag end. */\n private _flipEls = new Set<HTMLElement>();\n\n // ── Viewport scale ────────────────────────────────────────\n\n private _scale = 1;\n\n /** Called by BuilderComponent whenever the viewport scale changes. */\n setScale(scale: number): void { this._scale = scale; }\n\n // ── Dropzone rect cache — snapshotted at drag start and on scroll ─────────\n\n private _dropzoneRectCache = new Map<string, DOMRect>();\n\n private _snapshotRects(): void {\n this._dropzoneRectCache.clear();\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (el) this._dropzoneRectCache.set(id, el.getBoundingClientRect());\n }\n }\n\n // ── Root-escape ───────────────────────────────────────────\n\n private readonly ROOT_ESCAPE_PX = 14;\n private _rootEscapeActiveFor: string | null = null;\n\n // ─────────────────────────────────────────────────────────\n // Element lookup — elMap first, DOM id fallback\n // ─────────────────────────────────────────────────────────\n\n private _getEl(id: string): HTMLElement | null {\n return this.elMap.get(id) ?? document.getElementById(id);\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop-zone registration\n // ─────────────────────────────────────────────────────────\n\n registerDropzone(\n id: string,\n el: HTMLElement,\n data: any[],\n cdr: ChangeDetectorRef,\n dropCb: (e: IoxDropEvent) => void,\n postDrop?: () => void,\n ): void {\n if (!id) return;\n\n // Stamp id on element so DOM-walk helpers (_isRootContainer) find it.\n el.id = id;\n\n if (!this.ids.includes(id)) {\n this.ids = [...this.ids, id];\n this.ids$.next(this.ids);\n }\n this.elMap.set(id, el);\n this.dataMap.set(id, data);\n this.cdrMap.set(id, cdr);\n this.dropCbMap.set(id, dropCb);\n if (postDrop) this.postDropMap.set(id, postDrop);\n\n interact(el).dropzone({\n accept: '[data-iox-draggable]',\n overlap: 'pointer',\n });\n }\n\n unregisterDropzone(id: string, el: HTMLElement): void {\n this.ids = this.ids.filter(i => i !== id);\n this.elMap.delete(id);\n this.dataMap.delete(id);\n this.cdrMap.delete(id);\n this.dropCbMap.delete(id);\n this.postDropMap.delete(id);\n this.ids$.next(this.ids);\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n // ─────────────────────────────────────────────────────────\n // Draggable registration\n // ─────────────────────────────────────────────────────────\n\n registerDraggable(el: HTMLElement, getPayload: () => DragPayload): void {\n el.setAttribute('data-iox-draggable', '');\n\n interact(el).draggable({\n // Don't start a drag when the pointer goes down inside a contenteditable\n // element (e.g. a text block in inline-edit mode).\n ignoreFrom: '[contenteditable=\"true\"]',\n listeners: {\n start: (event) => this._onDragStart(event, el, getPayload),\n move: (event) => this._onDragMove(event),\n end: (event) => this._onDragEnd(event),\n },\n modifiers: [],\n });\n }\n\n unregisterDraggable(el: HTMLElement): void {\n el.removeAttribute('data-iox-draggable');\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n getData(id: string): any[] | undefined { return this.dataMap.get(id); }\n getCdr(id: string): ChangeDetectorRef | undefined { return this.cdrMap.get(id); }\n invokePostDrop(id: string): void { this.postDropMap.get(id)?.(); }\n\n consumeDeepTarget(): string | null {\n const v = this._deepTargetId;\n this._deepTargetId = null;\n return v;\n }\n\n // ─────────────────────────────────────────────────────────\n // Drag lifecycle\n // ─────────────────────────────────────────────────────────\n\n private _onDragStart(event: any, el: HTMLElement, getPayload: () => DragPayload): void {\n if (el.hasAttribute('data-editing')) {\n event.interaction.stop();\n return;\n }\n this._payload = getPayload();\n this._sourceEl = el;\n this._isDragging = true;\n this._rootEscapeActiveFor = null;\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n this.isDragging$.next(true);\n\n if (this._payload.type === 'internal') {\n // ── Clone the element and append to <body> ────────────────────────────\n //\n // DOM structure for a canvas item:\n // div[ioxDraggable] (el — the drag wrapper, may be wider than content)\n // └─ <app-card> / <app-section> … (Angular component host)\n // └─ div.card-root / div.section-root … (visual root with styles)\n //\n // el.getBoundingClientRect() gives the wrapper's rect, which can be\n // wider than the visual element when the wrapper is in a flex container\n // that stretches it. This causes the ghost to have wrong dimensions\n // and the grab offset to be calculated from the wrong origin.\n //\n // Fix: use the Angular component host (el.firstElementChild) for both\n // the rect measurement and as the clone source.\n // - Rect from host → correct visual dimensions and true grab offset.\n // - Clone from host → carries _ngcontent-* attrs so encapsulated CSS works.\n //\n // The wrapper el still gets iox-drag-active-source (visibility:hidden)\n // to keep its layout space stable while dragging.\n const hostEl = (el.firstElementChild as HTMLElement) ?? el;\n const rect = hostEl.getBoundingClientRect();\n this._grabOffsetX = event.client.x - rect.left;\n this._grabOffsetY = event.client.y - rect.top;\n\n // Scale factor: getBoundingClientRect() returns scaled viewport px,\n // but the clone renders at natural CSS px (no transform parent on body).\n // Apply the same scale transform so the clone matches the visual size\n // exactly — no explicit width/height, no overflow clipping.\n const scale = this._scale;\n\n // Cancel fill:forwards animations before cloning so the ghost shows\n // the element at its natural (un-animated) state, and so the original\n // element is clean after a same-position drop (where Angular won't\n // destroy/recreate the DOM node and InteractionEngine.detach() won't fire).\n hostEl.getAnimations().forEach(a => a.cancel());\n\n const clone = hostEl.cloneNode(true) as HTMLElement;\n // getBoundingClientRect() returns scaled viewport px. Divide by scale\n // to get the natural CSS px — this constrains the clone to match the\n // original's width when it's reparented to <body> (no canvas parent).\n // overflow:hidden suppresses scrollbars that can appear when the clone's\n // children lose their layout context (e.g. percentage-width children).\n const cssWidth = Math.round(rect.width / scale);\n const cssHeight = Math.round(rect.height / scale);\n clone.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${cssWidth}px`,\n `height:${cssHeight}px`,\n `transform:scale(${scale})`,\n 'transform-origin:top left',\n 'pointer-events:none',\n 'overflow:hidden',\n 'z-index:9999',\n 'margin:0',\n ].join(';');\n clone.classList.add('iox-drag-moving');\n document.body.appendChild(clone);\n this._overlay = clone;\n\n // Hide original wrapper in-place (keeps layout space so container size is stable).\n el.classList.add('iox-drag-active-source');\n } else {\n // ── Sidebar external drag — show a label chip ─────────────────────────\n this._createExternalChip(this._payload, event.client.x, event.client.y);\n el.classList.add('iox-drag-source');\n }\n\n this._snapshotRects();\n }\n\n private _onDragMove(event: any): void {\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n\n // Move the clone (or chip) under the cursor.\n if (this._overlay) {\n this._overlay.style.left = (event.client.x - this._grabOffsetX) + 'px';\n this._overlay.style.top = (event.client.y - this._grabOffsetY) + 'px';\n }\n\n this._updateDeepTarget();\n this._updateIndicator();\n }\n\n private _onDragEnd(event: any): void {\n // Restore original element visibility BEFORE Angular re-renders on drop.\n if (this._sourceEl) {\n this._sourceEl.classList.remove('iox-drag-active-source');\n this._sourceEl.classList.remove('iox-drag-source');\n }\n document.querySelectorAll('.iox-drag-active-source')\n .forEach(el => el.classList.remove('iox-drag-active-source'));\n\n // Remove clone/chip overlay.\n this._removeOverlay();\n\n // Remove indicator BEFORE committing so calcInsertIndex sees a clean DOM.\n this._removeIndicator();\n document.body.classList.remove('iox-drag-has-indicator');\n\n // Clean up any FLIP transform/transition inline styles left on container children.\n for (const el of this._flipEls) {\n el.style.transform = '';\n el.style.transition = '';\n }\n this._flipEls.clear();\n\n this._commitDrop();\n\n this._removeTargetOverlay();\n document.querySelectorAll('.iox-drag-over').forEach(el => el.classList.remove('iox-drag-over'));\n this._rootEscapeActiveFor = null;\n this._isDragging = false;\n this._payload = null;\n this._sourceEl = null;\n this.isDragging$.next(false);\n this.deepTarget$.next(null);\n setTimeout(() => { this._deepTargetId = null; });\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop commit\n // ─────────────────────────────────────────────────────────\n\n private _commitDrop(): void {\n if (!this._payload) return;\n\n const targetId = this._deepTargetId ?? 'canvas-preview';\n const insertIndex = this.calcInsertIndex(targetId);\n\n const dropCb = this.dropCbMap.get(targetId);\n if (!dropCb) return;\n\n dropCb({ payload: this._payload, targetId, insertIndex });\n }\n\n // ─────────────────────────────────────────────────────────\n // External-drag chip (sidebar items only)\n // ─────────────────────────────────────────────────────────\n\n private _createExternalChip(payload: DragPayload, pointerX: number, pointerY: number): void {\n this._removeOverlay();\n const label = typeof payload.data === 'string' ? payload.data : 'Component';\n const chip = document.createElement('div');\n chip.className = 'iox-drag-overlay iox-drag-overlay-chip';\n chip.textContent = label;\n // Chip follows 14px below-right of cursor.\n this._grabOffsetX = -14;\n this._grabOffsetY = -14;\n chip.style.left = (pointerX + 14) + 'px';\n chip.style.top = (pointerY + 14) + 'px';\n document.body.appendChild(chip);\n this._overlay = chip;\n }\n\n private _removeOverlay(): void {\n this._overlay?.remove();\n this._overlay = null;\n this._grabOffsetX = 0;\n this._grabOffsetY = 0;\n }\n\n // ─────────────────────────────────────────────────────────\n // Deep-target detection (smallest bounding-rect area)\n // ─────────────────────────────────────────────────────────\n\n private _updateDeepTarget(): void {\n const px = this._lastPointerX;\n const py = this._lastPointerY;\n\n let bestId: string | null = null;\n let bestArea = Infinity;\n\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (!el) continue;\n // Never drop an element into its own subtree: skip any dropzone\n // whose DOM element lives inside the dragged source wrapper.\n if (this._sourceEl?.contains(el)) continue;\n // Skip elements hidden by interaction pre-state (pointer-events: none marks\n // entrance-type targets that are currently opacity:0 in the canvas).\n if (el.style.pointerEvents === 'none') continue;\n const rect = this._dropzoneRectCache.get(id) ?? el.getBoundingClientRect();\n if (px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom) {\n const area = rect.width * rect.height;\n if (area < bestArea) { bestArea = area; bestId = id; }\n }\n }\n\n // Root-escape with hysteresis.\n // Purpose: when the cursor is near the top/bottom edge of a root-level\n // section, treat the target as canvas-preview so the user can insert\n // between root sections.\n //\n // IMPORTANT: only activate if the cursor was ALREADY inside this section\n // (i.e. deepTarget is the section itself or a nested child of it).\n // Without this guard, crossing from Section A into the top 14px of\n // Section C immediately locks the target to canvas-preview and prevents\n // the user from ever reaching Section C's nested containers.\n if (this._rootEscapeActiveFor) {\n const escEl = this._getEl(this._rootEscapeActiveFor);\n if (escEl) {\n const r = this._dropzoneRectCache.get(this._rootEscapeActiveFor) ?? escEl.getBoundingClientRect();\n const inside = px >= r.left && px <= r.right && py >= r.top && py <= r.bottom;\n if (inside) { bestId = 'canvas-preview'; }\n else { this._rootEscapeActiveFor = null; }\n } else {\n this._rootEscapeActiveFor = null;\n }\n }\n\n if (!this._rootEscapeActiveFor &&\n bestId && bestId !== 'canvas-preview' && this._isRootContainer(bestId)) {\n const el = this._getEl(bestId);\n if (el) {\n const rect = this._dropzoneRectCache.get(bestId) ?? el.getBoundingClientRect();\n const nearEdge =\n py <= rect.top + this.ROOT_ESCAPE_PX ||\n py >= rect.bottom - this.ROOT_ESCAPE_PX;\n // Only escape if we were already targeting this section or\n // something nested inside it — not when crossing into it fresh.\n const wasInsideThisSection =\n this._deepTargetId === bestId ||\n this._isDescendantDropzone(this._deepTargetId, bestId);\n if (nearEdge && wasInsideThisSection) {\n this._rootEscapeActiveFor = bestId;\n bestId = 'canvas-preview';\n }\n }\n }\n\n if (bestId !== this._deepTargetId) {\n if (this._deepTargetId) {\n const old = this._getEl(this._deepTargetId);\n old?.classList.remove('iox-drag-over');\n }\n this._deepTargetId = bestId;\n if (bestId) {\n this._getEl(bestId)?.classList.add('iox-drag-over');\n }\n // Move injected overlay to the new target container.\n this._moveTargetOverlay(bestId);\n this.deepTarget$.next(bestId);\n\n // Reset indicator position state when container changes.\n this._indicatorIndex = -1;\n this._indicatorContainerId = null;\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Target overlay — fixed to <body>, sized from getBoundingClientRect\n // so it is always above all canvas content regardless of stacking\n // contexts or background colors inside the target container.\n // ─────────────────────────────────────────────────────────\n\n /** Call on every canvas scroll tick to keep the fixed-position drop-target\n * overlay aligned with the container element that moved in the viewport. */\n refreshDragOverlays(): void {\n if (!this._isDragging) return;\n this._snapshotRects();\n this._moveTargetOverlay(this._deepTargetId);\n }\n\n private _moveTargetOverlay(targetId: string | null): void {\n if (!targetId || targetId === 'canvas-preview') {\n this._removeTargetOverlay();\n return;\n }\n\n const el = this._getEl(targetId);\n if (!el) { this._removeTargetOverlay(); return; }\n\n if (!this._targetOverlay) {\n this._targetOverlay = document.createElement('div');\n this._targetOverlay.className = 'iox-drop-target-overlay';\n document.body.appendChild(this._targetOverlay);\n }\n\n const rect = el.getBoundingClientRect();\n this._targetOverlay.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${rect.width}px`,\n `height:${rect.height}px`,\n 'pointer-events:none',\n 'z-index:9998',\n 'box-sizing:border-box',\n ].join(';');\n }\n\n private _removeTargetOverlay(): void {\n this._targetOverlay?.remove();\n this._targetOverlay = null;\n }\n\n private _isRootContainer(id: string): boolean {\n const el = this._getEl(id);\n if (!el) return false;\n let parent = el.parentElement;\n while (parent) {\n if (parent.id === 'canvas-preview') return true;\n if (parent.id && this.ids.includes(parent.id)) return false;\n parent = parent.parentElement;\n }\n return false;\n }\n\n /**\n * Returns true if the dropzone with `childId` is a DOM descendant of the\n * dropzone with `parentId`. Used to decide whether the cursor was already\n * \"inside\" a root section before triggering root-escape.\n */\n private _isDescendantDropzone(childId: string | null, parentId: string): boolean {\n if (!childId) return false;\n const childEl = this._getEl(childId);\n const parentEl = this._getEl(parentId);\n if (!childEl || !parentEl) return false;\n return parentEl.contains(childEl);\n }\n\n // ─────────────────────────────────────────────────────────\n // Insertion indicator (animates open so siblings shift smoothly)\n // ─────────────────────────────────────────────────────────\n\n private _updateIndicator(): void {\n const targetId = this._deepTargetId ?? 'canvas-preview';\n document.body.classList.add('iox-drag-has-indicator');\n const idx = this.calcInsertIndex(targetId);\n if (idx !== this._indicatorIndex || targetId !== this._indicatorContainerId) {\n this._indicatorIndex = idx;\n this._positionIndicator(targetId, idx);\n }\n }\n\n private _positionIndicator(containerId: string, index: number): void {\n const container = this._getEl(containerId);\n if (!container) return;\n\n const cs = window.getComputedStyle(container);\n const isRow =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n const containerChanged = this._indicatorContainerId !== containerId;\n\n if (containerChanged) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n }\n\n const needsCreate = !this._indicator;\n if (needsCreate) {\n this._indicator = document.createElement('div');\n this._indicator.className = 'iox-insert-indicator';\n\n if (isRow) {\n // Start at width:0 with align-self:stretch so it spans the full\n // container height once visible. overflow:hidden keeps it invisible\n // at width:0 — no painted pixels, no phantom height like min-height\n // would cause. Animates width 0→3px on first appearance.\n this._indicator.style.cssText =\n 'flex-shrink:0;width:0;align-self:stretch;' +\n 'background:#6366f1;border-radius:2px;pointer-events:none;margin:0;' +\n 'transition:width 140ms ease,margin 140ms ease;overflow:hidden;';\n } else {\n this._indicator.style.cssText =\n 'height:0;width:100%;background:#6366f1;border-radius:2px;' +\n 'pointer-events:none;margin:0;display:block;' +\n 'transition:height 140ms ease,margin 140ms ease;overflow:hidden;';\n }\n }\n\n this._indicatorContainerId = containerId;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n\n // ── FLIP: snapshot sibling rects BEFORE DOM change (reposition case only) ──\n let beforeRects: Map<Element, DOMRect> | null = null;\n if (!needsCreate) {\n beforeRects = new Map<Element, DOMRect>();\n Array.from(container.children).forEach(child => {\n if (child !== this._indicator) {\n beforeRects!.set(child, child.getBoundingClientRect());\n }\n });\n }\n\n // Reposition indicator in DOM.\n if (!this._indicator) return;\n if (index >= children.length) {\n container.appendChild(this._indicator);\n } else {\n container.insertBefore(this._indicator, children[index]);\n }\n\n // ── FLIP: animate siblings from their old positions to their new positions ──\n if (beforeRects) {\n Array.from(container.children).forEach(child => {\n const before = beforeRects!.get(child);\n if (!before) return;\n const after = child.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;\n\n const el = child as HTMLElement;\n this._flipEls.add(el);\n // Invert: snap element back to where it was, then animate to new pos.\n el.style.transition = 'none';\n el.style.transform = `translate(${dx}px,${dy}px)`;\n requestAnimationFrame(() => {\n el.style.transition = 'transform 140ms ease';\n el.style.transform = '';\n });\n });\n }\n\n // Animate indicator open (first appearance in this container only).\n if (needsCreate) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicatorRaf = requestAnimationFrame(() => {\n if (!this._indicator) return;\n if (isRow) {\n this._indicator.style.width = '3px';\n this._indicator.style.margin = '0 3px';\n } else {\n this._indicator.style.height = '4px';\n this._indicator.style.margin = '3px 0';\n }\n });\n }\n }\n\n private _removeIndicator(): void {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n this._indicatorContainerId = null;\n this._indicatorIndex = -1;\n }\n\n // ─────────────────────────────────────────────────────────\n // calcInsertIndex\n // ─────────────────────────────────────────────────────────\n\n calcInsertIndex(containerId: string): number {\n const container = this._getEl(containerId);\n if (!container) return 0;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n if (!children.length) return 0;\n\n const cs = window.getComputedStyle(container);\n const isHorizontal =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n if (isHorizontal) {\n if (this._lastPointerX < rect.left + rect.width / 2) return i;\n } else {\n if (this._lastPointerY < rect.top + rect.height / 2) return i;\n }\n }\n return children.length;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Page-scoped registry that holds the current page's data sources.\n * Scoped to PageUiComponent.providers[] so every builder service\n * (BindingsComponent, BuilderRepeaterComponent) shares the same instance.\n *\n * Seeded by PageUiComponent.loadPage() from saved page data, then kept\n * up to date by BindingsComponent whenever the user adds/removes a source.\n */\n@Injectable()\nexport class DataSourceRegistryService {\n private _ds$ = new BehaviorSubject<IoxDataSource[]>([]);\n\n readonly dataSources$ = this._ds$.asObservable();\n\n setDataSources(ds: IoxDataSource[]): void {\n this._ds$.next(ds);\n }\n\n getDataSources(): IoxDataSource[] {\n return this._ds$.value;\n }\n\n findByAlias(alias: string): IoxDataSource | undefined {\n return this._ds$.value.find(ds => ds.alias === alias);\n }\n\n getAliasOptions(): { label: string; value: string }[] {\n return this._ds$.value.map(ds => ({ label: ds.alias, value: ds.alias }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DeviceMode, DEVICE_OPTIONS } from '../panels/panel.model';\n\nexport interface ViewportState {\n device: DeviceMode;\n /** Real canvas width in CSS pixels (e.g., 1440 for desktop). */\n width: number;\n /** Real canvas height in CSS pixels (e.g., 900 for desktop). Simulates the browser viewport. */\n height: number;\n /** Visual scale factor (0–1+). Canvas is rendered at `width × height` then scaled. */\n scale: number;\n}\n\nconst STORAGE_KEY = 'iox_builder_viewport';\n\n@Injectable()\nexport class ViewportService {\n private state: ViewportState = this.loadFromStorage();\n\n private stateSubject = new BehaviorSubject<ViewportState>(this.state);\n public state$ = this.stateSubject.asObservable();\n\n getState(): ViewportState {\n return this.state;\n }\n\n getScale(): number {\n return this.state.scale;\n }\n\n setDevice(device: DeviceMode): void {\n const option = DEVICE_OPTIONS.find(d => d.mode === device);\n if (!option) return;\n this.update({ device, width: option.width, height: option.height });\n }\n\n setScale(scale: number): void {\n this.update({ scale: Math.max(0.1, Math.min(2, scale)) });\n }\n\n setWidth(width: number): void {\n this.update({ width });\n }\n\n /**\n * Calculate the scale that makes the canvas fit inside the available editor width.\n * @param availableWidth The pixel width of the editor area that holds the canvas.\n * @param padding Optional horizontal padding to subtract (default 40px total).\n */\n fitToWidth(availableWidth: number, padding = 40): void {\n const usable = availableWidth - padding;\n if (usable <= 0) return;\n const scale = Math.min(1, usable / this.state.width);\n this.setScale(scale);\n }\n\n /**\n * Calculate the scale that makes the canvas fit both the available width AND height.\n * Uses the smaller of the two scale factors so the entire viewport frame is visible.\n * @param containerWidth Available container width in screen pixels.\n * @param containerHeight Available container height in screen pixels.\n * @param padding Total padding to subtract from both dimensions (default 40px).\n */\n fitToSize(containerWidth: number, containerHeight: number, padding = 40): void {\n const usableW = containerWidth - padding;\n const usableH = containerHeight - padding;\n if (usableW <= 0 || usableH <= 0) return;\n const scaleX = usableW / this.state.width;\n const scaleY = usableH / this.state.height;\n this.setScale(Math.min(1, scaleX, scaleY));\n }\n\n /**\n * Convert a screen-space coordinate to canvas-space (unscaled).\n * Call this when translating pointer events into canvas-relative positions.\n */\n screenToCanvas(screenX: number, screenY: number, canvasRect: DOMRect): { x: number; y: number } {\n return {\n x: (screenX - canvasRect.left) / this.state.scale,\n y: (screenY - canvasRect.top) / this.state.scale,\n };\n }\n\n private update(partial: Partial<ViewportState>): void {\n this.state = { ...this.state, ...partial };\n this.stateSubject.next(this.state);\n this.saveToStorage();\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\n } catch {}\n }\n\n private loadFromStorage(): ViewportState {\n const defaults: ViewportState = {\n device: DeviceMode.Desktop,\n width: DEVICE_OPTIONS[0].width,\n height: DEVICE_OPTIONS[0].height,\n scale: 0.75,\n };\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return defaults;\n const saved = JSON.parse(raw);\n const device = (Object.values(DeviceMode) as string[]).includes(saved.device)\n ? saved.device as DeviceMode\n : defaults.device;\n const option = DEVICE_OPTIONS.find(d => d.mode === device) ?? DEVICE_OPTIONS[0];\n return {\n device,\n width: typeof saved.width === 'number' && saved.width > 0 ? saved.width : option.width,\n height: typeof saved.height === 'number' && saved.height > 0 ? saved.height : option.height,\n scale: typeof saved.scale === 'number' ? Math.max(0.1, Math.min(2, saved.scale)) : defaults.scale,\n };\n } catch {\n return defaults;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\n\ninterface AttachedInteraction {\n node: ComponentNode;\n interaction: IoxInteraction;\n cleanup: () => void;\n}\n\n/**\n * Wires ComponentNode interactions to live DOM elements via the\n * OverlayService node-element registry.\n *\n * Call `attach(node)` after the node is rendered and registered.\n * Call `detach(node)` on destroy to tear down listeners/observers.\n */\n@Injectable()\nexport class InteractionEngineService {\n private attached = new Map<ComponentNode, AttachedInteraction[]>();\n\n /** Elements that have had pre-state applied (hidden by attach). */\n private preStatedElements = new Set<HTMLElement>();\n\n /**\n * Toggle state for click interactions with reverseActions.\n * false = next click runs actions (primary); true = next click runs reverseActions.\n */\n private toggleStates = new Map<string, boolean>();\n\n /**\n * Pre-states queued for elements that weren't registered yet when the owner\n * node's attach() ran. Keyed by target node ID. Consumed when the target\n * element's own attach() fires.\n */\n private pendingPreStates = new Map<string, InteractionAction[]>();\n\n /** Action types that animate an element from hidden → visible. */\n private readonly ENTRANCE_TYPES = new Set([\n 'fadeIn', 'moveUp', 'moveDown', 'moveLeft', 'moveRight', 'scaleIn', 'show',\n ]);\n\n /** Action types that animate an element from visible → hidden. */\n private readonly EXIT_TYPES = new Set(['fadeOut', 'scaleOut', 'hide']);\n\n constructor(private overlayService: OverlayService) {}\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n\n const inBuilder = this.isBuilderMode();\n\n // Apply any pre-states queued for THIS element by earlier-registered nodes.\n // Pending entries are only added when appropriate (see loop below), so always consume.\n if (node.id) {\n const pending = this.pendingPreStates.get(node.id);\n if (pending) {\n for (const action of pending) {\n this.applyPreState(ref.element, action);\n }\n this.pendingPreStates.delete(node.id);\n }\n }\n\n if (!node.interactions?.length) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n // Pre-state: hide target elements before their entrance animation fires.\n // In builder mode, skip auto-fire triggers (pageLoad, viewportEnter, scrollProgress)\n // because those triggers are also suppressed in builder mode — targets would stay\n // permanently hidden. Manual triggers (click, hover) are kept active on the canvas,\n // so their targets should start in the correct pre-state.\n const skipPreState = inBuilder && ix.trigger !== 'click' && ix.trigger !== 'hover';\n if (!skipPreState) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) {\n this.applyPreState(target, action);\n } else if (action.target && action.target !== 'self') {\n const list = this.pendingPreStates.get(action.target) ?? [];\n list.push(action);\n this.pendingPreStates.set(action.target, list);\n }\n }\n }\n }\n\n const cleanup = this.attachInteraction(node, ix, ref.element);\n cleanups.push({ node, interaction: ix, cleanup });\n }\n\n this.attached.set(node, cleanups);\n }\n\n /** Tear down all interaction listeners for a node and reset its animated state. */\n detach(node: ComponentNode): void {\n const entries = this.attached.get(node);\n if (!entries) return;\n for (const entry of entries) {\n entry.cleanup();\n }\n this.attached.delete(node);\n\n // Reset toggle state so re-attach starts from the primary actions.\n for (const entry of entries) {\n if (entry.interaction.reverseActions?.length) {\n this.toggleStates.delete(entry.interaction.id);\n }\n }\n\n // Cancel Web Animations and strip any inline pre-state styles that\n // were applied by applyPreState() so the element returns to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // Also clean up pre-state on any target elements this node was animating.\n if (node.interactions) {\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n // Remove any pending pre-states for unregistered targets.\n if (action.target && action.target !== 'self') {\n const pending = this.pendingPreStates.get(action.target);\n if (pending) {\n const filtered = pending.filter(a => a !== action);\n if (filtered.length) {\n this.pendingPreStates.set(action.target, filtered);\n } else {\n this.pendingPreStates.delete(action.target);\n }\n }\n }\n // Clean up inline styles on already-registered target elements.\n const target = this.resolveTarget(node, action);\n if (target && this.preStatedElements.has(target)) {\n target.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(target);\n this.preStatedElements.delete(target);\n }\n }\n }\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.detach(node);\n this.attach(node);\n }\n\n /**\n * Replay all interactions on a node immediately, regardless of their trigger.\n * Used by the builder overlay play button for in-editor animation preview.\n * Uses fill:'none' so the element returns to its natural state after the preview.\n */\n replay(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n // Clear any leftover inline styles so the pre-state applies cleanly.\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // In builder mode pre-state is never applied on attach, so apply it now\n // to give an accurate hidden→visible preview. It is cleaned up via\n // executeAction's anim.finished handler once the animation completes.\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) this.applyPreState(target, action);\n }\n }\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n // In builder mode, automatic triggers don't auto-fire — use the play button instead.\n // Click/hover remain active so users can test those interactions on the canvas.\n if (this.isBuilderMode() && (ix.trigger === 'pageLoad' || ix.trigger === 'viewportEnter' || ix.trigger === 'scrollProgress')) {\n return () => {};\n }\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\n case 'viewportEnter':\n return this.attachViewportEnter(node, ix, element);\n case 'click':\n return this.attachClick(node, ix, element);\n case 'hover':\n return this.attachHover(node, ix, element);\n case 'scrollProgress':\n // Scroll-progress is complex — deferred.\n return () => {};\n default:\n return () => {};\n }\n }\n\n // ── Triggers ─────────────────────────────────────────────\n\n private attachPageLoad(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const timer = setTimeout(() => {\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => this.runActions(node, ix.actions));\n } else {\n this.runActions(node, ix.actions);\n }\n }, 50);\n return () => clearTimeout(timer);\n }\n\n private attachViewportEnter(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const firedSet = new Set<string>();\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) continue;\n // Element is in viewport but may be inside a still-fading parent.\n // Defer until all pre-stated ancestors finish their entrance animation.\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => {\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n firedSet.add(key);\n this.runActions(node, ix.actions);\n });\n continue;\n }\n firedSet.add(key);\n this.runActions(node, ix.actions);\n }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n return () => observer.disconnect();\n }\n\n private isBuilderMode(): boolean {\n return document.body.classList.contains('builder-active');\n }\n\n /** Returns true if any DOM ancestor of element is currently faded out via pre-state. */\n private hasPreStatedAncestor(element: HTMLElement): boolean {\n let el = element.parentElement;\n while (el && el !== document.body) {\n if (this.preStatedElements.has(el)) return true;\n el = el.parentElement;\n }\n return false;\n }\n\n /** Polls via RAF until no ancestor is in pre-state, then fires callback. */\n private deferUntilVisible(element: HTMLElement, callback: () => void): void {\n const poll = () => {\n if (!this.hasPreStatedAncestor(element)) {\n callback();\n } else {\n requestAnimationFrame(poll);\n }\n };\n requestAnimationFrame(poll);\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = () => {\n if (ix.reverseActions?.length) {\n // Toggle: alternate between primary and reverse actions on each click.\n const isToggled = this.toggleStates.get(ix.id) ?? false;\n this.runActions(node, isToggled ? ix.reverseActions : ix.actions);\n this.toggleStates.set(ix.id, !isToggled);\n } else {\n this.runActions(node, ix.actions);\n }\n };\n element.addEventListener('click', handler);\n return () => element.removeEventListener('click', handler);\n }\n\n private attachHover(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const enterHandler = () => this.runActions(node, ix.actions);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.reverseAction(target, action);\n }\n };\n element.addEventListener('mouseenter', enterHandler);\n element.addEventListener('mouseleave', leaveHandler);\n return () => {\n element.removeEventListener('mouseenter', enterHandler);\n element.removeEventListener('mouseleave', leaveHandler);\n };\n }\n\n // ── Actions ──────────────────────────────────────────────\n\n private runActions(node: ComponentNode, actions: InteractionAction[]): void {\n for (const action of actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction): HTMLElement | null {\n if (action.target === 'self') {\n const ref = this.overlayService.getNodeRef(ownerNode);\n return ref?.element ?? null;\n }\n // Find by node ID\n for (const [n, ref] of this.overlayService.getAllNodeEntries()) {\n if (n.id === action.target) return ref.element;\n }\n return null;\n }\n\n private executeAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // 'both' = backwards (holds first keyframe during delay) + forwards (holds last keyframe after end).\n const anim = element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'both',\n });\n\n if (this.ENTRANCE_TYPES.has(action.type)) {\n anim.finished.then(() => {\n element.style.removeProperty('pointer-events');\n this.preStatedElements.delete(element);\n // Builder: clear inline pre-state so cancelling animations later\n // doesn't leave the element invisible after a play preview.\n if (this.isBuilderMode()) this.clearInlineAnimationStyles(element);\n }).catch(() => {});\n } else if (this.EXIT_TYPES.has(action.type)) {\n // Once the exit animation finishes the element is invisible —\n // disable pointer events so it doesn't silently block clicks underneath it.\n anim.finished.then(() => {\n element.style.setProperty('pointer-events', 'none');\n }).catch(() => {});\n }\n }\n\n /**\n * Freeze an element at the animation's starting frame immediately, before any\n * trigger fires. Called for ALL entrance-type actions regardless of trigger so\n * that a click-triggered fadeIn on a menu overlay also starts it hidden.\n *\n * Also sets pointer-events:none so the invisible element does not block clicks\n * on other content beneath it. Pointer events are restored in executeAction()\n * once the entrance animation finishes.\n */\n private applyPreState(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n const first = keyframes[0] as Record<string, string>;\n for (const [prop, val] of Object.entries(first)) {\n (element.style as any)[prop] = String(val);\n }\n // Invisible element must not intercept pointer events.\n const opacity = first['opacity'];\n if (opacity === '0' || (opacity as any) === 0) {\n element.style.setProperty('pointer-events', 'none');\n }\n this.preStatedElements.add(element);\n }\n\n private clearInlineAnimationStyles(element: HTMLElement): void {\n element.style.removeProperty('opacity');\n element.style.removeProperty('transform');\n element.style.removeProperty('visibility');\n element.style.removeProperty('pointer-events');\n }\n\n private reverseAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // Reverse: play the keyframes backwards\n element.animate([...keyframes].reverse(), {\n duration: action.duration,\n easing: action.easing,\n fill: 'forwards',\n });\n }\n\n private buildAnimation(action: InteractionAction): { keyframes: Keyframe[]; options: KeyframeAnimationOptions } {\n const dist = action.params?.['distance'] ?? 20;\n let keyframes: Keyframe[] = [];\n\n switch (action.type) {\n case 'fadeIn':\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n case 'fadeOut':\n keyframes = [{ opacity: 1 }, { opacity: 0 }];\n break;\n case 'moveUp':\n keyframes = [{ transform: `translateY(${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveDown':\n keyframes = [{ transform: `translateY(-${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveLeft':\n keyframes = [{ transform: `translateX(${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'moveRight':\n keyframes = [{ transform: `translateX(-${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'scaleIn':\n keyframes = [{ transform: 'scale(0.8)', opacity: 0 }, { transform: 'scale(1)', opacity: 1 }];\n break;\n case 'scaleOut':\n keyframes = [{ transform: 'scale(1)', opacity: 1 }, { transform: 'scale(0.8)', opacity: 0 }];\n break;\n case 'rotate':\n const deg = action.params?.['degrees'] ?? 360;\n keyframes = [{ transform: `rotate(0deg)` }, { transform: `rotate(${deg}deg)` }];\n break;\n case 'show':\n keyframes = [{ opacity: 0, visibility: 'hidden' }, { opacity: 1, visibility: 'visible' }];\n break;\n case 'hide':\n keyframes = [{ opacity: 1, visibility: 'visible' }, { opacity: 0, visibility: 'hidden' }];\n break;\n case 'toggleVisibility':\n // Toggle is stateful — handled separately via element style\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n }\n\n return {\n keyframes,\n options: {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n },\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { InteractionPreset } from '../models/component.model';\n\n/**\n * InteractionPresetRegistryService — in-memory store for org-level interaction presets.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class InteractionPresetRegistryService {\n private presets = new Map<string, InteractionPreset>();\n\n setPresets(presets: InteractionPreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): InteractionPreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): InteractionPreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: InteractionPreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface BuilderClipboard {\n node?: ComponentNode;\n presetId?: string;\n interactionPresetId?: string;\n}\n\n/**\n * BuilderClipboardService — in-memory typed clipboard for the page builder.\n *\n * Stores element copies, style preset references, and interaction preset references.\n * Lives in memory only — no navigator.clipboard usage.\n * Scoped to PageUiComponent.providers[] — one clipboard per builder instance.\n */\n@Injectable()\nexport class BuilderClipboardService {\n private _clip: BuilderClipboard = {};\n\n copyNode(node: ComponentNode): void {\n this._clip = { node: JSON.parse(JSON.stringify(node)) };\n }\n\n copyPreset(presetId: string): void {\n this._clip = { ...this._clip, presetId };\n }\n\n copyInteractionPreset(interactionPresetId: string): void {\n this._clip = { ...this._clip, interactionPresetId };\n }\n\n getNode(): ComponentNode | undefined { return this._clip.node; }\n getPresetId(): string | undefined { return this._clip.presetId; }\n getInteractionPresetId(): string | undefined { return this._clip.interactionPresetId; }\n\n clear(): void { this._clip = {}; }\n}\n","// Virtual trait → composed CSS property helpers.\n//\n// Several style traits are \"virtual\" — they don't map 1:1 to a CSS property but\n// are components of a multi-function CSS value. composeVirtualTraits() strips\n// these virtual keys from the style map and replaces them with the correctly\n// composed CSS properties (filter, backdrop-filter, transform, transition).\n//\n// The same function is used by the render directive (initial mount + state\n// restore) and by the style panel's onUpdate / setStateOverride paths, so\n// the CSS output is always consistent regardless of how styles are applied.\n\n// ─── Filter ──────────────────────────────────────────────────────────────────\n\nconst FILTER_FUNS: [trait: string, fn: string, def: string][] = [\n ['filterBlur', 'blur', '0px'],\n ['filterBrightness', 'brightness', '1'],\n ['filterContrast', 'contrast', '1'],\n ['filterGrayscale', 'grayscale', '0'],\n ['filterSaturate', 'saturate', '1'],\n ['filterHueRotate', 'hue-rotate', '0deg'],\n ['filterSepia', 'sepia', '0'],\n ['filterInvert', 'invert', '0'],\n];\n\n// ─── Backdrop-filter ─────────────────────────────────────────────────────────\n\nconst BACKDROP_FUNS: [trait: string, fn: string, def: string][] = [\n ['backdropBlur', 'blur', '0px'],\n ['backdropBrightness', 'brightness', '1'],\n ['backdropContrast', 'contrast', '1'],\n ['backdropSaturate', 'saturate', '1'],\n];\n\n// ─── Transform ───────────────────────────────────────────────────────────────\n\nconst TRANSFORM_FUNS: [trait: string, fn: string, def: string][] = [\n ['translateX', 'translateX', '0px'],\n ['translateY', 'translateY', '0px'],\n ['scaleX', 'scaleX', '1'],\n ['scaleY', 'scaleY', '1'],\n ['rotate', 'rotate', '0deg'],\n ['skewX', 'skewX', '0deg'],\n ['skewY', 'skewY', '0deg'],\n];\n\n// ─── ::marker pseudo-element ─────────────────────────────────────────────────\n\nconst MARKER_FUNS: [trait: string, cssProp: string][] = [\n ['markerColor', 'color'],\n ['markerFontSize', 'fontSize'],\n];\n\n// ─── All virtual trait names ──────────────────────────────────────────────────\n\nexport const VIRTUAL_TRAIT_KEYS = new Set<string>([\n ...FILTER_FUNS.map(([t]) => t),\n ...BACKDROP_FUNS.map(([t]) => t),\n ...TRANSFORM_FUNS.map(([t]) => t),\n 'transitionDuration', 'transitionTimingFunction', 'transitionDelay',\n ...MARKER_FUNS.map(([t]) => t),\n]);\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction buildFns(\n funs: [string, string, string][],\n src: Record<string, any>,\n): string {\n return funs\n .filter(([t,, d]) => src[t] != null && src[t] !== '' && src[t] !== d)\n .map(([t, fn]) => `${fn}(${src[t]})`)\n .join(' ');\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Strip virtual trait keys from `raw` and emit their composed CSS equivalents.\n *\n * When composing a partial state-override map (hover, active…), pass the full\n * base style map as `base` so non-overridden components (e.g. filterBrightness\n * when only filterBlur is overridden) are preserved in the composed output.\n * When operating on a complete style map, omit `base` — it defaults to `raw`.\n */\nexport function composeVirtualTraits(\n raw: Record<string, any>,\n base: Record<string, any> = raw,\n): Record<string, any> {\n // Copy all non-virtual properties as-is\n const result: Record<string, any> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (!VIRTUAL_TRAIT_KEYS.has(k)) result[k] = v;\n }\n\n // Merge base values for any virtual key absent from the partial override map\n const merged = (funs: [string, string, string][]): Record<string, any> => {\n const m: Record<string, any> = {};\n for (const [t] of funs) m[t] = raw[t] ?? base[t];\n return m;\n };\n\n // filter\n const filterStr = buildFns(FILTER_FUNS, merged(FILTER_FUNS));\n if (filterStr) result['filter'] = filterStr;\n\n // backdrop-filter\n const backdropStr = buildFns(BACKDROP_FUNS, merged(BACKDROP_FUNS));\n if (backdropStr) result['backdropFilter'] = backdropStr;\n\n // transform\n const transformStr = buildFns(TRANSFORM_FUNS, merged(TRANSFORM_FUNS));\n if (transformStr) result['transform'] = transformStr;\n\n // transition — only emit when duration is non-zero\n const dur = raw['transitionDuration'] ?? base['transitionDuration'];\n const ease = raw['transitionTimingFunction'] ?? base['transitionTimingFunction'];\n const del = raw['transitionDelay'] ?? base['transitionDelay'];\n if (dur && ease && dur !== '0ms' && dur !== '0s') {\n const delPart = del && del !== '0ms' && del !== '0s' ? ` ${del}` : '';\n result['transition'] = `all ${dur} ${ease}${delPart}`;\n }\n\n // ::marker pseudo-element — collected into __markerStyles so StyleRegistryService\n // can emit a separate `.iox-node-{id}::marker { … }` rule.\n const markerStyles: Record<string, any> = {};\n for (const [trait, cssProp] of MARKER_FUNS) {\n const val = raw[trait] ?? base[trait];\n if (val != null && val !== '') markerStyles[cssProp] = val;\n }\n if (Object.keys(markerStyles).length) {\n result['__markerStyles'] = markerStyles;\n }\n\n return result;\n}\n","export enum StyleCategory {\n Layout = 'Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\n List = 'List',\n // Legacy — kept for backward compat; prefer Size\n Dimensions = 'Dimensions',\n}\n\nexport interface IoxBinding {\n prop: string;\n source: string;\n path: string;\n fallback?: any;\n}\n\n/**\n * When mode=single: looks up a single CMS item by matching a schema field\n * against a URL path param (e.g. /project/:projectId → field _id).\n * `defaultId` is used as a fallback value in the builder preview when no\n * live route is active.\n */\nexport interface DsFilterByRouteParam {\n field: string;\n routeParam: string;\n defaultId?: string;\n}\n\n/**\n * When mode=query: each entry maps a schema field to a URL query string\n * key (e.g. ?status=active → field \"status\").\n * `defaultValue` is used as a fallback in the builder preview.\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam: string;\n defaultValue?: string;\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'internal-api' | 'external-api' | 'static';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: string;\n cms?: {\n contentType: string;\n filter?: any;\n limit?: number;\n sort?: any;\n /** Single-result lookup: match field against a route path param */\n filterByRouteParam?: DsFilterByRouteParam;\n /** Array-result filtering: match fields against URL query params */\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\nexport type InteractionTrigger = 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility';\n\nexport interface InteractionAction {\n type: InteractionActionType;\n /** 'self' targets the node that owns the interaction; otherwise a node ID. */\n target: 'self' | string;\n /** Duration in milliseconds. */\n duration: number;\n /** Delay in milliseconds before the action starts. */\n delay: number;\n easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';\n /** Extra parameters (e.g. { distance: 20 } for move actions). */\n params?: Record<string, any>;\n /** If true, the action only plays once (relevant for viewport/scroll triggers). */\n once?: boolean;\n}\n\nexport interface IoxInteraction {\n id: string;\n trigger: InteractionTrigger;\n actions: InteractionAction[];\n /**\n * Optional second set of actions for click-toggle behaviour.\n * When set, the first click runs `actions` and the second click runs\n * `reverseActions`, alternating on every subsequent click.\n * Only meaningful for trigger === 'click'.\n */\n reverseActions?: InteractionAction[];\n}\n\n/**\n * Maps each action type to its logical inverse for auto-populating toggle\n * reverse actions. Types without a natural inverse are omitted.\n */\nexport const INVERSE_ACTION: Partial<Record<InteractionActionType, InteractionActionType>> = {\n fadeIn: 'fadeOut',\n fadeOut: 'fadeIn',\n show: 'hide',\n hide: 'show',\n scaleIn: 'scaleOut',\n scaleOut: 'scaleIn',\n moveUp: 'moveDown',\n moveDown: 'moveUp',\n moveLeft: 'moveRight',\n moveRight: 'moveLeft',\n};\n\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\n { value: 'viewportEnter', label: 'Enter viewport', icon: 'ph-thin ph-eye' },\n { value: 'click', label: 'Click', icon: 'ph-thin ph-cursor-click' },\n { value: 'hover', label: 'Hover', icon: 'ph-thin ph-hand-pointing' },\n { value: 'scrollProgress', label: 'Scroll progress', icon: 'ph-thin ph-arrow-fat-lines-down' },\n];\n\nexport const ACTION_TYPE_OPTIONS: { value: InteractionActionType; label: string }[] = [\n { value: 'fadeIn', label: 'Fade in' },\n { value: 'fadeOut', label: 'Fade out' },\n { value: 'moveUp', label: 'Move up' },\n { value: 'moveDown', label: 'Move down' },\n { value: 'moveLeft', label: 'Move left' },\n { value: 'moveRight', label: 'Move right' },\n { value: 'scaleIn', label: 'Scale in' },\n { value: 'scaleOut', label: 'Scale out' },\n { value: 'rotate', label: 'Rotate' },\n { value: 'show', label: 'Show' },\n { value: 'hide', label: 'Hide' },\n { value: 'toggleVisibility', label: 'Toggle visibility' },\n];\n\nexport const EASING_OPTIONS = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];\n\n// ── Style Presets ─────────────────────────────────────────────────────────────\n\n/**\n * A named, reusable collection of CSS style properties stored at the org level.\n * Elements reference a preset by `stylePresetId`. At render time the engine\n * merges `preset.styleProps → element.styleOverrides` so local overrides win.\n */\nexport interface StylePreset {\n id: string;\n name: string;\n /** Flat CSS property map — same shape as IoxLayoutNode.styleProps. */\n styleProps: Record<string, any>;\n /** Per-state style overrides stored alongside the preset (e.g. hover, active, focus). */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n}\n\n/** A reusable element definition whose instances all stay in sync.\n * Stored in the `symbols` backend collection; referenced by ComponentNode.symbolId. */\nexport interface IoxSymbol {\n id: string;\n name: string;\n /** Full serialised node tree — same shape as a page layout node. */\n node: Record<string, any>;\n}\n\n/**\n * A named, reusable collection of IoxInteraction[] stored at the org level.\n * Elements reference a preset by `interactionPresetId`. Editing the preset\n * propagates updated interactions to all linked elements immediately.\n */\nexport interface InteractionPreset {\n id: string;\n name: string;\n interactions: IoxInteraction[];\n}\n\nexport type ElementState = 'hover' | 'active' | 'focus' | 'first-child' | 'last-child' | 'nth-child(odd)' | 'nth-child(even)';\n\n/** Interaction pseudo-classes — compiled to .iox-node-{id}:state */\nexport const INTERACTION_STATES: ElementState[] = ['hover', 'active', 'focus'];\n\n/** Structural pseudo-classes — compiled to .iox-outer-{id}:state */\nexport const STRUCTURAL_STATES: ElementState[] = ['first-child', 'last-child', 'nth-child(odd)', 'nth-child(even)'];\n\nexport const SUPPORTED_STATES: ElementState[] = [...INTERACTION_STATES, ...STRUCTURAL_STATES];\n\nexport interface ComponentNode {\n id?: string;\n /**\n * The CSS class key (`iox-node-{styleId}`) used by the style engine.\n * Set on clone nodes to point back to the original template node's id,\n * so all repeated rows share a single CSS rule.\n * Absent on original (non-clone) nodes — they use `id` directly.\n */\n styleId?: string;\n type: string;\n inputs?: Record<string, any>;\n traits?: ComponentTrait[];\n styleTraits?: StyleTraitGroup[];\n bindings?: IoxBinding[];\n interactions?: IoxInteraction[];\n children?: ComponentNode[];\n isGlobal?: boolean;\n globalPosition?: 'before' | 'after';\n /** ID of the org-level StylePreset applied to this node. */\n stylePresetId?: string;\n /**\n * CSS properties explicitly overridden by the user after a preset was applied.\n * Serialized to `styleProps` in the page layout JSON when a preset is active.\n * Absent when no preset is applied (full styles stored in styleTraits instead).\n */\n styleOverrides?: Record<string, any>;\n /**\n * Per-state style overrides. Only stores properties that differ from the base\n * style — same sparse pattern as styleOverrides. Each key maps to a flat CSS\n * property map that is compiled to `.iox-node-{id}:hover { … }` etc.\n */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n /** User-defined display name for this node. Used in the layer tree and as an\n * interaction target identifier. Only nodes with a label appear in the\n * interaction target picker. */\n label?: string;\n /** ID of the org-level IoxSymbol this node is linked to.\n * Absent on stamps (independent copies). When present, any style change\n * on this node propagates to all other instances of the same symbol. */\n symbolId?: string;\n /** ID of the org-level InteractionPreset applied to this node.\n * When set, node.interactions reflects the preset's interactions. */\n interactionPresetId?: string;\n}\n\n/**\n * Build a full StyleTraitGroup[] schema populated with values from a flat\n * styleProps map. Used when editing a preset in the Style panel — the panel\n * receives the same `StyleTraitGroup[]` shape regardless of context.\n */\nexport function buildPresetStyleTraits(styleProps: Record<string, any>): StyleTraitGroup[] {\n const allGroups: GroupStyleConfig[] = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n ];\n return allGroups.map(group => ({\n ...group,\n traits: group.traits.map(trait => ({\n ...trait,\n default: styleProps[trait.name] !== undefined ? styleProps[trait.name] : trait.default,\n })),\n }));\n}\n\nexport enum TraitInputType {\n Text = 'text',\n Number = 'number',\n Select = 'select',\n Checkbox = 'checkbox',\n Color = 'colorPicker',\n DirectionalSize = 'directionalSize',\n SelectButton = 'selectButton',\n Scrub = 'scrub',\n Range = 'range',\n Icon = 'icon',\n Media = 'media',\n FontFamily = 'fontFamily',\n GridTemplate = 'gridTemplate',\n SectionLabel = 'sectionLabel',\n}\n\nexport interface TraitOptionMap {\n [key: string]: any;\n}\n\n/** Named label/value pair for select options where the display label differs from the CSS value. */\nexport interface TraitSelectOption {\n label: string;\n value: string;\n}\n\nexport interface QuadSizeSegment {\n key: string;\n icon: string;\n ariaLabel?: string;\n}\n\n/** Conditional visibility: this trait only shows when the named sibling trait matches one of the given values. */\nexport interface TraitShowCondition {\n /** name of another trait in the same style group */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\n}\n\nexport interface ComponentTrait {\n name: string;\n label: string;\n type: TraitInputType;\n options?: string[] | TraitSelectOption[] | TraitOptionMap;\n default?: any;\n inline?: boolean;\n /** When set, this trait is hidden unless the named sibling trait has one of the specified values. */\n showWhen?: TraitShowCondition;\n}\n\n// StyleTrait is the same shape as ComponentTrait — unified type\nexport type StyleTrait = ComponentTrait;\n\nexport interface StyleTraitGroup {\n category: string;\n traits: ComponentTrait[];\n}\n\nexport function generateNodeId(): string {\n return Math.random().toString(36).substr(2, 9);\n}\n\nexport class ComponentConfig {\n public id: string;\n public type: string;\n public selector: string;\n public icon: string;\n public category: string;\n public inputs: Record<string, any>;\n public traits: ComponentTrait[];\n public styleTraits: StyleTraitGroup[];\n /** Layout components (e.g. Section) set this to []. Leaf components leave it undefined.\n * RenderDirective uses `node.children !== undefined` to detect layout components. */\n public children?: ComponentNode[];\n\n constructor(type: string, selector: string, icon = 'ph-thin ph-cube', category = 'General') {\n this.id = generateNodeId();\n this.type = type;\n this.selector = selector;\n this.icon = icon;\n this.category = category;\n this.inputs = {};\n this.traits = [];\n this.styleTraits = [];\n }\n\n /** Override specific trait defaults after styleTraits are set.\n * Call this at the end of each subclass constructor. */\n protected applyStyleDefaults(defaults: Record<string, any>): void {\n for (const group of this.styleTraits) {\n for (const trait of group.traits) {\n if (defaults[trait.name] !== undefined) {\n trait.default = defaults[trait.name];\n }\n }\n }\n }\n}\n\nexport class TraitConfig {\n public name: string;\n public label: string;\n public type: TraitInputType;\n public options?: string[] | TraitSelectOption[] | TraitOptionMap;\n public default?: any;\n public inline?: boolean;\n public showWhen?: TraitShowCondition;\n\n constructor(\n name: string,\n label: string,\n type: TraitInputType,\n options?: string[] | TraitSelectOption[] | TraitOptionMap,\n defaultValue?: any,\n inline?: boolean,\n showWhen?: TraitShowCondition\n ) {\n this.name = name;\n this.label = label;\n this.type = type;\n this.options = options;\n this.default = defaultValue;\n this.inline = inline;\n this.showWhen = showWhen;\n }\n}\n\n// StyleTraitConfig is unified with TraitConfig — single class for both traits and style traits\nexport { TraitConfig as StyleTraitConfig };\n\nexport class GroupStyleConfig {\n public category: string;\n public traits: TraitConfig[];\n\n constructor(category: string, traits: TraitConfig[]) {\n this.category = category;\n this.traits = traits;\n }\n}\n\n// ─── Unit constants ───────────────────────────────────────────────────────────\n\nexport const UNITS_ALL: string[] = ['px', '%', 'rem', 'em', 'vw', 'vh'];\nexport const UNITS_NO_VW: string[] = ['px', '%', 'rem', 'em', 'vh'];\nexport const UNITS_FIXED: string[] = ['px', '%', 'rem', 'em'];\nexport const UNITS_DEG: string[] = ['deg'];\n\n// ─── Shared panel utilities ──────────────────────────────────────────────────\n\nexport function resolveTraitControllerType(type: TraitInputType): string {\n switch (type) {\n case TraitInputType.Number: return 'number';\n case TraitInputType.Select: return 'select';\n case TraitInputType.Checkbox: return 'switch';\n case TraitInputType.Color: return 'colorPicker';\n case TraitInputType.DirectionalSize: return 'directionalSize';\n case TraitInputType.SelectButton: return 'selectButton';\n case TraitInputType.Scrub: return 'scrub';\n case TraitInputType.Range: return 'range';\n case TraitInputType.SectionLabel: return 'sectionLabel';\n case TraitInputType.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.FontFamily: return 'select';\n case TraitInputType.GridTemplate: return 'gridTemplate';\n default: return 'text';\n }\n}\n\nexport function resolveTraitOptions(trait: ComponentTrait): any {\n if (\n trait.type === TraitInputType.Color ||\n trait.type === TraitInputType.DirectionalSize ||\n trait.type === TraitInputType.SelectButton ||\n trait.type === TraitInputType.Scrub ||\n trait.type === TraitInputType.Range ||\n trait.type === TraitInputType.Media\n ) {\n return trait.options;\n }\n if (trait.type === TraitInputType.FontFamily) {\n // FontFamily options are injected dynamically by the style panel via FontManagerService.\n // Return empty array here; the panel overrides this in resolveOptions().\n return [];\n }\n if (trait.type !== TraitInputType.Select) {\n return undefined;\n }\n const opts = (trait.options as any[]) ?? [];\n // Already formatted as {label, value}[]\n if (opts.length > 0 && typeof opts[0] === 'object' && 'label' in opts[0]) {\n return opts;\n }\n return opts.map((option: string) => ({ label: option, value: option }));\n}\n\n// ─── Style Groups ─────────────────────────────────────────────────────────────\n\nconst NON_STATIC_POSITIONS = ['relative', 'absolute', 'fixed', 'sticky'];\n\nexport class PositionGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Position, [\n new TraitConfig('position', 'Position', TraitInputType.Select,\n ['static', 'relative', 'absolute', 'fixed', 'sticky'], 'static'),\n new TraitConfig('top', 'T', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('right', 'R', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('bottom', 'B', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('left', 'L', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('zIndex', 'Z', TraitInputType.Scrub, { min: -99, max: 9999, step: 1, units: [''] }, '0', false,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n ]);\n }\n}\n\n// ─── Layout ───────────────────────────────────────────────────────────────────\n\nexport class LayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Layout, [\n new TraitConfig('display', 'Display', TraitInputType.Select,\n ['block', 'inline', 'inline-block', 'flex', 'grid'], 'block'),\n\n // ── Flex-only ─────────────────────────────────────────────────────\n new TraitConfig('flexDirection', 'Direction', TraitInputType.SelectButton, [\n { value: 'row', label: 'Horizontal', icon: 'ph-thin ph-arrow-right' },\n { value: 'row-reverse', label: 'Horizontal Reversed', icon: 'ph-thin ph-arrow-left' },\n { value: 'column', label: 'Vertical', icon: 'ph-thin ph-arrow-down' },\n { value: 'column-reverse', label: 'Vertical Reversed', icon: 'ph-thin ph-arrow-up' },\n ], 'row', false, { trait: 'display', values: 'flex' }),\n new TraitConfig('flexWrap', 'Flex Wrap', TraitInputType.SelectButton, [\n { value: 'nowrap', label: 'No Wrap', icon: 'ph-thin ph-minus' },\n { value: 'wrap', label: 'Wrap', icon: 'ph-thin ph-arrow-elbow-down-right' },\n { value: 'wrap-reverse', label: 'Wrap Reversed', icon: 'ph-thin ph-arrow-elbow-up-right' },\n ], 'nowrap', false, { trait: 'display', values: 'flex' }),\n\n // ── Shared flex + grid ────────────────────────────────────────────\n new TraitConfig('justifyContent', 'Justify', TraitInputType.SelectButton, [\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-right' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-horizontal' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'space-evenly', label: 'Space Evenly', icon: 'ph-thin ph-dots-six' },\n ], 'flex-start', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('alignItems', 'Align Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: ['flex', 'grid'] }),\n\n // ── Grid-only ─────────────────────────────────────────────────────\n new TraitConfig('gridTemplateColumns', 'Columns', TraitInputType.GridTemplate,\n undefined, '1fr', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('gridTemplateRows', 'Rows', TraitInputType.GridTemplate,\n undefined, 'auto', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('justifyItems', 'Justify Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('alignContent', 'Align Content', TraitInputType.SelectButton, [\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-vertical' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n\n // ── Direction (always visible) ────────────────────────────────────\n new TraitConfig('direction', 'Text Direction', TraitInputType.SelectButton, [\n { value: 'ltr', label: 'LTR' },\n { value: 'rtl', label: 'RTL' },\n ], 'ltr'),\n ]);\n }\n}\n\n// ─── Size (replaces Dimensions) ───────────────────────────────────────────────\n\nexport class SizeGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Size, [\n new TraitConfig('width', 'W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('height', 'H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minWidth', 'Min W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minHeight', 'Min H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxWidth', 'Max W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxHeight', 'Max H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Text,\n undefined, 'auto'),\n ]);\n }\n}\n\n/** @deprecated Use SizeGroupStyleConfig instead. */\nexport class DimensionsGroupStyleConfig extends SizeGroupStyleConfig {}\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport class BackgroundGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Background, [\n new TraitConfig('backgroundColor', 'Background', TraitInputType.Color,\n { allowGradient: true, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, 'transparent'),\n ]);\n }\n}\n\nexport class SpacingGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Spacing, [\n new TraitConfig('margin', 'Margin', TraitInputType.DirectionalSize, {\n allowNegative: true,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px'),\n new TraitConfig('padding', 'Padding', TraitInputType.DirectionalSize, {\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px')\n ]);\n }\n}\n\nexport class BorderGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Border, [\n new TraitConfig('borderWidth', 'Border Width', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 32, step: 1 }\n }, '0px'),\n new TraitConfig('borderStyle', 'Border Style', TraitInputType.SelectButton, [\n { value: 'solid', icon: 'ph-thin ph-line-segment' },\n { value: 'dashed', icon: 'ph-thin ph-dots-three' },\n { value: 'dotted', icon: 'ph-thin ph-dots-six' },\n ], 'solid'),\n new TraitConfig('borderColor', 'Border Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#CCCCCC'),\n new TraitConfig('borderRadius', 'Border Radius', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n linkByDefault: true,\n slider: { min: 0, max: 120, step: 1 },\n segments: [\n { key: 'top-left', icon: 'ph-arrow-bend-up-left', ariaLabel: 'top left radius' },\n { key: 'top-right', icon: 'ph-arrow-bend-up-right', ariaLabel: 'top right radius' },\n { key: 'bottom-right', icon: 'ph-arrow-bend-down-right', ariaLabel: 'bottom right radius' },\n { key: 'bottom-left', icon: 'ph-arrow-bend-down-left', ariaLabel: 'bottom left radius' }\n ]\n }, '0px')\n ]);\n }\n}\n\nexport class TypographyGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Typography, [\n new TraitConfig('fontFamily', 'Font Family', TraitInputType.FontFamily, [],\n 'Poppins, sans-serif'),\n new TraitConfig('fontSize', 'Font Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_ALL }, '16px'),\n new TraitConfig('fontWeight', 'Font Weight', TraitInputType.Select,\n ['100', '200', '300', '400', '500', '600', '700', '800', '900'], '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Select,\n ['1', '1.2', '1.4', '1.5', '1.75', '2', '2.5'], '1.5'),\n new TraitConfig('letterSpacing', 'Letter Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', 'Alignment', TraitInputType.SelectButton, [\n { value: 'left', icon: 'ph-thin ph-text-align-left' },\n { value: 'center', icon: 'ph-thin ph-text-align-center' },\n { value: 'right', icon: 'ph-thin ph-text-align-right' },\n { value: 'justify', icon: 'ph-thin ph-text-align-justify' },\n ], 'left'),\n new TraitConfig('fontStyle', 'Italic', TraitInputType.SelectButton,\n { items: [{ value: 'italic', icon: 'ph-thin ph-text-italic', label: 'Italic' }], allowEmpty: true, noneValue: 'normal' },\n 'normal', true),\n new TraitConfig('textDecoration', 'Underline', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n new TraitConfig('_sep_stroke', 'Stroke', TraitInputType.SectionLabel),\n new TraitConfig('WebkitTextStrokeWidth', 'Width', TraitInputType.Scrub,\n { min: 0, max: 10, step: 0.5, units: ['px'] }, '0px', true),\n new TraitConfig('WebkitTextStrokeColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl'] }, 'transparent', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\n // ── Visibility ────────────────────────────────────────\n new TraitConfig('opacity', 'Opacity', TraitInputType.Scrub,\n { min: 0, max: 1, step: 0.01, units: [''] }, '1'),\n new TraitConfig('mixBlendMode', 'Blend Mode', TraitInputType.Select, [\n 'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten',\n 'color-dodge', 'color-burn', 'hard-light', 'soft-light',\n 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity',\n ], 'normal'),\n new TraitConfig('cursor', 'Cursor', TraitInputType.Select, [\n 'auto', 'default', 'pointer', 'text', 'move', 'not-allowed',\n 'grab', 'grabbing', 'crosshair', 'zoom-in', 'zoom-out', 'none',\n ], 'auto'),\n\n // ── Shadow ────────────────────────────────────────────\n new TraitConfig('_sep_shadow', 'Shadow', TraitInputType.SectionLabel),\n new TraitConfig('boxShadow', 'Box Shadow', TraitInputType.Text, undefined, ''),\n new TraitConfig('textShadow', 'Text Shadow', TraitInputType.Text, undefined, ''),\n\n // ── Transform (virtual — composed to CSS transform: …) ─\n new TraitConfig('_sep_transform', 'Transform', TraitInputType.SectionLabel),\n new TraitConfig('translateX', 'TX', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('translateY', 'TY', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('scaleX', 'Scale X', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('scaleY', 'Scale Y', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('rotate', 'Rotate', TraitInputType.Scrub,\n { min: -360, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewX', 'Skew X', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewY', 'Skew Y', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n\n // ── Filter (virtual — composed to CSS filter: …) ──────\n new TraitConfig('_sep_filter', 'Filter', TraitInputType.SectionLabel),\n new TraitConfig('filterBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('filterHueRotate', 'Hue Rotate', TraitInputType.Scrub,\n { min: 0, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('filterBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterGrayscale', 'Grayscale', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterSepia', 'Sepia', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterInvert', 'Invert', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n\n // ── Backdrop filter (virtual — composed to CSS backdrop-filter: …)\n new TraitConfig('_sep_backdrop', 'Backdrop', TraitInputType.SectionLabel),\n new TraitConfig('backdropBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('backdropBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n\n // ── Transition (virtual — composed to CSS transition: all …) ──\n new TraitConfig('_sep_transition', 'Transition', TraitInputType.SectionLabel),\n new TraitConfig('transitionDuration', 'Duration', TraitInputType.Scrub,\n { min: 0, max: 3000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionDelay', 'Delay', TraitInputType.Scrub,\n { min: 0, max: 2000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionTimingFunction', 'Easing', TraitInputType.Select, [\n 'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out',\n ], 'ease'),\n ]);\n }\n}\n\nexport class ListGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.List, [\n new TraitConfig('listStyleType', 'Marker Style', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Disc', value: 'disc' },\n { label: 'Circle', value: 'circle' },\n { label: 'Square', value: 'square' },\n { label: 'Decimal', value: 'decimal' },\n { label: 'Lower Alpha', value: 'lower-alpha' },\n { label: 'Upper Alpha', value: 'upper-alpha' },\n { label: 'Lower Roman', value: 'lower-roman' },\n { label: 'Upper Roman', value: 'upper-roman' },\n ], 'disc'),\n new TraitConfig('listStylePosition', 'Marker Position', TraitInputType.SelectButton, [\n { value: 'outside', label: 'Outside' },\n { value: 'inside', label: 'Inside' },\n ], 'outside'),\n new TraitConfig('columnCount', 'Columns', TraitInputType.Scrub,\n { min: 1, max: 6, step: 1, units: [''] }, '1'),\n new TraitConfig('columnGap', 'Column Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px'),\n new TraitConfig('_sep_marker', 'Marker', TraitInputType.SectionLabel),\n new TraitConfig('markerColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, ''),\n new TraitConfig('markerFontSize', 'Size', TraitInputType.Scrub,\n { min: 4, max: 100, step: 1, units: UNITS_FIXED }, ''),\n ]);\n }\n}\n\n/**\n * Returns a fresh set of all 8 style-group configs in canonical display order.\n * Every call produces new TraitConfig instances so different component nodes\n * never share mutable state.\n */\nexport function buildFullStyleTraits(): GroupStyleConfig[] {\n return [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n}\n\nexport function flattenSchemaFields(\n properties: Record<string, any>,\n prefix = ''\n): { label: string; value: string }[] {\n const result: { label: string; value: string }[] = [];\n\n for (const [key, field] of Object.entries(properties)) {\n const fullPath = prefix ? `${prefix}.${key}` : key;\n\n if (field.type === 'object' && field.properties) {\n result.push(...flattenSchemaFields(field.properties, fullPath));\n } else {\n result.push({ label: fullPath, value: fullPath });\n }\n }\n\n return result;\n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ElementState, STRUCTURAL_STATES } from '../models/component.model';\n\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets two CSS classes:\n * .iox-node-{id} — applied to the inner element; handles layout/visual props\n * (display, flex, background, border, padding, etc.)\n * .iox-outer-{id} — applied to the host element by RenderDirective; handles\n * properties that participate in the PARENT flow (margin,\n * align-self, flex-grow/shrink/basis, order).\n *\n * This split is necessary because margin on an inner wrapper only adds internal\n * space — it does not push sibling elements. Applying margin to the host element\n * (which IS the flex/block child in the parent container) makes it work correctly.\n *\n * State styles (hover/active/focus) are stored under key `${nodeId}:${state}`\n * and compiled to `.iox-node-{id}:hover { … }` selectors.\n *\n * Design token variables are stored under the reserved key `__tokens__` and\n * compiled to a `:root { … }` block prepended to all other rules.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n readonly changes$ = new Subject<void>();\n\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\n\n /**\n * Properties that must live on the OUTER wrapper (.iox-outer-{id}) because they\n * affect how the element participates in its PARENT layout (flex/block flow).\n * Everything else goes to the INNER element (.iox-node-{id}).\n *\n * Exception — out-of-flow positioning (position:fixed/absolute):\n * When position is fixed or absolute, width is redirected to the inner element\n * (the positioned one) and a default width:100% is added if none is set, so the\n * element stays visible. top/right/bottom/left/zIndex are always inner because\n * they are co-ordinates of the positioned element, not the flow wrapper.\n * position itself goes to inner with `!important` to beat component-scoped CSS.\n */\n private static readonly OUTER_PROPS = new Set([\n 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order',\n 'width',\n ]);\n\n /** Properties that need !important on the inner element to beat Angular's scoped-CSS specificity boost. */\n private static readonly IMPORTANT_PROPS = new Set(['position']);\n\n init(): void {\n this.styleEl = document.createElement('style');\n this.styleEl.id = 'iox-runtime-styles';\n document.head.appendChild(this.styleEl);\n }\n\n /**\n * Write or update the base styles for a node, or a pseudo-class state override.\n *\n * @param nodeId The node's CSS id (used in `.iox-node-{nodeId}`)\n * @param styles Flat CSS property map (camelCase keys)\n * @param state Optional pseudo-class state ('hover' | 'active' | 'focus').\n * When provided, compiles to `.iox-node-{id}:{state} { … }`.\n * State rules are NOT partitioned into inner/outer.\n */\n upsert(nodeId: string, styles: Record<string, any>, state?: ElementState): void {\n if (!nodeId) return;\n\n if (state) {\n // Structural pseudo-classes (first-child, last-child, nth-child) target the\n // outer wrapper element so they participate correctly in grid/flex layout.\n const prefix = (STRUCTURAL_STATES as string[]).includes(state) ? 'iox-outer' : 'iox-node';\n const css = this.compile(`${prefix}-${nodeId}:${state}`, styles);\n const key = `${nodeId}:${state}`;\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // ::marker pseudo-element — emitted as a separate rule, not part of inner/outer split.\n const markerStyles = styles['__markerStyles'] as Record<string, any> | undefined;\n if (markerStyles && Object.keys(markerStyles).length) {\n const markerCss = this.compile(`iox-node-${nodeId}::marker`, markerStyles);\n if (markerCss) this.rules.set(`${nodeId}::marker`, markerCss);\n else this.rules.delete(`${nodeId}::marker`);\n } else {\n this.rules.delete(`${nodeId}::marker`);\n }\n\n const pos = String(styles['position'] ?? '');\n const isOutOfFlow = pos === 'fixed' || pos === 'absolute';\n\n const inner: Record<string, any> = {};\n const outer: Record<string, any> = {};\n for (const [k, v] of Object.entries(styles)) {\n if (k === '__markerStyles') continue;\n const wantsOuter = StyleRegistryService.OUTER_PROPS.has(k);\n // width goes to inner for fixed/absolute (the positioned element owns its own width)\n if (wantsOuter && !(isOutOfFlow && k === 'width')) {\n outer[k] = v;\n } else {\n inner[k] = v;\n }\n }\n // Ensure fixed/absolute elements stay visible when no explicit width is set\n if (isOutOfFlow && inner['width'] === undefined) {\n inner['width'] = '100%';\n }\n const innerCss = this.compile(`iox-node-${nodeId}`, inner);\n const outerCss = this.compile(`iox-outer-${nodeId}`, outer);\n const combined = [innerCss, outerCss].filter(Boolean).join('\\n');\n if (combined) {\n this.rules.set(nodeId, combined);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n /**\n * Write the org-level design token variables as a `:root { … }` block.\n * Token names should be CSS custom property names without the `--` prefix\n * (e.g., `{ 'iox-primary-color': '#cb9090' }`).\n * Pass an empty object to clear all tokens.\n */\n upsertTokens(tokens: Record<string, string>): void {\n const entries = Object.entries(tokens)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` --${k}: ${v};`);\n if (entries.length) {\n this.rules.set('__tokens__', `:root {\\n${entries.join('\\n')}\\n}`);\n } else {\n this.rules.delete('__tokens__');\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n // Remove base rule and all state rules for this node\n this.rules.delete(nodeId);\n for (const key of this.rules.keys()) {\n if (key.startsWith(`${nodeId}:`)) {\n this.rules.delete(key);\n }\n }\n this.flush();\n }\n\n destroy(): void {\n this.rules.clear();\n if (this.styleEl) {\n this.styleEl.remove();\n this.styleEl = null;\n }\n }\n\n private compile(className: string, styles: Record<string, any>): string {\n const entries = Object.entries(styles)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => {\n const val = this.rewriteVh(String(v));\n const bang = StyleRegistryService.IMPORTANT_PROPS.has(k) ? ' !important' : '';\n return ` ${this.toKebabCase(k)}: ${val}${bang};`;\n });\n if (!entries.length) return '';\n return `.${className} {\\n${entries.join('\\n')}\\n}`;\n }\n\n /**\n * Rewrite viewport-relative units so they resolve to the simulated canvas\n * dimensions rather than the real browser viewport.\n *\n * --preview-vh / --preview-vw are set by BuilderComponent via ResizeObserver\n * and viewport-state subscription. In production (no variables defined) the\n * fallbacks `1vh` / `1vw` restore the original browser behaviour.\n */\n private rewriteVh(value: string): string {\n return value\n .replace(/(-?\\d*\\.?\\d+)vh/g, 'calc($1 * var(--preview-vh, 1vh))')\n .replace(/(-?\\d*\\.?\\d+)vw/g, 'calc($1 * var(--preview-vw, 1vw))');\n }\n\n private toKebabCase(str: string): string {\n return str.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n }\n\n private _flushPending = false;\n\n private flush(): void {\n if (!this.styleEl || this._flushPending) return;\n this._flushPending = true;\n requestAnimationFrame(() => {\n this._flushPending = false;\n if (!this.styleEl) return;\n // __tokens__ always first so variables are available to all subsequent rules\n const tokenBlock = this.rules.get('__tokens__');\n const rest = Array.from(this.rules.entries())\n .filter(([k]) => k !== '__tokens__')\n .map(([, v]) => v);\n this.styleEl.textContent = [tokenBlock, ...rest].filter(Boolean).join('\\n');\n this.changes$.next();\n });\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from '../services/component-registry.service';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\nimport { composeVirtualTraits } from '../style-compose';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\n\n/**\n * RenderDirective — applied to <ng-container> to dynamically instantiate a\n * builder component with zero wrapper elements in the DOM.\n *\n * A directive's ViewContainerRef inserts the created component's host element as\n * a sibling of the ng-container comment node — directly inside the parent element\n * — so the resulting DOM has no extra <app-renderer> wrapper.\n *\n * Usage:\n * <ng-container [ioxRender]=\"node\"\n * (onClick)=\"handleClick($event)\"\n * (onMouseEnter)=\"handleMouseEnter($event)\"\n * (onMouseLeave)=\"handleMouseLeave()\">\n * </ng-container>\n */\n@Directive({\n selector: '[ioxRender]',\n standalone: false,\n})\nexport class RenderDirective implements OnInit, OnDestroy {\n @Input() ioxRender: ComponentNode | null = null;\n @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\n private registryService: ComponentRegistryService,\n private overlayService: OverlayService,\n private styleRegistry: StyleRegistryService,\n private interactionEngine: InteractionEngineService,\n private cdr: ChangeDetectorRef,\n private panelEventService: PanelEventService,\n ) {}\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\n if (this.ioxRender) {\n this.interactionEngine.detach(this.ioxRender);\n this.overlayService.unregisterNode(this.ioxRender);\n // Only remove the CSS rule if this node OWNS it (i.e. it is not a clone).\n // Clones set styleId to point at the template node's id — removing would\n // destroy the shared rule and break all other rows.\n const isClone = !!this.ioxRender.styleId;\n if (!isClone && this.ioxRender.id) {\n this.styleRegistry.remove(this.ioxRender.id);\n }\n }\n }\n\n /**\n * Walk up from `target` to find a registered parent component element.\n * Returns { element, node } if found, or null if the target is outside\n * all known builder components (e.g. the canvas background).\n */\n private findParentNodeElement(target: HTMLElement): { element: HTMLElement; node: ComponentNode } | null {\n let el: HTMLElement | null = target;\n while (el) {\n const match = this.overlayService.findNodeByElement(el);\n if (match) {\n return { element: el, node: match.node };\n }\n el = el.parentElement;\n }\n return null;\n }\n\n private render(node: ComponentNode | null): void {\n if (!node) return;\n\n const componentClass = this.registryService.getComponent(node.type);\n if (!componentClass) return;\n\n // vcr.createComponent inserts the new component's host element after the ng-container\n // comment anchor — directly inside the parent element. No wrapper div is created.\n const componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n\n // Apply regular trait defaults (title, image, description, etc.)\n // Use setInput() (Angular 14+) — it marks the view dirty and\n // integrates with Angular's CD tracking, unlike direct assignment.\n Object.values(node.traits || {}).forEach((trait: any) => {\n componentRef.setInput(trait.name, trait.default);\n });\n\n // Build initial style map from styleTraits defaults.\n const initialStyle: Record<string, any> = {};\n if (node.styleTraits?.length) {\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.default !== undefined) {\n initialStyle[trait.name] = trait.default;\n }\n }\n }\n }\n\n // Use styleId when present (clone nodes share the template node's CSS rule).\n const cssId = node.styleId ?? node.id;\n\n // Register CSS rules in the central stylesheet (inner + outer split).\n if (cssId) {\n const composedBase = composeVirtualTraits(initialStyle);\n this.styleRegistry.upsert(cssId, composedBase);\n // Restore per-state overrides saved from a previous session.\n if (node.stateStyles) {\n for (const state of Object.keys(node.stateStyles) as Array<'hover' | 'active' | 'focus'>) {\n const stateMap = node.stateStyles[state];\n if (stateMap && Object.keys(stateMap).length) {\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state);\n }\n }\n }\n }\n\n // Set nodeId — declared as @Input() on every builder component.\n if (cssId) {\n componentRef.setInput('nodeId', cssId);\n }\n\n // Pass the node reference. 'node' is NOT declared as @Input on leaf\n // components (Card, Text, etc.) — always use direct assignment to avoid\n // Angular NG0303 warnings that setInput() would trigger.\n (componentRef.instance as any)['node'] = node;\n\n // Layout components (Section/Container) read this.style internally for\n // CDK drop list orientation. 'style' is not declared as @Input so use\n // direct assignment; children and dropListId ARE @Input on all layouts.\n // Guard with Array.isArray so leaf nodes whose serialized data happens\n // to have a stale/empty children key don't trigger NG0303.\n const instance = componentRef.instance as any;\n if (Array.isArray(node.children) && 'dropListId' in instance) {\n instance['style'] = { ...initialStyle };\n componentRef.setInput('children', node.children);\n componentRef.setInput('dropListId', `section-${++dropListCounter}`);\n }\n\n // Forward child events from layout components (Section → builder)\n const childClick: EventEmitter<any> = instance['childClick'];\n const childMouseEnter: EventEmitter<any> = instance['childMouseEnter'];\n const childMouseLeave: EventEmitter<any> = instance['childMouseLeave'];\n if (childClick) this.childSubs.push(childClick.subscribe((e: any) => this.onClick.emit(e)));\n if (childMouseEnter) this.childSubs.push(childMouseEnter.subscribe((e: any) => this.onMouseEnter.emit(e)));\n if (childMouseLeave) this.childSubs.push(childMouseLeave.subscribe(() => this.onMouseLeave.emit()));\n\n componentRef.changeDetectorRef.detectChanges();\n\n // Attach overlay-driven DOM event listeners directly on the component host element.\n // For layout components the host element is <app-section>; for leaf components\n // it is e.g. <app-card>. Either way this is the correct inspectable element.\n const nativeEl: HTMLElement | null = componentRef.location?.nativeElement ?? null;\n\n // Custom element host defaults to display:inline. Set it to block so it\n // participates properly in layout and CDK can capture its bounding rect.\n if (nativeEl) {\n nativeEl.style.display = 'block';\n }\n if (nativeEl) {\n // Register node → element mapping for parent lookups\n this.overlayService.registerNode(node, nativeEl, componentRef);\n // Notify BindingsComponent so it re-applies bindings on the new\n // ComponentRef — needed after cross-container drag where Angular\n // creates a fresh instance that hasn't had bindings pushed to it yet.\n this.panelEventService.emit(PanelEventTypes.NODE_RENDERED, { node });\n\n nativeEl.addEventListener('mouseenter', (event: MouseEvent) => {\n if ((event as any)._fromClick) return;\n this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\n // When leaving a child component, check if the mouse moved to a\n // parent component (e.g. card → section). If so, emit mouseenter\n // for that parent instead of clearing hover entirely.\n const related = event.relatedTarget as HTMLElement | null;\n if (related) {\n const parentEntry = this.findParentNodeElement(related);\n if (parentEntry) {\n this.onMouseEnter.emit(parentEntry);\n return;\n }\n }\n this.onMouseLeave.emit();\n });\n nativeEl.addEventListener('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n nativeEl.addEventListener('contextmenu', (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n // Select the element first, then open the more menu at cursor position.\n this.onClick.emit({ element: nativeEl, node, componentRef });\n this.overlayService.triggerContextMenu(event.clientX, event.clientY);\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM.\n this.interactionEngine.attach(node);\n }\n\n /** Try setInput(); fall back to direct assignment for non-@Input properties. */\n private safeSetInput(ref: any, name: string, value: any): void {\n try {\n ref.setInput(name, value);\n } catch {\n (ref.instance as any)[name] = value;\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDraggable]',\n standalone: false,\n})\nexport class IoxDraggableDirective implements OnInit, OnDestroy {\n /** The node (for canvas items) or component type string (for sidebar items). */\n @Input() ioxDragData: ComponentNode | string = '';\n /** Drop-zone id the item lives in. Null for sidebar items. */\n @Input() ioxDragSourceId: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDraggable(this.el.nativeElement, () => {\n const data = this.ioxDragData;\n const type: 'internal' | 'external' = typeof data === 'string' ? 'external' : 'internal';\n const sourceIndex = type === 'internal' && this.ioxDragSourceId\n ? (this.dragEngine.getData(this.ioxDragSourceId)?.indexOf(data as ComponentNode) ?? -1)\n : -1;\n return { type, data, sourceId: this.ioxDragSourceId, sourceIndex };\n });\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDraggable(this.el.nativeElement);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { StylePreset } from '../models/component.model';\n\n/**\n * PresetRegistryService — in-memory store for org-level style presets.\n *\n * Loaded once per page by PageUiComponent (alongside the page layout) and\n * injected into the overlay (for badge labels) and style panel (for apply /\n * create / edit / detach flows).\n *\n * Scoped to PageUiComponent.providers[] — one registry per builder instance.\n */\n@Injectable()\nexport class PresetRegistryService {\n private presets = new Map<string, StylePreset>();\n\n setPresets(presets: StylePreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): StylePreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): StylePreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: StylePreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n\n /**\n * Resolve the effective style map for a node that references a preset.\n * Merges preset base styles with the node's local overrides so that\n * element-level values always win.\n *\n * @param presetId ID of the applied preset.\n * @param overrides The node's `styleOverrides` record (may be empty).\n */\n resolveStyles(presetId: string, overrides: Record<string, any>): Record<string, any> {\n const preset = this.presets.get(presetId);\n if (!preset) return { ...overrides };\n return { ...preset.styleProps, ...overrides };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { IoxSymbol } from '../models/component.model';\n\n/**\n * SymbolRegistryService — in-memory store for org-level symbols.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class SymbolRegistryService {\n private symbols = new Map<string, IoxSymbol>();\n\n setSymbols(symbols: IoxSymbol[]): void {\n this.symbols.clear();\n for (const s of symbols) {\n this.symbols.set(s.id, s);\n }\n }\n\n getSymbol(id: string): IoxSymbol | undefined {\n return this.symbols.get(id);\n }\n\n getAll(): IoxSymbol[] {\n return Array.from(this.symbols.values());\n }\n\n upsert(symbol: IoxSymbol): void {\n this.symbols.set(symbol.id, symbol);\n }\n\n remove(id: string): void {\n this.symbols.delete(id);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { OverlayEntry, OverlayService, ToolbarAction } from './overlay.service';\nimport { IoxInteraction } from '../models/component.model';\nimport { ViewportService } from '../services/viewport.service';\nimport { PresetRegistryService } from '../services/preset-registry.service';\nimport { SymbolRegistryService } from '../services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from '../services/interaction-preset-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { BuilderClipboardService } from '../services/builder-clipboard.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n@Component({\n selector: 'app-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlayComponent implements OnInit, OnDestroy {\n @Output() toolbarAction = new EventEmitter<{ action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after' }>();\n\n public hoverEntry: OverlayEntry | null = null;\n public selectEntry: OverlayEntry | null = null;\n\n // Hover: Chrome DevTools-style ring layers (clip-path punches out content area)\n public hiOutlineStyle: Record<string, string> = {};\n public hiMarginStyle: Record<string, string> = {};\n public hiPaddingStyle: Record<string, string> = {};\n\n // Select: simple IOX pink outline\n public selectOutlineStyle: Record<string, string> = {};\n\n // More dropdown — opened from the ⋯ button or from a right-click.\n // Position is set to fixed viewport coords so it appears at the cursor.\n public moreMenuVisible = false;\n public moreMenuStyle: Record<string, string> = {};\n\n // Badge context menu — opened by right-clicking a preset badge.\n public badgeMenuVisible = false;\n public badgeMenuType: 'style' | 'interaction' | null = null;\n public badgeMenuPos = { x: 0, y: 0 };\n // The specific IoxInteraction being right-clicked (interaction badges only).\n public badgeInteraction: IoxInteraction | null = null;\n\n // Tracks which badge was last clicked — used by Cmd+C in page-ui.\n public activeBadgeType: 'style' | 'interaction' | null = null;\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private boundUpdate = () => this.updateAll();\n private _scrollRaf = 0;\n private boundScrollUpdate = () => {\n cancelAnimationFrame(this._scrollRaf);\n this._scrollRaf = requestAnimationFrame(() => this.updateAll());\n };\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\n private presetRegistry: PresetRegistryService,\n private symbolRegistry: SymbolRegistryService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private interactionEngine: InteractionEngineService,\n private clipboard: BuilderClipboardService,\n private styleRegistry: StyleRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.overlayService.hover$.subscribe(entry => {\n this.hoverEntry = entry;\n this.updateHover();\n this.cdr.markForCheck();\n }),\n this.overlayService.select$.subscribe(entry => {\n this.selectEntry = entry;\n if (!entry) this.activeBadgeType = null;\n this.observeSelectElement();\n this.updateSelect();\n this.cdr.markForCheck();\n })\n );\n\n window.addEventListener('resize', this.boundUpdate, { passive: true });\n\n // Re-calculate overlay positions whenever zoom / device changes.\n this.subs.push(\n this.viewportService.state$.subscribe(() => {\n // Delay one frame so the DOM has applied the new transform/width.\n requestAnimationFrame(() => this.updateAll());\n })\n );\n\n // Re-calculate when CSS rules change (margin/width applied via stylesheet).\n this.subs.push(\n this.styleRegistry.changes$.subscribe(() => requestAnimationFrame(() => this.updateAll()))\n );\n\n // Watch the canvas container for size changes (e.g. right panel open/close\n // transition changes canvas width, shifting element positions).\n const container = this.overlayService.getContainer();\n if (container) {\n if (typeof ResizeObserver !== 'undefined') {\n this.containerResizeObserver = new ResizeObserver(() => this.updateAll());\n this.containerResizeObserver.observe(container);\n }\n }\n\n // iox-page-component's Lenis dispatches a synthetic 'scroll' event on\n // its wrapper element after each raf tick — listen to that to reposition\n // overlay boxes as the canvas scrolls.\n this.subs.push(\n this.overlayService.scrollContainer$.subscribe(el => {\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundScrollUpdate, { passive: true });\n })\n );\n\n // Open the more menu when a canvas element is right-clicked.\n this.subs.push(\n this.overlayService.contextMenu$.subscribe(({ x, y }) => {\n this.moreMenuStyle = { top: `${y}px`, left: `${x}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(s => s.unsubscribe());\n this.resizeObserver?.disconnect();\n this.containerResizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n cancelAnimationFrame(this._scrollRaf);\n window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = null;\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onSelectParent(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SelectParent, entry: this.selectEntry });\n }\n\n onDuplicate(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Duplicate, entry: this.selectEntry });\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Delete, entry: this.selectEntry });\n }\n\n onPlay(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Play, entry: this.selectEntry });\n }\n\n onSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\n }\n\n onToggleMore(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.moreMenuVisible) {\n this.moreMenuVisible = false;\n } else {\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n }\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onMakeGlobal(event: MouseEvent, position: 'before' | 'after'): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.MakeGlobal, entry: this.selectEntry, position });\n }\n\n onRemoveGlobal(event: MouseEvent): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.RemoveGlobal, entry: this.selectEntry });\n }\n\n get hasInteractions(): boolean {\n return !!this.selectEntry?.node?.interactions?.length;\n }\n\n get selectedNodeIsGlobal(): boolean {\n return !!this.selectEntry?.node?.isGlobal;\n }\n\n get selectedPresetName(): string | null {\n const id = this.selectEntry?.node?.stylePresetId;\n if (!id) return null;\n return this.presetRegistry.getPreset(id)?.name ?? null;\n }\n\n get isLinkedSymbol(): boolean {\n return !!this.selectEntry?.node?.symbolId;\n }\n\n get linkedSymbolName(): string | null {\n const id = this.selectEntry?.node?.symbolId;\n if (!id) return null;\n return this.symbolRegistry.getSymbol(id)?.name ?? null;\n }\n\n get interactions(): IoxInteraction[] {\n return this.selectEntry?.node?.interactions ?? [];\n }\n\n triggerLabel(trigger: string): string {\n const labels: Record<string, string> = {\n pageLoad: 'Load', viewportEnter: 'Scroll', click: 'Click',\n hover: 'Hover', scrollProgress: 'Progress',\n };\n return labels[trigger] ?? trigger;\n }\n\n triggerIcon(trigger: string): string {\n const icons: Record<string, string> = {\n pageLoad: 'ph-thin ph-rocket-launch', viewportEnter: 'ph-thin ph-eye',\n click: 'ph-thin ph-cursor-click', hover: 'ph-thin ph-hand-pointing',\n scrollProgress: 'ph-thin ph-arrows-down-up',\n };\n return icons[trigger] ?? 'ph-thin ph-lightning';\n }\n\n actionLabel(ix: IoxInteraction): string {\n const first = ix.actions[0];\n if (!first) return '';\n const labels: Record<string, string> = {\n fadeIn: 'Fade In', fadeOut: 'Fade Out',\n moveUp: 'Move Up', moveDown: 'Move Down',\n moveLeft: 'Move Left', moveRight: 'Move Right',\n scaleIn: 'Scale In', scaleOut: 'Scale Out',\n rotate: 'Rotate', show: 'Show', hide: 'Hide',\n toggleVisibility: 'Toggle',\n };\n const label = labels[first.type] ?? first.type;\n return ix.actions.length > 1 ? `${label} +${ix.actions.length - 1}` : label;\n }\n\n get hasPresetInClipboard(): boolean { return !!this.clipboard.getPresetId(); }\n get hasInteractionPresetInClipboard(): boolean { return !!this.clipboard.getInteractionPresetId(); }\n\n onEditPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'style';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n }\n\n onEditInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'interaction';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n\n // ── Badge context menu ───────────────────────────────────\n\n onBadgeContextMenu(event: MouseEvent, type: 'style' | 'interaction', ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.badgeMenuType = type;\n this.badgeInteraction = ix ?? null;\n this.badgeMenuPos = { x: event.clientX, y: event.clientY };\n this.badgeMenuVisible = true;\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onBadgeCopy(): void {\n if (this.badgeMenuType === 'style') {\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n }\n this.closeBadgeMenu();\n }\n\n onBadgeEdit(): void {\n const type = this.badgeMenuType;\n this.closeBadgeMenu();\n if (type === 'style' && this.selectEntry) {\n this.activeBadgeType = 'style';\n this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n } else if (type === 'interaction' && this.selectEntry) {\n this.activeBadgeType = 'interaction';\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n }\n\n onBadgeRemoveInteraction(): void {\n const node = this.selectEntry?.node;\n if (!node || !this.badgeInteraction) return;\n node.interactions = (node.interactions ?? []).filter(i => i.id !== this.badgeInteraction!.id);\n if (!node.interactions.length) node.interactionPresetId = undefined;\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, node);\n this.closeBadgeMenu();\n }\n\n closeBadgeMenu(): void {\n this.badgeMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n get hasCopiedNode(): boolean { return !!this.clipboard.getNode(); }\n\n onCopyNode(event: MouseEvent): void {\n event.stopPropagation();\n const node = this.selectEntry?.node;\n if (node) this.clipboard.copyNode(node);\n this.closeMoreMenu();\n }\n\n onPasteNode(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Paste, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n this.closeMoreMenu();\n }\n\n onPastePreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PastePreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.interactionPresetId;\n if (id) this.clipboard.copyInteractionPreset(id);\n this.closeMoreMenu();\n }\n\n onPasteInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PasteInteractionPreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onDetachSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.DetachSymbol, entry: this.selectEntry });\n }\n\n private observeSelectElement(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n // Scroll listener is on the container permanently (attached in ngOnInit).\n // No need to re-attach it here.\n\n if (!this.selectEntry?.element) return;\n\n // Observe the inner styled element — that's where [ngStyle] applies CSS.\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n\n // ResizeObserver — catches size changes.\n // Skip the first callback: it fires synchronously on observe() in the same\n // microtask as the select$ subscription which already calls updateAll().\n // Painting twice in one frame causes a visible flicker.\n if (typeof ResizeObserver !== 'undefined') {\n let skipFirst = true;\n this.resizeObserver = new ResizeObserver(() => {\n if (skipFirst) { skipFirst = false; return; }\n this.updateAll();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(() => this.updateAll());\n this.mutationObserver.observe(styledEl, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private updateAll(): void {\n this.updateHover();\n this.updateSelect();\n this.cdr.markForCheck();\n }\n\n private updateHover(): void {\n if (!this.hoverEntry) {\n this.hiOutlineStyle = {};\n this.hiMarginStyle = {};\n this.hiPaddingStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.hoverEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // Recalculate fresh — stored boxModel can be stale if CSS rules changed.\n const { margin, border, padding } = this.overlayService.buildBoxModel(this.hoverEntry.element);\n\n // All overlay boxes use position:fixed with raw viewport coords from\n // getBoundingClientRect() — no container offset subtraction.\n // This matches the approach used by the drop-target overlay and the drag\n // clone, both of which position correctly at any zoom level.\n // Using cRect subtraction + position:absolute inside .preview (which has\n // contain:layout paint) caused sub-pixel accumulation errors at zoom != 100%.\n const scale = this.viewportService.getScale();\n\n // Scale the spacing values: getComputedStyle returns unscaled CSS px,\n // getBoundingClientRect returns scaled viewport px. Both must match.\n const m = {\n top: margin.top * scale,\n right: margin.right * scale,\n bottom: margin.bottom * scale,\n left: margin.left * scale,\n };\n const mW = rect.width + m.left + m.right;\n const mH = rect.height + m.top + m.bottom;\n\n this.hiOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n\n // Orange ring: margin-box with border-box punched out\n this.hiMarginStyle = {\n ...this.createBoxStyle(rect.top - m.top, rect.left - m.left, mW, mH),\n 'clip-path': this.createRingClipPath(mW, mH, m.top, m.right, m.bottom, m.left),\n };\n\n // Green ring: border-box with content-box punched out\n const bpTop = (border.top + padding.top) * scale;\n const bpRight = (border.right + padding.right) * scale;\n const bpBottom = (border.bottom + padding.bottom) * scale;\n const bpLeft = (border.left + padding.left) * scale;\n this.hiPaddingStyle = {\n ...this.createBoxStyle(rect.top, rect.left, rect.width, rect.height),\n 'clip-path': this.createRingClipPath(rect.width, rect.height, bpTop, bpRight, bpBottom, bpLeft),\n };\n }\n\n private updateSelect(): void {\n if (!this.selectEntry) {\n this.selectOutlineStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // position:fixed with raw viewport coords — same reasoning as updateHover.\n this.selectOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n }\n\n /** Build position/size styles for a position:fixed overlay box. */\n private createBoxStyle(top: number, left: number, width: number, height: number): Record<string, string> {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${Math.max(width, 0)}px`,\n height: `${Math.max(height, 0)}px`,\n };\n }\n\n private createRingClipPath(w: number, h: number, inTop: number, inRight: number, inBottom: number, inLeft: number): string {\n const x1 = Math.max(inLeft, 0);\n const y1 = Math.max(inTop, 0);\n const x2 = Math.max(w - inRight, x1);\n const y2 = Math.max(h - inBottom, y1);\n // Each sub-rect must be explicitly closed so the bridge between them\n // is a zero-area line — prevents diagonal edge triangle artifacts.\n return `polygon(evenodd, 0px 0px, ${w}px 0px, ${w}px ${h}px, 0px ${h}px, 0px 0px, ${x1}px ${y1}px, ${x2}px ${y1}px, ${x2}px ${y2}px, ${x1}px ${y2}px, ${x1}px ${y1}px)`;\n }\n\n}\n","<div class=\"overlay-root\">\n\n <!-- HOVER — Chrome DevTools-style rings (content area stays transparent) -->\n <ng-container *ngIf=\"hoverEntry\">\n <div class=\"hi-outline\" [ngStyle]=\"hiOutlineStyle\"></div>\n <div class=\"hi-margin\" [ngStyle]=\"hiMarginStyle\"></div>\n <div class=\"hi-padding\" [ngStyle]=\"hiPaddingStyle\"></div>\n </ng-container>\n\n <!-- SELECT — IOX pink outline + toolbar -->\n <div class=\"select-outline\" *ngIf=\"selectEntry\" [ngStyle]=\"selectOutlineStyle\">\n\n <!-- Preset badges container — below the outline, start-aligned -->\n <div class=\"preset-badge\" *ngIf=\"selectedPresetName || interactions.length\">\n <div *ngIf=\"selectedPresetName\"\n class=\"preset-badge__item\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'style'\"\n title=\"Style preset: {{ selectedPresetName }} — click to edit, right-click to copy\"\n (mousedown)=\"onEditPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'style')\">\n <i class=\"ph-fill ph-paint-bucket\"></i>\n <span>{{ selectedPresetName }}</span>\n </div>\n <div *ngFor=\"let ix of interactions\"\n class=\"preset-badge__item preset-badge__item--interaction\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'interaction'\"\n [title]=\"triggerLabel(ix.trigger) + ': ' + actionLabel(ix) + ' — click to edit, right-click to remove'\"\n (mousedown)=\"onEditInteractionPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'interaction', ix)\">\n <i [class]=\"triggerIcon(ix.trigger)\"></i>\n <span>{{ triggerLabel(ix.trigger) }}: {{ actionLabel(ix) }}</span>\n </div>\n </div>\n\n <div class=\"select-toolbar\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n\n <!-- Component name -->\n <span class=\"toolbar-name\">{{ selectEntry?.componentName }}</span>\n <span class=\"toolbar-sep\"></span>\n\n <!-- Quick actions -->\n <button class=\"toolbar-btn\" title=\"Duplicate\" (mousedown)=\"onDuplicate($event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button *ngIf=\"hasInteractions\" class=\"toolbar-btn toolbar-btn--play\" title=\"Play animations\" (mousedown)=\"onPlay($event)\">\n <i class=\"ph-thin ph-play\"></i>\n </button>\n <button *ngIf=\"isLinkedSymbol\" class=\"toolbar-btn toolbar-btn--symbol\"\n [title]=\"'Detach from symbol' + (linkedSymbolName ? ': ' + linkedSymbolName : '')\"\n (mousedown)=\"onDetachSymbol($event)\">\n <i class=\"ph-thin ph-link-break\"></i>\n </button>\n <button class=\"toolbar-btn toolbar-btn--danger\" title=\"Delete\" (mousedown)=\"onDelete($event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n <span class=\"toolbar-sep\"></span>\n <button class=\"toolbar-btn\" title=\"Select parent\" (mousedown)=\"onSelectParent($event)\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n </button>\n\n <!-- More menu trigger — opens a fixed-position dropdown at the cursor -->\n <button class=\"toolbar-btn toolbar-btn--more\" title=\"More actions\" (mousedown)=\"onToggleMore($event)\">\n <i class=\"ph-thin ph-dots-three\"></i>\n </button>\n </div>\n </div>\n\n <!-- Shared more/context menu — fixed-position, opened by ⋯ button or right-click -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" [ngStyle]=\"moreMenuStyle\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <button class=\"more-item\" (mousedown)=\"onSelectParent($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n Select parent\n </button>\n <button class=\"more-item\" (mousedown)=\"onDuplicate($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-copy\"></i>\n Duplicate\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onDelete($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-trash\"></i>\n Delete\n </button>\n <div class=\"more-divider\"></div>\n <button class=\"more-item\" (mousedown)=\"onCopyNode($event)\">\n <i class=\"ph-thin ph-scissors\"></i>\n Copy element\n </button>\n <button *ngIf=\"hasCopiedNode\" class=\"more-item\" (mousedown)=\"onPasteNode($event)\">\n <i class=\"ph-thin ph-clipboard\"></i>\n Paste element\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"selectEntry?.node?.stylePresetId\" class=\"more-item\" (mousedown)=\"onCopyPreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Copy style preset\n </button>\n <button *ngIf=\"hasPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPastePreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Paste style preset\n </button>\n <button *ngIf=\"selectEntry?.node?.interactionPresetId\" class=\"more-item\" (mousedown)=\"onCopyInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Copy interaction preset\n </button>\n <button *ngIf=\"hasInteractionPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPasteInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Paste interaction preset\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"isLinkedSymbol\" class=\"more-item\" (mousedown)=\"onDetachSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link-break\"></i>\n Detach from symbol<ng-container *ngIf=\"linkedSymbolName\"> ({{ linkedSymbolName }})</ng-container>\n </button>\n <button class=\"more-item\" (mousedown)=\"onSaveAsBlock($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\n <button *ngIf=\"hasInteractions\" class=\"more-item more-item--play\" (mousedown)=\"onPlay($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-play\"></i>\n Play animations\n </button>\n <div class=\"more-divider\"></div>\n <ng-container *ngIf=\"!selectedNodeIsGlobal; else removeGlobalItem\">\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'before')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (Before Content)\n </button>\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'after')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (After Content)\n </button>\n </ng-container>\n <ng-template #removeGlobalItem>\n <button class=\"more-item\" (mousedown)=\"onRemoveGlobal($event)\">\n <i class=\"ph-thin ph-globe\"></i>\n Remove from Global\n </button>\n </ng-template>\n </div>\n\n <!-- Backdrop to close the more menu -->\n <div *ngIf=\"moreMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu()\">\n </div>\n\n <!-- Badge context menu — options differ by badge type -->\n <div *ngIf=\"badgeMenuVisible\" class=\"badge-context-menu\"\n [ngStyle]=\"{ top: badgeMenuPos.y + 'px', left: badgeMenuPos.x + 'px' }\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <ng-container *ngIf=\"badgeMenuType === 'style'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeCopy()\">\n <i class=\"ph-thin ph-copy\"></i>\n Copy preset\n </button>\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit preset\n </button>\n </ng-container>\n <ng-container *ngIf=\"badgeMenuType === 'interaction'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit in panel\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onBadgeRemoveInteraction()\">\n <i class=\"ph-thin ph-trash\"></i>\n Remove interaction\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"badgeMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeBadgeMenu()\">\n </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Popover } from 'primeng/popover';\n\nimport {\n BuilderMode,\n DeviceMode,\n DeviceOption,\n DEVICE_OPTIONS,\n ZOOM_OPTIONS,\n ScreenWidthOption,\n SCREEN_WIDTH_OPTIONS,\n} from '../panels/panel.model';\n\n@Component({\n selector: 'app-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n standalone: false,\n})\nexport class ToolbarComponent {\n @Input() activeMode: BuilderMode = BuilderMode.Select;\n @Input() activeDevice: DeviceMode = DeviceMode.Desktop;\n @Input() activeZoom: number = 100;\n @Input() activeScreenWidth: number = 1440;\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n\n @Output() modeChange = new EventEmitter<BuilderMode>();\n @Output() deviceChange = new EventEmitter<DeviceMode>();\n @Output() zoomChange = new EventEmitter<number | 'fit'>();\n @Output() screenWidthChange = new EventEmitter<number>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n\n get isPublished(): boolean {\n return this.pageStatus === 'published';\n }\n\n @ViewChild('modePopover') modePopover!: Popover;\n @ViewChild('devicePopover') devicePopover!: Popover;\n @ViewChild('zoomPopover') zoomPopover!: Popover;\n @ViewChild('widthPopover') widthPopover!: Popover;\n\n public modes = BuilderMode;\n public deviceModes = DeviceMode;\n public deviceOptions = DEVICE_OPTIONS;\n public zoomOptions = ZOOM_OPTIONS;\n public screenWidthOptions: ScreenWidthOption[] = SCREEN_WIDTH_OPTIONS;\n\n get activeModeIcon(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'ph-thin ph-cursor';\n case BuilderMode.Style: return 'ph-thin ph-paint-brush-broad';\n case BuilderMode.Pan: return 'ph-thin ph-hand';\n default: return 'ph-thin ph-cursor';\n }\n }\n\n get activeModeLabel(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'Select';\n case BuilderMode.Style: return 'Style';\n case BuilderMode.Pan: return 'Pan';\n default: return 'Select';\n }\n }\n\n get activeDeviceOption(): DeviceOption {\n return this.deviceOptions.find(d => d.mode === this.activeDevice) || this.deviceOptions[0];\n }\n\n get zoomLabel(): string {\n return `${this.activeZoom}%`;\n }\n\n get sliderZoom(): number {\n return Math.min(100, Math.max(20, this.activeZoom));\n }\n\n // ── Mode ────────────────────────────────────────────────\n toggleModePopover(event: Event): void {\n this.modePopover.toggle(event);\n }\n\n selectMode(mode: BuilderMode): void {\n if (this.activeMode !== mode) {\n this.modeChange.emit(mode);\n }\n this.modePopover.hide();\n }\n\n // ── Device ──────────────────────────────────────────────\n toggleDevicePopover(event: Event): void {\n this.devicePopover.toggle(event);\n }\n\n selectDevice(mode: DeviceMode): void {\n if (this.activeDevice !== mode) {\n this.deviceChange.emit(mode);\n }\n this.devicePopover.hide();\n }\n\n // ── Zoom slider ──────────────────────────────────────────\n onSliderChange(event: Event): void {\n const value = +(event.target as HTMLInputElement).value;\n this.zoomChange.emit(value);\n }\n\n // ── Screen width ─────────────────────────────────────────\n toggleWidthPopover(event: Event): void {\n this.widthPopover.toggle(event);\n }\n\n selectScreenWidth(width: number): void {\n if (this.activeScreenWidth !== width) {\n this.screenWidthChange.emit(width);\n }\n this.widthPopover.hide();\n }\n\n // ── Zoom ────────────────────────────────────────────────\n toggleZoomPopover(event: Event): void {\n this.zoomPopover.toggle(event);\n }\n\n selectZoom(value: number | 'fit'): void {\n this.zoomChange.emit(value);\n this.zoomPopover.hide();\n }\n}\n","<div class=\"builder-toolbar\">\n <!-- ── Mode switcher (stateful) ─────────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleModePopover($event)\"\n [title]=\"activeModeLabel\">\n <i [class]=\"activeModeIcon\"></i>\n </button>\n\n <p-popover #modePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Select\"\n (click)=\"selectMode(modes.Select)\">\n <i class=\"ph-thin ph-cursor\"></i>\n <span>Select</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Pan\"\n (click)=\"selectMode(modes.Pan)\">\n <i class=\"ph-thin ph-hand\"></i>\n <span>Pan</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Style\"\n (click)=\"selectMode(modes.Style)\">\n <i class=\"ph-thin ph-paint-brush-broad\"></i>\n <span>Style</span>\n </button>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Undo / Redo (action) ─────────────────────────── -->\n <button class=\"tool-btn\" title=\"Undo\" [disabled]=\"!canUndo\" (click)=\"undo.emit()\">\n <i class=\"ph-thin ph-arrow-counter-clockwise\"></i>\n </button>\n <button class=\"tool-btn\" title=\"Redo\" [disabled]=\"!canRedo\" (click)=\"redo.emit()\">\n <i class=\"ph-thin ph-arrow-clockwise\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Device switcher (stateful) ───────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleDevicePopover($event)\"\n [title]=\"activeDeviceOption.label\">\n <i [class]=\"activeDeviceOption.icon\"></i>\n </button>\n\n <p-popover #devicePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let d of deviceOptions\"\n [class.is-active]=\"activeDevice === d.mode\"\n (click)=\"selectDevice(d.mode)\">\n <i [class]=\"d.icon\"></i>\n <span>{{ d.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Screen width — Desktop only ─────────────────── -->\n @if (activeDevice === deviceModes.Desktop) {\n <button class=\"tool-btn stateful width-btn\"\n (click)=\"toggleWidthPopover($event)\"\n title=\"Screen width\">\n <span class=\"width-label\">{{ activeScreenWidth }}</span>\n </button>\n }\n\n <p-popover #widthPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let w of screenWidthOptions\"\n [class.is-active]=\"activeScreenWidth === w.width\"\n (click)=\"selectScreenWidth(w.width)\">\n <span>{{ w.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Zoom (stateful) ──────────────────────────────── -->\n <button class=\"tool-btn stateful zoom-btn\"\n (click)=\"toggleZoomPopover($event)\"\n title=\"Zoom\">\n <span class=\"zoom-label\">{{ zoomLabel }}</span>\n </button>\n\n <p-popover #zoomPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"zoom-popover\">\n <div class=\"zoom-slider-row\">\n <input class=\"zoom-slider\"\n type=\"range\"\n min=\"20\" max=\"100\" step=\"1\"\n [value]=\"sliderZoom\"\n (input)=\"onSliderChange($event)\">\n <span class=\"zoom-slider-value\">{{ zoomLabel }}</span>\n </div>\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let z of zoomOptions\"\n [class.is-active]=\"z.value === activeZoom\"\n (click)=\"selectZoom(z.value)\">\n <span>{{ z.label }}</span>\n </button>\n </div>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Save ────────────────────────────────────────────── -->\n <button class=\"tool-btn save-btn\"\n [class.is-saving]=\"isSaving\"\n [disabled]=\"isSaving\"\n title=\"Save\"\n (click)=\"save.emit()\">\n <i class=\"ph-thin ph-floppy-disk\"></i>\n </button>\n\n <!-- ── Preview ──────────────────────────────────────────── -->\n <button class=\"tool-btn preview-btn\"\n title=\"Preview\"\n (click)=\"preview.emit()\">\n <i class=\"ph-thin ph-eye\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Publish / Unpublish ──────────────────────────────── -->\n <button class=\"tool-btn publish-btn\"\n [class.is-published]=\"isPublished\"\n [title]=\"isPublished ? 'Unpublish' : 'Publish'\"\n (click)=\"publishToggle.emit()\">\n <i [class]=\"isPublished ? 'ph-thin ph-cloud-slash' : 'ph-thin ph-cloud-arrow-up'\"></i>\n <span class=\"publish-label\">{{ isPublished ? 'Unpublish' : 'Publish' }}</span>\n </button>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { ComponentRegistryService } from '../../services/component-registry.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderMode, NodeAction } from '../panel.model';\n\ninterface TreeNode {\n node: ComponentNode;\n icon: string;\n label: string;\n depth: number;\n expanded: boolean;\n hasChildren: boolean;\n /** Reference to the parent's children array that contains this node. */\n parentArray: ComponentNode[];\n /** Index of this node inside parentArray. */\n indexInParent: number;\n}\n\n@Component({\n selector: 'app-layer-tree',\n templateUrl: './layer-tree.component.html',\n styleUrls: ['./layer-tree.component.scss'],\n standalone: false,\n})\nexport class LayerTreeComponent implements OnInit, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() globalElements: ComponentNode[] = [];\n @Output() nodeSelect = new EventEmitter<ComponentNode>();\n @Output() nodeAction = new EventEmitter<{ action: NodeAction; node: ComponentNode }>();\n @Output() nodeMove = new EventEmitter<void>();\n\n public flatTree: TreeNode[] = [];\n public flatGlobalTree: TreeNode[] = [];\n public selectedNodeId: string | null = null;\n public hoveredNodeId: string | null = null;\n\n public editingNodeId: string | null = null;\n public editingValue = '';\n\n public activeSection: 'page' | 'global' = 'page';\n\n /** Cache: component type → icon class */\n private iconMap = new Map<string, string>();\n private selectSub?: Subscription;\n /** Last-seen structural signature — used by ngDoCheck to skip no-op rebuilds. */\n private _layoutSig = '';\n private _globalSig = '';\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n ) {}\n\n ngOnInit(): void {\n this.buildIconMap();\n this.rebuild();\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.selectedNodeId = entry?.node?.id ?? null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n // Runs on every CD cycle — exit immediately if structure hasn't changed.\n ngDoCheck(): void {\n const sig = this.sig(this.layout);\n const globalSig = this.sig(this.globalElements);\n if (sig !== this._layoutSig || globalSig !== this._globalSig) {\n this._layoutSig = sig;\n this._globalSig = globalSig;\n this.rebuild();\n }\n }\n\n /** Cheap structural signature: node IDs + nesting depth only. */\n private sig(nodes: ComponentNode[]): string {\n return nodes.map(n =>\n (n.id ?? n.type) + (n.children?.length ? '{' + this.sig(n.children) + '}' : '')\n ).join(',');\n }\n\n onNodeClick(treeNode: TreeNode): void {\n const node = treeNode.node;\n this.selectedNodeId = node.id ?? null;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.overlayService.setSelect(\n ref.element,\n node.type,\n BuilderMode.Select,\n node,\n ref.componentRef,\n );\n // Scroll the element into view on the canvas\n ref.element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n this.nodeSelect.emit(node);\n }\n\n onNodeMouseEnter(treeNode: TreeNode): void {\n this.hoveredNodeId = treeNode.node.id ?? null;\n const ref = this.overlayService.getNodeRef(treeNode.node);\n if (ref) {\n this.overlayService.setHover(ref.element, treeNode.node.type, BuilderMode.Select);\n }\n }\n\n onNodeMouseLeave(): void {\n this.hoveredNodeId = null;\n this.overlayService.clearHover();\n }\n\n toggleExpand(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n treeNode.expanded = !treeNode.expanded;\n this.rebuild();\n }\n\n onDeleteNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Delete, node: treeNode.node });\n }\n\n onDuplicateNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Duplicate, node: treeNode.node });\n }\n\n startRename(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.editingNodeId = treeNode.node.id ?? null;\n this.editingValue = treeNode.node.label ?? '';\n }\n\n saveRename(treeNode: TreeNode): void {\n const val = this.editingValue.trim();\n treeNode.node.label = val || undefined;\n treeNode.label = treeNode.node.label ?? treeNode.node.type;\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n cancelRename(): void {\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n /**\n * CDK drop handler for tree reorder.\n * Works on the flat tree indices — maps back to parent arrays to do the move.\n */\n onTreeDrop(event: CdkDragDrop<TreeNode[]>): void {\n if (event.previousIndex === event.currentIndex) return;\n\n const draggedTreeNode = this.flatTree[event.previousIndex];\n if (!draggedTreeNode) return;\n\n const targetTreeNode = this.flatTree[event.currentIndex];\n if (!targetTreeNode) return;\n\n // Remove from source parent\n const srcArray = draggedTreeNode.parentArray;\n const srcIdx = draggedTreeNode.indexInParent;\n srcArray.splice(srcIdx, 1);\n\n // Determine destination: insert at the same position as the target node in its parent.\n // If dropping after the target, adjust index.\n const destArray = targetTreeNode.parentArray;\n let destIdx = targetTreeNode.indexInParent;\n\n // If dragging downward (previousIndex < currentIndex), the target index\n // may have shifted because we already removed the item from source.\n // If source and destination are the same array and srcIdx < destIdx, adjust.\n if (srcArray === destArray && srcIdx < destIdx) {\n destIdx--;\n }\n\n destArray.splice(destIdx, 0, draggedTreeNode.node);\n\n // Rebuild tree and notify builder\n this.rebuild();\n this.nodeMove.emit();\n }\n\n // ── Internals ────────────────────────────────────────────\n\n /** Build a type→icon lookup from the registry so we don't instantiate configs per node. */\n private buildIconMap(): void {\n for (const entry of this.registry.getAll()) {\n const instance = new entry.config();\n this.iconMap.set(entry.type, instance.icon || 'ph-thin ph-cube');\n }\n }\n\n private expandedState = new Map<string, boolean>();\n\n private rebuild(): void {\n // Save expanded state\n for (const tn of [...this.flatTree, ...this.flatGlobalTree]) {\n if (tn.node.id) {\n this.expandedState.set(tn.node.id, tn.expanded);\n }\n }\n const next: TreeNode[] = [];\n this.flattenTree(this.layout, 0, next);\n this.flatTree = next;\n\n const nextGlobal: TreeNode[] = [];\n this.flattenTree(this.globalElements, 0, nextGlobal);\n this.flatGlobalTree = nextGlobal;\n }\n\n private flattenTree(nodes: ComponentNode[], depth: number, out: TreeNode[], parentArr?: ComponentNode[]): void {\n const arr = parentArr ?? nodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasChildren = !!(node.children && node.children.length);\n const expanded = node.id ? (this.expandedState.get(node.id) ?? true) : true;\n const treeNode: TreeNode = {\n node,\n icon: this.iconMap.get(node.type) || 'ph-thin ph-cube',\n label: node.label ?? node.type,\n depth,\n expanded,\n hasChildren,\n parentArray: arr,\n indexInParent: i,\n };\n out.push(treeNode);\n if (node.children && expanded) {\n this.flattenTree(node.children, depth + 1, out, node.children);\n }\n }\n }\n}\n","<div class=\"layer-tree\">\n <div class=\"tree-header\">\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'page'\" (click)=\"activeSection = 'page'\">\n <i class=\"ph-thin ph-stack\"></i> Page\n </button>\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'global'\" (click)=\"activeSection = 'global'\">\n <i class=\"ph-thin ph-globe\"></i> Global\n <span *ngIf=\"flatGlobalTree.length\" class=\"section-tab-badge\">{{ flatGlobalTree.length }}</span>\n </button>\n </div>\n\n <!-- ── Page elements tree ───────────────────── -->\n <div *ngIf=\"activeSection === 'page'\"\n class=\"tree-body\"\n cdkDropList\n [cdkDropListData]=\"flatTree\"\n (cdkDropListDropped)=\"onTreeDrop($event)\">\n <div *ngIf=\"!flatTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n <span>No layers yet</span>\n </div>\n\n <div *ngFor=\"let tn of flatTree\"\n class=\"tree-row\"\n cdkDrag\n [cdkDragData]=\"tn\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <ng-container *ngIf=\"editingNodeId === tn.node.id; else staticLabel\">\n <input class=\"node-rename-input\"\n [value]=\"editingValue\"\n (input)=\"editingValue = $any($event.target).value\"\n (keydown.enter)=\"saveRename(tn)\"\n (keydown.escape)=\"cancelRename()\"\n (blur)=\"saveRename(tn)\"\n (click)=\"$event.stopPropagation()\"\n autofocus>\n </ng-container>\n <ng-template #staticLabel>\n <span class=\"node-label\" [class.node-label--named]=\"tn.node.label\">{{ tn.label }}</span>\n </ng-template>\n\n <span class=\"node-actions\">\n <button class=\"action-btn\" title=\"Rename\" (click)=\"startRename(tn, $event)\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n </button>\n <button class=\"action-btn\" title=\"Duplicate\" (click)=\"onDuplicateNode(tn, $event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n\n <!-- ── Global elements tree ─────────────────── -->\n <div *ngIf=\"activeSection === 'global'\" class=\"tree-body\">\n <div *ngIf=\"!flatGlobalTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>No global elements</span>\n </div>\n\n <div *ngFor=\"let tn of flatGlobalTree\"\n class=\"tree-row tree-row--global\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n <span class=\"node-position-badge\">{{ tn.node.globalPosition }}</span>\n\n <span class=\"node-actions\">\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource } from './models/component.model';\nimport { OverlayEntry, OverlayService } from './overlay/overlay.service';\nimport { PanelEvent, PanelEventService, PanelEventTypes } from './panels/panel-event.service';\nimport { BuilderMode, DeviceMode, DEVICE_OPTIONS, NodeAction, PageRouteAnimationSettings, PageSettings, PanelTypes, ToolbarAction } from './panels/panel.model';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DragEngineService, IoxDropEvent } from './services/drag-engine.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\n\n@Component({\n selector: 'app-builder',\n templateUrl: './builder.component.html',\n styleUrls: ['./builder.component.scss'],\n standalone: false,\n})\nexport class BuilderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() dataSources: IoxDataSource[] = [];\n @Input() orgId = 'default';\n @Input() routeParams: any[] = [];\n @Input() pageName = '';\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n @Input() pageSettings: PageSettings | null = null;\n @Input() globalElements: ComponentNode[] = [];\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Output() save = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() back = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n @Output() pageSettingsChange = new EventEmitter<PageSettings>();\n @Output() applyAnimationToAll = new EventEmitter<PageRouteAnimationSettings>();\n @Output() saveBlock = new EventEmitter<{ name: string; node: ComponentNode }>();\n @Output() globalElementsChange = new EventEmitter<ComponentNode[]>();\n @ViewChild('previewCanvas') previewCanvas?: ElementRef<HTMLElement>;\n @ViewChild('previewScroll') previewScrollRef?: ElementRef<HTMLElement>;\n @ViewChild('lenisContent') lenisContentRef?: ElementRef<HTMLElement>;\n @ViewChild('globalOverlay') globalOverlayRef?: ElementRef<HTMLElement>;\n\n public components: any[] = [];\n public activePanel: string = PanelTypes.STYLES;\n public isPanelOpen = false;\n public panelTypes = PanelTypes;\n public activeMode: BuilderMode = BuilderMode.Select;\n public builderModes = BuilderMode;\n public activeDevice: DeviceMode = DeviceMode.Desktop;\n public activeZoom: number = 100;\n public activeScreenWidth: number = 1440;\n public selectedItem: ComponentNode | null = null;\n public isDragging = false;\n public scrollThumbTop = 0; // px from top of track\n public scrollThumbHeight = 0; // px height of thumb\n public isScrollbarVisible = false;\n public scrollbarTranslate = 0; // counteracts Lenis wrapper scrollTop shifting position:absolute children\n public activeSidebar: 'components' | 'tree' | 'tokens' = 'components';\n public showSaveBlockDialog = false;\n public saveBlockName = '';\n private pendingBlockNode: ComponentNode | null = null;\n public isPanning = false;\n public panX = 0;\n public panY = 0;\n /** Canvas frame height in canvas-space pixels (= previewScroll.clientHeight / scale).\n * Used as iox-page-component's height so position:fixed top:0;bottom:0 fills the\n * same area as height:100vh (both resolve to this value). */\n public canvasFrameHeight = 0;\n private panStartX = 0;\n private panStartY = 0;\n private panOriginX = 0;\n private panOriginY = 0;\n private hoverHideRaf = 0;\n private viewportSub?: Subscription;\n private lenis?: Lenis;\n private lenisRafId?: number;\n private canvasRo?: ResizeObserver;\n private previewFrameRo?: ResizeObserver;\n private canvasContentHeight = 0;\n\n // Type-safe event forwarding for toolbar outputs\n handleToolbarModeChange(mode: BuilderMode): void {\n this.onModeChange(mode);\n }\n handleToolbarDeviceChange(device: DeviceMode): void {\n this.onDeviceChange(device);\n }\n handleToolbarZoomChange(value: number | 'fit'): void {\n this.onZoomChange(value);\n }\n\n handleToolbarScreenWidthChange(width: number): void {\n this.viewportService.setWidth(width);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n get globalElementsBefore(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'before');\n }\n\n get globalElementsAfter(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'after');\n }\n\n /** Canvas width in CSS pixels (driven by ViewportService). */\n get viewportWidth(): number {\n return this.viewportService.getState().width;\n }\n\n /** Canvas viewport height in CSS pixels (driven by ViewportService). */\n get viewportHeight(): number {\n return this.viewportService.getState().height;\n }\n\n /** Visual (scaled) canvas width — used to size the scroll container so the\n * scrollbar aligns with the right edge of the canvas, not the CMS shell. */\n get viewportScaledWidth(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.viewportWidth * s);\n }\n\n /** CSS transform for the visual canvas.\n * Includes translateX(-50%) for centering because iox-page-component is\n * position:absolute; left:50% inside .preview-lenis-content. */\n get viewportTransform(): string {\n const s = this.viewportService.getState().scale;\n const parts: string[] = ['translateX(-50%)'];\n if (this.panX !== 0 || this.panY !== 0) parts.push(`translate(${this.panX}px, ${this.panY}px)`);\n if (s !== 1) parts.push(`scale(${s})`);\n return parts.join(' ');\n }\n\n /**\n * Height of the Lenis content proxy div (realContentHeight × scale).\n * Lenis scrolls against this value so scroll range is always in visual px,\n * not unscaled CSS px — correct at any zoom level.\n */\n get scaledContentHeight(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.canvasContentHeight * s);\n }\n\n /** The canvas starts at the simulated viewport height, just like a real empty browser page. */\n get canvasMinHeight(): number {\n return this.viewportService.getState().height;\n }\n\n private sub?: Subscription;\n private registrySub?: Subscription;\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n private dsRegistry: DataSourceRegistryService,\n private viewportService: ViewportService,\n private interactionEngine: InteractionEngineService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private clipboard: BuilderClipboardService,\n private cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\n ) {}\n\n ngOnInit(): void {\n this.components = this.registry.getAll();\n this.dsRegistry.setDataSources(this.dataSources);\n this.dragEngine.setScale(this.viewportService.getScale());\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => this.handlePanelEvents(panelEvent));\n this.sub.add(this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n }));\n this.sub.add(this.dragEngine.dropComplete$.subscribe((node: ComponentNode) => {\n this._selectAfterDrop(node);\n }));\n this.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.viewportSub = this.viewportService.state$.subscribe(state => {\n this.activeDevice = state.device;\n this.activeZoom = Math.round(state.scale * 100);\n this.activeScreenWidth = state.width;\n this.dragEngine.setScale(state.scale);\n this.updatePreviewVh();\n // scaledContentHeight changes with scale — flush DOM first so\n // .preview-lenis-content has its new height before Lenis reads it.\n this.cdr.detectChanges();\n this.lenis?.resize();\n // iox-page-component has transition:0.25s — overlay positions are stale\n // until the transform animation completes. Re-fire after the transition.\n setTimeout(() => this.overlayService.refreshSelect(), 270);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pageSettings']) {\n // Reinit Lenis with updated scroll options (lerp, wheelMultiplier, etc.)\n // so the builder preview reflects the live-page scroll feel in real time.\n this.initLenis();\n }\n if (changes['globalElements']) {\n // The *ngIf on the global overlay renders after this hook — defer so\n // globalOverlayRef is in the DOM before we try to set CSS vars on it.\n setTimeout(() => this.updatePreviewVh());\n }\n }\n\n ngAfterViewInit(): void {\n this.updatePreviewVh();\n // Re-compute --preview-vh whenever the canvas frame resizes (panel open/close,\n // window resize, etc.) so 100vh always fills the visible area.\n if (this.previewScrollRef?.nativeElement) {\n this.previewFrameRo = new ResizeObserver(() => this.updatePreviewVh());\n this.previewFrameRo.observe(this.previewScrollRef.nativeElement);\n }\n this.overlayService.setContainer(this.previewCanvas?.nativeElement || null);\n // Builder dispatches synthetic 'scroll' events on .preview-lenis-content from\n // the Lenis callback — point the overlay scroll listener at that element.\n // (Not previewScrollRef which is the Lenis eventsTarget — dispatching there\n // would cause Lenis to re-fire its scroll handler → infinite loop.)\n this.overlayService.setScrollContainer(this.lenisContentRef?.nativeElement || null);\n\n // Register the root canvas as a dropzone.\n const canvasEl = document.getElementById('canvas-preview')!;\n if (canvasEl) {\n this.dragEngine.registerDropzone(\n 'canvas-preview',\n canvasEl,\n this.layout,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n // Track canvas content height so scaledContentHeight (= height × scale)\n // keeps the Lenis content proxy correctly sized at any zoom level.\n this.canvasRo = new ResizeObserver(entries => {\n const h = entries[0]?.contentRect.height ?? 0;\n if (h !== this.canvasContentHeight) {\n this.canvasContentHeight = h;\n this.cdr.detectChanges();\n this.lenis?.resize();\n }\n });\n this.canvasRo.observe(canvasEl);\n }\n\n this.initLenis();\n setTimeout(() => this.appRef.tick());\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.previewFrameRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) { this.dragEngine.unregisterDropzone('canvas-preview', canvasEl); }\n }\n\n /**\n * Set --preview-vh / --preview-vw on .preview-scroll so that viewport-relative\n * units (vh, vw) inside the canvas resolve to the simulated canvas dimensions\n * rather than the real browser viewport.\n *\n * --preview-vh = canvas frame height (unscaled) / 100\n * --preview-vw = canvas width from viewport state / 100\n *\n * Both fall back to their native unit in production (no variables defined).\n */\n private updatePreviewVh(): void {\n const el = this.previewScrollRef?.nativeElement;\n if (!el) return;\n const state = this.viewportService.getState();\n const frameH = el.clientHeight / state.scale;\n const vhVal = `${frameH / 100}px`;\n const vwVal = `${state.width / 100}px`;\n el.style.setProperty('--preview-vh', vhVal);\n el.style.setProperty('--preview-vw', vwVal);\n // Mirror on global overlay so vh/vw units resolve identically there\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vh', vhVal);\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vw', vwVal);\n this.canvasFrameHeight = Math.round(frameH);\n }\n\n private initLenis(): void {\n this.destroyLenis();\n if (!this.previewScrollRef?.nativeElement || !this.lenisContentRef?.nativeElement) return;\n\n const s = this.pageSettings?.scroll;\n this.lenis = new Lenis({\n wrapper: this.previewScrollRef.nativeElement,\n content: this.lenisContentRef.nativeElement,\n eventsTarget: this.previewScrollRef.nativeElement,\n lerp: s?.lerp ?? 0.1,\n wheelMultiplier: s?.wheelMultiplier ?? 1,\n touchMultiplier: s?.touchMultiplier ?? 1,\n orientation: s?.direction ?? 'vertical',\n infinite: s?.infinite ?? false,\n autoResize: false, // we drive resize() manually via canvasRo + viewportSub\n });\n\n this.lenis.on('scroll', (instance: Lenis) => {\n const clientH = this.previewScrollRef!.nativeElement.clientHeight;\n this.onPageScroll({\n scrollTop: instance.scroll,\n scrollHeight: instance.limit + clientH,\n clientHeight: clientH,\n scrollPercentage: instance.progress * 100,\n });\n // Notify overlay to reposition boxes on each scroll tick.\n // Dispatch on lenisContent (not previewScrollRef/eventsTarget) to avoid\n // Lenis re-consuming the event and causing infinite recursion.\n this.lenisContentRef!.nativeElement.dispatchEvent(new Event('scroll'));\n // Keep the fixed-position drop-target overlay aligned when canvas scrolls\n // during an active drag (pointer doesn't move, so _onDragMove never fires).\n this.dragEngine.refreshDragOverlays();\n });\n\n const raf = (time: number) => {\n this.lenis?.raf(time);\n this.lenisRafId = requestAnimationFrame(raf);\n };\n this.lenisRafId = requestAnimationFrame(raf);\n }\n\n private destroyLenis(): void {\n if (this.lenisRafId != null) cancelAnimationFrame(this.lenisRafId);\n this.lenis?.destroy();\n this.lenis = undefined;\n this.lenisRafId = undefined;\n }\n\n addComponent(name: string): void {\n const config = this.registry.createConfig(name);\n if (!config) {\n return;\n }\n this.layout.push(config);\n }\n\n onDrop(event: IoxDropEvent): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n if (typeof payload.data === 'string') {\n const config = this.registry.createConfig(payload.data);\n if (!config) return;\n this.layout.splice(insertIndex, 0, config);\n this.cdr.markForCheck();\n this._selectAfterDrop(config);\n } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block dragged from blocks panel — deep clone with new IDs.\n const clone = this.deepCloneWithNewIds(item);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n if (payload.sourceId && payload.sourceId !== 'canvas-preview') {\n // Cross-list move from a nested container into canvas root.\n const sourceData = this.dragEngine.getData(payload.sourceId);\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.dragEngine.getCdr(payload.sourceId)?.detectChanges();\n }\n }\n this.layout.splice(insertIndex, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n // Same-container reorder (canvas root).\n const currentIdx = this.layout.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n this.layout.splice(currentIdx, 1);\n this.layout.splice(adjustedIdx, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onModeChange(mode: BuilderMode): void {\n this.activeMode = mode;\n if (mode === BuilderMode.Pan) {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.overlayService.clearHover();\n } else {\n // Returning to Select/Style — reset pan offset so canvas re-centers\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n onDeviceChange(device: DeviceMode): void {\n this.viewportService.setDevice(device);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n onZoomChange(value: number | 'fit'): void {\n if (value === 'fit') {\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n } else {\n this.viewportService.setScale(value / 100);\n }\n }\n\n // ── Board pan ────────────────────────────────────────────\n\n onBoardMouseDown(event: MouseEvent): void {\n if (this.activeMode !== BuilderMode.Pan) return;\n if (event.button !== 0) return;\n this.isPanning = true;\n this.panStartX = event.clientX;\n this.panStartY = event.clientY;\n this.panOriginX = this.panX;\n this.panOriginY = this.panY;\n event.preventDefault();\n }\n\n onBoardMouseMove(event: MouseEvent): void {\n if (!this.isPanning) return;\n this.panX = this.panOriginX + (event.clientX - this.panStartX);\n this.panY = this.panOriginY + (event.clientY - this.panStartY);\n }\n\n onBoardMouseUp(): void {\n this.isPanning = false;\n }\n\n private autoFitViewport(): void {\n const container = this.previewCanvas?.nativeElement;\n if (!container) return;\n // Available width = container width minus horizontal padding (10px × 2)\n this.viewportService.fitToWidth(container.clientWidth, 20);\n }\n\n selectPanel(panel: string): void {\n this.activePanel = panel;\n this.panelEventService.emit(this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN, panel);\n }\n\n handleClick(event: any): void {\n if (this.activeMode === BuilderMode.Pan) return;\n this.selectedItem = event.node;\n this.overlayService.setSelect(event.element, event.node.type, this.activeMode, event.node, event.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: event.node, componentRef: event.componentRef });\n }\n\n private _selectAfterDrop(node: ComponentNode): void {\n // Wait one tick for Angular to render the new component and register it\n // in the overlay before attempting to select it.\n setTimeout(() => {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n this.selectedItem = node;\n this.overlayService.setSelect(ref.element, node.type, this.activeMode, node, ref.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef });\n });\n }\n\n handleMouseEnter(event: any): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.overlayService.setHover(event.element, event.node.type, this.activeMode);\n }\n\n handleMouseLeave(): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.hoverHideRaf = requestAnimationFrame(() => this.overlayService.clearHover());\n }\n\n handleCanvasClick(): void {\n // Only fires when clicking empty canvas space (renderers call stopPropagation)\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n onTreeNodeSelect(node: ComponentNode): void {\n this.selectedItem = node;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef });\n }\n this.selectPanel(PanelTypes.STYLES);\n }\n\n onTreeNodeAction(event: { action: NodeAction; node: ComponentNode }): void {\n const { action, node } = event;\n\n // Check global elements first\n const globalIdx = this.globalElements.findIndex(n => n === node);\n if (globalIdx !== -1) {\n if (action === NodeAction.Delete) {\n this.globalElements.splice(globalIdx, 1);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n return;\n }\n\n const result = this.findNodeInTree(node, this.layout);\n if (!result) return;\n\n if (action === NodeAction.Delete) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n } else if (action === NodeAction.Duplicate) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onTreeNodeMove(): void {\n // Tree drag moved a node — canvas will re-render via change detection.\n // Clear selection since the moved node's DOM element may be recreated.\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onToolbarAction(event: { action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after' }): void {\n const { action, entry } = event;\n const node = entry.node;\n if (!node) return;\n\n switch (action) {\n case ToolbarAction.Delete: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n const blockClone: ComponentNode = JSON.parse(JSON.stringify(node));\n this._stripGlobalFlags(blockClone);\n this.pendingBlockNode = blockClone;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n if (parentNode) {\n const ref = this.overlayService.getNodeRef(parentNode);\n if (ref) {\n this.selectedItem = parentNode;\n this.overlayService.setSelect(ref.element, parentNode.type, this.activeMode, parentNode, ref.componentRef);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: parentNode, componentRef: ref.componentRef });\n }\n } else {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.MakeGlobal: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n result.parent.splice(result.index, 1);\n node.isGlobal = true;\n node.globalPosition = event.position ?? 'before';\n this.globalElements.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.RemoveGlobal: {\n const idx = this.globalElements.findIndex(n => n.id === node.id);\n if (idx !== -1) {\n this.globalElements.splice(idx, 1);\n node.isGlobal = false;\n node.globalPosition = undefined;\n this.layout.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.EditPreset: {\n this.panelEventService.emit(PanelEventTypes.PRESET_EDIT, node.stylePresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.STYLES,\n );\n break;\n }\n case ToolbarAction.EditInteractionPreset: {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_PRESET_EDIT, node.interactionPresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.INTERACTIONS,\n );\n break;\n }\n case ToolbarAction.PastePreset: {\n const presetId = this.clipboard.getPresetId();\n if (presetId) {\n node.stylePresetId = presetId;\n node.styleOverrides = {};\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: null });\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.PasteInteractionPreset: {\n const interactionPresetId = this.clipboard.getInteractionPresetId();\n if (interactionPresetId) {\n node.interactionPresetId = interactionPresetId;\n const preset = this.interactionPresetRegistry.getPreset(interactionPresetId);\n if (preset) node.interactions = JSON.parse(JSON.stringify(preset.interactions));\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.DetachSymbol: {\n node.symbolId = undefined;\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.Copy: {\n this.clipboard.copyNode(node);\n break;\n }\n case ToolbarAction.Paste: {\n const pastedNode = this.clipboard.getNode();\n if (!pastedNode) break;\n const clone = this.deepCloneWithNewIds(pastedNode);\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index + 1, 0, clone);\n } else {\n this.layout.push(clone);\n }\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n }\n }\n\n confirmSaveBlock(): void {\n if (!this.saveBlockName.trim() || !this.pendingBlockNode) return;\n this.saveBlock.emit({ name: this.saveBlockName.trim(), node: this.pendingBlockNode });\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n cancelSaveBlock(): void {\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n private deepCloneWithNewIds(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n this.assignNewIds(clone);\n return clone;\n }\n\n private assignNewIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).slice(2, 10);\n if (node.styleId) node.styleId = Math.random().toString(36).slice(2, 10);\n node.children?.forEach(child => this.assignNewIds(child));\n }\n\n private _stripGlobalFlags(node: ComponentNode): void {\n node.isGlobal = false;\n node.globalPosition = undefined;\n node.children?.forEach(c => this._stripGlobalFlags(c));\n }\n\n private _scrollbarTimer: ReturnType<typeof setTimeout> | null = null;\n\n onPageScroll(event: { scrollTop: number; scrollHeight: number; clientHeight: number; scrollPercentage?: number }): void {\n const contentH = event.scrollHeight;\n const wrapperH = event.clientHeight;\n if (contentH <= wrapperH) {\n this.isScrollbarVisible = false;\n return;\n }\n // .canvas-scrollbar has top:20px; bottom:20px — visible track is 40px shorter.\n const trackH = wrapperH - 40;\n const thumbH = Math.max((trackH / contentH) * trackH, 32);\n // Use Lenis progress (0–1) when available — more accurate than recomputing from scroll/limit.\n const progress = event.scrollPercentage != null ? event.scrollPercentage / 100\n : event.scrollTop / (contentH - wrapperH);\n const thumbTop = progress * (trackH - thumbH);\n this.scrollThumbHeight = thumbH;\n this.scrollThumbTop = thumbTop;\n this.isScrollbarVisible = true;\n // .canvas-scrollbar is position:absolute inside the Lenis wrapper.\n // When Lenis calls wrapper.scrollTo(), scrollTop shifts all absolute children.\n // Counteract with translateY(scrollTop) so the track stays visually anchored.\n this.scrollbarTranslate = event.scrollTop;\n this.cdr.markForCheck();\n\n if (this._scrollbarTimer) clearTimeout(this._scrollbarTimer);\n this._scrollbarTimer = setTimeout(() => {\n this.isScrollbarVisible = false;\n this.cdr.markForCheck();\n }, 1200);\n }\n\n private findNodeInTree(target: ComponentNode, children: ComponentNode[]): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < children.length; i++) {\n if (children[i] === target) {\n return { parent: children, index: i };\n }\n if (children[i].children) {\n const found = this.findNodeInTree(target, children[i].children!);\n if (found) return found;\n }\n }\n return null;\n }\n\n private findParentNode(target: ComponentNode, children: ComponentNode[], parent?: ComponentNode): ComponentNode | null {\n for (const child of children) {\n if (child === target) return parent || null;\n if (child.children) {\n const found = this.findParentNode(target, child.children, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n private handlePanelEvents(panelEvent: PanelEvent): void {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n }\n }\n}","<div class=\"builder\">\n <header class=\"builder-header\">\n <div class=\"sidebar-switcher\">\n <button (click)=\"activeSidebar = 'components'\" [class.active]=\"activeSidebar === 'components'\" title=\"Components\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\" title=\"Layers\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tokens'\" [class.active]=\"activeSidebar === 'tokens'\" title=\"Design Tokens\">\n <i class=\"ph-thin ph-circles-three\"></i>\n </button>\n </div>\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\">\n <i class=\"ph-thin ph-file\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.INTERACTIONS)\" [class.active]=\"activePanel === panelTypes.INTERACTIONS\">\n <i class=\"ph-thin ph-lightning\"></i>\n </button>\n </div>\n </header>\n\n <div class=\"builder-main\" [class.panel-open]=\"isPanelOpen\">\n <aside class=\"sidebar\">\n <div *ngIf=\"activeSidebar === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'tokens'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderTokens]\"></ng-content>\n </div>\n <app-layer-tree *ngIf=\"activeSidebar === 'tree'\"\n [layout]=\"layout\"\n [globalElements]=\"globalElements\"\n (nodeSelect)=\"onTreeNodeSelect($event)\"\n (nodeAction)=\"onTreeNodeAction($event)\"\n (nodeMove)=\"onTreeNodeMove()\"></app-layer-tree>\n </aside>\n\n <main #previewCanvas class=\"preview\"\n [class.grab-mode]=\"activeMode === builderModes.Pan\"\n [class.grabbing]=\"isPanning\"\n (click)=\"handleCanvasClick()\"\n (mousedown)=\"onBoardMouseDown($event)\"\n (mousemove)=\"onBoardMouseMove($event)\"\n (mouseup)=\"onBoardMouseUp()\"\n (mouseleave)=\"onBoardMouseUp()\">\n <app-overlay (toolbarAction)=\"onToolbarAction($event)\"></app-overlay>\n\n <!-- Custom Lenis scrollbar — lives in .preview (not .preview-scroll) so it\n stays in the right gutter and never overlaps the canvas at large widths.\n No translateY counteract needed since it isn't inside the Lenis wrapper. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\n\n <!-- Global elements overlay — outside Lenis so position:fixed children\n stay pinned to the canvas viewport rather than scrolling with content.\n Shares viewportTransform so elements scale correctly at any zoom level.\n Height matches viewportHeight so position:fixed + inset:0 fills the\n simulated viewport correctly (CSS calc(100%) would give the wrong\n containing-block height and break full-screen fixed overlays). -->\n <div *ngIf=\"globalElements.length\"\n #globalOverlay\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n <ng-container *ngFor=\"let item of globalElementsBefore\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of globalElementsAfter\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"preview-scroll\"\n #previewScroll\n [style.width.px]=\"viewportScaledWidth\"\n [class.pan-mode]=\"activeMode === builderModes.Pan\">\n\n <!-- Lenis content proxy: height = realContentHeight × scale.\n Lenis scrolls against this value so scroll range is always in\n visual px — correct at any zoom level. -->\n <div class=\"preview-lenis-content\" #lenisContent\n [style.height.px]=\"scaledContentHeight\">\n\n <iox-page-component\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <div *ngFor=\"let item of layout\"\n [ngClass]=\"['preview-node', 'iox-outer-' + (item.styleId ?? item.id)]\"\n [class.is-selected]=\"selectedItem === item\"\n ioxDraggable\n [ioxDragData]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (modeChange)=\"handleToolbarModeChange($event)\"\n (deviceChange)=\"handleToolbarDeviceChange($event)\"\n (zoomChange)=\"handleToolbarZoomChange($event)\"\n (screenWidthChange)=\"handleToolbarScreenWidthChange($event)\"\n (save)=\"save.emit()\"\n (preview)=\"preview.emit()\"\n (publishToggle)=\"publishToggle.emit()\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\">\n </app-toolbar>\n\n <ng-content select=\"[builderPanel]\"></ng-content>\n </div>\n\n <!-- Save as Reusable Block dialog -->\n @if (showSaveBlockDialog) {\n <div class=\"save-block-backdrop\" (click)=\"cancelSaveBlock()\"></div>\n <div class=\"save-block-dialog\">\n <h4 class=\"save-block-title\">Save as Reusable Block</h4>\n <input class=\"save-block-input\"\n type=\"text\"\n placeholder=\"Block name...\"\n [(ngModel)]=\"saveBlockName\"\n (keydown.enter)=\"confirmSaveBlock()\"\n (keydown.escape)=\"cancelSaveBlock()\"\n autofocus>\n <div class=\"save-block-actions\">\n <p-button size=\"small\" severity=\"secondary\" label=\"Cancel\" (click)=\"cancelSaveBlock()\"></p-button>\n <p-button size=\"small\" label=\"Save\" [disabled]=\"!saveBlockName.trim()\" (click)=\"confirmSaveBlock()\"></p-button>\n </div>\n </div>\n }\n</div>","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDropzone]',\n standalone: false,\n})\nexport class IoxDropzoneDirective implements OnInit, OnDestroy {\n @Input() ioxDropzoneId = '';\n @Input() ioxDropzoneData: ComponentNode[] = [];\n /** Optional callback invoked after a drop lands in this zone (e.g. repeater preview refresh). */\n @Input() ioxDropzonePostDrop?: () => void;\n @Output() ioxDrop = new EventEmitter<IoxDropEvent>();\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDropzone(\n this.ioxDropzoneId,\n this.el.nativeElement,\n this.ioxDropzoneData,\n this.cdr,\n (evt) => this.ioxDrop.emit(evt),\n this.ioxDropzonePostDrop,\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.ioxDropzoneId, this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-section',\n template: `\n <div class=\"section-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"section-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['section-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .section-root {\n position: relative;\n box-sizing: border-box;\n }\n .section-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .section-root:hover .section-placeholder,\n .section-root.iox-drag-over .section-placeholder {\n opacity: 1;\n }\n .section-placeholder i { font-size: 22px; }\n .section-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class SectionComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-container',\n template: `\n <ng-template #dropContent>\n <div *ngIf=\"!children.length\" class=\"container-placeholder\">\n <i class=\"ph-thin ph-square\"></i>\n <span>Drop components here</span>\n </div>\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['container-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-template>\n\n @switch (htmlTag) {\n @case ('section') { <section class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></section> }\n @case ('article') { <article class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></article> }\n @case ('header') { <header class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></header> }\n @case ('footer') { <footer class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></footer> }\n @case ('main') { <main class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></main> }\n @case ('nav') { <nav class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></nav> }\n @case ('ul') { <ul class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></ul> }\n @case ('ol') { <ol class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" [attr.start]=\"start !== 1 ? start : null\" [attr.reversed]=\"reversed ? '' : null\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></ol> }\n @case ('li') { <li class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></li> }\n @default { <div class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></div> }\n }\n `,\n styles: [`\n .container-root {\n position: relative;\n box-sizing: border-box;\n }\n .container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .container-root:hover .container-placeholder,\n .container-root.iox-drag-over .container-placeholder {\n opacity: 1;\n }\n .container-placeholder i { font-size: 18px; }\n .container-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n @Input() htmlTag: string = 'div';\n @Input() start: number = 1;\n @Input() reversed: boolean = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-linked-container',\n template: `\n <a [href]=\"resolvedHref\"\n [target]=\"target\"\n [ngStyle]=\"style\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n class=\"linked-container-root\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"linked-container-placeholder\">\n <i class=\"ph-thin ph-link\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['linked-container-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </a>\n `,\n styles: [`\n .linked-container-root {\n display: block;\n position: relative;\n box-sizing: border-box;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n }\n .linked-container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .linked-container-root:hover .linked-container-placeholder,\n .linked-container-root.iox-drag-over .linked-container-placeholder {\n opacity: 1;\n }\n .linked-container-placeholder i { font-size: 18px; }\n .linked-container-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderLinkedContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Input() linkType: 'external' | 'page' = 'external';\n @Input() url = 'https://';\n @Input() pageRoute = '';\n @Input() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n private capturePreventDefault = (e: MouseEvent) => e.preventDefault();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n private elRef: ElementRef<HTMLElement>,\n @Optional() @Inject(IS_PREVIEW) private isPreview: boolean,\n ) {}\n\n ngOnInit(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n ngOnDestroy(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n get resolvedHref(): string {\n if (this.linkType !== 'page') return this.url || '#';\n return this.pageRoute || '#';\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Optional CMS content fetcher. Provide from the host app to enable Repeater data preview. */\nexport const IOX_CONTENT_SERVICE = new InjectionToken<IoxContentService>('IOX_CONTENT_SERVICE');\n\n/** Optional font manager. Provide from the host app to populate the fontFamily dropdown. */\nexport const IOX_FONT_MANAGER = new InjectionToken<IoxFontManager>('IOX_FONT_MANAGER');\n\nexport interface IoxContentService {\n getContent(contentType: string, orgId?: string): import('rxjs').Observable<any>;\n}\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * Resolves a dot-notation path (with optional array bracket notation) against an object.\n * Examples: 'title', 'author.name', 'tags[0]', 'items[2].title'\n */\nexport function resolvePath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n if (current == null) return undefined;\n const bracketMatch = key.match(/^(\\w+)\\[(\\d+)]$/);\n if (bracketMatch) {\n const arr = current[bracketMatch[1]];\n return Array.isArray(arr) ? arr[parseInt(bracketMatch[2], 10)] : undefined;\n }\n return current[key];\n }, obj);\n}\n\n/**\n * Deep-clones a ComponentNode tree and overrides trait defaults\n * according to each node's bindings resolved against `item`.\n *\n * Each clone gets a new `id` (for Angular tracking / overlay registration)\n * but shares the original node's CSS class by setting `styleId = originalId`.\n * This means all repeated preview rows point to the same CSS rule block as the\n * template node — the style engine only needs one rule per logical slot.\n */\nexport function cloneNodesForItem(nodes: ComponentNode[], item: any): ComponentNode[] {\n return nodes.map(node => {\n // Capture the CSS-owning id before clone\n const cssId = node.styleId ?? node.id;\n\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n clone.id = Math.random().toString(36).substr(2, 9);\n // Point this clone and all its descendants at the original CSS rule.\n clone.styleId = cssId;\n\n if (clone.bindings?.length && item) {\n for (const binding of clone.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n for (const trait of clone.traits || []) {\n if (trait.name === binding.prop) {\n trait.default = value;\n }\n }\n }\n }\n }\n\n if (clone.children?.length) {\n clone.children = cloneNodesForItem(clone.children, item);\n }\n\n return clone;\n });\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { IOX_CONTENT_SERVICE, IoxContentService } from '../../tokens/builder.tokens';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\n\n@Component({\n selector: 'app-builder-repeater',\n template: `\n <ng-template #badgeContent>\n <i class=\"ph-thin ph-repeat\"></i>\n <span *ngIf=\"source\">{{ source }}</span>\n <span *ngIf=\"!source\" class=\"repeater-badge-empty\">No source</span>\n <span *ngIf=\"items.length\" class=\"repeater-badge-count\">&times; {{ items.length }}</span>\n <span *ngIf=\"isLoading\" class=\"repeater-badge-loading\"><i class=\"ph-thin ph-circle-notch\"></i></span>\n </ng-template>\n\n <!--\n .repeater-wrapper is the layout root.\n In has-children state, .repeater-badge lives here as a direct child\n (position:absolute, hover-only) so it is NOT a child of .repeater-root\n and does NOT shift the :nth-child index of the item wrappers.\n\n In empty state, .repeater-badge lives inside .repeater-root (no items\n to count, so :nth-child is irrelevant there).\n -->\n <div class=\"repeater-wrapper\" [class.has-children]=\"children.length > 0\">\n\n <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->\n <div *ngIf=\"children.length > 0\" class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n\n <div class=\"repeater-root\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- EMPTY STATE: badge + placeholder inside root -->\n <ng-container *ngIf=\"!children.length\">\n <div class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n <div class=\"repeater-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop a component here as the item template</span>\n </div>\n </ng-container>\n\n <!-- Template items — DIRECT children of repeater-root.\n :first-child / :nth-child(odd) etc. now correctly target these\n as siblings of the preview items below. -->\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['repeater-item-template', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n\n <!-- Preview items — also DIRECT children of repeater-root. -->\n <ng-container *ngFor=\"let row of previewRows\">\n <div *ngFor=\"let child of row\"\n [ngClass]=\"['repeater-preview-child', 'iox-outer-' + (child.styleId ?? child.id)]\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n /* ── Outer wrapper: anchors the absolute badge in has-children state ── */\n .repeater-wrapper {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Badge base (used in both empty and has-children contexts) ── */\n .repeater-badge {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n user-select: none;\n }\n\n /* ── Has-children: badge is absolute over the wrapper, hover-only ── */\n .repeater-wrapper.has-children > .repeater-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n border-radius: 0 0 4px 0;\n border: 1px solid rgba(203, 144, 144, 0.5);\n opacity: 0;\n cursor: pointer;\n transition: opacity 0.15s;\n }\n .repeater-wrapper.has-children:hover > .repeater-badge {\n opacity: 1;\n }\n\n .repeater-badge i { font-size: 13px; }\n .repeater-badge-empty { opacity: 0.55; }\n .repeater-badge-count { margin-left: auto; font-weight: 600; }\n .repeater-badge-loading i { animation: spin 1s linear infinite; }\n @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n\n /* ── Root ── */\n .repeater-root {\n box-sizing: border-box;\n }\n\n /* ── Empty state: dashed border on root (connected with badge above) ── */\n .repeater-wrapper:not(.has-children) .repeater-root {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-top: none;\n border-radius: 0 0 4px 4px;\n min-height: 40px;\n }\n\n .repeater-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1.5rem 1rem;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .repeater-placeholder i { font-size: 20px; }\n\n /* ── Template item: direct child, draggable, full opacity ── */\n .repeater-item-template {\n min-width: 0;\n }\n\n /* ── Preview items: direct children, dimmed, non-interactive ── */\n .repeater-preview-child {\n opacity: 0.55;\n pointer-events: none;\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n public items: any[] = [];\n public previewRows: ComponentNode[][] = [];\n public isLoading = false;\n\n /** Bound reference passed to [ioxDropzonePostDrop] so the directive can call it. */\n readonly refreshPreviewsBound = () => { setTimeout(() => this.refreshPreviews()); };\n\n private _source = '';\n private _limit = 10;\n private orgId = 'default';\n private bindingSub?: Subscription;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) { this.fetchData(); }\n else { this.items = []; this.previewRows = []; }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n constructor(\n private dragEngine: DragEngineService,\n private overlayService: OverlayService,\n @Optional() @Inject(IOX_CONTENT_SERVICE) private contentService: IoxContentService | null,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private activatedRoute: ActivatedRoute,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.orgId = this.activatedRoute.snapshot.paramMap.get('orgId') || 'default';\n\n this.bindingSub = this.panelEventService.subscribe(event => {\n if (event.type !== PanelEventTypes.BINDING_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length) return;\n if (this.isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.bindingSub?.unsubscribe();\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr,\n () => { if (this.items.length > 0) setTimeout(() => this.refreshPreviews()); });\n }\n\n private fetchData(): void {\n if (!this._source) return;\n const ds = this.dsRegistry.findByAlias(this._source);\n const contentType = ds?.request?.cms?.contentType;\n if (!contentType || !this.contentService) return;\n this.isLoading = true;\n this.cdr.markForCheck();\n this.contentService.getContent(contentType, this.orgId).subscribe({\n next: (data: any) => {\n const all: any[] = Array.isArray(data) ? data : (data?.items || data?.data || []);\n this.items = all.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n },\n error: () => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }\n });\n }\n\n private isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return search(this.children);\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewRows = [];\n this.cdr.markForCheck();\n return;\n }\n this.applyFirstItemToTemplate();\n this.previewRows = this.items.slice(1).map(item =>\n cloneNodesForItem(this.children, item)\n );\n this.cdr.markForCheck();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length) return;\n\n for (const child of this.children) {\n if (!child.bindings?.length) continue;\n const ref = this.overlayService.getNodeRef(child);\n if (!ref?.componentRef) continue;\n\n for (const binding of child.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-button-block',\n template: `\n <button class=\"button-block-root\"\n [ngClass]=\"'iox-node-' + nodeId\"\n type=\"button\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n <ng-container *ngIf=\"!children.length\">\n <span class=\"button-block-placeholder\">Button</span>\n </ng-container>\n <div *ngFor=\"let child of children\"\n class=\"button-block-child\"\n [ngClass]=\"'iox-outer-' + (child.styleId ?? child.id)\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </button>\n `,\n styles: [`\n /* Only properties NOT controlled by the style engine — everything else comes\n from .iox-node-{id} generated by StyleRegistryService. Hardcoded values\n here would beat the style engine (Angular adds [_ngcontent] → 0,1,1 vs\n style engine's 0,1,0) and make style panel changes have no effect. */\n .button-block-root {\n /* Fill the iox-outer wrapper so the user-set width takes effect.\n width is an OUTER_PROP so the style engine writes it on the wrapper,\n not here — this 100% bridges outer wrapper → host → inner button.\n height is NOT 100% to avoid stretching inside a tall flex container. */\n width: 100%;\n font: inherit;\n color: inherit;\n text-decoration: none;\n box-sizing: border-box;\n }\n .button-block-placeholder {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(100, 116, 139, 0.4);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .button-block-child { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderButtonBlockComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() tag: 'button' | 'a' = 'button';\n @Input() href = '';\n @Input() target: '_self' | '_blank' = '_self';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() nodeId = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'panel-child',\n template: '<ng-template #tpl><ng-content></ng-content></ng-template>',\n standalone: false,\n})\nexport class PanelChildComponent {\n @Input() name!: string;\n @ViewChild('tpl', { static: true }) template!: TemplateRef<any>;\n}","import { AfterContentInit, Component, ContentChildren, OnDestroy, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PanelEvent, PanelEventService, PanelEventTypes } from '../panel-event.service';\nimport { PanelChildComponent } from './panel-child.component';\n\n@Component({\n selector: 'app-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n standalone: false,\n})\nexport class PanelComponent implements AfterContentInit, OnDestroy {\n public isPanelOpen = false;\n public activePanel: string | null = null;\n\n @ContentChildren(PanelChildComponent) panelChildren!: QueryList<PanelChildComponent>;\n\n private sub?: Subscription;\n\n constructor(private panelEventService: PanelEventService) {\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n this.activePanel = null;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_SELECTED || panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n this.activePanel = panelEvent.data;\n }\n });\n }\n\n ngAfterContentInit(): void {}\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n}","<div class=\"panel\">\n <ng-container *ngFor=\"let child of panelChildren\">\n <div class=\"panel-body\" [ngClass]=\"{ active: activePanel === child.name }\">\n <ng-container *ngTemplateOutlet=\"child.template\"></ng-container>\n </div>\n </ng-container>\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n ComponentNode,\n IoxInteraction,\n InteractionAction,\n InteractionTrigger,\n InteractionActionType,\n TRIGGER_OPTIONS,\n ACTION_TYPE_OPTIONS,\n EASING_OPTIONS,\n INVERSE_ACTION,\n generateNodeId,\n} from '../../models/component.model';\nimport { OverlayService } from '../../overlay/overlay.service';\n\n@Component({\n selector: 'app-interactions-panel',\n templateUrl: './interactions.component.html',\n styleUrls: ['./interactions.component.scss'],\n standalone: false,\n})\nexport class InteractionsPanelComponent implements OnInit, OnDestroy {\n @Input() node: ComponentNode | null = null;\n\n public triggerOptions = TRIGGER_OPTIONS;\n public actionTypeOptions = ACTION_TYPE_OPTIONS;\n public easingOptions = EASING_OPTIONS;\n public interactions: IoxInteraction[] = [];\n\n /** All canvas nodes available as animation targets. */\n public nodeOptions: { label: string; value: string }[] = [];\n\n /** State for the \"add interaction\" form */\n public isAdding = false;\n public newTrigger: InteractionTrigger = 'pageLoad';\n public newActionType: InteractionActionType = 'fadeIn';\n public newTarget = 'self';\n public newDuration = 600;\n public newDelay = 0;\n public newEasing: string = 'ease-out';\n public newOnce = true;\n\n /** Expanded interaction ID for editing */\n public expandedId: string | null = null;\n\n private selectSub?: Subscription;\n\n constructor(private overlayService: OverlayService) {}\n\n ngOnInit(): void {\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.node = entry?.node ?? null;\n this.interactions = this.node?.interactions ?? [];\n this.isAdding = false;\n this.expandedId = null;\n this.refreshNodeOptions();\n });\n }\n\n refreshNodeOptions(): void {\n const opts: { label: string; value: string }[] = [{ label: 'Self', value: 'self' }];\n for (const [node] of this.overlayService.getAllNodeEntries()) {\n if (!node.id || !node.label || node === this.node) continue;\n opts.push({ label: node.label, value: node.id });\n }\n this.nodeOptions = opts;\n }\n\n getTargetLabel(value: string): string {\n return this.nodeOptions.find(o => o.value === value)?.label ?? value;\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n getTriggerLabel(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.label ?? trigger;\n }\n\n getTriggerIcon(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.icon ?? 'ph-thin ph-lightning';\n }\n\n getActionLabel(type: InteractionActionType): string {\n return this.actionTypeOptions.find(a => a.value === type)?.label ?? type;\n }\n\n getActionsSummary(interaction: IoxInteraction): string {\n return interaction.actions.map(a => this.getActionLabel(a.type)).join(', ');\n }\n\n toggleExpand(id: string): void {\n this.expandedId = this.expandedId === id ? null : id;\n }\n\n // ── Add interaction ──────────────────────────────────────\n\n startAdd(): void {\n this.isAdding = true;\n this.newTrigger = 'pageLoad';\n this.newActionType = 'fadeIn';\n this.newTarget = 'self';\n this.newDuration = 600;\n this.newDelay = 0;\n this.newEasing = 'ease-out';\n this.newOnce = true;\n this.refreshNodeOptions();\n }\n\n cancelAdd(): void {\n this.isAdding = false;\n }\n\n confirmAdd(): void {\n if (!this.node) return;\n\n const action: InteractionAction = {\n type: this.newActionType,\n target: this.newTarget,\n duration: this.newDuration,\n delay: this.newDelay,\n easing: this.newEasing as InteractionAction['easing'],\n once: this.newOnce,\n };\n\n const interaction: IoxInteraction = {\n id: generateNodeId(),\n trigger: this.newTrigger,\n actions: [action],\n };\n\n if (!this.node.interactions) {\n this.node.interactions = [];\n }\n this.node.interactions.push(interaction);\n this.interactions = this.node.interactions;\n this.isAdding = false;\n }\n\n // ── Remove interaction ───────────────────────────────────\n\n removeInteraction(id: string): void {\n if (!this.node?.interactions) return;\n this.node.interactions = this.node.interactions.filter(i => i.id !== id);\n this.interactions = this.node.interactions;\n if (this.expandedId === id) {\n this.expandedId = null;\n }\n }\n\n // ── Add action to existing interaction ───────────────────\n\n addAction(interaction: IoxInteraction): void {\n interaction.actions.push({\n type: 'fadeIn',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n });\n }\n\n removeAction(interaction: IoxInteraction, index: number): void {\n interaction.actions.splice(index, 1);\n // Remove the interaction if it has no actions left\n if (interaction.actions.length === 0) {\n this.removeInteraction(interaction.id);\n }\n }\n\n // ── Toggle (reverse actions) ─────────────────────────────\n\n hasToggle(interaction: IoxInteraction): boolean {\n return !!interaction.reverseActions?.length;\n }\n\n enableToggle(interaction: IoxInteraction): void {\n // Auto-populate reverse actions as the logical inverse of primary actions.\n interaction.reverseActions = interaction.actions.map(a => ({\n ...a,\n type: (INVERSE_ACTION[a.type] ?? a.type) as InteractionActionType,\n }));\n }\n\n disableToggle(interaction: IoxInteraction): void {\n interaction.reverseActions = undefined;\n }\n\n addReverseAction(interaction: IoxInteraction): void {\n if (!interaction.reverseActions) interaction.reverseActions = [];\n interaction.reverseActions.push({\n type: 'fadeOut',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: false,\n });\n }\n\n removeReverseAction(interaction: IoxInteraction, index: number): void {\n if (!interaction.reverseActions) return;\n interaction.reverseActions.splice(index, 1);\n if (interaction.reverseActions.length === 0) {\n interaction.reverseActions = undefined;\n }\n }\n}\n","<div class=\"interactions-panel\">\n <!-- No element selected -->\n <div *ngIf=\"!node\" class=\"section-empty\">\n Select an element to manage interactions\n </div>\n\n <ng-container *ngIf=\"node\">\n <!-- Interaction cards -->\n <div *ngFor=\"let ix of interactions\" class=\"ix-card\" [class.is-expanded]=\"expandedId === ix.id\">\n <!-- Summary row -->\n <div class=\"ix-card-header\" (click)=\"toggleExpand(ix.id)\">\n <i [class]=\"getTriggerIcon(ix.trigger)\" class=\"ix-trigger-icon\"></i>\n <div class=\"ix-card-summary\">\n <span class=\"ix-trigger-label\">{{ getTriggerLabel(ix.trigger) }}</span>\n <span class=\"ix-arrow\">→</span>\n <span class=\"ix-action-label\">{{ getActionsSummary(ix) }}</span>\n </div>\n <button class=\"ix-remove-btn\" title=\"Remove\" (click)=\"removeInteraction(ix.id); $event.stopPropagation()\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <!-- Expanded detail -->\n <div *ngIf=\"expandedId === ix.id\" class=\"ix-card-body\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"ix.trigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n\n <div *ngFor=\"let action of ix.actions; let ai = index\" class=\"ix-action-row\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">\n Target {{ ai + 1 }}\n <span *ngIf=\"ix.actions.length > 1\" class=\"ix-action-target-badge\">\n → {{ getTargetLabel(action.target) }}\n </span>\n </span>\n <button *ngIf=\"ix.actions.length > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove action\"\n (click)=\"removeAction(ix, ai)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"action.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"action.target\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n <span *ngIf=\"nodeOptions.length === 1\" class=\"ix-target-hint\">\n Name elements in the Layers panel to target them\n </span>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"action.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"action.once\">\n Play once\n </label>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add target\n </button>\n\n <!-- Toggle section (click only) -->\n <ng-container *ngIf=\"ix.trigger === 'click'\">\n <div class=\"ix-toggle-header\">\n <span class=\"ix-toggle-label\">\n <i class=\"ph-thin ph-arrows-clockwise\"></i> 2nd click\n </span>\n <label class=\"ix-toggle-switch\">\n <input type=\"checkbox\"\n [checked]=\"hasToggle(ix)\"\n (change)=\"hasToggle(ix) ? disableToggle(ix) : enableToggle(ix)\">\n <span class=\"ix-toggle-track\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"hasToggle(ix)\">\n <div *ngFor=\"let ra of ix.reverseActions; let ri = index\" class=\"ix-action-row ix-action-row--reverse\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">\n Target {{ ri + 1 }}\n <span *ngIf=\"(ix.reverseActions?.length ?? 0) > 1\" class=\"ix-action-target-badge\">\n → {{ getTargetLabel(ra.target) }}\n </span>\n </span>\n <button *ngIf=\"(ix.reverseActions?.length ?? 0) > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove\"\n (click)=\"removeReverseAction(ix, ri)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"ra.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"ra.target\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"ra.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"ra.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"ra.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addReverseAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add target\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Add interaction form -->\n <div *ngIf=\"isAdding\" class=\"ix-add-form\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"newTrigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Action</label>\n <select [(ngModel)]=\"newActionType\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"newTarget\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n <span *ngIf=\"nodeOptions.length === 1\" class=\"ix-target-hint\">\n Name elements in the Layers panel to target them\n </span>\n </div>\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDuration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDelay\" min=\"0\" step=\"50\">\n </div>\n </div>\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"newEasing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"newOnce\">\n Play once\n </label>\n </div>\n <div class=\"ix-form-actions\">\n <button class=\"ix-btn ix-btn--secondary\" (click)=\"cancelAdd()\">Cancel</button>\n <button class=\"ix-btn ix-btn--primary\" (click)=\"confirmAdd()\">Add</button>\n </div>\n </div>\n\n <!-- Add button -->\n <button *ngIf=\"!isAdding\" class=\"ix-add-btn\" (click)=\"startAdd()\">\n <i class=\"ph-thin ph-plus\"></i> Add interaction\n </button>\n </ng-container>\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface HistoryEntry {\n layout: ComponentNode[];\n timestamp: number;\n}\n\nconst MAX_HISTORY = 50;\n\n/**\n * BuilderHistoryService — snapshot-based undo/redo for the page builder.\n *\n * Snapshots are JSON deep-clones of the full layout array.\n * Session-only — not persisted to the backend.\n * Scoped to PageUiComponent.providers[] — one history stack per builder instance.\n */\n@Injectable()\nexport class BuilderHistoryService {\n private _past: HistoryEntry[] = [];\n private _future: HistoryEntry[] = [];\n\n get canUndo(): boolean { return this._past.length > 1; }\n get canRedo(): boolean { return this._future.length > 0; }\n\n push(layout: ComponentNode[]): void {\n this._past.push({ layout: JSON.parse(JSON.stringify(layout)), timestamp: Date.now() });\n if (this._past.length > MAX_HISTORY) {\n this._past.shift();\n }\n this._future = [];\n }\n\n undo(): ComponentNode[] | null {\n if (!this.canUndo) return null;\n const current = this._past.pop()!;\n this._future.unshift(current);\n return JSON.parse(JSON.stringify(this._past[this._past.length - 1].layout));\n }\n\n redo(): ComponentNode[] | null {\n if (!this.canRedo) return null;\n const next = this._future.shift()!;\n this._past.push(next);\n return JSON.parse(JSON.stringify(next.layout));\n }\n\n clear(): void {\n this._past = [];\n this._future = [];\n }\n}\n","import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IoxPageModule } from '@vectoriox/iox-ui';\n\nimport { BuilderComponent } from './builder.component';\nimport { SectionComponent } from './components/section/section.component';\nimport { BuilderContainerComponent } from './components/container/container.component';\nimport { BuilderLinkedContainerComponent } from './components/linked-container/linked-container.component';\nimport { BuilderRepeaterComponent } from './components/repeater/repeater.component';\nimport { BuilderButtonBlockComponent } from './components/button-block/button-block.component';\nimport { OverlayComponent } from './overlay/overlay.component';\nimport { ToolbarComponent } from './toolbar/toolbar.component';\nimport { RenderDirective } from './render/render.directive';\nimport { IoxDraggableDirective } from './directives/iox-draggable.directive';\nimport { IoxDropzoneDirective } from './directives/iox-dropzone.directive';\nimport { PanelComponent } from './panels/panel/panel.component';\nimport { PanelChildComponent } from './panels/panel/panel-child.component';\nimport { LayerTreeComponent } from './panels/layer-tree/layer-tree.component';\nimport { InteractionsPanelComponent } from './panels/interactions/interactions.component';\n\nimport { DragEngineService } from './services/drag-engine.service';\nimport { OverlayService } from './overlay/overlay.service';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { StyleRegistryService } from './services/style-registry.service';\nimport { PanelEventService } from './panels/panel-event.service';\nimport { PresetRegistryService } from './services/preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { BuilderHistoryService } from './services/builder-history.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\n\n// StylePanelComponent and PagePanelComponent use <dynamic-input> which must be\n// provided by the consuming app (InputsModule). Declare them there, not here.\nconst DECLARATIONS = [\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n];\n\n@NgModule({\n declarations: DECLARATIONS,\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n ],\n providers: [\n DragEngineService,\n OverlayService,\n ComponentRegistryService,\n DataSourceRegistryService,\n InteractionEngineService,\n ViewportService,\n StyleRegistryService,\n PanelEventService,\n PresetRegistryService,\n SymbolRegistryService,\n InteractionPresetRegistryService,\n BuilderHistoryService,\n BuilderClipboardService,\n ],\n exports: [\n // Angular/PrimeNG modules re-exported so consumers can use them\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n // Builder declarations\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderButtonComponentConfig extends ComponentConfig {\n constructor() {\n super('Button', 'app-builder-button', 'ph-thin ph-cursor-click', 'Basic');\n this.inputs = {\n label: 'text',\n link: 'text',\n variant: 'select'\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click me'),\n new TraitConfig('link', 'Link', TraitInputType.Text, undefined, '#'),\n new TraitConfig('variant', 'Variant', TraitInputType.Select, ['primary', 'outlined', 'text'], 'primary'),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class ButtonBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('ButtonBlock', 'app-builder-button-block', 'ph-thin ph-cursor-click', 'Basic');\n this.children = [];\n this.inputs = {\n tag: 'select',\n href: 'text',\n target: 'select',\n type: 'select',\n };\n this.traits = [\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['button', 'a'], 'button'),\n new TraitConfig('href', 'URL', TraitInputType.Text, undefined, '', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('target', 'Target', TraitInputType.Select, ['_self', '_blank'], '_self', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('type', 'Type', TraitInputType.Select, ['button', 'submit', 'reset'], 'button', false, { trait: 'tag', values: 'button' }),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n width: 'auto',\n height: 'auto',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: 'pointer',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class CardComponentConfig extends ComponentConfig {\n constructor() {\n super('Card', 'app-card', 'ph-thin ph-cards', 'Content');\n this.inputs = {\n title: 'text',\n image: 'image',\n description: 'text'\n };\n this.traits = [\n new TraitConfig('title', 'Title', TraitInputType.Text, undefined, 'Default Title'),\n new TraitConfig('image', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://via.placeholder.com/150'),\n new TraitConfig('description', 'Description', TraitInputType.Text, undefined, 'This is a default card description.')\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\n padding: '16px 16px 16px 16px',\n borderWidth: '1px 1px 1px 1px',\n borderStyle: 'solid',\n borderColor: '#cccccc',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n });\n }\n}","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderContainerComponentConfig extends ComponentConfig {\n constructor() {\n super('Container', 'app-builder-container', 'ph-thin ph-square', 'Layout');\n this.children = [];\n this.traits = [\n new TraitConfig('htmlTag', 'HTML Tag', TraitInputType.Select,\n ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'],\n 'div'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderDividerComponentConfig extends ComponentConfig {\n constructor() {\n super('Divider', 'app-builder-divider', 'ph-thin ph-minus', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderHeadingComponentConfig extends ComponentConfig {\n constructor() {\n super('Heading', 'app-builder-heading', 'ph-thin ph-text-h', 'Basic');\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Heading'),\n new TraitConfig('level', 'Level', TraitInputType.Select,\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], 'h2'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderIconComponentConfig extends ComponentConfig {\n constructor() {\n super('Icon', 'app-builder-icon', 'ph-thin ph-star', 'Basic');\n this.traits = [\n new TraitConfig('iconClass', 'Icon', TraitInputType.Icon, undefined, 'ph-thin ph-star'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '24px',\n color: '#374151',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderImageComponentConfig extends ComponentConfig {\n constructor() {\n super('Image', 'app-builder-image', 'ph-thin ph-image', 'Basic');\n this.inputs = {\n src: 'text',\n alt: 'text',\n objectFit: 'select'\n };\n this.traits = [\n new TraitConfig('src', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://placehold.co/600x400?text=Image'),\n new TraitConfig('alt', 'Alt Text', TraitInputType.Text, undefined, 'Image'),\n new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select, ['cover', 'contain', 'fill', 'none'], 'cover'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkComponentConfig extends ComponentConfig {\n constructor() {\n super('Link', 'app-builder-link', 'ph-thin ph-link', 'Basic');\n this.inputs = {\n label: 'text',\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click here'),\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkedContainerConfig extends ComponentConfig {\n constructor() {\n super('LinkedContainer', 'app-builder-linked-container', 'ph-thin ph-link-simple', 'Layout');\n this.children = [];\n this.inputs = {\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n buildFullStyleTraits,\n} from '../../models/component.model';\n\nexport class BuilderListItemComponentConfig extends ComponentConfig {\n constructor() {\n super('ListItem', 'app-builder-container', 'ph-thin ph-list-dashes', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['li'], 'li'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.children = [];\n this.applyStyleDefaults({\n width: '100%',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class TextBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('Text', 'app-text-block', 'ph-thin ph-text-aa', 'Basic');\n this.inputs = {\n content: 'text',\n tag: 'select',\n };\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Enter text here'),\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['p', 'span'], 'p'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n display: 'block',\n width: '100%',\n height: 'auto',\n minHeight: '20px',\n padding: '10px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentNode,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n ListGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\nimport { BuilderListItemComponentConfig } from '../list-item/list-item.config';\nimport { TextBlockComponentConfig } from '../text/text.config';\n\nexport class BuilderListComponentConfig extends ComponentConfig {\n constructor() {\n super('List', 'app-builder-container', 'ph-thin ph-list', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['ul', 'ol'], 'ul'),\n new TraitConfig('start', 'Start At', TraitInputType.Number, undefined, 1, false,\n { trait: 'htmlTag', values: 'ol' }),\n new TraitConfig('reversed', 'Reversed', TraitInputType.Checkbox, undefined, false, false,\n { trait: 'htmlTag', values: 'ol' }),\n ];\n this.styleTraits = [\n new ListGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.children = [\n this.makeListItem(),\n this.makeListItem(),\n this.makeListItem(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n display: 'block',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 24px',\n });\n }\n\n private makeListItem(): ComponentNode {\n const item = new BuilderListItemComponentConfig();\n const textCfg = new TextBlockComponentConfig();\n const contentTrait = textCfg.traits.find(t => t.name === 'content');\n if (contentTrait) contentTrait.default = 'List item';\n item.children = [textCfg];\n return item;\n }\n}\n","import { ComponentConfig, ComponentTrait, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class RepeaterComponentConfig extends ComponentConfig {\n constructor() {\n super('Repeater', 'app-builder-repeater', 'ph-thin ph-repeat', 'Data');\n this.children = [];\n this.traits = [\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n {\n name: 'limit',\n label: 'Limit',\n type: TraitInputType.Number,\n default: 10,\n } as ComponentTrait,\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class SectionComponentConfig extends ComponentConfig {\n constructor() {\n super('Section', 'app-section', 'ph-thin ph-rows', 'Layout');\n this.children = [];\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderSpacerComponentConfig extends ComponentConfig {\n constructor() {\n super('Spacer', 'app-builder-spacer', 'ph-thin ph-arrows-vertical', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: '40px',\n });\n }\n}\n","/*\n * Public API Surface of @vectoriox/iox-builder\n */\n\nexport * from './lib/iox-builder.module';\nexport * from './lib/builder.component';\nexport * from './lib/render/render.directive';\nexport { StyleCategory, IoxBinding, DsFilterByRouteParam, DsFilterByQueryParam, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, INVERSE_ACTION, ElementState, SUPPORTED_STATES, INTERACTION_STATES, STRUCTURAL_STATES, ComponentNode, TraitInputType, TraitOptionMap, TraitSelectOption, QuadSizeSegment, TraitShowCondition, ComponentTrait, StyleTrait, StyleTraitGroup, generateNodeId, ComponentConfig, TraitConfig, StyleTraitConfig, GroupStyleConfig, UNITS_ALL, UNITS_NO_VW, UNITS_FIXED, UNITS_DEG, resolveTraitControllerType, resolveTraitOptions, StylePreset, buildPresetStyleTraits, buildFullStyleTraits, ListGroupStyleConfig, IoxSymbol, InteractionPreset } from './lib/models/component.model';\nexport * from './lib/services/symbol-registry.service';\nexport * from './lib/services/interaction-preset-registry.service';\nexport * from './lib/services/builder-history.service';\nexport * from './lib/services/builder-clipboard.service';\nexport * from './lib/panels/panel.model';\nexport * from './lib/panels/panel-event.service';\nexport * from './lib/tokens/builder.tokens';\nexport * from './lib/services/component-registry.service';\nexport * from './lib/services/data-source-registry.service';\nexport * from './lib/services/drag-engine.service';\nexport * from './lib/services/style-registry.service';\nexport * from './lib/services/viewport.service';\nexport * from './lib/services/preset-registry.service';\nexport * from './lib/overlay/overlay.service';\nexport * from './lib/overlay/overlay.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/directives/iox-draggable.directive';\nexport * from './lib/directives/iox-dropzone.directive';\nexport * from './lib/panels/panel/panel.component';\nexport * from './lib/panels/panel/panel-child.component';\nexport * from './lib/panels/layer-tree/layer-tree.component';\nexport * from './lib/panels/interactions/interactions.component';\nexport * from './lib/services/interaction-engine.service';\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from './lib/style-compose';\n\n// Component classes (builder variants with drag/drop)\nexport * from './lib/components/section/section.component';\nexport * from './lib/components/container/container.component';\nexport * from './lib/components/linked-container/linked-container.component';\nexport * from './lib/components/repeater/repeater.component';\nexport * from './lib/components/button-block/button-block.component';\n\n// Component configs\nexport * from './lib/components/button/button.config';\nexport * from './lib/components/button-block/button-block.config';\nexport * from './lib/components/card/card.config';\nexport * from './lib/components/container/container.config';\nexport * from './lib/components/divider/divider.config';\nexport * from './lib/components/heading/heading.config';\nexport * from './lib/components/icon/icon.config';\nexport * from './lib/components/image/image.config';\nexport * from './lib/components/link/link.config';\nexport * from './lib/components/linked-container/linked-container.config';\nexport * from './lib/components/list/list.config';\nexport * from './lib/components/list-item/list-item.config';\nexport * from './lib/components/repeater/repeater.config';\nexport * from './lib/components/section/section.config';\nexport * from './lib/components/spacer/spacer.config';\nexport * from './lib/components/text/text.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EASING_OPTIONS","i1.ComponentRegistryService","i1.OverlayService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i1.DragEngineService","i2.ViewportService","i3.PresetRegistryService","i4.SymbolRegistryService","i5.InteractionPresetRegistryService","i6.InteractionEngineService","i7.BuilderClipboardService","i8.StyleRegistryService","i9.PanelEventService","i10","i1","i2","i3","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8.InteractionPresetRegistryService","i9.BuilderClipboardService","i11","i14.RenderDirective","i15.IoxDraggableDirective","i16.OverlayComponent","i17.ToolbarComponent","i18.LayerTreeComponent","i3.RenderDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i3.DataSourceRegistryService","i4.PanelEventService","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i1.PanelEventService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;IAGY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;AAChC,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,aAA8B;AAC9B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;AAClC,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;;AAE9B,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;;AAE1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;;AAEhC,IAAA,eAAA,CAAA,yBAAA,CAAA,GAAA,uBAAiD;;AAEjD,IAAA,eAAA,CAAA,6BAAA,CAAA,GAAA,2BAAyD;AAC7D,CAAC,EApBW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;MA4Bd,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAc;AASxD,IAAA;AAPG,IAAA,SAAS,CAAC,IAAsC,EAAA;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;IAChE;IAEA,IAAI,CAAC,IAAqB,EAAE,IAAU,EAAA;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C;+GATS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;IC9BW;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EALW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAkBf,MAAM,uBAAuB,GAA0E;IAC1G,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAQ,WAAW,EAAE,cAAc,EAAE;IACxE,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAG,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAM,WAAW,EAAE,0BAA0B,EAAE;IACrF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,6BAA6B,EAAE;IACxF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,eAAe,EAAE;IAC1E,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,yBAAyB,EAAE;;AAGjF,MAAMA,gBAAc,GAAuC;AAC9D,IAAA,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAE;AACxC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAO,KAAK,EAAE,SAAS,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,UAAU,EAAM,KAAK,EAAE,UAAU,EAAE;AAC5C,IAAA,EAAE,KAAK,EAAE,aAAa,EAAG,KAAK,EAAE,aAAa,EAAE;AAC/C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,QAAQ,EAAE;AAC1C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,mCAAmC,EAAE;;SAoCzD,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA,KAAK,EAAE;AACH,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,cAAc,EAAE,OAAO;AACvB,YAAA,kBAAkB,EAAE,mDAAmD;AACvE,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA;AACD,QAAA,cAAc,EAAE;AACZ,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA;KACJ;AACL;IAEY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B;AAC7B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,0BAAmD;AACnD,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAjBW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAmBb;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAC3B,CAAC,EAHW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAKV;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAMX;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAef,MAAM,cAAc,GAAmB;IAC1C,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACpG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACxG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;;AAQpG,MAAM,YAAY,GAAiB;AACtC,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;AAC7B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;;AAQ3B,MAAM,oBAAoB,GAAwB;AACrD,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;;;MCzKrB,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,UAAU,GAAwE,EAAE;AAsB/F,IAAA;AApBG,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,IAAI;IACnD;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;QAChD,OAAO,UAAU,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI;IAC/C;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAE,SAAoB,EAAE,MAAW,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;IACvD;IAEA,MAAM,GAAA;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;+GAtBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MC+BY,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC7D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA0B;AAE5C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QAE1C,IAAA,CAAA,gBAAgB,GAAuB,IAAI;QAC3C,IAAA,CAAA,sBAAsB,GAAuB,IAAI;;AAGlD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAe;;AAG7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAA4B;AA0GhE,IAAA;IAxGG,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAA;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;IACrC;IAEA,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA,IAAA,kBAAkB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QAChC,IAAI,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE;IAC9C;IAEA,kBAAkB,GAAA;QACd,OAAO,IAAI,CAAC,sBAAsB;IACtC;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAC9B,QAAA,OAAQ,IAAI,CAAC,iBAAiC,IAAI,IAAI;IAC1D;;AAGA,IAAA,YAAY,CAAC,IAAmB,EAAE,OAAoB,EAAE,YAA+B,EAAA;AACnF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACrD;AAEA,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;;IAGA,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACjC;;AAGA,IAAA,iBAAiB,CAAC,OAAoB,EAAA;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YACxB;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,QAAQ,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAA;QACnE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,OAAO,KAAK,OAAO;YAAE;QACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACnG;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEA,SAAS,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAE,IAAoB,EAAE,YAAgC,EAAA;AAC5H,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACjF;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,aAAa,GAAA;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C;;AAGA,IAAA,mBAAmB,CAAC,OAAoB,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACpD;AAEA,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;AAGzC,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,aAA6B,IAAI,IAAI;QAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC3C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAS,KAAI,EAAG,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO;AACH,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAO,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAO,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAO,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;AAClI,YAAA,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAM,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAM,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAM,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AACnI,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE;SAC1I;IACL;+GAvHS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACZD,SAAS,aAAa,CAAC,IAAmB,EAAA;AACtC,IAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,KAAK;AAChB;AAEA,SAAS,aAAa,CAAC,IAAmB,EAAA;AACtC,IAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,OAAO,GAAG,SAAS;IACxB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC;AAChD;MAGa,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,QAAkC,EAAA;QAAlC,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QAgEpB,IAAA,CAAA,GAAG,GAAa,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAQ,IAAI,GAAG,EAAuB;AAC3C,QAAA,IAAA,CAAA,OAAO,GAAM,IAAI,GAAG,EAAiB;AACrC,QAAA,IAAA,CAAA,MAAM,GAAO,IAAI,GAAG,EAA6B;AACjD,QAAA,IAAA,CAAA,SAAS,GAAI,IAAI,GAAG,EAAqC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAsB;AAEnC,QAAA,IAAA,CAAA,IAAI,GAAY,IAAI,eAAe,CAAW,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAU,KAAK,CAAC;AACnD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAgB,IAAI,CAAC;;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAiB;;QAIpD,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,QAAQ,GAAuB,IAAI;QACnC,IAAA,CAAA,SAAS,GAAuB,IAAI;AAE5C;;;;AAIG;QACK,IAAA,CAAA,QAAQ,GAAuB,IAAI;;QAEnC,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,YAAY,GAAG,CAAC;;QAIhB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,aAAa,GAAG,CAAC;;QAIjB,IAAA,CAAA,aAAa,GAAkB,IAAI;;QAGnC,IAAA,CAAA,cAAc,GAAuB,IAAI;;QAIzC,IAAA,CAAA,UAAU,GAAuB,IAAI;QACrC,IAAA,CAAA,qBAAqB,GAAkB,IAAI;QAC3C,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC;QACpB,IAAA,CAAA,aAAa,GAAG,CAAC;;AAGjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAe;;QAIjC,IAAA,CAAA,MAAM,GAAG,CAAC;;AAOV,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAmB;;QAYtC,IAAA,CAAA,cAAc,GAAG,EAAE;QAC5B,IAAA,CAAA,oBAAoB,GAAkB,IAAI;IAzIO;;IAIzD,UAAU,CACN,QAAyB,EACzB,KAAmB,EACnB,UAAkB,EAClB,GAAsB,EACtB,SAAsB,EAAA;AAEtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAc,CAAC;YACjE,IAAI,MAAM,EAAE;gBACR,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE;YACjC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;YAC3E,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAS,CAAC,EAAE,aAAa,EAAE;gBACnD;gBACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;gBACrC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC;iBAAO;;;;;AAKH,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;gBAClC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;QAEA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;AAC5E,YAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;YACrC,GAAG,CAAC,aAAa,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;QACA,SAAS,IAAI;IACjB;;IA4DA,QAAQ,CAAC,KAAa,EAAA,EAAU,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAM7C,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvE;IACJ;;;;AAWQ,IAAA,MAAM,CAAC,EAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IAC5D;;;;IAMA,gBAAgB,CACZ,EAAU,EACV,EAAe,EACf,IAAW,EACX,GAAsB,EACtB,MAAiC,EACjC,QAAqB,EAAA;AAErB,QAAA,IAAI,CAAC,EAAE;YAAE;;AAGT,QAAA,EAAE,CAAC,EAAE,GAAG,EAAE;QAEV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAC9B,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAEhD,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAClB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,OAAO,EAAE,SAAS;AACrB,SAAA,CAAC;IACN;IAEA,kBAAkB,CAAC,EAAU,EAAE,EAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;;;;IAMA,iBAAiB,CAAC,EAAe,EAAE,UAA6B,EAAA;AAC5D,QAAA,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAEzC,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;;;AAGnB,YAAA,UAAU,EAAE,0BAA0B;AACtC,YAAA,SAAS,EAAE;AACP,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;gBAC1D,IAAI,EAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzC,GAAG,EAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,aAAA;AACD,YAAA,SAAS,EAAE,EAAE;AAChB,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,EAAe,EAAA;AAC/B,QAAA,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC;AACxC,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA,EAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,IAAA,MAAM,CAAC,EAAU,EAAA,EAAmC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,IAAA,cAAc,CAAC,EAAU,EAAA,EAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjE,iBAAiB,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,OAAO,CAAC;IACZ;;;;AAMQ,IAAA,YAAY,CAAC,KAAU,EAAE,EAAe,EAAE,UAA6B,EAAA;AAC3E,QAAA,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAE3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;AAoBnC,YAAA,MAAM,MAAM,GAAI,EAAE,CAAC,iBAAiC,IAAI,EAAE;AAC1D,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;;;;;AAM7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;;;;;AAMzB,YAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAgB;;;;;;AAMnD,YAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC;AACjD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACjD,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG;gBAClB,gBAAgB;gBAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;gBACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;AACnB,gBAAA,CAAA,MAAA,EAAS,QAAQ,CAAA,EAAA,CAAI;AACrB,gBAAA,CAAA,OAAA,EAAU,SAAS,CAAA,EAAA,CAAI;AACvB,gBAAA,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,CAAG;gBAC3B,2BAA2B;gBAC3B,qBAAqB;gBACrB,iBAAiB;gBACjB,cAAc;gBACd,UAAU;AACb,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACX,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGrB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC9C;aAAO;;AAEH,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC;QAEA,IAAI,CAAC,cAAc,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAU,EAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;;AAGnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;YACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;QAC1E;QAEA,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAEQ,IAAA,UAAU,CAAC,KAAU,EAAA;;AAEzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACtD;AACA,QAAA,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB;AAC9C,aAAA,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;;QAGjE,IAAI,CAAC,cAAc,EAAE;;QAGrB,IAAI,CAAC,gBAAgB,EAAE;QACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;;AAGxD,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;AACvB,YAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QAErB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAC/F,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD;;;;IAMQ,WAAW,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC7D;;;;AAMQ,IAAA,mBAAmB,CAAC,OAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;QAChF,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,WAAW;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,wCAAwC;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;IACzB;;;;IAMQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;QAE7B,IAAI,MAAM,GAAkB,IAAI;QAChC,IAAI,QAAQ,GAAG,QAAQ;AAEvB,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,EAAE;gBAAE;;;AAGT,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAAE;;;AAGlC,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM;gBAAE;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAC1E,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACrC,gBAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;oBAAE,QAAQ,GAAG,IAAI;oBAAE,MAAM,GAAG,EAAE;gBAAE;YACzD;QACJ;;;;;;;;;;;AAYA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACpD,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBACjG,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM;gBAC7E,IAAI,MAAM,EAAE;oBAAE,MAAM,GAAG,gBAAgB;gBAAE;qBACpC;AAAE,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAAE;YAC7C;iBAAO;AACH,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YACpC;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC1B,YAAA,MAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,EAAE;AACJ,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;gBAC9E,MAAM,QAAQ,GACV,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc;oBACpC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;;;AAG3C,gBAAA,MAAM,oBAAoB,GACtB,IAAI,CAAC,aAAa,KAAK,MAAM;oBAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC1D,gBAAA,IAAI,QAAQ,IAAI,oBAAoB,EAAE;AAClC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM;oBAClC,MAAM,GAAG,gBAAgB;gBAC7B;YACJ;QACJ;AAEA,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,gBAAA,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1C;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;YAC3B,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;YACvD;;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG7B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;IACJ;;;;;;AAQA;AAC6E;IAC7E,mBAAmB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QACvB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;IAC/C;AAEQ,IAAA,kBAAkB,CAAC,QAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,gBAAgB,EAAE;YAC5C,IAAI,CAAC,oBAAoB,EAAE;YAC3B;QACJ;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE;YAAE,IAAI,CAAC,oBAAoB,EAAE;YAAE;QAAQ;AAEhD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,yBAAyB;YACzD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD;AAEA,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG;YAChC,gBAAgB;YAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;YACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;YACnB,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI;YACvB,CAAA,OAAA,EAAU,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI;YACzB,qBAAqB;YACrB,cAAc;YACd,uBAAuB;AAC1B,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;AACrB,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa;QAC7B,OAAO,MAAM,EAAE;AACX,YAAA,IAAI,MAAM,CAAC,EAAE,KAAK,gBAAgB;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC3D,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa;QACjC;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;AAIG;IACK,qBAAqB,CAAC,OAAsB,EAAE,QAAgB,EAAA;AAClE,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrC;;;;IAMQ,gBAAgB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,IAAI,QAAQ,KAAK,IAAI,CAAC,qBAAqB,EAAE;AACzE,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC1C;IACJ;IAEQ,kBAAkB,CAAC,WAAmB,EAAE,KAAa,EAAA;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,KAAK,GACP,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,KAAK,WAAW;QAEnE,IAAI,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;AAEA,QAAA,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU;QACpC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,sBAAsB;YAElD,IAAI,KAAK,EAAE;;;;;AAKP,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2CAA2C;wBAC3C,oEAAoE;AACpE,wBAAA,gEAAgE;YACxE;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2DAA2D;wBAC3D,6CAA6C;AAC7C,wBAAA,iEAAiE;YACzE;QACJ;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,WAAW;AAExC,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;;QAGD,IAAI,WAAW,GAAiC,IAAI;QACpD,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,WAAW,GAAG,IAAI,GAAG,EAAoB;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3C,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;oBAC3B,WAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC1D;AACJ,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC1B,YAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;aAAO;AACH,YAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC3C,MAAM,MAAM,GAAG,WAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE;gBAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;gBACnC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAI,KAAK,CAAC,GAAG;AAClC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;oBAAE;gBAE9C,MAAM,EAAE,GAAG,KAAoB;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;;AAErB,gBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;gBAC5B,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,aAAa,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,GAAA,CAAK;gBAClD,qBAAqB,CAAC,MAAK;AACvB,oBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB;AAC5C,oBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,MAAK;gBAC5C,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE;gBACtB,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAI,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;qBAAO;oBACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC7B;;;;AAMA,IAAA,eAAe,CAAC,WAAmB,EAAA;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC;AAExB,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,YAAY,GACd,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAChD,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;QACJ;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;+GA3tBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;AC3BD;;;;;;;AAOG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAiBnD,IAAA;AAfG,IAAA,cAAc,CAAC,EAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB;IAEA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IAC1B;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC;IACzD;IAEA,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E;+GAnBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACED,MAAM,WAAW,GAAG,sBAAsB;MAG7B,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,KAAK,GAAkB,IAAI,CAAC,eAAe,EAAE;QAE7C,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAoGnD,IAAA;IAlGG,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IAC3B;AAEA,IAAA,SAAS,CAAC,MAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACvE;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IAC7D;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,OAAO;QACvC,IAAI,MAAM,IAAI,CAAC;YAAE;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEA;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,cAAsB,EAAE,eAAuB,EAAE,OAAO,GAAG,EAAE,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,cAAc,GAAG,OAAO;AACxC,QAAA,MAAM,OAAO,GAAG,eAAe,GAAG,OAAO;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC;YAAE;QAClC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QACzC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,OAAe,EAAE,OAAe,EAAE,UAAmB,EAAA;QAChE,OAAO;AACH,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AACjD,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;SACnD;IACL;AAEQ,IAAA,MAAM,CAAC,OAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE;IACxB;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI;AACA,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE;QAAE,MAAM,EAAC;IACb;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAkB;YAC5B,MAAM,EAAE,UAAU,CAAC,OAAO;AAC1B,YAAA,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;AAC9B,YAAA,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;AAChC,YAAA,KAAK,EAAE,IAAI;SACd;AACD,QAAA,IAAI;YACA,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7C,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,QAAQ;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;kBACtE,KAAK,CAAC;AACR,kBAAE,QAAQ,CAAC,MAAM;YACrB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;YAC/E,OAAO;gBACH,MAAM;gBACN,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;gBACtF,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3F,gBAAA,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;aACpG;QACL;AAAE,QAAA,MAAM;AACJ,YAAA,OAAO,QAAQ;QACnB;IACJ;+GAvGS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACFD;;;;;;AAMG;MAEU,wBAAwB,CAAA;AA2BjC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;AA1B1B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwC;;AAG1D,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAe;AAElD;;;AAGG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAmB;AAEjD;;;;AAIG;AACK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA+B;;QAGhD,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,CAAC;YACtC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM;AAC7E,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjB;;AAGrD,IAAA,MAAM,CAAC,IAAmB,EAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;;;AAItC,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACT,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,EAAE;AACT,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC3C;gBACA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,QAAQ,GAA0B,EAAE;AAE1C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;;;;;;AAMhC,YAAA,MAAM,YAAY,GAAG,SAAS,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO;YAClF,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;oBAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;wBAC/C,IAAI,MAAM,EAAE;AACR,4BAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;wBACtC;6BAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAClD,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AAC3D,4BAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;4BACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;wBAClD;oBACJ;gBACJ;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;AAC7D,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;IACrC;;AAGA,IAAA,MAAM,CAAC,IAAmB,EAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,KAAK,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;AAG1B,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD;QACJ;;;QAIA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;;oBAE7B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAC3C,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;wBACxD,IAAI,OAAO,EAAE;AACT,4BAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;AAClD,4BAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;gCACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;4BACtD;iCAAO;gCACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;4BAC/C;wBACJ;oBACJ;;oBAEA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC/C,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC9C,wBAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/C,wBAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzC;gBACJ;YACJ;QACJ;IACJ;;AAGA,IAAA,OAAO,CAAC,IAAmB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACrB;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;;AAEpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;;;AAKA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClD;YACJ;QACJ;AAEA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QACrC;IACJ;;AAIQ,IAAA,iBAAiB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;;;QAGnF,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,OAAO,KAAK,UAAU,IAAI,EAAE,CAAC,OAAO,KAAK,eAAe,IAAI,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,EAAE;AAC1H,YAAA,OAAO,MAAK,EAAE,CAAC;QACnB;AACA,QAAA,QAAQ,EAAE,CAAC,OAAO;AACd,YAAA,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,YAAA,KAAK,eAAe;gBAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACtD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,gBAAgB;;AAEjB,gBAAA,OAAO,MAAK,EAAE,CAAC;AACnB,YAAA;AACI,gBAAA,OAAO,MAAK,EAAE,CAAC;;IAE3B;;AAIQ,IAAA,cAAc,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAChF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC1B,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YAC5E;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;YACrC;QACJ,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;IACpC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AACrF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;QAClC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,KAAI;AAClD,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE;oBACjB,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE;;;AAGvD,oBAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAK;4BACjC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gCAAE;AACvD,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;4BACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;AACrC,wBAAA,CAAC,CAAC;wBACF;oBACJ;AACA,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;gBACrC;YACJ;AACJ,QAAA,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACtB,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;IACtC;IAEQ,aAAa,GAAA;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7D;;AAGQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;AAC7C,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa;QAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,KAAK;IAChB;;IAGQ,iBAAiB,CAAC,OAAoB,EAAE,QAAoB,EAAA;QAChE,MAAM,IAAI,GAAG,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;YACd;iBAAO;gBACH,qBAAqB,CAAC,IAAI,CAAC;YAC/B;AACJ,QAAA,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;QAC7E,MAAM,OAAO,GAAG,MAAK;AACjB,YAAA,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE;;AAE3B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK;AACvD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;AACjE,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;YAC5C;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;YACrC;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9D;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAC7E,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAK;;AAEtB,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;YACtC;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,MAAK;AACR,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AACvD,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AAC3D,QAAA,CAAC;IACL;;IAIQ,UAAU,CAAC,IAAmB,EAAE,OAA4B,EAAA;AAChE,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC;IACJ;IAEQ,aAAa,CAAC,SAAwB,EAAE,MAAyB,EAAA;AACrE,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;AACrD,YAAA,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI;QAC/B;;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE;AAC5D,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,GAAG,CAAC,OAAO;QAClD;AACA,QAAA,OAAO,IAAI;IACf;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;AAGvB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,MAAM;AACf,SAAA,CAAC;QAEF,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;;;gBAGtC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,oBAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACtE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;;;AAGzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;gBACpB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;YACvD,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;IACJ;AAEA;;;;;;;;AAQG;IACK,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;AACvB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAA2B;AACpD,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5C,OAAO,CAAC,KAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QAC9C;;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;QAChC,IAAI,OAAO,KAAK,GAAG,IAAK,OAAe,KAAK,CAAC,EAAE;YAC3C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;IACvC;AAEQ,IAAA,0BAA0B,CAAC,OAAoB,EAAA;AACnD,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;AACzC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;AAC1C,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAClD;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;QAGvB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,UAAU;AACnB,SAAA,CAAC;IACN;AAEQ,IAAA,cAAc,CAAC,MAAyB,EAAA;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE;QAC9C,IAAI,SAAS,GAAe,EAAE;AAE9B,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACT,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,QAAQ;gBACT,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,WAAW;gBACZ,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,SAAS;gBACV,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,GAAG;AAC7C,gBAAA,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,IAAA,CAAM,EAAE,CAAC;gBAC/E;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,kBAAkB;;AAEnB,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;;QAGR,OAAO;YACH,SAAS;AACT,YAAA,OAAO,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,IAAI,EAAE,UAAU;AACnB,aAAA;SACJ;IACL;+GA1bS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;AClBD;;;;;AAKG;MAEU,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA6B;AAwBzD,IAAA;AAtBG,IAAA,UAAU,CAAC,OAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAyB,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;+GAxBS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhC,gCAAgC,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACAD;;;;;;AAMG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAqB,EAAE;AAmBvC,IAAA;AAjBG,IAAA,QAAQ,CAAC,IAAmB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;IAC3D;AAEA,IAAA,UAAU,CAAC,QAAgB,EAAA;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;IAC5C;AAEA,IAAA,qBAAqB,CAAC,mBAA2B,EAAA;QAC7C,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE;IACvD;IAEA,OAAO,GAAA,EAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,WAAW,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,sBAAsB,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEtF,KAAK,GAAA,EAAW,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;+GAnBxB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACjBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA,MAAM,WAAW,GAA+C;AAC5D,IAAA,CAAC,YAAY,EAAQ,MAAM,EAAQ,KAAK,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,CAAC;AACvC,IAAA,CAAC,gBAAgB,EAAI,UAAU,EAAI,GAAG,CAAC;AACvC,IAAA,CAAC,iBAAiB,EAAG,WAAW,EAAG,GAAG,CAAC;AACvC,IAAA,CAAC,gBAAgB,EAAI,UAAU,EAAI,GAAG,CAAC;AACvC,IAAA,CAAC,iBAAiB,EAAG,YAAY,EAAE,MAAM,CAAC;AAC1C,IAAA,CAAC,aAAa,EAAO,OAAO,EAAO,GAAG,CAAC;AACvC,IAAA,CAAC,cAAc,EAAM,QAAQ,EAAM,GAAG,CAAC;CAC1C;AAED;AAEA,MAAM,aAAa,GAA+C;AAC9D,IAAA,CAAC,cAAc,EAAQ,MAAM,EAAQ,KAAK,CAAC;AAC3C,IAAA,CAAC,oBAAoB,EAAE,YAAY,EAAE,GAAG,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAI,UAAU,EAAI,GAAG,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAI,UAAU,EAAI,GAAG,CAAC;CAC5C;AAED;AAEA,MAAM,cAAc,GAA+C;AAC/D,IAAA,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;AACnC,IAAA,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;AACnC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,GAAG,CAAC;AACjC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,GAAG,CAAC;AACjC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,MAAM,CAAC;AACpC,IAAA,CAAC,OAAO,EAAO,OAAO,EAAO,MAAM,CAAC;AACpC,IAAA,CAAC,OAAO,EAAO,OAAO,EAAO,MAAM,CAAC;CACvC;AAED;AAEA,MAAM,WAAW,GAAuC;IACpD,CAAC,aAAa,EAAK,OAAO,CAAC;IAC3B,CAAC,gBAAgB,EAAE,UAAU,CAAC;CACjC;AAED;AAEO,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;AAC9C,IAAA,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAA,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,IAAA,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB;AACnE,IAAA,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjC,CAAA;AAED;AAEA,SAAS,QAAQ,CACb,IAAgC,EAChC,GAAwB,EAAA;AAExB,IAAA,OAAO;AACF,SAAA,MAAM,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACnE,SAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,GAAG;SACnC,IAAI,CAAC,GAAG,CAAC;AAClB;AAEA;AAEA;;;;;;;AAOG;SACa,oBAAoB,CAChC,GAAwB,EACxB,OAA4B,GAAG,EAAA;;IAG/B,MAAM,MAAM,GAAwB,EAAE;AACtC,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD;;AAGA,IAAA,MAAM,MAAM,GAAG,CAAC,IAAgC,KAAyB;QACrE,MAAM,CAAC,GAAwB,EAAE;AACjC,QAAA,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChD,QAAA,OAAO,CAAC;AACZ,IAAA,CAAC;;IAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5D,IAAA,IAAI,SAAS;AAAE,QAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;;IAG3C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAClE,IAAA,IAAI,WAAW;AAAE,QAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,WAAW;;IAGvD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;AACrE,IAAA,IAAI,YAAY;AAAE,QAAA,MAAM,CAAC,WAAW,CAAC,GAAG,YAAY;;IAGpD,MAAM,GAAG,GAAI,GAAG,CAAC,oBAAoB,CAAC,IAAS,IAAI,CAAC,oBAAoB,CAAC;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC;IAChF,MAAM,GAAG,GAAI,GAAG,CAAC,iBAAiB,CAAC,IAAa,IAAI,CAAC,iBAAiB,CAAC;AACvE,IAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE;IACzD;;;IAIA,MAAM,YAAY,GAAwB,EAAE;IAC5C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,GAAG;IAC9D;IACA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AAClC,QAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAC3C;AAEA,IAAA,OAAO,MAAM;AACjB;;ICtIY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;;AAEb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EAZW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAyGzB;;;AAGG;AACI,MAAM,cAAc,GAAkE;AACzF,IAAA,MAAM,EAAK,SAAS;AACpB,IAAA,OAAO,EAAI,QAAQ;AACnB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,OAAO,EAAI,UAAU;AACrB,IAAA,QAAQ,EAAG,SAAS;AACpB,IAAA,MAAM,EAAK,UAAU;AACrB,IAAA,QAAQ,EAAG,QAAQ;AACnB,IAAA,QAAQ,EAAG,WAAW;AACtB,IAAA,SAAS,EAAE,UAAU;;AAGlB,MAAM,eAAe,GAAiE;IACzF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC3E,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACpE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,iCAAiC,EAAE;;AAG3F,MAAM,mBAAmB,GAAsD;AAClF,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE;;AAGtD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;AAwCtF;AACO,MAAM,kBAAkB,GAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO;AAE7E;AACO,MAAM,iBAAiB,GAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB;AAE3G,MAAM,gBAAgB,GAAmB,CAAC,GAAG,kBAAkB,EAAE,GAAG,iBAAiB;AA+C5F;;;;AAIG;AACG,SAAU,sBAAsB,CAAC,UAA+B,EAAA;AAClE,IAAA,MAAM,SAAS,GAAuB;AAClC,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,wBAAwB,EAAE;KACjC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK;AAC3B,QAAA,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;AAC/B,YAAA,GAAG,KAAK;YACR,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;AACzF,SAAA,CAAC,CAAC;AACN,KAAA,CAAC,CAAC;AACP;IAEY;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,aAAqB;AACrB,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EAfW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;SA4DV,cAAc,GAAA;AAC1B,IAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD;MAEa,eAAe,CAAA;IAaxB,WAAA,CAAY,IAAY,EAAE,QAAgB,EAAE,IAAI,GAAG,iBAAiB,EAAE,QAAQ,GAAG,SAAS,EAAA;AACtF,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;AAEA;AACyD;AAC/C,IAAA,kBAAkB,CAAC,QAA6B,EAAA;AACtD,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBACpC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxC;YACJ;QACJ;IACJ;AACH;MAEY,WAAW,CAAA;AASpB,IAAA,WAAA,CACI,IAAY,EACZ,KAAa,EACb,IAAoB,EACpB,OAAyD,EACzD,YAAkB,EAClB,MAAgB,EAChB,QAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;AACH;MAKY,gBAAgB,CAAA;IAIzB,WAAA,CAAY,QAAgB,EAAE,MAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;AACH;AAED;AAEO,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACjE,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;AAC3D,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;AACrD,MAAM,SAAS,GAAe,CAAC,KAAK;AAE3C;AAEM,SAAU,0BAA0B,CAAC,IAAoB,EAAA;IAC3D,QAAQ,IAAI;AACR,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,QAAQ,EAAS,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,aAAa;AACzD,QAAA,KAAK,cAAc,CAAC,eAAe,EAAE,OAAO,iBAAiB;AAC7D,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,IAAI,EAAa,OAAO,MAAM;AAClD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,UAAU,EAAO,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,SAAqC,OAAO,MAAM;;AAE1D;AAEM,SAAU,mBAAmB,CAAC,KAAqB,EAAA;AACrD,IAAA,IACI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC7C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY;AAC1C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,EACrC;QACE,OAAO,KAAK,CAAC,OAAO;IACxB;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE;;;AAG1C,QAAA,OAAO,EAAE;IACb;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;AACtC,QAAA,OAAO,SAAS;IACpB;AACA,IAAA,MAAM,IAAI,GAAI,KAAK,CAAC,OAAiB,IAAI,EAAE;;IAE3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;AACtE,QAAA,OAAO,IAAI;IACf;IACA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAc,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3E;AAEA;AAEA,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;AAElE,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC1B,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACzD,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAK,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,OAAO,EAAG,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,MAAM,EAAI,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAC1G,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;AAC3D,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EACvD,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;;YAGjE,IAAI,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBACvE,EAAE,KAAK,EAAE,KAAK,EAAa,KAAK,EAAE,YAAY,EAAW,IAAI,EAAE,wBAAwB,EAAE;gBACzF,EAAE,KAAK,EAAE,aAAa,EAAK,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,QAAQ,EAAU,KAAK,EAAE,UAAU,EAAa,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,EAAI,IAAI,EAAE,qBAAqB,EAAE;AACzF,aAAA,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtD,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBAClE,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,kBAAkB,EAAE;gBAC3E,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,mCAAmC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,iCAAiC,EAAE;AAC7F,aAAA,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAGzD,IAAI,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,YAAY,EAAK,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,oCAAoC,EAAE;gBAC9F,EAAE,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,wBAAwB,EAAE;gBAClF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,qBAAqB,EAAE;AAClF,aAAA,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACvE,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,SAAS,EAAK,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;gBAC7E,EAAE,KAAK,EAAE,OAAO,EAAO,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,sBAAsB,EAAE;gBACvE,EAAE,KAAK,EAAE,QAAQ,EAAM,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,kCAAkC,EAAE;gBACnF,EAAE,KAAK,EAAE,KAAK,EAAS,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,yBAAyB,EAAE;AAC7E,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAC9C,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;;YAGnD,IAAI,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EACzE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAClE,IAAI,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EACnE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACnE,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBAC5E,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,uBAAuB,EAAE;gBACrE,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,oCAAoC,EAAE;gBAClF,EAAE,KAAK,EAAE,KAAK,EAAM,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,wBAAwB,EAAE;AACzE,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1D,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,sBAAsB,EAAE;gBAChF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,KAAK,EAAY,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,yBAAyB,EAAE;gBACnF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,gCAAgC,EAAE;gBAC1F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,4BAA4B,EAAE;AACzF,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG1D,IAAI,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACjC,aAAA,EAAE,KAAK,CAAC;AACZ,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,WAAW,CAAC,OAAO,EAAM,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAK,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,IAAI,EAC9D,SAAS,EAAE,MAAM,CAAC;AACzB,SAAA,CAAC;IACN;AACH;AAED;AACM,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AAAG;AAEvE;AAEM,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC;AACrH,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;YACzB,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,eAAe,EAAE;AAChE,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB,CAAC;YACrB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE;AAClE,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB;AACvB,SAAA,CAAC;IACN;AACH;AAEK,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,eAAe,EAAE;AAC3E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC,aAAA,EAAE,KAAK,CAAC;YACT,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAG,IAAI,EAAE,yBAAyB,EAAE;AACpD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE;AAClD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE;AACnD,aAAA,EAAE,OAAO,CAAC;AACX,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAC/D,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;YACjG,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,eAAe,EAAE;AAC7E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;oBACN,EAAE,GAAG,EAAE,UAAU,EAAM,IAAI,EAAE,uBAAuB,EAAK,SAAS,EAAE,iBAAiB,EAAE;oBACvF,EAAE,GAAG,EAAE,WAAW,EAAK,IAAI,EAAE,wBAAwB,EAAI,SAAS,EAAE,kBAAkB,EAAE;oBACxF,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,0BAA0B,EAAE,SAAS,EAAE,qBAAqB,EAAE;oBAC3F,EAAE,GAAG,EAAE,aAAa,EAAG,IAAI,EAAE,yBAAyB,EAAG,SAAS,EAAE,oBAAoB;AAC3F;AACJ,aAAA,EAAE,KAAK;AACX,SAAA,CAAC;IACN;AACH;AAEK,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,UAAU,EAAE,EAAE,EACtE,qBAAqB,CAAC;AAC1B,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EACzD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAC5D,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC3E,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;YACjG,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC1D,YAAA,IAAI,WAAW,CAAC,eAAe,EAAE,gBAAgB,EAAE,cAAc,CAAC,KAAK,EACnE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC/D,IAAI,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;AACnE,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAK,IAAI,EAAE,4BAA4B,EAAE;AACxD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,8BAA8B,EAAE;AAC1D,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,6BAA6B,EAAE;AACzD,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,+BAA+B,EAAE;AAC9D,aAAA,EAAE,MAAM,CAAC;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,EAC9D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxH,QAAQ,EAAE,IAAI,CAAC;AACnB,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EACtE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAC/H,MAAM,EAAE,IAAI,CAAC;YACjB,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC/D,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC;AAC7G,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;;AAEzB,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;YACrD,IAAI,WAAW,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE;gBACjE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;AAC9D,gBAAA,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;gBACvD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;AACxE,aAAA,EAAE,QAAQ,CAAC;YACZ,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;gBACvD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;gBAC3D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM;AACjE,aAAA,EAAE,MAAM,CAAC;;YAGV,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,WAAW,EAAG,YAAY,EAAG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;AAChF,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;;YAGhF,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC;AAC3E,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;;YAGrE,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAClE,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;;YAG7F,IAAI,WAAW,CAAC,eAAe,EAAE,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;AACzE,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACpE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;;YAGnG,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAC5D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;YAChE,IAAI,WAAW,CAAC,0BAA0B,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;AACzE,gBAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa;AACzD,aAAA,EAAE,MAAM,CAAC;AACb,SAAA,CAAC;IACN;AACH;AAEK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;YACtB,IAAI,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE;AACpE,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,SAAS,EAAE;AAC1C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AACjD,aAAA,EAAE,MAAM,CAAC;YACV,IAAI,WAAW,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,CAAC,YAAY,EAAE;AACjF,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAE;AACxC,aAAA,EAAE,SAAS,CAAC;AACb,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;AAClD,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAC3D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC7D,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACxG,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7D,SAAA,CAAC;IACN;AACH;AAED;;;;AAIG;SACa,oBAAoB,GAAA;IAChC,OAAO;AACH,QAAA,IAAI,wBAAwB,EAAE;AAC9B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;KAChC;AACL;SAEgB,mBAAmB,CAC/B,UAA+B,EAC/B,MAAM,GAAG,EAAE,EAAA;IAEX,MAAM,MAAM,GAAuC,EAAE;AAErD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACnD,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;QAElD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;AAC7C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE;aAAO;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACrD;IACJ;AAEA,IAAA,OAAO,MAAM;AACjB;;AC5yBA;;;;;;;;;;;;;;;;;;;;;AAqBG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAE/B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;QACjC,IAAA,CAAA,OAAO,GAA4B,IAAI;QAoKvC,IAAA,CAAA,aAAa,GAAG,KAAK;AAiBhC,IAAA;AAnLG;;;;;;;;;;;AAWG;aACqB,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,CAAC;AAC1C,QAAA,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY;AAClE,QAAA,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;QAC3D,OAAO;AACV,KAAA,CAAC,CAAC;;aAGqB,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAvB,CAAyB;IAEhE,IAAI,GAAA;QACA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,oBAAoB;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA;;;;;;;;AAQG;AACH,IAAA,MAAM,CAAC,MAAc,EAAE,MAA2B,EAAE,KAAoB,EAAA;AACpE,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,IAAI,KAAK,EAAE;;;AAGP,YAAA,MAAM,MAAM,GAAI,iBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,UAAU;AACzF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAE,EAAE,MAAM,CAAC;AAChE,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,EAAE;YAChC,IAAI,GAAG,EAAE;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5B;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;YACA,IAAI,CAAC,KAAK,EAAE;YACZ;QACJ;;AAGA,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAoC;QAChF,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AAClD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,QAAA,CAAU,EAAE,YAAY,CAAC;AAC1E,YAAA,IAAI,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,EAAE,SAAS,CAAC;;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC/C;aAAO;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC1C;QAEA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU;QAEzD,MAAM,KAAK,GAAwB,EAAE;QACrC,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzC,IAAI,CAAC,KAAK,gBAAgB;gBAAE;YAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;;YAE1D,IAAI,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE;AAC/C,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;iBAAO;AACH,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;QACJ;;QAEA,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;AAC7C,YAAA,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;QAC3B;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChE,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QACpC;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,MAA8B,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;aAChC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3D,aAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC;AACvC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAA,SAAA,EAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK,CAAC;QACrE;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QACnC;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM;YAAE;;AAEb,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;QACJ;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;IAEA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;IACJ;IAEQ,OAAO,CAAC,SAAiB,EAAE,MAA2B,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;aAChC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;aAC3D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,EAAE;AAC7E,YAAA,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;AACrD,QAAA,CAAC,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAC9B,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,IAAA,EAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;IACtD;AAEA;;;;;;;AAOG;AACK,IAAA,SAAS,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO;AACF,aAAA,OAAO,CAAC,kBAAkB,EAAE,mCAAmC;AAC/D,aAAA,OAAO,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;IACzE;AAEQ,IAAA,WAAW,CAAC,GAAW,EAAA;AAC3B,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;IAC5D;IAIQ,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa;YAAE;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;;YAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;iBACvC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY;iBAClC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;+GAxLS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACLD;AACA,IAAI,eAAe,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;AAcG;MAKU,eAAe,CAAA;AAQxB,IAAA,WAAA,CACY,GAAqB,EACrB,QAAkB,EAClB,eAAyC,EACzC,cAA8B,EAC9B,aAAmC,EACnC,iBAA2C,EAC3C,GAAsB,EACtB,iBAAoC,EAAA;QAPpC,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAfpB,IAAA,CAAA,SAAS,GAAyB,IAAI;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAO;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;QAExC,IAAA,CAAA,SAAS,GAAmB,EAAE;IAWnC;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;;;YAIlD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;YACxC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD;QACJ;IACJ;AAEA;;;;AAIG;AACK,IAAA,qBAAqB,CAAC,MAAmB,EAAA;QAC7C,IAAI,EAAE,GAAuB,MAAM;QACnC,OAAO,EAAE,EAAE;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,EAAE;gBACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC5C;AACA,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,MAAM,CAAC,IAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,cAAc;YAAE;;;AAIrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;AAK1F,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YACpD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;AACpD,QAAA,CAAC,CAAC;;QAGF,MAAM,YAAY,GAAwB,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9B,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;wBAC7B,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;oBAC5C;gBACJ;YACJ;QACJ;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;;QAGrC,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;;AAE9C,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAwC,EAAE;oBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBACxC,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AAC1C,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC;oBACzF;gBACJ;YACJ;QACJ;;QAGA,IAAI,KAAK,EAAE;AACP,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC1C;;;;AAKC,QAAA,YAAY,CAAC,QAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;;;;;;AAO7C,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAe;AAC7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC1D,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE;YACvC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChD,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAA,CAAE,CAAC;QACvE;;AAGA,QAAA,MAAM,UAAU,GAAsB,QAAQ,CAAC,YAAY,CAAC;AAC5D,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,IAAI,UAAU;YAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnG,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;;;;QAK9C,MAAM,QAAQ,GAAuB,YAAY,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI;;;QAIjF,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACpC;QACA,IAAI,QAAQ,EAAE;;YAEV,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;;;;AAI9D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC;YAEpE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;gBAC1D,IAAK,KAAa,CAAC,UAAU;oBAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvD,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;;;;AAI1D,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;gBACzD,IAAI,OAAO,EAAE;oBACT,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBACvD,IAAI,WAAW,EAAE;AACb,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;wBACnC;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,KAAI;gBACrD,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAiB,KAAI;gBAC3D,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;;AAEvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC5D,gBAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACxE,YAAA,CAAC,CAAC;QACN;;AAGA,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC;;AAGQ,IAAA,YAAY,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;AACnD,QAAA,IAAI;AACA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B;AAAE,QAAA,MAAM;AACH,YAAA,GAAG,CAAC,QAAgB,CAAC,IAAI,CAAC,GAAG,KAAK;QACvC;IACJ;+GAlMS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA;;sBACA;;sBACA;;;MCtCQ,qBAAqB,CAAA;IAM9B,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAAA;QAD7B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;;QANb,IAAA,CAAA,WAAW,GAA2B,EAAE;;QAExC,IAAA,CAAA,eAAe,GAAkB,IAAI;IAK3C;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;AAC1D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;AAC7B,YAAA,MAAM,IAAI,GAA4B,OAAO,IAAI,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU;YACxF,MAAM,WAAW,GAAG,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC;mBACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,IAAqB,CAAC,IAAI,CAAC,CAAC;kBACpF,CAAC,CAAC;AACR,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AACtE,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IAC9D;+GAxBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAGI;;sBAEA;;;ACTL;;;;;;;;AAQG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAuB;AAsCnD,IAAA;AApCG,IAAA,UAAU,CAAC,OAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAmB,EAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;AAEA;;;;;;;AAOG;IACH,aAAa,CAAC,QAAgB,EAAE,SAA8B,EAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE;QACpC,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE;IACjD;+GAtCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACTD;;;;;AAKG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;AAwBjD,IAAA;AAtBG,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAiB,EAAA;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;+GAxBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCWY,gBAAgB,CAAA;AAyCzB,IAAA,WAAA,CACY,cAA8B,EAC9B,eAAgC,EAChC,cAAqC,EACrC,cAAqC,EACrC,yBAA2D,EAC3D,iBAA2C,EAC3C,SAAkC,EAClC,aAAmC,EACnC,iBAAoC,EACpC,GAAsB,EAAA;QATtB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;AAlDL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAiF;QAEpH,IAAA,CAAA,UAAU,GAAwB,IAAI;QACtC,IAAA,CAAA,WAAW,GAAwB,IAAI;;QAGvC,IAAA,CAAA,cAAc,GAA2B,EAAE;QAC3C,IAAA,CAAA,aAAa,GAA4B,EAAE;QAC3C,IAAA,CAAA,cAAc,GAA2B,EAAE;;QAG3C,IAAA,CAAA,kBAAkB,GAA2B,EAAE;;;QAI/C,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,aAAa,GAA2B,EAAE;;QAG1C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,aAAa,GAAmC,IAAI;QACpD,IAAA,CAAA,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;QAE7B,IAAA,CAAA,gBAAgB,GAA0B,IAAI;;QAG9C,IAAA,CAAA,eAAe,GAAmC,IAAI;QAErD,IAAA,CAAA,IAAI,GAAmB,EAAE;QAIzB,IAAA,CAAA,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACpC,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,iBAAiB,GAAG,MAAK;AAC7B,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACnE,QAAA,CAAC;QACO,IAAA,CAAA,qBAAqB,GAAuB,IAAI;IAarD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC,EACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YACvC,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;AAGtE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;;YAEvC,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC,CAAC,CACL;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAC7F;;;QAID,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACzE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;YACnD;QACJ;;;;AAKA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAG;YAChD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAI;AACpD,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE;AACtD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,uBAAuB,EAAE,UAAU,EAAE;AAC1C,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;AACnC,QAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACrC;;AAGA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/G;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5G;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACpB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1G;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACjH;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAChC;aAAO;YACH,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC/B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,YAAY,CAAC,KAAiB,EAAE,QAA4B,EAAA;QACxD,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC1H;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM;IACzD;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;AAC3C,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;IACrD;AAEA,IAAA,YAAY,CAAC,OAAe,EAAA;AACxB,QAAA,MAAM,MAAM,GAA2B;YACnC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO;AACzD,YAAA,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU;SAC7C;AACD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO;IACrC;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,MAAM,KAAK,GAA2B;AAClC,YAAA,QAAQ,EAAE,0BAA0B,EAAE,aAAa,EAAE,gBAAgB;AACrE,YAAA,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,0BAA0B;AACnE,YAAA,cAAc,EAAE,2BAA2B;SAC9C;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,sBAAsB;IACnD;AAEA,IAAA,WAAW,CAAC,EAAkB,EAAA;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,MAAM,MAAM,GAA2B;AACnC,YAAA,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU;AACtC,YAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;AACxC,YAAA,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY;AAC9C,YAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;YAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;AAC5C,YAAA,gBAAgB,EAAE,QAAQ;SAC7B;AACD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI;QAC9C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,GAAG,KAAK;IAC/E;AAEA,IAAA,IAAI,oBAAoB,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7E,IAAA,IAAI,+BAA+B,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAEnG,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAC9B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAChH;AAEA,IAAA,uBAAuB,CAAC,KAAiB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa;QACpC,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3H;;AAIA,IAAA,kBAAkB,CAAC,KAAiB,EAAE,IAA6B,EAAE,EAAmB,EAAA;QACpF,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,IAAI;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAC1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC;QACA,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1F;aAAO,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,eAAe,GAAG,aAAa;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACrG;IACJ;IAEA,wBAAwB,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QACrC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAiB,CAAC,EAAE,CAAC;AAC7F,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,IAAI,aAAa,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AAElE,IAAA,UAAU,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACvG,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,uBAAuB,CAAC,KAAiB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,mBAAmB;AACtD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,wBAAwB,CAAC,KAAiB,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxH,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;;;AAInC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO;YAAE;;AAGhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;;;;AAM/E,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACvC,IAAI,SAAS,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC1C,IAAI,SAAS,EAAE;oBAAE,SAAS,GAAG,KAAK;oBAAE;gBAAQ;gBAC5C,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC;;AAGA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC,SAAA,CAAC;IACN;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAI,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC9E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;;;;;;QAQ9F,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;;;AAI7C,QAAA,MAAM,CAAC,GAAG;AACN,YAAA,GAAG,EAAK,MAAM,CAAC,GAAG,GAAM,KAAK;AAC7B,YAAA,KAAK,EAAG,MAAM,CAAC,KAAK,GAAI,KAAK;AAC7B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK;AAC7B,YAAA,IAAI,EAAI,MAAM,CAAC,IAAI,GAAK,KAAK;SAChC;AACD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK;AACzC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAI,CAAC,CAAC,MAAM;QAE1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;QAGvF,IAAI,CAAC,aAAa,GAAG;YACjB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;SACjF;;AAGD,QAAA,MAAM,KAAK,GAAM,CAAC,MAAM,CAAC,GAAG,GAAM,OAAO,CAAC,GAAG,IAAO,KAAK;AACzD,QAAA,MAAM,OAAO,GAAI,CAAC,MAAM,CAAC,KAAK,GAAI,OAAO,CAAC,KAAK,IAAK,KAAK;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK;AACzD,QAAA,MAAM,MAAM,GAAK,CAAC,MAAM,CAAC,IAAI,GAAK,OAAO,CAAC,IAAI,IAAM,KAAK;QACzD,IAAI,CAAC,cAAc,GAAG;AAClB,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;SAClG;IACL;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC5B;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/F;;AAGQ,IAAA,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,EAAA;QAC3E,OAAO;YACH,GAAG,EAAK,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI;YAClB,IAAI,EAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnB,KAAK,EAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAG,CAAC,CAAC,CAAA,EAAA,CAAI;YAClC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI;SACrC;IACL;IAEQ,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAA;QAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;;;AAGrC,QAAA,OAAO,CAAA,0BAAA,EAA6B,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,aAAA,EAAgB,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,KAAK;IAC3K;+GA/dS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,qHCrB7B,g8RA+KA,EAAA,MAAA,EAAA,CAAA,2hHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FD1Ja,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EAGX,KAAK,EAAA,eAAA,EACA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g8RAAA,EAAA,MAAA,EAAA,CAAA,2hHAAA,CAAA,EAAA;;sBAG9C;;;MEHQ,gBAAgB,CAAA;AAN7B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;AAE3B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAe;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAC7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAC9C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;QAW3C,IAAA,CAAA,KAAK,GAAG,WAAW;QACnB,IAAA,CAAA,WAAW,GAAG,UAAU;QACxB,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,WAAW,GAAG,YAAY;QAC1B,IAAA,CAAA,kBAAkB,GAAwB,oBAAoB;AAmFxE,IAAA;AAhGG,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW;IAC1C;AAaA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,mBAAmB;AACnD,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,8BAA8B;AAC9D,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,iBAAiB;AACjD,YAAA,SAAyB,OAAO,mBAAmB;;IAE3D;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,QAAQ;AACxC,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,OAAO;AACvC,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,KAAK;AACrC,YAAA,SAAyB,OAAO,QAAQ;;IAEhD;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9F;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;;AAGA,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,IAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,cAAc,CAAC,KAAY,EAAA;QACvB,MAAM,KAAK,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;;AAGA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,KAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;+GAnHS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,o5BCnB7B,02NA2IA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,02NAAA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,cAAc;;;MEXhB,kBAAkB,CAAA;IAwB3B,WAAA,CACY,QAAkC,EAClC,cAA8B,EAAA;QAD9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QAzBjB,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,cAAc,GAAoB,EAAE;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA+C;AAC5E,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;QAEtC,IAAA,CAAA,QAAQ,GAAe,EAAE;QACzB,IAAA,CAAA,cAAc,GAAe,EAAE;QAC/B,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,aAAa,GAAkB,IAAI;QAEnC,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,YAAY,GAAG,EAAE;QAEjB,IAAA,CAAA,aAAa,GAAsB,MAAM;;AAGxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;QAGnC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;AAsJf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAmB;IAjJ/C;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;AACjD,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;;IAGA,SAAS,GAAA;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;AAC1D,YAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAC3B,IAAI,CAAC,OAAO,EAAE;QAClB;IACJ;;AAGQ,IAAA,GAAG,CAAC,KAAsB,EAAA;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IACd,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAClF,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,cAAc,CAAC,SAAS,CACzB,GAAG,CAAC,OAAO,EACX,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,MAAM,EAClB,IAAI,EACJ,GAAG,CAAC,YAAY,CACnB;;AAED,YAAA,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxE;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,gBAAgB,CAAC,QAAkB,EAAA;QAC/B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;QACrF;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;IACpC;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ;QACtC,IAAI,CAAC,OAAO,EAAE;IAClB;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5E;IAEA,eAAe,CAAC,QAAkB,EAAE,KAAiB,EAAA;QACjD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/E;IAEA,WAAW,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC7C,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;QAC7C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;IACjD;AAEA,IAAA,UAAU,CAAC,QAAkB,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,SAAS;AACtC,QAAA,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI;AAC1D,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAA8B,EAAA;AACrC,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY;YAAE;QAEhD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,eAAe;YAAE;QAEtB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc;YAAE;;AAGrB,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW;AAC5C,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa;AAC5C,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAI1B,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW;AAC5C,QAAA,IAAI,OAAO,GAAG,cAAc,CAAC,aAAa;;;;QAK1C,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE;AAC5C,YAAA,OAAO,EAAE;QACb;QAEA,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC;;QAGlD,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;;;IAKQ,YAAY,GAAA;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CAAC;QACpE;IACJ;IAIQ,OAAO,GAAA;;AAEX,QAAA,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE;AACzD,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;YACnD;QACJ;QACA,MAAM,IAAI,GAAe,EAAE;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAEpB,MAAM,UAAU,GAAe,EAAE;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IACpC;AAEQ,IAAA,WAAW,CAAC,KAAsB,EAAE,KAAa,EAAE,GAAe,EAAE,SAA2B,EAAA;AACnG,QAAA,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI;AAC3E,YAAA,MAAM,QAAQ,GAAa;gBACvB,IAAI;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB;AACtD,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC9B,KAAK;gBACL,QAAQ;gBACR,WAAW;AACX,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,aAAa,EAAE,CAAC;aACnB;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;YAClE;QACJ;IACJ;+GAnNS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAjB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kOCnC/B,4kKAsGA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,4kKAAA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;;MEhBQ,gBAAgB,CAAA;;AAkEzB,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3B;AACA,IAAA,yBAAyB,CAAC,MAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC/B;AACA,IAAA,uBAAuB,CAAC,KAAqB,EAAA;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,8BAA8B,CAAC,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC;IACzE;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,OAAO,CAAC;IACxE;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;IAChD;;AAGA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;AAEA;AAC6E;AAC7E,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC7C;AAEA;;AAEiE;AACjE,IAAA,IAAI,iBAAiB,GAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;AAC/C,QAAA,MAAM,KAAK,GAAa,CAAC,kBAAkB,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAA,GAAA,CAAK,CAAC;QAC/F,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACnD;;AAGA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;IAKA,WAAA,CACY,QAAkC,EAClC,cAA8B,EAC9B,iBAAoC,EACpC,UAA6B,EAC7B,UAAqC,EACrC,eAAgC,EAChC,iBAA2C,EAC3C,yBAA2D,EAC3D,SAAkC,EAClC,GAAsB,EACtB,MAAsB,EAAA;QAVtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;QAnJT,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,WAAW,GAAoB,EAAE;QACjC,IAAA,CAAA,KAAK,GAAG,SAAS;QACjB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;QAC5B,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,cAAc,GAAoB,EAAE;QACpC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;AACd,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAgB;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA8B;AACpE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAyC;AACrE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAmB;QAM7D,IAAA,CAAA,UAAU,GAAU,EAAE;AACtB,QAAA,IAAA,CAAA,WAAW,GAAW,UAAU,CAAC,MAAM;QACvC,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;QAC5C,IAAA,CAAA,YAAY,GAAG,WAAW;AAC1B,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,YAAY,GAAyB,IAAI;QACzC,IAAA,CAAA,UAAU,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAC;QACtB,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAC1B,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;QACvB,IAAA,CAAA,aAAa,GAAqC,YAAY;QAC9D,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,aAAa,GAAG,EAAE;QACjB,IAAA,CAAA,gBAAgB,GAAyB,IAAI;QAC9C,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;AACf;;AAE8D;QACvD,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,YAAY,GAAG,CAAC;QAMhB,IAAA,CAAA,mBAAmB,GAAG,CAAC;QAkpBvB,IAAA,CAAA,eAAe,GAAyC,IAAI;IA5jBjE;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC3G,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAU,KAAI;AAC9D,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAmB,KAAI;AACzE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAC7D,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK;YACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE;;;AAGtB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;;;AAGpB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;;;YAGzB,IAAI,CAAC,SAAS,EAAE;QACpB;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;;;YAG3B,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,eAAe,EAAE;;;AAGtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACpE;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,IAAI,CAAC;;;;;AAK3E,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC;;QAGnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE;QAC3D,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,gBAAgB,EAChB,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;;;YAGD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAG;AACzC,gBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,EAAE;AAChC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;AAC5B,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBACxB;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;QAEA,IAAI,CAAC,SAAS,EAAE;QAChB,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;QAC/B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAC1D,IAAI,QAAQ,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAAE;IACpF;AAEA;;;;;;;;;AASG;IACK,eAAe,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa;AAC/C,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;AAC5C,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,GAAG,GAAG,IAAI;QACjC,MAAM,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA,EAAA,CAAI;QACtC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC3C,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;;AAE3C,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa;YAAE;AAEnF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;AACnB,YAAA,OAAO,EAAU,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,OAAO,EAAU,IAAI,CAAC,eAAe,CAAC,aAAa;AACnD,YAAA,YAAY,EAAK,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,IAAI,EAAa,CAAC,EAAE,IAAI,IAAe,GAAG;AAC1C,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,WAAW,EAAM,CAAC,EAAE,SAAS,IAAU,UAAU;AACjD,YAAA,QAAQ,EAAS,CAAC,EAAE,QAAQ,IAAW,KAAK;YAC5C,UAAU,EAAO,KAAK;AACzB,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAe,KAAI;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAiB,CAAC,aAAa,CAAC,YAAY;YACjE,IAAI,CAAC,YAAY,CAAC;gBACd,SAAS,EAAS,QAAQ,CAAC,MAAM;AACjC,gBAAA,YAAY,EAAM,QAAQ,CAAC,KAAK,GAAG,OAAO;AAC1C,gBAAA,YAAY,EAAM,OAAO;AACzB,gBAAA,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG;AAC5C,aAAA,CAAC;;;;AAIF,YAAA,IAAI,CAAC,eAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;AAGtE,YAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;AACzC,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AACzB,YAAA,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAChD,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;IAChD;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACjC;iBAAO;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAqB,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAChC;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;;YAErC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;QAEA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;;AAE3D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5D,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE;gBAC7D;YACJ;YACA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;YAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;AAEA,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,IAAI,KAAK,WAAW,CAAC,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QACpC;aAAO;;AAEH,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACjB;IACJ;AAEA,IAAA,cAAc,CAAC,MAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,eAAe,EAAE;QAC1B;aAAO;YACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9C;IACJ;;AAIA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;QAC3B,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;IAClE;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;AACnD,QAAA,IAAI,CAAC,SAAS;YAAE;;QAEhB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9D;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;IACtH;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI;QAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9G,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;IACvH;AAEQ,IAAA,gBAAgB,CAAC,IAAmB,EAAA;;;QAGxC,UAAU,CAAC,MAAK;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;AAC9F,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;AACzG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACjF;IAEA,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IACrF;IAEA,iBAAiB,GAAA;;AAEb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;AAEA,IAAA,gBAAgB,CAAC,IAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QACzG;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,KAAkD,EAAA;AAC/D,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK;;AAG9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAChE,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAClB,YAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;gBAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACrC;YACA;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;AAAO,aAAA,IAAI,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;IAEA,cAAc,GAAA;;;AAGV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;AAGA,IAAA,eAAe,CAAC,KAAoF,EAAA;AAChG,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK;AAC/B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,QAAQ,MAAM;AACV,YAAA,KAAK,aAAa,CAAC,MAAM,EAAE;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnC;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;AAC5B,gBAAA,MAAM,UAAU,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;gBAC/B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBAC3G,IAAI,UAAU,EAAE;oBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;oBACtD,IAAI,GAAG,EAAE;AACL,wBAAA,IAAI,CAAC,YAAY,GAAG,UAAU;wBAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;wBAC1G,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;oBACrH;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;gBACrC;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBACrD,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ;AAChD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAChE,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;oBACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,oBAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,MAAM,CACpB;gBACD;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,qBAAqB,EAAE;AACtC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC;gBAC9F,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,YAAY,CAC1B;gBACD;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC7C,IAAI,QAAQ,EAAE;AACV,oBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzF,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,sBAAsB,EAAE;gBACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;gBACnE,IAAI,mBAAmB,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;oBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC5E,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/E,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,KAAK,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU;oBAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;gBACpD;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;;IAER;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QAC1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,YAAY,CAAC,IAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7D;AAEQ,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1D;AAIA,IAAA,YAAY,CAAC,KAAmG,EAAA;AAC5G,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B;QACJ;;AAEA,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;;AAEzD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,GAAG;cACrE,KAAK,CAAC,SAAS,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;;AAI9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAEvB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5D,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,EAAE,IAAI,CAAC;IACZ;IAEQ,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAA;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBACxB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;YACzC;AACA,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAE,MAAsB,EAAA;AAC3F,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC1B,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,MAAM,IAAI,IAAI;AAC3C,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,iBAAiB,CAAC,UAAsB,EAAA;QAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB;QACJ;QAEA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;IACJ;+GAlxBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,giCCxB7B,irRA6KM,EAAA,MAAA,EAAA,CAAA,k4IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrJO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,irRAAA,EAAA,MAAA,EAAA,CAAA,k4IAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,eAAe;;;MExCjB,oBAAoB,CAAA;AAO7B,IAAA,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QATN,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,eAAe,GAAoB,EAAE;AAGpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAgB;IAMjD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,mBAAmB,CAC3B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IACjF;+GA1BS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAzB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA;;sBAEA;;sBACA;;;MC8DQ,gBAAgB,CAAA;IAUzB,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAXN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAElB,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,WAAW,KAAU;AAErB,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GA9BS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7Df;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAmCQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA/D5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,UAAA,EAiCW,KAAK,EAAA,MAAA,EAAA,CAAA,0iBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCFQ,yBAAyB,CAAA;IAalC,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAdN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,OAAO,GAAW,KAAK;QACvB,IAAA,CAAA,KAAK,GAAW,CAAC;QACjB,IAAA,CAAA,QAAQ,GAAY,KAAK;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GAhCS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5B,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0jBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAmCQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArErC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,IAAA,CAAA,EAAA,UAAA,EAiCW,KAAK,EAAA,MAAA,EAAA,CAAA,0jBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCPQ,+BAA+B,CAAA;AAiBxC,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAsB,EACtB,KAA8B,EACE,SAAkB,EAAA;QAHlD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,KAAK,GAAL,KAAK;QAC2B,IAAA,CAAA,SAAS,GAAT,SAAS;QApB5C,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,QAAQ,GAAwB,UAAU;QAC1C,IAAA,CAAA,GAAG,GAAG,UAAU;QAChB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,MAAM,GAA4C,OAAO;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE5C,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAa,KAAK,CAAC,CAAC,cAAc,EAAE;IAOlE;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxF;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC3F;IACJ;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG;AACpD,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG;IAChC;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;AApDS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,2GAqBhB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArBzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wqBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsCQ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBArE3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,QAAA,EAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,IAAA,CAAA,EAAA,UAAA,EAoCW,KAAK,EAAA,MAAA,EAAA,CAAA,wqBAAA,CAAA,EAAA;;0BAuBZ;;0BAAY,MAAM;2BAAC,UAAU;;sBApBjC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;ACjGL;MACa,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAE9F;MACa,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;;ACJrF;;;AAGG;AACG,SAAU,WAAW,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC9C,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;QAC3C,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,SAAS;QACrC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,YAAY,EAAE;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS;QAC9E;AACA,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC,EAAE,GAAG,CAAC;AACX;AAEA;;;;;;;;AAQG;AACG,SAAU,iBAAiB,CAAC,KAAsB,EAAE,IAAS,EAAA;AAC/D,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;AAErC,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AAElD,QAAA,KAAK,CAAC,OAAO,GAAG,KAAK;QAErB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE;AAChC,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;gBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;wBACpC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AAC7B,4BAAA,KAAK,CAAC,OAAO,GAAG,KAAK;wBACzB;oBACJ;gBACJ;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC5D;AAEA,QAAA,OAAO,KAAK;AAChB,IAAA,CAAC,CAAC;AACN;;MCgIa,wBAAwB,CAAA;IAsBjC,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAa,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO;YAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;aAC1B;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QAAE;IACnD;IAEA,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAa,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAC1C;AAEA,IAAA,WAAA,CACY,UAA6B,EAC7B,cAA8B,EACW,cAAwC,EACjF,UAAqC,EACrC,iBAAoC,EACpC,cAA8B,EAC9B,GAAsB,EAAA;QANtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,cAAc,GAAd,cAAc;QAC2B,IAAA,CAAA,cAAc,GAAd,cAAc;QACvD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QA3CN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE7C,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,WAAW,GAAsB,EAAE;QACnC,IAAA,CAAA,SAAS,GAAG,KAAK;;AAGf,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAK,EAAG,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,KAAK,GAAG,SAAS;IA0BtB;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS;QAE5E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAG;AACvD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,eAAe;gBAAE;AACpD,YAAA,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,EAAE,IAAI;YACnD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;AACxC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,CAAC,eAAe,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;IAClC;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EACtE,MAAK,EAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,WAAW,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW;AACjD,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,EAAE,CAAC,IAAS,KAAI;gBAChB,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;AACjF,gBAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B;AACH,SAAA,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,MAAqB,EAAA;QACtC,MAAM,MAAM,GAAG,CAAC,KAAsB,KAClC,KAAK,CAAC,IAAI,CAAC,CAAC,IACR,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;aACjC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CACpD;AACL,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACJ;QACA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAC3C,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,wBAAwB,GAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;AAEpC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM;gBAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,GAAG,EAAE,YAAY;gBAAE;AAExB,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;gBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;gBACnD;YACJ;AACA,YAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACtD;IACJ;AAlIS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,2EAwCT,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxClC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhKvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsFQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlKpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,IAAA,CAAA,EAAA,UAAA,EAoFW,KAAK,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA;;0BA0CZ;;0BAAY,MAAM;2BAAC,mBAAmB;;sBAvC1C;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAeA;;sBAQA;;;MCjJQ,2BAA2B,CAAA;IAcpC,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAfN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,GAAG,GAAmB,QAAQ;QAC9B,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAuB,OAAO;QACpC,IAAA,CAAA,IAAI,GAAkC,QAAQ;QAC9C,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAQ,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GAxBS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxD1B;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA+BQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1DvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,IAAA,CAAA,EAAA,UAAA,EA6BW,KAAK,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MC3EQ,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,iNAHlB,2DAA2D,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,2DAA2D;AACrE,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCGzB,cAAc,CAAA;AAQvB,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAP9B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAkB,IAAI;AAOpC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAI;YACnE,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;YACJ;AAEA,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AACtG,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kBAAkB,KAAU;IAE5B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;IAC3B;+GA3BS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAIN,mBAAmB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBxC,uSAMM,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,uSAAA,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA;;sBAMhB,eAAe;uBAAC,mBAAmB;;;MEO3B,0BAA0B,CAAA;AA0BnC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QAzBzB,IAAA,CAAA,IAAI,GAAyB,IAAI;QAEnC,IAAA,CAAA,cAAc,GAAG,eAAe;QAChC,IAAA,CAAA,iBAAiB,GAAG,mBAAmB;QACvC,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,YAAY,GAAqB,EAAE;;QAGnC,IAAA,CAAA,WAAW,GAAuC,EAAE;;QAGpD,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAuB,UAAU;QAC3C,IAAA,CAAA,aAAa,GAA0B,QAAQ;QAC/C,IAAA,CAAA,SAAS,GAAG,MAAM;QAClB,IAAA,CAAA,WAAW,GAAG,GAAG;QACjB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAW,UAAU;QAC9B,IAAA,CAAA,OAAO,GAAG,IAAI;;QAGd,IAAA,CAAA,UAAU,GAAkB,IAAI;IAIc;IAErD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,kBAAkB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACN;IAEA,kBAAkB,GAAA;AACd,QAAA,MAAM,IAAI,GAAuC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACnF,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IAC3B;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,KAAK;IACxE;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;AAEA,IAAA,eAAe,CAAC,OAA2B,EAAA;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO;IAC/E;AAEA,IAAA,cAAc,CAAC,OAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,IAAI,sBAAsB;IAC7F;AAEA,IAAA,cAAc,CAAC,IAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;IAC5E;AAEA,IAAA,iBAAiB,CAAC,WAA2B,EAAA;QACzC,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/E;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE;IACxD;;IAIA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,kBAAkB,EAAE;IAC7B;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;IAEA,UAAU,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,MAAM,MAAM,GAAsB;YAC9B,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,QAAQ,EAAE,IAAI,CAAC,WAAW;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,MAAM,EAAE,IAAI,CAAC,SAAwC;YACrD,IAAI,EAAE,IAAI,CAAC,OAAO;SACrB;AAED,QAAA,MAAM,WAAW,GAAmB;YAChC,EAAE,EAAE,cAAc,EAAE;YACpB,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,MAAM,CAAC;SACpB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE;QAC/B;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;;AAIA,IAAA,iBAAiB,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY;YAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;IACJ;;AAIA,IAAA,SAAS,CAAC,WAA2B,EAAA;AACjC,QAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;IAEA,YAAY,CAAC,WAA2B,EAAE,KAAa,EAAA;QACnD,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;QAEpC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C;IACJ;;AAIA,IAAA,SAAS,CAAC,WAA2B,EAAA;AACjC,QAAA,OAAO,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM;IAC/C;AAEA,IAAA,YAAY,CAAC,WAA2B,EAAA;;AAEpC,QAAA,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;AACvD,YAAA,GAAG,CAAC;AACJ,YAAA,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAA0B;AACpE,SAAA,CAAC,CAAC;IACP;AAEA,IAAA,aAAa,CAAC,WAA2B,EAAA;AACrC,QAAA,WAAW,CAAC,cAAc,GAAG,SAAS;IAC1C;AAEA,IAAA,gBAAgB,CAAC,WAA2B,EAAA;QACxC,IAAI,CAAC,WAAW,CAAC,cAAc;AAAE,YAAA,WAAW,CAAC,cAAc,GAAG,EAAE;AAChE,QAAA,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,KAAK;AACd,SAAA,CAAC;IACN;IAEA,mBAAmB,CAAC,WAA2B,EAAE,KAAa,EAAA;QAC1D,IAAI,CAAC,WAAW,CAAC,cAAc;YAAE;QACjC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,YAAA,WAAW,CAAC,cAAc,GAAG,SAAS;QAC1C;IACJ;+GA3LS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,6GCvBvC,63XAoPA,EAAA,MAAA,EAAA,CAAA,u7JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Na,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cAGtB,KAAK,EAAA,QAAA,EAAA,63XAAA,EAAA,MAAA,EAAA,CAAA,u7JAAA,CAAA,EAAA;;sBAGhB;;;AEfL,MAAM,WAAW,GAAG,EAAE;AAEtB;;;;;;AAMG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAmB,EAAE;QAC1B,IAAA,CAAA,OAAO,GAAmB,EAAE;AA+BvC,IAAA;AA7BG,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzD,IAAA,IAAI,CAAC,MAAuB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QACtB;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAG;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;+GAhCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC0BD;AACA;AACA,MAAM,YAAY,GAAG;IACjB,gBAAgB;IAChB,eAAe;IACf,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,yBAAyB;IACzB,+BAA+B;IAC/B,wBAAwB;IACxB,2BAA2B;IAC3B,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,0BAA0B;CAC7B;MAgEY,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBA/EzB,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,cAAc;YACd,mBAAmB;YACnB,kBAAkB;AAClB,YAAA,0BAA0B,aAMtB,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,OAAA,EAAA;;YAmBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAEb,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAIrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,SAAA,EA/Cd;YACP,iBAAiB;YACjB,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,wBAAwB;YACxB,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,qBAAqB;YACrB,uBAAuB;AAC1B,SAAA,EAAA,OAAA,EAAA,CA1BG,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAmBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,CAAA,CAAA;;4FAoBR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA9D5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,YAAY;AAC1B,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;AAChB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,iBAAiB;wBACjB,cAAc;wBACd,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;wBACxB,eAAe;wBACf,oBAAoB;wBACpB,iBAAiB;wBACjB,qBAAqB;wBACrB,qBAAqB;wBACrB,gCAAgC;wBAChC,qBAAqB;wBACrB,uBAAuB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE;;wBAEL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;;wBAEb,gBAAgB;wBAChB,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,gBAAgB;wBAChB,gBAAgB;wBAChB,gBAAgB;wBAChB,yBAAyB;wBACzB,+BAA+B;wBAC/B,wBAAwB;wBACxB,2BAA2B;wBAC3B,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;wBAClB,0BAA0B;AAC7B,qBAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA;;;AC3HK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;SACZ;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC;AACpE,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC;SAC3G;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,OAAO,CAAC;AACpF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAK,QAAQ;AAChB,YAAA,IAAI,EAAI,MAAM;AACd,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAI,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAK,KAAK,EAAK,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;YACrF,IAAI,WAAW,CAAC,MAAM,EAAI,KAAK,EAAK,cAAc,CAAC,IAAI,EAAI,SAAS,EAAE,EAAE,EAAS,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtH,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9H,YAAA,IAAI,WAAW,CAAC,MAAM,EAAI,MAAM,EAAI,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACjJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAS,aAAa;AAC7B,YAAA,UAAU,EAAM,QAAQ;AACxB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,GAAG,EAAa,KAAK;AACrB,YAAA,KAAK,EAAW,MAAM;AACtB,YAAA,MAAM,EAAU,MAAM;AACtB,YAAA,OAAO,EAAS,WAAW;AAC3B,YAAA,YAAY,EAAI,KAAK;AACrB,YAAA,MAAM,EAAU,SAAS;AAC5B,SAAA,CAAC;IACN;AACH;;AC7BK,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AACpD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;AAClF,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iCAAiC,CAAC;AACnH,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,qCAAqC;SACtH;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,eAAe,EAAE,SAAS;AAC7B,SAAA,CAAC;IACN;AACH;;AC1BK,MAAO,+BAAgC,SAAQ,eAAe,CAAA;AAChE,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACxD,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAClF,KAAK,CAAC;SACb;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;AClBK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,MAAM,EAAE,iBAAiB;AAC5B,SAAA,CAAC;IACN;AACH;;ACZK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,OAAO,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YAChF,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EACnD,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA,CAAC;IACN;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;SAC1F;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,SAAS;AACnB,SAAA,CAAC;IACN;AACH;;ACZK,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAC5D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE;SACd;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,yCAAyC,CAAC;AACzH,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC;YAC3E,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;SACnH;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,KAAK;AACrB,SAAA,CAAC;IACN;AACH;;ACpBK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;AAC/E,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;AClCK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,QAAQ,CAAC;AAC5F,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,OAAO;AACnB,SAAA,CAAC;IACN;AACH;;AClCK,MAAO,8BAA+B,SAAQ,eAAe,CAAA;AAC/D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,QAAQ,CAAC;QAC9E,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;SACzE;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACnBK,MAAO,wBAAyB,SAAQ,eAAe,CAAA;AACzD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,GAAG,EAAE,QAAQ;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;AACxF,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;SAC3E;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,MAAM;AAClB,SAAA,CAAC;IACN;AACH;;ACLK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;YAC5E,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EACpF,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,QAAQ,GAAG;YACZ,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;SACtB;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,OAAO,EAAE,kBAAkB;AAC9B,SAAA,CAAC;IACN;IAEQ,YAAY,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,8BAA8B,EAAE;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,wBAAwB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AACnE,QAAA,IAAI,YAAY;AAAE,YAAA,YAAY,CAAC,OAAO,GAAG,WAAW;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,IAAI;IACf;AACH;;AC1DK,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AACxD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA;AACI,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;AACnB,YAAA;AACI,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,cAAc,CAAC,MAAM;AAC3B,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;SACtB;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACzBK,MAAO,sBAAuB,SAAQ,eAAe,CAAA;AACvD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACdK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,QAAQ,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../projects/iox-builder/src/lib/panels/panel-event.service.ts","../../../projects/iox-builder/src/lib/panels/panel.model.ts","../../../projects/iox-builder/src/lib/services/component-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.service.ts","../../../projects/iox-builder/src/lib/services/drag-engine.service.ts","../../../projects/iox-builder/src/lib/services/data-source-registry.service.ts","../../../projects/iox-builder/src/lib/services/viewport.service.ts","../../../projects/iox-builder/src/lib/services/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/interaction-preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/builder-clipboard.service.ts","../../../projects/iox-builder/src/lib/style-compose.ts","../../../projects/iox-builder/src/lib/models/component.model.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.directive.ts","../../../projects/iox-builder/src/lib/services/preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/symbol-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.html","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.ts","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.html","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.ts","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.html","../../../projects/iox-builder/src/lib/builder.component.ts","../../../projects/iox-builder/src/lib/builder.component.html","../../../projects/iox-builder/src/lib/directives/iox-dropzone.directive.ts","../../../projects/iox-builder/src/lib/components/section/section.component.ts","../../../projects/iox-builder/src/lib/components/container/container.component.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.component.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel-child.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.html","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.html","../../../projects/iox-builder/src/lib/services/builder-history.service.ts","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/components/button/button.config.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.config.ts","../../../projects/iox-builder/src/lib/components/card/card.config.ts","../../../projects/iox-builder/src/lib/components/container/container.config.ts","../../../projects/iox-builder/src/lib/components/divider/divider.config.ts","../../../projects/iox-builder/src/lib/components/heading/heading.config.ts","../../../projects/iox-builder/src/lib/components/icon/icon.config.ts","../../../projects/iox-builder/src/lib/components/image/image.config.ts","../../../projects/iox-builder/src/lib/components/link/link.config.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.config.ts","../../../projects/iox-builder/src/lib/components/list-item/list-item.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/lib/components/list/list.config.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nexport enum PanelEventTypes {\n ELEMENT_SELECT = 'elementselect',\n ELEMENT_DESELECT = 'elementdeselect',\n PANEL_SELECTED = 'panelselect',\n PANEL_OPEN = 'panelopen',\n PANEL_CLOSE = 'panelclose',\n BINDING_CHANGED = 'bindingchanged',\n NODE_RENDERED = 'noderendered',\n /** Open the Style panel in preset-edit mode for the given preset ID. */\n PRESET_EDIT = 'presetedit',\n /** Fired after a preset is created, updated, or deleted so panels refresh their list. */\n PRESETS_CHANGED = 'presetschanged',\n /** Fired when a linked symbol instance's styles change — propagates to all instances. */\n SYMBOLS_CHANGED = 'symbolschanged',\n /** Fired on every structural or style mutation — used by BuilderHistoryService to snapshot. */\n LAYOUT_CHANGED = 'layoutchanged',\n /** Open the Interactions panel in preset-edit mode for the given preset ID. */\n INTERACTION_PRESET_EDIT = 'interactionpresetedit',\n /** Fired after an interaction preset is created, updated, or deleted so panels refresh. */\n INTERACTION_PRESETS_CHANGED = 'interactionpresetschanged',\n}\n\nexport interface PanelEvent {\n type: PanelEventTypes;\n data: any;\n}\n\n@Injectable()\nexport class PanelEventService {\n private panelEventSubject = new Subject<PanelEvent>();\n\n subscribe(next: (panelEvent: PanelEvent) => void): Subscription {\n return this.panelEventSubject.asObservable().subscribe(next);\n }\n\n emit(type: PanelEventTypes, data?: any): void {\n this.panelEventSubject.next({ type, data });\n }\n}","export enum PanelTypes {\n BINDINGS = 'Bindings',\n STYLES = 'Styles',\n PAGE = 'Page',\n INTERACTIONS = 'Interactions',\n}\n\n// ── Route animation presets ──────────────────────────────\nexport type RouteAnimationPreset =\n | 'none'\n | 'fade'\n | 'slideUp'\n | 'slideDown'\n | 'zoomIn'\n | 'zoomOut'\n | 'blurIn'\n | 'flip';\n\nexport const ROUTE_ANIMATION_OPTIONS: { label: string; value: RouteAnimationPreset; description: string }[] = [\n { value: 'none', label: 'None', description: 'No animation' },\n { value: 'fade', label: 'Fade', description: 'Opacity cross-dissolve' },\n { value: 'slideUp', label: 'Slide Up', description: 'Rise from below + fade' },\n { value: 'slideDown', label: 'Slide Down', description: 'Drop from above + fade' },\n { value: 'zoomIn', label: 'Zoom In', description: 'Scale up from 96% + fade' },\n { value: 'zoomOut', label: 'Zoom Out', description: 'Scale down from 104% + fade' },\n { value: 'blurIn', label: 'Blur', description: 'Unblur + fade' },\n { value: 'flip', label: 'Flip', description: 'Perspective tilt + fade' },\n];\n\nexport const EASING_OPTIONS: { label: string; value: string }[] = [\n { label: 'Ease', value: 'ease' },\n { label: 'Ease In', value: 'ease-in' },\n { label: 'Ease Out', value: 'ease-out' },\n { label: 'Ease In Out', value: 'ease-in-out' },\n { label: 'Linear', value: 'linear' },\n { label: 'Spring', value: 'cubic-bezier(0.34, 1.56, 0.64, 1)' },\n];\n\n// ── Page-level settings ──────────────────────────────────\nexport interface PageStyleSettings {\n backgroundColor: string;\n backgroundType: 'solid' | 'gradient' | 'image';\n backgroundGradient: string;\n backgroundImage: string;\n fontFamily: string;\n textColor: string;\n maxWidth: string;\n}\n\nexport interface PageScrollSettings {\n enabled: boolean;\n lerp: number;\n wheelMultiplier: number;\n touchMultiplier: number;\n direction: 'vertical' | 'horizontal';\n infinite: boolean;\n}\n\nexport interface PageRouteAnimationSettings {\n enter: RouteAnimationPreset;\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n}\n\nexport interface PageSettings {\n style: PageStyleSettings;\n scroll: PageScrollSettings;\n routeAnimation: PageRouteAnimationSettings;\n}\n\nexport function defaultPageSettings(): PageSettings {\n return {\n style: {\n backgroundColor: '#ffffff',\n backgroundType: 'solid',\n backgroundGradient: 'linear-gradient(135deg, #ffffff 0%, #f0f0f0 100%)',\n backgroundImage: '',\n fontFamily: 'Poppins, sans-serif',\n textColor: '#000000',\n maxWidth: '1440px',\n },\n scroll: {\n enabled: true,\n lerp: 0.1,\n wheelMultiplier: 1,\n touchMultiplier: 1,\n direction: 'vertical',\n infinite: false,\n },\n routeAnimation: {\n enter: 'fade',\n leave: 'fade',\n duration: 400,\n easing: 'ease',\n },\n };\n}\n\nexport enum ToolbarAction {\n SelectParent = 'select-parent',\n Duplicate = 'duplicate',\n Delete = 'delete',\n Play = 'play',\n SaveAsBlock = 'save-as-block',\n MakeGlobal = 'make-global',\n RemoveGlobal = 'remove-global',\n EditPreset = 'edit-preset',\n DetachSymbol = 'detach-symbol',\n EditInteractionPreset = 'edit-interaction-preset',\n CopyPreset = 'copy-preset',\n PastePreset = 'paste-preset',\n CopyInteractionPreset = 'copy-interaction-preset',\n PasteInteractionPreset = 'paste-interaction-preset',\n Copy = 'copy',\n Paste = 'paste',\n}\n\nexport enum NodeAction {\n Delete = 'delete',\n Duplicate = 'duplicate',\n}\n\nexport enum BuilderMode {\n Select = 'select',\n Style = 'style',\n Pan = 'pan'\n}\n\nexport enum DeviceMode {\n Desktop = 'desktop',\n Tablet = 'tablet',\n Mobile = 'mobile',\n}\n\nexport interface DeviceOption {\n mode: DeviceMode;\n label: string;\n icon: string;\n width: number;\n /** Simulated browser viewport height in CSS px. */\n height: number;\n}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440, height: 900 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768, height: 1024 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375, height: 812 },\n];\n\nexport interface ZoomOption {\n label: string;\n value: number | 'fit';\n}\n\nexport const ZOOM_OPTIONS: ZoomOption[] = [\n { label: '25%', value: 25 },\n { label: '50%', value: 50 },\n { label: '75%', value: 75 },\n { label: '100%', value: 100 },\n { label: 'Fit', value: 'fit' },\n];\n\nexport interface ScreenWidthOption {\n label: string;\n width: number;\n}\n\nexport const SCREEN_WIDTH_OPTIONS: ScreenWidthOption[] = [\n { label: '1280', width: 1280 },\n { label: '1440', width: 1440 },\n { label: '1920', width: 1920 },\n { label: '2560', width: 2560 },\n];","import { Injectable, Type } from '@angular/core';\n\n@Injectable()\nexport class ComponentRegistryService {\n private components: Record<string, { type: string; component: Type<any>; config: any }> = {};\n\n getComponent(type: string): Type<any> | null {\n return this.components[type]?.component ?? null;\n }\n\n hasComponent(type: string): boolean {\n return !!this.components[type];\n }\n\n createConfig(type: string): any | null {\n const configType = this.components[type]?.config;\n return configType ? new configType() : null;\n }\n\n register(type: string, component: Type<any>, config: any): void {\n this.components[type] = { type, component, config };\n }\n\n getAll() {\n return Object.values(this.components);\n }\n}","import { ComponentRef, Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { BuilderMode, ToolbarAction } from '../panels/panel.model';\n\nexport interface OverlayBoxSpacing {\n top: number; right: number; bottom: number; left: number;\n}\n\nexport interface OverlayBoxModel {\n margin: OverlayBoxSpacing;\n padding: OverlayBoxSpacing;\n border: OverlayBoxSpacing;\n}\n\nexport interface OverlayEntry {\n element: HTMLElement;\n componentName: string;\n boxModel?: OverlayBoxModel; // populated for hover only\n mode: BuilderMode;\n node?: ComponentNode;\n componentRef?: ComponentRef<any>;\n}\n\nexport { ToolbarAction } from '../panels/panel.model';\n\nexport interface NodeRef {\n element: HTMLElement;\n componentRef: ComponentRef<any>;\n}\n\n@Injectable()\nexport class OverlayService {\n private hoverSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private selectSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private nodeMap = new Map<ComponentNode, NodeRef>();\n\n public hover$ = this.hoverSubject.asObservable();\n public select$ = this.selectSubject.asObservable();\n\n private containerElement: HTMLElement | null = null;\n private scrollContainerElement: HTMLElement | null = null;\n\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\n\n /** Emits cursor coords when a canvas element is right-clicked. */\n public contextMenu$ = new Subject<{ x: number; y: number }>();\n\n triggerContextMenu(x: number, y: number): void {\n this.contextMenu$.next({ x, y });\n }\n\n setContainer(container: HTMLElement | null): void {\n this.containerElement = container;\n }\n\n getContainer(): HTMLElement | null {\n return this.containerElement;\n }\n\n setScrollContainer(el: HTMLElement | null): void {\n this.scrollContainerElement = el;\n if (el) { this.scrollContainer$.next(el); }\n }\n\n getScrollContainer(): HTMLElement | null {\n return this.scrollContainerElement;\n }\n\n /**\n * Resolve the inner styled element.\n * Builder components apply [ngStyle] on their first child element,\n * so computed styles (padding, margin) live there — not on the host.\n */\n getStyledElement(host: HTMLElement): HTMLElement {\n return (host.firstElementChild as HTMLElement) || host;\n }\n\n // ── Node → Element registry ──────────────────────────────\n registerNode(node: ComponentNode, element: HTMLElement, componentRef: ComponentRef<any>): void {\n this.nodeMap.set(node, { element, componentRef });\n }\n\n unregisterNode(node: ComponentNode): void {\n this.nodeMap.delete(node);\n }\n\n getNodeRef(node: ComponentNode): NodeRef | undefined {\n return this.nodeMap.get(node);\n }\n\n /** Return all registered node → ref entries. */\n getAllNodeEntries(): IterableIterator<[ComponentNode, NodeRef]> {\n return this.nodeMap.entries();\n }\n\n /** Find a registered node whose host element matches the given DOM element. */\n findNodeByElement(element: HTMLElement): { node: ComponentNode; ref: NodeRef } | undefined {\n for (const [node, ref] of this.nodeMap) {\n if (ref.element === element) {\n return { node, ref };\n }\n }\n return undefined;\n }\n\n setHover(element: HTMLElement, componentName: string, mode: BuilderMode): void {\n if (this.selectSubject.getValue()?.element === element) return;\n this.hoverSubject.next({ element, componentName, boxModel: this.buildBoxModel(element), mode });\n }\n\n clearHover(): void {\n this.hoverSubject.next(null);\n }\n\n setSelect(element: HTMLElement, componentName: string, mode: BuilderMode, node?: ComponentNode, componentRef?: ComponentRef<any>): void {\n this.hoverSubject.next(null);\n this.selectSubject.next({ element, componentName, mode, node, componentRef });\n }\n\n clearSelect(): void {\n this.selectSubject.next(null);\n }\n\n refreshSelect(): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current });\n }\n\n /** Lightweight swap for drag-preview tracking. */\n updateSelectElement(element: HTMLElement): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current, element });\n }\n\n buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const inner = this.getStyledElement(host);\n // Margin lives on the wrapper div (host.parentElement) — iox-outer-{id} is\n // applied there so it participates in the parent flex layout.\n const wrapper = (host.parentElement as HTMLElement) || host;\n const si = window.getComputedStyle(inner);\n const sw = window.getComputedStyle(wrapper);\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(sw.marginTop), right: px(sw.marginRight), bottom: px(sw.marginBottom), left: px(sw.marginLeft) },\n padding: { top: px(si.paddingTop), right: px(si.paddingRight), bottom: px(si.paddingBottom), left: px(si.paddingLeft) },\n border: { top: px(si.borderTopWidth), right: px(si.borderRightWidth), bottom: px(si.borderBottomWidth), left: px(si.borderLeftWidth) },\n };\n }\n\n}","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from './component-registry.service';\n\nexport interface DragPayload {\n type: 'internal' | 'external';\n data: ComponentNode | string;\n sourceId: string | null;\n sourceIndex: number;\n}\n\nexport interface IoxDropEvent {\n payload: DragPayload;\n targetId: string;\n insertIndex: number;\n}\n\nfunction deepCloneNode(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n regenerateIds(clone);\n return clone;\n}\n\nfunction regenerateIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).substr(2, 9);\n node.styleId = undefined;\n (node.children || []).forEach(regenerateIds);\n}\n\n@Injectable()\nexport class DragEngineService {\n\n constructor(private registry: ComponentRegistryService) {}\n\n // ── Shared drop handler — used by all layout components ───────────────────\n\n handleDrop(\n children: ComponentNode[],\n event: IoxDropEvent,\n dropListId: string,\n cdr: ChangeDetectorRef,\n afterDrop?: () => void,\n ): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n const config = this.registry.createConfig(payload.data as string);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\n this.dropComplete$.next(config);\n }\n afterDrop?.();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId !== dropListId) {\n const sourceData = payload.sourceId ? this.getData(payload.sourceId) : null;\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.getCdr(payload.sourceId!)?.detectChanges();\n }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n } else {\n // Source not in the drop-zone registry → came from an external panel\n // (e.g. the built-in blocks panel stores one pre-built node object and\n // reuses it across drags). Deep-clone with fresh IDs so each drop\n // produces a fully independent node, preventing shared CSS rules.\n const cloned = deepCloneNode(item);\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const currentIdx = children.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n children.splice(currentIdx, 1);\n children.splice(adjustedIdx, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n }\n afterDrop?.();\n }\n\n // ── Drop-zone registry ────────────────────────────────────\n\n private ids: string[] = [];\n private elMap = new Map<string, HTMLElement>();\n private dataMap = new Map<string, any[]>();\n private cdrMap = new Map<string, ChangeDetectorRef>();\n private dropCbMap = new Map<string, (e: IoxDropEvent) => void>();\n private postDropMap = new Map<string, () => void>();\n\n public readonly ids$ = new BehaviorSubject<string[]>([]);\n public readonly isDragging$ = new BehaviorSubject<boolean>(false);\n public readonly deepTarget$ = new BehaviorSubject<string | null>(null);\n /** Emits the dropped/inserted ComponentNode after every successful drop. */\n public readonly dropComplete$ = new Subject<ComponentNode>();\n\n // ── Active drag state ─────────────────────────────────────\n\n private _isDragging = false;\n private _payload: DragPayload | null = null;\n private _sourceEl: HTMLElement | null = null;\n\n /**\n * For internal drags: a DOM clone of the dragged element appended to <body>.\n * Lives outside any CSS transform, so position:fixed works in viewport coords.\n * For external drags: the label chip overlay.\n */\n private _overlay: HTMLElement | null = null;\n /** Where on the element the user grabbed it (for accurate ghost positioning). */\n private _grabOffsetX = 0;\n private _grabOffsetY = 0;\n\n // ── Pointer tracking ──────────────────────────────────────\n\n private _lastPointerX = 0;\n private _lastPointerY = 0;\n\n // ── Deep-target tracking ──────────────────────────────────\n\n private _deepTargetId: string | null = null;\n\n /** Injected overlay div marking the active drop target. */\n private _targetOverlay: HTMLElement | null = null;\n\n // ── Insertion indicator ───────────────────────────────────\n\n private _indicator: HTMLElement | null = null;\n private _indicatorContainerId: string | null = null;\n private _indicatorIndex = -1;\n private _indicatorRaf = 0;\n\n /** Elements that have temporary FLIP inline styles — cleared on drag end. */\n private _flipEls = new Set<HTMLElement>();\n\n // ── Viewport scale ────────────────────────────────────────\n\n private _scale = 1;\n\n /** Called by BuilderComponent whenever the viewport scale changes. */\n setScale(scale: number): void { this._scale = scale; }\n\n // ── Dropzone rect cache — snapshotted at drag start and on scroll ─────────\n\n private _dropzoneRectCache = new Map<string, DOMRect>();\n\n private _snapshotRects(): void {\n this._dropzoneRectCache.clear();\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (el) this._dropzoneRectCache.set(id, el.getBoundingClientRect());\n }\n }\n\n // ── Root-escape ───────────────────────────────────────────\n\n private readonly ROOT_ESCAPE_PX = 14;\n private _rootEscapeActiveFor: string | null = null;\n\n // ─────────────────────────────────────────────────────────\n // Element lookup — elMap first, DOM id fallback\n // ─────────────────────────────────────────────────────────\n\n private _getEl(id: string): HTMLElement | null {\n return this.elMap.get(id) ?? document.getElementById(id);\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop-zone registration\n // ─────────────────────────────────────────────────────────\n\n registerDropzone(\n id: string,\n el: HTMLElement,\n data: any[],\n cdr: ChangeDetectorRef,\n dropCb: (e: IoxDropEvent) => void,\n postDrop?: () => void,\n ): void {\n if (!id) return;\n\n // Stamp id on element so DOM-walk helpers (_isRootContainer) find it.\n el.id = id;\n\n if (!this.ids.includes(id)) {\n this.ids = [...this.ids, id];\n this.ids$.next(this.ids);\n }\n this.elMap.set(id, el);\n this.dataMap.set(id, data);\n this.cdrMap.set(id, cdr);\n this.dropCbMap.set(id, dropCb);\n if (postDrop) this.postDropMap.set(id, postDrop);\n\n interact(el).dropzone({\n accept: '[data-iox-draggable]',\n overlap: 'pointer',\n });\n }\n\n unregisterDropzone(id: string, el: HTMLElement): void {\n this.ids = this.ids.filter(i => i !== id);\n this.elMap.delete(id);\n this.dataMap.delete(id);\n this.cdrMap.delete(id);\n this.dropCbMap.delete(id);\n this.postDropMap.delete(id);\n this.ids$.next(this.ids);\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n // ─────────────────────────────────────────────────────────\n // Draggable registration\n // ─────────────────────────────────────────────────────────\n\n registerDraggable(el: HTMLElement, getPayload: () => DragPayload): void {\n el.setAttribute('data-iox-draggable', '');\n\n interact(el).draggable({\n // Don't start a drag when the pointer goes down inside a contenteditable\n // element (e.g. a text block in inline-edit mode).\n ignoreFrom: '[contenteditable=\"true\"]',\n listeners: {\n start: (event) => this._onDragStart(event, el, getPayload),\n move: (event) => this._onDragMove(event),\n end: (event) => this._onDragEnd(event),\n },\n modifiers: [],\n });\n }\n\n unregisterDraggable(el: HTMLElement): void {\n el.removeAttribute('data-iox-draggable');\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n getData(id: string): any[] | undefined { return this.dataMap.get(id); }\n getCdr(id: string): ChangeDetectorRef | undefined { return this.cdrMap.get(id); }\n invokePostDrop(id: string): void { this.postDropMap.get(id)?.(); }\n\n consumeDeepTarget(): string | null {\n const v = this._deepTargetId;\n this._deepTargetId = null;\n return v;\n }\n\n // ─────────────────────────────────────────────────────────\n // Drag lifecycle\n // ─────────────────────────────────────────────────────────\n\n private _onDragStart(event: any, el: HTMLElement, getPayload: () => DragPayload): void {\n if (el.hasAttribute('data-editing')) {\n event.interaction.stop();\n return;\n }\n this._payload = getPayload();\n this._sourceEl = el;\n this._isDragging = true;\n this._rootEscapeActiveFor = null;\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n this.isDragging$.next(true);\n\n if (this._payload.type === 'internal') {\n // ── Clone the element and append to <body> ────────────────────────────\n //\n // DOM structure for a canvas item:\n // div[ioxDraggable] (el — the drag wrapper, may be wider than content)\n // └─ <app-card> / <app-section> … (Angular component host)\n // └─ div.card-root / div.section-root … (visual root with styles)\n //\n // el.getBoundingClientRect() gives the wrapper's rect, which can be\n // wider than the visual element when the wrapper is in a flex container\n // that stretches it. This causes the ghost to have wrong dimensions\n // and the grab offset to be calculated from the wrong origin.\n //\n // Fix: use the Angular component host (el.firstElementChild) for both\n // the rect measurement and as the clone source.\n // - Rect from host → correct visual dimensions and true grab offset.\n // - Clone from host → carries _ngcontent-* attrs so encapsulated CSS works.\n //\n // The wrapper el still gets iox-drag-active-source (visibility:hidden)\n // to keep its layout space stable while dragging.\n const hostEl = (el.firstElementChild as HTMLElement) ?? el;\n const rect = hostEl.getBoundingClientRect();\n this._grabOffsetX = event.client.x - rect.left;\n this._grabOffsetY = event.client.y - rect.top;\n\n // Scale factor: getBoundingClientRect() returns scaled viewport px,\n // but the clone renders at natural CSS px (no transform parent on body).\n // Apply the same scale transform so the clone matches the visual size\n // exactly — no explicit width/height, no overflow clipping.\n const scale = this._scale;\n\n // Cancel fill:forwards animations before cloning so the ghost shows\n // the element at its natural (un-animated) state, and so the original\n // element is clean after a same-position drop (where Angular won't\n // destroy/recreate the DOM node and InteractionEngine.detach() won't fire).\n hostEl.getAnimations().forEach(a => a.cancel());\n\n const clone = hostEl.cloneNode(true) as HTMLElement;\n // getBoundingClientRect() returns scaled viewport px. Divide by scale\n // to get the natural CSS px — this constrains the clone to match the\n // original's width when it's reparented to <body> (no canvas parent).\n // overflow:hidden suppresses scrollbars that can appear when the clone's\n // children lose their layout context (e.g. percentage-width children).\n const cssWidth = Math.round(rect.width / scale);\n const cssHeight = Math.round(rect.height / scale);\n clone.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${cssWidth}px`,\n `height:${cssHeight}px`,\n `transform:scale(${scale})`,\n 'transform-origin:top left',\n 'pointer-events:none',\n 'overflow:hidden',\n 'z-index:9999',\n 'margin:0',\n ].join(';');\n clone.classList.add('iox-drag-moving');\n document.body.appendChild(clone);\n this._overlay = clone;\n\n // Hide original wrapper in-place (keeps layout space so container size is stable).\n el.classList.add('iox-drag-active-source');\n } else {\n // ── Sidebar external drag — show a label chip ─────────────────────────\n this._createExternalChip(this._payload, event.client.x, event.client.y);\n el.classList.add('iox-drag-source');\n }\n\n this._snapshotRects();\n }\n\n private _onDragMove(event: any): void {\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n\n // Move the clone (or chip) under the cursor.\n if (this._overlay) {\n this._overlay.style.left = (event.client.x - this._grabOffsetX) + 'px';\n this._overlay.style.top = (event.client.y - this._grabOffsetY) + 'px';\n }\n\n this._updateDeepTarget();\n this._updateIndicator();\n }\n\n private _onDragEnd(event: any): void {\n // Restore original element visibility BEFORE Angular re-renders on drop.\n if (this._sourceEl) {\n this._sourceEl.classList.remove('iox-drag-active-source');\n this._sourceEl.classList.remove('iox-drag-source');\n }\n document.querySelectorAll('.iox-drag-active-source')\n .forEach(el => el.classList.remove('iox-drag-active-source'));\n\n // Remove clone/chip overlay.\n this._removeOverlay();\n\n // Remove indicator BEFORE committing so calcInsertIndex sees a clean DOM.\n this._removeIndicator();\n document.body.classList.remove('iox-drag-has-indicator');\n\n // Clean up any FLIP transform/transition inline styles left on container children.\n for (const el of this._flipEls) {\n el.style.transform = '';\n el.style.transition = '';\n }\n this._flipEls.clear();\n\n this._commitDrop();\n\n this._removeTargetOverlay();\n document.querySelectorAll('.iox-drag-over').forEach(el => el.classList.remove('iox-drag-over'));\n this._rootEscapeActiveFor = null;\n this._isDragging = false;\n this._payload = null;\n this._sourceEl = null;\n this.isDragging$.next(false);\n this.deepTarget$.next(null);\n setTimeout(() => { this._deepTargetId = null; });\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop commit\n // ─────────────────────────────────────────────────────────\n\n private _commitDrop(): void {\n if (!this._payload) return;\n\n const targetId = this._deepTargetId ?? 'canvas-preview';\n const insertIndex = this.calcInsertIndex(targetId);\n\n const dropCb = this.dropCbMap.get(targetId);\n if (!dropCb) return;\n\n dropCb({ payload: this._payload, targetId, insertIndex });\n }\n\n // ─────────────────────────────────────────────────────────\n // External-drag chip (sidebar items only)\n // ─────────────────────────────────────────────────────────\n\n private _createExternalChip(payload: DragPayload, pointerX: number, pointerY: number): void {\n this._removeOverlay();\n const label = typeof payload.data === 'string' ? payload.data : 'Component';\n const chip = document.createElement('div');\n chip.className = 'iox-drag-overlay iox-drag-overlay-chip';\n chip.textContent = label;\n // Chip follows 14px below-right of cursor.\n this._grabOffsetX = -14;\n this._grabOffsetY = -14;\n chip.style.left = (pointerX + 14) + 'px';\n chip.style.top = (pointerY + 14) + 'px';\n document.body.appendChild(chip);\n this._overlay = chip;\n }\n\n private _removeOverlay(): void {\n this._overlay?.remove();\n this._overlay = null;\n this._grabOffsetX = 0;\n this._grabOffsetY = 0;\n }\n\n // ─────────────────────────────────────────────────────────\n // Deep-target detection (smallest bounding-rect area)\n // ─────────────────────────────────────────────────────────\n\n private _updateDeepTarget(): void {\n const px = this._lastPointerX;\n const py = this._lastPointerY;\n\n let bestId: string | null = null;\n let bestArea = Infinity;\n\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (!el) continue;\n // Never drop an element into its own subtree: skip any dropzone\n // whose DOM element lives inside the dragged source wrapper.\n if (this._sourceEl?.contains(el)) continue;\n // Skip elements hidden by interaction pre-state (pointer-events: none marks\n // entrance-type targets that are currently opacity:0 in the canvas).\n if (el.style.pointerEvents === 'none') continue;\n const rect = this._dropzoneRectCache.get(id) ?? el.getBoundingClientRect();\n if (px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom) {\n const area = rect.width * rect.height;\n if (area < bestArea) { bestArea = area; bestId = id; }\n }\n }\n\n // Root-escape with hysteresis.\n // Purpose: when the cursor is near the top/bottom edge of a root-level\n // section, treat the target as canvas-preview so the user can insert\n // between root sections.\n //\n // IMPORTANT: only activate if the cursor was ALREADY inside this section\n // (i.e. deepTarget is the section itself or a nested child of it).\n // Without this guard, crossing from Section A into the top 14px of\n // Section C immediately locks the target to canvas-preview and prevents\n // the user from ever reaching Section C's nested containers.\n if (this._rootEscapeActiveFor) {\n const escEl = this._getEl(this._rootEscapeActiveFor);\n if (escEl) {\n const r = this._dropzoneRectCache.get(this._rootEscapeActiveFor) ?? escEl.getBoundingClientRect();\n const inside = px >= r.left && px <= r.right && py >= r.top && py <= r.bottom;\n if (inside) { bestId = 'canvas-preview'; }\n else { this._rootEscapeActiveFor = null; }\n } else {\n this._rootEscapeActiveFor = null;\n }\n }\n\n if (!this._rootEscapeActiveFor &&\n bestId && bestId !== 'canvas-preview' && this._isRootContainer(bestId)) {\n const el = this._getEl(bestId);\n if (el) {\n const rect = this._dropzoneRectCache.get(bestId) ?? el.getBoundingClientRect();\n const nearEdge =\n py <= rect.top + this.ROOT_ESCAPE_PX ||\n py >= rect.bottom - this.ROOT_ESCAPE_PX;\n // Only escape if we were already targeting this section or\n // something nested inside it — not when crossing into it fresh.\n const wasInsideThisSection =\n this._deepTargetId === bestId ||\n this._isDescendantDropzone(this._deepTargetId, bestId);\n if (nearEdge && wasInsideThisSection) {\n this._rootEscapeActiveFor = bestId;\n bestId = 'canvas-preview';\n }\n }\n }\n\n if (bestId !== this._deepTargetId) {\n if (this._deepTargetId) {\n const old = this._getEl(this._deepTargetId);\n old?.classList.remove('iox-drag-over');\n }\n this._deepTargetId = bestId;\n if (bestId) {\n this._getEl(bestId)?.classList.add('iox-drag-over');\n }\n // Move injected overlay to the new target container.\n this._moveTargetOverlay(bestId);\n this.deepTarget$.next(bestId);\n\n // Reset indicator position state when container changes.\n this._indicatorIndex = -1;\n this._indicatorContainerId = null;\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Target overlay — fixed to <body>, sized from getBoundingClientRect\n // so it is always above all canvas content regardless of stacking\n // contexts or background colors inside the target container.\n // ─────────────────────────────────────────────────────────\n\n /** Call on every canvas scroll tick to keep the fixed-position drop-target\n * overlay aligned with the container element that moved in the viewport. */\n refreshDragOverlays(): void {\n if (!this._isDragging) return;\n this._snapshotRects();\n this._moveTargetOverlay(this._deepTargetId);\n }\n\n private _moveTargetOverlay(targetId: string | null): void {\n if (!targetId || targetId === 'canvas-preview') {\n this._removeTargetOverlay();\n return;\n }\n\n const el = this._getEl(targetId);\n if (!el) { this._removeTargetOverlay(); return; }\n\n if (!this._targetOverlay) {\n this._targetOverlay = document.createElement('div');\n this._targetOverlay.className = 'iox-drop-target-overlay';\n document.body.appendChild(this._targetOverlay);\n }\n\n const rect = el.getBoundingClientRect();\n this._targetOverlay.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${rect.width}px`,\n `height:${rect.height}px`,\n 'pointer-events:none',\n 'z-index:9998',\n 'box-sizing:border-box',\n ].join(';');\n }\n\n private _removeTargetOverlay(): void {\n this._targetOverlay?.remove();\n this._targetOverlay = null;\n }\n\n private _isRootContainer(id: string): boolean {\n const el = this._getEl(id);\n if (!el) return false;\n let parent = el.parentElement;\n while (parent) {\n if (parent.id === 'canvas-preview') return true;\n if (parent.id && this.ids.includes(parent.id)) return false;\n parent = parent.parentElement;\n }\n return false;\n }\n\n /**\n * Returns true if the dropzone with `childId` is a DOM descendant of the\n * dropzone with `parentId`. Used to decide whether the cursor was already\n * \"inside\" a root section before triggering root-escape.\n */\n private _isDescendantDropzone(childId: string | null, parentId: string): boolean {\n if (!childId) return false;\n const childEl = this._getEl(childId);\n const parentEl = this._getEl(parentId);\n if (!childEl || !parentEl) return false;\n return parentEl.contains(childEl);\n }\n\n // ─────────────────────────────────────────────────────────\n // Insertion indicator (animates open so siblings shift smoothly)\n // ─────────────────────────────────────────────────────────\n\n private _updateIndicator(): void {\n const targetId = this._deepTargetId ?? 'canvas-preview';\n document.body.classList.add('iox-drag-has-indicator');\n const idx = this.calcInsertIndex(targetId);\n if (idx !== this._indicatorIndex || targetId !== this._indicatorContainerId) {\n this._indicatorIndex = idx;\n this._positionIndicator(targetId, idx);\n }\n }\n\n private _positionIndicator(containerId: string, index: number): void {\n const container = this._getEl(containerId);\n if (!container) return;\n\n const cs = window.getComputedStyle(container);\n const isRow =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n const containerChanged = this._indicatorContainerId !== containerId;\n\n if (containerChanged) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n }\n\n const needsCreate = !this._indicator;\n if (needsCreate) {\n this._indicator = document.createElement('div');\n this._indicator.className = 'iox-insert-indicator';\n\n if (isRow) {\n // Start at width:0 with align-self:stretch so it spans the full\n // container height once visible. overflow:hidden keeps it invisible\n // at width:0 — no painted pixels, no phantom height like min-height\n // would cause. Animates width 0→3px on first appearance.\n this._indicator.style.cssText =\n 'flex-shrink:0;width:0;align-self:stretch;' +\n 'background:#6366f1;border-radius:2px;pointer-events:none;margin:0;' +\n 'transition:width 140ms ease,margin 140ms ease;overflow:hidden;';\n } else {\n this._indicator.style.cssText =\n 'height:0;width:100%;background:#6366f1;border-radius:2px;' +\n 'pointer-events:none;margin:0;display:block;' +\n 'transition:height 140ms ease,margin 140ms ease;overflow:hidden;';\n }\n }\n\n this._indicatorContainerId = containerId;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n\n // ── FLIP: snapshot sibling rects BEFORE DOM change (reposition case only) ──\n let beforeRects: Map<Element, DOMRect> | null = null;\n if (!needsCreate) {\n beforeRects = new Map<Element, DOMRect>();\n Array.from(container.children).forEach(child => {\n if (child !== this._indicator) {\n beforeRects!.set(child, child.getBoundingClientRect());\n }\n });\n }\n\n // Reposition indicator in DOM.\n if (!this._indicator) return;\n if (index >= children.length) {\n container.appendChild(this._indicator);\n } else {\n container.insertBefore(this._indicator, children[index]);\n }\n\n // ── FLIP: animate siblings from their old positions to their new positions ──\n if (beforeRects) {\n Array.from(container.children).forEach(child => {\n const before = beforeRects!.get(child);\n if (!before) return;\n const after = child.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;\n\n const el = child as HTMLElement;\n this._flipEls.add(el);\n // Invert: snap element back to where it was, then animate to new pos.\n el.style.transition = 'none';\n el.style.transform = `translate(${dx}px,${dy}px)`;\n requestAnimationFrame(() => {\n el.style.transition = 'transform 140ms ease';\n el.style.transform = '';\n });\n });\n }\n\n // Animate indicator open (first appearance in this container only).\n if (needsCreate) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicatorRaf = requestAnimationFrame(() => {\n if (!this._indicator) return;\n if (isRow) {\n this._indicator.style.width = '3px';\n this._indicator.style.margin = '0 3px';\n } else {\n this._indicator.style.height = '4px';\n this._indicator.style.margin = '3px 0';\n }\n });\n }\n }\n\n private _removeIndicator(): void {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n this._indicatorContainerId = null;\n this._indicatorIndex = -1;\n }\n\n // ─────────────────────────────────────────────────────────\n // calcInsertIndex\n // ─────────────────────────────────────────────────────────\n\n calcInsertIndex(containerId: string): number {\n const container = this._getEl(containerId);\n if (!container) return 0;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n if (!children.length) return 0;\n\n const cs = window.getComputedStyle(container);\n const isHorizontal =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n if (isHorizontal) {\n if (this._lastPointerX < rect.left + rect.width / 2) return i;\n } else {\n if (this._lastPointerY < rect.top + rect.height / 2) return i;\n }\n }\n return children.length;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Page-scoped registry that holds the current page's data sources.\n * Scoped to PageUiComponent.providers[] so every builder service\n * (BindingsComponent, BuilderRepeaterComponent) shares the same instance.\n *\n * Seeded by PageUiComponent.loadPage() from saved page data, then kept\n * up to date by BindingsComponent whenever the user adds/removes a source.\n */\n@Injectable()\nexport class DataSourceRegistryService {\n private _ds$ = new BehaviorSubject<IoxDataSource[]>([]);\n\n readonly dataSources$ = this._ds$.asObservable();\n\n setDataSources(ds: IoxDataSource[]): void {\n this._ds$.next(ds);\n }\n\n getDataSources(): IoxDataSource[] {\n return this._ds$.value;\n }\n\n findByAlias(alias: string): IoxDataSource | undefined {\n return this._ds$.value.find(ds => ds.alias === alias);\n }\n\n getAliasOptions(): { label: string; value: string }[] {\n return this._ds$.value.map(ds => ({ label: ds.alias, value: ds.alias }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DeviceMode, DEVICE_OPTIONS } from '../panels/panel.model';\n\nexport interface ViewportState {\n device: DeviceMode;\n /** Real canvas width in CSS pixels (e.g., 1440 for desktop). */\n width: number;\n /** Real canvas height in CSS pixels (e.g., 900 for desktop). Simulates the browser viewport. */\n height: number;\n /** Visual scale factor (0–1+). Canvas is rendered at `width × height` then scaled. */\n scale: number;\n}\n\nconst STORAGE_KEY = 'iox_builder_viewport';\n\n@Injectable()\nexport class ViewportService {\n private state: ViewportState = this.loadFromStorage();\n\n private stateSubject = new BehaviorSubject<ViewportState>(this.state);\n public state$ = this.stateSubject.asObservable();\n\n getState(): ViewportState {\n return this.state;\n }\n\n getScale(): number {\n return this.state.scale;\n }\n\n setDevice(device: DeviceMode): void {\n const option = DEVICE_OPTIONS.find(d => d.mode === device);\n if (!option) return;\n this.update({ device, width: option.width, height: option.height });\n }\n\n setScale(scale: number): void {\n this.update({ scale: Math.max(0.1, Math.min(2, scale)) });\n }\n\n setWidth(width: number): void {\n this.update({ width });\n }\n\n /**\n * Calculate the scale that makes the canvas fit inside the available editor width.\n * @param availableWidth The pixel width of the editor area that holds the canvas.\n * @param padding Optional horizontal padding to subtract (default 40px total).\n */\n fitToWidth(availableWidth: number, padding = 40): void {\n const usable = availableWidth - padding;\n if (usable <= 0) return;\n const scale = Math.min(1, usable / this.state.width);\n this.setScale(scale);\n }\n\n /**\n * Calculate the scale that makes the canvas fit both the available width AND height.\n * Uses the smaller of the two scale factors so the entire viewport frame is visible.\n * @param containerWidth Available container width in screen pixels.\n * @param containerHeight Available container height in screen pixels.\n * @param padding Total padding to subtract from both dimensions (default 40px).\n */\n fitToSize(containerWidth: number, containerHeight: number, padding = 40): void {\n const usableW = containerWidth - padding;\n const usableH = containerHeight - padding;\n if (usableW <= 0 || usableH <= 0) return;\n const scaleX = usableW / this.state.width;\n const scaleY = usableH / this.state.height;\n this.setScale(Math.min(1, scaleX, scaleY));\n }\n\n /**\n * Convert a screen-space coordinate to canvas-space (unscaled).\n * Call this when translating pointer events into canvas-relative positions.\n */\n screenToCanvas(screenX: number, screenY: number, canvasRect: DOMRect): { x: number; y: number } {\n return {\n x: (screenX - canvasRect.left) / this.state.scale,\n y: (screenY - canvasRect.top) / this.state.scale,\n };\n }\n\n private update(partial: Partial<ViewportState>): void {\n this.state = { ...this.state, ...partial };\n this.stateSubject.next(this.state);\n this.saveToStorage();\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\n } catch {}\n }\n\n private loadFromStorage(): ViewportState {\n const defaults: ViewportState = {\n device: DeviceMode.Desktop,\n width: DEVICE_OPTIONS[0].width,\n height: DEVICE_OPTIONS[0].height,\n scale: 0.75,\n };\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return defaults;\n const saved = JSON.parse(raw);\n const device = (Object.values(DeviceMode) as string[]).includes(saved.device)\n ? saved.device as DeviceMode\n : defaults.device;\n const option = DEVICE_OPTIONS.find(d => d.mode === device) ?? DEVICE_OPTIONS[0];\n return {\n device,\n width: typeof saved.width === 'number' && saved.width > 0 ? saved.width : option.width,\n height: typeof saved.height === 'number' && saved.height > 0 ? saved.height : option.height,\n scale: typeof saved.scale === 'number' ? Math.max(0.1, Math.min(2, saved.scale)) : defaults.scale,\n };\n } catch {\n return defaults;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\n\ninterface AttachedInteraction {\n node: ComponentNode;\n interaction: IoxInteraction;\n cleanup: () => void;\n}\n\n/**\n * Wires ComponentNode interactions to live DOM elements via the\n * OverlayService node-element registry.\n *\n * Call `attach(node)` after the node is rendered and registered.\n * Call `detach(node)` on destroy to tear down listeners/observers.\n */\n@Injectable()\nexport class InteractionEngineService {\n private attached = new Map<ComponentNode, AttachedInteraction[]>();\n\n /** Elements that have had pre-state applied (hidden by attach). */\n private preStatedElements = new Set<HTMLElement>();\n\n /**\n * Toggle state for click interactions with reverseActions.\n * false = next click runs actions (primary); true = next click runs reverseActions.\n */\n private toggleStates = new Map<string, boolean>();\n\n /**\n * Pre-states queued for elements that weren't registered yet when the owner\n * node's attach() ran. Keyed by target node ID. Consumed when the target\n * element's own attach() fires.\n */\n private pendingPreStates = new Map<string, InteractionAction[]>();\n\n /** Action types that animate an element from hidden → visible. */\n private readonly ENTRANCE_TYPES = new Set([\n 'fadeIn', 'moveUp', 'moveDown', 'moveLeft', 'moveRight', 'scaleIn', 'show',\n ]);\n\n /** Action types that animate an element from visible → hidden. */\n private readonly EXIT_TYPES = new Set(['fadeOut', 'scaleOut', 'hide']);\n\n constructor(private overlayService: OverlayService) {}\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n\n const inBuilder = this.isBuilderMode();\n\n // Apply any pre-states queued for THIS element by earlier-registered nodes.\n // Pending entries are only added when appropriate (see loop below), so always consume.\n if (node.id) {\n const pending = this.pendingPreStates.get(node.id);\n if (pending) {\n for (const action of pending) {\n this.applyPreState(ref.element, action);\n }\n this.pendingPreStates.delete(node.id);\n }\n }\n\n if (!node.interactions?.length) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n // Pre-state: hide target elements before their entrance animation fires.\n // In builder mode, skip auto-fire triggers (pageLoad, viewportEnter, scrollProgress)\n // because those triggers are also suppressed in builder mode — targets would stay\n // permanently hidden. Manual triggers (click, hover) are kept active on the canvas,\n // so their targets should start in the correct pre-state.\n const skipPreState = inBuilder && ix.trigger !== 'click' && ix.trigger !== 'hover';\n if (!skipPreState) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) {\n this.applyPreState(target, action);\n } else if (action.target && action.target !== 'self') {\n const list = this.pendingPreStates.get(action.target) ?? [];\n list.push(action);\n this.pendingPreStates.set(action.target, list);\n }\n }\n }\n }\n\n const cleanup = this.attachInteraction(node, ix, ref.element);\n cleanups.push({ node, interaction: ix, cleanup });\n }\n\n this.attached.set(node, cleanups);\n }\n\n /** Tear down all interaction listeners for a node and reset its animated state. */\n detach(node: ComponentNode): void {\n const entries = this.attached.get(node);\n if (!entries) return;\n for (const entry of entries) {\n entry.cleanup();\n }\n this.attached.delete(node);\n\n // Reset toggle state so re-attach starts from the primary actions.\n for (const entry of entries) {\n if (entry.interaction.reverseActions?.length) {\n this.toggleStates.delete(entry.interaction.id);\n }\n }\n\n // Cancel Web Animations and strip any inline pre-state styles that\n // were applied by applyPreState() so the element returns to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // Also clean up pre-state on any target elements this node was animating.\n if (node.interactions) {\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n // Remove any pending pre-states for unregistered targets.\n if (action.target && action.target !== 'self') {\n const pending = this.pendingPreStates.get(action.target);\n if (pending) {\n const filtered = pending.filter(a => a !== action);\n if (filtered.length) {\n this.pendingPreStates.set(action.target, filtered);\n } else {\n this.pendingPreStates.delete(action.target);\n }\n }\n }\n // Clean up inline styles on already-registered target elements.\n const target = this.resolveTarget(node, action);\n if (target && this.preStatedElements.has(target)) {\n target.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(target);\n this.preStatedElements.delete(target);\n }\n }\n }\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.detach(node);\n this.attach(node);\n }\n\n /**\n * Replay all interactions on a node immediately, regardless of their trigger.\n * Used by the builder overlay play button for in-editor animation preview.\n * Uses fill:'none' so the element returns to its natural state after the preview.\n */\n replay(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n // Clear any leftover inline styles so the pre-state applies cleanly.\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // In builder mode pre-state is never applied on attach, so apply it now\n // to give an accurate hidden→visible preview. It is cleaned up via\n // executeAction's anim.finished handler once the animation completes.\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) this.applyPreState(target, action);\n }\n }\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n // In builder mode, automatic triggers don't auto-fire — use the play button instead.\n // Click/hover remain active so users can test those interactions on the canvas.\n if (this.isBuilderMode() && (ix.trigger === 'pageLoad' || ix.trigger === 'viewportEnter' || ix.trigger === 'scrollProgress')) {\n return () => {};\n }\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\n case 'viewportEnter':\n return this.attachViewportEnter(node, ix, element);\n case 'click':\n return this.attachClick(node, ix, element);\n case 'hover':\n return this.attachHover(node, ix, element);\n case 'scrollProgress':\n // Scroll-progress is complex — deferred.\n return () => {};\n default:\n return () => {};\n }\n }\n\n // ── Triggers ─────────────────────────────────────────────\n\n private attachPageLoad(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const timer = setTimeout(() => {\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => this.runActions(node, ix.actions));\n } else {\n this.runActions(node, ix.actions);\n }\n }, 50);\n return () => clearTimeout(timer);\n }\n\n private attachViewportEnter(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const firedSet = new Set<string>();\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) continue;\n // Element is in viewport but may be inside a still-fading parent.\n // Defer until all pre-stated ancestors finish their entrance animation.\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => {\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n firedSet.add(key);\n this.runActions(node, ix.actions);\n });\n continue;\n }\n firedSet.add(key);\n this.runActions(node, ix.actions);\n }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n return () => observer.disconnect();\n }\n\n private isBuilderMode(): boolean {\n return document.body.classList.contains('builder-active');\n }\n\n /** Returns true if any DOM ancestor of element is currently faded out via pre-state. */\n private hasPreStatedAncestor(element: HTMLElement): boolean {\n let el = element.parentElement;\n while (el && el !== document.body) {\n if (this.preStatedElements.has(el)) return true;\n el = el.parentElement;\n }\n return false;\n }\n\n /** Polls via RAF until no ancestor is in pre-state, then fires callback. */\n private deferUntilVisible(element: HTMLElement, callback: () => void): void {\n const poll = () => {\n if (!this.hasPreStatedAncestor(element)) {\n callback();\n } else {\n requestAnimationFrame(poll);\n }\n };\n requestAnimationFrame(poll);\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = () => {\n if (ix.reverseActions?.length) {\n // Toggle: alternate between primary and reverse actions on each click.\n const isToggled = this.toggleStates.get(ix.id) ?? false;\n this.runActions(node, isToggled ? ix.reverseActions : ix.actions);\n this.toggleStates.set(ix.id, !isToggled);\n } else {\n this.runActions(node, ix.actions);\n }\n };\n element.addEventListener('click', handler);\n return () => element.removeEventListener('click', handler);\n }\n\n private attachHover(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const enterHandler = () => this.runActions(node, ix.actions);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.reverseAction(target, action);\n }\n };\n element.addEventListener('mouseenter', enterHandler);\n element.addEventListener('mouseleave', leaveHandler);\n return () => {\n element.removeEventListener('mouseenter', enterHandler);\n element.removeEventListener('mouseleave', leaveHandler);\n };\n }\n\n // ── Actions ──────────────────────────────────────────────\n\n private runActions(node: ComponentNode, actions: InteractionAction[]): void {\n for (const action of actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction): HTMLElement | null {\n if (action.target === 'self') {\n const ref = this.overlayService.getNodeRef(ownerNode);\n return ref?.element ?? null;\n }\n // Find by node ID\n for (const [n, ref] of this.overlayService.getAllNodeEntries()) {\n if (n.id === action.target) return ref.element;\n }\n return null;\n }\n\n private executeAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // 'both' = backwards (holds first keyframe during delay) + forwards (holds last keyframe after end).\n const anim = element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'both',\n });\n\n if (this.ENTRANCE_TYPES.has(action.type)) {\n anim.finished.then(() => {\n element.style.removeProperty('pointer-events');\n this.preStatedElements.delete(element);\n // Builder: clear inline pre-state so cancelling animations later\n // doesn't leave the element invisible after a play preview.\n if (this.isBuilderMode()) this.clearInlineAnimationStyles(element);\n }).catch(() => {});\n } else if (this.EXIT_TYPES.has(action.type)) {\n // Once the exit animation finishes the element is invisible —\n // disable pointer events so it doesn't silently block clicks underneath it.\n anim.finished.then(() => {\n element.style.setProperty('pointer-events', 'none');\n }).catch(() => {});\n }\n }\n\n /**\n * Freeze an element at the animation's starting frame immediately, before any\n * trigger fires. Called for ALL entrance-type actions regardless of trigger so\n * that a click-triggered fadeIn on a menu overlay also starts it hidden.\n *\n * Also sets pointer-events:none so the invisible element does not block clicks\n * on other content beneath it. Pointer events are restored in executeAction()\n * once the entrance animation finishes.\n */\n private applyPreState(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n const first = keyframes[0] as Record<string, string>;\n for (const [prop, val] of Object.entries(first)) {\n (element.style as any)[prop] = String(val);\n }\n // Invisible element must not intercept pointer events.\n const opacity = first['opacity'];\n if (opacity === '0' || (opacity as any) === 0) {\n element.style.setProperty('pointer-events', 'none');\n }\n this.preStatedElements.add(element);\n }\n\n private clearInlineAnimationStyles(element: HTMLElement): void {\n element.style.removeProperty('opacity');\n element.style.removeProperty('transform');\n element.style.removeProperty('visibility');\n element.style.removeProperty('pointer-events');\n }\n\n private reverseAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // Reverse: play the keyframes backwards\n element.animate([...keyframes].reverse(), {\n duration: action.duration,\n easing: action.easing,\n fill: 'forwards',\n });\n }\n\n private buildAnimation(action: InteractionAction): { keyframes: Keyframe[]; options: KeyframeAnimationOptions } {\n const dist = action.params?.['distance'] ?? 20;\n let keyframes: Keyframe[] = [];\n\n switch (action.type) {\n case 'fadeIn':\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n case 'fadeOut':\n keyframes = [{ opacity: 1 }, { opacity: 0 }];\n break;\n case 'moveUp':\n keyframes = [{ transform: `translateY(${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveDown':\n keyframes = [{ transform: `translateY(-${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveLeft':\n keyframes = [{ transform: `translateX(${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'moveRight':\n keyframes = [{ transform: `translateX(-${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'scaleIn':\n keyframes = [{ transform: 'scale(0.8)', opacity: 0 }, { transform: 'scale(1)', opacity: 1 }];\n break;\n case 'scaleOut':\n keyframes = [{ transform: 'scale(1)', opacity: 1 }, { transform: 'scale(0.8)', opacity: 0 }];\n break;\n case 'rotate':\n const deg = action.params?.['degrees'] ?? 360;\n keyframes = [{ transform: `rotate(0deg)` }, { transform: `rotate(${deg}deg)` }];\n break;\n case 'show':\n keyframes = [{ opacity: 0, visibility: 'hidden' }, { opacity: 1, visibility: 'visible' }];\n break;\n case 'hide':\n keyframes = [{ opacity: 1, visibility: 'visible' }, { opacity: 0, visibility: 'hidden' }];\n break;\n case 'toggleVisibility':\n // Toggle is stateful — handled separately via element style\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n }\n\n return {\n keyframes,\n options: {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n },\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { InteractionPreset } from '../models/component.model';\n\n/**\n * InteractionPresetRegistryService — in-memory store for org-level interaction presets.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class InteractionPresetRegistryService {\n private presets = new Map<string, InteractionPreset>();\n\n setPresets(presets: InteractionPreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): InteractionPreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): InteractionPreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: InteractionPreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface BuilderClipboard {\n node?: ComponentNode;\n presetId?: string;\n interactionPresetId?: string;\n}\n\n/**\n * BuilderClipboardService — in-memory typed clipboard for the page builder.\n *\n * Stores element copies, style preset references, and interaction preset references.\n * Lives in memory only — no navigator.clipboard usage.\n * Scoped to PageUiComponent.providers[] — one clipboard per builder instance.\n */\n@Injectable()\nexport class BuilderClipboardService {\n private _clip: BuilderClipboard = {};\n\n copyNode(node: ComponentNode): void {\n this._clip = { node: JSON.parse(JSON.stringify(node)) };\n }\n\n copyPreset(presetId: string): void {\n this._clip = { ...this._clip, presetId };\n }\n\n copyInteractionPreset(interactionPresetId: string): void {\n this._clip = { ...this._clip, interactionPresetId };\n }\n\n getNode(): ComponentNode | undefined { return this._clip.node; }\n getPresetId(): string | undefined { return this._clip.presetId; }\n getInteractionPresetId(): string | undefined { return this._clip.interactionPresetId; }\n\n clear(): void { this._clip = {}; }\n}\n","// Virtual trait → composed CSS property helpers.\n//\n// Several style traits are \"virtual\" — they don't map 1:1 to a CSS property but\n// are components of a multi-function CSS value. composeVirtualTraits() strips\n// these virtual keys from the style map and replaces them with the correctly\n// composed CSS properties (filter, backdrop-filter, transform, transition).\n//\n// The same function is used by the render directive (initial mount + state\n// restore) and by the style panel's onUpdate / setStateOverride paths, so\n// the CSS output is always consistent regardless of how styles are applied.\n\n// ─── Filter ──────────────────────────────────────────────────────────────────\n\nconst FILTER_FUNS: [trait: string, fn: string, def: string][] = [\n ['filterBlur', 'blur', '0px'],\n ['filterBrightness', 'brightness', '1'],\n ['filterContrast', 'contrast', '1'],\n ['filterGrayscale', 'grayscale', '0'],\n ['filterSaturate', 'saturate', '1'],\n ['filterHueRotate', 'hue-rotate', '0deg'],\n ['filterSepia', 'sepia', '0'],\n ['filterInvert', 'invert', '0'],\n];\n\n// ─── Backdrop-filter ─────────────────────────────────────────────────────────\n\nconst BACKDROP_FUNS: [trait: string, fn: string, def: string][] = [\n ['backdropBlur', 'blur', '0px'],\n ['backdropBrightness', 'brightness', '1'],\n ['backdropContrast', 'contrast', '1'],\n ['backdropSaturate', 'saturate', '1'],\n];\n\n// ─── Transform ───────────────────────────────────────────────────────────────\n\nconst TRANSFORM_FUNS: [trait: string, fn: string, def: string][] = [\n ['translateX', 'translateX', '0px'],\n ['translateY', 'translateY', '0px'],\n ['scaleX', 'scaleX', '1'],\n ['scaleY', 'scaleY', '1'],\n ['rotate', 'rotate', '0deg'],\n ['skewX', 'skewX', '0deg'],\n ['skewY', 'skewY', '0deg'],\n];\n\n// ─── ::marker pseudo-element ─────────────────────────────────────────────────\n\nconst MARKER_FUNS: [trait: string, cssProp: string][] = [\n ['markerColor', 'color'],\n ['markerFontSize', 'fontSize'],\n];\n\n// ─── All virtual trait names ──────────────────────────────────────────────────\n\nexport const VIRTUAL_TRAIT_KEYS = new Set<string>([\n ...FILTER_FUNS.map(([t]) => t),\n ...BACKDROP_FUNS.map(([t]) => t),\n ...TRANSFORM_FUNS.map(([t]) => t),\n 'transitionDuration', 'transitionTimingFunction', 'transitionDelay',\n ...MARKER_FUNS.map(([t]) => t),\n]);\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction buildFns(\n funs: [string, string, string][],\n src: Record<string, any>,\n): string {\n return funs\n .filter(([t,, d]) => src[t] != null && src[t] !== '' && src[t] !== d)\n .map(([t, fn]) => `${fn}(${src[t]})`)\n .join(' ');\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Strip virtual trait keys from `raw` and emit their composed CSS equivalents.\n *\n * When composing a partial state-override map (hover, active…), pass the full\n * base style map as `base` so non-overridden components (e.g. filterBrightness\n * when only filterBlur is overridden) are preserved in the composed output.\n * When operating on a complete style map, omit `base` — it defaults to `raw`.\n */\nexport function composeVirtualTraits(\n raw: Record<string, any>,\n base: Record<string, any> = raw,\n): Record<string, any> {\n // Copy all non-virtual properties as-is\n const result: Record<string, any> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (!VIRTUAL_TRAIT_KEYS.has(k)) result[k] = v;\n }\n\n // Merge base values for any virtual key absent from the partial override map\n const merged = (funs: [string, string, string][]): Record<string, any> => {\n const m: Record<string, any> = {};\n for (const [t] of funs) m[t] = raw[t] ?? base[t];\n return m;\n };\n\n // filter\n const filterStr = buildFns(FILTER_FUNS, merged(FILTER_FUNS));\n if (filterStr) result['filter'] = filterStr;\n\n // backdrop-filter\n const backdropStr = buildFns(BACKDROP_FUNS, merged(BACKDROP_FUNS));\n if (backdropStr) result['backdropFilter'] = backdropStr;\n\n // transform\n const transformStr = buildFns(TRANSFORM_FUNS, merged(TRANSFORM_FUNS));\n if (transformStr) result['transform'] = transformStr;\n\n // transition — only emit when duration is non-zero\n const dur = raw['transitionDuration'] ?? base['transitionDuration'];\n const ease = raw['transitionTimingFunction'] ?? base['transitionTimingFunction'];\n const del = raw['transitionDelay'] ?? base['transitionDelay'];\n if (dur && ease && dur !== '0ms' && dur !== '0s') {\n const delPart = del && del !== '0ms' && del !== '0s' ? ` ${del}` : '';\n result['transition'] = `all ${dur} ${ease}${delPart}`;\n }\n\n // ::marker pseudo-element — collected into __markerStyles so StyleRegistryService\n // can emit a separate `.iox-node-{id}::marker { … }` rule.\n const markerStyles: Record<string, any> = {};\n for (const [trait, cssProp] of MARKER_FUNS) {\n const val = raw[trait] ?? base[trait];\n if (val != null && val !== '') markerStyles[cssProp] = val;\n }\n if (Object.keys(markerStyles).length) {\n result['__markerStyles'] = markerStyles;\n }\n\n return result;\n}\n","export enum StyleCategory {\n Layout = 'Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\n List = 'List',\n // Legacy — kept for backward compat; prefer Size\n Dimensions = 'Dimensions',\n}\n\nexport interface IoxBinding {\n prop: string;\n source: string;\n path: string;\n fallback?: any;\n}\n\n/**\n * When mode=single: looks up a single CMS item by matching a schema field\n * against a URL path param (e.g. /project/:projectId → field _id).\n * `defaultId` is used as a fallback value in the builder preview when no\n * live route is active.\n */\nexport interface DsFilterByRouteParam {\n field: string;\n routeParam: string;\n defaultId?: string;\n}\n\n/**\n * When mode=query: each entry maps a schema field to a URL query string\n * key (e.g. ?status=active → field \"status\").\n * `defaultValue` is used as a fallback in the builder preview.\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam: string;\n defaultValue?: string;\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'internal-api' | 'external-api' | 'static';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: string;\n cms?: {\n contentType: string;\n filter?: any;\n limit?: number;\n sort?: any;\n /** Single-result lookup: match field against a route path param */\n filterByRouteParam?: DsFilterByRouteParam;\n /** Array-result filtering: match fields against URL query params */\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\nexport type InteractionTrigger = 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility';\n\nexport interface InteractionAction {\n type: InteractionActionType;\n /** 'self' targets the node that owns the interaction; otherwise a node ID. */\n target: 'self' | string;\n /** Duration in milliseconds. */\n duration: number;\n /** Delay in milliseconds before the action starts. */\n delay: number;\n easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';\n /** Extra parameters (e.g. { distance: 20 } for move actions). */\n params?: Record<string, any>;\n /** If true, the action only plays once (relevant for viewport/scroll triggers). */\n once?: boolean;\n}\n\nexport interface IoxInteraction {\n id: string;\n trigger: InteractionTrigger;\n actions: InteractionAction[];\n /**\n * Optional second set of actions for click-toggle behaviour.\n * When set, the first click runs `actions` and the second click runs\n * `reverseActions`, alternating on every subsequent click.\n * Only meaningful for trigger === 'click'.\n */\n reverseActions?: InteractionAction[];\n}\n\n/**\n * Maps each action type to its logical inverse for auto-populating toggle\n * reverse actions. Types without a natural inverse are omitted.\n */\nexport const INVERSE_ACTION: Partial<Record<InteractionActionType, InteractionActionType>> = {\n fadeIn: 'fadeOut',\n fadeOut: 'fadeIn',\n show: 'hide',\n hide: 'show',\n scaleIn: 'scaleOut',\n scaleOut: 'scaleIn',\n moveUp: 'moveDown',\n moveDown: 'moveUp',\n moveLeft: 'moveRight',\n moveRight: 'moveLeft',\n};\n\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\n { value: 'viewportEnter', label: 'Enter viewport', icon: 'ph-thin ph-eye' },\n { value: 'click', label: 'Click', icon: 'ph-thin ph-cursor-click' },\n { value: 'hover', label: 'Hover', icon: 'ph-thin ph-hand-pointing' },\n { value: 'scrollProgress', label: 'Scroll progress', icon: 'ph-thin ph-arrow-fat-lines-down' },\n];\n\nexport const ACTION_TYPE_OPTIONS: { value: InteractionActionType; label: string }[] = [\n { value: 'fadeIn', label: 'Fade in' },\n { value: 'fadeOut', label: 'Fade out' },\n { value: 'moveUp', label: 'Move up' },\n { value: 'moveDown', label: 'Move down' },\n { value: 'moveLeft', label: 'Move left' },\n { value: 'moveRight', label: 'Move right' },\n { value: 'scaleIn', label: 'Scale in' },\n { value: 'scaleOut', label: 'Scale out' },\n { value: 'rotate', label: 'Rotate' },\n { value: 'show', label: 'Show' },\n { value: 'hide', label: 'Hide' },\n { value: 'toggleVisibility', label: 'Toggle visibility' },\n];\n\nexport const EASING_OPTIONS = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];\n\n// ── Style Presets ─────────────────────────────────────────────────────────────\n\n/**\n * A named, reusable collection of CSS style properties stored at the org level.\n * Elements reference a preset by `stylePresetId`. At render time the engine\n * merges `preset.styleProps → element.styleOverrides` so local overrides win.\n */\nexport interface StylePreset {\n id: string;\n name: string;\n /** Flat CSS property map — same shape as IoxLayoutNode.styleProps. */\n styleProps: Record<string, any>;\n /** Per-state style overrides stored alongside the preset (e.g. hover, active, focus). */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n}\n\n/** A reusable element definition whose instances all stay in sync.\n * Stored in the `symbols` backend collection; referenced by ComponentNode.symbolId. */\nexport interface IoxSymbol {\n id: string;\n name: string;\n /** Full serialised node tree — same shape as a page layout node. */\n node: Record<string, any>;\n}\n\n/**\n * A named, reusable collection of IoxInteraction[] stored at the org level.\n * Elements reference a preset by `interactionPresetId`. Editing the preset\n * propagates updated interactions to all linked elements immediately.\n */\nexport interface InteractionPreset {\n id: string;\n name: string;\n interactions: IoxInteraction[];\n}\n\nexport type ElementState = 'hover' | 'active' | 'focus' | 'first-child' | 'last-child' | 'nth-child(odd)' | 'nth-child(even)';\n\n/** Interaction pseudo-classes — compiled to .iox-node-{id}:state */\nexport const INTERACTION_STATES: ElementState[] = ['hover', 'active', 'focus'];\n\n/** Structural pseudo-classes — compiled to .iox-outer-{id}:state */\nexport const STRUCTURAL_STATES: ElementState[] = ['first-child', 'last-child', 'nth-child(odd)', 'nth-child(even)'];\n\nexport const SUPPORTED_STATES: ElementState[] = [...INTERACTION_STATES, ...STRUCTURAL_STATES];\n\nexport interface ComponentNode {\n id?: string;\n /**\n * The CSS class key (`iox-node-{styleId}`) used by the style engine.\n * Set on clone nodes to point back to the original template node's id,\n * so all repeated rows share a single CSS rule.\n * Absent on original (non-clone) nodes — they use `id` directly.\n */\n styleId?: string;\n type: string;\n inputs?: Record<string, any>;\n traits?: ComponentTrait[];\n styleTraits?: StyleTraitGroup[];\n bindings?: IoxBinding[];\n interactions?: IoxInteraction[];\n children?: ComponentNode[];\n isGlobal?: boolean;\n globalPosition?: 'before' | 'after';\n /** ID of the org-level StylePreset applied to this node. */\n stylePresetId?: string;\n /**\n * CSS properties explicitly overridden by the user after a preset was applied.\n * Serialized to `styleProps` in the page layout JSON when a preset is active.\n * Absent when no preset is applied (full styles stored in styleTraits instead).\n */\n styleOverrides?: Record<string, any>;\n /**\n * Per-state style overrides. Only stores properties that differ from the base\n * style — same sparse pattern as styleOverrides. Each key maps to a flat CSS\n * property map that is compiled to `.iox-node-{id}:hover { … }` etc.\n */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n /** User-defined display name for this node. Used in the layer tree and as an\n * interaction target identifier. Only nodes with a label appear in the\n * interaction target picker. */\n label?: string;\n /** ID of the org-level IoxSymbol this node is linked to.\n * Absent on stamps (independent copies). When present, any style change\n * on this node propagates to all other instances of the same symbol. */\n symbolId?: string;\n /** Set when the user detaches an instance from its symbol. Remembers the\n * origin symbol ID so the instance can be re-linked (resynced) later. */\n detachedSymbolId?: string;\n /** ID of the org-level InteractionPreset applied to this node.\n * When set, node.interactions reflects the preset's interactions. */\n interactionPresetId?: string;\n}\n\n/**\n * Build a full StyleTraitGroup[] schema populated with values from a flat\n * styleProps map. Used when editing a preset in the Style panel — the panel\n * receives the same `StyleTraitGroup[]` shape regardless of context.\n */\nexport function buildPresetStyleTraits(styleProps: Record<string, any>): StyleTraitGroup[] {\n const allGroups: GroupStyleConfig[] = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n ];\n return allGroups.map(group => ({\n ...group,\n traits: group.traits.map(trait => ({\n ...trait,\n default: styleProps[trait.name] !== undefined ? styleProps[trait.name] : trait.default,\n })),\n }));\n}\n\nexport enum TraitInputType {\n Text = 'text',\n Number = 'number',\n Select = 'select',\n Checkbox = 'checkbox',\n Color = 'colorPicker',\n DirectionalSize = 'directionalSize',\n SelectButton = 'selectButton',\n Scrub = 'scrub',\n Range = 'range',\n Icon = 'icon',\n Media = 'media',\n FontFamily = 'fontFamily',\n GridTemplate = 'gridTemplate',\n SectionLabel = 'sectionLabel',\n}\n\nexport interface TraitOptionMap {\n [key: string]: any;\n}\n\n/** Named label/value pair for select options where the display label differs from the CSS value. */\nexport interface TraitSelectOption {\n label: string;\n value: string;\n}\n\nexport interface QuadSizeSegment {\n key: string;\n icon: string;\n ariaLabel?: string;\n}\n\n/** Conditional visibility: this trait only shows when the named sibling trait matches one of the given values. */\nexport interface TraitShowCondition {\n /** name of another trait in the same style group */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\n}\n\nexport interface ComponentTrait {\n name: string;\n label: string;\n type: TraitInputType;\n options?: string[] | TraitSelectOption[] | TraitOptionMap;\n default?: any;\n inline?: boolean;\n /** When set, this trait is hidden unless the named sibling trait has one of the specified values. */\n showWhen?: TraitShowCondition;\n}\n\n// StyleTrait is the same shape as ComponentTrait — unified type\nexport type StyleTrait = ComponentTrait;\n\nexport interface StyleTraitGroup {\n category: string;\n traits: ComponentTrait[];\n}\n\nexport function generateNodeId(): string {\n return Math.random().toString(36).substr(2, 9);\n}\n\nexport class ComponentConfig {\n public id: string;\n public type: string;\n public selector: string;\n public icon: string;\n public category: string;\n public inputs: Record<string, any>;\n public traits: ComponentTrait[];\n public styleTraits: StyleTraitGroup[];\n /** Layout components (e.g. Section) set this to []. Leaf components leave it undefined.\n * RenderDirective uses `node.children !== undefined` to detect layout components. */\n public children?: ComponentNode[];\n\n constructor(type: string, selector: string, icon = 'ph-thin ph-cube', category = 'General') {\n this.id = generateNodeId();\n this.type = type;\n this.selector = selector;\n this.icon = icon;\n this.category = category;\n this.inputs = {};\n this.traits = [];\n this.styleTraits = [];\n }\n\n /** Override specific trait defaults after styleTraits are set.\n * Call this at the end of each subclass constructor. */\n protected applyStyleDefaults(defaults: Record<string, any>): void {\n for (const group of this.styleTraits) {\n for (const trait of group.traits) {\n if (defaults[trait.name] !== undefined) {\n trait.default = defaults[trait.name];\n }\n }\n }\n }\n}\n\nexport class TraitConfig {\n public name: string;\n public label: string;\n public type: TraitInputType;\n public options?: string[] | TraitSelectOption[] | TraitOptionMap;\n public default?: any;\n public inline?: boolean;\n public showWhen?: TraitShowCondition;\n\n constructor(\n name: string,\n label: string,\n type: TraitInputType,\n options?: string[] | TraitSelectOption[] | TraitOptionMap,\n defaultValue?: any,\n inline?: boolean,\n showWhen?: TraitShowCondition\n ) {\n this.name = name;\n this.label = label;\n this.type = type;\n this.options = options;\n this.default = defaultValue;\n this.inline = inline;\n this.showWhen = showWhen;\n }\n}\n\n// StyleTraitConfig is unified with TraitConfig — single class for both traits and style traits\nexport { TraitConfig as StyleTraitConfig };\n\nexport class GroupStyleConfig {\n public category: string;\n public traits: TraitConfig[];\n\n constructor(category: string, traits: TraitConfig[]) {\n this.category = category;\n this.traits = traits;\n }\n}\n\n// ─── Unit constants ───────────────────────────────────────────────────────────\n\nexport const UNITS_ALL: string[] = ['px', '%', 'rem', 'em', 'vw', 'vh'];\nexport const UNITS_NO_VW: string[] = ['px', '%', 'rem', 'em', 'vh'];\nexport const UNITS_FIXED: string[] = ['px', '%', 'rem', 'em'];\nexport const UNITS_DEG: string[] = ['deg'];\n\n// ─── Shared panel utilities ──────────────────────────────────────────────────\n\nexport function resolveTraitControllerType(type: TraitInputType): string {\n switch (type) {\n case TraitInputType.Number: return 'number';\n case TraitInputType.Select: return 'select';\n case TraitInputType.Checkbox: return 'switch';\n case TraitInputType.Color: return 'colorPicker';\n case TraitInputType.DirectionalSize: return 'directionalSize';\n case TraitInputType.SelectButton: return 'selectButton';\n case TraitInputType.Scrub: return 'scrub';\n case TraitInputType.Range: return 'range';\n case TraitInputType.SectionLabel: return 'sectionLabel';\n case TraitInputType.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.FontFamily: return 'select';\n case TraitInputType.GridTemplate: return 'gridTemplate';\n default: return 'text';\n }\n}\n\nexport function resolveTraitOptions(trait: ComponentTrait): any {\n if (\n trait.type === TraitInputType.Color ||\n trait.type === TraitInputType.DirectionalSize ||\n trait.type === TraitInputType.SelectButton ||\n trait.type === TraitInputType.Scrub ||\n trait.type === TraitInputType.Range ||\n trait.type === TraitInputType.Media\n ) {\n return trait.options;\n }\n if (trait.type === TraitInputType.FontFamily) {\n // FontFamily options are injected dynamically by the style panel via FontManagerService.\n // Return empty array here; the panel overrides this in resolveOptions().\n return [];\n }\n if (trait.type !== TraitInputType.Select) {\n return undefined;\n }\n const opts = (trait.options as any[]) ?? [];\n // Already formatted as {label, value}[]\n if (opts.length > 0 && typeof opts[0] === 'object' && 'label' in opts[0]) {\n return opts;\n }\n return opts.map((option: string) => ({ label: option, value: option }));\n}\n\n// ─── Style Groups ─────────────────────────────────────────────────────────────\n\nconst NON_STATIC_POSITIONS = ['relative', 'absolute', 'fixed', 'sticky'];\n\nexport class PositionGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Position, [\n new TraitConfig('position', 'Position', TraitInputType.Select,\n ['static', 'relative', 'absolute', 'fixed', 'sticky'], 'static'),\n new TraitConfig('top', 'T', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('right', 'R', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('bottom', 'B', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('left', 'L', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('zIndex', 'Z', TraitInputType.Scrub, { min: -99, max: 9999, step: 1, units: [''] }, '0', false,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n ]);\n }\n}\n\n// ─── Layout ───────────────────────────────────────────────────────────────────\n\nexport class LayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Layout, [\n new TraitConfig('display', 'Display', TraitInputType.Select,\n ['block', 'inline', 'inline-block', 'flex', 'grid'], 'block'),\n\n // ── Flex-only ─────────────────────────────────────────────────────\n new TraitConfig('flexDirection', 'Direction', TraitInputType.SelectButton, [\n { value: 'row', label: 'Horizontal', icon: 'ph-thin ph-arrow-right' },\n { value: 'row-reverse', label: 'Horizontal Reversed', icon: 'ph-thin ph-arrow-left' },\n { value: 'column', label: 'Vertical', icon: 'ph-thin ph-arrow-down' },\n { value: 'column-reverse', label: 'Vertical Reversed', icon: 'ph-thin ph-arrow-up' },\n ], 'row', false, { trait: 'display', values: 'flex' }),\n new TraitConfig('flexWrap', 'Flex Wrap', TraitInputType.SelectButton, [\n { value: 'nowrap', label: 'No Wrap', icon: 'ph-thin ph-minus' },\n { value: 'wrap', label: 'Wrap', icon: 'ph-thin ph-arrow-elbow-down-right' },\n { value: 'wrap-reverse', label: 'Wrap Reversed', icon: 'ph-thin ph-arrow-elbow-up-right' },\n ], 'nowrap', false, { trait: 'display', values: 'flex' }),\n\n // ── Shared flex + grid ────────────────────────────────────────────\n new TraitConfig('justifyContent', 'Justify', TraitInputType.SelectButton, [\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-right' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-horizontal' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'space-evenly', label: 'Space Evenly', icon: 'ph-thin ph-dots-six' },\n ], 'flex-start', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('alignItems', 'Align Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: ['flex', 'grid'] }),\n\n // ── Grid-only ─────────────────────────────────────────────────────\n new TraitConfig('gridTemplateColumns', 'Columns', TraitInputType.GridTemplate,\n undefined, '1fr', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('gridTemplateRows', 'Rows', TraitInputType.GridTemplate,\n undefined, 'auto', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('justifyItems', 'Justify Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('alignContent', 'Align Content', TraitInputType.SelectButton, [\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-vertical' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n\n // ── Direction (always visible) ────────────────────────────────────\n new TraitConfig('direction', 'Text Direction', TraitInputType.SelectButton, [\n { value: 'ltr', label: 'LTR' },\n { value: 'rtl', label: 'RTL' },\n ], 'ltr'),\n ]);\n }\n}\n\n// ─── Size (replaces Dimensions) ───────────────────────────────────────────────\n\nexport class SizeGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Size, [\n new TraitConfig('width', 'W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('height', 'H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minWidth', 'Min W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minHeight', 'Min H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxWidth', 'Max W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxHeight', 'Max H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Text,\n undefined, 'auto'),\n ]);\n }\n}\n\n/** @deprecated Use SizeGroupStyleConfig instead. */\nexport class DimensionsGroupStyleConfig extends SizeGroupStyleConfig {}\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport class BackgroundGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Background, [\n new TraitConfig('backgroundColor', 'Background', TraitInputType.Color,\n { allowGradient: true, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, 'transparent'),\n ]);\n }\n}\n\nexport class SpacingGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Spacing, [\n new TraitConfig('margin', 'Margin', TraitInputType.DirectionalSize, {\n allowNegative: true,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px'),\n new TraitConfig('padding', 'Padding', TraitInputType.DirectionalSize, {\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px')\n ]);\n }\n}\n\nexport class BorderGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Border, [\n new TraitConfig('borderWidth', 'Border Width', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 32, step: 1 }\n }, '0px'),\n new TraitConfig('borderStyle', 'Border Style', TraitInputType.SelectButton, [\n { value: 'solid', icon: 'ph-thin ph-line-segment' },\n { value: 'dashed', icon: 'ph-thin ph-dots-three' },\n { value: 'dotted', icon: 'ph-thin ph-dots-six' },\n ], 'solid'),\n new TraitConfig('borderColor', 'Border Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#CCCCCC'),\n new TraitConfig('borderRadius', 'Border Radius', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n linkByDefault: true,\n slider: { min: 0, max: 120, step: 1 },\n segments: [\n { key: 'top-left', icon: 'ph-arrow-bend-up-left', ariaLabel: 'top left radius' },\n { key: 'top-right', icon: 'ph-arrow-bend-up-right', ariaLabel: 'top right radius' },\n { key: 'bottom-right', icon: 'ph-arrow-bend-down-right', ariaLabel: 'bottom right radius' },\n { key: 'bottom-left', icon: 'ph-arrow-bend-down-left', ariaLabel: 'bottom left radius' }\n ]\n }, '0px')\n ]);\n }\n}\n\nexport class TypographyGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Typography, [\n new TraitConfig('fontFamily', 'Font Family', TraitInputType.FontFamily, [],\n 'Poppins, sans-serif'),\n new TraitConfig('fontSize', 'Font Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_ALL }, '16px'),\n new TraitConfig('fontWeight', 'Font Weight', TraitInputType.Select,\n ['100', '200', '300', '400', '500', '600', '700', '800', '900'], '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Select,\n ['1', '1.2', '1.4', '1.5', '1.75', '2', '2.5'], '1.5'),\n new TraitConfig('letterSpacing', 'Letter Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', 'Alignment', TraitInputType.SelectButton, [\n { value: 'left', icon: 'ph-thin ph-text-align-left' },\n { value: 'center', icon: 'ph-thin ph-text-align-center' },\n { value: 'right', icon: 'ph-thin ph-text-align-right' },\n { value: 'justify', icon: 'ph-thin ph-text-align-justify' },\n ], 'left'),\n new TraitConfig('fontStyle', 'Italic', TraitInputType.SelectButton,\n { items: [{ value: 'italic', icon: 'ph-thin ph-text-italic', label: 'Italic' }], allowEmpty: true, noneValue: 'normal' },\n 'normal', true),\n new TraitConfig('textDecoration', 'Underline', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n new TraitConfig('_sep_stroke', 'Stroke', TraitInputType.SectionLabel),\n new TraitConfig('WebkitTextStrokeWidth', 'Width', TraitInputType.Scrub,\n { min: 0, max: 10, step: 0.5, units: ['px'] }, '0px', true),\n new TraitConfig('WebkitTextStrokeColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl'] }, 'transparent', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\n // ── Visibility ────────────────────────────────────────\n new TraitConfig('opacity', 'Opacity', TraitInputType.Scrub,\n { min: 0, max: 1, step: 0.01, units: [''] }, '1'),\n new TraitConfig('mixBlendMode', 'Blend Mode', TraitInputType.Select, [\n 'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten',\n 'color-dodge', 'color-burn', 'hard-light', 'soft-light',\n 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity',\n ], 'normal'),\n new TraitConfig('cursor', 'Cursor', TraitInputType.Select, [\n 'auto', 'default', 'pointer', 'text', 'move', 'not-allowed',\n 'grab', 'grabbing', 'crosshair', 'zoom-in', 'zoom-out', 'none',\n ], 'auto'),\n\n // ── Shadow ────────────────────────────────────────────\n new TraitConfig('_sep_shadow', 'Shadow', TraitInputType.SectionLabel),\n new TraitConfig('boxShadow', 'Box Shadow', TraitInputType.Text, undefined, ''),\n new TraitConfig('textShadow', 'Text Shadow', TraitInputType.Text, undefined, ''),\n\n // ── Transform (virtual — composed to CSS transform: …) ─\n new TraitConfig('_sep_transform', 'Transform', TraitInputType.SectionLabel),\n new TraitConfig('translateX', 'TX', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('translateY', 'TY', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('scaleX', 'Scale X', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('scaleY', 'Scale Y', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('rotate', 'Rotate', TraitInputType.Scrub,\n { min: -360, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewX', 'Skew X', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewY', 'Skew Y', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n\n // ── Filter (virtual — composed to CSS filter: …) ──────\n new TraitConfig('_sep_filter', 'Filter', TraitInputType.SectionLabel),\n new TraitConfig('filterBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('filterHueRotate', 'Hue Rotate', TraitInputType.Scrub,\n { min: 0, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('filterBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterGrayscale', 'Grayscale', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterSepia', 'Sepia', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterInvert', 'Invert', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n\n // ── Backdrop filter (virtual — composed to CSS backdrop-filter: …)\n new TraitConfig('_sep_backdrop', 'Backdrop', TraitInputType.SectionLabel),\n new TraitConfig('backdropBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('backdropBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n\n // ── Transition (virtual — composed to CSS transition: all …) ──\n new TraitConfig('_sep_transition', 'Transition', TraitInputType.SectionLabel),\n new TraitConfig('transitionDuration', 'Duration', TraitInputType.Scrub,\n { min: 0, max: 3000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionDelay', 'Delay', TraitInputType.Scrub,\n { min: 0, max: 2000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionTimingFunction', 'Easing', TraitInputType.Select, [\n 'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out',\n ], 'ease'),\n ]);\n }\n}\n\nexport class ListGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.List, [\n new TraitConfig('listStyleType', 'Marker Style', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Disc', value: 'disc' },\n { label: 'Circle', value: 'circle' },\n { label: 'Square', value: 'square' },\n { label: 'Decimal', value: 'decimal' },\n { label: 'Lower Alpha', value: 'lower-alpha' },\n { label: 'Upper Alpha', value: 'upper-alpha' },\n { label: 'Lower Roman', value: 'lower-roman' },\n { label: 'Upper Roman', value: 'upper-roman' },\n ], 'disc'),\n new TraitConfig('listStylePosition', 'Marker Position', TraitInputType.SelectButton, [\n { value: 'outside', label: 'Outside' },\n { value: 'inside', label: 'Inside' },\n ], 'outside'),\n new TraitConfig('columnCount', 'Columns', TraitInputType.Scrub,\n { min: 1, max: 6, step: 1, units: [''] }, '1'),\n new TraitConfig('columnGap', 'Column Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px'),\n new TraitConfig('_sep_marker', 'Marker', TraitInputType.SectionLabel),\n new TraitConfig('markerColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, ''),\n new TraitConfig('markerFontSize', 'Size', TraitInputType.Scrub,\n { min: 4, max: 100, step: 1, units: UNITS_FIXED }, ''),\n ]);\n }\n}\n\n/**\n * Returns a fresh set of all 8 style-group configs in canonical display order.\n * Every call produces new TraitConfig instances so different component nodes\n * never share mutable state.\n */\nexport function buildFullStyleTraits(): GroupStyleConfig[] {\n return [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n}\n\nexport function flattenSchemaFields(\n properties: Record<string, any>,\n prefix = ''\n): { label: string; value: string }[] {\n const result: { label: string; value: string }[] = [];\n\n for (const [key, field] of Object.entries(properties)) {\n const fullPath = prefix ? `${prefix}.${key}` : key;\n\n if (field.type === 'object' && field.properties) {\n result.push(...flattenSchemaFields(field.properties, fullPath));\n } else {\n result.push({ label: fullPath, value: fullPath });\n }\n }\n\n return result;\n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ElementState, STRUCTURAL_STATES } from '../models/component.model';\n\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets two CSS classes:\n * .iox-node-{id} — applied to the inner element; handles layout/visual props\n * (display, flex, background, border, padding, etc.)\n * .iox-outer-{id} — applied to the host element by RenderDirective; handles\n * properties that participate in the PARENT flow (margin,\n * align-self, flex-grow/shrink/basis, order).\n *\n * This split is necessary because margin on an inner wrapper only adds internal\n * space — it does not push sibling elements. Applying margin to the host element\n * (which IS the flex/block child in the parent container) makes it work correctly.\n *\n * State styles (hover/active/focus) are stored under key `${nodeId}:${state}`\n * and compiled to `.iox-node-{id}:hover { … }` selectors.\n *\n * Design token variables are stored under the reserved key `__tokens__` and\n * compiled to a `:root { … }` block prepended to all other rules.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n readonly changes$ = new Subject<void>();\n\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\n\n /**\n * Properties that must live on the OUTER wrapper (.iox-outer-{id}) because they\n * affect how the element participates in its PARENT layout (flex/block flow).\n * Everything else goes to the INNER element (.iox-node-{id}).\n *\n * Exception — out-of-flow positioning (position:fixed/absolute):\n * When position is fixed or absolute, width is redirected to the inner element\n * (the positioned one) and a default width:100% is added if none is set, so the\n * element stays visible. top/right/bottom/left/zIndex are always inner because\n * they are co-ordinates of the positioned element, not the flow wrapper.\n * position itself goes to inner with `!important` to beat component-scoped CSS.\n */\n private static readonly OUTER_PROPS = new Set([\n 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order',\n 'width',\n ]);\n\n /** Properties that need !important on the inner element to beat Angular's scoped-CSS specificity boost. */\n private static readonly IMPORTANT_PROPS = new Set(['position']);\n\n init(): void {\n this.styleEl = document.createElement('style');\n this.styleEl.id = 'iox-runtime-styles';\n document.head.appendChild(this.styleEl);\n }\n\n /**\n * Write or update the base styles for a node, or a pseudo-class state override.\n *\n * @param nodeId The node's CSS id (used in `.iox-node-{nodeId}`)\n * @param styles Flat CSS property map (camelCase keys)\n * @param state Optional pseudo-class state ('hover' | 'active' | 'focus').\n * When provided, compiles to `.iox-node-{id}:{state} { … }`.\n * State rules are NOT partitioned into inner/outer.\n */\n upsert(nodeId: string, styles: Record<string, any>, state?: ElementState): void {\n if (!nodeId) return;\n\n if (state) {\n // Structural pseudo-classes (first-child, last-child, nth-child) target the\n // outer wrapper element so they participate correctly in grid/flex layout.\n const prefix = (STRUCTURAL_STATES as string[]).includes(state) ? 'iox-outer' : 'iox-node';\n const css = this.compile(`${prefix}-${nodeId}:${state}`, styles);\n const key = `${nodeId}:${state}`;\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // ::marker pseudo-element — emitted as a separate rule, not part of inner/outer split.\n const markerStyles = styles['__markerStyles'] as Record<string, any> | undefined;\n if (markerStyles && Object.keys(markerStyles).length) {\n const markerCss = this.compile(`iox-node-${nodeId}::marker`, markerStyles);\n if (markerCss) this.rules.set(`${nodeId}::marker`, markerCss);\n else this.rules.delete(`${nodeId}::marker`);\n } else {\n this.rules.delete(`${nodeId}::marker`);\n }\n\n const pos = String(styles['position'] ?? '');\n const isOutOfFlow = pos === 'fixed' || pos === 'absolute';\n\n const inner: Record<string, any> = {};\n const outer: Record<string, any> = {};\n for (const [k, v] of Object.entries(styles)) {\n if (k === '__markerStyles') continue;\n const wantsOuter = StyleRegistryService.OUTER_PROPS.has(k);\n // width goes to inner for fixed/absolute (the positioned element owns its own width)\n if (wantsOuter && !(isOutOfFlow && k === 'width')) {\n outer[k] = v;\n } else {\n inner[k] = v;\n }\n }\n // Ensure fixed/absolute elements stay visible when no explicit width is set\n if (isOutOfFlow && inner['width'] === undefined) {\n inner['width'] = '100%';\n }\n const innerCss = this.compile(`iox-node-${nodeId}`, inner);\n const outerCss = this.compile(`iox-outer-${nodeId}`, outer);\n const combined = [innerCss, outerCss].filter(Boolean).join('\\n');\n if (combined) {\n this.rules.set(nodeId, combined);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n /**\n * Write the org-level design token variables as a `:root { … }` block.\n * Token names should be CSS custom property names without the `--` prefix\n * (e.g., `{ 'iox-primary-color': '#cb9090' }`).\n * Pass an empty object to clear all tokens.\n */\n upsertTokens(tokens: Record<string, string>): void {\n const entries = Object.entries(tokens)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` --${k}: ${v};`);\n if (entries.length) {\n this.rules.set('__tokens__', `:root {\\n${entries.join('\\n')}\\n}`);\n } else {\n this.rules.delete('__tokens__');\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n // Remove base rule and all state rules for this node\n this.rules.delete(nodeId);\n for (const key of this.rules.keys()) {\n if (key.startsWith(`${nodeId}:`)) {\n this.rules.delete(key);\n }\n }\n this.flush();\n }\n\n destroy(): void {\n this.rules.clear();\n if (this.styleEl) {\n this.styleEl.remove();\n this.styleEl = null;\n }\n }\n\n private compile(className: string, styles: Record<string, any>): string {\n const entries = Object.entries(styles)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => {\n const val = this.rewriteVh(String(v));\n const bang = StyleRegistryService.IMPORTANT_PROPS.has(k) ? ' !important' : '';\n return ` ${this.toKebabCase(k)}: ${val}${bang};`;\n });\n if (!entries.length) return '';\n return `.${className} {\\n${entries.join('\\n')}\\n}`;\n }\n\n /**\n * Rewrite viewport-relative units so they resolve to the simulated canvas\n * dimensions rather than the real browser viewport.\n *\n * --preview-vh / --preview-vw are set by BuilderComponent via ResizeObserver\n * and viewport-state subscription. In production (no variables defined) the\n * fallbacks `1vh` / `1vw` restore the original browser behaviour.\n */\n private rewriteVh(value: string): string {\n return value\n .replace(/(-?\\d*\\.?\\d+)vh/g, 'calc($1 * var(--preview-vh, 1vh))')\n .replace(/(-?\\d*\\.?\\d+)vw/g, 'calc($1 * var(--preview-vw, 1vw))');\n }\n\n private toKebabCase(str: string): string {\n return str.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n }\n\n private _flushPending = false;\n\n private flush(): void {\n if (!this.styleEl || this._flushPending) return;\n this._flushPending = true;\n requestAnimationFrame(() => {\n this._flushPending = false;\n if (!this.styleEl) return;\n // __tokens__ always first so variables are available to all subsequent rules\n const tokenBlock = this.rules.get('__tokens__');\n const rest = Array.from(this.rules.entries())\n .filter(([k]) => k !== '__tokens__')\n .map(([, v]) => v);\n this.styleEl.textContent = [tokenBlock, ...rest].filter(Boolean).join('\\n');\n this.changes$.next();\n });\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from '../services/component-registry.service';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\nimport { composeVirtualTraits } from '../style-compose';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\n\n/**\n * RenderDirective — applied to <ng-container> to dynamically instantiate a\n * builder component with zero wrapper elements in the DOM.\n *\n * A directive's ViewContainerRef inserts the created component's host element as\n * a sibling of the ng-container comment node — directly inside the parent element\n * — so the resulting DOM has no extra <app-renderer> wrapper.\n *\n * Usage:\n * <ng-container [ioxRender]=\"node\"\n * (onClick)=\"handleClick($event)\"\n * (onMouseEnter)=\"handleMouseEnter($event)\"\n * (onMouseLeave)=\"handleMouseLeave()\">\n * </ng-container>\n */\n@Directive({\n selector: '[ioxRender]',\n standalone: false,\n})\nexport class RenderDirective implements OnInit, OnDestroy {\n @Input() ioxRender: ComponentNode | null = null;\n @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\n private registryService: ComponentRegistryService,\n private overlayService: OverlayService,\n private styleRegistry: StyleRegistryService,\n private interactionEngine: InteractionEngineService,\n private cdr: ChangeDetectorRef,\n private panelEventService: PanelEventService,\n ) {}\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\n if (this.ioxRender) {\n this.interactionEngine.detach(this.ioxRender);\n this.overlayService.unregisterNode(this.ioxRender);\n // Only remove the CSS rule if this node OWNS it (i.e. it is not a clone).\n // Clones set styleId to point at the template node's id — removing would\n // destroy the shared rule and break all other rows.\n const isClone = !!this.ioxRender.styleId;\n if (!isClone && this.ioxRender.id) {\n this.styleRegistry.remove(this.ioxRender.id);\n }\n }\n }\n\n /**\n * Walk up from `target` to find a registered parent component element.\n * Returns { element, node } if found, or null if the target is outside\n * all known builder components (e.g. the canvas background).\n */\n private findParentNodeElement(target: HTMLElement): { element: HTMLElement; node: ComponentNode } | null {\n let el: HTMLElement | null = target;\n while (el) {\n const match = this.overlayService.findNodeByElement(el);\n if (match) {\n return { element: el, node: match.node };\n }\n el = el.parentElement;\n }\n return null;\n }\n\n private render(node: ComponentNode | null): void {\n if (!node) return;\n\n const componentClass = this.registryService.getComponent(node.type);\n if (!componentClass) return;\n\n // vcr.createComponent inserts the new component's host element after the ng-container\n // comment anchor — directly inside the parent element. No wrapper div is created.\n const componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n\n // Apply regular trait defaults (title, image, description, etc.)\n // Use setInput() (Angular 14+) — it marks the view dirty and\n // integrates with Angular's CD tracking, unlike direct assignment.\n Object.values(node.traits || {}).forEach((trait: any) => {\n componentRef.setInput(trait.name, trait.default);\n });\n\n // Build initial style map from styleTraits defaults.\n const initialStyle: Record<string, any> = {};\n if (node.styleTraits?.length) {\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.default !== undefined) {\n initialStyle[trait.name] = trait.default;\n }\n }\n }\n }\n\n // Use styleId when present (clone nodes share the template node's CSS rule).\n const cssId = node.styleId ?? node.id;\n\n // Register CSS rules in the central stylesheet (inner + outer split).\n if (cssId) {\n const composedBase = composeVirtualTraits(initialStyle);\n this.styleRegistry.upsert(cssId, composedBase);\n // Restore per-state overrides saved from a previous session.\n if (node.stateStyles) {\n for (const state of Object.keys(node.stateStyles) as Array<'hover' | 'active' | 'focus'>) {\n const stateMap = node.stateStyles[state];\n if (stateMap && Object.keys(stateMap).length) {\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state);\n }\n }\n }\n }\n\n // Set nodeId — declared as @Input() on every builder component.\n if (cssId) {\n componentRef.setInput('nodeId', cssId);\n }\n\n // Pass the node reference. 'node' is NOT declared as @Input on leaf\n // components (Card, Text, etc.) — always use direct assignment to avoid\n // Angular NG0303 warnings that setInput() would trigger.\n (componentRef.instance as any)['node'] = node;\n\n // Layout components (Section/Container) read this.style internally for\n // CDK drop list orientation. 'style' is not declared as @Input so use\n // direct assignment; children and dropListId ARE @Input on all layouts.\n // Guard with Array.isArray so leaf nodes whose serialized data happens\n // to have a stale/empty children key don't trigger NG0303.\n const instance = componentRef.instance as any;\n if (Array.isArray(node.children) && 'dropListId' in instance) {\n instance['style'] = { ...initialStyle };\n componentRef.setInput('children', node.children);\n componentRef.setInput('dropListId', `section-${++dropListCounter}`);\n }\n\n // Forward child events from layout components (Section → builder)\n const childClick: EventEmitter<any> = instance['childClick'];\n const childMouseEnter: EventEmitter<any> = instance['childMouseEnter'];\n const childMouseLeave: EventEmitter<any> = instance['childMouseLeave'];\n if (childClick) this.childSubs.push(childClick.subscribe((e: any) => this.onClick.emit(e)));\n if (childMouseEnter) this.childSubs.push(childMouseEnter.subscribe((e: any) => this.onMouseEnter.emit(e)));\n if (childMouseLeave) this.childSubs.push(childMouseLeave.subscribe(() => this.onMouseLeave.emit()));\n\n componentRef.changeDetectorRef.detectChanges();\n\n // Attach overlay-driven DOM event listeners directly on the component host element.\n // For layout components the host element is <app-section>; for leaf components\n // it is e.g. <app-card>. Either way this is the correct inspectable element.\n const nativeEl: HTMLElement | null = componentRef.location?.nativeElement ?? null;\n\n // Custom element host defaults to display:inline. Set it to block so it\n // participates properly in layout and CDK can capture its bounding rect.\n if (nativeEl) {\n nativeEl.style.display = 'block';\n }\n if (nativeEl) {\n // Register node → element mapping for parent lookups\n this.overlayService.registerNode(node, nativeEl, componentRef);\n // Notify BindingsComponent so it re-applies bindings on the new\n // ComponentRef — needed after cross-container drag where Angular\n // creates a fresh instance that hasn't had bindings pushed to it yet.\n this.panelEventService.emit(PanelEventTypes.NODE_RENDERED, { node });\n\n nativeEl.addEventListener('mouseenter', (event: MouseEvent) => {\n if ((event as any)._fromClick) return;\n this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\n // When leaving a child component, check if the mouse moved to a\n // parent component (e.g. card → section). If so, emit mouseenter\n // for that parent instead of clearing hover entirely.\n const related = event.relatedTarget as HTMLElement | null;\n if (related) {\n const parentEntry = this.findParentNodeElement(related);\n if (parentEntry) {\n this.onMouseEnter.emit(parentEntry);\n return;\n }\n }\n this.onMouseLeave.emit();\n });\n nativeEl.addEventListener('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n nativeEl.addEventListener('contextmenu', (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n // Select the element first, then open the more menu at cursor position.\n this.onClick.emit({ element: nativeEl, node, componentRef });\n this.overlayService.triggerContextMenu(event.clientX, event.clientY);\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM.\n this.interactionEngine.attach(node);\n }\n\n /** Try setInput(); fall back to direct assignment for non-@Input properties. */\n private safeSetInput(ref: any, name: string, value: any): void {\n try {\n ref.setInput(name, value);\n } catch {\n (ref.instance as any)[name] = value;\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDraggable]',\n standalone: false,\n})\nexport class IoxDraggableDirective implements OnInit, OnDestroy {\n /** The node (for canvas items) or component type string (for sidebar items). */\n @Input() ioxDragData: ComponentNode | string = '';\n /** Drop-zone id the item lives in. Null for sidebar items. */\n @Input() ioxDragSourceId: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDraggable(this.el.nativeElement, () => {\n const data = this.ioxDragData;\n const type: 'internal' | 'external' = typeof data === 'string' ? 'external' : 'internal';\n const sourceIndex = type === 'internal' && this.ioxDragSourceId\n ? (this.dragEngine.getData(this.ioxDragSourceId)?.indexOf(data as ComponentNode) ?? -1)\n : -1;\n return { type, data, sourceId: this.ioxDragSourceId, sourceIndex };\n });\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDraggable(this.el.nativeElement);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { StylePreset } from '../models/component.model';\n\n/**\n * PresetRegistryService — in-memory store for org-level style presets.\n *\n * Loaded once per page by PageUiComponent (alongside the page layout) and\n * injected into the overlay (for badge labels) and style panel (for apply /\n * create / edit / detach flows).\n *\n * Scoped to PageUiComponent.providers[] — one registry per builder instance.\n */\n@Injectable()\nexport class PresetRegistryService {\n private presets = new Map<string, StylePreset>();\n\n setPresets(presets: StylePreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): StylePreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): StylePreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: StylePreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n\n /**\n * Resolve the effective style map for a node that references a preset.\n * Merges preset base styles with the node's local overrides so that\n * element-level values always win.\n *\n * @param presetId ID of the applied preset.\n * @param overrides The node's `styleOverrides` record (may be empty).\n */\n resolveStyles(presetId: string, overrides: Record<string, any>): Record<string, any> {\n const preset = this.presets.get(presetId);\n if (!preset) return { ...overrides };\n return { ...preset.styleProps, ...overrides };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { IoxSymbol } from '../models/component.model';\n\n/**\n * SymbolRegistryService — in-memory store for org-level symbols.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class SymbolRegistryService {\n private symbols = new Map<string, IoxSymbol>();\n\n setSymbols(symbols: IoxSymbol[]): void {\n this.symbols.clear();\n for (const s of symbols) {\n this.symbols.set(s.id, s);\n }\n }\n\n getSymbol(id: string): IoxSymbol | undefined {\n return this.symbols.get(id);\n }\n\n getAll(): IoxSymbol[] {\n return Array.from(this.symbols.values());\n }\n\n upsert(symbol: IoxSymbol): void {\n this.symbols.set(symbol.id, symbol);\n }\n\n remove(id: string): void {\n this.symbols.delete(id);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { OverlayEntry, OverlayService, ToolbarAction } from './overlay.service';\nimport { IoxInteraction } from '../models/component.model';\nimport { ViewportService } from '../services/viewport.service';\nimport { PresetRegistryService } from '../services/preset-registry.service';\nimport { SymbolRegistryService } from '../services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from '../services/interaction-preset-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { BuilderClipboardService } from '../services/builder-clipboard.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n@Component({\n selector: 'app-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlayComponent implements OnInit, OnDestroy {\n @Output() toolbarAction = new EventEmitter<{ action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after' }>();\n\n public hoverEntry: OverlayEntry | null = null;\n public selectEntry: OverlayEntry | null = null;\n\n // Hover: Chrome DevTools-style ring layers (clip-path punches out content area)\n public hiOutlineStyle: Record<string, string> = {};\n public hiMarginStyle: Record<string, string> = {};\n public hiPaddingStyle: Record<string, string> = {};\n\n // Select: simple IOX pink outline\n public selectOutlineStyle: Record<string, string> = {};\n\n // More dropdown — opened from the ⋯ button or from a right-click.\n // Position is set to fixed viewport coords so it appears at the cursor.\n public moreMenuVisible = false;\n public moreMenuStyle: Record<string, string> = {};\n\n // Badge context menu — opened by right-clicking a preset badge.\n public badgeMenuVisible = false;\n public badgeMenuType: 'style' | 'interaction' | null = null;\n public badgeMenuPos = { x: 0, y: 0 };\n // The specific IoxInteraction being right-clicked (interaction badges only).\n public badgeInteraction: IoxInteraction | null = null;\n\n // Tracks which badge was last clicked — used by Cmd+C in page-ui.\n public activeBadgeType: 'style' | 'interaction' | null = null;\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private boundUpdate = () => this.updateAll();\n private _scrollRaf = 0;\n private boundScrollUpdate = () => {\n cancelAnimationFrame(this._scrollRaf);\n this._scrollRaf = requestAnimationFrame(() => this.updateAll());\n };\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\n private presetRegistry: PresetRegistryService,\n private symbolRegistry: SymbolRegistryService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private interactionEngine: InteractionEngineService,\n private clipboard: BuilderClipboardService,\n private styleRegistry: StyleRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.overlayService.hover$.subscribe(entry => {\n this.hoverEntry = entry;\n this.updateHover();\n this.cdr.markForCheck();\n }),\n this.overlayService.select$.subscribe(entry => {\n this.selectEntry = entry;\n if (!entry) this.activeBadgeType = null;\n this.observeSelectElement();\n this.updateSelect();\n this.cdr.markForCheck();\n })\n );\n\n window.addEventListener('resize', this.boundUpdate, { passive: true });\n\n // Re-calculate overlay positions whenever zoom / device changes.\n this.subs.push(\n this.viewportService.state$.subscribe(() => {\n // Delay one frame so the DOM has applied the new transform/width.\n requestAnimationFrame(() => this.updateAll());\n })\n );\n\n // Re-calculate when CSS rules change (margin/width applied via stylesheet).\n this.subs.push(\n this.styleRegistry.changes$.subscribe(() => requestAnimationFrame(() => this.updateAll()))\n );\n\n // Watch the canvas container for size changes (e.g. right panel open/close\n // transition changes canvas width, shifting element positions).\n const container = this.overlayService.getContainer();\n if (container) {\n if (typeof ResizeObserver !== 'undefined') {\n this.containerResizeObserver = new ResizeObserver(() => this.updateAll());\n this.containerResizeObserver.observe(container);\n }\n }\n\n // iox-page-component's Lenis dispatches a synthetic 'scroll' event on\n // its wrapper element after each raf tick — listen to that to reposition\n // overlay boxes as the canvas scrolls.\n this.subs.push(\n this.overlayService.scrollContainer$.subscribe(el => {\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundScrollUpdate, { passive: true });\n })\n );\n\n // Open the more menu when a canvas element is right-clicked.\n this.subs.push(\n this.overlayService.contextMenu$.subscribe(({ x, y }) => {\n this.moreMenuStyle = { top: `${y}px`, left: `${x}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(s => s.unsubscribe());\n this.resizeObserver?.disconnect();\n this.containerResizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n cancelAnimationFrame(this._scrollRaf);\n window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = null;\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onSelectParent(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SelectParent, entry: this.selectEntry });\n }\n\n onDuplicate(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Duplicate, entry: this.selectEntry });\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Delete, entry: this.selectEntry });\n }\n\n onPlay(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Play, entry: this.selectEntry });\n }\n\n onSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\n }\n\n onToggleMore(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.moreMenuVisible) {\n this.moreMenuVisible = false;\n } else {\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n }\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onMakeGlobal(event: MouseEvent, position: 'before' | 'after'): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.MakeGlobal, entry: this.selectEntry, position });\n }\n\n onRemoveGlobal(event: MouseEvent): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.RemoveGlobal, entry: this.selectEntry });\n }\n\n get hasInteractions(): boolean {\n return !!this.selectEntry?.node?.interactions?.length;\n }\n\n get selectedNodeIsGlobal(): boolean {\n return !!this.selectEntry?.node?.isGlobal;\n }\n\n get selectedPresetName(): string | null {\n const id = this.selectEntry?.node?.stylePresetId;\n if (!id) return null;\n return this.presetRegistry.getPreset(id)?.name ?? null;\n }\n\n get isLinkedSymbol(): boolean {\n return !!this.selectEntry?.node?.symbolId;\n }\n\n get linkedSymbolName(): string | null {\n const id = this.selectEntry?.node?.symbolId;\n if (!id) return null;\n return this.symbolRegistry.getSymbol(id)?.name ?? null;\n }\n\n get interactions(): IoxInteraction[] {\n return this.selectEntry?.node?.interactions ?? [];\n }\n\n triggerLabel(trigger: string): string {\n const labels: Record<string, string> = {\n pageLoad: 'Load', viewportEnter: 'Scroll', click: 'Click',\n hover: 'Hover', scrollProgress: 'Progress',\n };\n return labels[trigger] ?? trigger;\n }\n\n triggerIcon(trigger: string): string {\n const icons: Record<string, string> = {\n pageLoad: 'ph-thin ph-rocket-launch', viewportEnter: 'ph-thin ph-eye',\n click: 'ph-thin ph-cursor-click', hover: 'ph-thin ph-hand-pointing',\n scrollProgress: 'ph-thin ph-arrows-down-up',\n };\n return icons[trigger] ?? 'ph-thin ph-lightning';\n }\n\n actionLabel(ix: IoxInteraction): string {\n const first = ix.actions[0];\n if (!first) return '';\n const labels: Record<string, string> = {\n fadeIn: 'Fade In', fadeOut: 'Fade Out',\n moveUp: 'Move Up', moveDown: 'Move Down',\n moveLeft: 'Move Left', moveRight: 'Move Right',\n scaleIn: 'Scale In', scaleOut: 'Scale Out',\n rotate: 'Rotate', show: 'Show', hide: 'Hide',\n toggleVisibility: 'Toggle',\n };\n const label = labels[first.type] ?? first.type;\n return ix.actions.length > 1 ? `${label} +${ix.actions.length - 1}` : label;\n }\n\n get hasPresetInClipboard(): boolean { return !!this.clipboard.getPresetId(); }\n get hasInteractionPresetInClipboard(): boolean { return !!this.clipboard.getInteractionPresetId(); }\n\n onEditPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'style';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n }\n\n onEditInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'interaction';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n\n // ── Badge context menu ───────────────────────────────────\n\n onBadgeContextMenu(event: MouseEvent, type: 'style' | 'interaction', ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.badgeMenuType = type;\n this.badgeInteraction = ix ?? null;\n this.badgeMenuPos = { x: event.clientX, y: event.clientY };\n this.badgeMenuVisible = true;\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onBadgeCopy(): void {\n if (this.badgeMenuType === 'style') {\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n }\n this.closeBadgeMenu();\n }\n\n onBadgeEdit(): void {\n const type = this.badgeMenuType;\n this.closeBadgeMenu();\n if (type === 'style' && this.selectEntry) {\n this.activeBadgeType = 'style';\n this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n } else if (type === 'interaction' && this.selectEntry) {\n this.activeBadgeType = 'interaction';\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n }\n\n onBadgeRemoveInteraction(): void {\n const node = this.selectEntry?.node;\n if (!node || !this.badgeInteraction) return;\n node.interactions = (node.interactions ?? []).filter(i => i.id !== this.badgeInteraction!.id);\n if (!node.interactions.length) node.interactionPresetId = undefined;\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, node);\n this.closeBadgeMenu();\n }\n\n closeBadgeMenu(): void {\n this.badgeMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n get hasCopiedNode(): boolean { return !!this.clipboard.getNode(); }\n\n onCopyNode(event: MouseEvent): void {\n event.stopPropagation();\n const node = this.selectEntry?.node;\n if (node) this.clipboard.copyNode(node);\n this.closeMoreMenu();\n }\n\n onPasteNode(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Paste, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n this.closeMoreMenu();\n }\n\n onPastePreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PastePreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.interactionPresetId;\n if (id) this.clipboard.copyInteractionPreset(id);\n this.closeMoreMenu();\n }\n\n onPasteInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PasteInteractionPreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onDetachSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.DetachSymbol, entry: this.selectEntry });\n }\n\n private observeSelectElement(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n // Scroll listener is on the container permanently (attached in ngOnInit).\n // No need to re-attach it here.\n\n if (!this.selectEntry?.element) return;\n\n // Observe the inner styled element — that's where [ngStyle] applies CSS.\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n\n // ResizeObserver — catches size changes.\n // Skip the first callback: it fires synchronously on observe() in the same\n // microtask as the select$ subscription which already calls updateAll().\n // Painting twice in one frame causes a visible flicker.\n if (typeof ResizeObserver !== 'undefined') {\n let skipFirst = true;\n this.resizeObserver = new ResizeObserver(() => {\n if (skipFirst) { skipFirst = false; return; }\n this.updateAll();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(() => this.updateAll());\n this.mutationObserver.observe(styledEl, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private updateAll(): void {\n this.updateHover();\n this.updateSelect();\n this.cdr.markForCheck();\n }\n\n private updateHover(): void {\n if (!this.hoverEntry) {\n this.hiOutlineStyle = {};\n this.hiMarginStyle = {};\n this.hiPaddingStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.hoverEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // Recalculate fresh — stored boxModel can be stale if CSS rules changed.\n const { margin, border, padding } = this.overlayService.buildBoxModel(this.hoverEntry.element);\n\n // All overlay boxes use position:fixed with raw viewport coords from\n // getBoundingClientRect() — no container offset subtraction.\n // This matches the approach used by the drop-target overlay and the drag\n // clone, both of which position correctly at any zoom level.\n // Using cRect subtraction + position:absolute inside .preview (which has\n // contain:layout paint) caused sub-pixel accumulation errors at zoom != 100%.\n const scale = this.viewportService.getScale();\n\n // Scale the spacing values: getComputedStyle returns unscaled CSS px,\n // getBoundingClientRect returns scaled viewport px. Both must match.\n const m = {\n top: margin.top * scale,\n right: margin.right * scale,\n bottom: margin.bottom * scale,\n left: margin.left * scale,\n };\n const mW = rect.width + m.left + m.right;\n const mH = rect.height + m.top + m.bottom;\n\n this.hiOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n\n // Orange ring: margin-box with border-box punched out\n this.hiMarginStyle = {\n ...this.createBoxStyle(rect.top - m.top, rect.left - m.left, mW, mH),\n 'clip-path': this.createRingClipPath(mW, mH, m.top, m.right, m.bottom, m.left),\n };\n\n // Green ring: border-box with content-box punched out\n const bpTop = (border.top + padding.top) * scale;\n const bpRight = (border.right + padding.right) * scale;\n const bpBottom = (border.bottom + padding.bottom) * scale;\n const bpLeft = (border.left + padding.left) * scale;\n this.hiPaddingStyle = {\n ...this.createBoxStyle(rect.top, rect.left, rect.width, rect.height),\n 'clip-path': this.createRingClipPath(rect.width, rect.height, bpTop, bpRight, bpBottom, bpLeft),\n };\n }\n\n private updateSelect(): void {\n if (!this.selectEntry) {\n this.selectOutlineStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // position:fixed with raw viewport coords — same reasoning as updateHover.\n this.selectOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n }\n\n /** Build position/size styles for a position:fixed overlay box. */\n private createBoxStyle(top: number, left: number, width: number, height: number): Record<string, string> {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${Math.max(width, 0)}px`,\n height: `${Math.max(height, 0)}px`,\n };\n }\n\n private createRingClipPath(w: number, h: number, inTop: number, inRight: number, inBottom: number, inLeft: number): string {\n const x1 = Math.max(inLeft, 0);\n const y1 = Math.max(inTop, 0);\n const x2 = Math.max(w - inRight, x1);\n const y2 = Math.max(h - inBottom, y1);\n // Each sub-rect must be explicitly closed so the bridge between them\n // is a zero-area line — prevents diagonal edge triangle artifacts.\n return `polygon(evenodd, 0px 0px, ${w}px 0px, ${w}px ${h}px, 0px ${h}px, 0px 0px, ${x1}px ${y1}px, ${x2}px ${y1}px, ${x2}px ${y2}px, ${x1}px ${y2}px, ${x1}px ${y1}px)`;\n }\n\n}\n","<div class=\"overlay-root\">\n\n <!-- HOVER — Chrome DevTools-style rings (content area stays transparent) -->\n <ng-container *ngIf=\"hoverEntry\">\n <div class=\"hi-outline\" [ngStyle]=\"hiOutlineStyle\"></div>\n <div class=\"hi-margin\" [ngStyle]=\"hiMarginStyle\"></div>\n <div class=\"hi-padding\" [ngStyle]=\"hiPaddingStyle\"></div>\n </ng-container>\n\n <!-- SELECT — IOX pink outline + toolbar -->\n <div class=\"select-outline\" *ngIf=\"selectEntry\" [ngStyle]=\"selectOutlineStyle\">\n\n <!-- Preset badges container — below the outline, start-aligned -->\n <div class=\"preset-badge\" *ngIf=\"selectedPresetName || interactions.length\">\n <div *ngIf=\"selectedPresetName\"\n class=\"preset-badge__item\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'style'\"\n title=\"Style preset: {{ selectedPresetName }} — click to edit, right-click to copy\"\n (mousedown)=\"onEditPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'style')\">\n <i class=\"ph-fill ph-paint-bucket\"></i>\n <span>{{ selectedPresetName }}</span>\n </div>\n <div *ngFor=\"let ix of interactions\"\n class=\"preset-badge__item preset-badge__item--interaction\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'interaction'\"\n [title]=\"triggerLabel(ix.trigger) + ': ' + actionLabel(ix) + ' — click to edit, right-click to remove'\"\n (mousedown)=\"onEditInteractionPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'interaction', ix)\">\n <i [class]=\"triggerIcon(ix.trigger)\"></i>\n <span>{{ triggerLabel(ix.trigger) }}: {{ actionLabel(ix) }}</span>\n </div>\n </div>\n\n <div class=\"select-toolbar\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n\n <!-- Component name -->\n <span class=\"toolbar-name\">{{ selectEntry?.componentName }}</span>\n <span class=\"toolbar-sep\"></span>\n\n <!-- Quick actions -->\n <button class=\"toolbar-btn\" title=\"Duplicate\" (mousedown)=\"onDuplicate($event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button *ngIf=\"hasInteractions\" class=\"toolbar-btn toolbar-btn--play\" title=\"Play animations\" (mousedown)=\"onPlay($event)\">\n <i class=\"ph-thin ph-play\"></i>\n </button>\n <button *ngIf=\"isLinkedSymbol\" class=\"toolbar-btn toolbar-btn--symbol\"\n [title]=\"'Detach from symbol' + (linkedSymbolName ? ': ' + linkedSymbolName : '')\"\n (mousedown)=\"onDetachSymbol($event)\">\n <i class=\"ph-thin ph-link-break\"></i>\n </button>\n <button class=\"toolbar-btn toolbar-btn--danger\" title=\"Delete\" (mousedown)=\"onDelete($event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n <span class=\"toolbar-sep\"></span>\n <button class=\"toolbar-btn\" title=\"Select parent\" (mousedown)=\"onSelectParent($event)\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n </button>\n\n <!-- More menu trigger — opens a fixed-position dropdown at the cursor -->\n <button class=\"toolbar-btn toolbar-btn--more\" title=\"More actions\" (mousedown)=\"onToggleMore($event)\">\n <i class=\"ph-thin ph-dots-three\"></i>\n </button>\n </div>\n </div>\n\n <!-- Shared more/context menu — fixed-position, opened by ⋯ button or right-click -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" [ngStyle]=\"moreMenuStyle\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <button class=\"more-item\" (mousedown)=\"onSelectParent($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n Select parent\n </button>\n <button class=\"more-item\" (mousedown)=\"onDuplicate($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-copy\"></i>\n Duplicate\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onDelete($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-trash\"></i>\n Delete\n </button>\n <div class=\"more-divider\"></div>\n <button class=\"more-item\" (mousedown)=\"onCopyNode($event)\">\n <i class=\"ph-thin ph-scissors\"></i>\n Copy element\n </button>\n <button *ngIf=\"hasCopiedNode\" class=\"more-item\" (mousedown)=\"onPasteNode($event)\">\n <i class=\"ph-thin ph-clipboard\"></i>\n Paste element\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"selectEntry?.node?.stylePresetId\" class=\"more-item\" (mousedown)=\"onCopyPreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Copy style preset\n </button>\n <button *ngIf=\"hasPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPastePreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Paste style preset\n </button>\n <button *ngIf=\"selectEntry?.node?.interactionPresetId\" class=\"more-item\" (mousedown)=\"onCopyInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Copy interaction preset\n </button>\n <button *ngIf=\"hasInteractionPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPasteInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Paste interaction preset\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"isLinkedSymbol\" class=\"more-item\" (mousedown)=\"onDetachSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link-break\"></i>\n Detach from symbol<ng-container *ngIf=\"linkedSymbolName\"> ({{ linkedSymbolName }})</ng-container>\n </button>\n <button class=\"more-item\" (mousedown)=\"onSaveAsBlock($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\n <button *ngIf=\"hasInteractions\" class=\"more-item more-item--play\" (mousedown)=\"onPlay($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-play\"></i>\n Play animations\n </button>\n <div class=\"more-divider\"></div>\n <ng-container *ngIf=\"!selectedNodeIsGlobal; else removeGlobalItem\">\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'before')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (Before Content)\n </button>\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'after')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (After Content)\n </button>\n </ng-container>\n <ng-template #removeGlobalItem>\n <button class=\"more-item\" (mousedown)=\"onRemoveGlobal($event)\">\n <i class=\"ph-thin ph-globe\"></i>\n Remove from Global\n </button>\n </ng-template>\n </div>\n\n <!-- Backdrop to close the more menu -->\n <div *ngIf=\"moreMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu()\">\n </div>\n\n <!-- Badge context menu — options differ by badge type -->\n <div *ngIf=\"badgeMenuVisible\" class=\"badge-context-menu\"\n [ngStyle]=\"{ top: badgeMenuPos.y + 'px', left: badgeMenuPos.x + 'px' }\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <ng-container *ngIf=\"badgeMenuType === 'style'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeCopy()\">\n <i class=\"ph-thin ph-copy\"></i>\n Copy preset\n </button>\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit preset\n </button>\n </ng-container>\n <ng-container *ngIf=\"badgeMenuType === 'interaction'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit in panel\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onBadgeRemoveInteraction()\">\n <i class=\"ph-thin ph-trash\"></i>\n Remove interaction\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"badgeMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeBadgeMenu()\">\n </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Popover } from 'primeng/popover';\n\nimport {\n BuilderMode,\n DeviceMode,\n DeviceOption,\n DEVICE_OPTIONS,\n ZOOM_OPTIONS,\n ScreenWidthOption,\n SCREEN_WIDTH_OPTIONS,\n} from '../panels/panel.model';\n\n@Component({\n selector: 'app-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n standalone: false,\n})\nexport class ToolbarComponent {\n @Input() activeMode: BuilderMode = BuilderMode.Select;\n @Input() activeDevice: DeviceMode = DeviceMode.Desktop;\n @Input() activeZoom: number = 100;\n @Input() activeScreenWidth: number = 1440;\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n\n @Output() modeChange = new EventEmitter<BuilderMode>();\n @Output() deviceChange = new EventEmitter<DeviceMode>();\n @Output() zoomChange = new EventEmitter<number | 'fit'>();\n @Output() screenWidthChange = new EventEmitter<number>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n\n get isPublished(): boolean {\n return this.pageStatus === 'published';\n }\n\n @ViewChild('modePopover') modePopover!: Popover;\n @ViewChild('devicePopover') devicePopover!: Popover;\n @ViewChild('zoomPopover') zoomPopover!: Popover;\n @ViewChild('widthPopover') widthPopover!: Popover;\n\n public modes = BuilderMode;\n public deviceModes = DeviceMode;\n public deviceOptions = DEVICE_OPTIONS;\n public zoomOptions = ZOOM_OPTIONS;\n public screenWidthOptions: ScreenWidthOption[] = SCREEN_WIDTH_OPTIONS;\n\n get activeModeIcon(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'ph-thin ph-cursor';\n case BuilderMode.Style: return 'ph-thin ph-paint-brush-broad';\n case BuilderMode.Pan: return 'ph-thin ph-hand';\n default: return 'ph-thin ph-cursor';\n }\n }\n\n get activeModeLabel(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'Select';\n case BuilderMode.Style: return 'Style';\n case BuilderMode.Pan: return 'Pan';\n default: return 'Select';\n }\n }\n\n get activeDeviceOption(): DeviceOption {\n return this.deviceOptions.find(d => d.mode === this.activeDevice) || this.deviceOptions[0];\n }\n\n get zoomLabel(): string {\n return `${this.activeZoom}%`;\n }\n\n get sliderZoom(): number {\n return Math.min(100, Math.max(20, this.activeZoom));\n }\n\n // ── Mode ────────────────────────────────────────────────\n toggleModePopover(event: Event): void {\n this.modePopover.toggle(event);\n }\n\n selectMode(mode: BuilderMode): void {\n if (this.activeMode !== mode) {\n this.modeChange.emit(mode);\n }\n this.modePopover.hide();\n }\n\n // ── Device ──────────────────────────────────────────────\n toggleDevicePopover(event: Event): void {\n this.devicePopover.toggle(event);\n }\n\n selectDevice(mode: DeviceMode): void {\n if (this.activeDevice !== mode) {\n this.deviceChange.emit(mode);\n }\n this.devicePopover.hide();\n }\n\n // ── Zoom slider ──────────────────────────────────────────\n onSliderChange(event: Event): void {\n const value = +(event.target as HTMLInputElement).value;\n this.zoomChange.emit(value);\n }\n\n // ── Screen width ─────────────────────────────────────────\n toggleWidthPopover(event: Event): void {\n this.widthPopover.toggle(event);\n }\n\n selectScreenWidth(width: number): void {\n if (this.activeScreenWidth !== width) {\n this.screenWidthChange.emit(width);\n }\n this.widthPopover.hide();\n }\n\n // ── Zoom ────────────────────────────────────────────────\n toggleZoomPopover(event: Event): void {\n this.zoomPopover.toggle(event);\n }\n\n selectZoom(value: number | 'fit'): void {\n this.zoomChange.emit(value);\n this.zoomPopover.hide();\n }\n}\n","<div class=\"builder-toolbar\">\n <!-- ── Mode switcher (stateful) ─────────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleModePopover($event)\"\n [title]=\"activeModeLabel\">\n <i [class]=\"activeModeIcon\"></i>\n </button>\n\n <p-popover #modePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Select\"\n (click)=\"selectMode(modes.Select)\">\n <i class=\"ph-thin ph-cursor\"></i>\n <span>Select</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Pan\"\n (click)=\"selectMode(modes.Pan)\">\n <i class=\"ph-thin ph-hand\"></i>\n <span>Pan</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Style\"\n (click)=\"selectMode(modes.Style)\">\n <i class=\"ph-thin ph-paint-brush-broad\"></i>\n <span>Style</span>\n </button>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Undo / Redo (action) ─────────────────────────── -->\n <button class=\"tool-btn\" title=\"Undo\" [disabled]=\"!canUndo\" (click)=\"undo.emit()\">\n <i class=\"ph-thin ph-arrow-counter-clockwise\"></i>\n </button>\n <button class=\"tool-btn\" title=\"Redo\" [disabled]=\"!canRedo\" (click)=\"redo.emit()\">\n <i class=\"ph-thin ph-arrow-clockwise\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Device switcher (stateful) ───────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleDevicePopover($event)\"\n [title]=\"activeDeviceOption.label\">\n <i [class]=\"activeDeviceOption.icon\"></i>\n </button>\n\n <p-popover #devicePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let d of deviceOptions\"\n [class.is-active]=\"activeDevice === d.mode\"\n (click)=\"selectDevice(d.mode)\">\n <i [class]=\"d.icon\"></i>\n <span>{{ d.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Screen width — Desktop only ─────────────────── -->\n @if (activeDevice === deviceModes.Desktop) {\n <button class=\"tool-btn stateful width-btn\"\n (click)=\"toggleWidthPopover($event)\"\n title=\"Screen width\">\n <span class=\"width-label\">{{ activeScreenWidth }}</span>\n </button>\n }\n\n <p-popover #widthPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let w of screenWidthOptions\"\n [class.is-active]=\"activeScreenWidth === w.width\"\n (click)=\"selectScreenWidth(w.width)\">\n <span>{{ w.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Zoom (stateful) ──────────────────────────────── -->\n <button class=\"tool-btn stateful zoom-btn\"\n (click)=\"toggleZoomPopover($event)\"\n title=\"Zoom\">\n <span class=\"zoom-label\">{{ zoomLabel }}</span>\n </button>\n\n <p-popover #zoomPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"zoom-popover\">\n <div class=\"zoom-slider-row\">\n <input class=\"zoom-slider\"\n type=\"range\"\n min=\"20\" max=\"100\" step=\"1\"\n [value]=\"sliderZoom\"\n (input)=\"onSliderChange($event)\">\n <span class=\"zoom-slider-value\">{{ zoomLabel }}</span>\n </div>\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let z of zoomOptions\"\n [class.is-active]=\"z.value === activeZoom\"\n (click)=\"selectZoom(z.value)\">\n <span>{{ z.label }}</span>\n </button>\n </div>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Save ────────────────────────────────────────────── -->\n <button class=\"tool-btn save-btn\"\n [class.is-saving]=\"isSaving\"\n [disabled]=\"isSaving\"\n title=\"Save\"\n (click)=\"save.emit()\">\n <i class=\"ph-thin ph-floppy-disk\"></i>\n </button>\n\n <!-- ── Preview ──────────────────────────────────────────── -->\n <button class=\"tool-btn preview-btn\"\n title=\"Preview\"\n (click)=\"preview.emit()\">\n <i class=\"ph-thin ph-eye\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Publish / Unpublish ──────────────────────────────── -->\n <button class=\"tool-btn publish-btn\"\n [class.is-published]=\"isPublished\"\n [title]=\"isPublished ? 'Unpublish' : 'Publish'\"\n (click)=\"publishToggle.emit()\">\n <i [class]=\"isPublished ? 'ph-thin ph-cloud-slash' : 'ph-thin ph-cloud-arrow-up'\"></i>\n <span class=\"publish-label\">{{ isPublished ? 'Unpublish' : 'Publish' }}</span>\n </button>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { ComponentRegistryService } from '../../services/component-registry.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderMode, NodeAction } from '../panel.model';\n\ninterface TreeNode {\n node: ComponentNode;\n icon: string;\n label: string;\n depth: number;\n expanded: boolean;\n hasChildren: boolean;\n /** Reference to the parent's children array that contains this node. */\n parentArray: ComponentNode[];\n /** Index of this node inside parentArray. */\n indexInParent: number;\n}\n\n@Component({\n selector: 'app-layer-tree',\n templateUrl: './layer-tree.component.html',\n styleUrls: ['./layer-tree.component.scss'],\n standalone: false,\n})\nexport class LayerTreeComponent implements OnInit, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() globalElements: ComponentNode[] = [];\n @Output() nodeSelect = new EventEmitter<ComponentNode>();\n @Output() nodeAction = new EventEmitter<{ action: NodeAction; node: ComponentNode }>();\n @Output() nodeMove = new EventEmitter<void>();\n\n public flatTree: TreeNode[] = [];\n public flatGlobalTree: TreeNode[] = [];\n public selectedNodeId: string | null = null;\n public hoveredNodeId: string | null = null;\n\n public editingNodeId: string | null = null;\n public editingValue = '';\n\n public activeSection: 'page' | 'global' = 'page';\n\n /** Cache: component type → icon class */\n private iconMap = new Map<string, string>();\n private selectSub?: Subscription;\n /** Last-seen structural signature — used by ngDoCheck to skip no-op rebuilds. */\n private _layoutSig = '';\n private _globalSig = '';\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n ) {}\n\n ngOnInit(): void {\n this.buildIconMap();\n this.rebuild();\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.selectedNodeId = entry?.node?.id ?? null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n // Runs on every CD cycle — exit immediately if structure hasn't changed.\n ngDoCheck(): void {\n const sig = this.sig(this.layout);\n const globalSig = this.sig(this.globalElements);\n if (sig !== this._layoutSig || globalSig !== this._globalSig) {\n this._layoutSig = sig;\n this._globalSig = globalSig;\n this.rebuild();\n }\n }\n\n /** Cheap structural signature: node IDs + nesting depth only. */\n private sig(nodes: ComponentNode[]): string {\n return nodes.map(n =>\n (n.id ?? n.type) + (n.children?.length ? '{' + this.sig(n.children) + '}' : '')\n ).join(',');\n }\n\n onNodeClick(treeNode: TreeNode): void {\n const node = treeNode.node;\n this.selectedNodeId = node.id ?? null;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.overlayService.setSelect(\n ref.element,\n node.type,\n BuilderMode.Select,\n node,\n ref.componentRef,\n );\n // Scroll the element into view on the canvas\n ref.element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n this.nodeSelect.emit(node);\n }\n\n onNodeMouseEnter(treeNode: TreeNode): void {\n this.hoveredNodeId = treeNode.node.id ?? null;\n const ref = this.overlayService.getNodeRef(treeNode.node);\n if (ref) {\n this.overlayService.setHover(ref.element, treeNode.node.type, BuilderMode.Select);\n }\n }\n\n onNodeMouseLeave(): void {\n this.hoveredNodeId = null;\n this.overlayService.clearHover();\n }\n\n toggleExpand(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n treeNode.expanded = !treeNode.expanded;\n this.rebuild();\n }\n\n onDeleteNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Delete, node: treeNode.node });\n }\n\n onDuplicateNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Duplicate, node: treeNode.node });\n }\n\n startRename(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.editingNodeId = treeNode.node.id ?? null;\n this.editingValue = treeNode.node.label ?? '';\n }\n\n saveRename(treeNode: TreeNode): void {\n const val = this.editingValue.trim();\n treeNode.node.label = val || undefined;\n treeNode.label = treeNode.node.label ?? treeNode.node.type;\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n cancelRename(): void {\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n /**\n * CDK drop handler for tree reorder.\n * Works on the flat tree indices — maps back to parent arrays to do the move.\n */\n onTreeDrop(event: CdkDragDrop<TreeNode[]>): void {\n if (event.previousIndex === event.currentIndex) return;\n\n const draggedTreeNode = this.flatTree[event.previousIndex];\n if (!draggedTreeNode) return;\n\n const targetTreeNode = this.flatTree[event.currentIndex];\n if (!targetTreeNode) return;\n\n // Remove from source parent\n const srcArray = draggedTreeNode.parentArray;\n const srcIdx = draggedTreeNode.indexInParent;\n srcArray.splice(srcIdx, 1);\n\n // Determine destination: insert at the same position as the target node in its parent.\n // If dropping after the target, adjust index.\n const destArray = targetTreeNode.parentArray;\n let destIdx = targetTreeNode.indexInParent;\n\n // If dragging downward (previousIndex < currentIndex), the target index\n // may have shifted because we already removed the item from source.\n // If source and destination are the same array and srcIdx < destIdx, adjust.\n if (srcArray === destArray && srcIdx < destIdx) {\n destIdx--;\n }\n\n destArray.splice(destIdx, 0, draggedTreeNode.node);\n\n // Rebuild tree and notify builder\n this.rebuild();\n this.nodeMove.emit();\n }\n\n // ── Internals ────────────────────────────────────────────\n\n /** Build a type→icon lookup from the registry so we don't instantiate configs per node. */\n private buildIconMap(): void {\n for (const entry of this.registry.getAll()) {\n const instance = new entry.config();\n this.iconMap.set(entry.type, instance.icon || 'ph-thin ph-cube');\n }\n }\n\n private expandedState = new Map<string, boolean>();\n\n private rebuild(): void {\n // Save expanded state\n for (const tn of [...this.flatTree, ...this.flatGlobalTree]) {\n if (tn.node.id) {\n this.expandedState.set(tn.node.id, tn.expanded);\n }\n }\n const next: TreeNode[] = [];\n this.flattenTree(this.layout, 0, next);\n this.flatTree = next;\n\n const nextGlobal: TreeNode[] = [];\n this.flattenTree(this.globalElements, 0, nextGlobal);\n this.flatGlobalTree = nextGlobal;\n }\n\n private flattenTree(nodes: ComponentNode[], depth: number, out: TreeNode[], parentArr?: ComponentNode[]): void {\n const arr = parentArr ?? nodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasChildren = !!(node.children && node.children.length);\n const expanded = node.id ? (this.expandedState.get(node.id) ?? true) : true;\n const treeNode: TreeNode = {\n node,\n icon: this.iconMap.get(node.type) || 'ph-thin ph-cube',\n label: node.label ?? node.type,\n depth,\n expanded,\n hasChildren,\n parentArray: arr,\n indexInParent: i,\n };\n out.push(treeNode);\n if (node.children && expanded) {\n this.flattenTree(node.children, depth + 1, out, node.children);\n }\n }\n }\n}\n","<div class=\"layer-tree\">\n <div class=\"tree-header\">\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'page'\" (click)=\"activeSection = 'page'\">\n <i class=\"ph-thin ph-stack\"></i> Page\n </button>\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'global'\" (click)=\"activeSection = 'global'\">\n <i class=\"ph-thin ph-globe\"></i> Global\n <span *ngIf=\"flatGlobalTree.length\" class=\"section-tab-badge\">{{ flatGlobalTree.length }}</span>\n </button>\n </div>\n\n <!-- ── Page elements tree ───────────────────── -->\n <div *ngIf=\"activeSection === 'page'\"\n class=\"tree-body\"\n cdkDropList\n [cdkDropListData]=\"flatTree\"\n (cdkDropListDropped)=\"onTreeDrop($event)\">\n <div *ngIf=\"!flatTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n <span>No layers yet</span>\n </div>\n\n <div *ngFor=\"let tn of flatTree\"\n class=\"tree-row\"\n cdkDrag\n [cdkDragData]=\"tn\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <ng-container *ngIf=\"editingNodeId === tn.node.id; else staticLabel\">\n <input class=\"node-rename-input\"\n [value]=\"editingValue\"\n (input)=\"editingValue = $any($event.target).value\"\n (keydown.enter)=\"saveRename(tn)\"\n (keydown.escape)=\"cancelRename()\"\n (blur)=\"saveRename(tn)\"\n (click)=\"$event.stopPropagation()\"\n autofocus>\n </ng-container>\n <ng-template #staticLabel>\n <span class=\"node-label\" [class.node-label--named]=\"tn.node.label\">{{ tn.label }}</span>\n </ng-template>\n\n <span class=\"node-actions\">\n <button class=\"action-btn\" title=\"Rename\" (click)=\"startRename(tn, $event)\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n </button>\n <button class=\"action-btn\" title=\"Duplicate\" (click)=\"onDuplicateNode(tn, $event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n\n <!-- ── Global elements tree ─────────────────── -->\n <div *ngIf=\"activeSection === 'global'\" class=\"tree-body\">\n <div *ngIf=\"!flatGlobalTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>No global elements</span>\n </div>\n\n <div *ngFor=\"let tn of flatGlobalTree\"\n class=\"tree-row tree-row--global\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n <span class=\"node-position-badge\">{{ tn.node.globalPosition }}</span>\n\n <span class=\"node-actions\">\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource } from './models/component.model';\nimport { OverlayEntry, OverlayService } from './overlay/overlay.service';\nimport { PanelEvent, PanelEventService, PanelEventTypes } from './panels/panel-event.service';\nimport { BuilderMode, DeviceMode, DEVICE_OPTIONS, NodeAction, PageRouteAnimationSettings, PageSettings, PanelTypes, ToolbarAction } from './panels/panel.model';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DragEngineService, IoxDropEvent } from './services/drag-engine.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\n\n@Component({\n selector: 'app-builder',\n templateUrl: './builder.component.html',\n styleUrls: ['./builder.component.scss'],\n standalone: false,\n})\nexport class BuilderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() dataSources: IoxDataSource[] = [];\n @Input() orgId = 'default';\n @Input() routeParams: any[] = [];\n @Input() pageName = '';\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n @Input() pageSettings: PageSettings | null = null;\n @Input() globalElements: ComponentNode[] = [];\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Output() save = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() back = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n @Output() pageSettingsChange = new EventEmitter<PageSettings>();\n @Output() applyAnimationToAll = new EventEmitter<PageRouteAnimationSettings>();\n @Output() saveBlock = new EventEmitter<{ name: string; node: ComponentNode }>();\n @Output() globalElementsChange = new EventEmitter<ComponentNode[]>();\n @ViewChild('previewCanvas') previewCanvas?: ElementRef<HTMLElement>;\n @ViewChild('previewScroll') previewScrollRef?: ElementRef<HTMLElement>;\n @ViewChild('lenisContent') lenisContentRef?: ElementRef<HTMLElement>;\n @ViewChild('globalOverlay') globalOverlayRef?: ElementRef<HTMLElement>;\n\n public components: any[] = [];\n public activePanel: string = PanelTypes.STYLES;\n public isPanelOpen = false;\n public panelTypes = PanelTypes;\n public activeMode: BuilderMode = BuilderMode.Select;\n public builderModes = BuilderMode;\n public activeDevice: DeviceMode = DeviceMode.Desktop;\n public activeZoom: number = 100;\n public activeScreenWidth: number = 1440;\n public selectedItem: ComponentNode | null = null;\n public isDragging = false;\n public scrollThumbTop = 0; // px from top of track\n public scrollThumbHeight = 0; // px height of thumb\n public isScrollbarVisible = false;\n public scrollbarTranslate = 0; // counteracts Lenis wrapper scrollTop shifting position:absolute children\n public activeSidebar: 'components' | 'tree' | 'tokens' = 'components';\n public showSaveBlockDialog = false;\n public saveBlockName = '';\n private pendingBlockNode: ComponentNode | null = null;\n public isPanning = false;\n public panX = 0;\n public panY = 0;\n /** Canvas frame height in canvas-space pixels (= previewScroll.clientHeight / scale).\n * Used as iox-page-component's height so position:fixed top:0;bottom:0 fills the\n * same area as height:100vh (both resolve to this value). */\n public canvasFrameHeight = 0;\n private panStartX = 0;\n private panStartY = 0;\n private panOriginX = 0;\n private panOriginY = 0;\n private hoverHideRaf = 0;\n private viewportSub?: Subscription;\n private lenis?: Lenis;\n private lenisRafId?: number;\n private canvasRo?: ResizeObserver;\n private previewFrameRo?: ResizeObserver;\n private canvasContentHeight = 0;\n\n // Type-safe event forwarding for toolbar outputs\n handleToolbarModeChange(mode: BuilderMode): void {\n this.onModeChange(mode);\n }\n handleToolbarDeviceChange(device: DeviceMode): void {\n this.onDeviceChange(device);\n }\n handleToolbarZoomChange(value: number | 'fit'): void {\n this.onZoomChange(value);\n }\n\n handleToolbarScreenWidthChange(width: number): void {\n this.viewportService.setWidth(width);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n get globalElementsBefore(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'before');\n }\n\n get globalElementsAfter(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'after');\n }\n\n /** Canvas width in CSS pixels (driven by ViewportService). */\n get viewportWidth(): number {\n return this.viewportService.getState().width;\n }\n\n /** Canvas viewport height in CSS pixels (driven by ViewportService). */\n get viewportHeight(): number {\n return this.viewportService.getState().height;\n }\n\n /** Visual (scaled) canvas width — used to size the scroll container so the\n * scrollbar aligns with the right edge of the canvas, not the CMS shell. */\n get viewportScaledWidth(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.viewportWidth * s);\n }\n\n /** CSS transform for the visual canvas.\n * Includes translateX(-50%) for centering because iox-page-component is\n * position:absolute; left:50% inside .preview-lenis-content. */\n get viewportTransform(): string {\n const s = this.viewportService.getState().scale;\n const parts: string[] = ['translateX(-50%)'];\n if (this.panX !== 0 || this.panY !== 0) parts.push(`translate(${this.panX}px, ${this.panY}px)`);\n if (s !== 1) parts.push(`scale(${s})`);\n return parts.join(' ');\n }\n\n /**\n * Height of the Lenis content proxy div (realContentHeight × scale).\n * Lenis scrolls against this value so scroll range is always in visual px,\n * not unscaled CSS px — correct at any zoom level.\n */\n get scaledContentHeight(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.canvasContentHeight * s);\n }\n\n /** The canvas starts at the simulated viewport height, just like a real empty browser page. */\n get canvasMinHeight(): number {\n return this.viewportService.getState().height;\n }\n\n private sub?: Subscription;\n private registrySub?: Subscription;\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n private dsRegistry: DataSourceRegistryService,\n private viewportService: ViewportService,\n private interactionEngine: InteractionEngineService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private clipboard: BuilderClipboardService,\n private cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\n ) {}\n\n ngOnInit(): void {\n this.components = this.registry.getAll();\n this.dsRegistry.setDataSources(this.dataSources);\n this.dragEngine.setScale(this.viewportService.getScale());\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => this.handlePanelEvents(panelEvent));\n this.sub.add(this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n }));\n this.sub.add(this.dragEngine.dropComplete$.subscribe((node: ComponentNode) => {\n this._selectAfterDrop(node);\n }));\n this.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.viewportSub = this.viewportService.state$.subscribe(state => {\n this.activeDevice = state.device;\n this.activeZoom = Math.round(state.scale * 100);\n this.activeScreenWidth = state.width;\n this.dragEngine.setScale(state.scale);\n this.updatePreviewVh();\n // scaledContentHeight changes with scale — flush DOM first so\n // .preview-lenis-content has its new height before Lenis reads it.\n this.cdr.detectChanges();\n this.lenis?.resize();\n // iox-page-component has transition:0.25s — overlay positions are stale\n // until the transform animation completes. Re-fire after the transition.\n setTimeout(() => this.overlayService.refreshSelect(), 270);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pageSettings']) {\n // Reinit Lenis with updated scroll options (lerp, wheelMultiplier, etc.)\n // so the builder preview reflects the live-page scroll feel in real time.\n this.initLenis();\n }\n if (changes['globalElements']) {\n // The *ngIf on the global overlay renders after this hook — defer so\n // globalOverlayRef is in the DOM before we try to set CSS vars on it.\n setTimeout(() => this.updatePreviewVh());\n }\n }\n\n ngAfterViewInit(): void {\n this.updatePreviewVh();\n // Re-compute --preview-vh whenever the canvas frame resizes (panel open/close,\n // window resize, etc.) so 100vh always fills the visible area.\n if (this.previewScrollRef?.nativeElement) {\n this.previewFrameRo = new ResizeObserver(() => this.updatePreviewVh());\n this.previewFrameRo.observe(this.previewScrollRef.nativeElement);\n }\n this.overlayService.setContainer(this.previewCanvas?.nativeElement || null);\n // Builder dispatches synthetic 'scroll' events on .preview-lenis-content from\n // the Lenis callback — point the overlay scroll listener at that element.\n // (Not previewScrollRef which is the Lenis eventsTarget — dispatching there\n // would cause Lenis to re-fire its scroll handler → infinite loop.)\n this.overlayService.setScrollContainer(this.lenisContentRef?.nativeElement || null);\n\n // Register the root canvas as a dropzone.\n const canvasEl = document.getElementById('canvas-preview')!;\n if (canvasEl) {\n this.dragEngine.registerDropzone(\n 'canvas-preview',\n canvasEl,\n this.layout,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n // Track canvas content height so scaledContentHeight (= height × scale)\n // keeps the Lenis content proxy correctly sized at any zoom level.\n this.canvasRo = new ResizeObserver(entries => {\n const h = entries[0]?.contentRect.height ?? 0;\n if (h !== this.canvasContentHeight) {\n this.canvasContentHeight = h;\n this.cdr.detectChanges();\n this.lenis?.resize();\n }\n });\n this.canvasRo.observe(canvasEl);\n }\n\n this.initLenis();\n setTimeout(() => this.appRef.tick());\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.previewFrameRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) { this.dragEngine.unregisterDropzone('canvas-preview', canvasEl); }\n }\n\n /**\n * Set --preview-vh / --preview-vw on .preview-scroll so that viewport-relative\n * units (vh, vw) inside the canvas resolve to the simulated canvas dimensions\n * rather than the real browser viewport.\n *\n * --preview-vh = canvas frame height (unscaled) / 100\n * --preview-vw = canvas width from viewport state / 100\n *\n * Both fall back to their native unit in production (no variables defined).\n */\n private updatePreviewVh(): void {\n const el = this.previewScrollRef?.nativeElement;\n if (!el) return;\n const state = this.viewportService.getState();\n const frameH = el.clientHeight / state.scale;\n const vhVal = `${frameH / 100}px`;\n const vwVal = `${state.width / 100}px`;\n el.style.setProperty('--preview-vh', vhVal);\n el.style.setProperty('--preview-vw', vwVal);\n // Mirror on global overlay so vh/vw units resolve identically there\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vh', vhVal);\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vw', vwVal);\n this.canvasFrameHeight = Math.round(frameH);\n }\n\n private initLenis(): void {\n this.destroyLenis();\n if (!this.previewScrollRef?.nativeElement || !this.lenisContentRef?.nativeElement) return;\n\n const s = this.pageSettings?.scroll;\n this.lenis = new Lenis({\n wrapper: this.previewScrollRef.nativeElement,\n content: this.lenisContentRef.nativeElement,\n eventsTarget: this.previewScrollRef.nativeElement,\n lerp: s?.lerp ?? 0.1,\n wheelMultiplier: s?.wheelMultiplier ?? 1,\n touchMultiplier: s?.touchMultiplier ?? 1,\n orientation: s?.direction ?? 'vertical',\n infinite: s?.infinite ?? false,\n autoResize: false, // we drive resize() manually via canvasRo + viewportSub\n });\n\n this.lenis.on('scroll', (instance: Lenis) => {\n const clientH = this.previewScrollRef!.nativeElement.clientHeight;\n this.onPageScroll({\n scrollTop: instance.scroll,\n scrollHeight: instance.limit + clientH,\n clientHeight: clientH,\n scrollPercentage: instance.progress * 100,\n });\n // Notify overlay to reposition boxes on each scroll tick.\n // Dispatch on lenisContent (not previewScrollRef/eventsTarget) to avoid\n // Lenis re-consuming the event and causing infinite recursion.\n this.lenisContentRef!.nativeElement.dispatchEvent(new Event('scroll'));\n // Keep the fixed-position drop-target overlay aligned when canvas scrolls\n // during an active drag (pointer doesn't move, so _onDragMove never fires).\n this.dragEngine.refreshDragOverlays();\n });\n\n const raf = (time: number) => {\n this.lenis?.raf(time);\n this.lenisRafId = requestAnimationFrame(raf);\n };\n this.lenisRafId = requestAnimationFrame(raf);\n }\n\n private destroyLenis(): void {\n if (this.lenisRafId != null) cancelAnimationFrame(this.lenisRafId);\n this.lenis?.destroy();\n this.lenis = undefined;\n this.lenisRafId = undefined;\n }\n\n addComponent(name: string): void {\n const config = this.registry.createConfig(name);\n if (!config) {\n return;\n }\n this.layout.push(config);\n }\n\n onDrop(event: IoxDropEvent): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n if (typeof payload.data === 'string') {\n const config = this.registry.createConfig(payload.data);\n if (!config) return;\n this.layout.splice(insertIndex, 0, config);\n this.cdr.markForCheck();\n this._selectAfterDrop(config);\n } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block dragged from blocks panel — deep clone with new IDs.\n const clone = this.deepCloneWithNewIds(item);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n if (payload.sourceId && payload.sourceId !== 'canvas-preview') {\n // Cross-list move from a nested container into canvas root.\n const sourceData = this.dragEngine.getData(payload.sourceId);\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.dragEngine.getCdr(payload.sourceId)?.detectChanges();\n }\n }\n this.layout.splice(insertIndex, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n // Same-container reorder (canvas root).\n const currentIdx = this.layout.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n this.layout.splice(currentIdx, 1);\n this.layout.splice(adjustedIdx, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onModeChange(mode: BuilderMode): void {\n this.activeMode = mode;\n if (mode === BuilderMode.Pan) {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.overlayService.clearHover();\n } else {\n // Returning to Select/Style — reset pan offset so canvas re-centers\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n onDeviceChange(device: DeviceMode): void {\n this.viewportService.setDevice(device);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n onZoomChange(value: number | 'fit'): void {\n if (value === 'fit') {\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n } else {\n this.viewportService.setScale(value / 100);\n }\n }\n\n // ── Board pan ────────────────────────────────────────────\n\n onBoardMouseDown(event: MouseEvent): void {\n if (this.activeMode !== BuilderMode.Pan) return;\n if (event.button !== 0) return;\n this.isPanning = true;\n this.panStartX = event.clientX;\n this.panStartY = event.clientY;\n this.panOriginX = this.panX;\n this.panOriginY = this.panY;\n event.preventDefault();\n }\n\n onBoardMouseMove(event: MouseEvent): void {\n if (!this.isPanning) return;\n this.panX = this.panOriginX + (event.clientX - this.panStartX);\n this.panY = this.panOriginY + (event.clientY - this.panStartY);\n }\n\n onBoardMouseUp(): void {\n this.isPanning = false;\n }\n\n private autoFitViewport(): void {\n const container = this.previewCanvas?.nativeElement;\n if (!container) return;\n // Available width = container width minus horizontal padding (10px × 2)\n this.viewportService.fitToWidth(container.clientWidth, 20);\n }\n\n selectPanel(panel: string): void {\n this.activePanel = panel;\n this.panelEventService.emit(this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN, panel);\n }\n\n handleClick(event: any): void {\n if (this.activeMode === BuilderMode.Pan) return;\n this.selectedItem = event.node;\n this.overlayService.setSelect(event.element, event.node.type, this.activeMode, event.node, event.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: event.node, componentRef: event.componentRef });\n }\n\n private _selectAfterDrop(node: ComponentNode): void {\n // Wait one tick for Angular to render the new component and register it\n // in the overlay before attempting to select it.\n setTimeout(() => {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n this.selectedItem = node;\n this.overlayService.setSelect(ref.element, node.type, this.activeMode, node, ref.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef });\n });\n }\n\n handleMouseEnter(event: any): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.overlayService.setHover(event.element, event.node.type, this.activeMode);\n }\n\n handleMouseLeave(): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.hoverHideRaf = requestAnimationFrame(() => this.overlayService.clearHover());\n }\n\n handleCanvasClick(): void {\n // Only fires when clicking empty canvas space (renderers call stopPropagation)\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n onTreeNodeSelect(node: ComponentNode): void {\n this.selectedItem = node;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef });\n }\n this.selectPanel(PanelTypes.STYLES);\n }\n\n onTreeNodeAction(event: { action: NodeAction; node: ComponentNode }): void {\n const { action, node } = event;\n\n // Check global elements first\n const globalIdx = this.globalElements.findIndex(n => n === node);\n if (globalIdx !== -1) {\n if (action === NodeAction.Delete) {\n this.globalElements.splice(globalIdx, 1);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n return;\n }\n\n const result = this.findNodeInTree(node, this.layout);\n if (!result) return;\n\n if (action === NodeAction.Delete) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n } else if (action === NodeAction.Duplicate) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onTreeNodeMove(): void {\n // Tree drag moved a node — canvas will re-render via change detection.\n // Clear selection since the moved node's DOM element may be recreated.\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onToolbarAction(event: { action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after' }): void {\n const { action, entry } = event;\n const node = entry.node;\n if (!node) return;\n\n switch (action) {\n case ToolbarAction.Delete: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n const blockClone: ComponentNode = JSON.parse(JSON.stringify(node));\n this._stripGlobalFlags(blockClone);\n this.pendingBlockNode = blockClone;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n if (parentNode) {\n const ref = this.overlayService.getNodeRef(parentNode);\n if (ref) {\n this.selectedItem = parentNode;\n this.overlayService.setSelect(ref.element, parentNode.type, this.activeMode, parentNode, ref.componentRef);\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: parentNode, componentRef: ref.componentRef });\n }\n } else {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.MakeGlobal: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n result.parent.splice(result.index, 1);\n node.isGlobal = true;\n node.globalPosition = event.position ?? 'before';\n this.globalElements.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.RemoveGlobal: {\n const idx = this.globalElements.findIndex(n => n.id === node.id);\n if (idx !== -1) {\n this.globalElements.splice(idx, 1);\n node.isGlobal = false;\n node.globalPosition = undefined;\n this.layout.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.EditPreset: {\n this.panelEventService.emit(PanelEventTypes.PRESET_EDIT, node.stylePresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.STYLES,\n );\n break;\n }\n case ToolbarAction.EditInteractionPreset: {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_PRESET_EDIT, node.interactionPresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.INTERACTIONS,\n );\n break;\n }\n case ToolbarAction.PastePreset: {\n const presetId = this.clipboard.getPresetId();\n if (presetId) {\n node.stylePresetId = presetId;\n node.styleOverrides = {};\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: null });\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.PasteInteractionPreset: {\n const interactionPresetId = this.clipboard.getInteractionPresetId();\n if (interactionPresetId) {\n node.interactionPresetId = interactionPresetId;\n const preset = this.interactionPresetRegistry.getPreset(interactionPresetId);\n if (preset) node.interactions = JSON.parse(JSON.stringify(preset.interactions));\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.DetachSymbol: {\n node.symbolId = undefined;\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.Copy: {\n this.clipboard.copyNode(node);\n break;\n }\n case ToolbarAction.Paste: {\n const pastedNode = this.clipboard.getNode();\n if (!pastedNode) break;\n const clone = this.deepCloneWithNewIds(pastedNode);\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index + 1, 0, clone);\n } else {\n this.layout.push(clone);\n }\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n }\n }\n\n confirmSaveBlock(): void {\n if (!this.saveBlockName.trim() || !this.pendingBlockNode) return;\n this.saveBlock.emit({ name: this.saveBlockName.trim(), node: this.pendingBlockNode });\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n cancelSaveBlock(): void {\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n private deepCloneWithNewIds(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n this.assignNewIds(clone);\n return clone;\n }\n\n private assignNewIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).slice(2, 10);\n if (node.styleId) node.styleId = Math.random().toString(36).slice(2, 10);\n node.children?.forEach(child => this.assignNewIds(child));\n }\n\n private _stripGlobalFlags(node: ComponentNode): void {\n node.isGlobal = false;\n node.globalPosition = undefined;\n node.children?.forEach(c => this._stripGlobalFlags(c));\n }\n\n private _scrollbarTimer: ReturnType<typeof setTimeout> | null = null;\n\n onPageScroll(event: { scrollTop: number; scrollHeight: number; clientHeight: number; scrollPercentage?: number }): void {\n const contentH = event.scrollHeight;\n const wrapperH = event.clientHeight;\n if (contentH <= wrapperH) {\n this.isScrollbarVisible = false;\n return;\n }\n // .canvas-scrollbar has top:20px; bottom:20px — visible track is 40px shorter.\n const trackH = wrapperH - 40;\n const thumbH = Math.max((trackH / contentH) * trackH, 32);\n // Use Lenis progress (0–1) when available — more accurate than recomputing from scroll/limit.\n const progress = event.scrollPercentage != null ? event.scrollPercentage / 100\n : event.scrollTop / (contentH - wrapperH);\n const thumbTop = progress * (trackH - thumbH);\n this.scrollThumbHeight = thumbH;\n this.scrollThumbTop = thumbTop;\n this.isScrollbarVisible = true;\n // .canvas-scrollbar is position:absolute inside the Lenis wrapper.\n // When Lenis calls wrapper.scrollTo(), scrollTop shifts all absolute children.\n // Counteract with translateY(scrollTop) so the track stays visually anchored.\n this.scrollbarTranslate = event.scrollTop;\n this.cdr.markForCheck();\n\n if (this._scrollbarTimer) clearTimeout(this._scrollbarTimer);\n this._scrollbarTimer = setTimeout(() => {\n this.isScrollbarVisible = false;\n this.cdr.markForCheck();\n }, 1200);\n }\n\n private findNodeInTree(target: ComponentNode, children: ComponentNode[]): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < children.length; i++) {\n if (children[i] === target) {\n return { parent: children, index: i };\n }\n if (children[i].children) {\n const found = this.findNodeInTree(target, children[i].children!);\n if (found) return found;\n }\n }\n return null;\n }\n\n private findParentNode(target: ComponentNode, children: ComponentNode[], parent?: ComponentNode): ComponentNode | null {\n for (const child of children) {\n if (child === target) return parent || null;\n if (child.children) {\n const found = this.findParentNode(target, child.children, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n private handlePanelEvents(panelEvent: PanelEvent): void {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n }\n }\n}","<div class=\"builder\">\n <header class=\"builder-header\">\n <div class=\"sidebar-switcher\">\n <button (click)=\"activeSidebar = 'components'\" [class.active]=\"activeSidebar === 'components'\" title=\"Components\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\" title=\"Layers\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tokens'\" [class.active]=\"activeSidebar === 'tokens'\" title=\"Design Tokens\">\n <i class=\"ph-thin ph-circles-three\"></i>\n </button>\n </div>\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\">\n <i class=\"ph-thin ph-file\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.INTERACTIONS)\" [class.active]=\"activePanel === panelTypes.INTERACTIONS\">\n <i class=\"ph-thin ph-lightning\"></i>\n </button>\n </div>\n </header>\n\n <div class=\"builder-main\" [class.panel-open]=\"isPanelOpen\">\n <aside class=\"sidebar\">\n <div *ngIf=\"activeSidebar === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'tokens'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderTokens]\"></ng-content>\n </div>\n <app-layer-tree *ngIf=\"activeSidebar === 'tree'\"\n [layout]=\"layout\"\n [globalElements]=\"globalElements\"\n (nodeSelect)=\"onTreeNodeSelect($event)\"\n (nodeAction)=\"onTreeNodeAction($event)\"\n (nodeMove)=\"onTreeNodeMove()\"></app-layer-tree>\n </aside>\n\n <main #previewCanvas class=\"preview\"\n [class.grab-mode]=\"activeMode === builderModes.Pan\"\n [class.grabbing]=\"isPanning\"\n (click)=\"handleCanvasClick()\"\n (mousedown)=\"onBoardMouseDown($event)\"\n (mousemove)=\"onBoardMouseMove($event)\"\n (mouseup)=\"onBoardMouseUp()\"\n (mouseleave)=\"onBoardMouseUp()\">\n <app-overlay (toolbarAction)=\"onToolbarAction($event)\"></app-overlay>\n\n <!-- Custom Lenis scrollbar — lives in .preview (not .preview-scroll) so it\n stays in the right gutter and never overlaps the canvas at large widths.\n No translateY counteract needed since it isn't inside the Lenis wrapper. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\n\n <!-- Global elements overlay — outside Lenis so position:fixed children\n stay pinned to the canvas viewport rather than scrolling with content.\n Shares viewportTransform so elements scale correctly at any zoom level.\n Height matches viewportHeight so position:fixed + inset:0 fills the\n simulated viewport correctly (CSS calc(100%) would give the wrong\n containing-block height and break full-screen fixed overlays). -->\n <div *ngIf=\"globalElements.length\"\n #globalOverlay\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n <ng-container *ngFor=\"let item of globalElementsBefore\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of globalElementsAfter\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"preview-scroll\"\n #previewScroll\n [style.width.px]=\"viewportScaledWidth\"\n [class.pan-mode]=\"activeMode === builderModes.Pan\">\n\n <!-- Lenis content proxy: height = realContentHeight × scale.\n Lenis scrolls against this value so scroll range is always in\n visual px — correct at any zoom level. -->\n <div class=\"preview-lenis-content\" #lenisContent\n [style.height.px]=\"scaledContentHeight\">\n\n <iox-page-component\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <div *ngFor=\"let item of layout\"\n [ngClass]=\"['preview-node', 'iox-outer-' + (item.styleId ?? item.id)]\"\n [class.is-selected]=\"selectedItem === item\"\n ioxDraggable\n [ioxDragData]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (modeChange)=\"handleToolbarModeChange($event)\"\n (deviceChange)=\"handleToolbarDeviceChange($event)\"\n (zoomChange)=\"handleToolbarZoomChange($event)\"\n (screenWidthChange)=\"handleToolbarScreenWidthChange($event)\"\n (save)=\"save.emit()\"\n (preview)=\"preview.emit()\"\n (publishToggle)=\"publishToggle.emit()\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\">\n </app-toolbar>\n\n <ng-content select=\"[builderPanel]\"></ng-content>\n </div>\n\n <!-- Save as Reusable Block dialog -->\n @if (showSaveBlockDialog) {\n <div class=\"save-block-backdrop\" (click)=\"cancelSaveBlock()\"></div>\n <div class=\"save-block-dialog\">\n <h4 class=\"save-block-title\">Save as Reusable Block</h4>\n <input class=\"save-block-input\"\n type=\"text\"\n placeholder=\"Block name...\"\n [(ngModel)]=\"saveBlockName\"\n (keydown.enter)=\"confirmSaveBlock()\"\n (keydown.escape)=\"cancelSaveBlock()\"\n autofocus>\n <div class=\"save-block-actions\">\n <p-button size=\"small\" severity=\"secondary\" label=\"Cancel\" (click)=\"cancelSaveBlock()\"></p-button>\n <p-button size=\"small\" label=\"Save\" [disabled]=\"!saveBlockName.trim()\" (click)=\"confirmSaveBlock()\"></p-button>\n </div>\n </div>\n }\n</div>","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDropzone]',\n standalone: false,\n})\nexport class IoxDropzoneDirective implements OnInit, OnDestroy {\n @Input() ioxDropzoneId = '';\n @Input() ioxDropzoneData: ComponentNode[] = [];\n /** Optional callback invoked after a drop lands in this zone (e.g. repeater preview refresh). */\n @Input() ioxDropzonePostDrop?: () => void;\n @Output() ioxDrop = new EventEmitter<IoxDropEvent>();\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDropzone(\n this.ioxDropzoneId,\n this.el.nativeElement,\n this.ioxDropzoneData,\n this.cdr,\n (evt) => this.ioxDrop.emit(evt),\n this.ioxDropzonePostDrop,\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.ioxDropzoneId, this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-section',\n template: `\n <div class=\"section-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"section-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['section-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .section-root {\n position: relative;\n box-sizing: border-box;\n }\n .section-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .section-root:hover .section-placeholder,\n .section-root.iox-drag-over .section-placeholder {\n opacity: 1;\n }\n .section-placeholder i { font-size: 22px; }\n .section-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class SectionComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-container',\n template: `\n <ng-template #dropContent>\n <div *ngIf=\"!children.length\" class=\"container-placeholder\">\n <i class=\"ph-thin ph-square\"></i>\n <span>Drop components here</span>\n </div>\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['container-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-template>\n\n @switch (htmlTag) {\n @case ('section') { <section class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></section> }\n @case ('article') { <article class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></article> }\n @case ('header') { <header class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></header> }\n @case ('footer') { <footer class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></footer> }\n @case ('main') { <main class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></main> }\n @case ('nav') { <nav class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></nav> }\n @case ('ul') { <ul class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></ul> }\n @case ('ol') { <ol class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" [attr.start]=\"start !== 1 ? start : null\" [attr.reversed]=\"reversed ? '' : null\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></ol> }\n @case ('li') { <li class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></li> }\n @default { <div class=\"container-root\" [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\" ioxDropzone [ioxDropzoneId]=\"dropListId\" [ioxDropzoneData]=\"children\" (ioxDrop)=\"onDrop($event)\"><ng-container [ngTemplateOutlet]=\"dropContent\"></ng-container></div> }\n }\n `,\n styles: [`\n .container-root {\n position: relative;\n box-sizing: border-box;\n }\n .container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .container-root:hover .container-placeholder,\n .container-root.iox-drag-over .container-placeholder {\n opacity: 1;\n }\n .container-placeholder i { font-size: 18px; }\n .container-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n @Input() htmlTag: string = 'div';\n @Input() start: number = 1;\n @Input() reversed: boolean = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-linked-container',\n template: `\n <a [href]=\"resolvedHref\"\n [target]=\"target\"\n [ngStyle]=\"style\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n class=\"linked-container-root\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"linked-container-placeholder\">\n <i class=\"ph-thin ph-link\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['linked-container-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </a>\n `,\n styles: [`\n .linked-container-root {\n display: block;\n position: relative;\n box-sizing: border-box;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n }\n .linked-container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .linked-container-root:hover .linked-container-placeholder,\n .linked-container-root.iox-drag-over .linked-container-placeholder {\n opacity: 1;\n }\n .linked-container-placeholder i { font-size: 18px; }\n .linked-container-child {\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderLinkedContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Input() linkType: 'external' | 'page' = 'external';\n @Input() url = 'https://';\n @Input() pageRoute = '';\n @Input() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n private capturePreventDefault = (e: MouseEvent) => e.preventDefault();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n private elRef: ElementRef<HTMLElement>,\n @Optional() @Inject(IS_PREVIEW) private isPreview: boolean,\n ) {}\n\n ngOnInit(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n ngOnDestroy(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n get resolvedHref(): string {\n if (this.linkType !== 'page') return this.url || '#';\n return this.pageRoute || '#';\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Optional CMS content fetcher. Provide from the host app to enable Repeater data preview. */\nexport const IOX_CONTENT_SERVICE = new InjectionToken<IoxContentService>('IOX_CONTENT_SERVICE');\n\n/** Optional font manager. Provide from the host app to populate the fontFamily dropdown. */\nexport const IOX_FONT_MANAGER = new InjectionToken<IoxFontManager>('IOX_FONT_MANAGER');\n\nexport interface IoxContentService {\n getContent(contentType: string, orgId?: string): import('rxjs').Observable<any>;\n}\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * Resolves a dot-notation path (with optional array bracket notation) against an object.\n * Examples: 'title', 'author.name', 'tags[0]', 'items[2].title'\n */\nexport function resolvePath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n if (current == null) return undefined;\n const bracketMatch = key.match(/^(\\w+)\\[(\\d+)]$/);\n if (bracketMatch) {\n const arr = current[bracketMatch[1]];\n return Array.isArray(arr) ? arr[parseInt(bracketMatch[2], 10)] : undefined;\n }\n return current[key];\n }, obj);\n}\n\n/**\n * Deep-clones a ComponentNode tree and overrides trait defaults\n * according to each node's bindings resolved against `item`.\n *\n * Each clone gets a new `id` (for Angular tracking / overlay registration)\n * but shares the original node's CSS class by setting `styleId = originalId`.\n * This means all repeated preview rows point to the same CSS rule block as the\n * template node — the style engine only needs one rule per logical slot.\n */\nexport function cloneNodesForItem(nodes: ComponentNode[], item: any): ComponentNode[] {\n return nodes.map(node => {\n // Capture the CSS-owning id before clone\n const cssId = node.styleId ?? node.id;\n\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n clone.id = Math.random().toString(36).substr(2, 9);\n // Point this clone and all its descendants at the original CSS rule.\n clone.styleId = cssId;\n\n if (clone.bindings?.length && item) {\n for (const binding of clone.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n for (const trait of clone.traits || []) {\n if (trait.name === binding.prop) {\n trait.default = value;\n }\n }\n }\n }\n }\n\n if (clone.children?.length) {\n clone.children = cloneNodesForItem(clone.children, item);\n }\n\n return clone;\n });\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { IOX_CONTENT_SERVICE, IoxContentService } from '../../tokens/builder.tokens';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\n\n@Component({\n selector: 'app-builder-repeater',\n template: `\n <ng-template #badgeContent>\n <i class=\"ph-thin ph-repeat\"></i>\n <span *ngIf=\"source\">{{ source }}</span>\n <span *ngIf=\"!source\" class=\"repeater-badge-empty\">No source</span>\n <span *ngIf=\"items.length\" class=\"repeater-badge-count\">&times; {{ items.length }}</span>\n <span *ngIf=\"isLoading\" class=\"repeater-badge-loading\"><i class=\"ph-thin ph-circle-notch\"></i></span>\n </ng-template>\n\n <!--\n .repeater-wrapper is the layout root.\n In has-children state, .repeater-badge lives here as a direct child\n (position:absolute, hover-only) so it is NOT a child of .repeater-root\n and does NOT shift the :nth-child index of the item wrappers.\n\n In empty state, .repeater-badge lives inside .repeater-root (no items\n to count, so :nth-child is irrelevant there).\n -->\n <div class=\"repeater-wrapper\" [class.has-children]=\"children.length > 0\">\n\n <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->\n <div *ngIf=\"children.length > 0\" class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n\n <div class=\"repeater-root\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- EMPTY STATE: badge + placeholder inside root -->\n <ng-container *ngIf=\"!children.length\">\n <div class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n <div class=\"repeater-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop a component here as the item template</span>\n </div>\n </ng-container>\n\n <!-- Template items — DIRECT children of repeater-root.\n :first-child / :nth-child(odd) etc. now correctly target these\n as siblings of the preview items below. -->\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['repeater-item-template', 'iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n\n <!-- Preview items — also DIRECT children of repeater-root. -->\n <ng-container *ngFor=\"let row of previewRows\">\n <div *ngFor=\"let child of row\"\n [ngClass]=\"['repeater-preview-child', 'iox-outer-' + (child.styleId ?? child.id)]\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n /* ── Outer wrapper: anchors the absolute badge in has-children state ── */\n .repeater-wrapper {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Badge base (used in both empty and has-children contexts) ── */\n .repeater-badge {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n user-select: none;\n }\n\n /* ── Has-children: badge is absolute over the wrapper, hover-only ── */\n .repeater-wrapper.has-children > .repeater-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n border-radius: 0 0 4px 0;\n border: 1px solid rgba(203, 144, 144, 0.5);\n opacity: 0;\n cursor: pointer;\n transition: opacity 0.15s;\n }\n .repeater-wrapper.has-children:hover > .repeater-badge {\n opacity: 1;\n }\n\n .repeater-badge i { font-size: 13px; }\n .repeater-badge-empty { opacity: 0.55; }\n .repeater-badge-count { margin-left: auto; font-weight: 600; }\n .repeater-badge-loading i { animation: spin 1s linear infinite; }\n @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n\n /* ── Root ── */\n .repeater-root {\n box-sizing: border-box;\n }\n\n /* ── Empty state: dashed border on root (connected with badge above) ── */\n .repeater-wrapper:not(.has-children) .repeater-root {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-top: none;\n border-radius: 0 0 4px 4px;\n min-height: 40px;\n }\n\n .repeater-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1.5rem 1rem;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .repeater-placeholder i { font-size: 20px; }\n\n /* ── Template item: direct child, draggable, full opacity ── */\n .repeater-item-template {\n min-width: 0;\n }\n\n /* ── Preview items: direct children, dimmed, non-interactive ── */\n .repeater-preview-child {\n opacity: 0.55;\n pointer-events: none;\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n public items: any[] = [];\n public previewRows: ComponentNode[][] = [];\n public isLoading = false;\n\n /** Bound reference passed to [ioxDropzonePostDrop] so the directive can call it. */\n readonly refreshPreviewsBound = () => { setTimeout(() => this.refreshPreviews()); };\n\n private _source = '';\n private _limit = 10;\n private orgId = 'default';\n private bindingSub?: Subscription;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) { this.fetchData(); }\n else { this.items = []; this.previewRows = []; }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n constructor(\n private dragEngine: DragEngineService,\n private overlayService: OverlayService,\n @Optional() @Inject(IOX_CONTENT_SERVICE) private contentService: IoxContentService | null,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private activatedRoute: ActivatedRoute,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.orgId = this.activatedRoute.snapshot.paramMap.get('orgId') || 'default';\n\n this.bindingSub = this.panelEventService.subscribe(event => {\n if (event.type !== PanelEventTypes.BINDING_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length) return;\n if (this.isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.bindingSub?.unsubscribe();\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr,\n () => { if (this.items.length > 0) setTimeout(() => this.refreshPreviews()); });\n }\n\n private fetchData(): void {\n if (!this._source) return;\n const ds = this.dsRegistry.findByAlias(this._source);\n const contentType = ds?.request?.cms?.contentType;\n if (!contentType || !this.contentService) return;\n this.isLoading = true;\n this.cdr.markForCheck();\n this.contentService.getContent(contentType, this.orgId).subscribe({\n next: (data: any) => {\n const all: any[] = Array.isArray(data) ? data : (data?.items || data?.data || []);\n this.items = all.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n },\n error: () => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }\n });\n }\n\n private isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return search(this.children);\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewRows = [];\n this.cdr.markForCheck();\n return;\n }\n this.applyFirstItemToTemplate();\n this.previewRows = this.items.slice(1).map(item =>\n cloneNodesForItem(this.children, item)\n );\n this.cdr.markForCheck();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length) return;\n\n for (const child of this.children) {\n if (!child.bindings?.length) continue;\n const ref = this.overlayService.getNodeRef(child);\n if (!ref?.componentRef) continue;\n\n for (const binding of child.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-button-block',\n template: `\n <button class=\"button-block-root\"\n [ngClass]=\"'iox-node-' + nodeId\"\n type=\"button\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n <ng-container *ngIf=\"!children.length\">\n <span class=\"button-block-placeholder\">Button</span>\n </ng-container>\n <div *ngFor=\"let child of children\"\n class=\"button-block-child\"\n [ngClass]=\"'iox-outer-' + (child.styleId ?? child.id)\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </button>\n `,\n styles: [`\n /* Only properties NOT controlled by the style engine — everything else comes\n from .iox-node-{id} generated by StyleRegistryService. Hardcoded values\n here would beat the style engine (Angular adds [_ngcontent] → 0,1,1 vs\n style engine's 0,1,0) and make style panel changes have no effect. */\n .button-block-root {\n /* Fill the iox-outer wrapper so the user-set width takes effect.\n width is an OUTER_PROP so the style engine writes it on the wrapper,\n not here — this 100% bridges outer wrapper → host → inner button.\n height is NOT 100% to avoid stretching inside a tall flex container. */\n width: 100%;\n font: inherit;\n color: inherit;\n text-decoration: none;\n box-sizing: border-box;\n }\n .button-block-placeholder {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(100, 116, 139, 0.4);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .button-block-child { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderButtonBlockComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() tag: 'button' | 'a' = 'button';\n @Input() href = '';\n @Input() target: '_self' | '_blank' = '_self';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() nodeId = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'panel-child',\n template: '<ng-template #tpl><ng-content></ng-content></ng-template>',\n standalone: false,\n})\nexport class PanelChildComponent {\n @Input() name!: string;\n @ViewChild('tpl', { static: true }) template!: TemplateRef<any>;\n}","import { AfterContentInit, Component, ContentChildren, OnDestroy, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PanelEvent, PanelEventService, PanelEventTypes } from '../panel-event.service';\nimport { PanelChildComponent } from './panel-child.component';\n\n@Component({\n selector: 'app-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n standalone: false,\n})\nexport class PanelComponent implements AfterContentInit, OnDestroy {\n public isPanelOpen = false;\n public activePanel: string | null = null;\n\n @ContentChildren(PanelChildComponent) panelChildren!: QueryList<PanelChildComponent>;\n\n private sub?: Subscription;\n\n constructor(private panelEventService: PanelEventService) {\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n this.activePanel = null;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_SELECTED || panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n this.activePanel = panelEvent.data;\n }\n });\n }\n\n ngAfterContentInit(): void {}\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n}","<div class=\"panel\">\n <ng-container *ngFor=\"let child of panelChildren\">\n <div class=\"panel-body\" [ngClass]=\"{ active: activePanel === child.name }\">\n <ng-container *ngTemplateOutlet=\"child.template\"></ng-container>\n </div>\n </ng-container>\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n ComponentNode,\n IoxInteraction,\n InteractionAction,\n InteractionTrigger,\n InteractionActionType,\n TRIGGER_OPTIONS,\n ACTION_TYPE_OPTIONS,\n EASING_OPTIONS,\n INVERSE_ACTION,\n generateNodeId,\n} from '../../models/component.model';\nimport { OverlayService } from '../../overlay/overlay.service';\n\n@Component({\n selector: 'app-interactions-panel',\n templateUrl: './interactions.component.html',\n styleUrls: ['./interactions.component.scss'],\n standalone: false,\n})\nexport class InteractionsPanelComponent implements OnInit, OnDestroy {\n @Input() node: ComponentNode | null = null;\n\n public triggerOptions = TRIGGER_OPTIONS;\n public actionTypeOptions = ACTION_TYPE_OPTIONS;\n public easingOptions = EASING_OPTIONS;\n public interactions: IoxInteraction[] = [];\n\n /** All canvas nodes available as animation targets. */\n public nodeOptions: { label: string; value: string }[] = [];\n\n /** State for the \"add interaction\" form */\n public isAdding = false;\n public newTrigger: InteractionTrigger = 'pageLoad';\n public newActionType: InteractionActionType = 'fadeIn';\n public newTarget = 'self';\n public newDuration = 600;\n public newDelay = 0;\n public newEasing: string = 'ease-out';\n public newOnce = true;\n\n /** Expanded interaction ID for editing */\n public expandedId: string | null = null;\n\n private selectSub?: Subscription;\n\n constructor(private overlayService: OverlayService) {}\n\n ngOnInit(): void {\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.node = entry?.node ?? null;\n this.interactions = this.node?.interactions ?? [];\n this.isAdding = false;\n this.expandedId = null;\n this.refreshNodeOptions();\n });\n }\n\n refreshNodeOptions(): void {\n const opts: { label: string; value: string }[] = [{ label: 'Self', value: 'self' }];\n for (const [node] of this.overlayService.getAllNodeEntries()) {\n if (!node.id || !node.label || node === this.node) continue;\n opts.push({ label: node.label, value: node.id });\n }\n this.nodeOptions = opts;\n }\n\n getTargetLabel(value: string): string {\n return this.nodeOptions.find(o => o.value === value)?.label ?? value;\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n getTriggerLabel(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.label ?? trigger;\n }\n\n getTriggerIcon(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.icon ?? 'ph-thin ph-lightning';\n }\n\n getActionLabel(type: InteractionActionType): string {\n return this.actionTypeOptions.find(a => a.value === type)?.label ?? type;\n }\n\n getActionsSummary(interaction: IoxInteraction): string {\n return interaction.actions.map(a => this.getActionLabel(a.type)).join(', ');\n }\n\n toggleExpand(id: string): void {\n this.expandedId = this.expandedId === id ? null : id;\n }\n\n // ── Add interaction ──────────────────────────────────────\n\n startAdd(): void {\n this.isAdding = true;\n this.newTrigger = 'pageLoad';\n this.newActionType = 'fadeIn';\n this.newTarget = 'self';\n this.newDuration = 600;\n this.newDelay = 0;\n this.newEasing = 'ease-out';\n this.newOnce = true;\n this.refreshNodeOptions();\n }\n\n cancelAdd(): void {\n this.isAdding = false;\n }\n\n confirmAdd(): void {\n if (!this.node) return;\n\n const action: InteractionAction = {\n type: this.newActionType,\n target: this.newTarget,\n duration: this.newDuration,\n delay: this.newDelay,\n easing: this.newEasing as InteractionAction['easing'],\n once: this.newOnce,\n };\n\n const interaction: IoxInteraction = {\n id: generateNodeId(),\n trigger: this.newTrigger,\n actions: [action],\n };\n\n if (!this.node.interactions) {\n this.node.interactions = [];\n }\n this.node.interactions.push(interaction);\n this.interactions = this.node.interactions;\n this.isAdding = false;\n }\n\n // ── Remove interaction ───────────────────────────────────\n\n removeInteraction(id: string): void {\n if (!this.node?.interactions) return;\n this.node.interactions = this.node.interactions.filter(i => i.id !== id);\n this.interactions = this.node.interactions;\n if (this.expandedId === id) {\n this.expandedId = null;\n }\n }\n\n // ── Add action to existing interaction ───────────────────\n\n addAction(interaction: IoxInteraction): void {\n interaction.actions.push({\n type: 'fadeIn',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n });\n }\n\n removeAction(interaction: IoxInteraction, index: number): void {\n interaction.actions.splice(index, 1);\n // Remove the interaction if it has no actions left\n if (interaction.actions.length === 0) {\n this.removeInteraction(interaction.id);\n }\n }\n\n // ── Toggle (reverse actions) ─────────────────────────────\n\n hasToggle(interaction: IoxInteraction): boolean {\n return !!interaction.reverseActions?.length;\n }\n\n enableToggle(interaction: IoxInteraction): void {\n // Auto-populate reverse actions as the logical inverse of primary actions.\n interaction.reverseActions = interaction.actions.map(a => ({\n ...a,\n type: (INVERSE_ACTION[a.type] ?? a.type) as InteractionActionType,\n }));\n }\n\n disableToggle(interaction: IoxInteraction): void {\n interaction.reverseActions = undefined;\n }\n\n addReverseAction(interaction: IoxInteraction): void {\n if (!interaction.reverseActions) interaction.reverseActions = [];\n interaction.reverseActions.push({\n type: 'fadeOut',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: false,\n });\n }\n\n removeReverseAction(interaction: IoxInteraction, index: number): void {\n if (!interaction.reverseActions) return;\n interaction.reverseActions.splice(index, 1);\n if (interaction.reverseActions.length === 0) {\n interaction.reverseActions = undefined;\n }\n }\n}\n","<div class=\"interactions-panel\">\n <!-- No element selected -->\n <div *ngIf=\"!node\" class=\"section-empty\">\n Select an element to manage interactions\n </div>\n\n <ng-container *ngIf=\"node\">\n <!-- Interaction cards -->\n <div *ngFor=\"let ix of interactions\" class=\"ix-card\" [class.is-expanded]=\"expandedId === ix.id\">\n <!-- Summary row -->\n <div class=\"ix-card-header\" (click)=\"toggleExpand(ix.id)\">\n <i [class]=\"getTriggerIcon(ix.trigger)\" class=\"ix-trigger-icon\"></i>\n <div class=\"ix-card-summary\">\n <span class=\"ix-trigger-label\">{{ getTriggerLabel(ix.trigger) }}</span>\n <span class=\"ix-arrow\">→</span>\n <span class=\"ix-action-label\">{{ getActionsSummary(ix) }}</span>\n </div>\n <button class=\"ix-remove-btn\" title=\"Remove\" (click)=\"removeInteraction(ix.id); $event.stopPropagation()\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <!-- Expanded detail -->\n <div *ngIf=\"expandedId === ix.id\" class=\"ix-card-body\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"ix.trigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n\n <div *ngFor=\"let action of ix.actions; let ai = index\" class=\"ix-action-row\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">\n Target {{ ai + 1 }}\n <span *ngIf=\"ix.actions.length > 1\" class=\"ix-action-target-badge\">\n → {{ getTargetLabel(action.target) }}\n </span>\n </span>\n <button *ngIf=\"ix.actions.length > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove action\"\n (click)=\"removeAction(ix, ai)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"action.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"action.target\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n <span *ngIf=\"nodeOptions.length === 1\" class=\"ix-target-hint\">\n Name elements in the Layers panel to target them\n </span>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"action.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"action.once\">\n Play once\n </label>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add target\n </button>\n\n <!-- Toggle section (click only) -->\n <ng-container *ngIf=\"ix.trigger === 'click'\">\n <div class=\"ix-toggle-header\">\n <span class=\"ix-toggle-label\">\n <i class=\"ph-thin ph-arrows-clockwise\"></i> 2nd click\n </span>\n <label class=\"ix-toggle-switch\">\n <input type=\"checkbox\"\n [checked]=\"hasToggle(ix)\"\n (change)=\"hasToggle(ix) ? disableToggle(ix) : enableToggle(ix)\">\n <span class=\"ix-toggle-track\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"hasToggle(ix)\">\n <div *ngFor=\"let ra of ix.reverseActions; let ri = index\" class=\"ix-action-row ix-action-row--reverse\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">\n Target {{ ri + 1 }}\n <span *ngIf=\"(ix.reverseActions?.length ?? 0) > 1\" class=\"ix-action-target-badge\">\n → {{ getTargetLabel(ra.target) }}\n </span>\n </span>\n <button *ngIf=\"(ix.reverseActions?.length ?? 0) > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove\"\n (click)=\"removeReverseAction(ix, ri)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"ra.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"ra.target\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"ra.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"ra.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"ra.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addReverseAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add target\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Add interaction form -->\n <div *ngIf=\"isAdding\" class=\"ix-add-form\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"newTrigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Action</label>\n <select [(ngModel)]=\"newActionType\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Target</label>\n <p-select\n [(ngModel)]=\"newTarget\"\n [options]=\"nodeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [filter]=\"true\"\n filterPlaceholder=\"Search…\"\n styleClass=\"ix-target-select\"\n appendTo=\"body\">\n </p-select>\n <span *ngIf=\"nodeOptions.length === 1\" class=\"ix-target-hint\">\n Name elements in the Layers panel to target them\n </span>\n </div>\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDuration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDelay\" min=\"0\" step=\"50\">\n </div>\n </div>\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"newEasing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"newOnce\">\n Play once\n </label>\n </div>\n <div class=\"ix-form-actions\">\n <button class=\"ix-btn ix-btn--secondary\" (click)=\"cancelAdd()\">Cancel</button>\n <button class=\"ix-btn ix-btn--primary\" (click)=\"confirmAdd()\">Add</button>\n </div>\n </div>\n\n <!-- Add button -->\n <button *ngIf=\"!isAdding\" class=\"ix-add-btn\" (click)=\"startAdd()\">\n <i class=\"ph-thin ph-plus\"></i> Add interaction\n </button>\n </ng-container>\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface HistoryEntry {\n layout: ComponentNode[];\n timestamp: number;\n}\n\nconst MAX_HISTORY = 50;\n\n/**\n * BuilderHistoryService — snapshot-based undo/redo for the page builder.\n *\n * Snapshots are JSON deep-clones of the full layout array.\n * Session-only — not persisted to the backend.\n * Scoped to PageUiComponent.providers[] — one history stack per builder instance.\n */\n@Injectable()\nexport class BuilderHistoryService {\n private _past: HistoryEntry[] = [];\n private _future: HistoryEntry[] = [];\n\n get canUndo(): boolean { return this._past.length > 1; }\n get canRedo(): boolean { return this._future.length > 0; }\n\n push(layout: ComponentNode[]): void {\n this._past.push({ layout: JSON.parse(JSON.stringify(layout)), timestamp: Date.now() });\n if (this._past.length > MAX_HISTORY) {\n this._past.shift();\n }\n this._future = [];\n }\n\n undo(): ComponentNode[] | null {\n if (!this.canUndo) return null;\n const current = this._past.pop()!;\n this._future.unshift(current);\n return JSON.parse(JSON.stringify(this._past[this._past.length - 1].layout));\n }\n\n redo(): ComponentNode[] | null {\n if (!this.canRedo) return null;\n const next = this._future.shift()!;\n this._past.push(next);\n return JSON.parse(JSON.stringify(next.layout));\n }\n\n clear(): void {\n this._past = [];\n this._future = [];\n }\n}\n","import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IoxPageModule } from '@vectoriox/iox-ui';\n\nimport { BuilderComponent } from './builder.component';\nimport { SectionComponent } from './components/section/section.component';\nimport { BuilderContainerComponent } from './components/container/container.component';\nimport { BuilderLinkedContainerComponent } from './components/linked-container/linked-container.component';\nimport { BuilderRepeaterComponent } from './components/repeater/repeater.component';\nimport { BuilderButtonBlockComponent } from './components/button-block/button-block.component';\nimport { OverlayComponent } from './overlay/overlay.component';\nimport { ToolbarComponent } from './toolbar/toolbar.component';\nimport { RenderDirective } from './render/render.directive';\nimport { IoxDraggableDirective } from './directives/iox-draggable.directive';\nimport { IoxDropzoneDirective } from './directives/iox-dropzone.directive';\nimport { PanelComponent } from './panels/panel/panel.component';\nimport { PanelChildComponent } from './panels/panel/panel-child.component';\nimport { LayerTreeComponent } from './panels/layer-tree/layer-tree.component';\nimport { InteractionsPanelComponent } from './panels/interactions/interactions.component';\n\nimport { DragEngineService } from './services/drag-engine.service';\nimport { OverlayService } from './overlay/overlay.service';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { StyleRegistryService } from './services/style-registry.service';\nimport { PanelEventService } from './panels/panel-event.service';\nimport { PresetRegistryService } from './services/preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { BuilderHistoryService } from './services/builder-history.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\n\n// StylePanelComponent and PagePanelComponent use <dynamic-input> which must be\n// provided by the consuming app (InputsModule). Declare them there, not here.\nconst DECLARATIONS = [\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n];\n\n@NgModule({\n declarations: DECLARATIONS,\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n ],\n providers: [\n DragEngineService,\n OverlayService,\n ComponentRegistryService,\n DataSourceRegistryService,\n InteractionEngineService,\n ViewportService,\n StyleRegistryService,\n PanelEventService,\n PresetRegistryService,\n SymbolRegistryService,\n InteractionPresetRegistryService,\n BuilderHistoryService,\n BuilderClipboardService,\n ],\n exports: [\n // Angular/PrimeNG modules re-exported so consumers can use them\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n // Builder declarations\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderButtonComponentConfig extends ComponentConfig {\n constructor() {\n super('Button', 'app-builder-button', 'ph-thin ph-cursor-click', 'Basic');\n this.inputs = {\n label: 'text',\n link: 'text',\n variant: 'select'\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click me'),\n new TraitConfig('link', 'Link', TraitInputType.Text, undefined, '#'),\n new TraitConfig('variant', 'Variant', TraitInputType.Select, ['primary', 'outlined', 'text'], 'primary'),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class ButtonBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('ButtonBlock', 'app-builder-button-block', 'ph-thin ph-cursor-click', 'Basic');\n this.children = [];\n this.inputs = {\n tag: 'select',\n href: 'text',\n target: 'select',\n type: 'select',\n };\n this.traits = [\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['button', 'a'], 'button'),\n new TraitConfig('href', 'URL', TraitInputType.Text, undefined, '', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('target', 'Target', TraitInputType.Select, ['_self', '_blank'], '_self', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('type', 'Type', TraitInputType.Select, ['button', 'submit', 'reset'], 'button', false, { trait: 'tag', values: 'button' }),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n width: 'auto',\n height: 'auto',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: 'pointer',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class CardComponentConfig extends ComponentConfig {\n constructor() {\n super('Card', 'app-card', 'ph-thin ph-cards', 'Content');\n this.inputs = {\n title: 'text',\n image: 'image',\n description: 'text'\n };\n this.traits = [\n new TraitConfig('title', 'Title', TraitInputType.Text, undefined, 'Default Title'),\n new TraitConfig('image', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://via.placeholder.com/150'),\n new TraitConfig('description', 'Description', TraitInputType.Text, undefined, 'This is a default card description.')\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\n padding: '16px 16px 16px 16px',\n borderWidth: '1px 1px 1px 1px',\n borderStyle: 'solid',\n borderColor: '#cccccc',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n });\n }\n}","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderContainerComponentConfig extends ComponentConfig {\n constructor() {\n super('Container', 'app-builder-container', 'ph-thin ph-square', 'Layout');\n this.children = [];\n this.traits = [\n new TraitConfig('htmlTag', 'HTML Tag', TraitInputType.Select,\n ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'],\n 'div'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderDividerComponentConfig extends ComponentConfig {\n constructor() {\n super('Divider', 'app-builder-divider', 'ph-thin ph-minus', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderHeadingComponentConfig extends ComponentConfig {\n constructor() {\n super('Heading', 'app-builder-heading', 'ph-thin ph-text-h', 'Basic');\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Heading'),\n new TraitConfig('level', 'Level', TraitInputType.Select,\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], 'h2'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderIconComponentConfig extends ComponentConfig {\n constructor() {\n super('Icon', 'app-builder-icon', 'ph-thin ph-star', 'Basic');\n this.traits = [\n new TraitConfig('iconClass', 'Icon', TraitInputType.Icon, undefined, 'ph-thin ph-star'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '24px',\n color: '#374151',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderImageComponentConfig extends ComponentConfig {\n constructor() {\n super('Image', 'app-builder-image', 'ph-thin ph-image', 'Basic');\n this.inputs = {\n src: 'text',\n alt: 'text',\n objectFit: 'select'\n };\n this.traits = [\n new TraitConfig('src', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://placehold.co/600x400?text=Image'),\n new TraitConfig('alt', 'Alt Text', TraitInputType.Text, undefined, 'Image'),\n new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select, ['cover', 'contain', 'fill', 'none'], 'cover'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkComponentConfig extends ComponentConfig {\n constructor() {\n super('Link', 'app-builder-link', 'ph-thin ph-link', 'Basic');\n this.inputs = {\n label: 'text',\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click here'),\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkedContainerConfig extends ComponentConfig {\n constructor() {\n super('LinkedContainer', 'app-builder-linked-container', 'ph-thin ph-link-simple', 'Layout');\n this.children = [];\n this.inputs = {\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n buildFullStyleTraits,\n} from '../../models/component.model';\n\nexport class BuilderListItemComponentConfig extends ComponentConfig {\n constructor() {\n super('ListItem', 'app-builder-container', 'ph-thin ph-list-dashes', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['li'], 'li'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.children = [];\n this.applyStyleDefaults({\n width: '100%',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class TextBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('Text', 'app-text-block', 'ph-thin ph-text-aa', 'Basic');\n this.inputs = {\n content: 'text',\n tag: 'select',\n };\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Enter text here'),\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['p', 'span'], 'p'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n display: 'block',\n width: '100%',\n height: 'auto',\n minHeight: '20px',\n padding: '10px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentNode,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n ListGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\nimport { BuilderListItemComponentConfig } from '../list-item/list-item.config';\nimport { TextBlockComponentConfig } from '../text/text.config';\n\nexport class BuilderListComponentConfig extends ComponentConfig {\n constructor() {\n super('List', 'app-builder-container', 'ph-thin ph-list', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['ul', 'ol'], 'ul'),\n new TraitConfig('start', 'Start At', TraitInputType.Number, undefined, 1, false,\n { trait: 'htmlTag', values: 'ol' }),\n new TraitConfig('reversed', 'Reversed', TraitInputType.Checkbox, undefined, false, false,\n { trait: 'htmlTag', values: 'ol' }),\n ];\n this.styleTraits = [\n new ListGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.children = [\n this.makeListItem(),\n this.makeListItem(),\n this.makeListItem(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n display: 'block',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 24px',\n });\n }\n\n private makeListItem(): ComponentNode {\n const item = new BuilderListItemComponentConfig();\n const textCfg = new TextBlockComponentConfig();\n const contentTrait = textCfg.traits.find(t => t.name === 'content');\n if (contentTrait) contentTrait.default = 'List item';\n item.children = [textCfg];\n return item;\n }\n}\n","import { ComponentConfig, ComponentTrait, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class RepeaterComponentConfig extends ComponentConfig {\n constructor() {\n super('Repeater', 'app-builder-repeater', 'ph-thin ph-repeat', 'Data');\n this.children = [];\n this.traits = [\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n {\n name: 'limit',\n label: 'Limit',\n type: TraitInputType.Number,\n default: 10,\n } as ComponentTrait,\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class SectionComponentConfig extends ComponentConfig {\n constructor() {\n super('Section', 'app-section', 'ph-thin ph-rows', 'Layout');\n this.children = [];\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderSpacerComponentConfig extends ComponentConfig {\n constructor() {\n super('Spacer', 'app-builder-spacer', 'ph-thin ph-arrows-vertical', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: '100%',\n height: '40px',\n });\n }\n}\n","/*\n * Public API Surface of @vectoriox/iox-builder\n */\n\nexport * from './lib/iox-builder.module';\nexport * from './lib/builder.component';\nexport * from './lib/render/render.directive';\nexport { StyleCategory, IoxBinding, DsFilterByRouteParam, DsFilterByQueryParam, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, INVERSE_ACTION, ElementState, SUPPORTED_STATES, INTERACTION_STATES, STRUCTURAL_STATES, ComponentNode, TraitInputType, TraitOptionMap, TraitSelectOption, QuadSizeSegment, TraitShowCondition, ComponentTrait, StyleTrait, StyleTraitGroup, generateNodeId, ComponentConfig, TraitConfig, StyleTraitConfig, GroupStyleConfig, UNITS_ALL, UNITS_NO_VW, UNITS_FIXED, UNITS_DEG, resolveTraitControllerType, resolveTraitOptions, StylePreset, buildPresetStyleTraits, buildFullStyleTraits, ListGroupStyleConfig, IoxSymbol, InteractionPreset } from './lib/models/component.model';\nexport * from './lib/services/symbol-registry.service';\nexport * from './lib/services/interaction-preset-registry.service';\nexport * from './lib/services/builder-history.service';\nexport * from './lib/services/builder-clipboard.service';\nexport * from './lib/panels/panel.model';\nexport * from './lib/panels/panel-event.service';\nexport * from './lib/tokens/builder.tokens';\nexport * from './lib/services/component-registry.service';\nexport * from './lib/services/data-source-registry.service';\nexport * from './lib/services/drag-engine.service';\nexport * from './lib/services/style-registry.service';\nexport * from './lib/services/viewport.service';\nexport * from './lib/services/preset-registry.service';\nexport * from './lib/overlay/overlay.service';\nexport * from './lib/overlay/overlay.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/directives/iox-draggable.directive';\nexport * from './lib/directives/iox-dropzone.directive';\nexport * from './lib/panels/panel/panel.component';\nexport * from './lib/panels/panel/panel-child.component';\nexport * from './lib/panels/layer-tree/layer-tree.component';\nexport * from './lib/panels/interactions/interactions.component';\nexport * from './lib/services/interaction-engine.service';\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from './lib/style-compose';\n\n// Component classes (builder variants with drag/drop)\nexport * from './lib/components/section/section.component';\nexport * from './lib/components/container/container.component';\nexport * from './lib/components/linked-container/linked-container.component';\nexport * from './lib/components/repeater/repeater.component';\nexport * from './lib/components/button-block/button-block.component';\n\n// Component configs\nexport * from './lib/components/button/button.config';\nexport * from './lib/components/button-block/button-block.config';\nexport * from './lib/components/card/card.config';\nexport * from './lib/components/container/container.config';\nexport * from './lib/components/divider/divider.config';\nexport * from './lib/components/heading/heading.config';\nexport * from './lib/components/icon/icon.config';\nexport * from './lib/components/image/image.config';\nexport * from './lib/components/link/link.config';\nexport * from './lib/components/linked-container/linked-container.config';\nexport * from './lib/components/list/list.config';\nexport * from './lib/components/list-item/list-item.config';\nexport * from './lib/components/repeater/repeater.config';\nexport * from './lib/components/section/section.config';\nexport * from './lib/components/spacer/spacer.config';\nexport * from './lib/components/text/text.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EASING_OPTIONS","i1.ComponentRegistryService","i1.OverlayService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i1.DragEngineService","i2.ViewportService","i3.PresetRegistryService","i4.SymbolRegistryService","i5.InteractionPresetRegistryService","i6.InteractionEngineService","i7.BuilderClipboardService","i8.StyleRegistryService","i9.PanelEventService","i10","i1","i2","i3","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8.InteractionPresetRegistryService","i9.BuilderClipboardService","i11","i14.RenderDirective","i15.IoxDraggableDirective","i16.OverlayComponent","i17.ToolbarComponent","i18.LayerTreeComponent","i3.RenderDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i3.DataSourceRegistryService","i4.PanelEventService","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i1.PanelEventService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;IAGY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;AAChC,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,aAA8B;AAC9B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;AAClC,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;;AAE9B,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;;AAE1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;;AAEhC,IAAA,eAAA,CAAA,yBAAA,CAAA,GAAA,uBAAiD;;AAEjD,IAAA,eAAA,CAAA,6BAAA,CAAA,GAAA,2BAAyD;AAC7D,CAAC,EApBW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;MA4Bd,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAc;AASxD,IAAA;AAPG,IAAA,SAAS,CAAC,IAAsC,EAAA;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;IAChE;IAEA,IAAI,CAAC,IAAqB,EAAE,IAAU,EAAA;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C;+GATS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;IC9BW;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EALW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAkBf,MAAM,uBAAuB,GAA0E;IAC1G,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAQ,WAAW,EAAE,cAAc,EAAE;IACxE,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAG,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAM,WAAW,EAAE,0BAA0B,EAAE;IACrF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,6BAA6B,EAAE;IACxF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,eAAe,EAAE;IAC1E,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,yBAAyB,EAAE;;AAGjF,MAAMA,gBAAc,GAAuC;AAC9D,IAAA,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAE;AACxC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAO,KAAK,EAAE,SAAS,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,UAAU,EAAM,KAAK,EAAE,UAAU,EAAE;AAC5C,IAAA,EAAE,KAAK,EAAE,aAAa,EAAG,KAAK,EAAE,aAAa,EAAE;AAC/C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,QAAQ,EAAE;AAC1C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,mCAAmC,EAAE;;SAoCzD,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA,KAAK,EAAE;AACH,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,cAAc,EAAE,OAAO;AACvB,YAAA,kBAAkB,EAAE,mDAAmD;AACvE,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA;AACD,QAAA,cAAc,EAAE;AACZ,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA;KACJ;AACL;IAEY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B;AAC7B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,0BAAmD;AACnD,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAjBW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAmBb;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAC3B,CAAC,EAHW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAKV;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAMX;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAef,MAAM,cAAc,GAAmB;IAC1C,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACpG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACxG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;;AAQpG,MAAM,YAAY,GAAiB;AACtC,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;AAC7B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;;AAQ3B,MAAM,oBAAoB,GAAwB;AACrD,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;;;MCzKrB,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,UAAU,GAAwE,EAAE;AAsB/F,IAAA;AApBG,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,IAAI;IACnD;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;QAChD,OAAO,UAAU,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI;IAC/C;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAE,SAAoB,EAAE,MAAW,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;IACvD;IAEA,MAAM,GAAA;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;+GAtBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MC+BY,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC7D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA0B;AAE5C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QAE1C,IAAA,CAAA,gBAAgB,GAAuB,IAAI;QAC3C,IAAA,CAAA,sBAAsB,GAAuB,IAAI;;AAGlD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAe;;AAG7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAA4B;AA0GhE,IAAA;IAxGG,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAA;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;IACrC;IAEA,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA,IAAA,kBAAkB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QAChC,IAAI,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE;IAC9C;IAEA,kBAAkB,GAAA;QACd,OAAO,IAAI,CAAC,sBAAsB;IACtC;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAC9B,QAAA,OAAQ,IAAI,CAAC,iBAAiC,IAAI,IAAI;IAC1D;;AAGA,IAAA,YAAY,CAAC,IAAmB,EAAE,OAAoB,EAAE,YAA+B,EAAA;AACnF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACrD;AAEA,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;;IAGA,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACjC;;AAGA,IAAA,iBAAiB,CAAC,OAAoB,EAAA;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YACxB;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,QAAQ,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAA;QACnE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,OAAO,KAAK,OAAO;YAAE;QACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACnG;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEA,SAAS,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAE,IAAoB,EAAE,YAAgC,EAAA;AAC5H,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACjF;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,aAAa,GAAA;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C;;AAGA,IAAA,mBAAmB,CAAC,OAAoB,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACpD;AAEA,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;AAGzC,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,aAA6B,IAAI,IAAI;QAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC3C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAS,KAAI,EAAG,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO;AACH,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAO,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAO,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAO,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;AAClI,YAAA,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAM,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAM,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAM,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AACnI,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE;SAC1I;IACL;+GAvHS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACZD,SAAS,aAAa,CAAC,IAAmB,EAAA;AACtC,IAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,KAAK;AAChB;AAEA,SAAS,aAAa,CAAC,IAAmB,EAAA;AACtC,IAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,OAAO,GAAG,SAAS;IACxB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC;AAChD;MAGa,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,QAAkC,EAAA;QAAlC,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QAgEpB,IAAA,CAAA,GAAG,GAAa,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAQ,IAAI,GAAG,EAAuB;AAC3C,QAAA,IAAA,CAAA,OAAO,GAAM,IAAI,GAAG,EAAiB;AACrC,QAAA,IAAA,CAAA,MAAM,GAAO,IAAI,GAAG,EAA6B;AACjD,QAAA,IAAA,CAAA,SAAS,GAAI,IAAI,GAAG,EAAqC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAsB;AAEnC,QAAA,IAAA,CAAA,IAAI,GAAY,IAAI,eAAe,CAAW,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAU,KAAK,CAAC;AACnD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAgB,IAAI,CAAC;;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAiB;;QAIpD,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,QAAQ,GAAuB,IAAI;QACnC,IAAA,CAAA,SAAS,GAAuB,IAAI;AAE5C;;;;AAIG;QACK,IAAA,CAAA,QAAQ,GAAuB,IAAI;;QAEnC,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,YAAY,GAAG,CAAC;;QAIhB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,aAAa,GAAG,CAAC;;QAIjB,IAAA,CAAA,aAAa,GAAkB,IAAI;;QAGnC,IAAA,CAAA,cAAc,GAAuB,IAAI;;QAIzC,IAAA,CAAA,UAAU,GAAuB,IAAI;QACrC,IAAA,CAAA,qBAAqB,GAAkB,IAAI;QAC3C,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC;QACpB,IAAA,CAAA,aAAa,GAAG,CAAC;;AAGjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAe;;QAIjC,IAAA,CAAA,MAAM,GAAG,CAAC;;AAOV,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAmB;;QAYtC,IAAA,CAAA,cAAc,GAAG,EAAE;QAC5B,IAAA,CAAA,oBAAoB,GAAkB,IAAI;IAzIO;;IAIzD,UAAU,CACN,QAAyB,EACzB,KAAmB,EACnB,UAAkB,EAClB,GAAsB,EACtB,SAAsB,EAAA;AAEtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAc,CAAC;YACjE,IAAI,MAAM,EAAE;gBACR,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE;YACjC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;YAC3E,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAS,CAAC,EAAE,aAAa,EAAE;gBACnD;gBACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;gBACrC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC;iBAAO;;;;;AAKH,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;gBAClC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;QAEA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;AAC5E,YAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;YACrC,GAAG,CAAC,aAAa,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;QACA,SAAS,IAAI;IACjB;;IA4DA,QAAQ,CAAC,KAAa,EAAA,EAAU,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAM7C,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvE;IACJ;;;;AAWQ,IAAA,MAAM,CAAC,EAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IAC5D;;;;IAMA,gBAAgB,CACZ,EAAU,EACV,EAAe,EACf,IAAW,EACX,GAAsB,EACtB,MAAiC,EACjC,QAAqB,EAAA;AAErB,QAAA,IAAI,CAAC,EAAE;YAAE;;AAGT,QAAA,EAAE,CAAC,EAAE,GAAG,EAAE;QAEV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAC9B,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAEhD,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAClB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,OAAO,EAAE,SAAS;AACrB,SAAA,CAAC;IACN;IAEA,kBAAkB,CAAC,EAAU,EAAE,EAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;;;;IAMA,iBAAiB,CAAC,EAAe,EAAE,UAA6B,EAAA;AAC5D,QAAA,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAEzC,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;;;AAGnB,YAAA,UAAU,EAAE,0BAA0B;AACtC,YAAA,SAAS,EAAE;AACP,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;gBAC1D,IAAI,EAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzC,GAAG,EAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,aAAA;AACD,YAAA,SAAS,EAAE,EAAE;AAChB,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,EAAe,EAAA;AAC/B,QAAA,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC;AACxC,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA,EAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,IAAA,MAAM,CAAC,EAAU,EAAA,EAAmC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,IAAA,cAAc,CAAC,EAAU,EAAA,EAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjE,iBAAiB,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,OAAO,CAAC;IACZ;;;;AAMQ,IAAA,YAAY,CAAC,KAAU,EAAE,EAAe,EAAE,UAA6B,EAAA;AAC3E,QAAA,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAE3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;AAoBnC,YAAA,MAAM,MAAM,GAAI,EAAE,CAAC,iBAAiC,IAAI,EAAE;AAC1D,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;;;;;AAM7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;;;;;AAMzB,YAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAgB;;;;;;AAMnD,YAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC;AACjD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACjD,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG;gBAClB,gBAAgB;gBAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;gBACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;AACnB,gBAAA,CAAA,MAAA,EAAS,QAAQ,CAAA,EAAA,CAAI;AACrB,gBAAA,CAAA,OAAA,EAAU,SAAS,CAAA,EAAA,CAAI;AACvB,gBAAA,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,CAAG;gBAC3B,2BAA2B;gBAC3B,qBAAqB;gBACrB,iBAAiB;gBACjB,cAAc;gBACd,UAAU;AACb,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACX,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGrB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC9C;aAAO;;AAEH,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC;QAEA,IAAI,CAAC,cAAc,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAU,EAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;;AAGnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;YACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;QAC1E;QAEA,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAEQ,IAAA,UAAU,CAAC,KAAU,EAAA;;AAEzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACtD;AACA,QAAA,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB;AAC9C,aAAA,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;;QAGjE,IAAI,CAAC,cAAc,EAAE;;QAGrB,IAAI,CAAC,gBAAgB,EAAE;QACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;;AAGxD,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;AACvB,YAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QAErB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAC/F,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD;;;;IAMQ,WAAW,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC7D;;;;AAMQ,IAAA,mBAAmB,CAAC,OAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;QAChF,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,WAAW;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,wCAAwC;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;IACzB;;;;IAMQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;QAE7B,IAAI,MAAM,GAAkB,IAAI;QAChC,IAAI,QAAQ,GAAG,QAAQ;AAEvB,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,EAAE;gBAAE;;;AAGT,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAAE;;;AAGlC,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM;gBAAE;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAC1E,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACrC,gBAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;oBAAE,QAAQ,GAAG,IAAI;oBAAE,MAAM,GAAG,EAAE;gBAAE;YACzD;QACJ;;;;;;;;;;;AAYA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACpD,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBACjG,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM;gBAC7E,IAAI,MAAM,EAAE;oBAAE,MAAM,GAAG,gBAAgB;gBAAE;qBACpC;AAAE,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAAE;YAC7C;iBAAO;AACH,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YACpC;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC1B,YAAA,MAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,EAAE;AACJ,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;gBAC9E,MAAM,QAAQ,GACV,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc;oBACpC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;;;AAG3C,gBAAA,MAAM,oBAAoB,GACtB,IAAI,CAAC,aAAa,KAAK,MAAM;oBAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC1D,gBAAA,IAAI,QAAQ,IAAI,oBAAoB,EAAE;AAClC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM;oBAClC,MAAM,GAAG,gBAAgB;gBAC7B;YACJ;QACJ;AAEA,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,gBAAA,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1C;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;YAC3B,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;YACvD;;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG7B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;IACJ;;;;;;AAQA;AAC6E;IAC7E,mBAAmB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QACvB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;IAC/C;AAEQ,IAAA,kBAAkB,CAAC,QAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,gBAAgB,EAAE;YAC5C,IAAI,CAAC,oBAAoB,EAAE;YAC3B;QACJ;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE;YAAE,IAAI,CAAC,oBAAoB,EAAE;YAAE;QAAQ;AAEhD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,yBAAyB;YACzD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD;AAEA,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG;YAChC,gBAAgB;YAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;YACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;YACnB,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI;YACvB,CAAA,OAAA,EAAU,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI;YACzB,qBAAqB;YACrB,cAAc;YACd,uBAAuB;AAC1B,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;AACrB,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa;QAC7B,OAAO,MAAM,EAAE;AACX,YAAA,IAAI,MAAM,CAAC,EAAE,KAAK,gBAAgB;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC3D,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa;QACjC;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;AAIG;IACK,qBAAqB,CAAC,OAAsB,EAAE,QAAgB,EAAA;AAClE,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrC;;;;IAMQ,gBAAgB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,IAAI,QAAQ,KAAK,IAAI,CAAC,qBAAqB,EAAE;AACzE,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC1C;IACJ;IAEQ,kBAAkB,CAAC,WAAmB,EAAE,KAAa,EAAA;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,KAAK,GACP,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,KAAK,WAAW;QAEnE,IAAI,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;AAEA,QAAA,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU;QACpC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,sBAAsB;YAElD,IAAI,KAAK,EAAE;;;;;AAKP,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2CAA2C;wBAC3C,oEAAoE;AACpE,wBAAA,gEAAgE;YACxE;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2DAA2D;wBAC3D,6CAA6C;AAC7C,wBAAA,iEAAiE;YACzE;QACJ;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,WAAW;AAExC,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;;QAGD,IAAI,WAAW,GAAiC,IAAI;QACpD,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,WAAW,GAAG,IAAI,GAAG,EAAoB;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3C,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;oBAC3B,WAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC1D;AACJ,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC1B,YAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;aAAO;AACH,YAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC3C,MAAM,MAAM,GAAG,WAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE;gBAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;gBACnC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAI,KAAK,CAAC,GAAG;AAClC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;oBAAE;gBAE9C,MAAM,EAAE,GAAG,KAAoB;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;;AAErB,gBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;gBAC5B,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,aAAa,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,GAAA,CAAK;gBAClD,qBAAqB,CAAC,MAAK;AACvB,oBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB;AAC5C,oBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,MAAK;gBAC5C,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE;gBACtB,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAI,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;qBAAO;oBACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC7B;;;;AAMA,IAAA,eAAe,CAAC,WAAmB,EAAA;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC;AAExB,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,YAAY,GACd,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAChD,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;QACJ;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;+GA3tBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;AC3BD;;;;;;;AAOG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAiBnD,IAAA;AAfG,IAAA,cAAc,CAAC,EAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB;IAEA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IAC1B;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC;IACzD;IAEA,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E;+GAnBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACED,MAAM,WAAW,GAAG,sBAAsB;MAG7B,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,KAAK,GAAkB,IAAI,CAAC,eAAe,EAAE;QAE7C,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAoGnD,IAAA;IAlGG,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IAC3B;AAEA,IAAA,SAAS,CAAC,MAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACvE;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IAC7D;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,OAAO;QACvC,IAAI,MAAM,IAAI,CAAC;YAAE;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEA;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,cAAsB,EAAE,eAAuB,EAAE,OAAO,GAAG,EAAE,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,cAAc,GAAG,OAAO;AACxC,QAAA,MAAM,OAAO,GAAG,eAAe,GAAG,OAAO;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC;YAAE;QAClC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QACzC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,OAAe,EAAE,OAAe,EAAE,UAAmB,EAAA;QAChE,OAAO;AACH,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AACjD,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;SACnD;IACL;AAEQ,IAAA,MAAM,CAAC,OAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE;IACxB;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI;AACA,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE;QAAE,MAAM,EAAC;IACb;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAkB;YAC5B,MAAM,EAAE,UAAU,CAAC,OAAO;AAC1B,YAAA,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;AAC9B,YAAA,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;AAChC,YAAA,KAAK,EAAE,IAAI;SACd;AACD,QAAA,IAAI;YACA,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7C,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,QAAQ;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;kBACtE,KAAK,CAAC;AACR,kBAAE,QAAQ,CAAC,MAAM;YACrB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;YAC/E,OAAO;gBACH,MAAM;gBACN,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;gBACtF,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3F,gBAAA,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;aACpG;QACL;AAAE,QAAA,MAAM;AACJ,YAAA,OAAO,QAAQ;QACnB;IACJ;+GAvGS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACFD;;;;;;AAMG;MAEU,wBAAwB,CAAA;AA2BjC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;AA1B1B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwC;;AAG1D,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAe;AAElD;;;AAGG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAmB;AAEjD;;;;AAIG;AACK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA+B;;QAGhD,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,CAAC;YACtC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM;AAC7E,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjB;;AAGrD,IAAA,MAAM,CAAC,IAAmB,EAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;;;AAItC,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACT,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,EAAE;AACT,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC3C;gBACA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,QAAQ,GAA0B,EAAE;AAE1C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;;;;;;AAMhC,YAAA,MAAM,YAAY,GAAG,SAAS,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO;YAClF,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;oBAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;wBAC/C,IAAI,MAAM,EAAE;AACR,4BAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;wBACtC;6BAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAClD,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AAC3D,4BAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;4BACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;wBAClD;oBACJ;gBACJ;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;AAC7D,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;IACrC;;AAGA,IAAA,MAAM,CAAC,IAAmB,EAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,KAAK,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;AAG1B,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD;QACJ;;;QAIA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;;oBAE7B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAC3C,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;wBACxD,IAAI,OAAO,EAAE;AACT,4BAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;AAClD,4BAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;gCACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;4BACtD;iCAAO;gCACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;4BAC/C;wBACJ;oBACJ;;oBAEA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC/C,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC9C,wBAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/C,wBAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzC;gBACJ;YACJ;QACJ;IACJ;;AAGA,IAAA,OAAO,CAAC,IAAmB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACrB;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;;AAEpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;;;AAKA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClD;YACJ;QACJ;AAEA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QACrC;IACJ;;AAIQ,IAAA,iBAAiB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;;;QAGnF,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,OAAO,KAAK,UAAU,IAAI,EAAE,CAAC,OAAO,KAAK,eAAe,IAAI,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,EAAE;AAC1H,YAAA,OAAO,MAAK,EAAE,CAAC;QACnB;AACA,QAAA,QAAQ,EAAE,CAAC,OAAO;AACd,YAAA,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,YAAA,KAAK,eAAe;gBAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACtD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,gBAAgB;;AAEjB,gBAAA,OAAO,MAAK,EAAE,CAAC;AACnB,YAAA;AACI,gBAAA,OAAO,MAAK,EAAE,CAAC;;IAE3B;;AAIQ,IAAA,cAAc,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAChF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC1B,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YAC5E;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;YACrC;QACJ,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;IACpC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AACrF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;QAClC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,KAAI;AAClD,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE;oBACjB,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE;;;AAGvD,oBAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAK;4BACjC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gCAAE;AACvD,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;4BACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;AACrC,wBAAA,CAAC,CAAC;wBACF;oBACJ;AACA,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;gBACrC;YACJ;AACJ,QAAA,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACtB,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;IACtC;IAEQ,aAAa,GAAA;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7D;;AAGQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;AAC7C,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa;QAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,KAAK;IAChB;;IAGQ,iBAAiB,CAAC,OAAoB,EAAE,QAAoB,EAAA;QAChE,MAAM,IAAI,GAAG,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;YACd;iBAAO;gBACH,qBAAqB,CAAC,IAAI,CAAC;YAC/B;AACJ,QAAA,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;QAC7E,MAAM,OAAO,GAAG,MAAK;AACjB,YAAA,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE;;AAE3B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK;AACvD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;AACjE,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;YAC5C;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;YACrC;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9D;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAC7E,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAK;;AAEtB,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;YACtC;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,MAAK;AACR,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AACvD,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AAC3D,QAAA,CAAC;IACL;;IAIQ,UAAU,CAAC,IAAmB,EAAE,OAA4B,EAAA;AAChE,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC;IACJ;IAEQ,aAAa,CAAC,SAAwB,EAAE,MAAyB,EAAA;AACrE,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;AACrD,YAAA,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI;QAC/B;;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE;AAC5D,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,GAAG,CAAC,OAAO;QAClD;AACA,QAAA,OAAO,IAAI;IACf;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;AAGvB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,MAAM;AACf,SAAA,CAAC;QAEF,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;;;gBAGtC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,oBAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACtE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;;;AAGzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;gBACpB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;YACvD,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;IACJ;AAEA;;;;;;;;AAQG;IACK,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;AACvB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAA2B;AACpD,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5C,OAAO,CAAC,KAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QAC9C;;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;QAChC,IAAI,OAAO,KAAK,GAAG,IAAK,OAAe,KAAK,CAAC,EAAE;YAC3C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;IACvC;AAEQ,IAAA,0BAA0B,CAAC,OAAoB,EAAA;AACnD,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;AACzC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;AAC1C,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAClD;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;QAGvB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,UAAU;AACnB,SAAA,CAAC;IACN;AAEQ,IAAA,cAAc,CAAC,MAAyB,EAAA;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE;QAC9C,IAAI,SAAS,GAAe,EAAE;AAE9B,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACT,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,QAAQ;gBACT,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,WAAW;gBACZ,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,SAAS;gBACV,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,GAAG;AAC7C,gBAAA,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,IAAA,CAAM,EAAE,CAAC;gBAC/E;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,kBAAkB;;AAEnB,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;;QAGR,OAAO;YACH,SAAS;AACT,YAAA,OAAO,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,IAAI,EAAE,UAAU;AACnB,aAAA;SACJ;IACL;+GA1bS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;AClBD;;;;;AAKG;MAEU,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA6B;AAwBzD,IAAA;AAtBG,IAAA,UAAU,CAAC,OAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAyB,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;+GAxBS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhC,gCAAgC,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACAD;;;;;;AAMG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAqB,EAAE;AAmBvC,IAAA;AAjBG,IAAA,QAAQ,CAAC,IAAmB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;IAC3D;AAEA,IAAA,UAAU,CAAC,QAAgB,EAAA;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;IAC5C;AAEA,IAAA,qBAAqB,CAAC,mBAA2B,EAAA;QAC7C,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE;IACvD;IAEA,OAAO,GAAA,EAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,WAAW,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,sBAAsB,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEtF,KAAK,GAAA,EAAW,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;+GAnBxB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACjBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA,MAAM,WAAW,GAA+C;AAC5D,IAAA,CAAC,YAAY,EAAQ,MAAM,EAAQ,KAAK,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,CAAC;AACvC,IAAA,CAAC,gBAAgB,EAAI,UAAU,EAAI,GAAG,CAAC;AACvC,IAAA,CAAC,iBAAiB,EAAG,WAAW,EAAG,GAAG,CAAC;AACvC,IAAA,CAAC,gBAAgB,EAAI,UAAU,EAAI,GAAG,CAAC;AACvC,IAAA,CAAC,iBAAiB,EAAG,YAAY,EAAE,MAAM,CAAC;AAC1C,IAAA,CAAC,aAAa,EAAO,OAAO,EAAO,GAAG,CAAC;AACvC,IAAA,CAAC,cAAc,EAAM,QAAQ,EAAM,GAAG,CAAC;CAC1C;AAED;AAEA,MAAM,aAAa,GAA+C;AAC9D,IAAA,CAAC,cAAc,EAAQ,MAAM,EAAQ,KAAK,CAAC;AAC3C,IAAA,CAAC,oBAAoB,EAAE,YAAY,EAAE,GAAG,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAI,UAAU,EAAI,GAAG,CAAC;AACzC,IAAA,CAAC,kBAAkB,EAAI,UAAU,EAAI,GAAG,CAAC;CAC5C;AAED;AAEA,MAAM,cAAc,GAA+C;AAC/D,IAAA,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;AACnC,IAAA,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;AACnC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,GAAG,CAAC;AACjC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,GAAG,CAAC;AACjC,IAAA,CAAC,QAAQ,EAAM,QAAQ,EAAM,MAAM,CAAC;AACpC,IAAA,CAAC,OAAO,EAAO,OAAO,EAAO,MAAM,CAAC;AACpC,IAAA,CAAC,OAAO,EAAO,OAAO,EAAO,MAAM,CAAC;CACvC;AAED;AAEA,MAAM,WAAW,GAAuC;IACpD,CAAC,aAAa,EAAK,OAAO,CAAC;IAC3B,CAAC,gBAAgB,EAAE,UAAU,CAAC;CACjC;AAED;AAEO,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;AAC9C,IAAA,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAA,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,IAAA,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB;AACnE,IAAA,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjC,CAAA;AAED;AAEA,SAAS,QAAQ,CACb,IAAgC,EAChC,GAAwB,EAAA;AAExB,IAAA,OAAO;AACF,SAAA,MAAM,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACnE,SAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,GAAG;SACnC,IAAI,CAAC,GAAG,CAAC;AAClB;AAEA;AAEA;;;;;;;AAOG;SACa,oBAAoB,CAChC,GAAwB,EACxB,OAA4B,GAAG,EAAA;;IAG/B,MAAM,MAAM,GAAwB,EAAE;AACtC,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD;;AAGA,IAAA,MAAM,MAAM,GAAG,CAAC,IAAgC,KAAyB;QACrE,MAAM,CAAC,GAAwB,EAAE;AACjC,QAAA,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChD,QAAA,OAAO,CAAC;AACZ,IAAA,CAAC;;IAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5D,IAAA,IAAI,SAAS;AAAE,QAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;;IAG3C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAClE,IAAA,IAAI,WAAW;AAAE,QAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,WAAW;;IAGvD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;AACrE,IAAA,IAAI,YAAY;AAAE,QAAA,MAAM,CAAC,WAAW,CAAC,GAAG,YAAY;;IAGpD,MAAM,GAAG,GAAI,GAAG,CAAC,oBAAoB,CAAC,IAAS,IAAI,CAAC,oBAAoB,CAAC;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC;IAChF,MAAM,GAAG,GAAI,GAAG,CAAC,iBAAiB,CAAC,IAAa,IAAI,CAAC,iBAAiB,CAAC;AACvE,IAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE;IACzD;;;IAIA,MAAM,YAAY,GAAwB,EAAE;IAC5C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,GAAG;IAC9D;IACA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AAClC,QAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAC3C;AAEA,IAAA,OAAO,MAAM;AACjB;;ICtIY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;;AAEb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EAZW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAyGzB;;;AAGG;AACI,MAAM,cAAc,GAAkE;AACzF,IAAA,MAAM,EAAK,SAAS;AACpB,IAAA,OAAO,EAAI,QAAQ;AACnB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,OAAO,EAAI,UAAU;AACrB,IAAA,QAAQ,EAAG,SAAS;AACpB,IAAA,MAAM,EAAK,UAAU;AACrB,IAAA,QAAQ,EAAG,QAAQ;AACnB,IAAA,QAAQ,EAAG,WAAW;AACtB,IAAA,SAAS,EAAE,UAAU;;AAGlB,MAAM,eAAe,GAAiE;IACzF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC3E,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACpE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,iCAAiC,EAAE;;AAG3F,MAAM,mBAAmB,GAAsD;AAClF,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE;;AAGtD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;AAwCtF;AACO,MAAM,kBAAkB,GAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO;AAE7E;AACO,MAAM,iBAAiB,GAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB;AAE3G,MAAM,gBAAgB,GAAmB,CAAC,GAAG,kBAAkB,EAAE,GAAG,iBAAiB;AAkD5F;;;;AAIG;AACG,SAAU,sBAAsB,CAAC,UAA+B,EAAA;AAClE,IAAA,MAAM,SAAS,GAAuB;AAClC,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,wBAAwB,EAAE;KACjC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK;AAC3B,QAAA,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;AAC/B,YAAA,GAAG,KAAK;YACR,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;AACzF,SAAA,CAAC,CAAC;AACN,KAAA,CAAC,CAAC;AACP;IAEY;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,aAAqB;AACrB,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EAfW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;SA4DV,cAAc,GAAA;AAC1B,IAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD;MAEa,eAAe,CAAA;IAaxB,WAAA,CAAY,IAAY,EAAE,QAAgB,EAAE,IAAI,GAAG,iBAAiB,EAAE,QAAQ,GAAG,SAAS,EAAA;AACtF,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;AAEA;AACyD;AAC/C,IAAA,kBAAkB,CAAC,QAA6B,EAAA;AACtD,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBACpC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxC;YACJ;QACJ;IACJ;AACH;MAEY,WAAW,CAAA;AASpB,IAAA,WAAA,CACI,IAAY,EACZ,KAAa,EACb,IAAoB,EACpB,OAAyD,EACzD,YAAkB,EAClB,MAAgB,EAChB,QAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;AACH;MAKY,gBAAgB,CAAA;IAIzB,WAAA,CAAY,QAAgB,EAAE,MAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;AACH;AAED;AAEO,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACjE,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;AAC3D,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;AACrD,MAAM,SAAS,GAAe,CAAC,KAAK;AAE3C;AAEM,SAAU,0BAA0B,CAAC,IAAoB,EAAA;IAC3D,QAAQ,IAAI;AACR,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,QAAQ,EAAS,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,aAAa;AACzD,QAAA,KAAK,cAAc,CAAC,eAAe,EAAE,OAAO,iBAAiB;AAC7D,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,IAAI,EAAa,OAAO,MAAM;AAClD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,UAAU,EAAO,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,SAAqC,OAAO,MAAM;;AAE1D;AAEM,SAAU,mBAAmB,CAAC,KAAqB,EAAA;AACrD,IAAA,IACI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC7C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY;AAC1C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,EACrC;QACE,OAAO,KAAK,CAAC,OAAO;IACxB;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE;;;AAG1C,QAAA,OAAO,EAAE;IACb;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;AACtC,QAAA,OAAO,SAAS;IACpB;AACA,IAAA,MAAM,IAAI,GAAI,KAAK,CAAC,OAAiB,IAAI,EAAE;;IAE3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;AACtE,QAAA,OAAO,IAAI;IACf;IACA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAc,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3E;AAEA;AAEA,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;AAElE,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC1B,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACzD,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAK,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,OAAO,EAAG,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,MAAM,EAAI,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAC1G,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;AAC3D,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EACvD,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;;YAGjE,IAAI,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBACvE,EAAE,KAAK,EAAE,KAAK,EAAa,KAAK,EAAE,YAAY,EAAW,IAAI,EAAE,wBAAwB,EAAE;gBACzF,EAAE,KAAK,EAAE,aAAa,EAAK,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,QAAQ,EAAU,KAAK,EAAE,UAAU,EAAa,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,EAAI,IAAI,EAAE,qBAAqB,EAAE;AACzF,aAAA,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtD,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBAClE,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,kBAAkB,EAAE;gBAC3E,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,mCAAmC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,iCAAiC,EAAE;AAC7F,aAAA,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAGzD,IAAI,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,YAAY,EAAK,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,oCAAoC,EAAE;gBAC9F,EAAE,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,wBAAwB,EAAE;gBAClF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,qBAAqB,EAAE;AAClF,aAAA,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACvE,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,SAAS,EAAK,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;gBAC7E,EAAE,KAAK,EAAE,OAAO,EAAO,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,sBAAsB,EAAE;gBACvE,EAAE,KAAK,EAAE,QAAQ,EAAM,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,kCAAkC,EAAE;gBACnF,EAAE,KAAK,EAAE,KAAK,EAAS,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,yBAAyB,EAAE;AAC7E,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAC9C,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;;YAGnD,IAAI,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EACzE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAClE,IAAI,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EACnE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACnE,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBAC5E,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,uBAAuB,EAAE;gBACrE,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,oCAAoC,EAAE;gBAClF,EAAE,KAAK,EAAE,KAAK,EAAM,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,wBAAwB,EAAE;AACzE,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1D,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,sBAAsB,EAAE;gBAChF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,KAAK,EAAY,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,yBAAyB,EAAE;gBACnF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,gCAAgC,EAAE;gBAC1F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,4BAA4B,EAAE;AACzF,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG1D,IAAI,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACjC,aAAA,EAAE,KAAK,CAAC;AACZ,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,WAAW,CAAC,OAAO,EAAM,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAK,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,IAAI,EAC9D,SAAS,EAAE,MAAM,CAAC;AACzB,SAAA,CAAC;IACN;AACH;AAED;AACM,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AAAG;AAEvE;AAEM,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC;AACrH,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;YACzB,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,eAAe,EAAE;AAChE,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB,CAAC;YACrB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE;AAClE,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB;AACvB,SAAA,CAAC;IACN;AACH;AAEK,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,eAAe,EAAE;AAC3E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC,aAAA,EAAE,KAAK,CAAC;YACT,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAG,IAAI,EAAE,yBAAyB,EAAE;AACpD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE;AAClD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE;AACnD,aAAA,EAAE,OAAO,CAAC;AACX,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAC/D,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;YACjG,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,eAAe,EAAE;AAC7E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;oBACN,EAAE,GAAG,EAAE,UAAU,EAAM,IAAI,EAAE,uBAAuB,EAAK,SAAS,EAAE,iBAAiB,EAAE;oBACvF,EAAE,GAAG,EAAE,WAAW,EAAK,IAAI,EAAE,wBAAwB,EAAI,SAAS,EAAE,kBAAkB,EAAE;oBACxF,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,0BAA0B,EAAE,SAAS,EAAE,qBAAqB,EAAE;oBAC3F,EAAE,GAAG,EAAE,aAAa,EAAG,IAAI,EAAE,yBAAyB,EAAG,SAAS,EAAE,oBAAoB;AAC3F;AACJ,aAAA,EAAE,KAAK;AACX,SAAA,CAAC;IACN;AACH;AAEK,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,UAAU,EAAE,EAAE,EACtE,qBAAqB,CAAC;AAC1B,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EACzD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAC5D,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC3E,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;YACjG,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC1D,YAAA,IAAI,WAAW,CAAC,eAAe,EAAE,gBAAgB,EAAE,cAAc,CAAC,KAAK,EACnE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC/D,IAAI,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;AACnE,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAK,IAAI,EAAE,4BAA4B,EAAE;AACxD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,8BAA8B,EAAE;AAC1D,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,6BAA6B,EAAE;AACzD,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,+BAA+B,EAAE;AAC9D,aAAA,EAAE,MAAM,CAAC;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,EAC9D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxH,QAAQ,EAAE,IAAI,CAAC;AACnB,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EACtE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAC/H,MAAM,EAAE,IAAI,CAAC;YACjB,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC/D,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC;AAC7G,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;;AAEzB,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;YACrD,IAAI,WAAW,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE;gBACjE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;AAC9D,gBAAA,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;gBACvD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;AACxE,aAAA,EAAE,QAAQ,CAAC;YACZ,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;gBACvD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;gBAC3D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM;AACjE,aAAA,EAAE,MAAM,CAAC;;YAGV,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,WAAW,EAAG,YAAY,EAAG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;AAChF,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;;YAGhF,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC;AAC3E,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;;YAGrE,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAClE,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;;YAG7F,IAAI,WAAW,CAAC,eAAe,EAAE,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;AACzE,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACpE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;;YAGnG,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAC5D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;YAChE,IAAI,WAAW,CAAC,0BAA0B,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;AACzE,gBAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa;AACzD,aAAA,EAAE,MAAM,CAAC;AACb,SAAA,CAAC;IACN;AACH;AAEK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;YACtB,IAAI,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE;AACpE,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,SAAS,EAAE;AAC1C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AACjD,aAAA,EAAE,MAAM,CAAC;YACV,IAAI,WAAW,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,CAAC,YAAY,EAAE;AACjF,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAE;AACxC,aAAA,EAAE,SAAS,CAAC;AACb,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;AAClD,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAC3D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC7D,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACxG,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7D,SAAA,CAAC;IACN;AACH;AAED;;;;AAIG;SACa,oBAAoB,GAAA;IAChC,OAAO;AACH,QAAA,IAAI,wBAAwB,EAAE;AAC9B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;KAChC;AACL;SAEgB,mBAAmB,CAC/B,UAA+B,EAC/B,MAAM,GAAG,EAAE,EAAA;IAEX,MAAM,MAAM,GAAuC,EAAE;AAErD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACnD,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;QAElD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;AAC7C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE;aAAO;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACrD;IACJ;AAEA,IAAA,OAAO,MAAM;AACjB;;AC/yBA;;;;;;;;;;;;;;;;;;;;;AAqBG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAE/B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;QACjC,IAAA,CAAA,OAAO,GAA4B,IAAI;QAoKvC,IAAA,CAAA,aAAa,GAAG,KAAK;AAiBhC,IAAA;AAnLG;;;;;;;;;;;AAWG;aACqB,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,CAAC;AAC1C,QAAA,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY;AAClE,QAAA,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;QAC3D,OAAO;AACV,KAAA,CAAC,CAAC;;aAGqB,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAvB,CAAyB;IAEhE,IAAI,GAAA;QACA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,oBAAoB;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA;;;;;;;;AAQG;AACH,IAAA,MAAM,CAAC,MAAc,EAAE,MAA2B,EAAE,KAAoB,EAAA;AACpE,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,IAAI,KAAK,EAAE;;;AAGP,YAAA,MAAM,MAAM,GAAI,iBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,UAAU;AACzF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAE,EAAE,MAAM,CAAC;AAChE,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,EAAE;YAChC,IAAI,GAAG,EAAE;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5B;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;YACA,IAAI,CAAC,KAAK,EAAE;YACZ;QACJ;;AAGA,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAoC;QAChF,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AAClD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,QAAA,CAAU,EAAE,YAAY,CAAC;AAC1E,YAAA,IAAI,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,EAAE,SAAS,CAAC;;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC/C;aAAO;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC1C;QAEA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU;QAEzD,MAAM,KAAK,GAAwB,EAAE;QACrC,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzC,IAAI,CAAC,KAAK,gBAAgB;gBAAE;YAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;;YAE1D,IAAI,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE;AAC/C,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;iBAAO;AACH,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;QACJ;;QAEA,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;AAC7C,YAAA,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;QAC3B;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChE,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QACpC;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,MAA8B,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;aAChC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3D,aAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC;AACvC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAA,SAAA,EAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK,CAAC;QACrE;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QACnC;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM;YAAE;;AAEb,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;QACJ;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;IAEA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;IACJ;IAEQ,OAAO,CAAC,SAAiB,EAAE,MAA2B,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;aAChC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;aAC3D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,EAAE;AAC7E,YAAA,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;AACrD,QAAA,CAAC,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAC9B,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,IAAA,EAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;IACtD;AAEA;;;;;;;AAOG;AACK,IAAA,SAAS,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO;AACF,aAAA,OAAO,CAAC,kBAAkB,EAAE,mCAAmC;AAC/D,aAAA,OAAO,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;IACzE;AAEQ,IAAA,WAAW,CAAC,GAAW,EAAA;AAC3B,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;IAC5D;IAIQ,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa;YAAE;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;;YAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;iBACvC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY;iBAClC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;+GAxLS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACLD;AACA,IAAI,eAAe,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;AAcG;MAKU,eAAe,CAAA;AAQxB,IAAA,WAAA,CACY,GAAqB,EACrB,QAAkB,EAClB,eAAyC,EACzC,cAA8B,EAC9B,aAAmC,EACnC,iBAA2C,EAC3C,GAAsB,EACtB,iBAAoC,EAAA;QAPpC,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAfpB,IAAA,CAAA,SAAS,GAAyB,IAAI;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAO;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;QAExC,IAAA,CAAA,SAAS,GAAmB,EAAE;IAWnC;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;;;YAIlD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;YACxC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD;QACJ;IACJ;AAEA;;;;AAIG;AACK,IAAA,qBAAqB,CAAC,MAAmB,EAAA;QAC7C,IAAI,EAAE,GAAuB,MAAM;QACnC,OAAO,EAAE,EAAE;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,EAAE;gBACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC5C;AACA,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,MAAM,CAAC,IAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,cAAc;YAAE;;;AAIrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;AAK1F,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YACpD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;AACpD,QAAA,CAAC,CAAC;;QAGF,MAAM,YAAY,GAAwB,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9B,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;wBAC7B,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;oBAC5C;gBACJ;YACJ;QACJ;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;;QAGrC,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;;AAE9C,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAwC,EAAE;oBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBACxC,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AAC1C,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC;oBACzF;gBACJ;YACJ;QACJ;;QAGA,IAAI,KAAK,EAAE;AACP,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC1C;;;;AAKC,QAAA,YAAY,CAAC,QAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;;;;;;AAO7C,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAe;AAC7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC1D,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE;YACvC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChD,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAA,CAAE,CAAC;QACvE;;AAGA,QAAA,MAAM,UAAU,GAAsB,QAAQ,CAAC,YAAY,CAAC;AAC5D,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,IAAI,UAAU;YAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnG,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;;;;QAK9C,MAAM,QAAQ,GAAuB,YAAY,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI;;;QAIjF,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACpC;QACA,IAAI,QAAQ,EAAE;;YAEV,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;;;;AAI9D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC;YAEpE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;gBAC1D,IAAK,KAAa,CAAC,UAAU;oBAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvD,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;;;;AAI1D,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;gBACzD,IAAI,OAAO,EAAE;oBACT,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBACvD,IAAI,WAAW,EAAE;AACb,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;wBACnC;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,KAAI;gBACrD,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAiB,KAAI;gBAC3D,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;;AAEvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC5D,gBAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACxE,YAAA,CAAC,CAAC;QACN;;AAGA,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC;;AAGQ,IAAA,YAAY,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;AACnD,QAAA,IAAI;AACA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B;AAAE,QAAA,MAAM;AACH,YAAA,GAAG,CAAC,QAAgB,CAAC,IAAI,CAAC,GAAG,KAAK;QACvC;IACJ;+GAlMS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA;;sBACA;;sBACA;;;MCtCQ,qBAAqB,CAAA;IAM9B,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAAA;QAD7B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;;QANb,IAAA,CAAA,WAAW,GAA2B,EAAE;;QAExC,IAAA,CAAA,eAAe,GAAkB,IAAI;IAK3C;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;AAC1D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;AAC7B,YAAA,MAAM,IAAI,GAA4B,OAAO,IAAI,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU;YACxF,MAAM,WAAW,GAAG,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC;mBACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,IAAqB,CAAC,IAAI,CAAC,CAAC;kBACpF,CAAC,CAAC;AACR,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AACtE,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IAC9D;+GAxBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAGI;;sBAEA;;;ACTL;;;;;;;;AAQG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAuB;AAsCnD,IAAA;AApCG,IAAA,UAAU,CAAC,OAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAmB,EAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;AAEA;;;;;;;AAOG;IACH,aAAa,CAAC,QAAgB,EAAE,SAA8B,EAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE;QACpC,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE;IACjD;+GAtCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACTD;;;;;AAKG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;AAwBjD,IAAA;AAtBG,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAiB,EAAA;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;+GAxBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCWY,gBAAgB,CAAA;AAyCzB,IAAA,WAAA,CACY,cAA8B,EAC9B,eAAgC,EAChC,cAAqC,EACrC,cAAqC,EACrC,yBAA2D,EAC3D,iBAA2C,EAC3C,SAAkC,EAClC,aAAmC,EACnC,iBAAoC,EACpC,GAAsB,EAAA;QATtB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;AAlDL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAiF;QAEpH,IAAA,CAAA,UAAU,GAAwB,IAAI;QACtC,IAAA,CAAA,WAAW,GAAwB,IAAI;;QAGvC,IAAA,CAAA,cAAc,GAA2B,EAAE;QAC3C,IAAA,CAAA,aAAa,GAA4B,EAAE;QAC3C,IAAA,CAAA,cAAc,GAA2B,EAAE;;QAG3C,IAAA,CAAA,kBAAkB,GAA2B,EAAE;;;QAI/C,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,aAAa,GAA2B,EAAE;;QAG1C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,aAAa,GAAmC,IAAI;QACpD,IAAA,CAAA,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;QAE7B,IAAA,CAAA,gBAAgB,GAA0B,IAAI;;QAG9C,IAAA,CAAA,eAAe,GAAmC,IAAI;QAErD,IAAA,CAAA,IAAI,GAAmB,EAAE;QAIzB,IAAA,CAAA,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACpC,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,iBAAiB,GAAG,MAAK;AAC7B,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACnE,QAAA,CAAC;QACO,IAAA,CAAA,qBAAqB,GAAuB,IAAI;IAarD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC,EACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YACvC,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;AAGtE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;;YAEvC,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC,CAAC,CACL;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAC7F;;;QAID,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACzE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;YACnD;QACJ;;;;AAKA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAG;YAChD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAI;AACpD,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE;AACtD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,uBAAuB,EAAE,UAAU,EAAE;AAC1C,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;AACnC,QAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACrC;;AAGA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/G;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5G;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACpB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1G;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACjH;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAChC;aAAO;YACH,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC/B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,YAAY,CAAC,KAAiB,EAAE,QAA4B,EAAA;QACxD,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC1H;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM;IACzD;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;AAC3C,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;IACrD;AAEA,IAAA,YAAY,CAAC,OAAe,EAAA;AACxB,QAAA,MAAM,MAAM,GAA2B;YACnC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO;AACzD,YAAA,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU;SAC7C;AACD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO;IACrC;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,MAAM,KAAK,GAA2B;AAClC,YAAA,QAAQ,EAAE,0BAA0B,EAAE,aAAa,EAAE,gBAAgB;AACrE,YAAA,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,0BAA0B;AACnE,YAAA,cAAc,EAAE,2BAA2B;SAC9C;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,sBAAsB;IACnD;AAEA,IAAA,WAAW,CAAC,EAAkB,EAAA;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,MAAM,MAAM,GAA2B;AACnC,YAAA,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU;AACtC,YAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;AACxC,YAAA,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY;AAC9C,YAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;YAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;AAC5C,YAAA,gBAAgB,EAAE,QAAQ;SAC7B;AACD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI;QAC9C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,GAAG,KAAK;IAC/E;AAEA,IAAA,IAAI,oBAAoB,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7E,IAAA,IAAI,+BAA+B,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAEnG,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAC9B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAChH;AAEA,IAAA,uBAAuB,CAAC,KAAiB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa;QACpC,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3H;;AAIA,IAAA,kBAAkB,CAAC,KAAiB,EAAE,IAA6B,EAAE,EAAmB,EAAA;QACpF,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,IAAI;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAC1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC;QACA,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1F;aAAO,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,eAAe,GAAG,aAAa;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACrG;IACJ;IAEA,wBAAwB,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QACrC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAiB,CAAC,EAAE,CAAC;AAC7F,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,IAAI,aAAa,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AAElE,IAAA,UAAU,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACvG,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,uBAAuB,CAAC,KAAiB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,mBAAmB;AACtD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,wBAAwB,CAAC,KAAiB,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxH,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;;;AAInC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO;YAAE;;AAGhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;;;;AAM/E,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACvC,IAAI,SAAS,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC1C,IAAI,SAAS,EAAE;oBAAE,SAAS,GAAG,KAAK;oBAAE;gBAAQ;gBAC5C,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC;;AAGA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC,SAAA,CAAC;IACN;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAI,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC9E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;;;;;;QAQ9F,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;;;AAI7C,QAAA,MAAM,CAAC,GAAG;AACN,YAAA,GAAG,EAAK,MAAM,CAAC,GAAG,GAAM,KAAK;AAC7B,YAAA,KAAK,EAAG,MAAM,CAAC,KAAK,GAAI,KAAK;AAC7B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK;AAC7B,YAAA,IAAI,EAAI,MAAM,CAAC,IAAI,GAAK,KAAK;SAChC;AACD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK;AACzC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAI,CAAC,CAAC,MAAM;QAE1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;QAGvF,IAAI,CAAC,aAAa,GAAG;YACjB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;SACjF;;AAGD,QAAA,MAAM,KAAK,GAAM,CAAC,MAAM,CAAC,GAAG,GAAM,OAAO,CAAC,GAAG,IAAO,KAAK;AACzD,QAAA,MAAM,OAAO,GAAI,CAAC,MAAM,CAAC,KAAK,GAAI,OAAO,CAAC,KAAK,IAAK,KAAK;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK;AACzD,QAAA,MAAM,MAAM,GAAK,CAAC,MAAM,CAAC,IAAI,GAAK,OAAO,CAAC,IAAI,IAAM,KAAK;QACzD,IAAI,CAAC,cAAc,GAAG;AAClB,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;SAClG;IACL;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC5B;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/F;;AAGQ,IAAA,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,EAAA;QAC3E,OAAO;YACH,GAAG,EAAK,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI;YAClB,IAAI,EAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnB,KAAK,EAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAG,CAAC,CAAC,CAAA,EAAA,CAAI;YAClC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI;SACrC;IACL;IAEQ,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAA;QAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;;;AAGrC,QAAA,OAAO,CAAA,0BAAA,EAA6B,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,aAAA,EAAgB,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,KAAK;IAC3K;+GA/dS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,qHCrB7B,g8RA+KA,EAAA,MAAA,EAAA,CAAA,2hHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FD1Ja,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EAGX,KAAK,EAAA,eAAA,EACA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g8RAAA,EAAA,MAAA,EAAA,CAAA,2hHAAA,CAAA,EAAA;;sBAG9C;;;MEHQ,gBAAgB,CAAA;AAN7B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;AAE3B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAe;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAC7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAC9C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;QAW3C,IAAA,CAAA,KAAK,GAAG,WAAW;QACnB,IAAA,CAAA,WAAW,GAAG,UAAU;QACxB,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,WAAW,GAAG,YAAY;QAC1B,IAAA,CAAA,kBAAkB,GAAwB,oBAAoB;AAmFxE,IAAA;AAhGG,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW;IAC1C;AAaA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,mBAAmB;AACnD,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,8BAA8B;AAC9D,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,iBAAiB;AACjD,YAAA,SAAyB,OAAO,mBAAmB;;IAE3D;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,QAAQ;AACxC,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,OAAO;AACvC,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,KAAK;AACrC,YAAA,SAAyB,OAAO,QAAQ;;IAEhD;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9F;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;;AAGA,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,IAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,cAAc,CAAC,KAAY,EAAA;QACvB,MAAM,KAAK,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;;AAGA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,KAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;+GAnHS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,o5BCnB7B,02NA2IA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,02NAAA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,cAAc;;;MEXhB,kBAAkB,CAAA;IAwB3B,WAAA,CACY,QAAkC,EAClC,cAA8B,EAAA;QAD9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QAzBjB,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,cAAc,GAAoB,EAAE;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA+C;AAC5E,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;QAEtC,IAAA,CAAA,QAAQ,GAAe,EAAE;QACzB,IAAA,CAAA,cAAc,GAAe,EAAE;QAC/B,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,aAAa,GAAkB,IAAI;QAEnC,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,YAAY,GAAG,EAAE;QAEjB,IAAA,CAAA,aAAa,GAAsB,MAAM;;AAGxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;QAGnC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;AAsJf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAmB;IAjJ/C;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;AACjD,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;;IAGA,SAAS,GAAA;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;AAC1D,YAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAC3B,IAAI,CAAC,OAAO,EAAE;QAClB;IACJ;;AAGQ,IAAA,GAAG,CAAC,KAAsB,EAAA;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IACd,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAClF,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,cAAc,CAAC,SAAS,CACzB,GAAG,CAAC,OAAO,EACX,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,MAAM,EAClB,IAAI,EACJ,GAAG,CAAC,YAAY,CACnB;;AAED,YAAA,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxE;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,gBAAgB,CAAC,QAAkB,EAAA;QAC/B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;QACrF;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;IACpC;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ;QACtC,IAAI,CAAC,OAAO,EAAE;IAClB;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5E;IAEA,eAAe,CAAC,QAAkB,EAAE,KAAiB,EAAA;QACjD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/E;IAEA,WAAW,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC7C,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;QAC7C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;IACjD;AAEA,IAAA,UAAU,CAAC,QAAkB,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,SAAS;AACtC,QAAA,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI;AAC1D,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAA8B,EAAA;AACrC,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY;YAAE;QAEhD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,eAAe;YAAE;QAEtB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc;YAAE;;AAGrB,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW;AAC5C,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa;AAC5C,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAI1B,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW;AAC5C,QAAA,IAAI,OAAO,GAAG,cAAc,CAAC,aAAa;;;;QAK1C,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE;AAC5C,YAAA,OAAO,EAAE;QACb;QAEA,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC;;QAGlD,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;;;IAKQ,YAAY,GAAA;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CAAC;QACpE;IACJ;IAIQ,OAAO,GAAA;;AAEX,QAAA,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE;AACzD,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;YACnD;QACJ;QACA,MAAM,IAAI,GAAe,EAAE;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAEpB,MAAM,UAAU,GAAe,EAAE;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IACpC;AAEQ,IAAA,WAAW,CAAC,KAAsB,EAAE,KAAa,EAAE,GAAe,EAAE,SAA2B,EAAA;AACnG,QAAA,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI;AAC3E,YAAA,MAAM,QAAQ,GAAa;gBACvB,IAAI;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB;AACtD,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC9B,KAAK;gBACL,QAAQ;gBACR,WAAW;AACX,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,aAAa,EAAE,CAAC;aACnB;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;YAClE;QACJ;IACJ;+GAnNS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAjB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kOCnC/B,4kKAsGA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,4kKAAA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;;MEhBQ,gBAAgB,CAAA;;AAkEzB,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3B;AACA,IAAA,yBAAyB,CAAC,MAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC/B;AACA,IAAA,uBAAuB,CAAC,KAAqB,EAAA;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,8BAA8B,CAAC,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC;IACzE;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,OAAO,CAAC;IACxE;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;IAChD;;AAGA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;AAEA;AAC6E;AAC7E,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC7C;AAEA;;AAEiE;AACjE,IAAA,IAAI,iBAAiB,GAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;AAC/C,QAAA,MAAM,KAAK,GAAa,CAAC,kBAAkB,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAA,GAAA,CAAK,CAAC;QAC/F,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACnD;;AAGA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;IAKA,WAAA,CACY,QAAkC,EAClC,cAA8B,EAC9B,iBAAoC,EACpC,UAA6B,EAC7B,UAAqC,EACrC,eAAgC,EAChC,iBAA2C,EAC3C,yBAA2D,EAC3D,SAAkC,EAClC,GAAsB,EACtB,MAAsB,EAAA;QAVtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;QAnJT,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,WAAW,GAAoB,EAAE;QACjC,IAAA,CAAA,KAAK,GAAG,SAAS;QACjB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;QAC5B,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,cAAc,GAAoB,EAAE;QACpC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;AACd,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAgB;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA8B;AACpE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAyC;AACrE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAmB;QAM7D,IAAA,CAAA,UAAU,GAAU,EAAE;AACtB,QAAA,IAAA,CAAA,WAAW,GAAW,UAAU,CAAC,MAAM;QACvC,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;QAC5C,IAAA,CAAA,YAAY,GAAG,WAAW;AAC1B,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,YAAY,GAAyB,IAAI;QACzC,IAAA,CAAA,UAAU,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAC;QACtB,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAC1B,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;QACvB,IAAA,CAAA,aAAa,GAAqC,YAAY;QAC9D,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,aAAa,GAAG,EAAE;QACjB,IAAA,CAAA,gBAAgB,GAAyB,IAAI;QAC9C,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;AACf;;AAE8D;QACvD,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,YAAY,GAAG,CAAC;QAMhB,IAAA,CAAA,mBAAmB,GAAG,CAAC;QAkpBvB,IAAA,CAAA,eAAe,GAAyC,IAAI;IA5jBjE;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC3G,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAU,KAAI;AAC9D,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAmB,KAAI;AACzE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAC7D,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK;YACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE;;;AAGtB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;;;AAGpB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;;;YAGzB,IAAI,CAAC,SAAS,EAAE;QACpB;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;;;YAG3B,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,eAAe,EAAE;;;AAGtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACpE;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,IAAI,CAAC;;;;;AAK3E,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC;;QAGnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE;QAC3D,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,gBAAgB,EAChB,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;;;YAGD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAG;AACzC,gBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,EAAE;AAChC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;AAC5B,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBACxB;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;QAEA,IAAI,CAAC,SAAS,EAAE;QAChB,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;QAC/B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAC1D,IAAI,QAAQ,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAAE;IACpF;AAEA;;;;;;;;;AASG;IACK,eAAe,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa;AAC/C,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;AAC5C,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,GAAG,GAAG,IAAI;QACjC,MAAM,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA,EAAA,CAAI;QACtC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC3C,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;;AAE3C,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa;YAAE;AAEnF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;AACnB,YAAA,OAAO,EAAU,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,OAAO,EAAU,IAAI,CAAC,eAAe,CAAC,aAAa;AACnD,YAAA,YAAY,EAAK,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,IAAI,EAAa,CAAC,EAAE,IAAI,IAAe,GAAG;AAC1C,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,WAAW,EAAM,CAAC,EAAE,SAAS,IAAU,UAAU;AACjD,YAAA,QAAQ,EAAS,CAAC,EAAE,QAAQ,IAAW,KAAK;YAC5C,UAAU,EAAO,KAAK;AACzB,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAe,KAAI;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAiB,CAAC,aAAa,CAAC,YAAY;YACjE,IAAI,CAAC,YAAY,CAAC;gBACd,SAAS,EAAS,QAAQ,CAAC,MAAM;AACjC,gBAAA,YAAY,EAAM,QAAQ,CAAC,KAAK,GAAG,OAAO;AAC1C,gBAAA,YAAY,EAAM,OAAO;AACzB,gBAAA,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG;AAC5C,aAAA,CAAC;;;;AAIF,YAAA,IAAI,CAAC,eAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;AAGtE,YAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;AACzC,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AACzB,YAAA,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAChD,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;IAChD;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACjC;iBAAO;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAqB,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAChC;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;;YAErC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;QAEA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;;AAE3D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5D,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE;gBAC7D;YACJ;YACA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;YAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;AAEA,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,IAAI,KAAK,WAAW,CAAC,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QACpC;aAAO;;AAEH,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACjB;IACJ;AAEA,IAAA,cAAc,CAAC,MAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,eAAe,EAAE;QAC1B;aAAO;YACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9C;IACJ;;AAIA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;QAC3B,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;IAClE;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;AACnD,QAAA,IAAI,CAAC,SAAS;YAAE;;QAEhB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9D;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;IACtH;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI;QAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9G,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;IACvH;AAEQ,IAAA,gBAAgB,CAAC,IAAmB,EAAA;;;QAGxC,UAAU,CAAC,MAAK;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;AAC9F,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;AACzG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACjF;IAEA,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IACrF;IAEA,iBAAiB,GAAA;;AAEb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;AAEA,IAAA,gBAAgB,CAAC,IAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QACzG;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,KAAkD,EAAA;AAC/D,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK;;AAG9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAChE,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAClB,YAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;gBAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACrC;YACA;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;AAAO,aAAA,IAAI,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;IAEA,cAAc,GAAA;;;AAGV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;AAGA,IAAA,eAAe,CAAC,KAAoF,EAAA;AAChG,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK;AAC/B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,QAAQ,MAAM;AACV,YAAA,KAAK,aAAa,CAAC,MAAM,EAAE;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnC;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;AAC5B,gBAAA,MAAM,UAAU,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;gBAC/B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBAC3G,IAAI,UAAU,EAAE;oBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;oBACtD,IAAI,GAAG,EAAE;AACL,wBAAA,IAAI,CAAC,YAAY,GAAG,UAAU;wBAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;wBAC1G,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;oBACrH;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;gBACrC;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBACrD,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ;AAChD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAChE,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;oBACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,oBAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,MAAM,CACpB;gBACD;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,qBAAqB,EAAE;AACtC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC;gBAC9F,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,YAAY,CAC1B;gBACD;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC7C,IAAI,QAAQ,EAAE;AACV,oBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzF,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,sBAAsB,EAAE;gBACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;gBACnE,IAAI,mBAAmB,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;oBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC5E,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/E,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,KAAK,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU;oBAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;gBACpD;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;;IAER;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QAC1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,YAAY,CAAC,IAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7D;AAEQ,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1D;AAIA,IAAA,YAAY,CAAC,KAAmG,EAAA;AAC5G,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B;QACJ;;AAEA,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;;AAEzD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,GAAG;cACrE,KAAK,CAAC,SAAS,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;;AAI9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAEvB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5D,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,EAAE,IAAI,CAAC;IACZ;IAEQ,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAA;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBACxB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;YACzC;AACA,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAE,MAAsB,EAAA;AAC3F,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC1B,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,MAAM,IAAI,IAAI;AAC3C,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,iBAAiB,CAAC,UAAsB,EAAA;QAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB;QACJ;QAEA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;IACJ;+GAlxBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,giCCxB7B,irRA6KM,EAAA,MAAA,EAAA,CAAA,k4IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrJO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,irRAAA,EAAA,MAAA,EAAA,CAAA,k4IAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,eAAe;;;MExCjB,oBAAoB,CAAA;AAO7B,IAAA,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QATN,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,eAAe,GAAoB,EAAE;AAGpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAgB;IAMjD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,mBAAmB,CAC3B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IACjF;+GA1BS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAzB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA;;sBAEA;;sBACA;;;MC8DQ,gBAAgB,CAAA;IAUzB,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAXN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAElB,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,WAAW,KAAU;AAErB,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GA9BS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7Df;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAmCQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA/D5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,UAAA,EAiCW,KAAK,EAAA,MAAA,EAAA,CAAA,0iBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCFQ,yBAAyB,CAAA;IAalC,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAdN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,OAAO,GAAW,KAAK;QACvB,IAAA,CAAA,KAAK,GAAW,CAAC;QACjB,IAAA,CAAA,QAAQ,GAAY,KAAK;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GAhCS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5B,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0jBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAmCQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArErC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,IAAA,CAAA,EAAA,UAAA,EAiCW,KAAK,EAAA,MAAA,EAAA,CAAA,0jBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCPQ,+BAA+B,CAAA;AAiBxC,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAsB,EACtB,KAA8B,EACE,SAAkB,EAAA;QAHlD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,KAAK,GAAL,KAAK;QAC2B,IAAA,CAAA,SAAS,GAAT,SAAS;QApB5C,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,QAAQ,GAAwB,UAAU;QAC1C,IAAA,CAAA,GAAG,GAAG,UAAU;QAChB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,MAAM,GAA4C,OAAO;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE5C,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAa,KAAK,CAAC,CAAC,cAAc,EAAE;IAOlE;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxF;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC3F;IACJ;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG;AACpD,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG;IAChC;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;AApDS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,2GAqBhB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArBzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wqBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsCQ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBArE3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,QAAA,EAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,IAAA,CAAA,EAAA,UAAA,EAoCW,KAAK,EAAA,MAAA,EAAA,CAAA,wqBAAA,CAAA,EAAA;;0BAuBZ;;0BAAY,MAAM;2BAAC,UAAU;;sBApBjC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;ACjGL;MACa,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAE9F;MACa,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;;ACJrF;;;AAGG;AACG,SAAU,WAAW,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC9C,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;QAC3C,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,SAAS;QACrC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,YAAY,EAAE;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS;QAC9E;AACA,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC,EAAE,GAAG,CAAC;AACX;AAEA;;;;;;;;AAQG;AACG,SAAU,iBAAiB,CAAC,KAAsB,EAAE,IAAS,EAAA;AAC/D,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;AAErC,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AAElD,QAAA,KAAK,CAAC,OAAO,GAAG,KAAK;QAErB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE;AAChC,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;gBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;wBACpC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AAC7B,4BAAA,KAAK,CAAC,OAAO,GAAG,KAAK;wBACzB;oBACJ;gBACJ;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC5D;AAEA,QAAA,OAAO,KAAK;AAChB,IAAA,CAAC,CAAC;AACN;;MCgIa,wBAAwB,CAAA;IAsBjC,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAa,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO;YAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;aAC1B;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QAAE;IACnD;IAEA,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAa,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAC1C;AAEA,IAAA,WAAA,CACY,UAA6B,EAC7B,cAA8B,EACW,cAAwC,EACjF,UAAqC,EACrC,iBAAoC,EACpC,cAA8B,EAC9B,GAAsB,EAAA;QANtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,cAAc,GAAd,cAAc;QAC2B,IAAA,CAAA,cAAc,GAAd,cAAc;QACvD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QA3CN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE7C,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,WAAW,GAAsB,EAAE;QACnC,IAAA,CAAA,SAAS,GAAG,KAAK;;AAGf,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAK,EAAG,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,KAAK,GAAG,SAAS;IA0BtB;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS;QAE5E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAG;AACvD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,eAAe;gBAAE;AACpD,YAAA,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,EAAE,IAAI;YACnD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;AACxC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,CAAC,eAAe,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;IAClC;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EACtE,MAAK,EAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,WAAW,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW;AACjD,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,EAAE,CAAC,IAAS,KAAI;gBAChB,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;AACjF,gBAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B;AACH,SAAA,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,MAAqB,EAAA;QACtC,MAAM,MAAM,GAAG,CAAC,KAAsB,KAClC,KAAK,CAAC,IAAI,CAAC,CAAC,IACR,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;aACjC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CACpD;AACL,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACJ;QACA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAC3C,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,wBAAwB,GAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;AAEpC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM;gBAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,GAAG,EAAE,YAAY;gBAAE;AAExB,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;gBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;gBACnD;YACJ;AACA,YAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACtD;IACJ;AAlIS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,2EAwCT,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxClC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhKvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsFQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlKpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,IAAA,CAAA,EAAA,UAAA,EAoFW,KAAK,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA;;0BA0CZ;;0BAAY,MAAM;2BAAC,mBAAmB;;sBAvC1C;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAeA;;sBAQA;;;MCjJQ,2BAA2B,CAAA;IAcpC,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAfN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,GAAG,GAAmB,QAAQ;QAC9B,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAuB,OAAO;QACpC,IAAA,CAAA,IAAI,GAAkC,QAAQ;QAC9C,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAQ,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GAxBS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxD1B;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA+BQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1DvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,IAAA,CAAA,EAAA,UAAA,EA6BW,KAAK,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MC3EQ,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,iNAHlB,2DAA2D,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,2DAA2D;AACrE,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCGzB,cAAc,CAAA;AAQvB,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAP9B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAkB,IAAI;AAOpC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAI;YACnE,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;YACJ;AAEA,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AACtG,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kBAAkB,KAAU;IAE5B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;IAC3B;+GA3BS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAIN,mBAAmB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBxC,uSAMM,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,uSAAA,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA;;sBAMhB,eAAe;uBAAC,mBAAmB;;;MEO3B,0BAA0B,CAAA;AA0BnC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QAzBzB,IAAA,CAAA,IAAI,GAAyB,IAAI;QAEnC,IAAA,CAAA,cAAc,GAAG,eAAe;QAChC,IAAA,CAAA,iBAAiB,GAAG,mBAAmB;QACvC,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,YAAY,GAAqB,EAAE;;QAGnC,IAAA,CAAA,WAAW,GAAuC,EAAE;;QAGpD,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAuB,UAAU;QAC3C,IAAA,CAAA,aAAa,GAA0B,QAAQ;QAC/C,IAAA,CAAA,SAAS,GAAG,MAAM;QAClB,IAAA,CAAA,WAAW,GAAG,GAAG;QACjB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAW,UAAU;QAC9B,IAAA,CAAA,OAAO,GAAG,IAAI;;QAGd,IAAA,CAAA,UAAU,GAAkB,IAAI;IAIc;IAErD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,kBAAkB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACN;IAEA,kBAAkB,GAAA;AACd,QAAA,MAAM,IAAI,GAAuC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACnF,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IAC3B;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,KAAK;IACxE;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;AAEA,IAAA,eAAe,CAAC,OAA2B,EAAA;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO;IAC/E;AAEA,IAAA,cAAc,CAAC,OAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,IAAI,sBAAsB;IAC7F;AAEA,IAAA,cAAc,CAAC,IAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;IAC5E;AAEA,IAAA,iBAAiB,CAAC,WAA2B,EAAA;QACzC,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/E;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE;IACxD;;IAIA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,kBAAkB,EAAE;IAC7B;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;IAEA,UAAU,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,MAAM,MAAM,GAAsB;YAC9B,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,QAAQ,EAAE,IAAI,CAAC,WAAW;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,MAAM,EAAE,IAAI,CAAC,SAAwC;YACrD,IAAI,EAAE,IAAI,CAAC,OAAO;SACrB;AAED,QAAA,MAAM,WAAW,GAAmB;YAChC,EAAE,EAAE,cAAc,EAAE;YACpB,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,MAAM,CAAC;SACpB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE;QAC/B;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;;AAIA,IAAA,iBAAiB,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY;YAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;IACJ;;AAIA,IAAA,SAAS,CAAC,WAA2B,EAAA;AACjC,QAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;IAEA,YAAY,CAAC,WAA2B,EAAE,KAAa,EAAA;QACnD,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;QAEpC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C;IACJ;;AAIA,IAAA,SAAS,CAAC,WAA2B,EAAA;AACjC,QAAA,OAAO,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM;IAC/C;AAEA,IAAA,YAAY,CAAC,WAA2B,EAAA;;AAEpC,QAAA,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;AACvD,YAAA,GAAG,CAAC;AACJ,YAAA,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAA0B;AACpE,SAAA,CAAC,CAAC;IACP;AAEA,IAAA,aAAa,CAAC,WAA2B,EAAA;AACrC,QAAA,WAAW,CAAC,cAAc,GAAG,SAAS;IAC1C;AAEA,IAAA,gBAAgB,CAAC,WAA2B,EAAA;QACxC,IAAI,CAAC,WAAW,CAAC,cAAc;AAAE,YAAA,WAAW,CAAC,cAAc,GAAG,EAAE;AAChE,QAAA,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,KAAK;AACd,SAAA,CAAC;IACN;IAEA,mBAAmB,CAAC,WAA2B,EAAE,KAAa,EAAA;QAC1D,IAAI,CAAC,WAAW,CAAC,cAAc;YAAE;QACjC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,YAAA,WAAW,CAAC,cAAc,GAAG,SAAS;QAC1C;IACJ;+GA3LS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,6GCvBvC,63XAoPA,EAAA,MAAA,EAAA,CAAA,u7JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Na,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cAGtB,KAAK,EAAA,QAAA,EAAA,63XAAA,EAAA,MAAA,EAAA,CAAA,u7JAAA,CAAA,EAAA;;sBAGhB;;;AEfL,MAAM,WAAW,GAAG,EAAE;AAEtB;;;;;;AAMG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAmB,EAAE;QAC1B,IAAA,CAAA,OAAO,GAAmB,EAAE;AA+BvC,IAAA;AA7BG,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzD,IAAA,IAAI,CAAC,MAAuB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QACtB;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAG;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;+GAhCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC0BD;AACA;AACA,MAAM,YAAY,GAAG;IACjB,gBAAgB;IAChB,eAAe;IACf,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,yBAAyB;IACzB,+BAA+B;IAC/B,wBAAwB;IACxB,2BAA2B;IAC3B,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,0BAA0B;CAC7B;MAgEY,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBA/EzB,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,cAAc;YACd,mBAAmB;YACnB,kBAAkB;AAClB,YAAA,0BAA0B,aAMtB,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,OAAA,EAAA;;YAmBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAEb,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAIrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,SAAA,EA/Cd;YACP,iBAAiB;YACjB,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,wBAAwB;YACxB,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,qBAAqB;YACrB,uBAAuB;AAC1B,SAAA,EAAA,OAAA,EAAA,CA1BG,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAmBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,CAAA,CAAA;;4FAoBR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA9D5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,YAAY;AAC1B,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;AAChB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,iBAAiB;wBACjB,cAAc;wBACd,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;wBACxB,eAAe;wBACf,oBAAoB;wBACpB,iBAAiB;wBACjB,qBAAqB;wBACrB,qBAAqB;wBACrB,gCAAgC;wBAChC,qBAAqB;wBACrB,uBAAuB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE;;wBAEL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;;wBAEb,gBAAgB;wBAChB,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,gBAAgB;wBAChB,gBAAgB;wBAChB,gBAAgB;wBAChB,yBAAyB;wBACzB,+BAA+B;wBAC/B,wBAAwB;wBACxB,2BAA2B;wBAC3B,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;wBAClB,0BAA0B;AAC7B,qBAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA;;;AC3HK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;SACZ;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC;AACpE,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC;SAC3G;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,OAAO,CAAC;AACpF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAK,QAAQ;AAChB,YAAA,IAAI,EAAI,MAAM;AACd,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAI,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAK,KAAK,EAAK,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;YACrF,IAAI,WAAW,CAAC,MAAM,EAAI,KAAK,EAAK,cAAc,CAAC,IAAI,EAAI,SAAS,EAAE,EAAE,EAAS,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtH,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9H,YAAA,IAAI,WAAW,CAAC,MAAM,EAAI,MAAM,EAAI,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACjJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAS,aAAa;AAC7B,YAAA,UAAU,EAAM,QAAQ;AACxB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,GAAG,EAAa,KAAK;AACrB,YAAA,KAAK,EAAW,MAAM;AACtB,YAAA,MAAM,EAAU,MAAM;AACtB,YAAA,OAAO,EAAS,WAAW;AAC3B,YAAA,YAAY,EAAI,KAAK;AACrB,YAAA,MAAM,EAAU,SAAS;AAC5B,SAAA,CAAC;IACN;AACH;;AC7BK,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AACpD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;AAClF,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iCAAiC,CAAC;AACnH,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,qCAAqC;SACtH;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,eAAe,EAAE,SAAS;AAC7B,SAAA,CAAC;IACN;AACH;;AC1BK,MAAO,+BAAgC,SAAQ,eAAe,CAAA;AAChE,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACxD,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAClF,KAAK,CAAC;SACb;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;AClBK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,MAAM,EAAE,iBAAiB;AAC5B,SAAA,CAAC;IACN;AACH;;ACZK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,OAAO,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YAChF,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EACnD,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA,CAAC;IACN;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;SAC1F;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,SAAS;AACnB,SAAA,CAAC;IACN;AACH;;ACZK,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAC5D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE;SACd;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,yCAAyC,CAAC;AACzH,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC;YAC3E,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;SACnH;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,KAAK;AACrB,SAAA,CAAC;IACN;AACH;;ACpBK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;AAC/E,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;AClCK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,QAAQ,CAAC;AAC5F,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,OAAO;AACnB,SAAA,CAAC;IACN;AACH;;AClCK,MAAO,8BAA+B,SAAQ,eAAe,CAAA;AAC/D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,QAAQ,CAAC;QAC9E,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;SACzE;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACnBK,MAAO,wBAAyB,SAAQ,eAAe,CAAA;AACzD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,GAAG,EAAE,QAAQ;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;AACxF,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;SAC3E;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,MAAM;AAClB,SAAA,CAAC;IACN;AACH;;ACLK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;YAC5E,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EACpF,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,QAAQ,GAAG;YACZ,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;SACtB;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,OAAO,EAAE,kBAAkB;AAC9B,SAAA,CAAC;IACN;IAEQ,YAAY,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,8BAA8B,EAAE;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,wBAAwB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AACnE,QAAA,IAAI,YAAY;AAAE,YAAA,YAAY,CAAC,OAAO,GAAG,WAAW;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,IAAI;IACf;AACH;;AC1DK,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AACxD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA;AACI,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;AACnB,YAAA;AACI,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,cAAc,CAAC,MAAM;AAC3B,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;SACtB;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACzBK,MAAO,sBAAuB,SAAQ,eAAe,CAAA;AACvD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACdK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,QAAQ,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}