{"version":3,"file":"3kles-kles-material-table.mjs","sources":["../../../projects/kles-material-table/src/lib/directives/table.directive.ts","../../../projects/kles-material-table/src/lib/directives/resizecolumn.directive.ts","../../../projects/kles-material-table/src/lib/directives/cellstyle.directive.ts","../../../projects/kles-material-table/src/lib/directives/dynamic-component.directive.ts","../../../projects/kles-material-table/src/lib/component/cell/cell.abstract.ts","../../../projects/kles-material-table/src/lib/component/treetable/cell/treecell.abstract.ts","../../../projects/kles-material-table/src/lib/component/cell/unfoldcell.component.ts","../../../projects/kles-material-table/src/lib/directives/dynamic-cell.directive.ts","../../../projects/kles-material-table/src/lib/component/treetable/cell/leaf.component.ts","../../../projects/kles-material-table/src/lib/component/treetable/cell/node.component.ts","../../../projects/kles-material-table/src/lib/directives/dynamic-treecell.directive.ts","../../../projects/kles-material-table/src/lib/directives/treetable.directive.ts","../../../projects/kles-material-table/src/lib/directives/dynamic-header.directive.ts","../../../projects/kles-material-table/src/lib/directives/dynamic-header-filter.directive.ts","../../../projects/kles-material-table/src/lib/animations/row.animation.ts","../../../projects/kles-material-table/src/lib/component/table/table.datasource.ts","../../../projects/kles-material-table/src/lib/pipe/cell.pipe.ts","../../../projects/kles-material-table/src/lib/pipe/field.pipe.ts","../../../projects/kles-material-table/src/lib/pipe/row.pipe.ts","../../../projects/kles-material-table/src/lib/enums/span.enum.ts","../../../projects/kles-material-table/src/lib/pipe/span.pipe.ts","../../../projects/kles-material-table/src/lib/pipe/rowdragdisabled.pipe.ts","../../../projects/kles-material-table/src/lib/pipe/group.pipe.ts","../../../projects/kles-material-table/src/lib/pipe/elevation.pipe.ts","../../../projects/kles-material-table/src/lib/services/abstracttable.service.ts","../../../projects/kles-material-table/src/lib/component/table/table.component.ts","../../../projects/kles-material-table/src/lib/component/table/table.component.html","../../../projects/kles-material-table/src/lib/services/lazy/abstractlazytable.service.ts","../../../projects/kles-material-table/src/lib/component/lazytable/lazytable.component.ts","../../../projects/kles-material-table/src/lib/component/lazytable/lazytable.component.html","../../../projects/kles-material-table/src/lib/component/header/textheader.component.ts","../../../projects/kles-material-table/src/lib/component/header/textheaderfilter.component.ts","../../../projects/kles-material-table/src/lib/decorators/header.decorator.ts","../../../projects/kles-material-table/src/lib/pipe/capitalize.pipe.ts","../../../projects/kles-material-table/src/lib/component/header/dynamic-headerfilter.component.ts","../../../projects/kles-material-table/src/lib/component/treetable/mat-treetable-datasource.ts","../../../projects/kles-material-table/src/lib/pipe/rowtree.pipe.ts","../../../projects/kles-material-table/src/lib/services/treetable/tree.service.ts","../../../projects/kles-material-table/src/lib/services/treetable/converter.service.ts","../../../projects/kles-material-table/src/lib/services/treetable/abstracttreetable.service.ts","../../../projects/kles-material-table/src/lib/component/treetable/treetable.component.ts","../../../projects/kles-material-table/src/lib/component/treetable/treetable.component.html","../../../projects/kles-material-table/src/lib/services/lazy/abstractlazytreetable.service.ts","../../../projects/kles-material-table/src/lib/component/lazytreetable/lazytreetable.component.ts","../../../projects/kles-material-table/src/lib/component/lazytreetable/lazytreetable.component.html","../../../projects/kles-material-table/src/lib/services/defaulttable.service.ts","../../../projects/kles-material-table/src/lib/services/features/selection/selectiontable.service.ts","../../../projects/kles-material-table/src/lib/services/features/filter/headerfilter-table.service.ts","../../../projects/kles-material-table/src/lib/services/features/dragdrop/dragdroprow.service.ts","../../../projects/kles-material-table/src/lib/services/features/unfoldrow/unfoldrow.service.ts","../../../projects/kles-material-table/src/lib/services/table.service.ts","../../../projects/kles-material-table/src/lib/services/features/selection/selectiontablelazy.service.ts","../../../projects/kles-material-table/src/lib/services/lazy/lazytable.service.ts","../../../projects/kles-material-table/src/lib/services/treetable/defaulttreetable.service.ts","../../../projects/kles-material-table/src/lib/services/features/dragdrop/dragdroprowtree.service.ts","../../../projects/kles-material-table/src/lib/services/lazy/lazytreetable.service.ts","../../../projects/kles-material-table/src/lib/services/features/selection/selectiontreetable.service.ts","../../../projects/kles-material-table/src/lib/services/treetable/treetable.service.ts","../../../projects/kles-material-table/src/lib/services/features/selectionclick/selectionclick.service.ts","../../../projects/kles-material-table/src/lib/services/features/filter/textfiltertable.service.ts","../../../projects/kles-material-table/src/lib/enums/align.enum.ts","../../../projects/kles-material-table/src/lib/modules/material.module.ts","../../../projects/kles-material-table/src/lib/table.module.ts","../../../projects/kles-material-table/src/public-api.ts","../../../projects/kles-material-table/src/3kles-kles-material-table.ts"],"sourcesContent":["import { EnumType, KlesFormColorComponent, KlesFormDateComponent, KlesFormInputClearableComponent, KlesFormSelectSearchComponent } from '@3kles/kles-material-dynamicforms';\nimport { ViewContainerRef, Injector, ComponentFactoryResolver, ComponentRef, Directive, Input, OnInit, OnChanges, SimpleChanges, Output, EventEmitter, signal } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { KlesFormDynamicHeaderFilterComponent } from '../../public-api';\nimport { KlesTableConfig } from '../models/tableconfig.model';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { SubscriptSizing } from \"@angular/material/form-field\";\n\n@Directive({\n    selector: '[klesTable]',\n    standalone: true\n})\nexport class KlesTableDirective implements OnInit, OnChanges {\n    @Input() tableConfig: KlesTableConfig;\n    @Input() lines: any[];\n    @Input() footer: any;\n\n    @Output() _onLoaded = new EventEmitter();\n    @Output() _onSelected = new EventEmitter();\n    @Output() _onChangeHeaderCell = new EventEmitter();\n    @Output() _onChangeCell = new EventEmitter();\n    @Output() _onChangeFooterCell = new EventEmitter();\n    @Output() _onStatusHeaderChange = new EventEmitter();\n\n    @Output() _onClick = new EventEmitter();\n\n    componentRef: ComponentRef<any>;\n\n    constructor(private container: ViewContainerRef) { }\n\n    ngOnInit() {\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.tableConfig) {\n            this.tableConfig = changes.tableConfig.currentValue;\n            if (this.tableConfig) {\n                this.buildComponent();\n                if (!changes.lines && !this.componentRef.instance.lines) {\n                    this.lines = [];\n                    this.componentRef.instance.lines = [];\n                }\n            }\n        }\n\n        if (changes.lines && this.componentRef) {\n            this.lines = changes.lines.currentValue;\n            this.componentRef.instance.lines = this.lines;\n        }\n\n        if (changes.footer && this.componentRef) {\n            this.footer = changes.footer.currentValue;\n            this.componentRef.instance.footer = this.footer;\n        }\n    }\n\n    buildComponent() {\n        const options = {\n            providers: [\n                {\n                    provide: 'tableService',\n                    useValue: this.tableConfig.tableService\n                },\n                ...this.tableConfig.customMatPaginatorIntl ? [{\n                    provide: MatPaginatorIntl,\n                    useClass: this.tableConfig.customMatPaginatorIntl\n                }] : []\n            ]\n        };\n        const injector: Injector = Injector.create(options);\n\n        if (this.componentRef) {\n            this.componentRef.destroy();\n        }\n\n        this.componentRef = this.container.createComponent(this.tableConfig.tableComponent, { injector });\n\n        this.componentRef.instance.columns = signal(this.tableConfig.columns.map(m => {\n            const obj = { ...m };\n            obj.headerCell.filterable = obj.filterable;\n            obj.headerCell.sortable = obj.sortable;\n\n            if ((obj.filterable || obj.headerCell.filterable) && !obj.headerCell.component && obj.headerCell.type) {\n                obj.headerCell.component = KlesFormDynamicHeaderFilterComponent;\n                switch (obj.headerCell.type) {\n                    case EnumType.date:\n                        obj.headerCell.filterComponent = KlesFormDateComponent;\n                        break;\n                    case EnumType.color:\n                        obj.headerCell.filterComponent = KlesFormColorComponent;\n                        break;\n                    case EnumType.list:\n                        obj.headerCell.filterComponent = KlesFormInputClearableComponent;\n                        obj.headerCell.autocomplete = true;\n                        obj.headerCell.options = new BehaviorSubject<any[]>([]);\n                        break;\n                    case EnumType.multi:\n                        obj.headerCell.filterComponent = KlesFormSelectSearchComponent;\n                        obj.headerCell.autocomplete = true;\n                        obj.headerCell.options = new BehaviorSubject<any[]>([]);\n                        obj.headerCell.multiple = true;\n                        break;\n                    default:\n                        obj.headerCell.filterComponent = KlesFormInputClearableComponent;\n                        break;\n                }\n            }\n            obj.headerCell.subscriptSizing = obj.headerCell.subscriptSizing || 'dynamic';\n            return obj;\n        }));\n        if (this.tableConfig.options) {\n            this.componentRef.instance.options = this.tableConfig.options;\n        }\n        if (this.tableConfig.selectionMode !== undefined) {\n            this.componentRef.instance.selectionMode = this.tableConfig.selectionMode;\n        }\n        if (this.tableConfig.sortConfig) {\n            this.componentRef.instance.sortConfig = this.tableConfig.sortConfig;\n        }\n        //PAGINATION\n        if (this.tableConfig.hidePaginator) {\n            this.componentRef.instance.hidePaginator = this.tableConfig.hidePaginator;\n        }\n        if (this.tableConfig.pageSize) {\n            this.componentRef.instance.pageSize = this.tableConfig.pageSize;\n        }\n        if (this.tableConfig.pageSizeOptions) {\n            this.componentRef.instance.pageSizeOptions = this.tableConfig.pageSizeOptions;\n        }\n        //VALIDATION\n        if (this.tableConfig.lineValidations) {\n            this.componentRef.instance.lineValidations = this.tableConfig.lineValidations;\n        }\n        if (this.tableConfig.lineAsyncValidations) {\n            this.componentRef.instance.lineAsyncValidations = this.tableConfig.lineAsyncValidations;\n        }\n        //FOOTER\n        if (this.tableConfig.showFooter) {\n            this.componentRef.instance.showFooter = this.tableConfig.showFooter;\n        }\n        if (this.tableConfig.ngClassRow) {\n            this.componentRef.instance.ngClassRow = this.tableConfig.ngClassRow;\n        }\n\n        if (this.tableConfig.multiTemplate) {\n            this.componentRef.instance.multiTemplate = this.tableConfig.multiTemplate;\n            this.componentRef.instance.templates = this.tableConfig.templates || [];\n            this.componentRef.instance.templateUnfold = this.tableConfig.templateUnfold;\n        }\n\n        this.componentRef.instance.dragDropRows = this.tableConfig.dragDropRows;\n        this.componentRef.instance.dragDropRowsOptions = { autoScrollStep: 5, ...this.tableConfig.dragDropRowsOptions };\n        this.componentRef.instance.id = this.tableConfig.id;\n\n        // this.componentRef.instance.lines = [...this.lines];\n\n        this.componentRef.instance._onChangeHeaderCell = this._onChangeHeaderCell;\n        this.componentRef.instance._onChangeCell = this._onChangeCell;\n        this.componentRef.instance._onChangeFooterCell = this._onChangeFooterCell;\n        this.componentRef.instance._onSelected = this._onSelected;\n        this.componentRef.instance._onLoaded = this._onLoaded;\n        this.componentRef.instance._onStatusHeaderChange = this._onStatusHeaderChange;\n        this.componentRef.instance._onClick = this._onClick;\n    }\n}\n","import { Directive, OnInit, Renderer2, Input, ElementRef } from \"@angular/core\";\n\n@Directive({\n    selector: \"[klesResizeColumn]\",\n    standalone: true\n})\nexport class KlesResizeColumnDirective implements OnInit {\n    @Input(\"klesResizeColumn\") resizable: boolean;\n    @Input() index: number;\n\n    private startX: number;\n    private startWidth: number;\n    private column: HTMLElement;\n    private table: HTMLElement;\n    private pressed: boolean;\n\n    constructor(private renderer: Renderer2, private el: ElementRef) {\n        this.column = this.el.nativeElement;\n    }\n\n    ngOnInit() {\n        if (this.resizable) {\n            const row = this.renderer.parentNode(this.column);\n            const thead = this.renderer.parentNode(row);\n            this.table = this.renderer.parentNode(thead);\n\n            const resizer = this.renderer.createElement(\"span\");\n            this.renderer.addClass(resizer, \"resize-holder\");\n            this.renderer.appendChild(this.column, resizer);\n            this.renderer.listen(resizer, \"mousedown\", this.onMouseDown);\n            this.renderer.listen(this.table, \"mousemove\", this.onMouseMove);\n            this.renderer.listen(\"document\", \"mouseup\", this.onMouseUp);\n        }\n    }\n\n    onMouseDown = (event: MouseEvent) => {\n        this.pressed = true;\n        this.startX = event.pageX;\n        this.startWidth = this.column.offsetWidth;\n    };\n\n    onMouseMove = (event: MouseEvent) => {\n        const offset = 35;\n        if (this.pressed && event.buttons) {\n            this.renderer.addClass(this.table, \"resizing\");\n\n            // Calculate width of column\n            let width =\n                this.startWidth + (event.pageX - this.startX - offset);\n\n            const tableCells = Array.from(this.table.querySelectorAll(\".mat-row\")).map(\n                (row: any) => row.querySelectorAll(\".mat-cell\").item(this.index)\n            );\n\n            // Set table header width\n            this.renderer.setStyle(this.column, \"width\", `${width}px`);\n\n            // Set table cells width\n            for (const cell of tableCells) {\n                this.renderer.setStyle(cell, \"width\", `${width}px`);\n            }\n        }\n    };\n\n    onMouseUp = (event: MouseEvent) => {\n        if (this.pressed) {\n            this.pressed = false;\n            this.renderer.removeClass(this.table, \"resizing\");\n        }\n    };\n}\n","import { ChangeDetectorRef, ElementRef, EmbeddedViewRef, Input, OnChanges, Renderer2, SimpleChanges, Type } from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { SafeStyle } from '@angular/platform-browser';\n\n@Directive({\n    selector: \"[klesCellStyle]\",\n    standalone: true\n})\nexport class KlesCellStyleDirective implements OnChanges {\n\n    @Input() row;\n    @Input() column;\n\n    private domElement: any;\n    private context: any;\n\n\n    constructor(private elementRef: ElementRef, cdRef: ChangeDetectorRef) {\n        this.domElement = this.elementRef.nativeElement;\n        this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const style: SafeStyle = this.context.getCellStyle(this.row, this.column);\n        if (style) {\n            this.domElement.style = style;\n        }\n\n    }\n}\n","import { IKlesFieldConfig } from '@3kles/kles-material-dynamicforms';\nimport { Directive, Input, OnInit, ComponentFactoryResolver, ViewContainerRef, ComponentRef, Type, OnChanges, SimpleChanges } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\n@Directive({\n    selector: '[klesComponentHeader]',\n    standalone: true\n})\nexport class KlesComponentHeaderDirective implements OnInit, OnChanges {\n    @Input() component: Type<any>;\n    @Input() value: any;\n    @Input() group?: UntypedFormGroup;\n    @Input() field?: IKlesFieldConfig;\n\n\n    componentRef: ComponentRef<any>;\n\n    constructor(private resolver: ComponentFactoryResolver,\n        private container: ViewContainerRef) { }\n\n    ngOnInit() {\n        this.buildComponent();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.component && !changes.component.isFirstChange()) {\n            this.component = changes.component.currentValue;\n            this.buildComponent();\n        }\n        if (changes.value && !changes.value.isFirstChange()) {\n            this.value = changes.value.currentValue;\n            this.componentRef.instance.value = this.value;\n        }\n    }\n\n    buildComponent() {\n        const factory = this.resolver.resolveComponentFactory(\n            this.component\n        );\n        if (this.componentRef) this.componentRef.destroy();\n        this.componentRef = this.container.createComponent(factory);\n        this.componentRef.instance.component = this.component;\n        this.componentRef.instance.value = this.value;\n        this.componentRef.instance.field = this.field;\n        this.componentRef.instance.group = this.group;\n    }\n}\n","import { IKlesFieldConfig } from '@3kles/kles-material-dynamicforms';\nimport { UntypedFormGroup } from '@angular/forms';\n\nexport abstract class AbstractCell<T> {\n    column: T;\n    field: IKlesFieldConfig;\n    group: UntypedFormGroup;\n    siblingFields?: T[];\n\n}\n","import { UntypedFormGroup } from '@angular/forms';\nimport { KlesTreeColumnConfig } from '../../../models/columnconfig.model';\nimport { AbstractCell } from '../../cell/cell.abstract';\n\nexport abstract class AbstractTreeCell extends AbstractCell<KlesTreeColumnConfig> {\n    row: UntypedFormGroup;\n\n    formatIndentation(node: UntypedFormGroup, step: number = 5): string {\n        return '&nbsp;'.repeat(node.value._status.depth * step);\n    }\n\n    onNodeClick(row) {\n        row.controls._status.patchValue({\n            isExpanded: !row.value._status.isExpanded\n        });\n    }\n}\n","import { Component, ViewEncapsulation } from \"@angular/core\";\nimport { AbstractCell } from \"./cell.abstract\";\nimport { KlesColumnConfig } from \"../../models/columnconfig.model\";\nimport { ReactiveFormsModule, UntypedFormGroup } from \"@angular/forms\";\nimport { IKlesCellFieldConfig } from \"../../models/cell.model\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { KlesDynamicFieldDirective } from \"@3kles/kles-material-dynamicforms\";\n\n@Component({\n    selector: 'app-kles-fold',\n    encapsulation: ViewEncapsulation.None,\n    template: `\n            <div class=\"fold-cell\">\n                @if ((!templateUnfold?.disabled || !templateUnfold?.disabled(group))) {\n                    <button mat-icon-button aria-label=\"expand row\" (click)=\"onFoldClick(group); $event.stopPropagation()\">\n                        <mat-icon> {{group.value._unfold ? 'keyboard_arrow_up' : 'keyboard_arrow_down'}} </mat-icon>\n                    </button>\n                }\n\n                <div class=\"fold-field\">\n                    <ng-container klesDynamicField [field]=\"field\"\n                    [group]=\"group\" [siblingFields]=\"siblingFields\">\n                    </ng-container>\n                </div>\n\n            </div>\n    `,\n    styles: [\n        `.fold-field {flex-grow: 1;}`,\n        `.fold-cell {display:flex; align-items:center}`\n    ],\n    standalone: true,\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        MatButtonModule,\n        MatIconModule,\n        KlesDynamicFieldDirective\n    ]\n})\n\nexport class KlesUnfoldCellComponent extends AbstractCell<KlesColumnConfig> {\n    // disabled: (row: UntypedFormGroup) => boolean;\n\n    templateUnfold: { cells: IKlesCellFieldConfig[], multiUnfold?: boolean; disabled?: (row: UntypedFormGroup) => boolean; };\n\n    onFoldClick(row: any): void {\n        row.controls._unfold.patchValue(!row.value._unfold);\n    }\n}\n","import { KlesDynamicFieldDirective } from '@3kles/kles-material-dynamicforms';\nimport { Directive, OnInit, OnChanges, OnDestroy, Input, SimpleChanges } from '@angular/core';\nimport { KlesColumnConfig } from '../models/columnconfig.model';\nimport { KlesUnfoldCellComponent } from '../component/cell/unfoldcell.component';\n\n\n@Directive({\n    selector: '[klesDynamicCell]',\n    standalone: true\n})\nexport class KlesDynamicCellDirective extends KlesDynamicFieldDirective implements OnInit, OnChanges, OnDestroy {\n\n    @Input() column: KlesColumnConfig;\n    @Input() config?: any;\n\n    ngOnInit() {\n        super.ngOnInit();\n    }\n\n\n    ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n\n    buildComponent() {\n        if (this.column.canUnfold) {\n            if (this.componentRef) { this.componentRef.destroy(); }\n            this.componentRef = this.container.createComponent(KlesUnfoldCellComponent);\n            this.componentRef.instance.field = this.field;\n            this.componentRef.instance.group = this.group;\n            this.componentRef.instance.siblingFields = this.siblingFields;\n            this.componentRef.instance.templateUnfold = this.config?.templateUnfold;\n        } else {\n            super.buildComponent();\n        }\n    }\n}\n","import { Component } from \"@angular/core\";\nimport { AbstractTreeCell } from \"./treecell.abstract\";\nimport { CommonModule } from \"@angular/common\";\nimport { KlesDynamicCellDirective } from \"../../../directives/dynamic-cell.directive\";\n\n@Component({\n    selector: 'app-kles-leaf',\n    template: `\n        <div [innerHTML]=\"formatIndentation(row)\"></div>\n        <ng-container klesDynamicCell [field]=\"field\" [group]=\"group\" [column]=\"column\" [siblingFields]=\"siblingFields\">\n        </ng-container>\n    `,\n    styles: [\n        `:host { display: inline-flex}`\n    ],\n    standalone: true,\n    imports: [\n        CommonModule,\n        KlesDynamicCellDirective\n    ]\n})\n\nexport class KlesLeafComponent extends AbstractTreeCell {\n\n}\n","import { Component, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from \"@angular/core\";\nimport { AbstractTreeCell } from \"./treecell.abstract\";\nimport { MatPaginator, MatPaginatorModule, PageEvent } from \"@angular/material/paginator\";\nimport { FormGroup, ReactiveFormsModule, UntypedFormGroup } from \"@angular/forms\";\nimport { IKlesCellFieldConfig } from \"../../../models/cell.model\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { KlesDynamicCellDirective } from \"../../../directives/dynamic-cell.directive\";\n\n@Component({\n    selector: 'app-kles-node',\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div style=\"display: flex; flex-direction: column; flex: auto;\">\n        <div style=\"display:flex; align-items: center; gap:3px\">\n            @if (column.canExpand) {\n                <div [innerHTML]=\"formatIndentation(row)\"></div>\n            }\n\n            @if (!row.getRawValue()?._status?.isBusy && row.value._status.childrenCounter > 0) {\n                <mat-icon class=\"size-16\" (click)=\"onNodeClick(row)\">\n                    {{row.value._status.isExpanded ? 'remove' : 'add'}}\n                </mat-icon>\n            }\n\n            @if (row.getRawValue()?._status?.isBusy && column.canExpand) {\n                <mat-spinner diameter=\"25\"></mat-spinner>\n            }\n\n            <ng-container klesDynamicCell [field]=\"field\"\n                [group]=\"group\" [column]=\"column\" [config]=\"{templateUnfold}\" [siblingFields]=\"siblingFields\">\n            </ng-container>\n        </div>\n\n        <div class=\"paginator\">\n            @if (column.paginator && row.value._status.childrenCounter>0 && row.value._status.isExpanded) {\n                <mat-paginator #treePaginator\n                    [length]=\"row.value._status.paginator?.length\"\n                    [pageSize]=\"row.value._status.paginator?.pageSize\"\n                    [showFirstLastButtons]=\"column.paginatorOption?.showFirstLastButtons\"\n                    [hidePageSize]=\"column.paginatorOption?.hidePageSize === undefined ? true : column.paginatorOption?.hidePageSize\"\n                    [pageSizeOptions]=\"column.paginatorOption?.pageSizeOptions || [5, 10, 25, 100]\"\n                    [pageIndex]=\"row.value._status.paginator?.pageIndex\"\n                    (page)=\"handlePageEvent($event)\">\n                </mat-paginator>\n            }\n        </div>\n\n        </div>\n\n\n    `,\n    styles: [\n        'app-kles-node mat-icon {cursor: pointer}',\n        `app-kles-node .size-16 {\n                 width: 16px;\n                 height: 16px;\n                 font-size: 16px;\n                 color:#404040;\n                 background: white;\n                 border: 1px solid #C0C0C0;margin-right:4px;}\n                 `,\n        `app-kles-node { display: inline-flex; align-items: center; flex-direction: row; width: 100%; }`,\n        `app-kles-node .mat-mdc-paginator-range-label { margin: 0px }`,\n        `app-kles-node .mat-mdc-paginator { background: transparent }`,\n        `app-kles-node .mat-mdc-paginator-range-label { min-width: max-content }`,\n        `app-kles-node .mat-mdc-paginator-container { padding: 0 2px 0 8px; min-height: auto }`,\n        `app-kles-node .paginator { display: flex; width: 100%; justify-content: end; }`,\n    ],\n    standalone: true,\n    imports: [\n        CommonModule,\n        MatIconModule,\n        MatProgressSpinnerModule,\n        MatPaginatorModule,\n        ReactiveFormsModule,\n        KlesDynamicCellDirective\n    ]\n})\n\nexport class KlesNodeComponent extends AbstractTreeCell {\n\n    templateUnfold: { cells: IKlesCellFieldConfig[], multiUnfold?: boolean; disabled?: (row: UntypedFormGroup) => boolean; }\n\n    onNodeClick(row: any): void {\n        (this.group.controls._status as FormGroup).controls.paginator?.patchValue({\n            pageIndex: 0\n        }, { emitEvent: false });\n        super.onNodeClick(row);\n    }\n\n    handlePageEvent(e: PageEvent) {\n        this.group.controls._status.patchValue({\n            paginator: {\n                pageIndex: e.pageIndex,\n                pageSize: e.pageSize,\n                length: e.length\n            }\n        });\n    }\n}\n","import { Directive, OnInit, OnChanges, OnDestroy, Input, SimpleChanges } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { KlesLeafComponent } from '../component/treetable/cell/leaf.component';\nimport { KlesNodeComponent } from '../component/treetable/cell/node.component';\nimport { KlesTreeColumnConfig } from '../models/columnconfig.model';\nimport { KlesDynamicCellDirective } from './dynamic-cell.directive';\n\n\n@Directive({\n    selector: '[klesDynamicTreeCell]',\n    standalone: true\n})\nexport class KlesDynamicTreeCellDirective extends KlesDynamicCellDirective implements OnInit, OnChanges, OnDestroy {\n\n  @Input() column: KlesTreeColumnConfig;\n  @Input() row: UntypedFormGroup;\n\n  ngOnInit() {\n    this.buildComponent();\n  }\n\n\n  ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n  }\n\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n  }\n\n  buildComponent() {\n    if (!this.column.canExpand && this.column.deleteOffset) {\n      super.buildComponent();\n    } else {\n      if (this.componentRef) { this.componentRef.destroy(); }\n      this.componentRef = this.container.createComponent(this.column.canExpand ? KlesNodeComponent : KlesLeafComponent);\n      this.componentRef.instance.field = this.field;\n      this.componentRef.instance.group = this.group;\n      this.componentRef.instance.row = this.row;\n      this.componentRef.instance.column = this.column;\n      this.componentRef.instance.templateUnfold = this.config?.templateUnfold;\n      this.componentRef.instance.siblingFields = this.siblingFields;\n    }\n  }\n}\n","import { Directive, EventEmitter, Output, SimpleChanges } from \"@angular/core\";\nimport { KlesTableDirective } from \"./table.directive\";\nimport { KlesTreeTableConfig } from \"../models/treetableconfig.model\";\nimport { Input } from \"@angular/core\";\n\n@Directive({\n    selector: '[klesTreetable]',\n    standalone: true\n})\nexport class KlesTreetableDirective extends KlesTableDirective {\n  @Input() tableConfig: KlesTreeTableConfig;\n\n  @Output() _onLineOpen = new EventEmitter();\n  @Output() _onLineClose = new EventEmitter();\n\n  ngOnInit() {\n    super.ngOnInit();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    super.ngOnChanges(changes);\n  }\n\n  buildComponent() {\n    if (this.tableConfig.deleteOffset) {\n      this.tableConfig.columns = this.tableConfig.columns.map((m) => ({\n        ...m,\n        deleteOffset: this.tableConfig.deleteOffset\n      }));\n    }\n    super.buildComponent();\n    this.componentRef.instance._onLineOpen = this._onLineOpen;\n    this.componentRef.instance._onLineClose = this._onLineClose;\n\n  }\n}\n","import { IKlesFieldConfig, KlesDynamicFieldDirective, KlesFormClearComponent, componentMapper } from \"@3kles/kles-material-dynamicforms\";\nimport { Directive, Injector, Input, OnChanges, OnDestroy, OnInit, Provider, SimpleChanges, StaticProvider, Type, ViewContainerRef } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from \"@angular/material/core\";\nimport { Options } from \"../models/options.model\";\n\n@Directive({\n    selector: '[klesDynamicHeader]',\n    standalone: true\n})\nexport class KlesDynamicHeaderDirective extends KlesDynamicFieldDirective implements OnInit, OnChanges, OnDestroy {\n    @Input() field: IKlesFieldConfig;\n    @Input() group: UntypedFormGroup;\n    @Input() siblingFields: IKlesFieldConfig[];\n    @Input() options?: Options<any>;\n\n\n    constructor(container: ViewContainerRef, private i: Injector) {\n        super(container, i)\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n    }\n\n    buildComponent() {\n        if (this.componentRef) {\n            this.componentRef.destroy();\n        }\n\n        const options: {\n            providers: (Provider | StaticProvider)[];\n            parent?: Injector;\n            name?: string;\n        } = {\n            providers: [\n                ...(this.field.providers || []),\n                ...(this.field.dateOptions ? [\n                    ...(this.field.dateOptions.adapter ? [{\n                        provide: DateAdapter,\n                        useClass: this.field.dateOptions.adapter.class,\n                        deps: this.field.dateOptions.adapter.deps || [],\n                    }] : []),\n                    { provide: MAT_DATE_LOCALE, useValue: this.field.dateOptions.language },\n                    { provide: MAT_DATE_FORMATS, useValue: this.field.dateOptions.dateFormat },\n                ] : [])\n            ],\n            parent: this.i\n        };\n\n        const injector: Injector = Injector.create(options);\n\n        this.componentRef = this.createComponentRef(injector);\n        const element = (this.componentRef.location.nativeElement as HTMLElement);\n\n        element.classList.add('full-size');\n\n\n        this.componentRef.instance.field = this.field;\n        this.componentRef.instance.group = this.group;\n        this.componentRef.instance.siblingFields = this.siblingFields;\n        this.componentRef.instance.tableOptions = this.options;\n    }\n\n}\n","import { IKlesFieldConfig, KlesDynamicFieldDirective, KlesFormClearComponent, componentMapper } from \"@3kles/kles-material-dynamicforms\";\nimport { Directive, Injector, Input, OnChanges, OnDestroy, OnInit, Provider, SimpleChanges, StaticProvider, Type, ViewContainerRef } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from \"@angular/material/core\";\nimport { Options } from \"../models/options.model\";\n\n@Directive({\n    selector: '[klesDynamicHeaderFilter]',\n    standalone: true\n})\nexport class KlesDynamicHeaderFilterDirective extends KlesDynamicFieldDirective implements OnInit, OnChanges, OnDestroy {\n    @Input() field: IKlesFieldConfig;\n    @Input() group: UntypedFormGroup;\n    @Input() siblingFields: IKlesFieldConfig[];\n\n    constructor(container: ViewContainerRef, private i: Injector) {\n        super(container, i)\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n    }\n\n    buildComponent() {\n        super.buildComponent();\n        const element = (this.componentRef?.location.nativeElement as HTMLElement);\n        element?.classList.add('full-size');\n    }\n\n}\n","import { animate, sequence, style, transition, trigger } from \"@angular/animations\";\n\nexport const rowsAnimation =\n    trigger('rowsAnimation', [\n        transition('void => *', [\n            style({ height: '*', opacity: '0', 'box-shadow': 'none' }),\n            sequence([\n                animate(\".35s ease\", style({ height: '*', opacity: '.9', 'box-shadow': 'none' })),\n                animate(\".35s ease\", style({ height: '*', opacity: 1, }))\n            ])\n        ])\n    ]);","import { MatPaginator } from \"@angular/material/paginator\";\nimport { MatSort } from \"@angular/material/sort\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { KlesColumnConfig } from \"../../models/columnconfig.model\";\n\n\nexport class KlesTableDatasource<T, P extends MatPaginator = MatPaginator> extends MatTableDataSource<T, P> {\n\n    constructor(private columns: KlesColumnConfig[], initialData?: T[]) {\n        super(initialData);\n    }\n\n    sortData: ((data: T[], sort: MatSort) => T[]) = (data: T[], sort: MatSort): T[] => {\n        const active = sort.active;\n        const direction = sort.direction;\n\n        if (!active || direction == '') {\n            return data;\n        }\n        const column = this.columns.find((col) => col.columnDef === active);\n\n        return data.sort((a, b) => {\n            let valueA: string | number;\n            let valueB: string | number;\n            if (column?.headerCell.sortPredicate) {\n                valueA = column?.headerCell.sortPredicate(a);\n                valueB = column?.headerCell.sortPredicate(b);\n            } else {\n                valueA = this.sortingDataAccessor(a, active);\n                valueB = this.sortingDataAccessor(b, active);\n                if (column?.cell?.property) {\n                    valueA = valueA?.[column.cell?.property];\n                    valueB = valueB?.[column.cell?.property];\n                }\n            }\n\n            const valueAType = typeof valueA;\n            const valueBType = typeof valueB;\n\n            if (valueAType !== valueBType) {\n                if (valueAType === 'number') {\n                    valueA += '';\n                }\n                if (valueBType === 'number') {\n                    valueB += '';\n                }\n            }\n\n            let comparatorResult = 0;\n            if (valueA != null && valueB != null) {\n                if (valueA > valueB) {\n                    comparatorResult = 1;\n                } else if (valueA < valueB) {\n                    comparatorResult = -1;\n                }\n            } else if (valueA != null) {\n                comparatorResult = 1;\n            } else if (valueB != null) {\n                comparatorResult = -1;\n            }\n            return comparatorResult * (direction == 'asc' ? 1 : -1);\n        });\n    }\n\n    public updateColumns(columns: KlesColumnConfig[]) {\n        this.columns = [...columns];\n    }\n}\n","import { ChangeDetectorRef, EmbeddedViewRef, Pipe, PipeTransform, Type } from '@angular/core';\nimport { KlesColumnConfig } from '../models/columnconfig.model';\n\n@Pipe({\n    name: 'cellPipe',\n    standalone: true\n})\nexport class CellPipe implements PipeTransform {\n\n    private context: any;\n\n    constructor(cdRef: ChangeDetectorRef) {\n        this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n    }\n\n    transform(column: KlesColumnConfig): any {\n        return {\n            'vertical-separator': this.context?.options?.verticalSeparator,\n            ...(column.align && { ['align-' + column.align]: true })\n        };\n    }\n}\n","import { ChangeDetectorRef, EmbeddedViewRef, Pipe, PipeTransform, Type } from '@angular/core';\nimport { KlesColumnConfig } from '../models/columnconfig.model';\n\n@Pipe({\n    name: 'fieldPipe',\n    pure: false,\n    standalone: true\n})\nexport class FieldPipe implements PipeTransform {\n\n  private context: any;\n\n  constructor(cdRef: ChangeDetectorRef) {\n    this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n  }\n\n  // transform(column: KlesColumnConfig, index: number): any {\n  //     if (this.context) {\n  //         return this.context.getLineFields(index, column.cell.name);\n  //     }\n  //     return null;\n  // }\n  transform(column: KlesColumnConfig, _id: any): any {\n    if (this.context) {\n      return this.context.getLineFields(_id, column.cell.name);\n    }\n    return null;\n  }\n}\n","import { ChangeDetectorRef, EmbeddedViewRef, Pipe, PipeTransform, Type } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\n@Pipe({\n    name: 'rowPipe',\n    pure: false,\n    standalone: true\n})\nexport class RowPipe implements PipeTransform {\n\n    private context: any;\n\n    constructor(cdRef: ChangeDetectorRef) {\n        this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n    }\n\n    transform(row: UntypedFormGroup): any {\n        if (this.context) {\n            return this.context.ngClassRow(row);\n        }\n        return null;\n    }\n}\n","export enum Span {\n    MAX = 'max'\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { Span } from \"../enums/span.enum\";\n\n\n@Pipe({\n    name: 'spanPipe',\n    standalone: true\n})\nexport class SpanPipe implements PipeTransform {\n\n    transform(span: number | Span, maxSize: number): number {\n        if (span === Span.MAX) {\n            return maxSize;\n        }\n        return span;\n    }\n}\n","import { ChangeDetectorRef, EmbeddedViewRef, Pipe, PipeTransform, Type } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Pipe({\n    name: 'rowDragDisabledPipe',\n    pure: false,\n    standalone: true\n})\nexport class RowDragDisabledPipe implements PipeTransform {\n\n    private context: any;\n\n    constructor(cdRef: ChangeDetectorRef) {\n        this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n    }\n\n    transform(row: UntypedFormGroup): any {\n        if (this.context && this.context.dragDropRowsOptions.dragDisabled) {\n            return this.context.dragDropRowsOptions.dragDisabled(row);\n        }\n        return false;\n    }\n}\n","import { Pipe, PipeTransform, ChangeDetectorRef, EmbeddedViewRef, Type } from '@angular/core';\n@Pipe({\n    name: 'groupPipe',\n    pure: true,\n    standalone: true\n})\nexport class GroupPipe implements PipeTransform {\n\n  private context: any;\n\n  constructor(cdRef: ChangeDetectorRef) {\n    this.context = ((cdRef as EmbeddedViewRef<Type<any>>).context);\n  }\n\n  transform(index: any): any {\n    if (this.context) {\n      return this.context.getControls(index);\n    }\n    return null;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'elevationPipe',\n    pure: true,\n    standalone: true\n})\nexport class ElevationPipe implements PipeTransform {\n\n    constructor() {\n    }\n\n    transform(elevation: number): any {\n        return `mat-elevation-z${elevation || 0}`;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\nimport { PageEvent } from '@angular/material/paginator';\nimport { SafeStyle } from '@angular/platform-browser';\nimport { IChangeCell, IChangeHeaderFooterCell, IChangeLine } from '../models/cell.model';\nimport { KlesColumnConfig } from '../models/columnconfig.model';\nimport { Subject } from 'rxjs';\nimport { SelectionChange } from '@angular/cdk/collections';\n@Injectable({\n    providedIn: 'root'\n})\nexport abstract class AbstractKlesTableService {\n\n    protected table: any;\n    public onSelectIndeterminate: Subject<boolean> = new Subject<boolean>();\n\n    //Selection\n    abstract onSelectionChange(changed: SelectionChange<any>);\n\n    //Header\n    abstract onHeaderChange(e: any);\n    abstract onHeaderCellChange(e: IChangeHeaderFooterCell);\n    abstract onStatusHeaderChange(e: any);\n\n    //Line\n    abstract onLineChange(e: IChangeLine);\n    abstract onStatusLineChange(e: any);\n    abstract onCellChange(e: IChangeCell);\n    abstract onStatusCellChange(e: any);\n    abstract onClick(e: any);\n\n    //drag and drop\n    abstract drop(e: any);\n    abstract getSortPredicate(index: number, item: any): boolean;\n\n    //Footer\n    abstract onFooterChange(e: any);\n    abstract onFooterCellChange(e: IChangeHeaderFooterCell);\n\n    abstract onDataLoaded();\n\n    abstract getCellStyle(row: any, column: KlesColumnConfig): SafeStyle;\n    abstract getFooterStyle(column: KlesColumnConfig): SafeStyle;\n\n    //Sorting\n    abstract getSortingDataAccessor(item: AbstractControl, property);\n\n    //Pagination\n    abstract onPageChange(e: PageEvent);\n\n    //Manage Record\n    abstract addRecord(record, index?: number): UntypedFormGroup;\n    abstract deleteRecord(record);\n    abstract updateRecord(record, options?: { emitEvent: boolean, onlySelf: boolean });\n\n    abstract unfoldPredicate: ((index, data) => boolean);\n\n    /**Setters */\n    public setTable(table: any) {\n        this.table = table;\n    }\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport {\n  AfterViewInit, Component, OnInit, ViewChild, EventEmitter,\n  Input, Output, OnChanges, SimpleChanges, ChangeDetectionStrategy,\n  ChangeDetectorRef, Inject, OnDestroy, signal, computed, ElementRef\n} from '@angular/core';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_FORMATS, MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { AbstractControl, AsyncValidatorFn, ReactiveFormsModule, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, ValidatorFn } from '@angular/forms';\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatSort, MatSortModule, Sort } from '@angular/material/sort';\nimport { MatDialog } from '@angular/material/dialog';\nimport { KlesColumnConfig } from '../../models/columnconfig.model';\nimport { Options } from '../../models/options.model';\nimport { Node } from '../../models/node.model';\nimport { componentMapper, IKlesFieldConfig, KlesComponentDirective, KlesDynamicFieldDirective, klesFieldControlFactory } from '@3kles/kles-material-dynamicforms';\nimport * as uuid from 'uuid';\nimport * as _ from 'lodash';\nimport { catchError, debounceTime, map, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { IChangeCell, IChangeHeaderFooterCell, IDropRow, IKlesCellFieldConfig } from '../../models/cell.model';\nimport { AbstractKlesTableService } from '../../services/abstracttable.service';\nimport { of, Subject } from 'rxjs';\nimport { rowsAnimation } from '../../animations/row.animation';\n\nimport { CdkDragDrop, CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';\nimport { Span } from '../../enums/span.enum';\nimport { KlesTableDatasource } from './table.datasource';\nimport { IKlesHeaderFieldConfig } from '../../models/header-field.config.model';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CellPipe } from '../../pipe/cell.pipe';\nimport { FieldPipe } from '../../pipe/field.pipe';\nimport { RowPipe } from '../../pipe/row.pipe';\nimport { SpanPipe } from '../../pipe/span.pipe';\nimport { KlesDynamicCellDirective } from '../../directives/dynamic-cell.directive';\nimport { RowDragDisabledPipe } from '../../pipe/rowdragdisabled.pipe';\nimport { GroupPipe } from '../../pipe/group.pipe';\nimport { ElevationPipe } from '../../pipe/elevation.pipe';\nimport { KlesDynamicHeaderDirective } from '../../directives/dynamic-header.directive';\nimport { KlesResizeColumnDirective } from '../../directives/resizecolumn.directive';\n\n\n@Component({\n    selector: 'app-kles-dynamictable',\n    templateUrl: './table.component.html',\n    styleUrls: ['./table.component.scss', '../../styles/dragdrop.scss', '../../styles/align-cell.scss', '../../styles/input.scss'],\n    animations: [rowsAnimation],\n    providers: [\n        { provide: MAT_DATE_LOCALE, useValue: 'fr-FR' },\n        {\n            provide: DateAdapter,\n            useClass: MomentDateAdapter,\n            deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n        },\n        { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS },\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n      CommonModule,\n      ReactiveFormsModule,\n      MatTableModule,\n      MatSortModule,\n      MatPaginatorModule,\n      MatFormFieldModule,\n      MatInputModule,\n      MatIconModule,\n      MatButtonModule,\n      MatTooltipModule,\n      MatProgressSpinnerModule,\n      DragDropModule,\n      ScrollingModule,\n      CdkTableModule,\n      KlesDynamicCellDirective,\n      KlesDynamicHeaderDirective,\n      KlesDynamicFieldDirective,\n      KlesComponentDirective,\n      KlesResizeColumnDirective,\n      RowPipe,\n      CellPipe,\n      FieldPipe,\n      SpanPipe,\n      RowDragDisabledPipe,\n      GroupPipe,\n      ElevationPipe\n    ]\n})\n\nexport class KlesTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  public paginator: MatPaginator;\n  public sort: MatSort;\n  protected sortDefault = false;\n\n  protected _onDestroy = new Subject<void>();\n  protected _onLinesChanges = new Subject<void>();\n  protected _onSelectionModeChanges = new Subject<void>();\n\n  @ViewChild(MatSort, { static: false }) set matSort(ms: MatSort) {\n    if (!this.sort) {\n      this.sort = ms;\n      this.setDataSourceAttributes();\n    }\n  }\n\n  @ViewChild(MatPaginator, { static: true }) set matPaginator(mp: MatPaginator) {\n    if (!this.paginator) {\n      this.paginator = mp;\n      this.setDataSourceAttributes();\n    }\n  }\n\n  @ViewChild(MatTable) matTable: MatTable<any>;\n\n  /** Input Component */\n  @Input() id: string;\n\n  @Input() _lines: Node[] = [];\n  @Input() set lines(lines: any | any[]) {\n    this.selection?.clear();\n    this.updateData(lines);\n  }\n\n  @Input() _footer: any = {};\n  @Input() set footer(footer: any) {\n    if (footer) {\n      this.updateFooter(footer);\n    }\n  }\n\n  @Input() columns = signal<KlesColumnConfig[]>([]);\n  @Input() set selectionMode(selectionMode: boolean) {\n    this._onSelectionModeChanges.next();\n    this.selection = new SelectionModel<any>(selectionMode);\n    this.listenSelection();\n\n  }\n  @Input() options: Options<any> = {\n    verticalSeparator: true,\n    capitalisedHeader: true,\n    highlightRowOnHover: true,\n    elevation: 4,\n    fullsize: false\n  };\n\n  @Input() sortConfig: Sort;\n  @Input() hidePaginator: boolean = false;\n  @Input() pageSize = 10;\n  @Input() pageSizeOptions = [5, 10, 20, 25, 50];\n  @Input() showFooter: boolean = false;\n  @Input() dragDropRows: boolean = false;\n  @Input() dragDropRowsOptions: any = { autoScrollStep: 5 };\n\n  @Input() lineValidations: ValidatorFn[];\n  @Input() lineAsyncValidations: AsyncValidatorFn[];\n\n  @Input() ngClassRow: (row: UntypedFormGroup) => any = ((row) => ({ 'highlight-on-hover': this.options.highlightRowOnHover }));\n\n  @Input() multiTemplate: boolean = false;\n  @Input() templates: { cells: (IKlesCellFieldConfig & { colspan?: number | Span, rowspan?: number })[], when?: ((index: number, rowData: any) => boolean) }[] = [];\n  @Input() templateUnfold: { cells: (IKlesCellFieldConfig & { colspan?: number | Span, rowspan?: number })[], multiUnfold?: boolean; disabled?: (row: UntypedFormGroup) => boolean; };\n\n  /** Output Component */\n  @Output() _onLoaded = new EventEmitter();\n  @Output() _onSelected = new EventEmitter<AbstractControl[]>();\n  @Output() _onChangeHeaderCell = new EventEmitter<IChangeHeaderFooterCell>();\n  @Output() _onChangeCell = new EventEmitter<IChangeCell>();\n  @Output() _onChangeFooterCell = new EventEmitter<IChangeHeaderFooterCell>();\n  @Output() _onStatusHeaderChange = new EventEmitter();\n  @Output() _onStatusLineChange = new EventEmitter();\n  @Output() _onStatusCellChange = new EventEmitter();\n  @Output() _onClick = new EventEmitter();\n  @Output() _onDragDropRow = new EventEmitter<IDropRow>();\n\n  // Table\n  formHeader: UntypedFormGroup;\n  form: UntypedFormGroup;\n  formFooter: UntypedFormGroup;\n\n  lineFields: IKlesFieldConfig[][];\n  listFields: { _id: any, fields: IKlesFieldConfig[] }[];\n  dataSource = new KlesTableDatasource<AbstractControl>([], []);\n  selection = new SelectionModel<AbstractControl>(true);\n\n  renderedData: any[]; // data from the datasource\n\n  displayedColumns = computed(() => this.columns().filter(e => e.visible).map(c => c.columnDef));\n\n  protected _resizeObserver: ResizeObserver;\n\n  constructor(\n    protected adapter: DateAdapter<any>,\n    protected fb: UntypedFormBuilder,\n    public ref: ChangeDetectorRef,\n    protected dialog: MatDialog,\n    public sanitizer: DomSanitizer,\n    public _adapter: DateAdapter<any>,\n    //@Inject('tableService') public tableService: DefaultKlesTableService\n    @Inject('tableService') public tableService: AbstractKlesTableService,\n    protected _elementRef: ElementRef\n  ) {\n    this.tableService.setTable(this);\n  }\n\n  ngOnDestroy(): void {\n    this._onLinesChanges.next();\n    this._onDestroy.next();\n    this._onSelectionModeChanges.next();\n    this._onLinesChanges.complete();\n    this._onDestroy.complete();\n    this._onSelectionModeChanges.complete();\n\n    this._resizeObserver.disconnect()\n  }\n\n  ngOnInit() {\n    this._resizeObserver = new ResizeObserver(() => {\n      this.matTable?.updateStickyColumnStyles();\n    });\n    this._resizeObserver.observe(this._elementRef.nativeElement);\n\n    this.dataSource.connect().subscribe(d => {\n      this.renderedData = d;\n    });\n\n    this.dataSource.updateColumns(this.columns());\n    this.formHeader = this.initFormHeader();\n    this.formFooter = this.initFormFooter();\n    this.listenSelection();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // console.log('changes', changes);\n    // if (changes.columns) {\n    //     this.columns = changes.columns.currentValue;\n    //     this.formHeader = this.initFormHeader();\n    // }\n    // if (changes.lines) {\n    //     this.updateData(changes.lines.currentValue);\n    // }\n    // if (changes.selectionMode) {\n    //     this.selectionMode = changes.selectionMode.currentValue;\n    //     this.selection = new SelectionModel<any>(this.selectionMode);\n    // }\n    // if (changes.footer) {\n\n    // }\n  }\n\n  ngAfterViewInit() {\n    this.matTable?.updateStickyColumnStyles();\n\n  }\n\n  trackById(index: number, item: UntypedFormGroup): any {\n    return item;\n  }\n\n  /** Form Header */\n  initFormHeader() {\n    const group = this.fb.group({});\n    this.columns().forEach(column => {\n      const { pipeTransform, ...tmpCell } = column.headerCell;\n      let colCellHeader: IKlesHeaderFieldConfig = _.cloneDeep(tmpCell);\n      colCellHeader = { pipeTransform, ...colCellHeader };\n      colCellHeader.name = column.columnDef;\n      const control = this.buildControlField(colCellHeader, colCellHeader.value);\n      control.valueChanges.pipe(takeUntil(this._onDestroy),\n        debounceTime(colCellHeader.debounceTime || 0)\n      ).subscribe(e => {\n        const group = control.parent;\n        this._onChangeHeaderCell.emit({ column, group });\n        this.tableService.onHeaderCellChange({ column, group });\n      });\n      group.addControl(colCellHeader.name, control);\n    });\n\n    group.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe(e => {\n      this.tableService.onHeaderChange(e);\n    });\n    group.statusChanges.subscribe(e => {\n      this.tableService.onStatusHeaderChange(e);\n      this._onStatusHeaderChange.emit(e);\n    });\n    return group;\n  }\n\n  /** Form Array Line Table */\n  initFormArray() {\n    this.lineFields = [];\n    this.listFields = [];\n    this._onLinesChanges.next();\n    const array = this.fb.array(this._lines.map((row) => {\n      return this.addFormLine(row);\n    }));\n    return array;\n  }\n\n  addFormLine(row): UntypedFormGroup {\n    const group = this.fb.group({});\n    const idControl = this.fb.control(row._id);\n    const indexControl = this.fb.control(row._index);\n    const unfoldControl = this.fb.control(row._unfold || false);\n    group.addControl('_id', idControl);\n    group.addControl('_index', indexControl);\n    group.addControl('_unfold', unfoldControl);\n    const listField = [];\n    this.columns().forEach(column => {\n      column.cell.name = column.columnDef;\n      const { pipeTransform, ...tmpCell } = column.cell;\n      let colCell: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n      colCell = { pipeTransform, ...colCell };\n      const control = this.buildControlField(colCell, row.value[colCell.name]);\n      listField.push(colCell);\n      control.valueChanges.pipe(\n        takeUntil(this._onLinesChanges),\n        debounceTime(colCell.debounceTime || 0),\n        switchMap((value) => {\n          if (colCell.executeAfterChange) {\n            colCell.pending = true;\n            this.ref.markForCheck();\n            return colCell.executeAfterChange(colCell.name,\n              { ...control?.parent.value, [colCell.name]: value }, control?.parent)\n              .pipe(\n                take(1),\n                catchError((err) => {\n                  console.error(err);\n                  return of(null);\n                }),\n                map((response) => ({ value, response })),\n                tap(() => {\n                  colCell.pending = false;\n                  this.ref.markForCheck();\n                })\n              );\n          }\n          return of({ value, response: null });\n        })\n      ).subscribe(e => {\n        const group = control.parent;\n        this.tableService.onCellChange({ column, row: { ...group.value, [colCell.name]: e.value }, group, response: e.response });\n        this._onChangeCell.emit({ column, row: { ...group.value, [colCell.name]: e.value }, group, response: e.response });\n      });\n      control.statusChanges.pipe(takeUntil(this._onLinesChanges)).subscribe(status => {\n        const group = control.parent;\n        this.tableService.onStatusCellChange({ cell: control, group, status });\n        this._onStatusCellChange.emit({ cell: control, group, status });\n      });\n\n      group.addControl(column.cell.name, control);\n    });\n    this.lineFields.push(listField);\n    this.listFields.push({ _id: row._id, fields: listField });\n\n    if (this.multiTemplate) {\n      if (this.templateUnfold) {\n        this.templateUnfold.cells.forEach((cell) => {\n          const { pipeTransform, ...tmpCell } = cell;\n          let field: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n          field = { pipeTransform, ...field };\n          const control = this.buildControlField(field, row.value[cell.name]);\n          group.addControl(cell.name, control);\n        })\n      }\n      if (this.templates?.length) {\n        this.templates.forEach(template => {\n          template.cells.forEach((cell) => {\n            const { pipeTransform, ...tmpCell } = cell;\n            let field: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n            field = { pipeTransform, ...field };\n            const control = this.buildControlField(field, row.value[cell.name]);\n            group.addControl(cell.name, control);\n          })\n\n        });\n      }\n    }\n\n    group.setValidators(this.lineValidations);\n    group.setAsyncValidators(this.lineAsyncValidations);\n\n    group.valueChanges.pipe(takeUntil(this._onLinesChanges)).subscribe(value => {\n      this.tableService.onLineChange({ group, row, value });\n    });\n\n    group.statusChanges.subscribe(status => {\n      this.tableService.onStatusLineChange({ group, row, status });\n      this._onStatusLineChange.emit({ group, row, status });\n    });\n    return group;\n  }\n\n  public updateFormCell(index: number, cell: IKlesCellFieldConfig) {\n    const cellIndex = this.lineFields[index].findIndex(field => field.name === cell.name);\n    const column = this.columns().find(col => col.columnDef === cell.name);\n\n    const group = ((this.form.controls.rows as UntypedFormArray).controls\n      .find((c: UntypedFormGroup) => c.controls._index.value === index));\n\n    if (cellIndex >= 0 && column && group) {\n      const { pipeTransform, ...tmpCell } = cell;\n      let lineField: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n      lineField = { pipeTransform, ...lineField };\n      this.lineFields[index][cellIndex] = lineField;\n      let colCell: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n      colCell = { pipeTransform, ...colCell };\n\n      const control = this.buildControlField(colCell, group.value[cell.name] || cell.value);\n\n      (group as UntypedFormGroup).setControl(cell.name, control);\n\n      control.valueChanges.pipe(takeUntil(this._onLinesChanges),\n        debounceTime(colCell.debounceTime || 0),\n        switchMap((value) => {\n          if (colCell.executeAfterChange) {\n            colCell.pending = true;\n            this.ref.markForCheck();\n            return colCell.executeAfterChange(colCell.name,\n              { ...control?.parent.value, [colCell.name]: value }, control?.parent)\n              .pipe(\n                take(1),\n                catchError((err) => {\n                  console.error(err);\n                  return of(null);\n                }),\n                map((response) => ({ value, response })),\n                tap(() => {\n                  colCell.pending = false;\n                  this.ref.markForCheck();\n                })\n              );\n          }\n          return of({ value, response: null });\n        }))\n        // distinctUntilChanged((prev, curr) => {\n        //     if (column.cell?.property && prev && curr) {\n        //         return prev[column.cell.property] === curr[column.cell.property];\n        //     }\n        //     return prev === curr;\n        // }))\n        .subscribe(e => {\n          const parent = control.parent;\n          this.tableService.onCellChange({ column, row: { ...parent.value, [cell.name]: e.value }, group: parent, response: e.response });\n          this._onChangeCell.emit({ column, row: { ...parent.value, [cell.name]: e.value }, group: parent, response: e.response });\n        });\n\n      control.statusChanges.pipe(takeUntil(this._onLinesChanges)).subscribe(status => {\n        const parent = control.parent;\n        this.tableService.onStatusCellChange({ cell: control, group: parent, status });\n        this._onStatusCellChange.emit({ cell: control, group: parent, status });\n      });\n      this.ref.markForCheck();\n\n    }\n  }\n\n  /** Form Footer */\n  initFormFooter() {\n    const group = this.fb.group({});\n    this.columns()\n      .filter((column) => column.footerCell)\n      .forEach(column => {\n        const colCellFooter = column.footerCell;\n        colCellFooter.name = column.columnDef;\n        const control = this.buildControlField(colCellFooter, this._footer[colCellFooter.name]);\n        control.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe(e => {\n          const parent = control.parent;\n          const change: IChangeHeaderFooterCell = { column, group: parent };\n          this._onChangeFooterCell.emit(change);\n          this.tableService.onFooterCellChange(change);\n        });\n        group.addControl(colCellFooter.name, control);\n      });\n\n    group.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe(e => {\n      this.tableService.onFooterChange(e);\n    });\n    return group;\n  }\n\n  /**Field and control */\n  buildControlField(field: IKlesFieldConfig, value?: any): AbstractControl {\n\n    const asyncValidations = field.asyncValidations?.map(asyncValisation => {\n      const klesValidator = { ...asyncValisation };\n      const validatorFn = ((c: AbstractControl) => {\n        const validator$ = klesValidator.validator(c);\n        if (validator$ instanceof Promise) {\n          return validator$.finally(() => this.ref.markForCheck());\n        } else {\n          return validator$.pipe(tap(() => this.ref.markForCheck()));\n        }\n      });\n      asyncValisation.validator = validatorFn;\n      return asyncValisation;\n    }) || [];\n\n\n    if (field.type) {\n      return componentMapper.find(c => c.type === field.type)?.factory({ ...field, value, asyncValidations }) || klesFieldControlFactory({ ...field, value, asyncValidations });\n    } else {\n      return componentMapper.find(c => c.component === field.component)?.factory({ ...field, value, asyncValidations }) || klesFieldControlFactory({ ...field, value, asyncValidations });\n    }\n  }\n\n  getFormArray(): UntypedFormArray {\n    return (this.form.get('rows') as UntypedFormArray);\n  }\n\n  getFilterFormArray(): UntypedFormGroup[] {\n    // return this.fb.array(this.renderedData);\n    return this.renderedData;\n  }\n\n  getActualIndex(index: number) {\n    if (this.paginator && !this.hidePaginator) {\n      return index + this.paginator.pageSize * this.paginator.pageIndex;\n    }\n    return index;\n  }\n\n  getControls(_id: any) {\n    //console.log('GetControls index=', index, \"=\", (this.form.get('rows') as FormArray).controls);\n    //(this.form.get('rows') as FormArray).push\n    //(this.form.get('rows') as FormArray).removeAt(index)\n    //return (this.form.get('rows') as FormArray).controls[index];\n    // return this.getFilterFormArray().controls[this.getActualIndex(index)];\n    // return this.getFilterFormArray().controls[index];\n    // return this.getFilterFormArray()[index];\n    const group = this.getFilterFormArray().find((f) => f.getRawValue()._id === _id);\n    return group;\n  }\n\n  getSiblingFields(row: any): IKlesCellFieldConfig[] {\n    // console.log('Row id=', row.value?._id);\n    // console.log('List field=', this.listFields);\n    const listField = this.listFields.find((f) => f._id === row?.value?._id)?.fields;\n    return listField;\n  }\n\n  // getLineFields(index, key) {\n  //   // return this.lineFields[this.getActualIndex(index)].find(f => f.name === key);\n  //   return this.lineFields[index].find(f => f.name === key);\n  // }\n\n  getLineFields(_id, key) {\n    // return this.lineFields[index].find(f => f.name === key);\n    const listField = this.listFields.find((f) => f._id === _id);\n    if (listField) {\n      return listField.fields.find((f) => f.name === key);\n    }\n  }\n\n  /**Manage Data */\n\n  /**\n* Method to set the data lines to datasource table\n*/\n  protected setItems() {\n    this.form = this.fb.group({\n      rows: this.initFormArray()\n    });\n\n    this.dataSource.data = this.getFormArray().controls;\n    this.dataSource.filteredData = this.getFormArray().controls;\n\n    this._onLoaded.emit();\n    this.tableService.onDataLoaded();\n  }\n\n  updateFooter(footer: any) {\n    this._footer = { ...footer };\n\n    if (!this.formFooter) {\n      this.formFooter = this.initFormFooter();\n    }\n    else {\n      this.formFooter.patchValue(footer);\n    }\n  }\n\n  updateData(lines: any[]) {\n    this._lines = lines.map((l, index) => {\n      const data = { ...l };\n      const options = data.options;\n      const _id = l._id || uuid.v4();\n      const _unfold = l._unfold || false;\n      const _index = index;\n\n      delete data._id;\n      delete data.options;\n      return {\n        _id,\n        _unfold,\n        _index,\n        ...options && { options },\n        value: data,\n\n      };\n    });\n    this.setItems();\n  }\n\n  setDataSourceAttributes() {\n    if (!this.hidePaginator) {\n      this.dataSource.paginator = this.paginator;\n    } else {\n      this.dataSource.paginator = null;\n    }\n\n    if (this.sort) {\n      this.dataSource.sort = this.sort;\n      this.tableService.setTable(this);\n      this.dataSource.sortingDataAccessor = this.tableService.getSortingDataAccessor;\n      if (this.paginator && !this.hidePaginator) {\n        this.sort.sortChange.subscribe(() => {\n          this.paginator.pageIndex = 0;\n        });\n      }\n      if (!this.sortDefault && this.sortConfig) {\n        // console.log('Active default sort');\n        this.sort.active = this.sortConfig.active;\n        this.sort.direction = this.sortConfig.direction;\n        this.sort.sortChange.emit(this.sortConfig);\n        this.sortDefault = !this.sortDefault;\n      }\n    }\n  }\n\n  public getSelectedLines(): any[] {\n    return this.getFormArray().controls.filter(f => this.selection.isSelected(f));\n  }\n\n  /** Table rendering */\n\n  /**\n   * Method to rendering cell color\n   * @param row\n   * @param column\n   */\n  getCellStyle(row: any, column: KlesColumnConfig): SafeStyle {\n    return this.tableService.getCellStyle(row, column);\n  }\n\n  getFooterStyle(column: KlesColumnConfig): SafeStyle {\n    return this.tableService.getFooterStyle(column);\n  }\n\n  /**\n   * Method to check if column is sticky\n   * @param column\n   */\n  // isSticky(column: KlesColumnConfig): boolean {\n  //     console.log('isSticky')\n  //     return column.sticky || false;\n  // }\n\n  formatElevation(): string {\n    return `mat-elevation-z${this.options.elevation}`;\n  }\n\n  public isSortingDisabled(column: KlesColumnConfig): boolean {\n    return column.sortable || false;\n  }\n\n  public listenSelection() {\n    this.selection.changed\n      .pipe(\n        takeUntil(this._onSelectionModeChanges)\n      )\n      .subscribe((changed) => {\n        this.tableService.onSelectionChange(changed)\n      });\n  }\n\n  public setVisible(name: string, visible: boolean): void {\n    this.columns.update((columns) => {\n      const column = columns.find(col => col.columnDef === name);\n      if (column) {\n        column.visible = visible;\n      }\n      return [...columns];\n    });\n  }\n\n  public pageChanged(event: PageEvent) {\n    this.tableService.onPageChange(event);\n  }\n\n  public getTemplateColumns(template: any): string[] {\n    return template.cells.map(c => c.name);\n  }\n\n  public onClick(row: UntypedFormGroup) {\n    this._onClick.emit(row);\n    this.tableService.onClick(row);\n  }\n\n  public drop(event: CdkDragDrop<UntypedFormGroup[]>) {\n    this.tableService.drop(event);\n  }\n\n  public sortPredicate() {\n    return ((index: number, item: CdkDrag<number>) => {\n      return this.tableService?.getSortPredicate(index, item);\n    })\n  }\n}\n","<div [ngClass]=\"!options.fullsize ? (options.elevation | elevationPipe) : 'fullsize'\" class=\"container-table\">\n  <form class=\"dynamic-form\" [ngClass]=\"{fullsize: options.fullsize}\" [formGroup]=\"form\" cdkScrollable>\n    <table [id]=\"id\" mat-table matSort [dataSource]=\"dataSource\" formArrayName=\"rows\"\n      [trackBy]=\"multiTemplate ? null : trackById\" [multiTemplateDataRows]=\"multiTemplate\" cdkDropList\n      (cdkDropListDropped)=\"drop($event)\" [cdkDropListData]=\"this\" [cdkDropListDisabled]=\"!dragDropRows\"\n      [cdkDropListAutoScrollStep]=\"dragDropRowsOptions.autoScrollStep\" [cdkDropListSortPredicate]=\"sortPredicate()\"\n      [cdkDropListConnectedTo]=\"dragDropRowsOptions.connectedTo\">\n\n      @for (column of columns(); track column.columnDef) {\n      <ng-container [cdkColumnDef]=\"column.columnDef\" [sticky]=\"column.sticky || false\"\n        [stickyEnd]=\"column.stickyEnd || false\">\n        <th mat-header-cell *matHeaderCellDef [klesResizeColumn]=\"column.resizable\" class=\"{{column.ngClass}}\"\n          [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n\n          <ng-container klesDynamicHeader [field]=\"column.headerCell\" [group]=\"formHeader\" [options]=\"options\">\n          </ng-container>\n\n        </th>\n        <div>\n          @if (multiTemplate) {\n          <td mat-cell *cdkCellDef=\"let row;let index = dataIndex;\" [style]=\"getCellStyle(row,column)\"\n            [ngClass]=\"column | cellPipe\">\n            <ng-container klesDynamicCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n              [siblingFields]=\"getSiblingFields(row)\" [column]=\"column\" [config]=\"{templateUnfold}\">\n            </ng-container>\n          </td>\n          }\n          @else {\n          <td mat-cell *cdkCellDef=\"let row;let index = index;\" [style]=\"getCellStyle(row,column)\"\n            [ngClass]=\"column | cellPipe\">\n            <ng-container klesDynamicCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n              [siblingFields]=\"getSiblingFields(row)\" [column]=\"column\" [config]=\"{templateUnfold}\">\n            </ng-container>\n          </td>\n          }\n\n          <td mat-footer-cell *matFooterCellDef [style]=\"getFooterStyle(column)\">\n            @if (column.footerCell) {\n            <ng-container klesDynamicField [field]=\"column.footerCell\" [group]=\"formFooter\">\n            </ng-container>\n            }\n          </td>\n        </div>\n      </ng-container>\n      }\n\n\n      @if (templateUnfold && multiTemplate) {\n      @for (cell of templateUnfold.cells; track cell.name) {\n      <ng-container [matColumnDef]=\"cell.name\">\n        <td mat-cell *matCellDef=\"let row;let index = dataIndex;\"\n          [attr.colspan]=\"cell.colspan | spanPipe:displayedColumns().length\" [attr.rowspan]=\"cell.rowspan\"\n          [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n          <ng-container klesDynamicField [field]=\"cell\" [group]=\"row.value._id | groupPipe\"\n            [siblingFields]=\"getSiblingFields(row)\">\n          </ng-container>\n        </td>\n      </ng-container>\n      }\n      }\n\n      @for (template of templates; track template) {\n      @for (cell of template.cells; track cell.name) {\n      <ng-container [matColumnDef]=\"cell.name\">\n        <td mat-cell *matCellDef=\"let row;let index = dataIndex;\"\n          [attr.colspan]=\"cell.colspan | spanPipe: displayedColumns().length\" [attr.rowspan]=\"cell.rowspan\"\n          [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n          <ng-container klesDynamicField [field]=\"cell\" [group]=\"row.value._id | groupPipe\">\n          </ng-container>\n        </td>\n      </ng-container>\n      }\n      }\n\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns();sticky: true;\"></tr>\n      <tr mat-row [ngClass]=\"(row | rowPipe)\" *matRowDef=\"let row; columns: displayedColumns();\" (click)=\"onClick(row)\"\n        cdkDrag [cdkDragData]=\"row\" [cdkDragDisabled]=\"(row | rowDragDisabledPipe)\" [@rowsAnimation]=\"\">\n\n        @if (dragDropRowsOptions?.dragPreview?.component) {\n        <ng-template cdkDragPreview [matchSize]=\"true\">\n          <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPreview?.component\" [value]=\"row\">\n          </ng-container>\n        </ng-template>\n        }\n\n        @if (dragDropRowsOptions?.dragPlaceholder?.component) {\n        <ng-template cdkDragPlaceholder>\n          <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPlaceholder?.component\" [value]=\"row\">\n          </ng-container>\n        </ng-template>\n        }\n      </tr>\n\n      @if (multiTemplate) {\n      @if (templateUnfold) {\n      <tr mat-row [@rowsAnimation]=\"\"\n        *matRowDef=\"let row; columns: getTemplateColumns(templateUnfold); when: tableService.unfoldPredicate\"></tr>\n      }\n\n      @for (template of templates; track template) {\n      <tr mat-row [ngClass]=\"row | rowPipe\" [@rowsAnimation]=\"\"\n        *matRowDef=\"let row; columns: getTemplateColumns(template); when: template.when\"></tr>\n      }\n      }\n\n      @if (showFooter) {\n      <div>\n        <tr mat-footer-row *matFooterRowDef=\"displayedColumns();sticky: true\">\n        </tr>\n      </div>\n      }\n    </table>\n\n  </form>\n  <div [hidden]=\"hidePaginator\">\n    <mat-paginator #paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" [showFirstLastButtons]=\"true\"\n      (page)=\"pageChanged($event)\">\n    </mat-paginator>\n  </div>\n</div>\n","import { Observable } from 'rxjs';\nimport { AbstractKlesTableService } from '../abstracttable.service';\n\nexport abstract class AbstractKlesLazyTableService extends AbstractKlesTableService {\n\n    abstract load(sort: string, order: string, page: number, perPage: number, filter?: { [key: string]: any; })\n        : Observable<{ lines: any[], totalCount: number, footer?: any, header?: any, indeterminate?: boolean }>;\n\n    abstract reload(): void;\n}\n","import { AfterViewChecked, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, signal } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';\nimport { DateAdapter } from '@angular/material/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { BehaviorSubject, concat, merge, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, map, skip, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { AbstractKlesLazyTableService } from '../../services/lazy/abstractlazytable.service';\nimport { KlesTableComponent } from '../table/table.component';\nimport { rowsAnimation } from '../../animations/row.animation';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CellPipe } from '../../pipe/cell.pipe';\nimport { ElevationPipe } from '../../pipe/elevation.pipe';\nimport { FieldPipe } from '../../pipe/field.pipe';\nimport { RowPipe } from '../../pipe/row.pipe';\nimport { SpanPipe } from '../../pipe/span.pipe';\nimport { KlesDynamicCellDirective } from '../../directives/dynamic-cell.directive';\nimport { KlesComponentDirective, KlesDynamicFieldDirective } from '@3kles/kles-material-dynamicforms';\nimport { RowDragDisabledPipe } from '../../pipe/rowdragdisabled.pipe';\nimport { GroupPipe } from '../../pipe/group.pipe';\nimport { KlesDynamicHeaderDirective } from '../../directives/dynamic-header.directive';\nimport { KlesResizeColumnDirective } from '../../directives/resizecolumn.directive';\n\n@Component({\n    selector: 'app-kles-lazytable',\n    templateUrl: './lazytable.component.html',\n    styleUrls: ['./lazytable.component.scss', '../../styles/dragdrop.scss', '../../styles/align-cell.scss', '../../styles/input.scss'],\n    animations: [rowsAnimation],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n      CommonModule,\n      ReactiveFormsModule,\n      FormsModule,\n      MatTableModule,\n      MatSortModule,\n      MatPaginatorModule,\n      MatFormFieldModule,\n      MatInputModule,\n      MatButtonModule,\n      MatIconModule,\n      MatTooltipModule,\n      MatProgressSpinnerModule,\n      DragDropModule,\n      ScrollingModule,\n      CdkTableModule,\n      KlesDynamicCellDirective,\n      KlesDynamicHeaderDirective,\n      KlesDynamicFieldDirective,\n      KlesComponentDirective,\n      KlesResizeColumnDirective,\n      RowPipe,\n      CellPipe,\n      FieldPipe,\n      SpanPipe,\n      ElevationPipe,\n      RowDragDisabledPipe,\n      GroupPipe\n    ]\n})\nexport class KlesLazyTableComponent extends KlesTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n  loading = signal(false);\n  filteredValues$ = new BehaviorSubject<{ [key: string]: any; }>({});\n  reload$ = new Subject<void>();\n\n  @ViewChild(MatTable) matTable: MatTable<any>;\n\n  @Output() _onSelectedLineResponse = new EventEmitter<any>();\n  @Output() _onSelectedResponse = new EventEmitter<any>();\n\n  constructor(\n    protected adapter: DateAdapter<any>,\n    private fb1: UntypedFormBuilder,\n    public ref: ChangeDetectorRef,\n    protected dialog: MatDialog,\n    public sanitizer: DomSanitizer,\n    public _adapter: DateAdapter<any>,\n    @Inject('tableService') public tableService: AbstractKlesLazyTableService,\n    protected _elementRef: ElementRef\n  ) {\n    super(adapter, fb1, ref, dialog, sanitizer, _adapter, tableService, _elementRef);\n  }\n\n  ngOnInit(): void {\n    super.ngOnInit();\n\n    this.filteredValues$.next(\n      this.columns()\n        .filter(column => column.filterable)\n        .map(column => {\n          return { [column.columnDef]: this.formHeader.controls[column.columnDef].value };\n        })\n        .reduce((a, b) => ({ ...a, ...b }), {}));\n  }\n  ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n  }\n  ngAfterViewInit(): void {\n    super.ngAfterViewInit();\n\n    const events$ = merge(\n      this.reload$,\n      this.sort.sortChange,\n      this.filteredValues$.pipe(skip(1), debounceTime(500), startWith(this.filteredValues$.getValue()))\n    ).pipe(\n      tap(() => this.paginator.pageIndex = 0)\n    );\n\n    merge(events$, this.paginator.page.pipe(distinctUntilChanged()))\n      .pipe(\n        takeUntil(this._onDestroy),\n        switchMap(() => {\n          return concat(\n            of({ loading: true, value: { lines: [], totalCount: 0, footer: {}, header: {} } }),\n            this.tableService.load(this.sort.active, this.sort.direction, this.paginator.pageIndex, this.paginator.pageSize,\n              this.filteredValues$.getValue()).pipe(\n                map(value => ({ loading: false, value })),\n                catchError((err) => {\n                  console.error(err);\n                  return of({ loading: false, value: { lines: [], totalCount: 0, footer: {}, header: {} } });\n                })\n              )\n          );\n        })\n      )\n      .subscribe((response) => {\n        if (response.loading) {\n          this.loading.set(true);\n        } else {\n          this.loading.set(false);\n\n          if (this.showFooter && response.value.footer) {\n            this.formFooter.patchValue(response.value.footer);\n          }\n          if (response.value.header) {\n            this.formHeader.patchValue(response.value.header, { emitEvent: false });\n          }\n          this.updateData(response.value.lines);\n          this.paginator.length = response.value.totalCount;\n        }\n        this.matTable?.updateStickyColumnStyles();\n      });\n\n  }\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n  }\n\n  // getLineFields(index, key) {\n  //     return this.lineFields[index].find(f => f.name === key);\n  // }\n\n  getLineFields(_id, key) {\n    // return this.lineFields[index].find(f => f.name === key);\n    const listField = this.listFields.find((f) => f._id === _id);\n    if (listField) {\n      return listField.fields.find((f) => f.name === key);\n    }\n  }\n\n  setDataSourceAttributes() {\n    if (this.sort) {\n      if (this.paginator && !this.hidePaginator) {\n        this.sort.sortChange.subscribe(() => {\n          this.paginator.pageIndex = 0;\n        });\n      }\n      if (this.sortConfig) {\n        this.sort.active = this.sortConfig.active;\n        this.sort.direction = this.sortConfig.direction;\n        this.sort.sortChange.emit(this.sortConfig);\n        // this.sortDefault = !this.sortDefault;\n      }\n    }\n    this.tableService.setTable(this);\n\n  }\n}\n","<div [ngClass]=\"!options.fullsize ? (options.elevation | elevationPipe) : 'fullsize'\" class=\"container-table\">\n\n    <div class=\"container-loading\">\n        @if (loading()) {\n        <div class=\"loading-spinner\">\n            <mat-spinner></mat-spinner>\n        </div>\n        }\n        <form class=\"dynamic-form\" [ngClass]=\"{fullsize: options.fullsize,loading: loading()}\" [formGroup]=\"form\"\n            cdkScrollable>\n            <table [id]=\"id\" mat-table matSort [dataSource]=\"dataSource\" formArrayName=\"rows\"\n                [trackBy]=\"multiTemplate ? null : trackById\" cdkDropList (cdkDropListDropped)=\"drop($event)\"\n                [cdkDropListData]=\"this\" [cdkDropListDisabled]=\"!dragDropRows\" [multiTemplateDataRows]=\"multiTemplate\"\n                [cdkDropListAutoScrollStep]=\"dragDropRowsOptions.autoScrollStep\"\n                [cdkDropListSortPredicate]=\"sortPredicate()\" [cdkDropListConnectedTo]=\"dragDropRowsOptions.connectedTo\">\n                @for (column of columns(); track column.columnDef) {\n                <ng-container [cdkColumnDef]=\"column.columnDef\" [sticky]=\"column.sticky || false\"\n                    [stickyEnd]=\"column.stickyEnd || false\">\n                    <th mat-header-cell *matHeaderCellDef [klesResizeColumn]=\"column.resizable\"\n                        class=\"{{column.ngClass}}\" [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n                        <ng-container klesDynamicHeader [field]=\"column.headerCell\" [group]=\"formHeader\" [options]=\"options\">\n                        </ng-container>\n\n                    </th>\n                    <div>\n                        @if (multiTemplate) {\n                        <td mat-cell *cdkCellDef=\"let row;let index = dataIndex;\" [style]=\"getCellStyle(row,column)\"\n                            [ngClass]=\"column | cellPipe\">\n                            <ng-container klesDynamicCell [field]=\"column | fieldPipe:row.value._id\"\n                                [group]=\"row.value._id | groupPipe\" [siblingFields]=\"getSiblingFields(row)\"\n                                [column]=\"column\" [config]=\"{templateUnfold}\">\n                            </ng-container>\n                        </td>\n                        }\n                        @else {\n                        <td mat-cell *cdkCellDef=\"let row;let index = index;\" [style]=\"getCellStyle(row,column)\"\n                            [ngClass]=\"column | cellPipe\">\n                            <ng-container klesDynamicCell [field]=\"column | fieldPipe:row.value._id\"\n                                [group]=\"row.value._id | groupPipe\" [siblingFields]=\"getSiblingFields(row)\"\n                                [column]=\"column\" [config]=\"{templateUnfold}\">\n                            </ng-container>\n                        </td>\n                        }\n\n                        <td mat-footer-cell *matFooterCellDef [style]=\"getFooterStyle(column)\">\n                            @if (column.footerCell) {\n                            <ng-container klesDynamicField [field]=\"column.footerCell\" [group]=\"formFooter\">\n                            </ng-container>\n                            }\n                        </td>\n                    </div>\n                </ng-container>\n                }\n\n                @if (templateUnfold && multiTemplate) {\n                @for (cell of templateUnfold.cells; track cell.name) {\n                <ng-container [matColumnDef]=\"cell.name\">\n                    <td mat-cell *matCellDef=\"let row;let index = dataIndex;\"\n                        [attr.colspan]=\"cell.colspan | spanPipe:displayedColumns().length\" [attr.rowspan]=\"cell.rowspan\"\n                        [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n                        <ng-container klesDynamicField [field]=\"cell\" [group]=\"row.value._id | groupPipe\"\n                            [siblingFields]=\"getSiblingFields(row)\">\n                        </ng-container>\n                    </td>\n                </ng-container>\n                }\n                }\n\n                <tr mat-header-row *matHeaderRowDef=\"displayedColumns();sticky: true;\"></tr>\n                <tr mat-row [ngClass]=\"row | rowPipe\" *matRowDef=\"let row; columns: displayedColumns();\"\n                    [@rowsAnimation]=\"\" (click)=\"onClick(row)\" cdkDrag [cdkDragData]=\"row\"\n                    [cdkDragDisabled]=\"(row | rowDragDisabledPipe)\">\n\n                    @if (dragDropRowsOptions?.dragPreview?.component) {\n                    <ng-template cdkDragPreview [matchSize]=\"true\">\n                        <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPreview?.component\"\n                            [value]=\"row\">\n                        </ng-container>\n                    </ng-template>\n                    }\n\n                    @if (dragDropRowsOptions?.dragPlaceholder?.component) {\n                    <ng-template cdkDragPlaceholder>\n                        <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPlaceholder?.component\"\n                            [value]=\"row\">\n                        </ng-container>\n                    </ng-template>\n                    }\n                </tr>\n\n                @if (multiTemplate && templateUnfold) {\n                <tr mat-row [@rowsAnimation]=\"\"\n                    *matRowDef=\"let row; columns: getTemplateColumns(templateUnfold); when: tableService.unfoldPredicate\">\n                </tr>\n                }\n\n                @if (showFooter) {\n                <div>\n                    <tr mat-footer-row *matFooterRowDef=\"displayedColumns();sticky: true\">\n                    </tr>\n                </div>\n                }\n            </table>\n        </form>\n    </div>\n    <div [hidden]=\"hidePaginator\">\n        <mat-paginator #paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\"\n            [showFirstLastButtons]=\"true\" (page)=\"pageChanged($event)\">\n        </mat-paginator>\n    </div>\n\n</div>\n","import { KlesFieldAbstract } from '@3kles/kles-material-dynamicforms';\nimport { OnInit, Component } from '@angular/core';\nimport { IKlesHeaderFieldConfig } from '../../models/header-field.config.model';\nimport { CommonModule } from '@angular/common';\nimport { MatSortModule } from '@angular/material/sort';\n\n@Component({\n    selector: 'kles-form-textheader',\n    template: `\n    <div mat-sort-header [disabled]=\"!field.sortable\"><span>{{ field.label }}</span></div>\n    `,\n    styles: ['mat-form-field {width: calc(100%)}'],\n    standalone: true,\n    imports: [\n        CommonModule,\n        MatSortModule\n    ]\n})\nexport class KlesFormTextHeaderComponent extends KlesFieldAbstract implements OnInit {\n    field: IKlesHeaderFieldConfig;\n    ngOnInit(): void {\n        super.ngOnInit();\n    }\n}\n","import { KlesFieldAbstract } from '@3kles/kles-material-dynamicforms';\nimport { OnInit, Component } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { startWith, map, switchMap } from 'rxjs/operators';\nimport { IKlesHeaderFieldConfig } from '../../models/header-field.config.model';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n    selector: 'kles-form-textheaderfilter',\n    template: `\n    <div mat-sort-header [disabled]=\"!field.sortable\"><span>{{ field.label }}</span></div>\n    <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n        @if (field.autocomplete) {\n            <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" (click)=\"stopPropagation($event)\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder\" [type]=\"field.inputType\"\n            [matAutocomplete]=\"auto\">\n\n            <mat-autocomplete #auto=\"matAutocomplete\">\n                @for (option of filteredOption | async; track option) {\n                    <mat-option [value]=\"option\">{{option}}</mat-option>\n                }\n            </mat-autocomplete>\n        }\n        @else {\n            <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" (click)=\"stopPropagation($event)\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder\" [type]=\"field.inputType\">\n        }\n\n        <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"group.controls[field.name].reset(''); stopPropagation($event)\">\n            <mat-icon>close</mat-icon>\n        </button>\n\n        @if (isPending()) {\n            <mat-spinner matSuffix mode=\"indeterminate\" diameter=\"17\"></mat-spinner>\n        }\n\n        @for (validation of field.validations; track validation.name) {\n            <ng-container ngProjectAs=\"mat-error\">\n                @if (group.get(field.name).hasError(validation.name)) {\n                    <mat-error>{{validation.message}}</mat-error>\n                }\n            </ng-container>\n        }\n        @for (validation of field.asyncValidations; track validation.name) {\n            <ng-container ngProjectAs=\"mat-error\">\n                @if (group.get(field.name).hasError(validation.name)) {\n                    <mat-error>{{validation.message}}</mat-error>\n                }\n            </ng-container>\n        }\n    </mat-form-field>\n    `,\n    styles: ['mat-form-field {width: calc(100%)}'],\n    standalone: true,\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        MatFormFieldModule,\n        MatInputModule,\n        MatIconModule,\n        MatButtonModule,\n        MatAutocompleteModule,\n        MatTooltipModule,\n        MatProgressSpinnerModule,\n        MatSortModule\n    ]\n})\nexport class KlesFormTextHeaderFilterComponent extends KlesFieldAbstract implements OnInit {\n\n    field: IKlesHeaderFieldConfig;\n    filteredOption: Observable<any[]>;\n    options$: Observable<any[]>;\n\n    ngOnInit(): void {\n        if (this.field.options instanceof Observable) {\n            this.options$ = this.field.options;\n        } else {\n            this.options$ = of(this.field.options as any);\n        }\n\n        this.filteredOption = this.group.get(this.field.name).valueChanges\n            .pipe(\n                startWith(''),\n                switchMap(data => data ? this.filterData(data) : this.options$)\n            );\n    }\n\n    isPending() {\n        return this.group.controls[this.field.name].pending;\n    }\n\n    private filterData(value: any): Observable<any[]> {\n        let filterValue;\n\n        if (typeof value === 'string' && Object.prototype.toString.call(value) === '[object String]') {\n            filterValue = value.toLowerCase();\n        } else {\n            filterValue = value[this.field.property].toLowerCase();\n        }\n\n        if (this.field.property) {\n            return this.options$\n                .pipe(map(options => options.filter(option => option[this.field.property].toLowerCase().indexOf(filterValue) === 0)));\n        }\n        return this.options$.pipe(map(options => options.filter(option => option.toLowerCase().indexOf(filterValue) === 0)));\n    }\n\n\n    stopPropagation(event) {\n        event.stopPropagation();\n    }\n}\n","import { Type } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { IKlesHeaderFieldConfig } from '../models/header-field.config.model';\nimport { componentMapper, klesFieldControlFactory } from '@3kles/kles-material-dynamicforms';\n\nexport function HeaderMapper(config: {\n    type: string,\n    factory?: (field: IKlesHeaderFieldConfig) => AbstractControl<any, any>\n}) {\n    return (target: Type<any>) => {\n        componentMapper.push({\n            component: target,\n            type: config.type,\n            factory: config.factory || klesFieldControlFactory\n        });\n    };\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n    name: 'capitalize',\n    standalone: true\n})\nexport class CapitalizePipe implements PipeTransform {\n    transform(value: any) {\n        if (value) {\n            return value.charAt(0).toUpperCase() + value.slice(1);\n        }\n        return value;\n    }\n}\n","import { componentMapper, EnumType, FieldMapper, KlesFieldAbstract, klesFieldControlFactory } from '@3kles/kles-material-dynamicforms';\nimport { OnInit, Component, ViewEncapsulation } from '@angular/core';\nimport { IKlesHeaderFieldConfig } from '../../models/header-field.config.model';\nimport { Options } from '../../models/options.model';\nimport { HeaderMapper } from '../../decorators/header.decorator';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { KlesDynamicHeaderFilterDirective } from '../../directives/dynamic-header-filter.directive';\nimport { CapitalizePipe } from '../../pipe/capitalize.pipe';\n\n@HeaderMapper({\n    type: 'dynamicHeader', factory: (field: IKlesHeaderFieldConfig) => {\n        if (field.filterComponent) {\n            return componentMapper.find(c => c.component === field.filterComponent)?.factory ?\n                componentMapper.find(c => c.component === field.filterComponent)?.factory(field) : klesFieldControlFactory(field);\n        }\n        return klesFieldControlFactory(field);\n    }\n})\n@Component({\n    selector: 'kles-form-dynamicheaderfilter',\n    template: `\n    <div class=\"header\" mat-sort-header [disabled]=\"!field.sortable\" [matTooltip]=\"field.tooltip\" matTooltipPosition=\"above\">\n        @if(tableOptions?.capitalisedHeader){\n            <span>{{ field.label | capitalize }}</span>\n        }@else if(tableOptions?.uppercasedHeader){\n            <span>{{ field.label | uppercase }}</span>\n        }@else{\n            <span>{{ field.label }}</span>\n        }\n    </div>\n    @if (field.filterComponent && filterField) {\n        <div (click)=\"stopPropagation($event)\" class=\"filterHeader\">\n            <ng-container klesDynamicHeaderFilter [group]=\"group\" [field]=\"filterField\">\n            </ng-container>\n\n            @if (field.filterClearable && group.get(field.name).value) {\n                <div class=\"icon-button\">\n                    <button mat-icon-button aria-label=\"Clear\" type=\"button\" class=\"icon-button-small\"\n                    (click)=\"group.controls[field.name].reset();\">\n                        <mat-icon>close</mat-icon>\n                    </button>\n                </div>\n               \n            }\n    </div>\n    }\n    `,\n    styleUrl: './dynamic-headerfilter.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        MatIconModule,\n        MatButtonModule,\n        MatTooltipModule,\n        MatSortModule,\n        CapitalizePipe,\n        KlesDynamicHeaderFilterDirective\n    ]\n})\nexport class KlesFormDynamicHeaderFilterComponent extends KlesFieldAbstract implements OnInit {\n    field: IKlesHeaderFieldConfig;\n    filterField: IKlesHeaderFieldConfig;\n    tableOptions: Options<any>;\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.filterField = Object.assign({}, { ...this.field, component: this.field.filterComponent, label: null, tooltip: null });\n    }\n\n    stopPropagation(event) {\n        event.stopPropagation();\n    }\n}\n","import { MatSort } from \"@angular/material/sort\";\nimport { KlesTreetableComponent } from \"./treetable.component\";\nimport { KlesTableDatasource } from \"../table/table.datasource\";\n\n\nexport class MatTreetableData<T> extends KlesTableDatasource<T> {\n\n  _compareFn = new Intl.Collator('pl', { sensitivity: 'base', numeric: true }).compare;\n\n  private sortChildrends(parent, sort, data) {\n    return data.filter(line => parent === this.parentDataAccessor(line, sort.active))\n      .sort((a, b) => {\n        const valueA = this.sortingDataAccessor(a, sort.active);\n        const valueB = this.sortingDataAccessor(b, sort.active);\n        const comparatorResult = this._compareFn(<string>valueA, <string>valueB);\n        return comparatorResult * (sort.direction == 'asc' ? 1 : -1);\n      })\n      .flatMap(children => {\n        return [children].concat(this.sortChildrends(children, sort, data));\n      })\n  }\n\n\n  sortData: ((data: T[], sort: MatSort) => T[]) = (data: T[], sort: MatSort): T[] => {\n    const active = sort.active;\n    const direction = sort.direction;\n    if (!active || direction == '') { return data; }\n\n    return (this.sortChildrends(null, sort, data)); /** parent = null because first element has no parent */\n\n  }\n\n  deptDataAccessor: ((data: T, sortHeaderId: string) => number) = (data: T, sortHeaderId: string): number => {\n    return 0;\n  }\n\n  parentDataAccessor: ((data: T, sortHeaderId: string) => T);\n\n  table: KlesTreetableComponent<any>;\n}","import { Pipe } from \"@angular/core\";\nimport { RowPipe } from \"./row.pipe\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Pipe({\n    name: 'rowTreePipe',\n    pure: false,\n    standalone: true\n})\nexport class RowTreePipe extends RowPipe {\n\n    transform(row: UntypedFormGroup): any {\n        return {\n            'row-odd': row.value._status.depth % 2 !== 0,\n            ...super.transform(row)\n        }\n    }\n}","import { Injectable } from '@angular/core';\nimport { cloneDeep } from 'lodash';\nimport * as O from 'fp-ts/lib/Option'\nimport { pipe } from \"fp-ts/lib/function\";\nimport { NodeInTree, SearchableNode, Node } from '../../models/node.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TreeService {\n\n  /**\n   * Traverse a tree data structure and applies the provided @param f function\n   * to all nodes\n   * @param root the tree to be traversed\n   * @param f the function to be applied to all nodes\n   * N.B. this function modifies the existing tree\n   */\n  traverse<K extends Node>(root: K, f: (node: K) => void): void {\n    this._traverse(root, (node: K) => {\n      f(node);\n      return true;\n    });\n  }\n\n  /**\n   * Search a tree for a node with the provided @param id\n   * @param root the tree to be searched\n   * @param id the id of the node to be retrieved\n   */\n  searchById<T, K extends SearchableNode<T>>(root: K, id: string): O.Option<NodeInTree<T>> {\n    let matchingNode: K;\n    const pathToRoot: { [k: string]: K } = {};\n    this._traverse(root, (node: K) => {\n      node.children?.forEach(child => {\n        pathToRoot[child._id] = node;\n      });\n      if (node._id === id) {\n        matchingNode = node;\n      }\n      return node._id !== id;\n    });\n    return matchingNode ? O.some({\n      _id: matchingNode._id,\n      _index: matchingNode._index,\n      value: matchingNode.value,\n      children: matchingNode.children,\n      pathToRoot: this.buildPath(id, pathToRoot)\n    }) : O.none;\n  }\n\n  getById<T, K extends SearchableNode<T>>(root: K, id: string): SearchableNode<T> {\n    let matchingNode: K;\n    this._traverse(root, (node: K) => {\n      if (node._id === id) {\n        matchingNode = node;\n      }\n      return node._id !== id;\n    });\n    return matchingNode;\n\n  }\n\n  /**\n   * Internal function that can be used to traverse or search the tree\n   * @param root the tree to be scanned\n   * @param f an optional function to be applied to all nodes\n   */\n  private _traverse<T, K extends Node>(root: K, f: (node: K) => boolean): void {\n    if (!f(root)) {\n      return;\n    }\n    root.children?.forEach(c => this._traverse(c, f));\n  }\n\n  /**\n   * Given a @param root tree and a @param node node, calculate the\n   * depth of the node in the tree\n   * @param root the tree\n   * @param node the node we want to calculate the depth of\n   */\n  getNodeDepth<T, K extends SearchableNode<T>>(root: K, node: K): number {\n    return pipe(\n      this.searchById(root, node._id),\n      O.fold(() => -1, n => n.pathToRoot.length)\n    )\n  }\n\n  /**\n   * Flatten a @param root tree into a list of its nodes\n   * @param root the tree to be flattened\n   */\n  flatten<T, K extends Node>(root: K): K[] {\n    const result = [cloneDeep(root)];\n    for (const node of result) {\n      if (node.children) {\n        result.splice(result.indexOf(node) + 1, 0, ...node.children as K[]);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Internal function used to build the pathToRoot of a node in a tree\n   * @param id the id of the node\n   * @param pathMap the pathMap returned by searchById\n   */\n  private buildPath<T, K extends SearchableNode<T>>(id: string, pathMap: { [k: string]: K }): K[] {\n    const pathToRoot = [];\n    let key = id;\n    while (key) {\n      if (pathMap[key]) {\n        pathToRoot.push(pathMap[key]);\n        key = pathMap[key]._id;\n      } else {\n        key = null;\n      }\n    }\n    return pathToRoot;\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { cloneDeep } from 'lodash';\nimport { TreeService } from './tree.service';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as O from 'fp-ts/lib/Option';\nimport { SearchableNode, TreeTableNode, Node } from '../../models/node.model';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConverterService {\n\n    constructor(private treeService: TreeService) { }\n\n    /**\n     * Clone a Node<T> object and convert it to a SearchableNode<T>\n     * @param tree the node to be converted\n     */\n    toSearchableTree<T>(tree: Node): SearchableNode<T> {\n        const treeClone = cloneDeep<any>(tree) as SearchableNode<T>;\n        this.treeService.traverse(treeClone, (node: SearchableNode<T>) => {\n            node._id = node.value?._id ? node.value?._id : uuidv4();\n        });\n        return treeClone;\n    }\n\n    /**\n     * Clone a SearchableNode<T> object and convert it to a TreeTableNode<T>\n     * @param tree the node to be converted\n     */\n    toTreeTableTree<T>(tree: SearchableNode<T>): TreeTableNode<T> {\n        const treeClone = cloneDeep(tree) as TreeTableNode<T>;\n        this.treeService.traverse(treeClone, (node: TreeTableNode<T>) => {\n            const root = this.treeService.searchById(treeClone, node._id);\n\n            if (O.isSome(root) && root.value.pathToRoot.length > 0) {\n                node.parentId = root.value.pathToRoot[0]._id;\n            }\n\n            node.depth = this.treeService.getNodeDepth(treeClone, node);\n            node.isExpanded = false;\n            node.isVisible = node.depth === 0;\n            node.childrenCounter = node.childrenCounter || ~~node.children?.length;\n            node.isBusy = node.isBusy || false\n        });\n        return treeClone;\n    }\n}\n","import { Injectable } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\nimport { AbstractKlesTableService } from \"../abstracttable.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport abstract class AbstractKlesTreeTableService extends AbstractKlesTableService {\n    protected table: any;\n    abstract getDepthDataAccessor(item: AbstractControl, property: string): number;\n    abstract getParentDataAccessor(item: UntypedFormGroup, property: string): AbstractControl;\n    abstract onLineOpen(e: any);\n    abstract onLineClose(e: any);\n    abstract updateRow(record: any, options?: { emitEvent: boolean; onlySelf: boolean; });\n    abstract addChild(parentId: string, record, index?: number);\n    abstract addChildren(parentId: string, record: any[], index?: number);\n    abstract deleteChild(parentId: string, record, index?: number);\n    abstract deleteChildren(parentId: string);\n}\n","import {\n  Component, ChangeDetectionStrategy, SimpleChanges, EventEmitter, Output, ChangeDetectorRef, Inject, Signal, OnInit, OnChanges, OnDestroy, AfterViewChecked, ElementRef, AfterViewInit\n} from '@angular/core';\nimport * as _ from 'lodash';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { AbstractControl, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatTreetableData } from './mat-treetable-datasource';\nimport { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_FORMATS } from '@angular/material-moment-adapter';\nimport { SearchableNode, TreeTableNode } from '../../models/node.model';\nimport { ConverterService } from '../../services/treetable/converter.service';\nimport { TreeService } from '../../services/treetable/tree.service';\nimport { KlesTableComponent } from '../table/table.component';\nimport { debounceTime, switchMap, take, catchError, takeUntil, map, tap } from 'rxjs/operators';\nimport { AbstractKlesTreeTableService } from '../../services/treetable/abstracttreetable.service';\nimport { of } from 'rxjs';\nimport { rowsAnimation } from '../../animations/row.animation';\nimport { KlesTreeColumnConfig } from '../../models/columnconfig.model';\nimport * as uuid from 'uuid';\nimport { IKlesCellFieldConfig } from '../../models/cell.model';\nimport { CommonModule } from '@angular/common';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { KlesDynamicTreeCellDirective } from '../../directives/dynamic-treecell.directive';\nimport { KlesComponentDirective, KlesDynamicFieldDirective } from '@3kles/kles-material-dynamicforms';\nimport { KlesDynamicHeaderDirective } from '../../directives/dynamic-header.directive';\nimport { RowTreePipe } from '../../pipe/rowtree.pipe';\nimport { RowDragDisabledPipe } from '../../pipe/rowdragdisabled.pipe';\nimport { GroupPipe } from '../../pipe/group.pipe';\nimport { SpanPipe } from '../../pipe/span.pipe';\nimport { FieldPipe } from '../../pipe/field.pipe';\nimport { CellPipe } from '../../pipe/cell.pipe';\nimport { ElevationPipe } from '../../pipe/elevation.pipe';\nimport { KlesResizeColumnDirective } from '../../directives/resizecolumn.directive';\n\n@Component({\n    selector: 'app-kles-dynamictreetable',\n    templateUrl: './treetable.component.html',\n    styleUrls: ['./treetable.component.scss', '../../styles/dragdrop.scss', '../../styles/align-cell.scss', '../../styles/input.scss'],\n    animations: [rowsAnimation],\n    providers: [\n        { provide: MAT_DATE_LOCALE, useValue: 'fr-FR' },\n        {\n            provide: DateAdapter,\n            useClass: MomentDateAdapter,\n            deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n        },\n        { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS },\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n      CommonModule,\n      ReactiveFormsModule,\n      MatTableModule,\n      MatSortModule,\n      MatPaginatorModule,\n      MatIconModule,\n      MatDialogModule,\n      MatProgressSpinnerModule,\n      CdkScrollableModule,\n      DragDropModule,\n      CdkTableModule,\n      KlesDynamicTreeCellDirective,\n      KlesDynamicFieldDirective,\n      KlesDynamicHeaderDirective,\n      KlesComponentDirective,\n      KlesResizeColumnDirective,\n      KlesTableComponent,\n      RowTreePipe,\n      RowDragDisabledPipe,\n      GroupPipe,\n      SpanPipe,\n      FieldPipe,\n      CellPipe,\n      ElevationPipe\n    ]\n})\n\nexport class KlesTreetableComponent<T> extends KlesTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n  @Output() _onLineOpen = new EventEmitter();\n  @Output() _onLineClose = new EventEmitter();\n\n  searchableTree: SearchableNode<T>[];\n\n  dataSource = new MatTreetableData<AbstractControl>([], []);\n\n  constructor(\n    protected adapter: DateAdapter<any>,\n    protected formBuilder: UntypedFormBuilder,\n    public ref: ChangeDetectorRef,\n    protected dialog: MatDialog,\n    public sanitizer: DomSanitizer,\n    public _adapter: DateAdapter<any>,\n    public treeService: TreeService,\n    public converterService: ConverterService,\n    @Inject('tableService') public tableService: AbstractKlesTreeTableService,\n    protected _elementRef: ElementRef) {\n    super(adapter, formBuilder, ref, dialog, sanitizer, _adapter, tableService, _elementRef);\n  }\n\n\n  ngOnInit() {\n    super.ngOnInit();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n  }\n\n  ngAfterViewInit(): void {\n    super.ngAfterViewInit();\n  }\n\n  updateData(lines: any[]) {\n    this.updateTree(lines);\n    // this.displayedColumns = this.columns.filter(e => e.visible).map(c => c.columnDef);\n    this.setItems();\n  }\n\n  protected updateTree(data: any) {\n    this._lines = (Array.isArray(data) ? data : [data]).map(((line, _index) => {\n      return {\n        _id: line?.value?._id || uuid.v4(),\n        ...line,\n        _index\n      };\n    }));\n    this.searchableTree = this._lines.map(t => this.converterService.toSearchableTree(t));\n  }\n\n\n  initFormArray() {\n    const treeTableTree = this.searchableTree.map(st => this.converterService.toTreeTableTree(st));\n    this.lineFields = [];\n    this.listFields = [];\n    const array = this.formBuilder.array(\n      treeTableTree.flatMap(node => {\n        return this.createFormNode(node);\n      })\n    );\n    return array;\n  }\n\n  createFormNode(node: TreeTableNode<any>): UntypedFormGroup[] {\n    let children: UntypedFormGroup[] = [];\n    const parent = this.addFormLine(node);\n    if (node.children) {\n      children = node.children.flatMap(child => {\n        const childControls = this.createFormNode(child);\n        childControls.filter(control => control.value._status.depth === parent.value._status.depth + 1)\n          .forEach((control) => {\n            control.valueChanges\n              .pipe(\n                takeUntil(this._onDestroy))\n              .subscribe((value) => {\n                // delete value._id;\n                // delete value._status;\n                const v = { ...value };\n                delete v._id;\n                delete v._status;\n\n                const data = {\n                  value: v,\n                  ...(value._status.children && { children: value._status.children }),\n                  childrenCounter: ~~value._status?.children?.length,\n                  depth: value._status.depth,\n                  isExpanded: value._status.isExpanded,\n                  isVisible: value._status.isVisible,\n                  _id: value._id\n                };\n\n                parent.controls._status\n                  .patchValue({\n                    children:\n                      parent.controls._status.value.children.map((c => {\n                        if (c._id === data._id) {\n                          return data;\n                        }\n                        return c;\n                      }))\n\n                  }, { emitEvent: false });\n              });\n          });\n        return childControls;\n      });\n    }\n    return [parent, ...children];\n  }\n\n  addFormLine(row: TreeTableNode<T>): UntypedFormGroup {\n    const group = this.formBuilder.group({});\n    const idControl = this.formBuilder.control(row._id);\n    const indexControl = this.fb.control(row._index);\n    const unfoldControl = this.fb.control(row._unfold || false);\n    group.addControl('_id', idControl);\n    group.addControl('_index', indexControl);\n    group.addControl('_unfold', unfoldControl);\n\n    const paginator = (this.columns as Signal<KlesTreeColumnConfig[]>)().find(c => c.paginator && c.canExpand);\n\n    const statusControl = this.formBuilder.group({\n      parentId: row.parentId,\n      isVisible: row.isVisible,\n      isExpanded: row.isExpanded,\n      depth: row.depth,\n      children: [row.children],\n      childrenCounter: row.childrenCounter || ~~row.children?.length,\n      ...(paginator && {\n        paginator: this.formBuilder.group({\n          pageIndex: 0,\n          pageSize: paginator.paginatorOption?.pageSize || 5,\n          length: row.childrenCounter || ~~row.children?.length || 0\n        })\n      })\n    });\n\n    group.addControl('_status', statusControl);\n\n    const rowValue = row?.value;\n    const listField = [];\n    this.columns().forEach(column => {\n      column.cell.name = column.columnDef;\n      const { pipeTransform, ...tmpCell } = column.cell;\n      let colCell: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n      colCell = { pipeTransform, ...colCell };\n      const control = this.buildControlField(colCell, rowValue[colCell.name]);\n      listField.push({ ...column.cell });\n      control.valueChanges.pipe(\n        takeUntil(this._onLinesChanges),\n        debounceTime(colCell.debounceTime || 0),\n        switchMap((value) => {\n          if (colCell.executeAfterChange) {\n            colCell.pending = true;\n            this.ref.markForCheck();\n            return colCell.executeAfterChange(colCell.name,\n              { ...control?.parent.value, [colCell.name]: value }, control?.parent)\n              .pipe(\n                take(1),\n                catchError((err) => {\n                  console.error(err);\n                  return of(null);\n                }),\n                map((response) => ({ value, response })),\n                tap(() => {\n                  colCell.pending = false;\n                  this.ref.markForCheck();\n                })\n              );\n          }\n          return of({ value, response: null });\n        })\n        // distinctUntilChanged((prev, curr) => {\n        //     if (Array.isArray(prev) && Array.isArray(curr)) {\n        //         if (column.cell?.property) {\n        //             return prev.length === curr.length\n        //                 && prev.every((value, index) => value[column.cell.property] === curr[index][column.cell.property]);\n        //         } else {\n        //             return prev.length === curr.length && prev.every((value, index) => value === curr[index]);\n        //         }\n        //     } else {\n        //         if (column.cell?.property && prev && curr) {\n        //             return prev[column.cell.property] === curr[column.cell.property];\n        //         }\n        //     }\n        //     return prev === curr;\n        // })\n      ).subscribe(e => {\n        const group = control.parent;\n        this.tableService.onCellChange({ column, row, group, response: e.response });\n        this._onChangeCell.emit({ column, row, group, response: e.response });\n      });\n      control.statusChanges.subscribe(status => {\n        const group = control.parent;\n        this.tableService.onStatusCellChange({ cell: control, group, status });\n        this._onStatusCellChange.emit({ cell: control, group, status });\n      });\n\n      group.addControl(column.cell.name, control);\n    });\n    this.lineFields.push(listField);\n    this.listFields.push({ _id: row._id, fields: listField });\n\n    group.setValidators(this.lineValidations);\n    group.setAsyncValidators(this.lineAsyncValidations);\n\n    group.valueChanges.subscribe(value => {\n      this.tableService.onLineChange({ group, row, value });\n    });\n\n    group.statusChanges.subscribe(status => {\n      this.tableService.onStatusLineChange({ group, row, status });\n      this._onStatusLineChange.emit({ group, row, status });\n    });\n    return group;\n  }\n\n\n  setDataSourceAttributes() {\n    super.setDataSourceAttributes();\n    this.dataSource.table = this;\n    this.dataSource.deptDataAccessor = this.tableService.getDepthDataAccessor;\n    this.dataSource.parentDataAccessor = this.tableService.getParentDataAccessor;\n  }\n}\n","<div [ngClass]=\"!options.fullsize ? (options.elevation | elevationPipe) : 'fullsize'\" class=\"container-table\">\n\n  <form class=\"dynamic-form\" [formGroup]=\"form\" [ngClass]=\"{fullsize: options.fullsize}\" cdkScrollable>\n    <table mat-table matSort [dataSource]=\"dataSource\" formArrayName=\"rows\" [trackBy]=\"multiTemplate ? null : trackById\"\n      cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListData]=\"this\" [cdkDropListDisabled]=\"!dragDropRows\"\n      [multiTemplateDataRows]=\"multiTemplate\" [cdkDropListAutoScrollStep]=\"dragDropRowsOptions.autoScrollStep\"\n      [cdkDropListSortPredicate]=\"sortPredicate()\">\n      @for (column of columns(); track column.columnDef) {\n      <ng-container [cdkColumnDef]=\"column.columnDef\" [sticky]=\"column.sticky || false\"\n        [stickyEnd]=\"column.stickyEnd || false\">\n        <th mat-header-cell *matHeaderCellDef [klesResizeColumn]=\"column.resizable\" class=\"{{column.ngClass}}\"\n          [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n          <ng-container klesDynamicHeader [field]=\"column.headerCell\" [group]=\"formHeader\" [options]=\"options\">\n          </ng-container>\n        </th>\n\n\n        <div>\n          @if (multiTemplate) {\n          <ng-container *cdkCellDef=\"let row;let index = dataIndex;\">\n            <td mat-cell [style]=\"getCellStyle(row,column)\" [ngClass]=\"column | cellPipe\">\n\n              <ng-container klesDynamicTreeCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n                [siblingFields]=\"getSiblingFields(row)\" [row]=\"row\" [column]=\"column\">\n              </ng-container>\n            </td>\n          </ng-container>\n          }\n          @else {\n          <ng-container *cdkCellDef=\"let row;let index = index;\">\n            <td mat-cell [style]=\"getCellStyle(row,column)\" [ngClass]=\"column | cellPipe\">\n\n              <ng-container klesDynamicTreeCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n                [siblingFields]=\"getSiblingFields(row)\" [row]=\"row\" [column]=\"column\">\n              </ng-container>\n            </td>\n\n          </ng-container>\n          }\n\n          <td mat-footer-cell *matFooterCellDef [style]=\"getFooterStyle(column)\">\n            @if (column.footerCell) {\n            <ng-container klesDynamicField [field]=\"column.footerCell\" [group]=\"formFooter\">\n            </ng-container>\n            }\n          </td>\n        </div>\n\n      </ng-container>\n      }\n\n      @if (templateUnfold && multiTemplate) {\n      @for (cell of templateUnfold.cells; track cell.name) {\n      <ng-container [matColumnDef]=\"cell.name\">\n        <td mat-cell *matCellDef=\"let row;let index = dataIndex;\"\n          [attr.colspan]=\"cell.colspan | spanPipe:displayedColumns().length\" [attr.rowspan]=\"cell.rowspan\"\n          [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n          <ng-container klesDynamicField [field]=\"cell\" [group]=\"row.value._id | groupPipe\"\n            [siblingFields]=\"getSiblingFields(row)\">\n          </ng-container>\n        </td>\n      </ng-container>\n      }\n      }\n\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns();sticky: true;\"></tr>\n\n      <tr mat-row [ngClass]=\"row | rowTreePipe\" [@rowsAnimation]=\"\" *matRowDef=\"let row; columns: displayedColumns();\"\n        (click)=\"onClick(row)\" cdkDrag [cdkDragData]=\"row\" [cdkDragDisabled]=\"(row | rowDragDisabledPipe)\"\n        [class.cdk-visually-hidden]=\"!row.value._status.isVisible\">\n\n\n        @if (dragDropRowsOptions?.dragPreview?.component) {\n        <ng-template cdkDragPreview [matchSize]=\"true\">\n          <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPreview?.component\" [value]=\"row\">\n          </ng-container>\n        </ng-template>\n        }\n\n        @if (dragDropRowsOptions?.dragPlaceholder?.component) {\n        <ng-template cdkDragPlaceholder>\n          <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPlaceholder?.component\" [value]=\"row\">\n          </ng-container>\n        </ng-template>\n        }\n      </tr>\n\n      @if (multiTemplate && templateUnfold) {\n      <tr mat-row [@rowsAnimation]=\"\"\n        *matRowDef=\"let row; columns: getTemplateColumns(templateUnfold); when: tableService.unfoldPredicate\">\n      </tr>\n      }\n\n      @if (showFooter) {\n      <div>\n        <tr mat-footer-row *matFooterRowDef=\"displayedColumns();sticky: true\">\n        </tr>\n      </div>\n      }\n    </table>\n\n  </form>\n  <div [hidden]=\"hidePaginator\">\n    <mat-paginator #paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" [showFirstLastButtons]=\"true\">\n    </mat-paginator>\n  </div>\n\n</div>\n","import { SafeStyle } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { KlesColumnConfig } from '../../models/columnconfig.model';\nimport { AbstractKlesTreeTableService } from '../treetable/abstracttreetable.service';\n\nexport abstract class AbstractKlesLazyTreetableService extends AbstractKlesTreeTableService {\n\n    abstract load(sort: string, order: string, page: number, perPage: number, filter?: { [key: string]: any; })\n        : Observable<{ lines: any[], totalCount: number, footer?: any, header?: any }>;\n    abstract loadChild(parent: any, sort?: string, order?: string, page?: number, perPage?: number, filter?: { [key: string]: any; })\n        : Observable<{ lines: any[], totalCount: number }>;\n\n    abstract reload(): void;\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, OnChanges, OnDestroy, OnInit, Output, Signal, SimpleChanges, signal } from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { DateAdapter } from '@angular/material/core';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport * as _ from 'lodash';\nimport { BehaviorSubject, Subject, combineLatest, concat, merge, of } from 'rxjs';\nimport { catchError, debounceTime, switchMap, tap, take, takeUntil, filter, map, startWith, skip, withLatestFrom, distinctUntilChanged } from 'rxjs/operators';\nimport { TreeTableNode } from '../../models/node.model';\nimport { AbstractKlesLazyTreetableService } from '../../services/lazy/abstractlazytreetable.service';\nimport { ConverterService } from '../../services/treetable/converter.service';\nimport { TreeService } from '../../services/treetable/tree.service';\nimport { KlesTreetableComponent } from '../treetable/treetable.component';\nimport { rowsAnimation } from '../../animations/row.animation';\nimport { KlesTreeColumnConfig } from '../../models/columnconfig.model';\nimport { IKlesCellFieldConfig } from '../../models/cell.model';\nimport { CommonModule } from '@angular/common';\nimport { RowDragDisabledPipe } from '../../pipe/rowdragdisabled.pipe';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CellPipe } from '../../pipe/cell.pipe';\nimport { ElevationPipe } from '../../pipe/elevation.pipe';\nimport { FieldPipe } from '../../pipe/field.pipe';\nimport { RowPipe } from '../../pipe/row.pipe';\nimport { RowTreePipe } from '../../pipe/rowtree.pipe';\nimport { SpanPipe } from '../../pipe/span.pipe';\nimport { KlesDynamicCellDirective } from '../../directives/dynamic-cell.directive';\nimport { KlesDynamicTreeCellDirective } from '../../directives/dynamic-treecell.directive';\nimport { KlesComponentDirective, KlesDynamicFieldDirective } from '@3kles/kles-material-dynamicforms';\nimport { GroupPipe } from '../../pipe/group.pipe';\nimport { KlesDynamicHeaderDirective } from '../../directives/dynamic-header.directive';\nimport { KlesResizeColumnDirective } from '../../directives/resizecolumn.directive';\n\n@Component({\n    selector: 'app-kles-lazytreetable',\n    templateUrl: './lazytreetable.component.html',\n    styleUrls: ['./lazytreetable.component.scss', '../../styles/dragdrop.scss', '../../styles/align-cell.scss', '../../styles/input.scss'],\n    animations: [rowsAnimation],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n      CommonModule,\n      ReactiveFormsModule,\n      MatDialogModule,\n      MatTableModule,\n      MatSortModule,\n      MatPaginatorModule,\n      MatProgressSpinnerModule,\n      MatFormFieldModule,\n      MatInputModule,\n      MatButtonModule,\n      MatIconModule,\n      MatTooltipModule,\n      DragDropModule,\n      ScrollingModule,\n      CdkTableModule,\n      RowDragDisabledPipe,\n      RowPipe,\n      RowTreePipe,\n      CellPipe,\n      FieldPipe,\n      SpanPipe,\n      ElevationPipe,\n      GroupPipe,\n      KlesTreetableComponent,\n      KlesDynamicCellDirective,\n      KlesDynamicHeaderDirective,\n      KlesDynamicTreeCellDirective,\n      KlesDynamicFieldDirective,\n      KlesComponentDirective,\n      KlesResizeColumnDirective\n    ]\n})\n\nexport class KlesLazyTreetableComponent<T> extends KlesTreetableComponent<T> implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  @Output() _onSelectedLineResponse = new EventEmitter<any>();\n  @Output() _onSelectedResponse = new EventEmitter<any>();\n\n  loading = signal(false);\n  reload$ = new Subject<void>();\n  filteredValues$ = new BehaviorSubject<{ [key: string]: any; }>({});\n\n  constructor(\n    protected adapter: DateAdapter<any>,\n    protected formBuilder: UntypedFormBuilder,\n    public ref: ChangeDetectorRef,\n    protected dialog: MatDialog,\n    public sanitizer: DomSanitizer,\n    public _adapter: DateAdapter<any>,\n    public treeService: TreeService,\n    public converterService: ConverterService,\n    @Inject('tableService') public tableService: AbstractKlesLazyTreetableService,\n    protected _elementRef: ElementRef) {\n    super(adapter, formBuilder, ref, dialog, sanitizer, _adapter, treeService, converterService\n      , tableService, _elementRef);\n  }\n\n  ngOnInit(): void {\n    super.ngOnInit();\n    this.filteredValues$.next(\n      this.columns()\n        .filter(column => column.filterable)\n        .map(column => {\n          return { [column.columnDef]: this.formHeader.controls[column.columnDef].value };\n        })\n        .reduce((a, b) => ({ ...a, ...b }), {}));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n  }\n\n  ngAfterViewInit(): void {\n    super.ngAfterViewInit();\n    this.sort.sortChange.subscribe(() => (this.paginator.pageIndex = 0));\n\n    const events$ = merge(\n      this.reload$,\n      this.sort.sortChange.pipe(distinctUntilChanged()),\n      this.filteredValues$.pipe(skip(1), debounceTime(500), startWith(this.filteredValues$.getValue()))\n    ).pipe(\n      tap(() => this.paginator.pageIndex = 0)\n    );\n\n    merge(events$, this.paginator.page.pipe(distinctUntilChanged()))\n      .pipe(\n        takeUntil(this._onDestroy),\n        switchMap(() => {\n          return concat(\n            of({ loading: true, value: { lines: [], totalCount: 0, footer: {}, header: {} } }),\n            this.tableService.load(this.sort.active, this.sort.direction, this.paginator.pageIndex, this.paginator.pageSize,\n              this.filteredValues$.getValue()).pipe(\n                map(value => ({ loading: false, value })),\n                catchError((err) => {\n                  console.error(err);\n                  return of({ loading: false, value: { lines: [], totalCount: 0, footer: {}, header: {} } });\n                })\n              )\n          );\n        })\n      )\n      .subscribe((response) => {\n        if (response.loading) {\n          this.loading.set(true);\n        } else {\n          this.loading.set(false);\n\n          if (this.showFooter && response.value.footer) {\n            this.formFooter.patchValue(response.value.footer);\n          }\n          if (response.value.header) {\n            this.formHeader.patchValue(response.value.header, { emitEvent: false });\n          }\n\n          this.updateData(response.value.lines);\n          this.paginator.length = response.value.totalCount;\n        }\n        // this.ref.markForCheck();\n      });\n\n  }\n\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n  }\n\n  // getLineFields(index, key) {\n  //   return this.lineFields[index].find(f => f.name === key);\n  // }\n\n  getLineFields(_id, key) {\n    const listField = this.listFields.find((f) => f._id === _id);\n    if (listField) {\n      return listField.fields.find((f) => f.name === key);\n    }\n  }\n\n  createFormNode(node: TreeTableNode<any>): UntypedFormGroup[] {\n    let children: UntypedFormGroup[] = [];\n    const parent = this.addFormLine(node);\n    if (node.children) {\n      children = node.children.flatMap(child => {\n        const childControls = this.createFormNode(child);\n        childControls.filter(control => control.value._status.depth === parent.value._status.depth + 1)\n          .forEach((control) => {\n            control.valueChanges\n              .pipe(\n                takeUntil(this._onDestroy))\n              .subscribe((value) => {\n                const v = { ...value };\n                delete v._id;\n                delete v._status;\n\n                const data = {\n                  value: v,\n                  ...(value._status.children && { children: value._status.children }),\n                  childrenCounter: value._status.childrenCounter || ~~value._status?.children?.length,\n                  depth: value._status.depth,\n                  isExpanded: value._status.isExpanded,\n                  isVisible: value._status.isVisible,\n                  isBusy: value._status.isBusy || false,\n                  _id: value._id,\n                };\n\n                parent.controls._status\n                  .patchValue({\n                    children:\n                      parent.controls._status.value.children\n                        .filter(c => c._id !== value._id)\n                        .concat(data)\n                  });\n              });\n          });\n        return childControls;\n      });\n    }\n    return [parent, ...children];\n  }\n\n\n  addFormLine(row: TreeTableNode<T>): UntypedFormGroup {\n    const group = this.formBuilder.group({});\n    const idControl = this.formBuilder.control(row._id);\n    const indexControl = this.fb.control(row._index);\n    const unfoldControl = this.fb.control(row._unfold || false);\n    group.addControl('_id', idControl);\n    group.addControl('_index', indexControl);\n    group.addControl('_unfold', unfoldControl);\n\n    const paginator = (this.columns as Signal<KlesTreeColumnConfig[]>)().find(c => c.paginator && c.canExpand);\n\n    const statusControl = this.formBuilder.group({\n      isVisible: row.isVisible,\n      isExpanded: row.isExpanded,\n      depth: row.depth,\n      childrenCounter: row.childrenCounter || ~~row.children?.length,\n      children: [row.children],\n      isBusy: false,\n      ...(paginator && {\n        paginator: this.formBuilder.group({\n          pageIndex: 0,\n          pageSize: paginator.paginatorOption?.pageSize || this.paginator?.pageSize || 5,\n          length: 0\n        })\n      })\n    });\n    group.addControl('_status', statusControl);\n\n    merge(statusControl.controls.paginator?.valueChanges || of(), statusControl.controls.isExpanded.valueChanges)\n      .pipe(\n        takeUntil(this._onDestroy),\n        switchMap(() => {\n          if (statusControl.controls.isExpanded.value) {\n            return concat(\n              of({ loading: true, value: { lines: [], totalCount: 0 }, isExpanded: true }),\n              this.tableService.loadChild(group, this.sort.active, this.sort.direction, statusControl.controls.paginator?.value.pageIndex,\n                statusControl.controls.paginator?.value.pageSize, this.filteredValues$.getValue()).pipe(\n                  map(value => ({ loading: false, value, isExpanded: true })),\n                  catchError((err) => {\n                    console.error(err);\n                    return of({ loading: false, value: { lines: [], totalCount: 0 }, isExpanded: true });\n                  })\n                )\n            );\n          }\n          return of({ loading: false, value: { lines: [], totalCount: 0 }, isExpanded: false })\n\n        })\n      ).subscribe(({ loading, value, isExpanded }) => {\n        if (!loading) {\n          this.tableService.deleteChildren(row._id);\n          if (value.lines.length) {\n            value.lines.forEach(child => this.tableService.addChild(row._id, child));\n          }\n          statusControl.controls.paginator?.patchValue({ length: value.totalCount }, { emitEvent: false });\n        }\n        statusControl.patchValue({ isBusy: loading }, { emitEvent: false });\n\n        if (isExpanded) {\n          this._onLineOpen.next(group.getRawValue());\n        } else {\n          this._onLineClose.next(group.getRawValue());\n        }\n\n        this.ref.markForCheck();\n      })\n\n    const rowValue = row.value;\n    const listField = [];\n    this.columns().forEach(column => {\n      column.cell.name = column.columnDef;\n      const { pipeTransform, ...tmpCell } = column.cell;\n      let colCell: IKlesCellFieldConfig = _.cloneDeep(tmpCell);\n      colCell = { pipeTransform, ...colCell };\n      const control = this.buildControlField(colCell, rowValue[colCell.name]);\n      listField.push(colCell);\n      control.valueChanges.pipe(\n        takeUntil(this._onLinesChanges),\n        debounceTime(colCell.debounceTime || 0),\n        switchMap((value) => {\n          if (colCell.executeAfterChange) {\n            colCell.pending = true;\n            this.ref.markForCheck();\n            return colCell.executeAfterChange(colCell.name,\n              { ...control?.parent.value, [colCell.name]: value }, control?.parent)\n              .pipe(\n                take(1),\n                catchError((err) => {\n                  console.error(err);\n                  return of(null);\n                }),\n                map((response) => ({ value, response })),\n                tap(() => {\n                  colCell.pending = false;\n                  this.ref.markForCheck();\n                })\n              );\n          }\n          return of({ value, response: null });\n        })\n      ).subscribe(e => {\n        const group = control.parent;\n        this.tableService.onCellChange({ column, row, group, response: e.response });\n        this._onChangeCell.emit({ column, row, group, response: e.response });\n      });\n      control.statusChanges.pipe(takeUntil(this._onLinesChanges)).subscribe(status => {\n        const group = control.parent;\n        this.tableService.onStatusCellChange({ cell: control, group, status });\n        this._onStatusCellChange.emit({ cell: control, group, status });\n      });\n\n      group.addControl(column.cell.name, control);\n    });\n    this.lineFields.push(listField);\n    this.listFields.push({ _id: row._id, fields: listField });\n\n    group.setValidators(this.lineValidations);\n    group.setAsyncValidators(this.lineAsyncValidations);\n\n    group.valueChanges.pipe(\n      takeUntil(this._onDestroy)\n    ).subscribe(value => {\n      this.tableService.onLineChange({ group, row, value });\n    });\n\n    group.statusChanges\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(status => {\n        this.tableService.onStatusLineChange({ group, row, status });\n        this._onStatusLineChange.emit({ group, row, status });\n      });\n    return group;\n  }\n\n  setDataSourceAttributes() {\n    if (this.sort) {\n      if (this.paginator && !this.hidePaginator) {\n        this.sort.sortChange.subscribe(() => {\n          this.paginator.pageIndex = 0;\n        });\n      }\n      if (\n        // !this.sortDefault &&\n        this.sortConfig) {\n        this.sort.active = this.sortConfig.active;\n        this.sort.direction = this.sortConfig.direction;\n        this.sort.sortChange.emit(this.sortConfig);\n        // this.sortDefault = !this.sortDefault;\n      }\n    }\n    this.tableService.setTable(this);\n    this.dataSource.table = this;\n    this.dataSource.deptDataAccessor = this.tableService.getDepthDataAccessor;\n    this.dataSource.parentDataAccessor = this.tableService.getParentDataAccessor;\n  }\n}\n","<div [ngClass]=\"!options.fullsize ? (options.elevation | elevationPipe) : 'fullsize'\" class=\"container-table\">\n\n  <div class=\"container-loading\">\n    @if (loading()) {\n    <div class=\"loading-spinner\">\n      <mat-spinner></mat-spinner>\n    </div>\n    }\n\n    <form class=\"dynamic-form\" [ngClass]=\"{fullsize: options.fullsize, loading: loading()}\" [formGroup]=\"form\"\n      cdkScrollable>\n      <table mat-table matSort [dataSource]=\"dataSource\" formArrayName=\"rows\"\n        [trackBy]=\"multiTemplate ? null : trackById\" cdkDropList [multiTemplateDataRows]=\"multiTemplate\"\n        (cdkDropListDropped)=\"drop($event)\" [cdkDropListData]=\"this\" [cdkDropListDisabled]=\"!dragDropRows\"\n        [cdkDropListAutoScrollStep]=\"dragDropRowsOptions.autoScrollStep\" [cdkDropListSortPredicate]=\"sortPredicate()\">\n        @for (column of columns(); track column.columnDef) {\n        <ng-container [cdkColumnDef]=\"column.columnDef\" [sticky]=\"column.sticky || false\"\n          [stickyEnd]=\"column.stickyEnd || false\">\n          <th mat-header-cell *matHeaderCellDef [klesResizeColumn]=\"column.resizable\" class=\"{{column.ngClass}}\"\n            [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n            <ng-container klesDynamicHeader [field]=\"column.headerCell\" [group]=\"formHeader\" [options]=\"options\">\n            </ng-container>\n          </th>\n          @if (column.visible) {\n          <div>\n            @if (multiTemplate) {\n            <ng-container *cdkCellDef=\"let row;let index = dataIndex;\">\n              <td mat-cell [style]=\"getCellStyle(row,column)\" [ngClass]=\"column | cellPipe\">\n                <ng-container klesDynamicTreeCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n                  [siblingFields]=\"getSiblingFields(row)\" [row]=\"row\" [column]=\"column\"\n                  [config]=\"{templateUnfold}\">\n                </ng-container>\n              </td>\n            </ng-container>\n            }\n            @else {\n            <ng-container *cdkCellDef=\"let row;let index = index;\">\n              <td mat-cell [style]=\"getCellStyle(row,column)\" [ngClass]=\"column | cellPipe\">\n                <ng-container klesDynamicTreeCell [field]=\"column | fieldPipe:row.value._id\" [group]=\"row.value._id | groupPipe\"\n                  [siblingFields]=\"getSiblingFields(row)\" [row]=\"row\" [column]=\"column\" [config]=\"{templateUnfold}\">\n                </ng-container>\n\n              </td>\n\n            </ng-container>\n            }\n\n            <td mat-footer-cell *matFooterCellDef [style]=\"getFooterStyle(column)\">\n              @if (column.footerCell) {\n              <ng-container klesDynamicField [field]=\"column.footerCell\" [group]=\"formFooter\">\n              </ng-container>\n              }\n            </td>\n          </div>\n          }\n\n        </ng-container>\n        }\n\n        @if (templateUnfold && multiTemplate) {\n        @for (cell of templateUnfold.cells; track cell.name) {\n        <ng-container [matColumnDef]=\"cell.name\">\n          <td mat-cell *matCellDef=\"let row;let index = dataIndex;\"\n            [attr.colspan]=\"cell.colspan | spanPipe:displayedColumns().length\" [attr.rowspan]=\"cell.rowspan\"\n            [ngClass]=\"{'vertical-separator': options.verticalSeparator}\">\n            <ng-container klesDynamicField [field]=\"cell\" [group]=\"row.value._id | groupPipe\"\n              [siblingFields]=\"getSiblingFields(row)\">\n            </ng-container>\n          </td>\n        </ng-container>\n        }\n        }\n\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns();sticky: true;\"></tr>\n        <tr mat-row [ngClass]=\"row | rowTreePipe\" [@rowsAnimation]=\"\" *matRowDef=\"let row; columns: displayedColumns();\"\n          [class.cdk-visually-hidden]=\"!row.value._status.isVisible\" (click)=\"onClick(row)\" cdkDrag [cdkDragData]=\"row\"\n          [cdkDragDisabled]=\"(row | rowDragDisabledPipe)\">\n\n          @if (dragDropRowsOptions?.dragPreview?.component) {\n          <ng-template cdkDragPreview [matchSize]=\"true\">\n            <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPreview?.component\" [value]=\"row\">\n            </ng-container>\n          </ng-template>\n          }\n\n          @if (dragDropRowsOptions?.dragPlaceholder?.component) {\n          <ng-template cdkDragPlaceholder>\n            <ng-container klesComponent [component]=\"dragDropRowsOptions?.dragPlaceholder?.component\" [value]=\"row\">\n            </ng-container>\n          </ng-template>\n          }\n        </tr>\n\n        @if (multiTemplate && templateUnfold) {\n        <tr mat-row [@rowsAnimation]=\"\"\n          *matRowDef=\"let row; columns: getTemplateColumns(templateUnfold); when: tableService.unfoldPredicate\">\n        </tr>\n        }\n\n        @if (showFooter) {\n        <div>\n          <tr mat-footer-row *matFooterRowDef=\"displayedColumns();sticky: true\">\n          </tr>\n        </div>\n        }\n      </table>\n\n    </form>\n  </div>\n  <div [hidden]=\"hidePaginator\">\n    <mat-paginator #paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" [showFirstLastButtons]=\"true\"\n      (page)=\"pageChanged($event)\">\n    </mat-paginator>\n  </div>\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { KlesColumnConfig } from '../models/columnconfig.model';\nimport { SafeStyle } from '@angular/platform-browser';\nimport { AbstractKlesTableService } from './abstracttable.service';\nimport * as uuid from 'uuid';\nimport { IChangeCell, IChangeHeaderFooterCell, IChangeLine } from '../models/cell.model';\nimport { SelectionChange } from '@angular/cdk/collections';\n@Injectable({\n    providedIn: 'root'\n})\nexport class DefaultKlesTableService extends AbstractKlesTableService {\n\n\n    //Selection\n    onSelectionChange(changed: SelectionChange<any>) {\n\n    }\n\n    //Header\n    onHeaderChange(e: any) { }\n    onHeaderCellChange(e: IChangeHeaderFooterCell) { }\n    onStatusHeaderChange(e: any) { }\n\n    //Line\n    onCellChange(e: IChangeCell) { }\n    onStatusCellChange(e: any) { }\n    onLineChange(e: IChangeLine) {\n        if (this.table.multiTemplate) {\n            this.table.matTable.renderRows();\n        }\n    }\n    onStatusLineChange(e: any) { }\n    onClick(e: any) { }\n\n    //drag and drop\n    drop(e: any) { }\n\n    getSortPredicate(index: number, item: any): boolean {\n        return true;\n    }\n\n    //Footer\n    onFooterChange(e: any) { }\n    onFooterCellChange(e: IChangeHeaderFooterCell) { }\n\n    //Paginator\n    onPageChange(e: any) { }\n\n    //Data\n    onDataLoaded() { }\n\n    //Cell Style\n    getCellStyle(row: any, column: KlesColumnConfig): SafeStyle { return ''; }\n    getFooterStyle(column: KlesColumnConfig): SafeStyle { return ''; }\n\n    //Sorting\n    getSortingDataAccessor = (item: AbstractControl, property) => {\n        if (!item.value) {\n            return item.value;\n        }\n        let value: any = item.value[property];\n\n        if (value) {\n            if (typeof value === 'string') {\n                value = value.toLowerCase();\n            }\n            else if (typeof value === 'object') {\n                if (value.key) {\n                    value = value.key;\n                }\n            }\n        }\n\n        return value;\n    };\n\n    /**Util Table */\n    //Manage Record\n    addRecord(record, index?: number): UntypedFormGroup {\n        const _id = record._id || uuid.v4();\n        delete record._id;\n\n        const newRecord = {\n            _id,\n            _index: typeof index === 'undefined' ? this.table._lines.length : index,\n            value: record\n        };\n\n        const group: UntypedFormGroup = this.table.addFormLine(newRecord);\n\n        if (typeof index !== 'undefined') {\n\n            (this.table.getFormArray() as UntypedFormArray).controls.forEach((row: UntypedFormGroup) => {\n                if (row.value._index >= index) {\n                    row.patchValue({ _index: row.value._index + 1 }, { emitEvent: false });\n                }\n            });\n            this.table._lines.forEach((line) => {\n                if (line._index >= index) {\n                    line._index = line._index + 1;\n                }\n            });\n\n            this.table._lines.splice(index, 0, newRecord);\n            this.table.getFormArray().insert(index, group);\n        } else {\n            this.table._lines.push(newRecord);\n            this.table.getFormArray().push(group);\n        }\n\n        this.updateDataSource();\n        this.table.matTable?.updateStickyColumnStyles();\n\n        return group;\n    }\n\n    deleteRecord(event: AbstractControl[]) {\n        // console.log('Delete Record=', event);\n        event.forEach((e: UntypedFormGroup) => {\n            const id = e.controls['_id'].value;\n            const index = this.table.getFormArray().controls.findIndex(f => f.value._id === id);\n            this.table.getFormArray().removeAt(index);\n            this.table._lines = this.table._lines.filter(f => f._id !== id);\n        });\n        // console.log('List _lines=', this.table._lines);\n        this.updateDataSource();\n        this.table.selection.clear();\n    }\n\n\n    updateRecord(record, options?: { emitEvent: boolean, onlySelf: boolean }) {\n        const updateForm = this.table.getFormArray().controls\n            .find((f: UntypedFormGroup) => f.controls._id.value === '' + record._id);\n        if (updateForm) {\n            updateForm.patchValue(record, options);\n            this.updateDataSource();\n            this.table.ref.markForCheck();\n            return updateForm;\n        }\n    }\n\n    protected updateDataSource() {\n        this.table.dataSource.data = this.table.getFormArray().controls;\n        this.table.dataSource.filteredData = this.table.getFormArray().controls;\n    }\n\n    unfoldPredicate = (index: any, data: any) => {\n        return data.controls._unfold.value;\n    }\n\n    /**Setters */\n    public setTable(table: any) {\n        this.table = table;\n    }\n\n}\n","import { FormGroup, UntypedFormGroup } from \"@angular/forms\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\nimport { SelectionChange } from \"@angular/cdk/collections\";\n\nexport class KlesSelectionTableService implements KlesTableBaseService {\n  table: KlesTableComponent;\n  columnSelect: string;\n\n  constructor(column: string) {\n    this.columnSelect = column;\n  }\n\n  updateSelection(changed: SelectionChange<any>) {\n    changed.removed.forEach((group: FormGroup) => {\n      group.controls[this.columnSelect].patchValue(false, { emitEvent: false });\n    });\n\n    changed.added.forEach((group: FormGroup) => {\n      group.controls[this.columnSelect].patchValue(true, { emitEvent: false });\n    });\n    this.table._onSelected.emit(this.table.selection.selected);\n\n    this.updateColumnSelect();\n  }\n\n\n  changeSelectionHeader(e: any) {\n    if (e.column.columnDef === this.columnSelect) {\n      const val = (e.group as UntypedFormGroup).controls[this.columnSelect].value;\n      if (val) {\n        if (!this.table.selection.isMultipleSelection() && this.table.dataSource.filteredData.length) {\n          this.table.selection.select(this.table.dataSource.filteredData?.[0]);\n        } else {\n          this.table.selection.select(...this.table.dataSource.filteredData);\n        }\n\n      } else {\n        this.table.selection.deselect(...this.table.dataSource.filteredData);\n      }\n    } else {\n      this.updateColumnSelect();\n    }\n  }\n\n  changeSelectionLine(e: any) {\n    if (this.table) {\n      if (e.column.columnDef === this.columnSelect && e.row) {\n        if (this.table.dataSource.filteredData.includes(e.group)) {\n          if ((e.group as UntypedFormGroup).controls[e.column.columnDef].value) {\n            this.table.selection.select(e.group);\n          } else {\n            this.table.selection.deselect(e.group);\n          }\n        }\n      }\n\n    }\n  }\n\n  protected updateColumnSelect() {\n    let indeterminate = false;\n    let selectAll = false;\n\n    if (this.table?.selection.isEmpty()) {\n      indeterminate = false;\n      selectAll = false;\n    } else {\n      if ((!this.table.selection.isMultipleSelection() && this.table.selection.hasValue())\n        || (this.table.selection.isMultipleSelection() && this.table.dataSource.filteredData.every((record) => this.table.selection.isSelected(record)))) {\n        indeterminate = false;\n        selectAll = true;\n\n      } else {\n        selectAll = false;\n        indeterminate = this.table.selection.hasValue();\n      }\n\n    }\n    this.table?.columns.update((columns) => {\n      columns.filter(f => f.columnDef === this.columnSelect)\n        .forEach(m => m.headerCell.indeterminate = indeterminate);\n      return [...columns];\n    });\n    this.table?.formHeader.controls[this.columnSelect]?.patchValue(selectAll, { emitEvent: false });\n\n    this.table?.tableService.onSelectIndeterminate.next(indeterminate);\n    this.table.ref.markForCheck();\n  }\n}\n","import { UntypedFormGroup } from \"@angular/forms\";\nimport * as _ from \"lodash\";\nimport * as moment from \"moment\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesColumnConfig } from \"../../../models/columnconfig.model\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\nexport class KlesHeaderFilterTableService implements KlesTableBaseService {\n    table: KlesTableComponent;\n    filteredValues = {};\n\n    filterData() {\n        if (this.table) {\n            this.filteredValues = this.table.formHeader.value;\n            Object.keys(this.filteredValues).map(key => {\n                if (moment.isMoment(this.filteredValues[key])) {\n                    this.filteredValues[key] = this.filteredValues[key].toDate().toDateString();\n                }\n            })\n            this.table.dataSource.filterPredicate = this.createFilter();\n            this.table.dataSource.filter = JSON.stringify(this.filteredValues);\n        }\n    }\n\n    /**Filter */\n    protected createFilter() {\n        const myFilterPredicate = (data: UntypedFormGroup, filter: string): boolean => {\n            let searchString = JSON.parse(filter);\n            const filterableColumn = this.table.columns().filter(f => f.filterable).map(m => m.columnDef);\n\n            searchString = _.pick(searchString, filterableColumn);\n            return Object.keys(searchString).filter(f => searchString[f] && filterableColumn.includes(f)).every(key => {\n                let keyValue = data?.controls[key]?.value;\n                const column: KlesColumnConfig = this.table.columns().find(col => col.columnDef === key);\n\n                if (column.headerCell.filterPredicate) {\n                    return column.headerCell.filterPredicate(keyValue, searchString[key]) || false;\n                }\n\n                if (keyValue && typeof (keyValue) === 'object' && column.cell.property) {\n                    keyValue = keyValue[column.cell.property];\n                }\n                if (searchString[key] && typeof (searchString[key]) === 'object') {\n                    if (Array.isArray(searchString[key])) {\n                        if (!searchString[key].length) {\n                            return true;\n                        }\n                        const list = (column.headerCell.property || column.cell.property) ?\n                            (searchString[key] as Array<any>).map(m => m[column.headerCell.property || column.cell.property].toLowerCase()) :\n                            (searchString[key] as Array<any>).map(m => m.toLowerCase());\n                        return keyValue && list.includes(keyValue.toString().trim().toLowerCase());\n                    } else {\n                        if (column.headerCell.property || column.cell.property) {\n                            searchString[key] = searchString[key][column.headerCell.property || column.cell.property];\n                        }\n                    }\n                }\n                if (!keyValue && searchString[key].length === 0) {\n                    return true;\n                } else if (!keyValue) {\n                    return false;\n                } else if (!searchString[key]) {\n                    return true;\n                }\n                return keyValue && keyValue.toString().trim().toLowerCase().indexOf(searchString[key].toString().toLowerCase()) !== -1;\n            });\n        };\n        return myFilterPredicate;\n    }\n\n}","\n\n\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\nimport { CdkDrag, CdkDragDrop, moveItemInArray, transferArrayItem } from \"@angular/cdk/drag-drop\";\nimport { IKlesDragDropTable } from \"./dragdrop.interface\";\nimport { Observable, of } from \"rxjs\";\nimport { take } from \"rxjs/operators\";\n\nexport class KlesDragDropRowTableService implements KlesTableBaseService, IKlesDragDropTable {\n    table: KlesTableComponent;\n\n    public beforeDrop(event: any): Observable<boolean> {\n        return of(true);\n    }\n\n    public onDrop(event: CdkDragDrop<any>) {\n        this.beforeDrop(event).pipe(take(1)).subscribe((isValid) => {\n            if (isValid) {\n                if (event.previousContainer === event.container) {\n                    const previousIndex = this.table.getFormArray().controls.findIndex((d) => d.value._id === event.item.data.value._id);\n                    moveItemInArray(this.table.getFormArray().controls, previousIndex, event.currentIndex);\n\n                    this.table._onDragDropRow.emit({\n                        currentIndex: event.currentIndex, previousIndex: previousIndex,\n                        group: this.table.getFormArray().controls[event.currentIndex] as UntypedFormGroup\n                    });\n                    this.table.dataSource.data = this.table.getFormArray().controls;\n                } else {\n                    event.previousContainer.data.tableService.deleteRecord([event.item.data]);\n                    this.table.tableService.addRecord(event.item.data.value, event.currentIndex);\n\n                    this.table._onDragDropRow.emit({\n                        currentIndex: event.currentIndex, previousIndex: event.previousIndex,\n                        container: event.container,\n                        group: this.table.getFormArray().controls[event.currentIndex] as UntypedFormGroup\n                    });\n                }\n                this.afterDrop(event);\n            }\n        })\n    }\n\n    public afterDrop(event: any) {\n\n    }\n\n    public sortPredicate(index: number, item: CdkDrag<UntypedFormGroup>): boolean {\n        return true;\n    }\n}","import { UntypedFormGroup } from \"@angular/forms\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\n\nexport class KlesUnfoldRowTableService implements KlesTableBaseService {\n    table: KlesTableComponent;\n\n\n    unfoldRow({ group, row, value }: { group: UntypedFormGroup, row: any, value: any }) {\n        if (this.table && this.table.templateUnfold) {\n            const isUnfold = group.controls._unfold?.value;\n            if (!this.table.templateUnfold?.multiUnfold && isUnfold) {\n                this.table.getFormArray().controls\n                    .filter((row: UntypedFormGroup) => row.controls._id.value !== group.controls._id.value)\n                    .forEach((row: UntypedFormGroup) => row.controls._unfold.patchValue(false, { emitEvent: false }));\n            }\n        }\n    }\n}","import { Injectable } from '@angular/core';\nimport { classes } from 'polytype';\nimport { DefaultKlesTableService } from './defaulttable.service';\nimport { KlesSelectionTableService } from './features/selection/selectiontable.service';\nimport { PageEvent } from '@angular/material/paginator';\nimport { KlesHeaderFilterTableService } from './features/filter/headerfilter-table.service';\nimport { KlesDragDropRowTableService } from './features/dragdrop/dragdroprow.service';\nimport { KlesUnfoldRowTableService } from './features/unfoldrow/unfoldrow.service';\nimport { interval } from 'rxjs';\nimport { SelectionChange } from '@angular/cdk/collections';\n\n// @Injectable({\n//     providedIn: 'root'\n// })\n@Injectable()\nexport class KlesTableService extends classes(DefaultKlesTableService, KlesSelectionTableService, KlesHeaderFilterTableService,\n    KlesDragDropRowTableService, KlesUnfoldRowTableService) {\n\n    constructor() {\n        super\n            (\n                { super: KlesSelectionTableService, arguments: ['#select'] },\n                { super: KlesHeaderFilterTableService },\n                { super: KlesUnfoldRowTableService },\n            );\n    }\n\n    //Selection\n    onSelectionChange(changed: SelectionChange<any>) {\n        this.updateSelection(changed);\n    }\n\n    //Header \n    onHeaderChange(e: any) {\n        this.filterData();\n    }\n    onHeaderCellChange(e: any) {\n        this.changeSelectionHeader(e);\n    }\n\n    //Line\n    onCellChange(e: any) {\n        this.changeSelectionLine(e);\n    }\n\n    drop(e: any): void {\n        this.onDrop(e);\n    }\n\n    getSortPredicate(index: number, item: any): boolean {\n        return this.sortPredicate(index, item);\n    }\n\n    onLineChange(e: any) {\n        this.unfoldRow(e);\n        this.table.matTable.renderRows();\n    }\n\n    //Footer\n    onFooterChange(e: any) { }\n\n    onPageChange(event: PageEvent) { }\n}\n","import { UntypedFormGroup } from '@angular/forms';\nimport { ISelection } from '../../../interfaces/selection.interface';\nimport { KlesTableBaseService } from '../tableservice.interface';\nimport { catchError, map, take, takeUntil } from 'rxjs/operators';\nimport { concat, of, Subject } from 'rxjs';\nimport { KlesLazyTableComponent } from '../../../component/lazytable/lazytable.component';\n\nexport class KlesSelectionTableLazyService implements KlesTableBaseService {\n  table: KlesLazyTableComponent;\n  columnSelect: string;\n\n  private _onSelectionChange = new Subject<void>();\n\n  constructor(column: string, private selection: ISelection) {\n    this.columnSelect = column;\n  }\n\n  changeSelectionHeader(e: any) {\n    this._onSelectionChange.next();\n    if (this.selection?.selectAll) {\n      if (e.column.columnDef === this.columnSelect) {\n        const val = (e.group as UntypedFormGroup).controls[this.columnSelect].value;\n\n        const filterHeader = this.table.columns()\n          .filter(column => column.filterable)\n          .map(column => {\n            return { [column.columnDef]: this.table.formHeader.controls[column.columnDef].value };\n          })\n          .reduce((a, b) => ({ ...a, ...b }), {});\n\n        concat(\n          of({ loading: true }),\n          this.selection.selectAll(val, filterHeader)\n            .pipe(\n              take(1),\n              takeUntil(this._onSelectionChange),\n              map((response) => {\n                return { loading: false, success: true, ...response };\n              }),\n              catchError(err => {\n                console.error(err);\n                return of({ loading: false, success: false, indeterminate: false, selected: false });\n              })\n            )\n        ).subscribe((response: any) => {\n          this.table.loading.set(response.loading);\n          if (!response.loading) {\n            this.table.getFormArray().controls.forEach((row: UntypedFormGroup) => {\n              row.controls[this.columnSelect]?.patchValue(response.selected, { emitEvent: false });\n            });\n\n            if ('footer' in response) {\n              this.table.formFooter.patchValue(response.footer);\n            }\n            this.table.tableService.onSelectIndeterminate.next(response.indeterminate);\n            this.table._onSelectedResponse?.emit(response);\n          }\n\n\n          this.table.ref.markForCheck();\n        });\n      }\n    }\n  }\n\n  changeSelectionLine(e: any) {\n    if (this.selection?.select) {\n      if (e.column.columnDef === this.columnSelect && e.row) {\n        const val = (e.group as UntypedFormGroup).controls[e.column.columnDef].value;\n        const filterHeader = this.table.columns()\n          .filter(column => column.filterable)\n          .map(column => {\n            return { [column.columnDef]: this.table.formHeader.controls[column.columnDef].value };\n          })\n          .reduce((a, b) => ({ ...a, ...b }), {});\n        this.selection.select(val, e.group, filterHeader)\n          .pipe(\n            take(1),\n            map((response) => {\n              return { success: true, ...response };\n            }),\n            catchError(err => {\n              console.error(err);\n              return of({ success: false, indeterminate: false, selected: false });\n            })\n          )\n          .subscribe((response) => {\n            if (!response.success) {\n              (e.group as UntypedFormGroup).controls[e.column.columnDef].patchValue(!val, { emitEvent: false });\n            } else if (response.success) {\n              if (response.indeterminate) {\n                this.table.formHeader\n                  .controls[this.columnSelect]?.patchValue(false, { onlySelf: true, emitEvent: false });\n              } else if (response.selected && !response.indeterminate) {\n                this.table.formHeader\n                  .controls[this.columnSelect]?.patchValue(true, { onlySelf: true, emitEvent: false });\n              } else {\n                this.table.formHeader\n                  .controls[this.columnSelect]?.patchValue(false, { onlySelf: true, emitEvent: false });\n              }\n\n              if ('children' in response) {\n                this.table.getFormArray().controls.forEach((row: UntypedFormGroup, index) => {\n                  const childSelection = (response.children as any[])?.find((f) => f._id === row.getRawValue()._id);\n                  if (childSelection) {\n                    row.controls[this.columnSelect]?.patchValue(\n                      (childSelection.indeterminate) ? -1 : childSelection.selected,\n                      { emitEvent: false, onlySelf: true });\n                    this.table.ref.markForCheck();\n                  }\n                });\n              }\n\n              this.table.columns.update((columns) => {\n                const idx = columns.findIndex(f => f.columnDef === this.columnSelect);\n                if (idx != -1) {\n                  columns[idx].headerCell = { ...columns[idx].headerCell, indeterminate: response.indeterminate };\n                }\n                return [...columns];\n              });\n\n              if ('footer' in response) {\n                this.table.formFooter.patchValue(response.footer);\n              }\n              // this.table.tableService.\n              this.table.tableService.onSelectIndeterminate.next(response.indeterminate);\n            }\n\n            this.table._onSelectedLineResponse.emit(response);\n          });\n      }\n    }\n  }\n}\n","import { PageEvent } from '@angular/material/paginator';\nimport * as _ from 'lodash';\nimport { classes } from 'polytype';\nimport { Observable, of } from 'rxjs';\nimport { IPagination } from '../../interfaces/pagination.interface';\nimport { ISelection } from '../../interfaces/selection.interface';\nimport { DefaultKlesTableService } from '../defaulttable.service';\nimport { KlesSelectionTableLazyService } from '../features/selection/selectiontablelazy.service';\nimport { KlesDragDropRowTableService } from '../features/dragdrop/dragdroprow.service';\nimport { KlesUnfoldRowTableService } from '../features/unfoldrow/unfoldrow.service';\nimport { AbstractKlesLazyTableService } from './abstractlazytable.service';\nimport { catchError, shareReplay, take } from 'rxjs/operators';\n\nexport class KlesLazyTableService extends classes(DefaultKlesTableService, KlesSelectionTableLazyService, KlesDragDropRowTableService, KlesUnfoldRowTableService) implements AbstractKlesLazyTableService {\n\n    constructor(private pagination: IPagination, selection?: ISelection) {\n        super\n            (\n                { super: KlesSelectionTableLazyService, arguments: ['#select', selection] },\n                { super: KlesUnfoldRowTableService },\n            );\n    }\n    //Header \n    onHeaderChange(e: any) {\n        const value = { ...this.table.formHeader.value };\n\n        this.table.columns().forEach(column => {\n            if (!column.filterable) {\n                delete value[column.columnDef];\n            }\n        });\n\n        if (!_.isEqual(this.table.filteredValues$.getValue(), value)) {\n            this.table.filteredValues$.next(value);\n        }\n    }\n    onHeaderCellChange(e: any) {\n        this.changeSelectionHeader(e);\n    }\n\n    //Line\n    onCellChange(e: any) {\n        this.changeSelectionLine(e);\n    }\n\n    onLineChange(e: any) {\n        this.unfoldRow(e);\n        super.onLineChange(e);\n    }\n\n    //Footer\n    onFooterChange(e: any) { }\n\n    onPageChange(event: PageEvent) {\n\n\n    }\n\n    drop(e: any): void {\n        this.onDrop(e);\n    }\n\n    getSortPredicate(index: number, item: any): boolean {\n        return true;\n    }\n\n    load(sort: string, order: string, page: number, perPage: number, filter?: { [key: string]: any; }):\n        Observable<{ lines: any[], totalCount: number, footer?: any, header?: any, indeterminate?: boolean }> {\n        const obs = this.pagination.list(sort, order, page, perPage, filter).pipe(shareReplay(1));\n        obs.pipe(\n            take(1),\n            catchError(() => {\n                return of({indeterminate: false });\n            })\n        ).subscribe((response) => {\n                this.table.columns.update((columns) => {\n                    const idx = columns.findIndex(f => f.columnDef === this.columnSelect);\n                    if (idx != -1) {\n                        columns[idx].headerCell = { ...columns[idx].headerCell, indeterminate: response.indeterminate };\n                    }\n                    return [...columns];\n                });\n            })\n        return obs;\n    }\n\n    reload(): void {\n        this.table.reload$.next();\n    }\n\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { DefaultKlesTableService } from '../defaulttable.service';\nimport { flatMap } from 'lodash';\nimport { isSome, fold } from 'fp-ts/lib/Option';\nimport { pipe } from 'fp-ts/lib/function';\n@Injectable({\n    providedIn: 'root'\n})\nexport class DefaultKlesTreetableService extends DefaultKlesTableService {\n\n    getDepthDataAccessor = (item: AbstractControl, property: string): number => {\n        return item.value._status.depth;\n    }\n\n    getParentDataAccessor(item: UntypedFormGroup, property: string): AbstractControl {\n        const [parent] = this.table.searchableTree.map(st => this.table.treeService.searchById(st, item.value._id))\n            .filter(node => {\n                return isSome(node);\n            })\n            .flatMap(node => {\n                return pipe(\n                    node,\n                    fold(() => -1, (n: any) => n.pathToRoot.length)\n                );\n            })\n            .map(node => this.table.dataSource.data.find(row => row.value._id === node._id));\n        return parent || null;\n    }\n\n\n    getTable() {\n        return this;\n    }\n\n    getSortingDataAccessor = (item: AbstractControl, property) => {\n        let value: any = item.value[property];\n        if (value) {\n            if (typeof value === 'string') {\n                value = value.toLowerCase();\n            }\n            else if (typeof value === 'object') {\n                if (value.key) {\n                    value = value.key;\n                }\n            }\n        }\n        return value;\n    };\n\n    onLineOpen(e: any) {\n\n    }\n\n    onLineClose(e: any) {\n\n    }\n\n    onLineChange(e: any) {\n        this.changeChildrenVisibility(e.group, e.group.controls._status.value.isExpanded);\n        super.onLineChange(e);\n    }\n\n    protected changeChildrenVisibility(node: UntypedFormGroup, visibility: boolean) {\n\n        const paginator = node.value._status.paginator;\n        const start = (paginator?.pageIndex * paginator?.pageSize) || 0;\n        const end = (start + paginator?.pageSize) || node.value._status.children?.length;\n\n        node.value._status.children?.forEach((child, index) => {\n            const childGroup = this.table.getFormArray().controls.find(control => control.value._id === child._id) as UntypedFormGroup;\n\n            if (childGroup) {\n                childGroup.controls._status.patchValue({\n                    isVisible: (index >= start && index < end) ? visibility : false,\n                }, { emitEvent: false });\n                this.changeChildrenVisibility(childGroup, childGroup.controls._status.value.isExpanded\n                    && ((index >= start && index < end) ? visibility : false));\n            }\n        });\n    }\n\n    addRecord(record, index?: number): UntypedFormGroup {\n\n        const searchableNode = this.table.converterService.toSearchableTree(record);\n        const treeNode = this.table.converterService.toTreeTableTree(searchableNode);\n\n        const groups = this.table.createFormNode(treeNode);\n\n        if (typeof index !== 'undefined') {\n            this.table._lines.splice(index, 0, record);\n            groups.forEach((group, i) => {\n                this.table.getFormArray().insert(index + i, group);\n            });\n        } else {\n            this.table._lines.push(record);\n            groups.forEach((group) => {\n                this.table.getFormArray().push(group);\n            });\n        }\n        this.table.searchableTree = this.table._lines.map(t => this.table.converterService.toSearchableTree(t));\n\n        this.updateDataSource();\n\n        return groups[0];\n    }\n\n    updateRow(row: any, options?: { emitEvent: boolean, onlySelf: boolean }) {\n        const data = {\n            ...row.value,\n            _id: row._id,\n            // _status: { depth: row.depth, isExpanded: row.isExpanded, isVisible: row.isVisible }\n        };\n        return this.updateRecord(data, options);\n    }\n\n    addChild(parentId: string, record): UntypedFormGroup {\n        const treeTableTree = this.table.searchableTree.map(st => this.table.converterService.toTreeTableTree(st));\n        const parent = treeTableTree.find(s => s._id === parentId);\n        const parentDepth = ~~parent?.depth;\n\n        if (parent) {\n            const searchableNode = this.table.converterService.toSearchableTree(record);\n\n            const treeNode = this.table.converterService.toTreeTableTree(searchableNode);\n            treeNode.depth = ~~parentDepth + 1;\n            const groups = this.table.createFormNode(treeNode);\n            const indexParent = this.table.getFormArray().controls.findIndex((group: UntypedFormGroup) => group.value._id === parentId);\n            const index = indexParent;\n\n            if (parent.children) {\n                parent.children.push({ value: groups[0].getRawValue() });\n            } else {\n                parent.children = [{ value: groups[0].getRawValue() }];\n            }\n\n            this.table._lines[indexParent].children = parent.children;\n            this.table._lines.splice(index + 1, 0, record);\n            groups.forEach((group, i) => {\n                this.table.getFormArray().insert(index + (i + 1), group);\n            });\n            this.table.searchableTree = (this.table.getFormArray() as UntypedFormArray).controls.map(line => {\n                return {\n                    value: (line.value?._id === parentId) ? { ...line.value, children: parent.children, childrenCounter: ~~parent.children?.length } : line.value,\n                    _id: line.value?._id,\n                    children: (line.value?._id === parentId) ? parent.children : line.value?._status?.children,\n                    childrenCounter: (line.value?._id === parentId) ? ~~parent.children?.length : ~~line.value?._status?.childrenCounter,\n                    isBusy: line.value?._status?.isBusy || false\n                }\n            });\n\n            this.updateDataSource();\n            return groups[0];\n        }\n\n        return null;\n    }\n\n    unfoldPredicate = (index: any, data: any) => {\n        return data.controls._status.value.isVisible && data.controls._unfold.value;\n    }\n}\n","import { Observable, of } from \"rxjs\";\nimport { KlesDragDropRowTableService } from \"./dragdroprow.service\";\nimport { CdkDrag, CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { take } from \"rxjs/operators\";\n\nexport class KlesDragDropRowTreeTableService extends KlesDragDropRowTableService {\n    beforeDrop(event: any): Observable<boolean> {\n        const rowDrop = event.item.data;\n        const row = this.table.getFormArray().controls[event.currentIndex];\n        return of(row.value._status.depth === rowDrop.value._status.depth && row.value._status.parentId === rowDrop.value._status.parentId)\n    }\n\n    public onDrop(event: CdkDragDrop<any>) {\n        this.beforeDrop(event).pipe(take(1)).subscribe((isValid) => {\n            if (isValid) {\n                const previousIndex = this.table.getFormArray().controls.findIndex((d) => d.value._id === event.item.data.value._id);\n\n                const currentIndex = (event.previousIndex < event.currentIndex ?\n                    this.findIndexLastChild(this.table.getFormArray().controls[event.currentIndex] as UntypedFormGroup) || event.currentIndex\n                    : event.currentIndex);\n\n                moveItemInArray(this.table.getFormArray().controls, previousIndex, currentIndex);\n                this.moveChildren(this.table.getFormArray().controls[currentIndex] as UntypedFormGroup, currentIndex);\n                this.table._onDragDropRow.emit({\n                    currentIndex, previousIndex: previousIndex,\n                    group: this.table.getFormArray().controls[currentIndex] as UntypedFormGroup\n                });\n                this.table.dataSource.data = this.table.getFormArray().controls;\n                this.afterDrop(event);\n            }\n        })\n    }\n\n    private moveChildren(parent: UntypedFormGroup, index: number): number {\n        parent?.controls._status.value.children?.forEach((child) => {\n            const previousIndex = this.table.getFormArray().controls.findIndex((group: UntypedFormGroup) => group.controls._id.value === child._id);\n            if (previousIndex !== -1) {\n                if (previousIndex > index) {\n                    index++;\n                }\n                moveItemInArray(this.table.getFormArray().controls, previousIndex, index);\n                index = this.moveChildren(this.table.getFormArray().controls[index] as UntypedFormGroup, index);\n            }\n        })\n        return index;\n    }\n\n    private findIndexLastChild(parent: UntypedFormGroup): number {\n        if (!parent.controls._status.value.children || !parent.controls._status.value.children.length) {\n            return null;\n        }\n\n        return Math.max(...parent.controls._status.value.children?.map((child) => {\n            return this.table.getFormArray().controls.findIndex((group: UntypedFormGroup) => group.controls._id.value === child._id);\n        }))\n    }\n\n    public sortPredicate(index: number, item: CdkDrag<UntypedFormGroup>): boolean {\n        return (this.table.getFormArray().controls[index] as UntypedFormGroup).controls._status.value.depth === item.data.controls._status.value.depth\n            && (this.table.getFormArray().controls[index] as UntypedFormGroup).controls._status.value.parentId === item.data.controls._status.value.parentId;\n    }\n}","import { UntypedFormGroup } from '@angular/forms';\nimport { PageEvent } from '@angular/material/paginator';\nimport * as _ from 'lodash';\nimport { classes } from 'polytype';\nimport { Observable, of } from 'rxjs';\nimport { ILoadChildren } from '../../interfaces/loadChildren.interface';\nimport { IPagination } from '../../interfaces/pagination.interface';\nimport { ISelection } from '../../interfaces/selection.interface';\nimport { KlesSelectionTableLazyService } from '../features/selection/selectiontablelazy.service';\nimport { DefaultKlesTreetableService } from '../treetable/defaulttreetable.service';\nimport { KlesDragDropRowTreeTableService } from '../features/dragdrop/dragdroprowtree.service';\n\nimport * as O from \"fp-ts/lib/Option\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport { catchError, shareReplay, take } from 'rxjs/operators';\n\nexport class KlesLazyTreetableService extends classes(DefaultKlesTreetableService, KlesSelectionTableLazyService, KlesDragDropRowTreeTableService) {\n\n    constructor(private data: IPagination, private child: ILoadChildren, selection?: ISelection) {\n        super\n            (\n                { super: KlesSelectionTableLazyService, arguments: ['#select', selection] },\n            );\n\n    }\n\n    //Header \n    onHeaderChange(e: any) {\n        const value = { ...this.table.formHeader.value };\n\n        this.table.columns().forEach(column => {\n            if (!column.filterable) {\n                delete value[column.columnDef];\n            }\n        });\n\n        if (!_.isEqual(this.table.filteredValues$.getValue(), value)) {\n            this.table.filteredValues$.next(value);\n        }\n    }\n\n    onHeaderCellChange(e: any) {\n        this.changeSelectionHeader(e);\n    }\n\n    //Line\n    onCellChange(e: any) {\n        this.changeSelectionLine(e);\n    }\n\n    onLineChange(e: any) {\n        super.onLineChange(e);\n    }\n\n    drop(e: any): void {\n        this.onDrop(e);\n    }\n\n    getSortPredicate(index: number, item: any): boolean {\n        return this.sortPredicate(index, item);\n    }\n\n    protected changeChildrenVisibility(node: UntypedFormGroup, visibility: boolean) {\n        node.value._status.children?.forEach(child => {\n            const childGroup = this.table.getFormArray().controls.find(control => control.value._id === child._id) as UntypedFormGroup;\n            if (childGroup) {\n                childGroup.controls._status.patchValue({\n                    isVisible: visibility,\n                }, { emitEvent: false });\n                this.changeChildrenVisibility(childGroup, childGroup.controls._status.value.isExpanded && visibility);\n            }\n        });\n    }\n\n    //Footer\n    onFooterChange(e: any) { }\n\n    onPageChange(event: PageEvent) {\n        // super.onPageChange(event);\n    }\n\n    load(sort: string, order: string, page: number, perPage: number, filter?: { [key: string]: any; }):\n        Observable<{ lines: any[], totalCount: number, footer?: any, header?: any }> {\n        const obs = this.data.list(sort, order, page, perPage, filter).pipe(shareReplay(1));\n        obs.pipe(\n            take(1),\n            catchError(() => {\n                return of({ indeterminate: false });\n            })\n        ).subscribe((response) => {\n            this.table.columns.update((columns) => {\n                const idx = columns.findIndex(f => f.columnDef === this.columnSelect);\n                if (idx != -1) {\n                    columns[idx].headerCell = { ...columns[idx].headerCell, indeterminate: response.indeterminate };\n                }\n                return [...columns];\n            });\n        })\n        return obs;\n    }\n\n    loadChild(parentId: string, sort?: string, order?: string, page?: number, perPage?: number, filter?: { [key: string]: any; }): Observable<{ lines: any[], totalCount: number }> {\n        return this.child.loadChildren(parentId, sort, order, page, perPage, filter);\n    }\n\n    addChild(parentId: string, record): UntypedFormGroup {\n        const searchableParent = this.table.searchableTree.map(s => {\n            return this.table.treeService.getById(s, parentId)\n        }).filter(Boolean)?.[0];\n\n        if (searchableParent) {\n            const searchableNode = this.table.converterService.toSearchableTree(record);\n            searchableParent.children ? searchableParent.children.push(searchableNode) : searchableParent.children = [searchableNode];\n\n            const treeTableTree = this.table.searchableTree.map(st => this.table.converterService.toTreeTableTree(st));\n\n            const treeTableParent = this.table.treeService.flatten(treeTableTree.map(s => {\n                return this.table.treeService.searchById(s, parentId)\n            }).find(s => pipe(\n                O.isSome(s)\n            )))[0].value;\n\n            const treeNode = this.table.converterService.toTreeTableTree(searchableNode);\n            treeNode.depth = ~~treeTableParent.pathToRoot.length + 1;\n\n            const groups = this.table.createFormNode(treeNode);\n\n            const parentIndex = this.table.getFormArray().controls.findIndex((group: UntypedFormGroup) => group.value._id === parentId);\n            const nbSibling = this.table.getFormArray().controls[parentIndex].value._status?.children?.length || 0;\n\n            this.table.getFormArray().controls[parentIndex].controls._status.patchValue({\n                children: (this.table.getFormArray().controls[parentIndex].controls._status.value.children || []).concat([treeNode]),\n                childrenCounter: (this.table.getFormArray().controls[parentIndex].controls._status.value.children?.length || 0) + 1\n            }, { emitEvent: false });\n\n            groups.forEach((group, index) => {\n                this.table.getFormArray().insert(parentIndex + nbSibling + index + 1, group);\n            });\n\n            this.updateDataSource();\n            return groups[0];\n        }\n    }\n\n\n    addChildren(parentId: string, record: any[]): UntypedFormGroup[] {\n        return record.map(m => this.addChild(parentId, record));\n    }\n\n\n    deleteRow(rowId: string) {\n        const row = this.table.getFormArray().controls.find((group: UntypedFormGroup) => group.value._id === rowId);\n        if (row) {\n            row.controls._status.value.children?.forEach((child) => {\n                this.deleteRow(child._id);\n            });\n\n            const parentId = row.controls._status.value.parentId;\n            if (parentId) {\n                const parent: UntypedFormGroup = this.table.getFormArray().controls.find((group: UntypedFormGroup) => group.value._id === parentId);\n                if (parent) {\n                    parent.controls._status.patchValue({ children: parent.controls._status.value.children.filter(c => c._id !== rowId) }, { emitEvent: false });\n                }\n            }\n\n            const index = this.table.getFormArray().controls.findIndex((group: UntypedFormGroup) => group.value._id === rowId);\n            if (index !== -1) {\n                this.table.getFormArray().removeAt(index);\n            }\n\n            this.table.searchableTree = this.table.searchableTree.filter(searchableNode => searchableNode._id !== rowId);\n        }\n    }\n\n    deleteChildren(parentId: string) {\n        const parent = this.table.getFormArray().controls.find((group: UntypedFormGroup) => group.value._id === parentId);\n        if (parent?.controls._status.controls.children?.value) {\n            parent?.controls._status.controls.children?.value?.forEach((child) => {\n                this.deleteRow(child._id);\n            });\n\n            parent?.controls._status.patchValue({ children: [] }, { emitEvent: false });\n\n            const searchableParent = this.table.searchableTree.map(s => {\n                return this.table.treeService.getById(s, parentId)\n            })?.[0];\n\n            if (searchableParent) {\n                searchableParent.children = [];\n            }\n\n            this.updateDataSource();\n        }\n\n    }\n\n    public reload(): void {\n        this.table.reload$.next();\n    }\n\n}\n","import { UntypedFormGroup } from \"@angular/forms\";\nimport { KlesTreetableComponent } from \"../../../component/treetable/treetable.component\";\nimport { KlesSelectionTableService } from \"./selectiontable.service\";\nimport * as O from \"fp-ts/lib/Option\";\nimport { pipe } from \"fp-ts/lib/function\";\n\nexport class KlesSelectionTreetableService extends KlesSelectionTableService {\n  table: KlesTreetableComponent<any>;\n\n  columnSelect: string;\n\n  constructor(column: string) {\n    super(column);\n  }\n\n  changeSelectionLine(e: any) {\n    if (this.table) {\n      if (e.column.columnDef === this.columnSelect && e.row) {\n        if (this.table.dataSource.filteredData.includes(e.group)) {\n          const selected = (e.group as UntypedFormGroup).controls[e.column.columnDef].value;\n          this.updateChildrens(e.column, e.group, selected);\n          this.updateParent(e.column, e.group);\n\n          if ((e.group as UntypedFormGroup).controls[e.column.columnDef].value) {\n            this.table.selection.select(e.group);\n          } else {\n            this.table.selection.deselect(e.group);\n          }\n        }\n      }\n\n      if (this.isAllSelected()) {\n        this.table.columns().filter(f => f.columnDef === this.columnSelect).map(m => m.headerCell.indeterminate = false);\n        this.table.formHeader.controls[this.columnSelect]?.patchValue(true, { onlySelf: true, emitEvent: false });\n        this.table.tableService.onSelectIndeterminate.next(false);\n\n      } else {\n        this.table.columns().filter(f => f.columnDef === this.columnSelect).map(m => m.headerCell.indeterminate = !this.table.selection.isEmpty());\n        this.table.tableService.onSelectIndeterminate.next(!this.table.selection.isEmpty());\n        if (this.table.selection.isEmpty()) {\n          this.table.formHeader.controls[this.columnSelect]?.patchValue(false, { onlySelf: true, emitEvent: false });\n        }\n      }\n\n      this.table.form.updateValueAndValidity();\n      this.table.ref.markForCheck();\n    }\n  }\n\n  childrenIsAllSelected(column, group: UntypedFormGroup): boolean {\n    if (!group.value._status.children) {\n      return true;\n    }\n\n    return group.value._status.children.every(children => {\n      return (this.table.dataSource.data.find(row => row.value._id === children._id) as UntypedFormGroup).controls[column.columnDef].value === true;\n    });\n  }\n\n\n  childrenAtLeastOneSelected(column, group: UntypedFormGroup): boolean {\n    if (!group.value._status.children) {\n      return true;\n    }\n    return group.value._status.children.some(children => {\n      const index = this.table.dataSource.data.findIndex(row => row.value._id === children._id);\n\n      // return (this.table.dataSource.data.find(row => row.value._id === children._id) as UntypedFormGroup).controls[column.columnDef].value === true\n      //   || this.table.lineFields[index].find(field => field.name === column.columnDef).indeterminate === true;\n      const listField = this.table.listFields.find((f) => f._id === children._id);\n\n      return (this.table.dataSource.data.find(row => row.value._id === children._id) as UntypedFormGroup).controls[column.columnDef].value === true\n        || listField?.fields?.find(field => field.name === column.columnDef).indeterminate === true;\n    });\n  }\n\n\n\n  isAllSelected(): boolean {\n    if (this.table) {\n      const numSelected = this.table.selection.selected\n        .filter(s => this.table.dataSource.filteredData.includes(s)).length;\n      const numRows = this.table.dataSource.filteredData.length;\n      return numSelected === numRows;\n    }\n    return false;\n  }\n\n\n\n  updateChildrens(column, group: UntypedFormGroup, selected: boolean) {\n    const childrens = (group.controls._status as UntypedFormGroup).controls.children?.value || [];\n    childrens.forEach(children => {\n      const childGroup = this.table.dataSource.data.find(row => row.value._id === children._id) as UntypedFormGroup;\n      if (childGroup.controls[column.columnDef].value !== selected) {\n        childGroup.controls[column.columnDef].patchValue(selected, { emitEvent: false });\n\n        if (childGroup.controls[column.columnDef].value) {\n          this.table.selection.select(childGroup);\n        } else {\n          this.table.selection.deselect(childGroup);\n        }\n      }\n      this.updateChildrens(column, childGroup, selected);\n    });\n  }\n\n  updateParent(column, group: UntypedFormGroup) {\n    // const node = this.table.searchableTree.map(st => this.table.treeService.searchById(st, group.value._id)).find(st => st.isSome()).getOrElse(null);\n    const node = this.table.searchableTree\n      .map(st => this.table.treeService.searchById(st, group.value._id))\n      .find(st =>\n        pipe(\n          O.isSome(st)\n        )\n      );\n    if (node) {\n      // node.pathToRoot.forEach(parent => {\n      //     const parentGroup = this.table.dataSource.data.find(row => row.value._id === parent._id) as FormGroup;\n\n      //     const index = this.table.dataSource.data.findIndex(row => row.value._id === parent._id);\n      //     this.table.lineFields[index].find(field => field.name === column.columnDef).indeterminate = false;\n\n      //     if (this.childrenIsAllSelected(column, parentGroup)) {\n      //         parentGroup.controls[column.columnDef].patchValue(true, { emitEvent: false });\n      //     } else if (this.childrenAtLeastOneSelected(column, parentGroup)) {\n      //         this.table.lineFields[index].find(field => field.name === column.columnDef).indeterminate = true;\n      //         parentGroup.controls[column.columnDef].patchValue(false, { emitEvent: false });\n      //     } else {\n      //         parentGroup.controls[column.columnDef].patchValue(false, { emitEvent: false });\n      //     }\n\n      // })\n      pipe(\n        node,\n        O.map(m => m.pathToRoot.forEach(parent => {\n          const parentGroup = this.table.dataSource.data.find(row => row.value._id === parent._id) as UntypedFormGroup;\n\n          const index = this.table.dataSource.data.findIndex(row => row.value._id === parent._id);\n          // this.table.lineFields[index].find(field => field.name === column.columnDef).indeterminate = false;\n          const listField = this.table.listFields.find((f) => f._id === parent._id);\n          if (listField) {\n            listField.fields.find(field => field.name === column.columnDef).indeterminate = false;\n          }\n\n          if (this.childrenIsAllSelected(column, parentGroup)) {\n            parentGroup.controls[column.columnDef].patchValue(true, { emitEvent: false });\n            this.table.selection.select(parentGroup);\n          } else if (this.childrenAtLeastOneSelected(column, parentGroup)) {\n            // this.table.lineFields[index].find(field => field.name === column.columnDef).indeterminate = true;\n            if (listField) {\n              listField.fields.find(field => field.name === column.columnDef).indeterminate = false;\n            }\n            parentGroup.controls[column.columnDef].patchValue(false, { emitEvent: false });\n            this.table.selection.deselect(parentGroup);\n          } else {\n            parentGroup.controls[column.columnDef].patchValue(false, { emitEvent: false });\n            this.table.selection.deselect(parentGroup);\n          }\n\n        })\n        )\n      );\n    }\n  }\n}\n","import { Injectable } from \"@angular/core\";\nimport { classes } from \"polytype\";\nimport { KlesSelectionTreetableService } from \"../features/selection/selectiontreetable.service\";\nimport { DefaultKlesTreetableService } from \"./defaulttreetable.service\";\nimport { KlesDragDropRowTreeTableService } from \"../features/dragdrop/dragdroprowtree.service\";\nimport { SelectionChange } from \"@angular/cdk/collections\";\n\n@Injectable()\nexport class KlesTreetableService extends classes(DefaultKlesTreetableService, KlesSelectionTreetableService, KlesDragDropRowTreeTableService) {\n\n    constructor() {\n        super\n            (\n                { super: KlesSelectionTreetableService, arguments: ['#select'] },\n            );\n    }\n\n    onSelectionChange(changed: SelectionChange<any>): void {\n        this.updateSelection(changed);\n    }\n\n    onHeaderCellChange(e: any) {\n        this.changeSelectionHeader(e);\n    }\n\n    onCellChange(e: any) {\n        this.changeSelectionLine(e);\n    }\n\n    drop(e: any): void {\n        this.onDrop(e);\n    }\n\n    getSortPredicate(index: number, item: any): boolean {\n        return this.sortPredicate(index, item);\n    }\n}\n","import { FormGroup, UntypedFormGroup } from \"@angular/forms\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\nimport { SelectionChange } from \"@angular/cdk/collections\";\n\nexport class KlesSelectionClickTableService implements KlesTableBaseService {\n    table: KlesTableComponent;\n    columnSelect: string;\n\n    constructor(column?: string) {\n        this.columnSelect = column;\n    }\n\n    updateSelection(changed: SelectionChange<any>) {\n        changed.removed.forEach((group: FormGroup) => {\n            group.controls[this.columnSelect].patchValue(false, { emitEvent: false });\n        });\n        this.table.columns().filter(f => f.columnDef === this.columnSelect)\n            .map(m => m.headerCell.indeterminate = !this.table.selection.isEmpty());\n        if (this.table.selection.isEmpty()) {\n            this.table.formHeader.controls[this.columnSelect]?.patchValue(false, { emitEvent: false });\n        }\n        this.table.ref.markForCheck();\n    }\n\n    changeClickLine(group: UntypedFormGroup) {\n        if (this.table) {\n            if (this.table.dataSource.filteredData.includes(group)) {\n                if (!this.table.selection.isMultipleSelection()) {\n                    this.table.getFormArray().controls\n                        .filter((row: UntypedFormGroup) => row.value._id !== group.value._id)\n                        .forEach((row: UntypedFormGroup) => {\n                            row.controls[this.columnSelect]?.patchValue(false, { emitEvent: false });\n                        });\n                }\n                if (!this.table.selection.isSelected(group)) {\n                    this.table.selection.select(group);\n                    group.controls[this.columnSelect]?.patchValue(true, { emitEvent: false });\n                } else {\n                    this.table.selection.deselect(group);\n                    group.controls[this.columnSelect]?.patchValue(false, { emitEvent: false });\n                }\n                this.table._onSelected.emit(this.table.selection.selected);\n            } else {\n                this.table.selection.deselect(group);\n                group.controls[this.columnSelect]?.patchValue(false, { emitEvent: false });\n            }\n            this.table.ref.markForCheck();\n        }\n    }\n}","import { UntypedFormGroup } from \"@angular/forms\";\nimport * as _ from \"lodash\";\nimport { KlesTableComponent } from \"../../../component/table/table.component\";\nimport { KlesTableBaseService } from \"../tableservice.interface\";\nexport class KlesTextFilterTableService implements KlesTableBaseService {\n    table: KlesTableComponent;\n    filteredValues = {};\n\n    filterData() {\n        if (this.table) {\n            this.filteredValues = this.table.formHeader.value;\n            this.table.dataSource.filterPredicate = this.createFilter();\n            this.table.dataSource.filter = JSON.stringify(this.filteredValues);\n        }\n    }\n\n    /**Filter */\n    protected createFilter() {\n        const myFilterPredicate = (data: UntypedFormGroup, filter: string): boolean => {\n            let searchString = JSON.parse(filter);\n            const filterableColumn = this.table.columns().filter(f => f.filterable).map(m => m.columnDef);\n\n            searchString = _.pick(searchString, filterableColumn);\n\n            return Object.keys(searchString).filter(f => filterableColumn.includes(f)).every(key => {\n\n                let keyValue = data?.controls[key]?.value;\n\n                if (!keyValue && searchString[key].length === 0) {\n                    return true;\n                } else if (!keyValue) {\n                    return false;\n                } else if (!searchString[key]) {\n                    return true;\n                }\n\n                const column = this.table.columns().find(col => col.columnDef === key);\n\n                if (column.cell.property) {\n                    keyValue = data?.controls[key]?.value[column.cell.property];\n                }\n                return keyValue && keyValue.toString().trim().toLowerCase().indexOf(searchString[key].toLowerCase()) !== -1;\n            });\n        };\n        return myFilterPredicate;\n    }\n\n\n}","export enum AlignCell {\n    LEFT = 'left',\n    CENTER = 'center',\n    RIGHT = 'right'\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatListModule } from '@angular/material/list';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { KlesMaterialDatepickerModule } from '@3kles/kles-material-datepicker';\n\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MatSliderModule,\n        MatButtonModule,\n        MatToolbarModule,\n        MatIconModule,\n        MatSidenavModule,\n        MatBadgeModule,\n        MatListModule,\n        MatGridListModule,\n        MatFormFieldModule,\n        MatInputModule,\n        MatSelectModule,\n        MatRadioModule,\n        MatDatepickerModule,\n        MatChipsModule,\n        MatTooltipModule,\n        MatTableModule,\n        MatPaginatorModule,\n        MatCardModule,\n        MatMenuModule,\n        MatTabsModule,\n        CdkTableModule,\n        MatProgressSpinnerModule,\n        MatCheckboxModule,\n        MatDialogModule,\n        MatAutocompleteModule,\n        MatProgressBarModule,\n        MatSortModule,\n        MatExpansionModule,\n        MatNativeDateModule,\n        MatSnackBarModule,\n        MatTreeModule,\n        MatSliderModule,\n        MatButtonModule,\n        MatSlideToggleModule,\n        DragDropModule\n    ],\n\n    exports: [\n        MatButtonModule,\n        MatToolbarModule,\n        MatIconModule,\n        MatSidenavModule,\n        MatBadgeModule,\n        MatListModule,\n        MatGridListModule,\n        MatInputModule,\n        MatFormFieldModule,\n        MatSelectModule,\n        MatRadioModule,\n        MatDatepickerModule,\n        MatChipsModule,\n        MatTooltipModule,\n        MatTableModule,\n        MatPaginatorModule,\n        MatCardModule,\n        MatMenuModule,\n        MatTabsModule,\n        CdkTableModule,\n        MatProgressSpinnerModule,\n        MatCheckboxModule,\n        MatDialogModule,\n        MatAutocompleteModule,\n        MatProgressBarModule,\n        MatSortModule,\n        MatExpansionModule,\n        MatNativeDateModule,\n        MatSnackBarModule,\n        MatTreeModule,\n        MatSliderModule,\n        MatButtonModule,\n        MatSlideToggleModule,\n        DragDropModule,\n        KlesMaterialDatepickerModule\n    ],\n    providers: [\n        MatDatepickerModule,\n        MatDialogModule\n    ]\n})\n\nexport class MaterialModule { }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { KlesTableComponent } from './component/table/table.component';\nimport { KlesLazyTableComponent } from './component/lazytable/lazytable.component';\nimport { MaterialModule } from './modules/material.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KlesFormTextHeaderFilterComponent } from './component/header/textheaderfilter.component';\nimport { KlesMaterialDynamicformsModule } from '@3kles/kles-material-dynamicforms';\nimport { KlesTableDirective } from './directives/table.directive';\nimport { AbstractKlesTableService } from './services/abstracttable.service';\nimport { KlesTableService } from './services/table.service';\nimport { KlesResizeColumnDirective } from './directives/resizecolumn.directive';\nimport { FieldPipe } from './pipe/field.pipe';\nimport { GroupPipe } from './pipe/group.pipe';\nimport { ElevationPipe } from './pipe/elevation.pipe';\nimport { KlesCellStyleDirective } from './directives/cellstyle.directive';\nimport { KlesFormDynamicHeaderFilterComponent } from './component/header/dynamic-headerfilter.component';\nimport { KlesComponentHeaderDirective } from './directives/dynamic-component.directive';\nimport { KlesFormTextHeaderComponent } from './component/header/textheader.component';\nimport { KlesLeafComponent } from './component/treetable/cell/leaf.component';\nimport { KlesNodeComponent } from './component/treetable/cell/node.component';\nimport { KlesTreetableComponent } from './component/treetable/treetable.component';\nimport { KlesDynamicTreeCellDirective } from './directives/dynamic-treecell.directive';\nimport { KlesTreetableDirective } from './directives/treetable.directive';\nimport { DefaultKlesTreetableService } from './services/treetable/defaulttreetable.service';\nimport { ConverterService } from './services/treetable/converter.service';\nimport { TreeService } from './services/treetable/tree.service';\nimport { KlesLazyTreetableComponent } from './component/lazytreetable/lazytreetable.component';\nimport { AbstractKlesLazyTableService } from './services/lazy/abstractlazytable.service';\nimport { AbstractKlesTreeTableService } from './services/treetable/abstracttreetable.service';\nimport { AbstractKlesLazyTreetableService } from './services/lazy/abstractlazytreetable.service';\nimport { RowPipe } from './pipe/row.pipe';\nimport { RowTreePipe } from './pipe/rowtree.pipe';\nimport { RowDragDisabledPipe } from './pipe/rowdragdisabled.pipe';\nimport { KlesDynamicCellDirective } from './directives/dynamic-cell.directive';\nimport { KlesUnfoldCellComponent } from './component/cell/unfoldcell.component';\nimport { SpanPipe } from './pipe/span.pipe';\nimport { CellPipe } from './pipe/cell.pipe';\nimport { KlesDynamicHeaderDirective } from './directives/dynamic-header.directive';\nimport { CapitalizePipe } from './pipe/capitalize.pipe';\nimport { KlesDynamicHeaderFilterDirective } from './directives/dynamic-header-filter.directive';\n\nconst components = [\n    KlesTableComponent,\n    KlesLazyTableComponent,\n    KlesFormTextHeaderComponent,\n    KlesFormTextHeaderFilterComponent,\n    KlesFormDynamicHeaderFilterComponent,\n    KlesLeafComponent,\n    KlesNodeComponent,\n    KlesTreetableComponent,\n    KlesLazyTreetableComponent,\n    KlesUnfoldCellComponent\n];\nconst directives = [\n    KlesTableDirective,\n    KlesResizeColumnDirective,\n    KlesCellStyleDirective,\n    KlesComponentHeaderDirective,\n    KlesDynamicTreeCellDirective,\n    KlesTreetableDirective,\n    KlesDynamicCellDirective,\n    KlesDynamicHeaderDirective,\n    KlesDynamicHeaderFilterDirective\n];\nconst services = [\n    AbstractKlesTableService,\n    AbstractKlesLazyTableService,\n    KlesTableService,\n    AbstractKlesTreeTableService,\n    AbstractKlesLazyTreetableService,\n    DefaultKlesTreetableService,\n    ConverterService,\n    TreeService\n];\nconst pipes = [FieldPipe, GroupPipe, ElevationPipe, RowPipe, RowTreePipe, RowDragDisabledPipe, SpanPipe, CellPipe, CapitalizePipe];\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MaterialModule,\n        ReactiveFormsModule,\n        FormsModule,\n        KlesMaterialDynamicformsModule,\n        components,\n        directives,\n        pipes\n    ],\n    exports: [\n        components,\n        directives,\n        pipes\n    ],\n    providers: [\n        services,\n        pipes\n    ]\n})\nexport class KlesMaterialTableModule { }\n","/*\n * Public API Surface of kles-material-table\n */\n\n/**MODEL */\nexport * from './lib/models/cell.model';\nexport * from './lib/models/node.model';\nexport * from './lib/models/options.model';\nexport * from './lib/models/columnconfig.model';\nexport * from './lib/models/tableconfig.model';\nexport * from './lib/models/header-field.config.model';\nexport * from './lib/interfaces/pagination.interface';\nexport * from './lib/interfaces/selection.interface';\nexport * from './lib/interfaces/loadChildren.interface';\nexport * from './lib/models/treetableconfig.model';\n\n/**DIRECTIVE */\nexport * from './lib/directives/table.directive';\nexport * from './lib/directives/resizecolumn.directive';\nexport * from './lib/directives/cellstyle.directive';\nexport * from './lib/directives/dynamic-component.directive';\nexport * from './lib/directives/dynamic-treecell.directive';\nexport * from './lib/directives/treetable.directive';\nexport * from './lib/directives/dynamic-cell.directive';\nexport * from './lib/directives/dynamic-header.directive';\nexport * from './lib/directives/dynamic-header-filter.directive';\n\n/**COMPONENT */\nexport * from './lib/component/table/table.component';\nexport * from './lib/component/lazytable/lazytable.component';\nexport * from './lib/component/header/textheader.component';\nexport * from './lib/component/header/textheaderfilter.component';\nexport * from './lib/component/header/dynamic-headerfilter.component';\nexport * from './lib/component/treetable/cell/treecell.abstract';\nexport * from './lib/component/treetable/cell/leaf.component';\nexport * from './lib/component/treetable/cell/node.component';\nexport * from './lib/component/treetable/mat-treetable-datasource';\nexport * from './lib/component/treetable/treetable.component';\nexport * from './lib/component/lazytreetable/lazytreetable.component';\nexport * from './lib/component/cell/cell.abstract';\nexport * from './lib/component/cell/unfoldcell.component';\n\n\n/**SERVICES */\nexport * from './lib/services/abstracttable.service';\nexport * from './lib/services/defaulttable.service';\nexport * from './lib/services/table.service';\nexport * from './lib/services/lazy/abstractlazytable.service';\nexport * from './lib/services/lazy/abstractlazytreetable.service';\nexport * from './lib/services/lazy/lazytable.service';\nexport * from './lib/services/lazy/lazytreetable.service';\nexport * from './lib/services/treetable/abstracttreetable.service';\nexport * from './lib/services/treetable/converter.service';\nexport * from './lib/services/treetable/defaulttreetable.service';\nexport * from './lib/services/treetable/tree.service';\nexport * from './lib/services/treetable/treetable.service';\nexport * from './lib/services/features/treetableservice.interface';\nexport * from './lib/services/features/selection/selectiontreetable.service';\nexport * from './lib/services/features/selection/selectiontablelazy.service';\nexport * from './lib/services/features/selectionclick/selectionclick.service';\n\n/**FEATURES */\nexport * from './lib/services/features/tableservice.interface';\nexport * from './lib/services/features/filter/textfiltertable.service';\nexport * from './lib/services/features/filter/headerfilter-table.service';\nexport * from './lib/services/features/selection/selectiontable.service';\nexport * from './lib/services/features/dragdrop/dragdrop.interface';\nexport * from './lib/services/features/dragdrop/dragdroprow.service';\nexport * from './lib/services/features/dragdrop/dragdroprowtree.service';\nexport * from './lib/services/features/unfoldrow/unfoldrow.service';\n\n/**PIPE */\nexport * from './lib/pipe/field.pipe';\nexport * from './lib/pipe/group.pipe';\nexport * from './lib/pipe/elevation.pipe';\nexport * from './lib/pipe/row.pipe';\nexport * from './lib/pipe/rowtree.pipe';\nexport * from './lib/pipe/rowdragdisabled.pipe';\nexport * from './lib/pipe/span.pipe';\nexport * from './lib/pipe/cell.pipe';\nexport * from './lib/pipe/capitalize.pipe';\n\n\n/**ENUM */\nexport * from './lib/enums/align.enum';\nexport * from './lib/enums/span.enum';\n\n/**MODULE */\nexport * from './lib/table.module';\n\n/**DECORATOR */\nexport * from './lib/decorators/header.decorator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i5","i2","i6","i10","i11","i12","i4","i7","i8","uuidv4","i1.TreeService","i9","i13","i14"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYa,kBAAkB,CAAA;AAgB3B,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;AAXnB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;;IAMvC,QAAQ,GAAA;;AAGR,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY;AACnD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrD,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;oBACf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE;;;;QAKjD,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY;YACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;QAGjD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY;YACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;;;IAIvD,cAAc,GAAA;AACV,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,SAAS,EAAE;AACP,gBAAA;AACI,oBAAA,OAAO,EAAE,cAAc;AACvB,oBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;AAC9B,iBAAA;gBACD,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,GAAG,CAAC;AAC1C,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;qBAC9B,CAAC,GAAG;AACR;SACJ;QACD,MAAM,QAAQ,GAAa,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;AAEnD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;AAG/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC;AAEjG,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;AACzE,YAAA,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE;YACpB,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;YAC1C,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;YAEtC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AACnG,gBAAA,GAAG,CAAC,UAAU,CAAC,SAAS,GAAG,oCAAoC;AAC/D,gBAAA,QAAQ,GAAG,CAAC,UAAU,CAAC,IAAI;oBACvB,KAAK,QAAQ,CAAC,IAAI;AACd,wBAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,qBAAqB;wBACtD;oBACJ,KAAK,QAAQ,CAAC,KAAK;AACf,wBAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,sBAAsB;wBACvD;oBACJ,KAAK,QAAQ,CAAC,IAAI;AACd,wBAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,+BAA+B;AAChE,wBAAA,GAAG,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI;wBAClC,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;wBACvD;oBACJ,KAAK,QAAQ,CAAC,KAAK;AACf,wBAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,6BAA6B;AAC9D,wBAAA,GAAG,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI;wBAClC,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AACvD,wBAAA,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI;wBAC9B;AACJ,oBAAA;AACI,wBAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,+BAA+B;wBAChE;;;AAGZ,YAAA,GAAG,CAAC,UAAU,CAAC,eAAe,GAAG,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,SAAS;AAC5E,YAAA,OAAO,GAAG;SACb,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;;QAEjE,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;;AAE7E,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;;;AAGvE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;;AAE7E,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;;AAEnE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe;;;AAGjF,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe;;AAEjF,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB;;;AAG3F,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;;AAEvE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;;AAGvE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AACzE,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE;AACvE,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;;AAG/E,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY;AACvE,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AAC/G,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE;;QAInD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QACzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;QAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QACzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACzD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QACrD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB;QAC7E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;;+GAtJ9C,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE;AACf,iBAAA;qFAEY,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,qBAAqB,EAAA,CAAA;sBAA9B;gBAES,QAAQ,EAAA,CAAA;sBAAjB;;;MClBQ,yBAAyB,CAAA;IAUlC,WAAoB,CAAA,QAAmB,EAAU,EAAc,EAAA;QAA3C,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAAqB,IAAE,CAAA,EAAA,GAAF,EAAE;AAmBnD,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAiB,KAAI;AAChC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;YACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAC7C,SAAC;AAED,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAiB,KAAI;YAChC,MAAM,MAAM,GAAG,EAAE;YACjB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;gBAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;;AAG9C,gBAAA,IAAI,KAAK,GACL,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAE1D,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CACtE,CAAC,GAAQ,KAAK,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CACnE;;AAGD,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;;AAG1D,gBAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;;;AAG/D,SAAC;AAED,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAiB,KAAI;AAC9B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;;AAEzD,SAAC;QApDG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;;IAGvC,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;YAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC/C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5D,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/D,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;;;+GAzB1D,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE;AACf,iBAAA;uGAE8B,SAAS,EAAA,CAAA;sBAAnC,KAAK;uBAAC,kBAAkB;gBAChB,KAAK,EAAA,CAAA;sBAAb;;;MCAQ,sBAAsB,CAAA;IAS/B,WAAoB,CAAA,UAAsB,EAAE,KAAwB,EAAA;QAAhD,IAAU,CAAA,UAAA,GAAV,UAAU;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAC/C,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;AAGlE,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QACzE,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK;;;+GAjB5B,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACf,iBAAA;+GAGY,GAAG,EAAA,CAAA;sBAAX;gBACQ,MAAM,EAAA,CAAA;sBAAd;;;MCHQ,4BAA4B,CAAA;IASrC,WAAoB,CAAA,QAAkC,EAC1C,SAA2B,EAAA;QADnB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAChB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAErB,QAAQ,GAAA;QACJ,IAAI,CAAC,cAAc,EAAE;;AAGzB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE;YACzD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY;YAC/C,IAAI,CAAC,cAAc,EAAE;;AAEzB,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YACjD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY;YACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;;IAIrD,cAAc,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CACjD,IAAI,CAAC,SAAS,CACjB;QACD,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QACrD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;+GApCxC,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACf,iBAAA;4HAEY,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;;;MCTiB,YAAY,CAAA;AAMjC;;ACLK,MAAgB,gBAAiB,SAAQ,YAAkC,CAAA;AAG7E,IAAA,iBAAiB,CAAC,IAAsB,EAAE,IAAA,GAAe,CAAC,EAAA;AACtD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;;AAG3D,IAAA,WAAW,CAAC,GAAG,EAAA;AACX,QAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YAC5B,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;;AAET;;AC2BK,MAAO,uBAAwB,SAAQ,YAA8B,CAAA;AAKvE,IAAA,WAAW,CAAC,GAAQ,EAAA;AAChB,QAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;;+GAN9C,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EA9BtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;KAeT,EAOG,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,oLACb,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAIpB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjCnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACV,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC3B,QAAA,EAAA;;;;;;;;;;;;;;;AAeT,IAAA,CAAA,EAAA,UAAA,EAKW,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,+CAAA,CAAA,EAAA;;;AC9BC,MAAO,wBAAyB,SAAQ,yBAAyB,CAAA;IAKnE,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;;AAIpB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG9B,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;;IAGvB,cAAc,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;YACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,uBAAuB,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AAC7D,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc;;aACpE;YACH,KAAK,CAAC,cAAc,EAAE;;;+GA3BrB,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAGY,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;;;ACSC,MAAO,iBAAkB,SAAQ,gBAAgB,CAAA;+GAA1C,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAfhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;KAIT,EAMG,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BACZ,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAInB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACf,QAAA,EAAA;;;;AAIT,IAAA,CAAA,EAAA,UAAA,EAIW,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;AC8DC,MAAO,iBAAkB,SAAQ,gBAAgB,CAAA;AAInD,IAAA,WAAW,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAqB,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;AACtE,YAAA,SAAS,EAAE;AACd,SAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxB,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;;AAG1B,IAAA,eAAe,CAAC,CAAY,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACnC,YAAA,SAAS,EAAE;gBACP,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC;AACb;AACJ,SAAA,CAAC;;+GAlBG,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EApEhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCT,EAoBG,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,EAAA,yIAAA,EAAA,uFAAA,EAAA,0DAAA,EAAA,4DAAA,EAAA,uEAAA,EAAA,mFAAA,EAAA,yEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,wBAAwB,oOACxB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAInB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAvE7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACV,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC3B,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,IAAA,CAAA,EAAA,UAAA,EAkBW,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ,aAAa;wBACb,wBAAwB;wBACxB,kBAAkB;wBAClB,mBAAmB;wBACnB;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,EAAA,yIAAA,EAAA,uFAAA,EAAA,0DAAA,EAAA,4DAAA,EAAA,uEAAA,EAAA,mFAAA,EAAA,yEAAA,CAAA,EAAA;;;AClEC,MAAO,4BAA6B,SAAQ,wBAAwB,CAAA;IAKxE,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;;AAIvB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG5B,WAAW,GAAA;QACT,KAAK,CAAC,WAAW,EAAE;;IAGrB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;;aACjB;AACL,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;YACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;YACjH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;YACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC/C,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc;YACvE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;;;+GA7BtD,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAGU,MAAM,EAAA,CAAA;sBAAd;gBACQ,GAAG,EAAA,CAAA;sBAAX;;;ACNG,MAAO,sBAAuB,SAAQ,kBAAkB,CAAA;AAJ9D,IAAA,WAAA,GAAA;;AAOY,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAsB5C;IApBC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;;AAGlB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG5B,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAC9D,gBAAA,GAAG,CAAC;AACJ,gBAAA,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;AAChC,aAAA,CAAC,CAAC;;QAEL,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACzD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;;+GAvBlD,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAEU,WAAW,EAAA,CAAA;sBAAnB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;ACHG,MAAO,0BAA2B,SAAQ,yBAAyB,CAAA;IAOrE,WAAY,CAAA,SAA2B,EAAU,CAAW,EAAA;AACxD,QAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAD0B,IAAC,CAAA,CAAA,GAAD,CAAC;;IAIlD,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;;IAGvB,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG9B,cAAc,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;AAG/B,QAAA,MAAM,OAAO,GAIT;AACA,YAAA,SAAS,EAAE;gBACP,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG;oBACzB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;AAClC,4BAAA,OAAO,EAAE,WAAW;4BACpB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK;4BAC9C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE;AAClD,yBAAA,CAAC,GAAG,EAAE,CAAC;AACR,oBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;AACvE,oBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE;iBAC7E,GAAG,EAAE;AACT,aAAA;YACD,MAAM,EAAE,IAAI,CAAC;SAChB;QAED,MAAM,QAAQ,GAAa,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QAEnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACrD,MAAM,OAAO,GAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAA6B;AAEzE,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;QAGlC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;QAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO;;+GA3DjD,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACf,iBAAA;4GAEY,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;ACJC,MAAO,gCAAiC,SAAQ,yBAAyB,CAAA;IAK3E,WAAY,CAAA,SAA2B,EAAU,CAAW,EAAA;AACxD,QAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAD0B,IAAC,CAAA,CAAA,GAAD,CAAC;;IAIlD,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;;IAGvB,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG9B,cAAc,GAAA;QACV,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,OAAO,GAAI,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,aAA6B;AAC1E,QAAA,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;+GAxB9B,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;4GAEY,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,aAAa,EAAA,CAAA;sBAArB;;;ACXE,MAAM,aAAa,GACtB,OAAO,CAAC,eAAe,EAAE;IACrB,UAAU,CAAC,WAAW,EAAE;AACpB,QAAA,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAC1D,QAAA,QAAQ,CAAC;AACL,YAAA,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AACjF,YAAA,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC;SAC3D;KACJ;AACJ,CAAA,CAAC;;ACLA,MAAO,mBAA8D,SAAQ,kBAAwB,CAAA;IAEvG,WAAoB,CAAA,OAA2B,EAAE,WAAiB,EAAA;QAC9D,KAAK,CAAC,WAAW,CAAC;QADF,IAAO,CAAA,OAAA,GAAP,OAAO;AAI3B,QAAA,IAAA,CAAA,QAAQ,GAAwC,CAAC,IAAS,EAAE,IAAa,KAAS;AAC9E,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAEhC,YAAA,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,EAAE,EAAE;AAC5B,gBAAA,OAAO,IAAI;;AAEf,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC;YAEnE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,gBAAA,IAAI,MAAuB;AAC3B,gBAAA,IAAI,MAAuB;AAC3B,gBAAA,IAAI,MAAM,EAAE,UAAU,CAAC,aAAa,EAAE;oBAClC,MAAM,GAAG,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;oBAC5C,MAAM,GAAG,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;;qBACzC;oBACH,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC;oBAC5C,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC;AAC5C,oBAAA,IAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;wBACxC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;;;AAIhD,gBAAA,MAAM,UAAU,GAAG,OAAO,MAAM;AAChC,gBAAA,MAAM,UAAU,GAAG,OAAO,MAAM;AAEhC,gBAAA,IAAI,UAAU,KAAK,UAAU,EAAE;AAC3B,oBAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;wBACzB,MAAM,IAAI,EAAE;;AAEhB,oBAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;wBACzB,MAAM,IAAI,EAAE;;;gBAIpB,IAAI,gBAAgB,GAAG,CAAC;gBACxB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AAClC,oBAAA,IAAI,MAAM,GAAG,MAAM,EAAE;wBACjB,gBAAgB,GAAG,CAAC;;AACjB,yBAAA,IAAI,MAAM,GAAG,MAAM,EAAE;wBACxB,gBAAgB,GAAG,CAAC,CAAC;;;AAEtB,qBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;oBACvB,gBAAgB,GAAG,CAAC;;AACjB,qBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;oBACvB,gBAAgB,GAAG,CAAC,CAAC;;AAEzB,gBAAA,OAAO,gBAAgB,IAAI,SAAS,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,aAAC,CAAC;AACN,SAAC;;AAEM,IAAA,aAAa,CAAC,OAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;;AAElC;;MC5DY,QAAQ,CAAA;AAIjB,IAAA,WAAA,CAAY,KAAwB,EAAA;QAChC,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;AAGlE,IAAA,SAAS,CAAC,MAAwB,EAAA;QAC9B,OAAO;AACH,YAAA,oBAAoB,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB;AAC9D,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE;SAC1D;;+GAZI,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCEY,SAAS,CAAA;AAIpB,IAAA,WAAA,CAAY,KAAwB,EAAA;QAClC,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;;;;;;;IAShE,SAAS,CAAC,MAAwB,EAAE,GAAQ,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE1D,QAAA,OAAO,IAAI;;+GAlBF,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBALrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,OAAO,CAAA;AAIhB,IAAA,WAAA,CAAY,KAAwB,EAAA;QAChC,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;AAGlE,IAAA,SAAS,CAAC,GAAqB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;;AAEvC,QAAA,OAAO,IAAI;;+GAZN,OAAO,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBALnB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ICPW;AAAZ,CAAA,UAAY,IAAI,EAAA;AACZ,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAFW,IAAI,KAAJ,IAAI,GAEf,EAAA,CAAA,CAAA;;MCMY,QAAQ,CAAA;IAEjB,SAAS,CAAC,IAAmB,EAAE,OAAe,EAAA;AAC1C,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,OAAO,OAAO;;AAElB,QAAA,OAAO,IAAI;;+GANN,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,mBAAmB,CAAA;AAI5B,IAAA,WAAA,CAAY,KAAwB,EAAA;QAChC,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;AAGlE,IAAA,SAAS,CAAC,GAAqB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE;YAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC;;AAE7D,QAAA,OAAO,KAAK;;+GAZP,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCDY,SAAS,CAAA;AAIpB,IAAA,WAAA,CAAY,KAAwB,EAAA;QAClC,IAAI,CAAC,OAAO,IAAK,KAAoC,CAAC,OAAO,CAAC;;AAGhE,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;;AAExC,QAAA,OAAO,IAAI;;+GAZF,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBALrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCEY,aAAa,CAAA;AAEtB,IAAA,WAAA,GAAA;;AAGA,IAAA,SAAS,CAAC,SAAiB,EAAA;AACvB,QAAA,OAAO,CAAkB,eAAA,EAAA,SAAS,IAAI,CAAC,EAAE;;+GANpC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCKqB,wBAAwB,CAAA;AAH9C,IAAA,WAAA,GAAA;AAMW,QAAA,IAAA,CAAA,qBAAqB,GAAqB,IAAI,OAAO,EAAW;AA+C1E;;AAHU,IAAA,QAAQ,CAAC,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;+GAhDJ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAF9B,MAAM,EAAA,CAAA,CAAA;;4FAEA,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCuFY,kBAAkB,CAAA;IAS7B,IAA2C,OAAO,CAAC,EAAW,EAAA;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;YACd,IAAI,CAAC,uBAAuB,EAAE;;;IAIlC,IAA+C,YAAY,CAAC,EAAgB,EAAA;AAC1E,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;YACnB,IAAI,CAAC,uBAAuB,EAAE;;;IAUlC,IAAa,KAAK,CAAC,KAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;IAIxB,IAAa,MAAM,CAAC,MAAW,EAAA;QAC7B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;;IAK7B,IAAa,aAAa,CAAC,aAAsB,EAAA;AAC/C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAM,aAAa,CAAC;QACvD,IAAI,CAAC,eAAe,EAAE;;IAwDxB,WACY,CAAA,OAAyB,EACzB,EAAsB,EACzB,GAAsB,EACnB,MAAiB,EACpB,SAAuB,EACvB,QAA0B;;AAEF,IAAA,YAAsC,EAC3D,WAAuB,EAAA;QARvB,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAE,CAAA,EAAA,GAAF,EAAE;QACL,IAAG,CAAA,GAAA,GAAH,GAAG;QACA,IAAM,CAAA,MAAA,GAAN,MAAM;QACT,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAEgB,IAAY,CAAA,YAAA,GAAZ,YAAY;QACjC,IAAW,CAAA,WAAA,GAAX,WAAW;QA3Gb,IAAW,CAAA,WAAA,GAAG,KAAK;AAEnB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;AAChC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ;AACrC,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,OAAO,EAAQ;QAqB9C,IAAM,CAAA,MAAA,GAAW,EAAE;QAMnB,IAAO,CAAA,OAAA,GAAQ,EAAE;AAOjB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAqB,EAAE,CAAC;AAOxC,QAAA,IAAA,CAAA,OAAO,GAAiB;AAC/B,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;QAGQ,IAAa,CAAA,aAAA,GAAY,KAAK;QAC9B,IAAQ,CAAA,QAAA,GAAG,EAAE;AACb,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,IAAU,CAAA,UAAA,GAAY,KAAK;QAC3B,IAAY,CAAA,YAAA,GAAY,KAAK;AAC7B,QAAA,IAAA,CAAA,mBAAmB,GAAQ,EAAE,cAAc,EAAE,CAAC,EAAE;AAKhD,QAAA,IAAA,CAAA,UAAU,IAAoC,CAAC,GAAG,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAEpH,IAAa,CAAA,aAAA,GAAY,KAAK;QAC9B,IAAS,CAAA,SAAA,GAA6I,EAAE;;AAIvJ,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAqB;AACnD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA2B;AACjE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAe;AAC/C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA2B;AACjE,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAY;QASvD,IAAU,CAAA,UAAA,GAAG,IAAI,mBAAmB,CAAkB,EAAE,EAAE,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,cAAc,CAAkB,IAAI,CAAC;AAIrD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAe5F,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAGlC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE;AAEvC,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;;IAGnC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE;AAC3C,SAAC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAE5D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACvB,SAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;QACvC,IAAI,CAAC,eAAe,EAAE;;AAGxB,IAAA,WAAW,CAAC,OAAsB,EAAA;;;;;;;;;;;;;;;;IAkBlC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE;;IAI3C,SAAS,CAAC,KAAa,EAAE,IAAsB,EAAA;AAC7C,QAAA,OAAO,IAAI;;;IAIb,cAAc,GAAA;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU;YACvD,IAAI,aAAa,GAA2B,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AAChE,YAAA,aAAa,GAAG,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;AACnD,YAAA,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC;YAC1E,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAClD,YAAY,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,CAAC,CAC9C,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;gBAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACzD,aAAC,CAAC;YACF,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;AAC/C,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;AACrC,SAAC,CAAC;AACF,QAAA,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAG;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;;IAId,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;SAC7B,CAAC,CAAC;AACH,QAAA,OAAO,KAAK;;AAGd,IAAA,WAAW,CAAC,GAAG,EAAA;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;AAClC,QAAA,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC;AACxC,QAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;QAC1C,MAAM,SAAS,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS;YACnC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI;YACjD,IAAI,OAAO,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,YAAA,OAAO,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxE,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB,OAAO,CAAC,YAAY,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAC/B,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,gBAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,oBAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAC5C,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM;yBACnE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;qBAChB,CAAC,EACF,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EACxC,GAAG,CAAC,MAAK;AACP,wBAAA,OAAO,CAAC,OAAO,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;qBACxB,CAAC,CACH;;gBAEL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,aAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzH,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpH,aAAC,CAAC;AACF,YAAA,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjE,aAAC,CAAC;YAEF,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI;oBAC1C,IAAI,KAAK,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACtD,oBAAA,KAAK,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE;AACnC,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACtC,iBAAC,CAAC;;AAEJ,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;oBAChC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI;wBAC1C,IAAI,KAAK,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACtD,wBAAA,KAAK,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE;AACnC,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACtC,qBAAC,CAAC;AAEJ,iBAAC,CAAC;;;AAIN,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,QAAA,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAEnD,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACzE,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACvD,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAG;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACvD,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;IAGP,cAAc,CAAC,KAAa,EAAE,IAA0B,EAAA;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC;QAEtE,MAAM,KAAK,IAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAyB,CAAC;AAC1D,aAAA,IAAI,CAAC,CAAC,CAAmB,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAEpE,IAAI,SAAS,IAAI,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE;YACrC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI;YAC1C,IAAI,SAAS,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AAC1D,YAAA,SAAS,GAAG,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS;YAC7C,IAAI,OAAO,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,YAAA,OAAO,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;YAEpF,KAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YAE1D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EACvD,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,gBAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,oBAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAC5C,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM;yBACnE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;qBAChB,CAAC,EACF,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EACxC,GAAG,CAAC,MAAK;AACP,wBAAA,OAAO,CAAC,OAAO,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;qBACxB,CAAC,CACH;;gBAEL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,aAAC,CAAC;;;;;;;iBAOD,SAAS,CAAC,CAAC,IAAG;AACb,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC/H,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1H,aAAC,CAAC;AAEJ,YAAA,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC9E,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACzE,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;;IAM3B,cAAc,GAAA;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU;aACpC,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU;AACvC,YAAA,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvF,YAAA,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAClE,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;gBAC7B,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AACjE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC9C,aAAC,CAAC;YACF,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;AAC/C,SAAC,CAAC;AAEJ,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;AACrC,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;;IAId,iBAAiB,CAAC,KAAuB,EAAE,KAAW,EAAA;QAEpD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,IAAG;AACrE,YAAA,MAAM,aAAa,GAAG,EAAE,GAAG,eAAe,EAAE;AAC5C,YAAA,MAAM,WAAW,IAAI,CAAC,CAAkB,KAAI;gBAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,gBAAA,IAAI,UAAU,YAAY,OAAO,EAAE;AACjC,oBAAA,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;;qBACnD;AACL,oBAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;;AAE9D,aAAC,CAAC;AACF,YAAA,eAAe,CAAC,SAAS,GAAG,WAAW;AACvC,YAAA,OAAO,eAAe;SACvB,CAAC,IAAI,EAAE;AAGR,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,YAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,uBAAuB,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;;aACpK;AACL,YAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,uBAAuB,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;;;IAIvL,YAAY,GAAA;QACV,OAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAsB;;IAGpD,kBAAkB,GAAA;;QAEhB,OAAO,IAAI,CAAC,YAAY;;AAG1B,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACzC,YAAA,OAAO,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;;AAEnE,QAAA,OAAO,KAAK;;AAGd,IAAA,WAAW,CAAC,GAAQ,EAAA;;;;;;;;QAQlB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC;AAChF,QAAA,OAAO,KAAK;;AAGd,IAAA,gBAAgB,CAAC,GAAQ,EAAA;;;QAGvB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM;AAChF,QAAA,OAAO,SAAS;;;;;;IAQlB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAA;;AAEpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAC5D,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;;;;AAMvD;;AAEA;IACU,QAAQ,GAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,EAAE,IAAI,CAAC,aAAa;AACzB,SAAA,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ;QACnD,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ;AAE3D,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGlC,IAAA,YAAY,CAAC,MAAW,EAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE;AAE5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;;aAEpC;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;;;AAItC,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AACnC,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;YAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK;YAClC,MAAM,MAAM,GAAG,KAAK;YAEpB,OAAO,IAAI,CAAC,GAAG;YACf,OAAO,IAAI,CAAC,OAAO;YACnB,OAAO;gBACL,GAAG;gBACH,OAAO;gBACP,MAAM;AACN,gBAAA,GAAG,OAAO,IAAI,EAAE,OAAO,EAAE;AACzB,gBAAA,KAAK,EAAE,IAAI;aAEZ;AACH,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;;IAGjB,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;;aACrC;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;;AAGlC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,sBAAsB;YAC9E,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAClC,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;AAC9B,iBAAC,CAAC;;YAEJ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAExC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;gBAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1C,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;;;;IAKnC,gBAAgB,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;;AAK/E;;;;AAIG;IACH,YAAY,CAAC,GAAQ,EAAE,MAAwB,EAAA;QAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;;AAGpD,IAAA,cAAc,CAAC,MAAwB,EAAA;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC;;AAGjD;;;AAGG;;;;;IAMH,eAAe,GAAA;AACb,QAAA,OAAO,kBAAkB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;;AAG5C,IAAA,iBAAiB,CAAC,MAAwB,EAAA;AAC/C,QAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,KAAK;;IAG1B,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAExC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC9C,SAAC,CAAC;;IAGC,UAAU,CAAC,IAAY,EAAE,OAAgB,EAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC9B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC;YAC1D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,OAAO,GAAG,OAAO;;AAE1B,YAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACrB,SAAC,CAAC;;AAGG,IAAA,WAAW,CAAC,KAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGhC,IAAA,kBAAkB,CAAC,QAAa,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;;AAGjC,IAAA,OAAO,CAAC,GAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;AAGzB,IAAA,IAAI,CAAC,KAAsC,EAAA;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGxB,aAAa,GAAA;AAClB,QAAA,QAAQ,CAAC,KAAa,EAAE,IAAqB,KAAI;YAC/C,OAAO,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;AACzD,SAAC;;AAxmBQ,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,kBAAkB,kMA6GnB,cAAc,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7Gb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAzChB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC/C,YAAA;AACI,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B;AAC1D,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AACnE,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA0CQ,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOP,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOZ,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxHrB,2iLAwHA,EAAA,MAAA,EAAA,CAAA,ygEAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpDM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,wBAAwB,EACxB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,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,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,GAAA,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,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,0BAA0B,EAC1B,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAO,EACP,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAtCH,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FA0ClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA9C9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGrB,UAAA,EAAA,CAAC,aAAa,CAAC,EAChB,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC/C,wBAAA;AACI,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B;AAC1D,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AACnE,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,wBAAwB;wBACxB,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,wBAAwB;wBACxB,0BAA0B;wBAC1B,yBAAyB;wBACzB,sBAAsB;wBACtB,yBAAyB;wBACzB,OAAO;wBACP,QAAQ;wBACR,SAAS;wBACT,QAAQ;wBACR,mBAAmB;wBACnB,SAAS;wBACT;AACD,qBAAA,EAAA,QAAA,EAAA,2iLAAA,EAAA,MAAA,EAAA,CAAA,ygEAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA;;0BAgHA,MAAM;2BAAC,cAAc;kEApGmB,OAAO,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAOU,YAAY,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAOpB,QAAQ,EAAA,CAAA;sBAA5B,SAAS;uBAAC,QAAQ;gBAGV,EAAE,EAAA,CAAA;sBAAV;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACY,KAAK,EAAA,CAAA;sBAAjB;gBAKQ,OAAO,EAAA,CAAA;sBAAf;gBACY,MAAM,EAAA,CAAA;sBAAlB;gBAMQ,OAAO,EAAA,CAAA;sBAAf;gBACY,aAAa,EAAA,CAAA;sBAAzB;gBAMQ,OAAO,EAAA,CAAA;sBAAf;gBAQQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAGS,SAAS,EAAA,CAAA;sBAAlB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,qBAAqB,EAAA,CAAA;sBAA9B;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBACS,QAAQ,EAAA,CAAA;sBAAjB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;AEjLG,MAAgB,4BAA6B,SAAQ,wBAAwB,CAAA;AAMlF;;AC+DK,MAAO,sBAAuB,SAAQ,kBAAkB,CAAA;AAW5D,IAAA,WAAA,CACY,OAAyB,EAC3B,GAAuB,EACxB,GAAsB,EACnB,MAAiB,EACpB,SAAuB,EACvB,QAA0B,EACF,YAA0C,EAC/D,WAAuB,EAAA;AAEjC,QAAA,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC;QATtE,IAAO,CAAA,OAAA,GAAP,OAAO;QACT,IAAG,CAAA,GAAA,GAAH,GAAG;QACJ,IAAG,CAAA,GAAA,GAAH,GAAG;QACA,IAAM,CAAA,MAAA,GAAN,MAAM;QACT,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACgB,IAAY,CAAA,YAAA,GAAZ,YAAY;QACjC,IAAW,CAAA,WAAA,GAAX,WAAW;AAjBvB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA0B,EAAE,CAAC;AAClE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;AAInB,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAO;;IAevD,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU;aAClC,GAAG,CAAC,MAAM,IAAG;YACZ,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;AACjF,SAAC;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;;AAE9C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAE5B,eAAe,GAAA;QACb,KAAK,CAAC,eAAe,EAAE;QAEvB,MAAM,OAAO,GAAG,KAAK,CACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAClG,CAAC,IAAI,CACJ,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CACxC;AAED,QAAA,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC5D,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1B,SAAS,CAAC,MAAK;YACb,OAAO,MAAM,CACX,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAC7G,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CACnC,GAAG,CAAC,KAAK,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EACzC,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,gBAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;aAC3F,CAAC,CACH,CACJ;AACH,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;iBACjB;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAEvB,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;oBAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;;AAEnD,gBAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;AACzB,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;gBAEzE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU;;AAEnD,YAAA,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE;AAC3C,SAAC,CAAC;;IAGN,WAAW,GAAA;QACT,KAAK,CAAC,WAAW,EAAE;;;;;IAOrB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAA;;AAEpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAC5D,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;;;IAIvD,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAClC,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;AAC9B,iBAAC,CAAC;;AAEJ,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;gBAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;;;AAI9C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAnHvB,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,sBAAsB,kMAkBvB,cAAc,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlBb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAMtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAQ,EC9ErB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wkMAgHA,EDrEM,MAAA,EAAA,CAAA,u5EAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,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,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,EAAAA,GAAA,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,EAAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,0BAA0B,EAC1B,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAO,EACP,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EA9BC,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAiClB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArClC,SAAS;+BACI,oBAAoB,EAAA,UAAA,EAGlB,CAAC,aAAa,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EACnC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,wBAAwB;wBACxB,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,wBAAwB;wBACxB,0BAA0B;wBAC1B,yBAAyB;wBACzB,sBAAsB;wBACtB,yBAAyB;wBACzB,OAAO;wBACP,QAAQ;wBACR,SAAS;wBACT,QAAQ;wBACR,aAAa;wBACb,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,wkMAAA,EAAA,MAAA,EAAA,CAAA,u5EAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA;;0BAoBA,MAAM;2BAAC,cAAc;kEAZH,QAAQ,EAAA,CAAA;sBAA5B,SAAS;uBAAC,QAAQ;gBAET,uBAAuB,EAAA,CAAA;sBAAhC;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;;;AE/DG,MAAO,2BAA4B,SAAQ,iBAAiB,CAAA;IAE9D,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;;+GAHX,2BAA2B,EAAA,IAAA,EAAA,IAAA,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,EAV1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;KAET,EAIG,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGR,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAZvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA;;AAET,IAAA,CAAA,EAAA,UAAA,EAEW,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;AC0DC,MAAO,iCAAkC,SAAQ,iBAAiB,CAAA;IAMpE,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,YAAY,UAAU,EAAE;YAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;;aAC/B;YACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAc,CAAC;;AAGjD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,aAAA,IAAI,CACD,SAAS,CAAC,EAAE,CAAC,EACb,SAAS,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAClE;;IAGT,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO;;AAG/C,IAAA,UAAU,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,WAAW;AAEf,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,EAAE;AAC1F,YAAA,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;;aAC9B;AACH,YAAA,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;;AAG1D,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACrB,OAAO,IAAI,CAAC;AACP,iBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAE7H,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAIxH,IAAA,eAAe,CAAC,KAAK,EAAA;QACjB,KAAK,CAAC,eAAe,EAAE;;+GA1ClB,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAxDhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAIG,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,62BACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,wUACf,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,wBAAwB,oOACxB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGR,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBA1D7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAC5B,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,IAAA,CAAA,EAAA,UAAA,EAEW,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,qBAAqB;wBACrB,gBAAgB;wBAChB,wBAAwB;wBACxB;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;ACnEC,SAAU,YAAY,CAAC,MAG5B,EAAA;IACG,OAAO,CAAC,MAAiB,KAAI;QACzB,eAAe,CAAC,IAAI,CAAC;AACjB,YAAA,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI;AAC9B,SAAA,CAAC;AACN,KAAC;AACL;;MCVa,cAAc,CAAA;AACvB,IAAA,SAAS,CAAC,KAAU,EAAA;QAChB,IAAI,KAAK,EAAE;AACP,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEzD,QAAA,OAAO,KAAK;;+GALP,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AC6DM,IAAM,oCAAoC,GAA1C,MAAM,oCAAqC,SAAQ,iBAAiB,CAAA;IAKvE,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;AAG9H,IAAA,eAAe,CAAC,KAAK,EAAA;QACjB,KAAK,CAAC,eAAe,EAAE;;+GAXlB,oCAAoC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,EAzCnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s9BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAKG,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,cAAc,mDACd,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;AAG3B,oCAAoC,GAAA,UAAA,CAAA;AApDhD,IAAA,YAAY,CAAC;QACV,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,KAA6B,KAAI;AAC9D,YAAA,IAAI,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,eAAe,CAAC,EAAE,OAAO;oBAC5E,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC;;AAEzH,YAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC;;KAE5C;AA4CY,CAAA,EAAA,oCAAoC,CAahD;4FAbY,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBA3ChD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAC/B,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,cAAc;wBACd;AACH,qBAAA,EAAA,MAAA,EAAA,CAAA,s9BAAA,CAAA,EAAA;;;AC3DC,MAAO,gBAAoB,SAAQ,mBAAsB,CAAA;AAA/D,IAAA,WAAA,GAAA;;QAEE,IAAU,CAAA,UAAA,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO;AAgBpF,QAAA,IAAA,CAAA,QAAQ,GAAwC,CAAC,IAAS,EAAE,IAAa,KAAS;AAChF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,YAAA,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,EAAE,EAAE;AAAE,gBAAA,OAAO,IAAI;;AAE7C,YAAA,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AAEjD,SAAC;AAED,QAAA,IAAA,CAAA,gBAAgB,GAAgD,CAAC,IAAO,EAAE,YAAoB,KAAY;AACxG,YAAA,OAAO,CAAC;AACV,SAAC;;AAzBO,IAAA,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAA;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAC7E,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AACvD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;YACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAS,MAAM,EAAU,MAAM,CAAC;AACxE,YAAA,OAAO,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,SAAC;aACA,OAAO,CAAC,QAAQ,IAAG;AAClB,YAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrE,SAAC,CAAC;;AAoBP;;AC9BK,MAAO,WAAY,SAAQ,OAAO,CAAA;AAEpC,IAAA,SAAS,CAAC,GAAqB,EAAA;QAC3B,OAAO;YACH,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;AAC5C,YAAA,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG;SACzB;;+GANI,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,WAAW,CAAA;AAEtB;;;;;;AAMG;IACH,QAAQ,CAAiB,IAAO,EAAE,CAAoB,EAAA;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAO,KAAI;YAC/B,CAAC,CAAC,IAAI,CAAC;AACP,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;;AAGJ;;;;AAIG;IACH,UAAU,CAAiC,IAAO,EAAE,EAAU,EAAA;AAC5D,QAAA,IAAI,YAAe;QACnB,MAAM,UAAU,GAAuB,EAAE;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAO,KAAI;AAC/B,YAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAG;AAC7B,gBAAA,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;AAC9B,aAAC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;gBACnB,YAAY,GAAG,IAAI;;AAErB,YAAA,OAAO,IAAI,CAAC,GAAG,KAAK,EAAE;AACxB,SAAC,CAAC;AACF,QAAA,OAAO,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;YAC3B,GAAG,EAAE,YAAY,CAAC,GAAG;YACrB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU;AAC1C,SAAA,CAAC,GAAG,CAAC,CAAC,IAAI;;IAGb,OAAO,CAAiC,IAAO,EAAE,EAAU,EAAA;AACzD,QAAA,IAAI,YAAe;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAO,KAAI;AAC/B,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;gBACnB,YAAY,GAAG,IAAI;;AAErB,YAAA,OAAO,IAAI,CAAC,GAAG,KAAK,EAAE;AACxB,SAAC,CAAC;AACF,QAAA,OAAO,YAAY;;AAIrB;;;;AAIG;IACK,SAAS,CAAoB,IAAO,EAAE,CAAuB,EAAA;AACnE,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACZ;;AAEF,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGnD;;;;;AAKG;IACH,YAAY,CAAiC,IAAO,EAAE,IAAO,EAAA;AAC3D,QAAA,OAAO,IAAI,CACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAC/B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAC3C;;AAGH;;;AAGG;AACH,IAAA,OAAO,CAAoB,IAAO,EAAA;QAChC,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAe,CAAC;;;AAGvE,QAAA,OAAO,MAAM;;AAGf;;;;AAIG;IACK,SAAS,CAAiC,EAAU,EAAE,OAA2B,EAAA;QACvF,MAAM,UAAU,GAAG,EAAE;QACrB,IAAI,GAAG,GAAG,EAAE;QACZ,OAAO,GAAG,EAAE;AACV,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,gBAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG;;iBACjB;gBACL,GAAG,GAAG,IAAI;;;AAGd,QAAA,OAAO,UAAU;;+GA7GR,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCEY,gBAAgB,CAAA;AAEzB,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW;;AAE/B;;;AAGG;AACH,IAAA,gBAAgB,CAAI,IAAU,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,SAAS,CAAM,IAAI,CAAsB;QAC3D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAuB,KAAI;YAC7D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,GAAGS,EAAM,EAAE;AAC3D,SAAC,CAAC;AACF,QAAA,OAAO,SAAS;;AAGpB;;;AAGG;AACH,IAAA,eAAe,CAAI,IAAuB,EAAA;AACtC,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAqB;QACrD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAsB,KAAI;AAC5D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC;AAE7D,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;;AAGhD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC;AAC3D,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM;YACtE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK;AACtC,SAAC,CAAC;AACF,QAAA,OAAO,SAAS;;+GAnCX,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACFK,MAAgB,4BAA6B,SAAQ,wBAAwB,CAAA;+GAA7D,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAFlC,MAAM,EAAA,CAAA,CAAA;;4FAEA,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHjD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACgFK,MAAO,sBAA0B,SAAQ,kBAAkB,CAAA;AAS/D,IAAA,WAAA,CACY,OAAyB,EACzB,WAA+B,EAClC,GAAsB,EACnB,MAAiB,EACpB,SAAuB,EACvB,QAA0B,EAC1B,WAAwB,EACxB,gBAAkC,EACV,YAA0C,EAC/D,WAAuB,EAAA;AACjC,QAAA,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC;QAV9E,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAW,CAAA,WAAA,GAAX,WAAW;QACd,IAAG,CAAA,GAAA,GAAH,GAAG;QACA,IAAM,CAAA,MAAA,GAAN,MAAM;QACT,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QACQ,IAAY,CAAA,YAAA,GAAZ,YAAY;QACjC,IAAW,CAAA,WAAA,GAAX,WAAW;AAjBb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;QAI3C,IAAU,CAAA,UAAA,GAAG,IAAI,gBAAgB,CAAkB,EAAE,EAAE,EAAE,CAAC;;IAiB1D,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;;AAGlB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG5B,eAAe,GAAA;QACb,KAAK,CAAC,eAAe,EAAE;;AAGzB,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;QAEtB,IAAI,CAAC,QAAQ,EAAE;;AAGP,IAAA,UAAU,CAAC,IAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAI;YACxE,OAAO;gBACL,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;AAClC,gBAAA,GAAG,IAAI;gBACP;aACD;SACF,EAAE;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;IAIvF,aAAa,GAAA;QACX,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAClC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;AAC3B,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;SACjC,CAAC,CACH;AACD,QAAA,OAAO,KAAK;;AAGd,IAAA,cAAc,CAAC,IAAwB,EAAA;QACrC,IAAI,QAAQ,GAAuB,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;gBACvC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAChD,aAAa,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;AAC3F,qBAAA,OAAO,CAAC,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC;AACL,yBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3B,yBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;;;AAGnB,wBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE;wBACtB,OAAO,CAAC,CAAC,GAAG;wBACZ,OAAO,CAAC,CAAC,OAAO;AAEhB,wBAAA,MAAM,IAAI,GAAG;AACX,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;4BACnE,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM;AAClD,4BAAA,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC1B,4BAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;AACpC,4BAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;4BAClC,GAAG,EAAE,KAAK,CAAC;yBACZ;wBAED,MAAM,CAAC,QAAQ,CAAC;AACb,6BAAA,UAAU,CAAC;AACV,4BAAA,QAAQ,EACN,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAG;gCAC9C,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;AACtB,oCAAA,OAAO,IAAI;;AAEb,gCAAA,OAAO,CAAC;AACV,6BAAC;AAEJ,yBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5B,qBAAC,CAAC;AACN,iBAAC,CAAC;AACJ,gBAAA,OAAO,aAAa;AACtB,aAAC,CAAC;;AAEJ,QAAA,OAAO,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC;;AAG9B,IAAA,WAAW,CAAC,GAAqB,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;AAClC,QAAA,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC;AACxC,QAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;QAE1C,MAAM,SAAS,GAAI,IAAI,CAAC,OAA0C,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;AAE1G,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC3C,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,YAAA,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;YACxB,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM;YAC9D,IAAI,SAAS,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,IAAI,CAAC;AAClD,oBAAA,MAAM,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI;iBAC1D;aACF;AACF,SAAA,CAAC;AAEF,QAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;AAE1C,QAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK;QAC3B,MAAM,SAAS,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS;YACnC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI;YACjD,IAAI,OAAO,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,YAAA,OAAO,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvE,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,YAAY,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAC/B,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,gBAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,oBAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAC5C,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM;yBACnE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;qBAChB,CAAC,EACF,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EACxC,GAAG,CAAC,MAAK;AACP,wBAAA,OAAO,CAAC,OAAO,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;qBACxB,CAAC,CACH;;gBAEL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,aAAC;;;;;;;;;;;;;;;;AAgBF,aAAA,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5E,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACvE,aAAC,CAAC;AACF,YAAA,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAG;AACvC,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjE,aAAC,CAAC;YAEF,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,QAAA,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAEnD,QAAA,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACvD,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAG;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACvD,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;IAId,uBAAuB,GAAA;QACrB,KAAK,CAAC,uBAAuB,EAAE;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI;QAC5B,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB;QACzE,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB;;AAjOnE,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,sBAAsB,uPAkBvB,cAAc,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlBb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAvCpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC/C,YAAA;AACI,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B;AAC1D,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE;SACnE,ECvDL,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,swJA4GA,spJDjDM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,mSAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,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,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,EAAAA,GAAA,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,EAAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,6FAC5B,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,0BAA0B,EAC1B,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,qGACtB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAEzB,WAAW,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,SAAS,EACT,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,4CACR,aAAa,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,UAAA,EApCH,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAwClB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA5ClC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAGzB,UAAA,EAAA,CAAC,aAAa,CAAC,EAChB,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC/C,wBAAA;AACI,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B;AAC1D,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AACnE,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,wBAAwB;wBACxB,mBAAmB;wBACnB,cAAc;wBACd,cAAc;wBACd,4BAA4B;wBAC5B,yBAAyB;wBACzB,0BAA0B;wBAC1B,sBAAsB;wBACtB,yBAAyB;wBACzB,kBAAkB;wBAClB,WAAW;wBACX,mBAAmB;wBACnB,SAAS;wBACT,QAAQ;wBACR,SAAS;wBACT,QAAQ;wBACR;AACD,qBAAA,EAAA,QAAA,EAAA,swJAAA,EAAA,MAAA,EAAA,CAAA,4/DAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA;;0BAqBA,MAAM;2BAAC,cAAc;kEAhBd,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;AEpFG,MAAgB,gCAAiC,SAAQ,4BAA4B,CAAA;AAQ1F;;ACuEK,MAAO,0BAA8B,SAAQ,sBAAyB,CAAA;AAQ1E,IAAA,WAAA,CACY,OAAyB,EACzB,WAA+B,EAClC,GAAsB,EACnB,MAAiB,EACpB,SAAuB,EACvB,QAA0B,EAC1B,WAAwB,EACxB,gBAAkC,EACV,YAA8C,EACnE,WAAuB,EAAA;QACjC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EACvF,YAAY,EAAE,WAAW,CAAC;QAXpB,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAW,CAAA,WAAA,GAAX,WAAW;QACd,IAAG,CAAA,GAAA,GAAH,GAAG;QACA,IAAM,CAAA,MAAA,GAAN,MAAM;QACT,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QACQ,IAAY,CAAA,YAAA,GAAZ,YAAY;QACjC,IAAW,CAAA,WAAA,GAAX,WAAW;AAjBb,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAO;AAEvD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;AAC7B,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA0B,EAAE,CAAC;;IAiBlE,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU;aAClC,GAAG,CAAC,MAAM,IAAG;YACZ,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;AACjF,SAAC;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;;AAG9C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG5B,eAAe,GAAA;QACb,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAEpE,QAAA,MAAM,OAAO,GAAG,KAAK,CACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EACjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAClG,CAAC,IAAI,CACJ,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CACxC;AAED,QAAA,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC5D,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1B,SAAS,CAAC,MAAK;YACb,OAAO,MAAM,CACX,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAC7G,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CACnC,GAAG,CAAC,KAAK,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EACzC,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,gBAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;aAC3F,CAAC,CACH,CACJ;AACH,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;iBACjB;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAEvB,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;oBAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;;AAEnD,gBAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;AACzB,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;gBAGzE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU;;;AAGrD,SAAC,CAAC;;IAIN,WAAW,GAAA;QACT,KAAK,CAAC,WAAW,EAAE;;;;;IAOrB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAC5D,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;;;AAIvD,IAAA,cAAc,CAAC,IAAwB,EAAA;QACrC,IAAI,QAAQ,GAAuB,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;gBACvC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAChD,aAAa,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;AAC3F,qBAAA,OAAO,CAAC,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC;AACL,yBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3B,yBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,wBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE;wBACtB,OAAO,CAAC,CAAC,GAAG;wBACZ,OAAO,CAAC,CAAC,OAAO;AAEhB,wBAAA,MAAM,IAAI,GAAG;AACX,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACnE,4BAAA,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM;AACnF,4BAAA,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC1B,4BAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;AACpC,4BAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;AAClC,4BAAA,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK;4BACrC,GAAG,EAAE,KAAK,CAAC,GAAG;yBACf;wBAED,MAAM,CAAC,QAAQ,CAAC;AACb,6BAAA,UAAU,CAAC;4BACV,QAAQ,EACN,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3B,iCAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;iCAC/B,MAAM,CAAC,IAAI;AACjB,yBAAA,CAAC;AACN,qBAAC,CAAC;AACN,iBAAC,CAAC;AACJ,gBAAA,OAAO,aAAa;AACtB,aAAC,CAAC;;AAEJ,QAAA,OAAO,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC;;AAI9B,IAAA,WAAW,CAAC,GAAqB,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;AAClC,QAAA,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC;AACxC,QAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;QAE1C,MAAM,SAAS,GAAI,IAAI,CAAC,OAA0C,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;AAE1G,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM;AAC9D,YAAA,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,YAAA,MAAM,EAAE,KAAK;YACb,IAAI,SAAS,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC;AAC9E,oBAAA,MAAM,EAAE;iBACT;aACF;AACF,SAAA,CAAC;AACF,QAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;AAE1C,QAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY;aACzG,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1B,SAAS,CAAC,MAAK;YACb,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE;gBAC3C,OAAO,MAAM,CACX,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAC5E,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EACzH,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CACrF,GAAG,CAAC,KAAK,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAC3D,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;oBAClB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;iBACrF,CAAC,CACH,CACJ;;YAEH,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAEvF,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI;YAC7C,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AACzC,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;oBACtB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;;gBAE1E,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAElG,YAAA,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAEnE,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;;iBACrC;gBACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;;AAG7C,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;AAEJ,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;QAC1B,MAAM,SAAS,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS;YACnC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI;YACjD,IAAI,OAAO,GAAyB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,YAAA,OAAO,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB,OAAO,CAAC,YAAY,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAC/B,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,gBAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,oBAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAC5C,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM;yBACnE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;qBAChB,CAAC,EACF,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EACxC,GAAG,CAAC,MAAK;AACP,wBAAA,OAAO,CAAC,OAAO,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;qBACxB,CAAC,CACH;;gBAEL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,aAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5E,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACvE,aAAC,CAAC;AACF,YAAA,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjE,aAAC,CAAC;YAEF,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,QAAA,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAEnD,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,KAAK,IAAG;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACvD,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC;AACH,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC/B,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACvD,SAAC,CAAC;AACJ,QAAA,OAAO,KAAK;;IAGd,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAClC,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;AAC9B,iBAAC,CAAC;;AAEJ,YAAA;;YAEE,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;gBAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;;;AAI9C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI;QAC5B,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB;QACzE,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB;;AA3SnE,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,0BAA0B,uPAiB3B,cAAc,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAjBb,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpFvC,swKAoHA,EAAA,MAAA,EAAA,CAAA,48EAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjEM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,GAAA,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,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,EAAAA,GAAA,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,EAAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAEnB,WAAW,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACX,QAAQ,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACR,SAAS,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,QAAQ,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACR,aAAa,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACb,SAAS,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGT,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAjCf,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAqClB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAzCtC,SAAS;+BACI,wBAAwB,EAAA,UAAA,EAGtB,CAAC,aAAa,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EACnC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,wBAAwB;wBACxB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,mBAAmB;wBACnB,OAAO;wBACP,WAAW;wBACX,QAAQ;wBACR,SAAS;wBACT,QAAQ;wBACR,aAAa;wBACb,SAAS;wBACT,sBAAsB;wBACtB,wBAAwB;wBACxB,0BAA0B;wBAC1B,4BAA4B;wBAC5B,yBAAyB;wBACzB,sBAAsB;wBACtB;AACD,qBAAA,EAAA,QAAA,EAAA,swKAAA,EAAA,MAAA,EAAA,CAAA,48EAAA,EAAA,sdAAA,EAAA,gKAAA,EAAA,u+DAAA,CAAA,EAAA;;0BAoBA,MAAM;2BAAC,cAAc;kEAhBd,uBAAuB,EAAA,CAAA;sBAAhC;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;;;AE3EG,MAAO,uBAAwB,SAAQ,wBAAwB,CAAA;AAHrE,IAAA,WAAA,GAAA;;;AAiDI,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,IAAqB,EAAE,QAAQ,KAAI;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,OAAO,IAAI,CAAC,KAAK;;YAErB,IAAI,KAAK,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAErC,IAAI,KAAK,EAAE;AACP,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,oBAAA,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;;AAE1B,qBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAChC,oBAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACX,wBAAA,KAAK,GAAG,KAAK,CAAC,GAAG;;;;AAK7B,YAAA,OAAO,KAAK;AAChB,SAAC;AAwED,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAU,EAAE,IAAS,KAAI;AACxC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACtC,SAAC;AAOJ;;AA7IG,IAAA,iBAAiB,CAAC,OAA6B,EAAA;;;IAK/C,cAAc,CAAC,CAAM,EAAA;IACrB,kBAAkB,CAAC,CAA0B,EAAA;IAC7C,oBAAoB,CAAC,CAAM,EAAA;;IAG3B,YAAY,CAAC,CAAc,EAAA;IAC3B,kBAAkB,CAAC,CAAM,EAAA;AACzB,IAAA,YAAY,CAAC,CAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;;;IAGxC,kBAAkB,CAAC,CAAM,EAAA;IACzB,OAAO,CAAC,CAAM,EAAA;;IAGd,IAAI,CAAC,CAAM,EAAA;IAEX,gBAAgB,CAAC,KAAa,EAAE,IAAS,EAAA;AACrC,QAAA,OAAO,IAAI;;;IAIf,cAAc,CAAC,CAAM,EAAA;IACrB,kBAAkB,CAAC,CAA0B,EAAA;;IAG7C,YAAY,CAAC,CAAM,EAAA;;AAGnB,IAAA,YAAY;;IAGZ,YAAY,CAAC,GAAQ,EAAE,MAAwB,IAAe,OAAO,EAAE,CAAC;AACxE,IAAA,cAAc,CAAC,MAAwB,EAAA,EAAe,OAAO,EAAE,CAAC;;;IAyBhE,SAAS,CAAC,MAAM,EAAE,KAAc,EAAA;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;QACnC,OAAO,MAAM,CAAC,GAAG;AAEjB,QAAA,MAAM,SAAS,GAAG;YACd,GAAG;AACH,YAAA,MAAM,EAAE,OAAO,KAAK,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK;AACvE,YAAA,KAAK,EAAE;SACV;QAED,MAAM,KAAK,GAAqB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;AAEjE,QAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAE7B,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAqB,KAAI;gBACvF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE;oBAC3B,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE9E,aAAC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,gBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;oBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;;AAErC,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;aAC3C;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;;QAGzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,wBAAwB,EAAE;AAE/C,QAAA,OAAO,KAAK;;AAGhB,IAAA,YAAY,CAAC,KAAwB,EAAA;;AAEjC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAmB,KAAI;YAClC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;YACnF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AACnE,SAAC,CAAC;;QAEF,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;;IAIhC,YAAY,CAAC,MAAM,EAAE,OAAmD,EAAA;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;aACxC,IAAI,CAAC,CAAC,CAAmB,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;QAC5E,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;AAC7B,YAAA,OAAO,UAAU;;;IAIf,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ;AAC/D,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ;;;AAQpE,IAAA,QAAQ,CAAC,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;+GA9Ib,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCLY,yBAAyB,CAAA;AAIpC,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;;AAG5B,IAAA,eAAe,CAAC,OAA6B,EAAA;QAC3C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAgB,KAAI;AAC3C,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3E,SAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAgB,KAAI;AACzC,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC1E,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;QAE1D,IAAI,CAAC,kBAAkB,EAAE;;AAI3B,IAAA,qBAAqB,CAAC,CAAM,EAAA;QAC1B,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;AAC5C,YAAA,MAAM,GAAG,GAAI,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK;YAC3E,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE;AAC5F,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;;qBAC/D;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;;;iBAG/D;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;;;aAEjE;YACL,IAAI,CAAC,kBAAkB,EAAE;;;AAI7B,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,EAAE;AACrD,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD,oBAAA,IAAK,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;wBACpE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;;yBAC/B;wBACL,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;;;;;;IAQtC,kBAAkB,GAAA;QAC1B,IAAI,aAAa,GAAG,KAAK;QACzB,IAAI,SAAS,GAAG,KAAK;QAErB,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE;YACnC,aAAa,GAAG,KAAK;YACrB,SAAS,GAAG,KAAK;;aACZ;AACL,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC9E,oBAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAClJ,aAAa,GAAG,KAAK;gBACrB,SAAS,GAAG,IAAI;;iBAEX;gBACL,SAAS,GAAG,KAAK;gBACjB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;;;QAInD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACrC,YAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY;AAClD,iBAAA,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,aAAa,CAAC;AAC3D,YAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACrB,SAAC,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAE/F,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;;AAEhC;;MCnFY,4BAA4B,CAAA;AAAzC,IAAA,WAAA,GAAA;QAEI,IAAc,CAAA,cAAA,GAAG,EAAE;;IAEnB,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,IAAG;AACvC,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE;;AAEnF,aAAC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;;;;IAKhE,YAAY,GAAA;AAClB,QAAA,MAAM,iBAAiB,GAAG,CAAC,IAAsB,EAAE,MAAc,KAAa;YAC1E,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;YAE7F,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;AACrD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;gBACtG,IAAI,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK;gBACzC,MAAM,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AAExF,gBAAA,IAAI,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE;AACnC,oBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;;AAGlF,gBAAA,IAAI,QAAQ,IAAI,QAAQ,QAAQ,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACpE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAE7C,gBAAA,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,QAAQ,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;wBAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAC3B,4BAAA,OAAO,IAAI;;AAEf,wBAAA,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ;AAC3D,4BAAA,YAAY,CAAC,GAAG,CAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9G,4BAAA,YAAY,CAAC,GAAG,CAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/D,wBAAA,OAAO,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;;yBACvE;AACH,wBAAA,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;4BACpD,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAIrG,gBAAA,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,oBAAA,OAAO,IAAI;;qBACR,IAAI,CAAC,QAAQ,EAAE;AAClB,oBAAA,OAAO,KAAK;;AACT,qBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC3B,oBAAA,OAAO,IAAI;;AAEf,gBAAA,OAAO,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1H,aAAC,CAAC;AACN,SAAC;AACD,QAAA,OAAO,iBAAiB;;AAG/B;;MC1DY,2BAA2B,CAAA;AAG7B,IAAA,UAAU,CAAC,KAAU,EAAA;AACxB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;AAGZ,IAAA,MAAM,CAAC,KAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YACvD,IAAI,OAAO,EAAE;gBACT,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS,EAAE;AAC7C,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACpH,oBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AAEtF,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;AAC3B,wBAAA,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa;AAC9D,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY;AAC/D,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ;;qBAC5D;AACH,oBAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,oBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;AAE5E,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;wBAC3B,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa;wBACpE,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY;AAC/D,qBAAA,CAAC;;AAEN,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE7B,SAAC,CAAC;;AAGC,IAAA,SAAS,CAAC,KAAU,EAAA;;IAIpB,aAAa,CAAC,KAAa,EAAE,IAA+B,EAAA;AAC/D,QAAA,OAAO,IAAI;;AAElB;;MChDY,yBAAyB,CAAA;AAIlC,IAAA,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAqD,EAAA;QAC9E,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,IAAI,QAAQ,EAAE;AACrD,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;qBACrB,MAAM,CAAC,CAAC,GAAqB,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;qBACrF,OAAO,CAAC,CAAC,GAAqB,KAAK,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;;;AAIpH;;ACPD;AACA;AACA;AAEa,MAAA,gBAAiB,SAAQ,OAAO,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,4BAA4B,EAC1H,2BAA2B,EAAE,yBAAyB,CAAC,CAAA;AAEvD,IAAA,WAAA,GAAA;QACI,KAAK,CAEG,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAC5D,EAAE,KAAK,EAAE,4BAA4B,EAAE,EACvC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CACvC;;;AAIT,IAAA,iBAAiB,CAAC,OAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;;AAIjC,IAAA,cAAc,CAAC,CAAM,EAAA;QACjB,IAAI,CAAC,UAAU,EAAE;;AAErB,IAAA,kBAAkB,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;;;AAIjC,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;;AAG/B,IAAA,IAAI,CAAC,CAAM,EAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;IAGlB,gBAAgB,CAAC,KAAa,EAAE,IAAS,EAAA;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG1C,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;;;IAIpC,cAAc,CAAC,CAAM,EAAA;IAErB,YAAY,CAAC,KAAgB,EAAA;+GA9CpB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCPY,6BAA6B,CAAA;IAMxC,WAAY,CAAA,MAAc,EAAU,SAAqB,EAAA;QAArB,IAAS,CAAA,SAAA,GAAT,SAAS;AAFrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAQ;AAG9C,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;;AAG5B,IAAA,qBAAqB,CAAC,CAAM,EAAA;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;AAC5C,gBAAA,MAAM,GAAG,GAAI,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK;AAE3E,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;qBACpC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU;qBAClC,GAAG,CAAC,MAAM,IAAG;oBACZ,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;AACvF,iBAAC;qBACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAEzC,gBAAA,MAAM,CACJ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY;AACvC,qBAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAClC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,oBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;AACvD,iBAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;oBAClB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;iBACrF,CAAC,CACH,CACJ,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;oBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AACxC,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACrB,wBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAqB,KAAI;4BACnE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACtF,yBAAC,CAAC;AAEF,wBAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;4BACxB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAEnD,wBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;wBAC1E,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAIhD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;AAC/B,iBAAC,CAAC;;;;AAKR,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,EAAE;AACrD,gBAAA,MAAM,GAAG,GAAI,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK;AAC5E,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;qBACpC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU;qBAClC,GAAG,CAAC,MAAM,IAAG;oBACZ,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;AACvF,iBAAC;qBACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACzC,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY;qBAC7C,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,QAAQ,KAAI;oBACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;AACvC,iBAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,oBAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACtE,iBAAC,CAAC;AAEH,qBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBACpB,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAC5F,yBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC3B,wBAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;4BAC1B,IAAI,CAAC,KAAK,CAAC;iCACR,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;6BAClF,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;4BACvD,IAAI,CAAC,KAAK,CAAC;iCACR,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;6BACjF;4BACL,IAAI,CAAC,KAAK,CAAC;iCACR,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAGzF,wBAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;AAC1B,4BAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAqB,EAAE,KAAK,KAAI;gCAC1E,MAAM,cAAc,GAAI,QAAQ,CAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;gCACjG,IAAI,cAAc,EAAE;AAClB,oCAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CACzC,CAAC,cAAc,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,EAC7D,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvC,oCAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;;AAEjC,6BAAC,CAAC;;wBAGJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACpC,4BAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC;AACrE,4BAAA,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;gCACb,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;;AAEjG,4BAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACrB,yBAAC,CAAC;AAEF,wBAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;4BACxB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;;;AAGnD,wBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;;oBAG5E,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,iBAAC,CAAC;;;;AAIX;;ACxHY,MAAA,oBAAqB,SAAQ,OAAO,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,yBAAyB,CAAC,CAAA;IAE7J,WAAoB,CAAA,UAAuB,EAAE,SAAsB,EAAA;QAC/D,KAAK,CAEG,EAAE,KAAK,EAAE,6BAA6B,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAC3E,EAAE,KAAK,EAAE,yBAAyB,EAAE,CACvC;QALW,IAAU,CAAA,UAAA,GAAV,UAAU;;;AAQ9B,IAAA,cAAc,CAAC,CAAM,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;QAEhD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACpB,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;;AAEtC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE;YAC1D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAG9C,IAAA,kBAAkB,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;;;AAIjC,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;;AAG/B,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,QAAA,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;;IAIzB,cAAc,CAAC,CAAM,EAAA;AAErB,IAAA,YAAY,CAAC,KAAgB,EAAA;;AAK7B,IAAA,IAAI,CAAC,CAAM,EAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;IAGlB,gBAAgB,CAAC,KAAa,EAAE,IAAS,EAAA;AACrC,QAAA,OAAO,IAAI;;IAGf,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,OAAe,EAAE,MAAgC,EAAA;QAE7F,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACzF,GAAG,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,MAAK;YACZ,OAAO,EAAE,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,CAAC;SACrC,CAAC,CACL,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAClC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC;AACrE,gBAAA,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;;AAEnG,gBAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACvB,aAAC,CAAC;AACN,SAAC,CAAC;AACN,QAAA,OAAO,GAAG;;IAGd,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;;AAGhC;;ACjFK,MAAO,2BAA4B,SAAQ,uBAAuB,CAAA;AAHxE,IAAA,WAAA,GAAA;;AAKI,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,IAAqB,EAAE,QAAgB,KAAY;AACvE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK;AACnC,SAAC;AAsBD,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,IAAqB,EAAE,QAAQ,KAAI;YACzD,IAAI,KAAK,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrC,IAAI,KAAK,EAAE;AACP,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,oBAAA,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;;AAE1B,qBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAChC,oBAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACX,wBAAA,KAAK,GAAG,KAAK,CAAC,GAAG;;;;AAI7B,YAAA,OAAO,KAAK;AAChB,SAAC;AA8GD,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAU,EAAE,IAAS,KAAI;AACxC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AAC/E,SAAC;AACJ;IAlJG,qBAAqB,CAAC,IAAsB,EAAE,QAAgB,EAAA;AAC1D,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;aACrG,MAAM,CAAC,IAAI,IAAG;AACX,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,SAAC;aACA,OAAO,CAAC,IAAI,IAAG;YACZ,OAAO,IAAI,CACP,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAClD;AACL,SAAC;AACA,aAAA,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QACpF,OAAO,MAAM,IAAI,IAAI;;IAIzB,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI;;AAkBf,IAAA,UAAU,CAAC,CAAM,EAAA;;AAIjB,IAAA,WAAW,CAAC,CAAM,EAAA;;AAIlB,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;AACjF,QAAA,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;IAGf,wBAAwB,CAAC,IAAsB,EAAE,UAAmB,EAAA;QAE1E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS;AAC9C,QAAA,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,QAAQ,KAAK,CAAC;AAC/D,QAAA,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM;AAEhF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAqB;YAE1H,IAAI,UAAU,EAAE;AACZ,gBAAA,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACnC,oBAAA,SAAS,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,UAAU,GAAG,KAAK;AAClE,iBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACrE,wBAAC,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC;;AAEtE,SAAC,CAAC;;IAGN,SAAS,CAAC,MAAM,EAAE,KAAc,EAAA;AAE5B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC3E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;AAElD,QAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC;AACtD,aAAC,CAAC;;aACC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACrB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,aAAC,CAAC;;AAEN,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;;IAGpB,SAAS,CAAC,GAAQ,EAAE,OAAmD,EAAA;AACnE,QAAA,MAAM,IAAI,GAAG;YACT,GAAG,GAAG,CAAC,KAAK;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;;SAEf;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;;IAG3C,QAAQ,CAAC,QAAgB,EAAE,MAAM,EAAA;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC1G,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC1D,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK;QAEnC,IAAI,MAAM,EAAE;AACR,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAE3E,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC;YAC5E,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;YAC3H,MAAM,KAAK,GAAG,WAAW;AAEzB,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;;iBACrD;AACH,gBAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;;AAG1D,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;AAC5D,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAG;gBAC5F,OAAO;AACH,oBAAA,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK;AAC7I,oBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG;oBACpB,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ;AAC1F,oBAAA,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe;oBACpH,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI;iBAC1C;AACL,aAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC;;AAGpB,QAAA,OAAO,IAAI;;+GAlJN,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAET,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACFK,MAAO,+BAAgC,SAAQ,2BAA2B,CAAA;AAC5E,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAClE,QAAA,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGhI,IAAA,MAAM,CAAC,KAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YACvD,IAAI,OAAO,EAAE;AACT,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAEpH,MAAM,YAAY,IAAI,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY;oBAC1D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAqB,CAAC,IAAI,KAAK,CAAC;AAC7G,sBAAE,KAAK,CAAC,YAAY,CAAC;AAEzB,gBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC;AAChF,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAqB,EAAE,YAAY,CAAC;AACrG,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC3B,YAAY,EAAE,aAAa,EAAE,aAAa;oBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,YAAY;AACzD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ;AAC/D,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE7B,SAAC,CAAC;;IAGE,YAAY,CAAC,MAAwB,EAAE,KAAa,EAAA;AACxD,QAAA,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AACvD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC;AACvI,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACtB,gBAAA,IAAI,aAAa,GAAG,KAAK,EAAE;AACvB,oBAAA,KAAK,EAAE;;AAEX,gBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC;AACzE,gBAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAqB,EAAE,KAAK,CAAC;;AAEvG,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;AAGR,IAAA,kBAAkB,CAAC,MAAwB,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC3F,YAAA,OAAO,IAAI;;QAGf,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,KAAI;AACrE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC;SAC3H,CAAC,CAAC;;IAGA,aAAa,CAAC,KAAa,EAAE,IAA+B,EAAA;AAC/D,QAAA,OAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACjI,eAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;;AAE3J;;AC9CK,MAAO,wBAAyB,SAAQ,OAAO,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,+BAA+B,CAAC,CAAA;AAE9I,IAAA,WAAA,CAAoB,IAAiB,EAAU,KAAoB,EAAE,SAAsB,EAAA;AACvF,QAAA,KAAK,CAEG,EAAE,KAAK,EAAE,6BAA6B,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAC9E;QAJW,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAuB,IAAK,CAAA,KAAA,GAAL,KAAK;;;AASpD,IAAA,cAAc,CAAC,CAAM,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;QAEhD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACpB,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;;AAEtC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE;YAC1D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI9C,IAAA,kBAAkB,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;;;AAIjC,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;;AAG/B,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;AAGzB,IAAA,IAAI,CAAC,CAAM,EAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;IAGlB,gBAAgB,CAAC,KAAa,EAAE,IAAS,EAAA;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;;IAGhC,wBAAwB,CAAC,IAAsB,EAAE,UAAmB,EAAA;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAG;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAqB;YAC1H,IAAI,UAAU,EAAE;AACZ,gBAAA,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACnC,oBAAA,SAAS,EAAE,UAAU;AACxB,iBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC;;AAE7G,SAAC,CAAC;;;IAIN,cAAc,CAAC,CAAM,EAAA;AAErB,IAAA,YAAY,CAAC,KAAgB,EAAA;;;IAI7B,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,OAAe,EAAE,MAAgC,EAAA;QAE7F,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnF,GAAG,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,MAAK;YACZ,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;SACtC,CAAC,CACL,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAClC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC;AACrE,gBAAA,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;;AAEnG,gBAAA,OAAO,CAAC,GAAG,OAAO,CAAC;AACvB,aAAC,CAAC;AACN,SAAC,CAAC;AACF,QAAA,OAAO,GAAG;;IAGd,SAAS,CAAC,QAAgB,EAAE,IAAa,EAAE,KAAc,EAAE,IAAa,EAAE,OAAgB,EAAE,MAAgC,EAAA;AACxH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;;IAGhF,QAAQ,CAAC,QAAgB,EAAE,MAAM,EAAA;AAC7B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAG;AACvD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;SACrD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEvB,IAAI,gBAAgB,EAAE;AAClB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC3E,gBAAgB,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC;YAEzH,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAE1G,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAG;AACzE,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;aACxD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CACb,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CACd,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AAEZ,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC;AAC5E,YAAA,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAExD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;YAElD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;YAC3H,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEtG,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACxE,gBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACpH,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI;AACrH,aAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAExB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC;AAChF,aAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC;;;IAKxB,WAAW,CAAC,QAAgB,EAAE,MAAa,EAAA;AACvC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;;AAI3D,IAAA,SAAS,CAAC,KAAa,EAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;QAC3G,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AACnD,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,aAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;YACpD,IAAI,QAAQ,EAAE;gBACV,MAAM,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;gBACnI,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;YAInJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;AAClH,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;;YAG7C,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,KAAK,KAAK,CAAC;;;AAIpH,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAuB,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;AACjH,QAAA,IAAI,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE;AACnD,YAAA,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AACjE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,aAAC,CAAC;AAEF,YAAA,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAE3E,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAG;AACvD,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;AACtD,aAAC,CAAC,GAAG,CAAC,CAAC;YAEP,IAAI,gBAAgB,EAAE;AAClB,gBAAA,gBAAgB,CAAC,QAAQ,GAAG,EAAE;;YAGlC,IAAI,CAAC,gBAAgB,EAAE;;;IAKxB,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;;AAGhC;;AClMK,MAAO,6BAA8B,SAAQ,yBAAyB,CAAA;AAK1E,IAAA,WAAA,CAAY,MAAc,EAAA;QACxB,KAAK,CAAC,MAAM,CAAC;;AAGf,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,EAAE;AACrD,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD,oBAAA,MAAM,QAAQ,GAAI,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK;AACjF,oBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC;oBACjD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC;AAEpC,oBAAA,IAAK,CAAC,CAAC,KAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;wBACpE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;;yBAC/B;wBACL,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;;;;AAK5C,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;gBAChH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACzG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;;iBAEpD;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1I,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACnF,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;AAI9G,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;;;IAIjC,qBAAqB,CAAC,MAAM,EAAE,KAAuB,EAAA;QACnD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;AACjC,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAG;AACnD,YAAA,OAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI;AAC/I,SAAC,CAAC;;IAIJ,0BAA0B,CAAC,MAAM,EAAE,KAAuB,EAAA;QACxD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;AACjC,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAG;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;;;YAIzF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;AAE3E,YAAA,OAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;mBACpI,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,KAAK,IAAI;AAC/F,SAAC,CAAC;;IAKJ,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;iBACtC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM;YACzD,OAAO,WAAW,KAAK,OAAO;;AAEhC,QAAA,OAAO,KAAK;;AAKd,IAAA,eAAe,CAAC,MAAM,EAAE,KAAuB,EAAE,QAAiB,EAAA;AAChE,QAAA,MAAM,SAAS,GAAI,KAAK,CAAC,QAAQ,CAAC,OAA4B,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;AAC7F,QAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAqB;AAC7G,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC5D,gBAAA,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAEhF,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;oBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;;qBAClC;oBACL,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;;;YAG7C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;AACpD,SAAC,CAAC;;IAGJ,YAAY,CAAC,MAAM,EAAE,KAAuB,EAAA;;AAE1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;aACrB,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAChE,aAAA,IAAI,CAAC,EAAE,IACN,IAAI,CACF,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CACF;QACH,IAAI,IAAI,EAAE;;;;;;;;;;;;;;AAiBR,YAAA,IAAI,CACF,IAAI,EACJ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,IAAG;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAqB;gBAE5G,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;;gBAEvF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;gBACzE,IAAI,SAAS,EAAE;oBACb,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,GAAG,KAAK;;gBAGvF,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACnD,oBAAA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;;qBACnC,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;;oBAE/D,IAAI,SAAS,EAAE;wBACb,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,GAAG,KAAK;;AAEvF,oBAAA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC9E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;;qBACrC;AACL,oBAAA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC9E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;;aAG7C,CAAC,CACD,CACF;;;AAGN;;AC7JK,MAAO,oBAAqB,SAAQ,OAAO,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,+BAA+B,CAAC,CAAA;AAE1I,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAEG,EAAE,KAAK,EAAE,6BAA6B,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CACnE;;AAGT,IAAA,iBAAiB,CAAC,OAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;AAGjC,IAAA,kBAAkB,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;;AAGjC,IAAA,YAAY,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;;AAG/B,IAAA,IAAI,CAAC,CAAM,EAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;IAGlB,gBAAgB,CAAC,KAAa,EAAE,IAAS,EAAA;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;;+GA1BjC,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;;;MCFY,8BAA8B,CAAA;AAIvC,IAAA,WAAA,CAAY,MAAe,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;;AAG9B,IAAA,eAAe,CAAC,OAA6B,EAAA;QACzC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAgB,KAAI;AACzC,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC7E,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY;aAC7D,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3E,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;YAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE9F,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGjC,IAAA,eAAe,CAAC,KAAuB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE;AAC7C,oBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACrB,yBAAA,MAAM,CAAC,CAAC,GAAqB,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG;AACnE,yBAAA,OAAO,CAAC,CAAC,GAAqB,KAAI;AAC/B,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5E,qBAAC,CAAC;;AAEV,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBACzC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,oBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;qBACtE;oBACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,oBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE9E,gBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;;iBACvD;gBACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE9E,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;;;AAGxC;;MC9CY,0BAA0B,CAAA;AAAvC,IAAA,WAAA,GAAA;QAEI,IAAc,CAAA,cAAA,GAAG,EAAE;;IAEnB,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK;YACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;;;;IAKhE,YAAY,GAAA;AAClB,QAAA,MAAM,iBAAiB,GAAG,CAAC,IAAsB,EAAE,MAAc,KAAa;YAC1E,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;YAE7F,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAErD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;gBAEnF,IAAI,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK;AAEzC,gBAAA,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,oBAAA,OAAO,IAAI;;qBACR,IAAI,CAAC,QAAQ,EAAE;AAClB,oBAAA,OAAO,KAAK;;AACT,qBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC3B,oBAAA,OAAO,IAAI;;gBAGf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AAEtE,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,oBAAA,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAE/D,OAAO,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;AAC/G,aAAC,CAAC;AACN,SAAC;AACD,QAAA,OAAO,iBAAiB;;AAI/B;;IChDW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAJW,SAAS,KAAT,SAAS,GAIpB,EAAA,CAAA,CAAA;;MCqHY,cAAc,CAAA;+GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,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,cAAc,YAjFnB,YAAY;YACZ,eAAe;YACf,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,cAAc;YACd,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,eAAe;YACf,oBAAoB;AACpB,YAAA,cAAc,aAId,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,cAAc;YACd,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,cAAc;YACd,4BAA4B,CAAA,EAAA,CAAA,CAAA;AAQvB,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,cAAc,EANZ,SAAA,EAAA;YACP,mBAAmB;YACnB;AACH,SAAA,EAAA,OAAA,EAAA,CA9EG,YAAY;YACZ,eAAe;YACf,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,cAAc;YACd,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,eAAe;YACf,oBAAoB;AACpB,YAAA,cAAc,EAId,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,cAAc;YACd,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,cAAc;YACd,4BAA4B,CAAA,EAAA,CAAA,CAAA;;4FAQvB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnF1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,eAAe;wBACf,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,gBAAgB;wBAChB,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,mBAAmB;wBACnB,cAAc;wBACd,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,wBAAwB;wBACxB,iBAAiB;wBACjB,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,iBAAiB;wBACjB,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB;AACH,qBAAA;AAED,oBAAA,OAAO,EAAE;wBACL,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,gBAAgB;wBAChB,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,cAAc;wBACd,kBAAkB;wBAClB,eAAe;wBACf,cAAc;wBACd,mBAAmB;wBACnB,cAAc;wBACd,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,wBAAwB;wBACxB,iBAAiB;wBACjB,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB,iBAAiB;wBACjB,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB,cAAc;wBACd;AACH,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,mBAAmB;wBACnB;AACH;AACJ,iBAAA;;;AC7ED,MAAM,UAAU,GAAG;IACf,kBAAkB;IAClB,sBAAsB;IACtB,2BAA2B;IAC3B,iCAAiC;IACjC,oCAAoC;IACpC,iBAAiB;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,0BAA0B;IAC1B;CACH;AACD,MAAM,UAAU,GAAG;IACf,kBAAkB;IAClB,yBAAyB;IACzB,sBAAsB;IACtB,4BAA4B;IAC5B,4BAA4B;IAC5B,sBAAsB;IACtB,wBAAwB;IACxB,0BAA0B;IAC1B;CACH;AACD,MAAM,QAAQ,GAAG;IACb,wBAAwB;IACxB,4BAA4B;IAC5B,gBAAgB;IAChB,4BAA4B;IAC5B,gCAAgC;IAChC,2BAA2B;IAC3B,gBAAgB;IAChB;CACH;AACD,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC;MAuBrH,uBAAuB,CAAA;+GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,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,uBAAuB,YAnB5B,YAAY;YACZ,cAAc;YACd,mBAAmB;YACnB,WAAW;AACX,YAAA,8BAA8B,EAxClC,kBAAkB;YAClB,sBAAsB;YACtB,2BAA2B;YAC3B,iCAAiC;YACjC,oCAAoC;YACpC,iBAAiB;YACjB,iBAAiB;YACjB,sBAAsB;YACtB,0BAA0B;AAC1B,YAAA,uBAAuB,EAGvB,kBAAkB;YAClB,yBAAyB;YACzB,sBAAsB;YACtB,4BAA4B;YAC5B,4BAA4B;YAC5B,sBAAsB;YACtB,wBAAwB;YACxB,0BAA0B;AAC1B,YAAA,gCAAgC,EAYrB,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,aAhC7H,kBAAkB;YAClB,sBAAsB;YACtB,2BAA2B;YAC3B,iCAAiC;YACjC,oCAAoC;YACpC,iBAAiB;YACjB,iBAAiB;YACjB,sBAAsB;YACtB,0BAA0B;AAC1B,YAAA,uBAAuB,EAGvB,kBAAkB;YAClB,yBAAyB;YACzB,sBAAsB;YACtB,4BAA4B;YAC5B,4BAA4B;YAC5B,sBAAsB;YACtB,wBAAwB;YACxB,0BAA0B;AAC1B,YAAA,gCAAgC,EAYrB,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;AAuBpH,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,uBAAuB,EALrB,SAAA,EAAA;YACP,QAAQ;YACR;AACH,SAAA,EAAA,OAAA,EAAA,CAjBG,YAAY;YACZ,cAAc;YACd,mBAAmB;YACnB,WAAW;YACX,8BAA8B;YAC9B,UAAU,CAAA,EAAA,CAAA,CAAA;;4FAcL,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,cAAc;wBACd,mBAAmB;wBACnB,WAAW;wBACX,8BAA8B;wBAC9B,UAAU;wBACV,UAAU;wBACV;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,UAAU;wBACV,UAAU;wBACV;AACH,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,QAAQ;wBACR;AACH;AACJ,iBAAA;;;ACjGD;;AAEG;AAEH;;ACJA;;AAEG;;;;"}