{"version":3,"file":"axulus-uikit-treetable.mjs","sources":["../../src/app/components/treetable/treetable.ts","../../src/app/components/treetable/axulus-uikit-treetable.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Injectable,\n  Input,\n  NgModule,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { BlockableUI, FilterMetadata, FilterService, PrimeTemplate, SharedModule, SortMeta, TreeNode } from '@axulus/uikit/api';\nimport { DomHandler } from '@axulus/uikit/dom';\nimport { PaginatorModule } from '@axulus/uikit/paginator';\nimport { RippleModule } from '@axulus/uikit/ripple';\nimport { Scroller, ScrollerModule, ScrollerOptions } from '@axulus/uikit/scroller';\nimport { ObjectUtils } from '@axulus/uikit/utils';\nimport { Subject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class TreeTableService {\n  private sortSource = new Subject<SortMeta | SortMeta[]>();\n  private selectionSource = new Subject();\n  private contextMenuSource = new Subject<any>();\n  private uiUpdateSource = new Subject<any>();\n  private totalRecordsSource = new Subject<any>();\n\n  sortSource$ = this.sortSource.asObservable();\n  selectionSource$ = this.selectionSource.asObservable();\n  contextMenuSource$ = this.contextMenuSource.asObservable();\n  uiUpdateSource$ = this.uiUpdateSource.asObservable();\n  totalRecordsSource$ = this.totalRecordsSource.asObservable();\n\n  onSort(sortMeta: SortMeta | SortMeta[]) {\n    this.sortSource.next(sortMeta);\n  }\n\n  onSelectionChange() {\n    this.selectionSource.next(null);\n  }\n\n  onContextMenu(node: any) {\n    this.contextMenuSource.next(node);\n  }\n\n  onUIUpdate(value: any) {\n    this.uiUpdateSource.next(value);\n  }\n\n  onTotalRecordsChange(value: number) {\n    this.totalRecordsSource.next(value);\n  }\n}\n\n@Component({\n  selector: 'p-treeTable',\n  template: `\n    <div\n      #container\n      [ngStyle]=\"style\"\n      [class]=\"styleClass\"\n      data-scrollselectors=\".p-treetable-scrollable-body\"\n      [ngClass]=\"{\n        'p-treetable p-component': true,\n        'p-treetable-hoverable-rows': rowHover || selectionMode === 'single' || selectionMode === 'multiple',\n        'p-treetable-auto-layout': autoLayout,\n        'p-treetable-resizable': resizableColumns,\n        'p-treetable-resizable-fit': resizableColumns && columnResizeMode === 'fit',\n        'p-treetable-flex-scrollable': scrollable && scrollHeight === 'flex'\n      }\"\n    >\n      <div class=\"p-treetable-loading\" *ngIf=\"loading && showLoader\">\n        <div class=\"p-treetable-loading-overlay p-component-overlay\">\n          <i [class]=\"'p-treetable-loading-icon pi-spin ' + loadingIcon\"></i>\n        </div>\n      </div>\n      <div *ngIf=\"captionTemplate\" class=\"p-treetable-header\">\n        <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n      </div>\n      <p-paginator\n        [rows]=\"rows\"\n        [first]=\"first\"\n        [totalRecords]=\"totalRecords\"\n        [pageLinkSize]=\"pageLinks\"\n        styleClass=\"p-paginator-top\"\n        [alwaysShow]=\"alwaysShowPaginator\"\n        (onPageChange)=\"onPageChange($event)\"\n        [rowsPerPageOptions]=\"rowsPerPageOptions\"\n        *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\n        [templateLeft]=\"paginatorLeftTemplate\"\n        [templateRight]=\"paginatorRightTemplate\"\n        [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\n        [currentPageReportTemplate]=\"currentPageReportTemplate\"\n        [showFirstLastIcon]=\"showFirstLastIcon\"\n        [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\n        [showCurrentPageReport]=\"showCurrentPageReport\"\n        [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\n        [showPageLinks]=\"showPageLinks\"\n      ></p-paginator>\n\n      <div class=\"p-treetable-wrapper\" *ngIf=\"!scrollable\">\n        <table #table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n          <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: columns }\"></ng-container>\n          <thead class=\"p-treetable-thead\">\n            <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: columns }\"></ng-container>\n          </thead>\n          <tbody class=\"p-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"bodyTemplate\"></tbody>\n          <tfoot class=\"p-treetable-tfoot\">\n            <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: columns }\"></ng-container>\n          </tfoot>\n        </table>\n      </div>\n\n      <div class=\"p-treetable-scrollable-wrapper\" *ngIf=\"scrollable\">\n        <div\n          class=\"p-treetable-scrollable-view p-treetable-frozen-view\"\n          *ngIf=\"frozenColumns || frozenBodyTemplate\"\n          #scrollableFrozenView\n          [ttScrollableView]=\"frozenColumns\"\n          [frozen]=\"true\"\n          [ngStyle]=\"{ width: frozenWidth }\"\n          [scrollHeight]=\"scrollHeight\"\n        ></div>\n        <div\n          class=\"p-treetable-scrollable-view\"\n          #scrollableView\n          [ttScrollableView]=\"columns\"\n          [frozen]=\"false\"\n          [scrollHeight]=\"scrollHeight\"\n          [ngStyle]=\"{ left: frozenWidth, width: 'calc(100% - ' + frozenWidth + ')' }\"\n        ></div>\n      </div>\n\n      <p-paginator\n        [rows]=\"rows\"\n        [first]=\"first\"\n        [totalRecords]=\"totalRecords\"\n        [pageLinkSize]=\"pageLinks\"\n        styleClass=\"p-paginator-bottom\"\n        [alwaysShow]=\"alwaysShowPaginator\"\n        (onPageChange)=\"onPageChange($event)\"\n        [rowsPerPageOptions]=\"rowsPerPageOptions\"\n        *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\n        [templateLeft]=\"paginatorLeftTemplate\"\n        [templateRight]=\"paginatorRightTemplate\"\n        [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\n        [currentPageReportTemplate]=\"currentPageReportTemplate\"\n        [showFirstLastIcon]=\"showFirstLastIcon\"\n        [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\n        [showCurrentPageReport]=\"showCurrentPageReport\"\n        [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\n        [showPageLinks]=\"showPageLinks\"\n      ></p-paginator>\n      <div *ngIf=\"summaryTemplate\" class=\"p-treetable-footer\">\n        <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n      </div>\n\n      <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n\n      <span #reorderIndicatorUp class=\"pi pi-arrow-down p-treetable-reorder-indicator-up\" *ngIf=\"reorderableColumns\"></span>\n      <span #reorderIndicatorDown class=\"pi pi-arrow-up p-treetable-reorder-indicator-down\" *ngIf=\"reorderableColumns\"></span>\n    </div>\n  `,\n  providers: [TreeTableService],\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./treetable.css'],\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TreeTable implements AfterContentInit, OnInit, OnDestroy, BlockableUI, OnChanges {\n  @Input() columns: any[];\n\n  @Input() style: any;\n\n  @Input() styleClass: string;\n\n  @Input() tableStyle: any;\n\n  @Input() tableStyleClass: string;\n\n  @Input() autoLayout: boolean;\n\n  @Input() lazy: boolean = false;\n\n  @Input() lazyLoadOnInit: boolean = true;\n\n  @Input() paginator: boolean;\n\n  @Input() rows: number;\n\n  @Input() first: number = 0;\n\n  @Input() pageLinks: number = 5;\n\n  @Input() rowsPerPageOptions: any[];\n\n  @Input() alwaysShowPaginator: boolean = true;\n\n  @Input() paginatorPosition: string = 'bottom';\n\n  @Input() paginatorDropdownAppendTo: any;\n\n  @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n  @Input() showCurrentPageReport: boolean;\n\n  @Input() showJumpToPageDropdown: boolean;\n\n  @Input() showFirstLastIcon: boolean = true;\n\n  @Input() showPageLinks: boolean = true;\n\n  @Input() defaultSortOrder: number = 1;\n\n  @Input() sortMode: string = 'single';\n\n  @Input() resetPageOnSort: boolean = true;\n\n  @Input() customSort: boolean;\n\n  @Input() selectionMode: string;\n\n  @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n  @Input() contextMenuSelection: any;\n\n  @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n  @Input() contextMenuSelectionMode: string = 'separate';\n\n  @Input() dataKey: string;\n\n  @Input() metaKeySelection: boolean;\n\n  @Input() compareSelectionBy: string = 'deepEquals';\n\n  @Input() rowHover: boolean;\n\n  @Input() loading: boolean;\n\n  @Input() loadingIcon: string = 'pi pi-spinner';\n\n  @Input() showLoader: boolean = true;\n\n  @Input() scrollable: boolean;\n\n  @Input() scrollHeight: string;\n\n  @Input() virtualScroll: boolean;\n\n  @Input() virtualScrollItemSize: number;\n\n  @Input() virtualScrollOptions: ScrollerOptions;\n\n  @Input() virtualScrollDelay: number = 150;\n\n  @Input() frozenWidth: string;\n\n  @Input() frozenColumns: any[];\n\n  @Input() resizableColumns: boolean;\n\n  @Input() columnResizeMode: string = 'fit';\n\n  @Input() reorderableColumns: boolean;\n\n  @Input() contextMenu: any;\n\n  @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n  @Input() filters: { [s: string]: FilterMetadata } = {};\n\n  @Input() globalFilterFields: string[];\n\n  @Input() filterDelay: number = 300;\n\n  @Input() filterMode: string = 'lenient';\n\n  @Input() filterLocale: string;\n\n  @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n  @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n  @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n  @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n  @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n  @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n  @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n  @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n  @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n  @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n  @ViewChild('container') containerViewChild: ElementRef;\n\n  @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n  @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n  @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n  @ViewChild('table') tableViewChild: ElementRef;\n\n  @ViewChild('scrollableView') scrollableViewChild;\n\n  @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\n\n  @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n  /* @deprecated */\n  _virtualRowHeight: number = 28;\n  @Input() get virtualRowHeight(): number {\n    return this._virtualRowHeight;\n  }\n  set virtualRowHeight(val: number) {\n    this._virtualRowHeight = val;\n    console.warn('The virtualRowHeight property is deprecated, use virtualScrollItemSize property instead.');\n  }\n\n  _value: TreeNode[] = [];\n\n  serializedValue: any[];\n\n  _totalRecords: number = 0;\n\n  _multiSortMeta: SortMeta[];\n\n  _sortField: string;\n\n  _sortOrder: number = 1;\n\n  filteredNodes: any[];\n\n  filterTimeout: any;\n\n  colGroupTemplate: TemplateRef<any>;\n\n  captionTemplate: TemplateRef<any>;\n\n  headerTemplate: TemplateRef<any>;\n\n  bodyTemplate: TemplateRef<any>;\n\n  loadingBodyTemplate: TemplateRef<any>;\n\n  footerTemplate: TemplateRef<any>;\n\n  summaryTemplate: TemplateRef<any>;\n\n  emptyMessageTemplate: TemplateRef<any>;\n\n  paginatorLeftTemplate: TemplateRef<any>;\n\n  paginatorRightTemplate: TemplateRef<any>;\n\n  paginatorDropdownItemTemplate: TemplateRef<any>;\n\n  frozenHeaderTemplate: TemplateRef<any>;\n\n  frozenBodyTemplate: TemplateRef<any>;\n\n  frozenFooterTemplate: TemplateRef<any>;\n\n  frozenColGroupTemplate: TemplateRef<any>;\n\n  lastResizerHelperX: number;\n\n  reorderIconWidth: number;\n\n  reorderIconHeight: number;\n\n  draggedColumn: any;\n\n  dropPosition: number;\n\n  preventSelectionSetterPropagation: boolean;\n\n  _selection: any;\n\n  selectionKeys: any = {};\n\n  rowTouched: boolean;\n\n  editingCell: Element;\n\n  editingCellData: any;\n\n  editingCellField: any;\n\n  editingCellClick: boolean;\n\n  documentEditListener: any;\n\n  initialized: boolean;\n\n  toggleRowIndex: number;\n\n  ngOnInit() {\n    if (this.lazy && this.lazyLoadOnInit && !this.virtualScroll) {\n      this.onLazyLoad.emit(this.createLazyLoadMetadata());\n    }\n    this.initialized = true;\n  }\n\n  ngAfterContentInit() {\n    this.templates.forEach((item) => {\n      switch (item.getType()) {\n        case 'caption':\n          this.captionTemplate = item.template;\n          break;\n\n        case 'header':\n          this.headerTemplate = item.template;\n          break;\n\n        case 'body':\n          this.bodyTemplate = item.template;\n          break;\n\n        case 'loadingbody':\n          this.loadingBodyTemplate = item.template;\n          break;\n\n        case 'footer':\n          this.footerTemplate = item.template;\n          break;\n\n        case 'summary':\n          this.summaryTemplate = item.template;\n          break;\n\n        case 'colgroup':\n          this.colGroupTemplate = item.template;\n          break;\n\n        case 'emptymessage':\n          this.emptyMessageTemplate = item.template;\n          break;\n\n        case 'paginatorleft':\n          this.paginatorLeftTemplate = item.template;\n          break;\n\n        case 'paginatorright':\n          this.paginatorRightTemplate = item.template;\n          break;\n\n        case 'paginatordropdownitem':\n          this.paginatorDropdownItemTemplate = item.template;\n          break;\n\n        case 'frozenheader':\n          this.frozenHeaderTemplate = item.template;\n          break;\n\n        case 'frozenbody':\n          this.frozenBodyTemplate = item.template;\n          break;\n\n        case 'frozenfooter':\n          this.frozenFooterTemplate = item.template;\n          break;\n\n        case 'frozencolgroup':\n          this.frozenColGroupTemplate = item.template;\n          break;\n      }\n    });\n  }\n\n  constructor(\n    public el: ElementRef,\n    public cd: ChangeDetectorRef,\n    public zone: NgZone,\n    public tableService: TreeTableService,\n    public filterService: FilterService\n  ) {}\n\n  ngOnChanges(simpleChange: SimpleChanges) {\n    if (simpleChange.value) {\n      this._value = simpleChange.value.currentValue;\n\n      if (!this.lazy) {\n        this.totalRecords = this._value ? this._value.length : 0;\n\n        if (this.sortMode == 'single' && this.sortField) this.sortSingle();\n        else if (this.sortMode == 'multiple' && this.multiSortMeta) this.sortMultiple();\n        else if (this.hasFilter())\n          //sort already filters\n          this._filter();\n      }\n\n      this.updateSerializedValue();\n      this.tableService.onUIUpdate(this.value);\n    }\n\n    if (simpleChange.sortField) {\n      this._sortField = simpleChange.sortField.currentValue;\n\n      //avoid triggering lazy load prior to lazy initialization at onInit\n      if (!this.lazy || this.initialized) {\n        if (this.sortMode === 'single') {\n          this.sortSingle();\n        }\n      }\n    }\n\n    if (simpleChange.sortOrder) {\n      this._sortOrder = simpleChange.sortOrder.currentValue;\n\n      //avoid triggering lazy load prior to lazy initialization at onInit\n      if (!this.lazy || this.initialized) {\n        if (this.sortMode === 'single') {\n          this.sortSingle();\n        }\n      }\n    }\n\n    if (simpleChange.multiSortMeta) {\n      this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n      if (this.sortMode === 'multiple') {\n        this.sortMultiple();\n      }\n    }\n\n    if (simpleChange.selection) {\n      this._selection = simpleChange.selection.currentValue;\n\n      if (!this.preventSelectionSetterPropagation) {\n        this.updateSelectionKeys();\n        this.tableService.onSelectionChange();\n      }\n      this.preventSelectionSetterPropagation = false;\n    }\n  }\n\n  @Input() get value(): any[] {\n    return this._value;\n  }\n  set value(val: any[]) {\n    this._value = val;\n  }\n\n  updateSerializedValue() {\n    this.serializedValue = [];\n\n    if (this.paginator) this.serializePageNodes();\n    else this.serializeNodes(null, this.filteredNodes || this.value, 0, true);\n  }\n\n  serializeNodes(parent, nodes, level, visible) {\n    if (nodes && nodes.length) {\n      for (let node of nodes) {\n        node.parent = parent;\n        const rowNode = {\n          node: node,\n          parent: parent,\n          level: level,\n          visible: visible && (parent ? parent.expanded : true)\n        };\n        this.serializedValue.push(rowNode);\n\n        if (rowNode.visible && node.expanded) {\n          this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n        }\n      }\n    }\n  }\n\n  serializePageNodes() {\n    let data = this.filteredNodes || this.value;\n    this.serializedValue = [];\n    if (data && data.length) {\n      const first = this.lazy ? 0 : this.first;\n\n      for (let i = first; i < first + this.rows; i++) {\n        let node = data[i];\n        if (node) {\n          this.serializedValue.push({\n            node: node,\n            parent: null,\n            level: 0,\n            visible: true\n          });\n\n          this.serializeNodes(node, node.children, 1, true);\n        }\n      }\n    }\n  }\n\n  @Input() get totalRecords(): number {\n    return this._totalRecords;\n  }\n  set totalRecords(val: number) {\n    this._totalRecords = val;\n    this.tableService.onTotalRecordsChange(this._totalRecords);\n  }\n\n  @Input() get sortField(): string {\n    return this._sortField;\n  }\n\n  set sortField(val: string) {\n    this._sortField = val;\n  }\n\n  @Input() get sortOrder(): number {\n    return this._sortOrder;\n  }\n  set sortOrder(val: number) {\n    this._sortOrder = val;\n  }\n\n  @Input() get multiSortMeta(): SortMeta[] {\n    return this._multiSortMeta;\n  }\n\n  set multiSortMeta(val: SortMeta[]) {\n    this._multiSortMeta = val;\n  }\n\n  @Input() get selection(): any {\n    return this._selection;\n  }\n\n  set selection(val: any) {\n    this._selection = val;\n  }\n\n  updateSelectionKeys() {\n    if (this.dataKey && this._selection) {\n      this.selectionKeys = {};\n      if (Array.isArray(this._selection)) {\n        for (let node of this._selection) {\n          this.selectionKeys[String(ObjectUtils.resolveFieldData(node.data, this.dataKey))] = 1;\n        }\n      } else {\n        this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection.data, this.dataKey))] = 1;\n      }\n    }\n  }\n\n  onPageChange(event) {\n    this.first = event.first;\n    this.rows = event.rows;\n\n    if (this.lazy) this.onLazyLoad.emit(this.createLazyLoadMetadata());\n    else this.serializePageNodes();\n\n    this.onPage.emit({\n      first: this.first,\n      rows: this.rows\n    });\n\n    this.tableService.onUIUpdate(this.value);\n\n    if (this.scrollable) {\n      this.resetScrollTop();\n    }\n  }\n\n  sort(event) {\n    let originalEvent = event.originalEvent;\n\n    if (this.sortMode === 'single') {\n      this._sortOrder = this.sortField === event.field ? this.sortOrder * -1 : this.defaultSortOrder;\n      this._sortField = event.field;\n      this.sortSingle();\n\n      if (this.resetPageOnSort && this.scrollable) {\n        this.resetScrollTop();\n      }\n    }\n    if (this.sortMode === 'multiple') {\n      let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n      let sortMeta = this.getSortMeta(event.field);\n\n      if (sortMeta) {\n        if (!metaKey) {\n          this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];\n\n          if (this.resetPageOnSort && this.scrollable) {\n            this.resetScrollTop();\n          }\n        } else {\n          sortMeta.order = sortMeta.order * -1;\n        }\n      } else {\n        if (!metaKey || !this.multiSortMeta) {\n          this._multiSortMeta = [];\n\n          if (this.resetPageOnSort && this.scrollable) {\n            this.resetScrollTop();\n          }\n        }\n        this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n      }\n\n      this.sortMultiple();\n    }\n  }\n\n  sortSingle() {\n    if (this.sortField && this.sortOrder) {\n      if (this.lazy) {\n        this.onLazyLoad.emit(this.createLazyLoadMetadata());\n      } else if (this.value) {\n        this.sortNodes(this.value);\n\n        if (this.hasFilter()) {\n          this._filter();\n        }\n      }\n\n      let sortMeta: SortMeta = {\n        field: this.sortField,\n        order: this.sortOrder\n      };\n\n      this.onSort.emit(sortMeta);\n      this.tableService.onSort(sortMeta);\n      this.updateSerializedValue();\n    }\n  }\n\n  sortNodes(nodes) {\n    if (!nodes || nodes.length === 0) {\n      return;\n    }\n\n    if (this.customSort) {\n      this.sortFunction.emit({\n        data: nodes,\n        mode: this.sortMode,\n        field: this.sortField,\n        order: this.sortOrder\n      });\n    } else {\n      nodes.sort((node1, node2) => {\n        let value1 = ObjectUtils.resolveFieldData(node1.data, this.sortField);\n        let value2 = ObjectUtils.resolveFieldData(node2.data, this.sortField);\n        let result = null;\n\n        if (value1 == null && value2 != null) result = -1;\n        else if (value1 != null && value2 == null) result = 1;\n        else if (value1 == null && value2 == null) result = 0;\n        else if (typeof value1 === 'string' && typeof value2 === 'string')\n          result = value1.localeCompare(value2, undefined, { numeric: true });\n        else result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;\n\n        return this.sortOrder * result;\n      });\n    }\n\n    for (let node of nodes) {\n      this.sortNodes(node.children);\n    }\n  }\n\n  sortMultiple() {\n    if (this.multiSortMeta) {\n      if (this.lazy) {\n        this.onLazyLoad.emit(this.createLazyLoadMetadata());\n      } else if (this.value) {\n        this.sortMultipleNodes(this.value);\n\n        if (this.hasFilter()) {\n          this._filter();\n        }\n      }\n\n      this.onSort.emit({\n        multisortmeta: this.multiSortMeta\n      });\n      this.updateSerializedValue();\n      this.tableService.onSort(this.multiSortMeta);\n    }\n  }\n\n  sortMultipleNodes(nodes) {\n    if (!nodes || nodes.length === 0) {\n      return;\n    }\n\n    if (this.customSort) {\n      this.sortFunction.emit({\n        data: this.value,\n        mode: this.sortMode,\n        multiSortMeta: this.multiSortMeta\n      });\n    } else {\n      nodes.sort((node1, node2) => {\n        return this.multisortField(node1, node2, this.multiSortMeta, 0);\n      });\n    }\n\n    for (let node of nodes) {\n      this.sortMultipleNodes(node.children);\n    }\n  }\n\n  multisortField(node1, node2, multiSortMeta, index) {\n    if (ObjectUtils.isEmpty(this.multiSortMeta) || ObjectUtils.isEmpty(multiSortMeta[index])) {\n      return 0;\n    }\n\n    let value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);\n    let value2 = ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);\n    let result = null;\n\n    if (value1 == null && value2 != null) result = -1;\n    else if (value1 != null && value2 == null) result = 1;\n    else if (value1 == null && value2 == null) result = 0;\n    if (typeof value1 == 'string' || value1 instanceof String) {\n      if (value1.localeCompare && value1 != value2) {\n        return multiSortMeta[index].order * value1.localeCompare(value2, undefined, { numeric: true });\n      }\n    } else {\n      result = value1 < value2 ? -1 : 1;\n    }\n\n    if (value1 == value2) {\n      return multiSortMeta.length - 1 > index ? this.multisortField(node1, node2, multiSortMeta, index + 1) : 0;\n    }\n\n    return multiSortMeta[index].order * result;\n  }\n\n  getSortMeta(field: string) {\n    if (this.multiSortMeta && this.multiSortMeta.length) {\n      for (let i = 0; i < this.multiSortMeta.length; i++) {\n        if (this.multiSortMeta[i].field === field) {\n          return this.multiSortMeta[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  isSorted(field: string) {\n    if (this.sortMode === 'single') {\n      return this.sortField && this.sortField === field;\n    } else if (this.sortMode === 'multiple') {\n      let sorted = false;\n      if (this.multiSortMeta) {\n        for (let i = 0; i < this.multiSortMeta.length; i++) {\n          if (this.multiSortMeta[i].field == field) {\n            sorted = true;\n            break;\n          }\n        }\n      }\n      return sorted;\n    }\n  }\n\n  createLazyLoadMetadata(): any {\n    return {\n      first: this.first,\n      rows: this.rows,\n      sortField: this.sortField,\n      sortOrder: this.sortOrder,\n      filters: this.filters,\n      globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,\n      multiSortMeta: this.multiSortMeta,\n      forceUpdate: () => this.cd.detectChanges()\n    };\n  }\n\n  onLazyItemLoad(event) {\n    this.onLazyLoad.emit({\n      ...this.createLazyLoadMetadata(),\n      ...event,\n      rows: event.last - event.first\n    });\n  }\n\n  public resetScrollTop() {\n    if (this.virtualScroll) this.scrollToVirtualIndex(0);\n    else this.scrollTo({ top: 0 });\n  }\n\n  public scrollToVirtualIndex(index: number) {\n    if (this.scrollableViewChild) {\n      this.scrollableViewChild.scrollToVirtualIndex(index);\n    }\n\n    if (this.scrollableFrozenViewChild) {\n      this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n    }\n  }\n\n  public scrollTo(options) {\n    if (this.scrollableViewChild) {\n      this.scrollableViewChild.scrollTo(options);\n    }\n\n    if (this.scrollableFrozenViewChild) {\n      this.scrollableFrozenViewChild.scrollTo(options);\n    }\n  }\n\n  isEmpty() {\n    let data = this.filteredNodes || this.value;\n    return data == null || data.length == 0;\n  }\n\n  getBlockableElement(): HTMLElement {\n    return this.el.nativeElement.children[0];\n  }\n\n  onColumnResizeBegin(event) {\n    let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n    this.lastResizerHelperX = event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft;\n    event.preventDefault();\n  }\n\n  onColumnResize(event) {\n    let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n    DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n    this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n    this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n    this.resizeHelperViewChild.nativeElement.style.left =\n      event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft + 'px';\n\n    this.resizeHelperViewChild.nativeElement.style.display = 'block';\n  }\n\n  onColumnResizeEnd(event, column) {\n    let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n    let columnWidth = column.offsetWidth;\n    let newColumnWidth = columnWidth + delta;\n    let minWidth = column.style.minWidth || 15;\n\n    if (columnWidth + delta > parseInt(minWidth)) {\n      if (this.columnResizeMode === 'fit') {\n        let nextColumn = column.nextElementSibling;\n        while (!nextColumn.offsetParent) {\n          nextColumn = nextColumn.nextElementSibling;\n        }\n\n        if (nextColumn) {\n          let nextColumnWidth = nextColumn.offsetWidth - delta;\n          let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n          if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n            if (this.scrollable) {\n              let scrollableView = this.findParentScrollableView(column);\n              let scrollableBodyTable =\n                DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') ||\n                DomHandler.findSingle(scrollableView, '.p-scroller-viewport table');\n              let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');\n              let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');\n              let resizeColumnIndex = DomHandler.index(column);\n\n              this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n              this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n              this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n            } else {\n              column.style.width = newColumnWidth + 'px';\n              if (nextColumn) {\n                nextColumn.style.width = nextColumnWidth + 'px';\n              }\n            }\n          }\n        }\n      } else if (this.columnResizeMode === 'expand') {\n        if (this.scrollable) {\n          let scrollableView = this.findParentScrollableView(column);\n          let scrollableBody =\n            DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body') ||\n            DomHandler.findSingle(scrollableView, '.p-scroller-viewport');\n          let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-header');\n          let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-footer');\n          let scrollableBodyTable =\n            DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') ||\n            DomHandler.findSingle(scrollableView, '.p-scroller-viewport table');\n          let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');\n          let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');\n          scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';\n          scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';\n          if (scrollableFooterTable) {\n            scrollableFooterTable.style.width = scrollableFooterTable.offsetWidth + delta + 'px';\n          }\n          let resizeColumnIndex = DomHandler.index(column);\n\n          const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;\n          const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;\n          const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;\n\n          let setWidth = (container, table, width, isContainerInViewport) => {\n            if (container && table) {\n              container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto';\n              table.style.width = width + 'px';\n            }\n          };\n\n          setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);\n          setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);\n          setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);\n\n          this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n          this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n          this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n        } else {\n          this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n          column.style.width = newColumnWidth + 'px';\n          let containerWidth = this.tableViewChild.nativeElement.style.width;\n          this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n        }\n      }\n\n      this.onColResize.emit({\n        element: column,\n        delta: delta\n      });\n    }\n\n    this.resizeHelperViewChild.nativeElement.style.display = 'none';\n    DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n  }\n\n  findParentScrollableView(column) {\n    if (column) {\n      let parent = column.parentElement;\n      while (parent && !DomHandler.hasClass(parent, 'p-treetable-scrollable-view')) {\n        parent = parent.parentElement;\n      }\n\n      return parent;\n    } else {\n      return null;\n    }\n  }\n\n  resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n    if (table) {\n      let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n      if (colGroup) {\n        let col = colGroup.children[resizeColumnIndex];\n        let nextCol = col.nextElementSibling;\n        col.style.width = newColumnWidth + 'px';\n\n        if (nextCol && nextColumnWidth) {\n          nextCol.style.width = nextColumnWidth + 'px';\n        }\n      } else {\n        throw 'Scrollable tables require a colgroup to support resizable columns';\n      }\n    }\n  }\n\n  onColumnDragStart(event, columnElement) {\n    this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n    this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n    this.draggedColumn = columnElement;\n    event.dataTransfer.setData('text', 'b'); // For firefox\n  }\n\n  onColumnDragEnter(event, dropHeader) {\n    if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n      event.preventDefault();\n      let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n      let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n      if (this.draggedColumn != dropHeader) {\n        let targetLeft = dropHeaderOffset.left - containerOffset.left;\n        let targetTop = containerOffset.top - dropHeaderOffset.top;\n        let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n        this.reorderIndicatorUpViewChild.nativeElement.style.top =\n          dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n        this.reorderIndicatorDownViewChild.nativeElement.style.top =\n          dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n        if (event.pageX > columnCenter) {\n          this.reorderIndicatorUpViewChild.nativeElement.style.left =\n            targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2) + 'px';\n          this.reorderIndicatorDownViewChild.nativeElement.style.left =\n            targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2) + 'px';\n          this.dropPosition = 1;\n        } else {\n          this.reorderIndicatorUpViewChild.nativeElement.style.left = targetLeft - Math.ceil(this.reorderIconWidth / 2) + 'px';\n          this.reorderIndicatorDownViewChild.nativeElement.style.left = targetLeft - Math.ceil(this.reorderIconWidth / 2) + 'px';\n          this.dropPosition = -1;\n        }\n\n        this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n        this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n      } else {\n        event.dataTransfer.dropEffect = 'none';\n      }\n    }\n  }\n\n  onColumnDragLeave(event) {\n    if (this.reorderableColumns && this.draggedColumn) {\n      event.preventDefault();\n      this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n      this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n    }\n  }\n\n  onColumnDrop(event, dropColumn) {\n    event.preventDefault();\n    if (this.draggedColumn) {\n      let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'ttreorderablecolumn');\n      let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');\n      let allowDrop = dragIndex != dropIndex;\n      if (\n        allowDrop &&\n        ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))\n      ) {\n        allowDrop = false;\n      }\n\n      if (allowDrop && dropIndex < dragIndex && this.dropPosition === 1) {\n        dropIndex = dropIndex + 1;\n      }\n\n      if (allowDrop && dropIndex > dragIndex && this.dropPosition === -1) {\n        dropIndex = dropIndex - 1;\n      }\n\n      if (allowDrop) {\n        ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n        this.onColReorder.emit({\n          dragIndex: dragIndex,\n          dropIndex: dropIndex,\n          columns: this.columns\n        });\n      }\n\n      this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n      this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n      this.draggedColumn.draggable = false;\n      this.draggedColumn = null;\n      this.dropPosition = null;\n    }\n  }\n\n  handleRowClick(event) {\n    let targetNode = (<HTMLElement>event.originalEvent.target).nodeName;\n    if (\n      targetNode == 'INPUT' ||\n      targetNode == 'BUTTON' ||\n      targetNode == 'A' ||\n      DomHandler.hasClass(event.originalEvent.target, 'p-clickable')\n    ) {\n      return;\n    }\n\n    if (this.selectionMode) {\n      this.preventSelectionSetterPropagation = true;\n      let rowNode = event.rowNode;\n      let selected = this.isSelected(rowNode.node);\n      let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n      let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;\n\n      if (metaSelection) {\n        let metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;\n\n        if (selected && metaKey) {\n          if (this.isSingleSelectionMode()) {\n            this._selection = null;\n            this.selectionKeys = {};\n            this.selectionChange.emit(null);\n          } else {\n            let selectionIndex = this.findIndexInSelection(rowNode.node);\n            this._selection = this.selection.filter((val, i) => i != selectionIndex);\n            this.selectionChange.emit(this.selection);\n            if (dataKeyValue) {\n              delete this.selectionKeys[dataKeyValue];\n            }\n          }\n\n          this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n        } else {\n          if (this.isSingleSelectionMode()) {\n            this._selection = rowNode.node;\n            this.selectionChange.emit(rowNode.node);\n            if (dataKeyValue) {\n              this.selectionKeys = {};\n              this.selectionKeys[dataKeyValue] = 1;\n            }\n          } else if (this.isMultipleSelectionMode()) {\n            if (metaKey) {\n              this._selection = this.selection || [];\n            } else {\n              this._selection = [];\n              this.selectionKeys = {};\n            }\n\n            this._selection = [...this.selection, rowNode.node];\n            this.selectionChange.emit(this.selection);\n            if (dataKeyValue) {\n              this.selectionKeys[dataKeyValue] = 1;\n            }\n          }\n\n          this.onNodeSelect.emit({\n            originalEvent: event.originalEvent,\n            node: rowNode.node,\n            type: 'row',\n            index: event.rowIndex\n          });\n        }\n      } else {\n        if (this.selectionMode === 'single') {\n          if (selected) {\n            this._selection = null;\n            this.selectionKeys = {};\n            this.selectionChange.emit(this.selection);\n            this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n          } else {\n            this._selection = rowNode.node;\n            this.selectionChange.emit(this.selection);\n            this.onNodeSelect.emit({\n              originalEvent: event.originalEvent,\n              node: rowNode.node,\n              type: 'row',\n              index: event.rowIndex\n            });\n            if (dataKeyValue) {\n              this.selectionKeys = {};\n              this.selectionKeys[dataKeyValue] = 1;\n            }\n          }\n        } else if (this.selectionMode === 'multiple') {\n          if (selected) {\n            let selectionIndex = this.findIndexInSelection(rowNode.node);\n            this._selection = this.selection.filter((val, i) => i != selectionIndex);\n            this.selectionChange.emit(this.selection);\n            this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n            if (dataKeyValue) {\n              delete this.selectionKeys[dataKeyValue];\n            }\n          } else {\n            this._selection = this.selection ? [...this.selection, rowNode.node] : [rowNode.node];\n            this.selectionChange.emit(this.selection);\n            this.onNodeSelect.emit({\n              originalEvent: event.originalEvent,\n              node: rowNode.node,\n              type: 'row',\n              index: event.rowIndex\n            });\n            if (dataKeyValue) {\n              this.selectionKeys[dataKeyValue] = 1;\n            }\n          }\n        }\n      }\n\n      this.tableService.onSelectionChange();\n    }\n\n    this.rowTouched = false;\n  }\n\n  handleRowTouchEnd(event) {\n    this.rowTouched = true;\n  }\n\n  handleRowRightClick(event) {\n    if (this.contextMenu) {\n      const node = event.rowNode.node;\n\n      if (this.contextMenuSelectionMode === 'separate') {\n        this.contextMenuSelection = node;\n        this.contextMenuSelectionChange.emit(node);\n        this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });\n        this.contextMenu.show(event.originalEvent);\n        this.tableService.onContextMenu(node);\n      } else if (this.contextMenuSelectionMode === 'joint') {\n        this.preventSelectionSetterPropagation = true;\n        let selected = this.isSelected(node);\n        let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n        if (!selected) {\n          if (this.isSingleSelectionMode()) {\n            this.selection = node;\n            this.selectionChange.emit(node);\n          } else if (this.isMultipleSelectionMode()) {\n            this.selection = [node];\n            this.selectionChange.emit(this.selection);\n          }\n\n          if (dataKeyValue) {\n            this.selectionKeys[dataKeyValue] = 1;\n          }\n        }\n\n        this.contextMenu.show(event.originalEvent);\n        this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });\n      }\n    }\n  }\n\n  toggleNodeWithCheckbox(event) {\n    this.selection = this.selection || [];\n    this.preventSelectionSetterPropagation = true;\n    let node = event.rowNode.node;\n    let selected = this.isSelected(node);\n\n    if (selected) {\n      this.propagateSelectionDown(node, false);\n      if (event.rowNode.parent) {\n        this.propagateSelectionUp(node.parent, false);\n      }\n      this.selectionChange.emit(this.selection);\n      this.onNodeUnselect.emit({ originalEvent: event, node: node });\n    } else {\n      this.propagateSelectionDown(node, true);\n      if (event.rowNode.parent) {\n        this.propagateSelectionUp(node.parent, true);\n      }\n      this.selectionChange.emit(this.selection);\n      this.onNodeSelect.emit({ originalEvent: event, node: node });\n    }\n\n    this.tableService.onSelectionChange();\n  }\n\n  toggleNodesWithCheckbox(event: Event, check: boolean) {\n    let data = this.filteredNodes || this.value;\n    this._selection = check && data ? data.slice() : [];\n    if (check) {\n      if (data && data.length) {\n        for (let node of data) {\n          this.propagateSelectionDown(node, true);\n        }\n      }\n    } else {\n      this._selection = [];\n      this.selectionKeys = {};\n    }\n\n    this.preventSelectionSetterPropagation = true;\n    this.selectionChange.emit(this._selection);\n    this.tableService.onSelectionChange();\n    this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: check });\n  }\n\n  propagateSelectionUp(node: TreeNode, select: boolean) {\n    if (node.children && node.children.length) {\n      let selectedChildCount: number = 0;\n      let childPartialSelected: boolean = false;\n      let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n      for (let child of node.children) {\n        if (this.isSelected(child)) selectedChildCount++;\n        else if (child.partialSelected) childPartialSelected = true;\n      }\n\n      if (select && selectedChildCount == node.children.length) {\n        this._selection = [...(this.selection || []), node];\n        node.partialSelected = false;\n        if (dataKeyValue) {\n          this.selectionKeys[dataKeyValue] = 1;\n        }\n      } else {\n        if (!select) {\n          let index = this.findIndexInSelection(node);\n          if (index >= 0) {\n            this._selection = this.selection.filter((val, i) => i != index);\n\n            if (dataKeyValue) {\n              delete this.selectionKeys[dataKeyValue];\n            }\n          }\n        }\n\n        if (childPartialSelected || (selectedChildCount > 0 && selectedChildCount != node.children.length)) node.partialSelected = true;\n        else node.partialSelected = false;\n      }\n    }\n\n    let parent = node.parent;\n    if (parent) {\n      this.propagateSelectionUp(parent, select);\n    }\n  }\n\n  propagateSelectionDown(node: TreeNode, select: boolean) {\n    let index = this.findIndexInSelection(node);\n    let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n    if (select && index == -1) {\n      this._selection = [...(this.selection || []), node];\n      if (dataKeyValue) {\n        this.selectionKeys[dataKeyValue] = 1;\n      }\n    } else if (!select && index > -1) {\n      this._selection = this.selection.filter((val, i) => i != index);\n      if (dataKeyValue) {\n        delete this.selectionKeys[dataKeyValue];\n      }\n    }\n\n    node.partialSelected = false;\n\n    if (node.children && node.children.length) {\n      for (let child of node.children) {\n        this.propagateSelectionDown(child, select);\n      }\n    }\n  }\n\n  isSelected(node) {\n    if (node && this.selection) {\n      if (this.dataKey) {\n        return this.selectionKeys[ObjectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;\n      } else {\n        if (this.selection instanceof Array) return this.findIndexInSelection(node) > -1;\n        else return this.equals(node, this.selection);\n      }\n    }\n\n    return false;\n  }\n\n  findIndexInSelection(node: any) {\n    let index: number = -1;\n    if (this.selection && this.selection.length) {\n      for (let i = 0; i < this.selection.length; i++) {\n        if (this.equals(node, this.selection[i])) {\n          index = i;\n          break;\n        }\n      }\n    }\n\n    return index;\n  }\n\n  isSingleSelectionMode() {\n    return this.selectionMode === 'single';\n  }\n\n  isMultipleSelectionMode() {\n    return this.selectionMode === 'multiple';\n  }\n\n  equals(node1, node2) {\n    return this.compareSelectionBy === 'equals' ? node1 === node2 : ObjectUtils.equals(node1.data, node2.data, this.dataKey);\n  }\n\n  filter(value, field, matchMode) {\n    if (this.filterTimeout) {\n      clearTimeout(this.filterTimeout);\n    }\n\n    if (!this.isFilterBlank(value)) {\n      this.filters[field] = { value: value, matchMode: matchMode };\n    } else if (this.filters[field]) {\n      delete this.filters[field];\n    }\n\n    this.filterTimeout = setTimeout(() => {\n      this._filter();\n      this.filterTimeout = null;\n    }, this.filterDelay);\n  }\n\n  filterGlobal(value, matchMode) {\n    this.filter(value, 'global', matchMode);\n  }\n\n  isFilterBlank(filter: any): boolean {\n    if (filter !== null && filter !== undefined) {\n      if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0)) return true;\n      else return false;\n    }\n    return true;\n  }\n\n  _filter() {\n    if (this.lazy) {\n      this.onLazyLoad.emit(this.createLazyLoadMetadata());\n    } else {\n      if (!this.value) {\n        return;\n      }\n\n      if (!this.hasFilter()) {\n        this.filteredNodes = null;\n        if (this.paginator) {\n          this.totalRecords = this.value ? this.value.length : 0;\n        }\n      } else {\n        let globalFilterFieldsArray;\n        if (this.filters['global']) {\n          if (!this.columns && !this.globalFilterFields)\n            throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n          else globalFilterFieldsArray = this.globalFilterFields || this.columns;\n        }\n\n        this.filteredNodes = [];\n        const isStrictMode = this.filterMode === 'strict';\n        let isValueChanged = false;\n\n        for (let node of this.value) {\n          let copyNode = { ...node };\n          let localMatch = true;\n          let globalMatch = false;\n          let paramsWithoutNode;\n\n          for (let prop in this.filters) {\n            if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n              let filterMeta = this.filters[prop];\n              let filterField = prop;\n              let filterValue = filterMeta.value;\n              let filterMatchMode = filterMeta.matchMode || 'startsWith';\n              let filterConstraint = this.filterService.filters[filterMatchMode];\n              paramsWithoutNode = { filterField, filterValue, filterConstraint, isStrictMode };\n              if (\n                (isStrictMode &&\n                  !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n                (!isStrictMode &&\n                  !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))\n              ) {\n                localMatch = false;\n              }\n\n              if (!localMatch) {\n                break;\n              }\n            }\n          }\n\n          if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n            for (let j = 0; j < globalFilterFieldsArray.length; j++) {\n              let copyNodeForGlobal = { ...copyNode };\n              let filterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];\n              let filterValue = this.filters['global'].value;\n              let filterConstraint = this.filterService.filters[this.filters['global'].matchMode];\n              paramsWithoutNode = { filterField, filterValue, filterConstraint, isStrictMode };\n\n              if (\n                (isStrictMode &&\n                  (this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) ||\n                    this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||\n                (!isStrictMode &&\n                  (this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) ||\n                    this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))\n              ) {\n                globalMatch = true;\n                copyNode = copyNodeForGlobal;\n              }\n            }\n          }\n\n          let matches = localMatch;\n          if (this.filters['global']) {\n            matches = localMatch && globalMatch;\n          }\n\n          if (matches) {\n            this.filteredNodes.push(copyNode);\n          }\n\n          isValueChanged =\n            isValueChanged ||\n            !localMatch ||\n            globalMatch ||\n            (localMatch && this.filteredNodes.length > 0) ||\n            (!globalMatch && this.filteredNodes.length === 0);\n        }\n\n        if (!isValueChanged) {\n          this.filteredNodes = null;\n        }\n\n        if (this.paginator) {\n          this.totalRecords = this.filteredNodes ? this.filteredNodes.length : this.value ? this.value.length : 0;\n        }\n      }\n    }\n\n    this.first = 0;\n\n    const filteredValue = this.filteredNodes || this.value;\n\n    this.onFilter.emit({\n      filters: this.filters,\n      filteredValue: filteredValue\n    });\n\n    this.tableService.onUIUpdate(filteredValue);\n    this.updateSerializedValue();\n\n    if (this.scrollable) {\n      this.resetScrollTop();\n    }\n  }\n\n  findFilteredNodes(node, paramsWithoutNode) {\n    if (node) {\n      let matched = false;\n      if (node.children) {\n        let childNodes = [...node.children];\n        node.children = [];\n        for (let childNode of childNodes) {\n          let copyChildNode = { ...childNode };\n          if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n            matched = true;\n            node.children.push(copyChildNode);\n          }\n        }\n      }\n\n      if (matched) {\n        return true;\n      }\n    }\n  }\n\n  isFilterMatched(node, { filterField, filterValue, filterConstraint, isStrictMode }) {\n    let matched = false;\n    let dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);\n    if (filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {\n      matched = true;\n    }\n\n    if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n      matched = this.findFilteredNodes(node, { filterField, filterValue, filterConstraint, isStrictMode }) || matched;\n    }\n\n    return matched;\n  }\n\n  isNodeLeaf(node) {\n    return node.leaf === false ? false : !(node.children && node.children.length);\n  }\n\n  hasFilter() {\n    let empty = true;\n    for (let prop in this.filters) {\n      if (this.filters.hasOwnProperty(prop)) {\n        empty = false;\n        break;\n      }\n    }\n\n    return !empty;\n  }\n\n  public reset() {\n    this._sortField = null;\n    this._sortOrder = 1;\n    this._multiSortMeta = null;\n    this.tableService.onSort(null);\n\n    this.filteredNodes = null;\n    this.filters = {};\n\n    this.first = 0;\n\n    if (this.lazy) {\n      this.onLazyLoad.emit(this.createLazyLoadMetadata());\n    } else {\n      this.totalRecords = this._value ? this._value.length : 0;\n    }\n  }\n\n  updateEditingCell(cell, data, field) {\n    this.editingCell = cell;\n    this.editingCellData = data;\n    this.editingCellField = field;\n    this.bindDocumentEditListener();\n  }\n\n  isEditingCellValid() {\n    return this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0;\n  }\n\n  bindDocumentEditListener() {\n    if (!this.documentEditListener) {\n      this.documentEditListener = (event) => {\n        if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n          DomHandler.removeClass(this.editingCell, 'p-cell-editing');\n          this.editingCell = null;\n          this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData });\n          this.editingCellField = null;\n          this.editingCellData = null;\n          this.unbindDocumentEditListener();\n        }\n\n        this.editingCellClick = false;\n      };\n\n      document.addEventListener('click', this.documentEditListener);\n    }\n  }\n\n  unbindDocumentEditListener() {\n    if (this.documentEditListener) {\n      document.removeEventListener('click', this.documentEditListener);\n      this.documentEditListener = null;\n    }\n  }\n\n  ngOnDestroy() {\n    this.unbindDocumentEditListener();\n    this.editingCell = null;\n    this.editingCellField = null;\n    this.editingCellData = null;\n    this.initialized = null;\n  }\n}\n\n@Component({\n  selector: '[pTreeTableBody]',\n  template: `\n    <ng-template\n      ngFor\n      let-serializedNode\n      let-rowIndex=\"index\"\n      [ngForOf]=\"serializedNodes || tt.serializedValue\"\n      [ngForTrackBy]=\"tt.rowTrackBy\"\n    >\n      <ng-container *ngIf=\"serializedNode.visible\">\n        <ng-container\n          *ngTemplateOutlet=\"\n            template;\n            context: {\n              $implicit: serializedNode,\n              node: serializedNode.node,\n              rowData: serializedNode.node.data,\n              columns: columns\n            }\n          \"\n        ></ng-container>\n      </ng-container>\n    </ng-template>\n    <ng-container *ngIf=\"tt.isEmpty()\">\n      <ng-container *ngTemplateOutlet=\"tt.emptyMessageTemplate; context: { $implicit: columns, frozen: frozen }\"></ng-container>\n    </ng-container>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTBody {\n  @Input('pTreeTableBody') columns: any[];\n\n  @Input('pTreeTableBodyTemplate') template: TemplateRef<any>;\n\n  @Input() frozen: boolean;\n\n  @Input() serializedNodes: any;\n\n  @Input() scrollerOptions: any;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable, public treeTableService: TreeTableService, public cd: ChangeDetectorRef) {\n    this.subscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n      if (this.tt.virtualScroll) {\n        this.cd.detectChanges();\n      }\n    });\n  }\n\n  getScrollerOption(option, options?) {\n    if (this.tt.virtualScroll) {\n      options = options || this.scrollerOptions;\n      return options ? options[option] : null;\n    }\n\n    return null;\n  }\n\n  getRowIndex(rowIndex) {\n    const getItemOptions = this.getScrollerOption('getItemOptions');\n    return getItemOptions ? getItemOptions(rowIndex).index : rowIndex;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Component({\n  selector: '[ttScrollableView]',\n  template: `\n    <div #scrollHeader class=\"p-treetable-scrollable-header\">\n      <div #scrollHeaderBox class=\"p-treetable-scrollable-header-box\">\n        <table class=\"p-treetable-scrollable-header-table\" [ngClass]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n          <ng-container\n            *ngTemplateOutlet=\"\n              frozen ? tt.frozenColGroupTemplate || tt.colGroupTemplate : tt.colGroupTemplate;\n              context: { $implicit: columns }\n            \"\n          ></ng-container>\n          <thead class=\"p-treetable-thead\">\n            <ng-container\n              *ngTemplateOutlet=\"frozen ? tt.frozenHeaderTemplate || tt.headerTemplate : tt.headerTemplate; context: { $implicit: columns }\"\n            ></ng-container>\n          </thead>\n        </table>\n      </div>\n    </div>\n\n    <p-scroller\n      *ngIf=\"tt.virtualScroll\"\n      #scroller\n      [items]=\"tt.serializedValue\"\n      styleClass=\"p-treetable-scrollable-body\"\n      [style]=\"{ height: tt.scrollHeight !== 'flex' ? tt.scrollHeight : undefined }\"\n      [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\n      [itemSize]=\"tt.virtualScrollItemSize || tt._virtualRowHeight\"\n      [lazy]=\"tt.lazy\"\n      (onLazyLoad)=\"tt.onLazyItemLoad($event)\"\n      [options]=\"tt.virtualScrollOptions\"\n    >\n      <ng-template pTemplate=\"content\" let-items let-scrollerOptions=\"options\">\n        <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\n      </ng-template>\n      <ng-container *ngIf=\"loaderTemplate\">\n        <ng-template pTemplate=\"loader\" let-scrollerOptions=\"options\">\n          <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\n        </ng-template>\n      </ng-container>\n    </p-scroller>\n    <ng-container *ngIf=\"!tt.virtualScroll\">\n      <div\n        #scrollBody\n        class=\"p-treetable-scrollable-body\"\n        [ngStyle]=\"{\n          'max-height': tt.scrollHeight !== 'flex' ? scrollHeight : undefined,\n          'overflow-y': !frozen && tt.scrollHeight ? 'scroll' : undefined\n        }\"\n      >\n        <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: serializedValue, options: {} }\"></ng-container>\n      </div>\n    </ng-container>\n\n    <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\n      <table\n        #scrollTable\n        [class]=\"tt.tableStyleClass\"\n        [ngClass]=\"scrollerOptions.contentStyleClass\"\n        [ngStyle]=\"tt.tableStyle\"\n        [style]=\"scrollerOptions.contentStyle\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"\n            frozen ? tt.frozenColGroupTemplate || tt.colGroupTemplate : tt.colGroupTemplate;\n            context: { $implicit: columns }\n          \"\n        ></ng-container>\n        <tbody\n          class=\"p-treetable-tbody\"\n          [pTreeTableBody]=\"columns\"\n          [pTreeTableBodyTemplate]=\"frozen ? tt.frozenBodyTemplate || tt.bodyTemplate : tt.bodyTemplate\"\n          [serializedNodes]=\"items\"\n          [frozen]=\"frozen\"\n        ></tbody>\n      </table>\n      <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n    </ng-template>\n\n    <div #scrollFooter *ngIf=\"tt.footerTemplate\" class=\"p-treetable-scrollable-footer\">\n      <div #scrollFooterBox class=\"p-treetable-scrollable-footer-box\">\n        <table class=\"p-treetable-scrollable-footer-table\" [ngClass]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n          <ng-container\n            *ngTemplateOutlet=\"\n              frozen ? tt.frozenColGroupTemplate || tt.colGroupTemplate : tt.colGroupTemplate;\n              context: { $implicit: columns }\n            \"\n          ></ng-container>\n          <tfoot class=\"p-treetable-tfoot\">\n            <ng-container\n              *ngTemplateOutlet=\"frozen ? tt.frozenFooterTemplate || tt.footerTemplate : tt.footerTemplate; context: { $implicit: columns }\"\n            ></ng-container>\n          </tfoot>\n        </table>\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTScrollableView implements AfterViewInit, OnDestroy {\n  @Input('ttScrollableView') columns: any[];\n\n  @Input() frozen: boolean;\n\n  @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n  @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n  @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n  @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n  @ViewChild('loadingTable') scrollLoadingTableViewChild: ElementRef;\n\n  @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n  @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n  @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n  @ViewChild('scroller') scroller: Scroller;\n\n  headerScrollListener;\n\n  bodyScrollListener;\n\n  footerScrollListener;\n\n  frozenSiblingBody: Element;\n\n  totalRecordsSubscription: Subscription;\n\n  _scrollHeight: string;\n\n  preventBodyScrollPropagation: boolean;\n\n  @Input() get scrollHeight(): string {\n    return this._scrollHeight;\n  }\n  set scrollHeight(val: string) {\n    this._scrollHeight = val;\n    if (val != null && (val.includes('%') || val.includes('calc'))) {\n      console.log(\n        'Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.'\n      );\n    }\n  }\n\n  constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n  ngAfterViewInit() {\n    if (!this.frozen) {\n      if (this.tt.frozenColumns || this.tt.frozenBodyTemplate) {\n        DomHandler.addClass(this.el.nativeElement, 'p-treetable-unfrozen-view');\n      }\n\n      let frozenView = this.el.nativeElement.previousElementSibling;\n      if (frozenView) {\n        if (this.tt.virtualScroll) this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-scroller-viewport');\n        else this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-treetable-scrollable-body');\n      }\n\n      let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n      this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n      if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n        this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n      }\n    } else {\n      if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n        this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n      }\n    }\n\n    this.bindEvents();\n  }\n\n  bindEvents() {\n    this.zone.runOutsideAngular(() => {\n      if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n        this.headerScrollListener = this.onHeaderScroll.bind(this);\n        this.scrollHeaderBoxViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n      }\n\n      if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n        this.footerScrollListener = this.onFooterScroll.bind(this);\n        this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n      }\n\n      if (!this.frozen) {\n        this.bodyScrollListener = this.onBodyScroll.bind(this);\n\n        if (this.tt.virtualScroll) this.scroller.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n        else this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n      }\n    });\n  }\n\n  unbindEvents() {\n    if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n      this.scrollHeaderBoxViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n    }\n\n    if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n      this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n    }\n\n    if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n      this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n    }\n\n    if (this.scroller && this.scroller.getElementRef()) {\n      this.scroller.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n    }\n  }\n\n  onHeaderScroll() {\n    const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;\n\n    this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n    if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n      this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;\n    }\n\n    this.preventBodyScrollPropagation = true;\n  }\n\n  onFooterScroll() {\n    const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\n    this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n    if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n      this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;\n    }\n\n    this.preventBodyScrollPropagation = true;\n  }\n\n  onBodyScroll(event) {\n    if (this.preventBodyScrollPropagation) {\n      this.preventBodyScrollPropagation = false;\n      return;\n    }\n\n    if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n      this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n    }\n\n    if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n      this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n    }\n\n    if (this.frozenSiblingBody) {\n      this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n    }\n  }\n\n  scrollToVirtualIndex(index: number): void {\n    if (this.scroller) {\n      this.scroller.scrollToIndex(index);\n    }\n  }\n\n  scrollTo(options): void {\n    if (this.scroller) {\n      this.scroller.scrollTo(options);\n    } else {\n      if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n        this.scrollBodyViewChild.nativeElement.scrollTo(options);\n      } else {\n        this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n        this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.unbindEvents();\n\n    this.frozenSiblingBody = null;\n  }\n}\n\n@Directive({\n  selector: '[ttSortableColumn]',\n  host: {\n    class: 'p-element',\n    '[class.p-sortable-column]': 'isEnabled()',\n    '[class.p-highlight]': 'sorted',\n    '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n    '[attr.role]': '\"columnheader\"'\n  }\n})\nexport class TTSortableColumn implements OnInit, OnDestroy {\n  @Input('ttSortableColumn') field: string;\n\n  @Input() ttSortableColumnDisabled: boolean;\n\n  sorted: boolean;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable) {\n    if (this.isEnabled()) {\n      this.subscription = this.tt.tableService.sortSource$.subscribe((sortMeta) => {\n        this.updateSortState();\n      });\n    }\n  }\n\n  ngOnInit() {\n    if (this.isEnabled()) {\n      this.updateSortState();\n    }\n  }\n\n  updateSortState() {\n    this.sorted = this.tt.isSorted(this.field);\n  }\n\n  @HostListener('click', ['$event'])\n  onClick(event: MouseEvent) {\n    if (this.isEnabled()) {\n      this.updateSortState();\n      this.tt.sort({\n        originalEvent: event,\n        field: this.field\n      });\n\n      DomHandler.clearSelection();\n    }\n  }\n\n  @HostListener('keydown.enter', ['$event'])\n  onEnterKey(event: MouseEvent) {\n    this.onClick(event);\n  }\n\n  isEnabled() {\n    return this.ttSortableColumnDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Component({\n  selector: 'p-treeTableSortIcon',\n  template: `\n    <i\n      class=\"p-sortable-column-icon pi pi-fw\"\n      [ngClass]=\"{\n        'pi-sort-amount-up-alt': sortOrder === 1,\n        'pi-sort-amount-down': sortOrder === -1,\n        'pi-sort-alt': sortOrder === 0\n      }\"\n    ></i>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTSortIcon implements OnInit, OnDestroy {\n  @Input() field: string;\n\n  @Input() ariaLabelDesc: string;\n\n  @Input() ariaLabelAsc: string;\n\n  subscription: Subscription;\n\n  sortOrder: number;\n\n  constructor(public tt: TreeTable, public cd: ChangeDetectorRef) {\n    this.subscription = this.tt.tableService.sortSource$.subscribe((sortMeta) => {\n      this.updateSortState();\n      this.cd.markForCheck();\n    });\n  }\n\n  ngOnInit() {\n    this.updateSortState();\n  }\n\n  onClick(event) {\n    event.preventDefault();\n  }\n\n  updateSortState() {\n    if (this.tt.sortMode === 'single') {\n      this.sortOrder = this.tt.isSorted(this.field) ? this.tt.sortOrder : 0;\n    } else if (this.tt.sortMode === 'multiple') {\n      let sortMeta = this.tt.getSortMeta(this.field);\n      this.sortOrder = sortMeta ? sortMeta.order : 0;\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Directive({\n  selector: '[ttResizableColumn]',\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTResizableColumn implements AfterViewInit, OnDestroy {\n  @Input() ttResizableColumnDisabled: boolean;\n\n  resizer: HTMLSpanElement;\n\n  resizerMouseDownListener: any;\n\n  documentMouseMoveListener: any;\n\n  documentMouseUpListener: any;\n\n  constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n  ngAfterViewInit() {\n    if (this.isEnabled()) {\n      DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');\n      this.resizer = document.createElement('span');\n      this.resizer.className = 'p-column-resizer';\n      this.el.nativeElement.appendChild(this.resizer);\n\n      this.zone.runOutsideAngular(() => {\n        this.resizerMouseDownListener = this.onMouseDown.bind(this);\n        this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n      });\n    }\n  }\n\n  bindDocumentEvents() {\n    this.zone.runOutsideAngular(() => {\n      this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n      document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n      this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n      document.addEventListener('mouseup', this.documentMouseUpListener);\n    });\n  }\n\n  unbindDocumentEvents() {\n    if (this.documentMouseMoveListener) {\n      document.removeEventListener('mousemove', this.documentMouseMoveListener);\n      this.documentMouseMoveListener = null;\n    }\n\n    if (this.documentMouseUpListener) {\n      document.removeEventListener('mouseup', this.documentMouseUpListener);\n      this.documentMouseUpListener = null;\n    }\n  }\n\n  onMouseDown(event: Event) {\n    this.tt.onColumnResizeBegin(event);\n    this.bindDocumentEvents();\n  }\n\n  onDocumentMouseMove(event: Event) {\n    this.tt.onColumnResize(event);\n  }\n\n  onDocumentMouseUp(event: Event) {\n    this.tt.onColumnResizeEnd(event, this.el.nativeElement);\n    this.unbindDocumentEvents();\n  }\n\n  isEnabled() {\n    return this.ttResizableColumnDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    if (this.resizerMouseDownListener) {\n      this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n    }\n\n    this.unbindDocumentEvents();\n  }\n}\n\n@Directive({\n  selector: '[ttReorderableColumn]',\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTReorderableColumn implements AfterViewInit, OnDestroy {\n  @Input() ttReorderableColumnDisabled: boolean;\n\n  dragStartListener: any;\n\n  dragOverListener: any;\n\n  dragEnterListener: any;\n\n  dragLeaveListener: any;\n\n  mouseDownListener: any;\n\n  constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n  ngAfterViewInit() {\n    if (this.isEnabled()) {\n      this.bindEvents();\n    }\n  }\n\n  bindEvents() {\n    this.zone.runOutsideAngular(() => {\n      this.mouseDownListener = this.onMouseDown.bind(this);\n      this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n      this.dragStartListener = this.onDragStart.bind(this);\n      this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n      this.dragOverListener = this.onDragEnter.bind(this);\n      this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n      this.dragEnterListener = this.onDragEnter.bind(this);\n      this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n      this.dragLeaveListener = this.onDragLeave.bind(this);\n      this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n    });\n  }\n\n  unbindEvents() {\n    if (this.mouseDownListener) {\n      document.removeEventListener('mousedown', this.mouseDownListener);\n      this.mouseDownListener = null;\n    }\n\n    if (this.dragOverListener) {\n      document.removeEventListener('dragover', this.dragOverListener);\n      this.dragOverListener = null;\n    }\n\n    if (this.dragEnterListener) {\n      document.removeEventListener('dragenter', this.dragEnterListener);\n      this.dragEnterListener = null;\n    }\n\n    if (this.dragEnterListener) {\n      document.removeEventListener('dragenter', this.dragEnterListener);\n      this.dragEnterListener = null;\n    }\n\n    if (this.dragLeaveListener) {\n      document.removeEventListener('dragleave', this.dragLeaveListener);\n      this.dragLeaveListener = null;\n    }\n  }\n\n  onMouseDown(event) {\n    if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))\n      this.el.nativeElement.draggable = false;\n    else this.el.nativeElement.draggable = true;\n  }\n\n  onDragStart(event) {\n    this.tt.onColumnDragStart(event, this.el.nativeElement);\n  }\n\n  onDragOver(event) {\n    event.preventDefault();\n  }\n\n  onDragEnter(event) {\n    this.tt.onColumnDragEnter(event, this.el.nativeElement);\n  }\n\n  onDragLeave(event) {\n    this.tt.onColumnDragLeave(event);\n  }\n\n  @HostListener('drop', ['$event'])\n  onDrop(event) {\n    if (this.isEnabled()) {\n      this.tt.onColumnDrop(event, this.el.nativeElement);\n    }\n  }\n\n  isEnabled() {\n    return this.ttReorderableColumnDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    this.unbindEvents();\n  }\n}\n\n@Directive({\n  selector: '[ttSelectableRow]',\n  host: {\n    class: 'p-element',\n    '[class.p-highlight]': 'selected'\n  }\n})\nexport class TTSelectableRow implements OnInit, OnDestroy {\n  @Input('ttSelectableRow') rowNode: any;\n\n  @Input() ttSelectableRowDisabled: boolean;\n\n  selected: boolean;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable, public tableService: TreeTableService) {\n    if (this.isEnabled()) {\n      this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n        this.selected = this.tt.isSelected(this.rowNode.node);\n      });\n    }\n  }\n\n  ngOnInit() {\n    if (this.isEnabled()) {\n      this.selected = this.tt.isSelected(this.rowNode.node);\n    }\n  }\n\n  @HostListener('click', ['$event'])\n  onClick(event: Event) {\n    if (this.isEnabled()) {\n      this.tt.handleRowClick({\n        originalEvent: event,\n        rowNode: this.rowNode\n      });\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  onEnterKey(event: KeyboardEvent) {\n    if (event.which === 13) {\n      this.onClick(event);\n    }\n  }\n\n  @HostListener('touchend', ['$event'])\n  onTouchEnd(event: Event) {\n    if (this.isEnabled()) {\n      this.tt.handleRowTouchEnd(event);\n    }\n  }\n\n  isEnabled() {\n    return this.ttSelectableRowDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Directive({\n  selector: '[ttSelectableRowDblClick]',\n  host: {\n    class: 'p-element',\n    '[class.p-highlight]': 'selected'\n  }\n})\nexport class TTSelectableRowDblClick implements OnInit, OnDestroy {\n  @Input('ttSelectableRowDblClick') rowNode: any;\n\n  @Input() ttSelectableRowDisabled: boolean;\n\n  selected: boolean;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable, public tableService: TreeTableService) {\n    if (this.isEnabled()) {\n      this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n        this.selected = this.tt.isSelected(this.rowNode.node);\n      });\n    }\n  }\n\n  ngOnInit() {\n    if (this.isEnabled()) {\n      this.selected = this.tt.isSelected(this.rowNode.node);\n    }\n  }\n\n  @HostListener('dblclick', ['$event'])\n  onClick(event: Event) {\n    if (this.isEnabled()) {\n      this.tt.handleRowClick({\n        originalEvent: event,\n        rowNode: this.rowNode\n      });\n    }\n  }\n\n  isEnabled() {\n    return this.ttSelectableRowDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Directive({\n  selector: '[ttContextMenuRow]',\n  host: {\n    class: 'p-element',\n    '[class.p-highlight-contextmenu]': 'selected',\n    '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n  }\n})\nexport class TTContextMenuRow {\n  @Input('ttContextMenuRow') rowNode: any;\n\n  @Input() ttContextMenuRowDisabled: boolean;\n\n  selected: boolean;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable, public tableService: TreeTableService, private el: ElementRef) {\n    if (this.isEnabled()) {\n      this.subscription = this.tt.tableService.contextMenuSource$.subscribe((node) => {\n        this.selected = this.tt.equals(this.rowNode.node, node);\n      });\n    }\n  }\n\n  @HostListener('contextmenu', ['$event'])\n  onContextMenu(event: Event) {\n    if (this.isEnabled()) {\n      this.tt.handleRowRightClick({\n        originalEvent: event,\n        rowNode: this.rowNode\n      });\n\n      this.el.nativeElement.focus();\n\n      event.preventDefault();\n    }\n  }\n\n  isEnabled() {\n    return this.ttContextMenuRowDisabled !== true;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Component({\n  selector: 'p-treeTableCheckbox',\n  template: `\n    <div class=\"p-checkbox p-component\" [ngClass]=\"{ 'p-checkbox-focused': focused }\" (click)=\"onClick($event)\">\n      <div class=\"p-hidden-accessible\">\n        <input type=\"checkbox\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\n      </div>\n      <div\n        #box\n        [ngClass]=\"{\n          'p-checkbox-box': true,\n          'p-highlight': checked,\n          'p-focus': focused,\n          'p-indeterminate': rowNode.node.partialSelected,\n          'p-disabled': disabled\n        }\"\n        role=\"checkbox\"\n        [attr.aria-checked]=\"checked\"\n      >\n        <span class=\"p-checkbox-icon pi\" [ngClass]=\"{ 'pi-check': checked, 'pi-minus': rowNode.node.partialSelected }\"></span>\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTCheckbox {\n  @Input() disabled: boolean;\n\n  @Input('value') rowNode: any;\n\n  checked: boolean;\n\n  focused: boolean;\n\n  subscription: Subscription;\n\n  constructor(public tt: TreeTable, public tableService: TreeTableService, public cd: ChangeDetectorRef) {\n    this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n      this.checked = this.tt.isSelected(this.rowNode.node);\n      this.cd.markForCheck();\n    });\n  }\n\n  ngOnInit() {\n    this.checked = this.tt.isSelected(this.rowNode.node);\n  }\n\n  onClick(event: Event) {\n    if (!this.disabled) {\n      this.tt.toggleNodeWithCheckbox({\n        originalEvent: event,\n        rowNode: this.rowNode\n      });\n    }\n    DomHandler.clearSelection();\n  }\n\n  onFocus() {\n    this.focused = true;\n  }\n\n  onBlur() {\n    this.focused = false;\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n\n@Component({\n  selector: 'p-treeTableHeaderCheckbox',\n  template: `\n    <div class=\"p-checkbox p-component\" [ngClass]=\"{ 'p-checkbox-focused': focused }\" (click)=\"onClick($event, cb.checked)\">\n      <div class=\"p-hidden-accessible\">\n        <input\n          #cb\n          type=\"checkbox\"\n          [checked]=\"checked\"\n          (focus)=\"onFocus()\"\n          (blur)=\"onBlur()\"\n          [disabled]=\"!tt.value || tt.value.length === 0\"\n        />\n      </div>\n      <div\n        #box\n        [ngClass]=\"{\n          'p-checkbox-box': true,\n          'p-highlight': checked,\n          'p-focus': focused,\n          'p-disabled': !tt.value || tt.value.length === 0\n        }\"\n        role=\"checkbox\"\n        [attr.aria-checked]=\"checked\"\n      >\n        <span class=\"p-checkbox-icon\" [ngClass]=\"{ 'pi pi-check': checked }\"></span>\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTHeaderCheckbox {\n  @ViewChild('box') boxViewChild: ElementRef;\n\n  checked: boolean;\n\n  focused: boolean;\n\n  disabled: boolean;\n\n  selectionChangeSubscription: Subscription;\n\n  valueChangeSubscription: Subscription;\n\n  constructor(public tt: TreeTable, public tableService: TreeTableService, private cd: ChangeDetectorRef) {\n    this.valueChangeSubscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n      this.checked = this.updateCheckedState();\n    });\n\n    this.selectionChangeSubscription = this.tt.tableService.selectionSource$.subscribe(() => {\n      this.checked = this.updateCheckedState();\n    });\n  }\n\n  ngOnInit() {\n    this.checked = this.updateCheckedState();\n  }\n\n  onClick(event: Event, checked) {\n    if (this.tt.value && this.tt.value.length > 0) {\n      this.tt.toggleNodesWithCheckbox(event, !checked);\n    }\n\n    DomHandler.clearSelection();\n  }\n\n  onFocus() {\n    this.focused = true;\n  }\n\n  onBlur() {\n    this.focused = false;\n  }\n\n  ngOnDestroy() {\n    if (this.selectionChangeSubscription) {\n      this.selectionChangeSubscription.unsubscribe();\n    }\n\n    if (this.valueChangeSubscription) {\n      this.valueChangeSubscription.unsubscribe();\n    }\n  }\n\n  updateCheckedState() {\n    this.cd.markForCheck();\n    let checked: boolean;\n    const data = this.tt.filteredNodes || this.tt.value;\n\n    if (data) {\n      for (let node of data) {\n        if (this.tt.isSelected(node)) {\n          checked = true;\n        } else {\n          checked = false;\n          break;\n        }\n      }\n    } else {\n      checked = false;\n    }\n\n    return checked;\n  }\n}\n\n@Directive({\n  selector: '[ttEditableColumn]',\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TTEditableColumn implements AfterViewInit {\n  @Input('ttEditableColumn') data: any;\n\n  @Input('ttEditableColumnField') field: any;\n\n  @Input() ttEditableColumnDisabled: boolean;\n\n  constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n  ngAfterViewInit() {\n    if (this.isEnabled()) {\n      DomHandler.addClass(this.el.nativeElement, 'p-editable-column');\n    }\n  }\n\n  @HostListener('click', ['$event'])\n  onClick(event: MouseEvent) {\n    if (this.isEnabled()) {\n      this.tt.editingCellClick = true;\n\n      if (this.tt.editingCell) {\n        if (this.tt.editingCell !== this.el.nativeElement) {\n          if (!this.tt.isEditingCellValid()) {\n            return;\n          }\n\n          DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n          this.openCell();\n        }\n      } else {\n        this.openCell();\n      }\n    }\n  }\n\n  openCell() {\n    this.tt.updateEditingCell(this.el.nativeElement, this.data, this.field);\n    DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');\n    this.tt.onEditInit.emit({ field: this.field, data: this.data });\n    this.tt.editingCellClick = true;\n    this.zone.runOutsideAngular(() => {\n      setTimeout(() => {\n        let focusable = DomHandler.findSingle(this.el.nativeElement, 'input, textarea');\n        if (focusable) {\n          focusable.focus();\n        }\n      }, 50);\n    });\n  }\n\n  closeEditingCell() {\n    DomHandler.removeClass(this.tt.editingCell, 'p-checkbox-icon');\n    this.tt.editingCell = null;\n    this.tt.unbindDocumentEditListener();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    if (this.isEnabled()) {\n      //enter\n      if (event.keyCode == 13) {\n        if (this.tt.isEditingCellValid()) {\n          DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n          this.closeEditingCell();\n          this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n        }\n\n        event.preventDefault();\n      }\n\n      //escape\n      else if (event.keyCode == 27) {\n        if (this.tt.isEditingCellValid()) {\n          DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n          this.closeEditingCell();\n          this.tt.onEditCancel.emit({ field: this.field, data: this.data });\n        }\n\n        event.preventDefault();\n      }\n\n      //tab\n      else if (event.keyCode == 9) {\n        this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n\n        if (event.shiftKey) this.moveToPreviousCell(event);\n        else this.moveToNextCell(event);\n      }\n    }\n  }\n\n  findCell(element) {\n    if (element) {\n      let cell = element;\n      while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\n        cell = cell.parentElement;\n      }\n\n      return cell;\n    } else {\n      return null;\n    }\n  }\n\n  moveToPreviousCell(event: KeyboardEvent) {\n    let currentCell = this.findCell(event.target);\n    let row = currentCell.parentElement;\n    let targetCell = this.findPreviousEditableColumn(currentCell);\n\n    if (targetCell) {\n      DomHandler.invokeElementMethod(targetCell, 'click');\n      event.preventDefault();\n    }\n  }\n\n  moveToNextCell(event: KeyboardEvent) {\n    let currentCell = this.findCell(event.target);\n    let row = currentCell.parentElement;\n    let targetCell = this.findNextEditableColumn(currentCell);\n\n    if (targetCell) {\n      DomHandler.invokeElementMethod(targetCell, 'click');\n      event.preventDefault();\n    }\n  }\n\n  findPreviousEditableColumn(cell: Element) {\n    let prevCell = cell.previousElementSibling;\n\n    if (!prevCell) {\n      let previousRow = cell.parentElement ? cell.parentElement.previousElementSibling : null;\n      if (previousRow) {\n        prevCell = previousRow.lastElementChild;\n      }\n    }\n\n    if (prevCell) {\n      if (DomHandler.hasClass(prevCell, 'p-editable-column')) return prevCell;\n      else return this.findPreviousEditableColumn(prevCell);\n    } else {\n      return null;\n    }\n  }\n\n  findNextEditableColumn(cell: Element) {\n    let nextCell = cell.nextElementSibling;\n\n    if (!nextCell) {\n      let nextRow = cell.parentElement ? cell.parentElement.nextElementSibling : null;\n      if (nextRow) {\n        nextCell = nextRow.firstElementChild;\n      }\n    }\n\n    if (nextCell) {\n      if (DomHandler.hasClass(nextCell, 'p-editable-column')) return nextCell;\n      else return this.findNextEditableColumn(nextCell);\n    } else {\n      return null;\n    }\n  }\n\n  isEnabled() {\n    return this.ttEditableColumnDisabled !== true;\n  }\n}\n\n@Component({\n  selector: 'p-treeTableCellEditor',\n  template: `\n    <ng-container *ngIf=\"tt.editingCell === editableColumn.el.nativeElement\">\n      <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"!tt.editingCell || tt.editingCell !== editableColumn.el.nativeElement\">\n      <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n    </ng-container>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TreeTableCellEditor implements AfterContentInit {\n  @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n  inputTemplate: TemplateRef<any>;\n\n  outputTemplate: TemplateRef<any>;\n\n  constructor(public tt: TreeTable, public editableColumn: TTEditableColumn) {}\n\n  ngAfterContentInit() {\n    this.templates.forEach((item) => {\n      switch (item.getType()) {\n        case 'input':\n          this.inputTemplate = item.template;\n          break;\n\n        case 'output':\n          this.outputTemplate = item.template;\n          break;\n      }\n    });\n  }\n}\n\n@Directive({\n  selector: '[ttRow]',\n  host: {\n    class: 'p-element',\n    '[attr.tabindex]': '\"0\"'\n  }\n})\nexport class TTRow {\n  @Input('ttRow') rowNode: any;\n\n  constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    switch (event.which) {\n      //down arrow\n      case 40:\n        let nextRow = this.el.nativeElement.nextElementSibling;\n        if (nextRow) {\n          nextRow.focus();\n        }\n\n        event.preventDefault();\n        break;\n\n      //down arrow\n      case 38:\n        let prevRow = this.el.nativeElement.previousElementSibling;\n        if (prevRow) {\n          prevRow.focus();\n        }\n\n        event.preventDefault();\n        break;\n\n      //left arrow\n      case 37:\n        if (this.rowNode.node.expanded) {\n          this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n          this.rowNode.node.expanded = false;\n\n          this.tt.onNodeCollapse.emit({\n            originalEvent: event,\n            node: this.rowNode.node\n          });\n\n          this.tt.updateSerializedValue();\n          this.tt.tableService.onUIUpdate(this.tt.value);\n          this.restoreFocus();\n        }\n        break;\n\n      //right arrow\n      case 39:\n        if (!this.rowNode.node.expanded) {\n          this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n          this.rowNode.node.expanded = true;\n\n          this.tt.onNodeExpand.emit({\n            originalEvent: event,\n            node: this.rowNode.node\n          });\n\n          this.tt.updateSerializedValue();\n          this.tt.tableService.onUIUpdate(this.tt.value);\n          this.restoreFocus();\n        }\n        break;\n    }\n  }\n\n  restoreFocus() {\n    this.zone.runOutsideAngular(() => {\n      setTimeout(() => {\n        let row = DomHandler.findSingle(this.tt.containerViewChild.nativeElement, '.p-treetable-tbody').children[this.tt.toggleRowIndex];\n        if (row) {\n          row.focus();\n        }\n      }, 25);\n    });\n  }\n}\n\n@Component({\n  selector: 'p-treeTableToggler',\n  template: `\n    <button\n      type=\"button\"\n      class=\"p-treetable-toggler p-link\"\n      (click)=\"onClick($event)\"\n      tabindex=\"-1\"\n      pRipple\n      [style.visibility]=\"rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'\"\n      [style.marginLeft]=\"rowNode.level * 16 + 'px'\"\n    >\n      <i [ngClass]=\"rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'\"></i>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class TreeTableToggler {\n  @Input() rowNode: any;\n\n  constructor(public tt: TreeTable) {}\n\n  onClick(event: Event) {\n    this.rowNode.node.expanded = !this.rowNode.node.expanded;\n\n    if (this.rowNode.node.expanded) {\n      this.tt.onNodeExpand.emit({\n        originalEvent: event,\n        node: this.rowNode.node\n      });\n    } else {\n      this.tt.onNodeCollapse.emit({\n        originalEvent: event,\n        node: this.rowNode.node\n      });\n    }\n\n    this.tt.updateSerializedValue();\n    this.tt.tableService.onUIUpdate(this.tt.value);\n\n    event.preventDefault();\n  }\n}\n\n@NgModule({\n  imports: [CommonModule, PaginatorModule, RippleModule, ScrollerModule, SharedModule],\n  exports: [\n    TreeTable,\n    TreeTableToggler,\n    TTSortableColumn,\n    TTSortIcon,\n    TTResizableColumn,\n    TTRow,\n    TTReorderableColumn,\n    TTSelectableRow,\n    TTSelectableRowDblClick,\n    TTContextMenuRow,\n    TTCheckbox,\n    TTHeaderCheckbox,\n    TTEditableColumn,\n    TreeTableCellEditor,\n    ScrollerModule,\n    SharedModule\n  ],\n  declarations: [\n    TreeTable,\n    TreeTableToggler,\n    TTScrollableView,\n    TTBody,\n    TTSortableColumn,\n    TTSortIcon,\n    TTResizableColumn,\n    TTRow,\n    TTReorderableColumn,\n    TTSelectableRow,\n    TTSelectableRowDblClick,\n    TTContextMenuRow,\n    TTCheckbox,\n    TTHeaderCheckbox,\n    TTEditableColumn,\n    TreeTableCellEditor\n  ]\n})\nexport class TreeTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAmCa,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAyB,CAAC;AAClD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAO,CAAC;AACvC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAO,CAAC;AACpC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAO,CAAC;QAEhD,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACvD,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC3D,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrD,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KAqB9D;AAnBC,IAAA,MAAM,CAAC,QAA+B,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChC;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;AAED,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;;6GA/BU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAhB,gBAAgB,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;MAuJE,SAAS,CAAA;IAgUpB,WACS,CAAA,EAAc,EACd,EAAqB,EACrB,IAAY,EACZ,YAA8B,EAC9B,aAA4B,EAAA;AAJ5B,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AACd,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AACrB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AACZ,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AAC9B,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAxT5B,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;AAEtB,QAAA,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;AAM/B,QAAA,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AAElB,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;AAItB,QAAA,IAAmB,CAAA,mBAAA,GAAY,IAAI,CAAC;AAEpC,QAAA,IAAiB,CAAA,iBAAA,GAAW,QAAQ,CAAC;AAIrC,QAAA,IAAyB,CAAA,yBAAA,GAAW,+BAA+B,CAAC;AAMpE,QAAA,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;AAElC,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;AAE9B,QAAA,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;AAE7B,QAAA,IAAQ,CAAA,QAAA,GAAW,QAAQ,CAAC;AAE5B,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;AAM/B,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;AAIxD,QAAA,IAAA,CAAA,0BAA0B,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAwB,CAAA,wBAAA,GAAW,UAAU,CAAC;AAM9C,QAAA,IAAkB,CAAA,kBAAA,GAAW,YAAY,CAAC;AAM1C,QAAA,IAAW,CAAA,WAAA,GAAW,eAAe,CAAC;AAEtC,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAY3B,QAAA,IAAkB,CAAA,kBAAA,GAAW,GAAG,CAAC;AAQjC,QAAA,IAAgB,CAAA,gBAAA,GAAW,KAAK,CAAC;QAMjC,IAAU,CAAA,UAAA,GAAa,CAAC,KAAa,EAAE,IAAS,KAAK,IAAI,CAAC;AAE1D,QAAA,IAAO,CAAA,OAAA,GAAoC,EAAE,CAAC;AAI9C,QAAA,IAAW,CAAA,WAAA,GAAW,GAAG,CAAC;AAE1B,QAAA,IAAU,CAAA,UAAA,GAAW,SAAS,CAAC;AAI9B,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEvD,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEnD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEvD,QAAA,IAAA,CAAA,mBAAmB,GAAsB,IAAI,YAAY,EAAE,CAAC;AAE5D,QAAA,IAAA,CAAA,sBAAsB,GAAsB,IAAI,YAAY,EAAE,CAAC;AAE/D,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEnD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEvD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;;AAmB/D,QAAA,IAAiB,CAAA,iBAAA,GAAW,EAAE,CAAC;AAS/B,QAAA,IAAM,CAAA,MAAA,GAAe,EAAE,CAAC;AAIxB,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AAM1B,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AAkDvB,QAAA,IAAa,CAAA,aAAA,GAAQ,EAAE,CAAC;KAiGpB;AArKJ,IAAA,IAAa,gBAAgB,GAAA;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IACD,IAAI,gBAAgB,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;KAC1G;IAgFD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACrD,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE;AACpB,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACrC,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AAER,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAClC,MAAM;AAER,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AAER,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACrC,MAAM;AAER,gBAAA,KAAK,UAAU;AACb,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;AAER,gBAAA,KAAK,cAAc;AACjB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;AAER,gBAAA,KAAK,eAAe;AAClB,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC3C,MAAM;AAER,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC5C,MAAM;AAER,gBAAA,KAAK,uBAAuB;AAC1B,oBAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACnD,MAAM;AAER,gBAAA,KAAK,cAAc;AACjB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;AAER,gBAAA,KAAK,YAAY;AACf,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;AAER,gBAAA,KAAK,cAAc;AACjB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;AAER,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC5C,MAAM;AACT,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAUD,IAAA,WAAW,CAAC,YAA2B,EAAA;QACrC,IAAI,YAAY,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;AAE9C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEzD,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,UAAU,EAAE,CAAC;qBAC9D,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa;oBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;qBAC3E,IAAI,IAAI,CAAC,SAAS,EAAE;;oBAEvB,IAAI,CAAC,OAAO,EAAE,CAAC;AAClB,aAAA;YAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,SAAA;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;;YAGtD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;;YAGtD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,YAAY,CAAC,aAAa,EAAE;YAC9B,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC;AAC9D,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;AACF,SAAA;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;AAEtD,YAAA,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;AACvC,aAAA;AACD,YAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC;AAChD,SAAA;KACF;AAED,IAAA,IAAa,KAAK,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,GAAU,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KACnB;IAED,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;KAC3E;AAED,IAAA,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAA;AAC1C,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACzB,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,gBAAA,MAAM,OAAO,GAAG;AACd,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACtD,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnC,gBAAA,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACtE,iBAAA;AACF,aAAA;AACF,SAAA;KACF;IAED,kBAAkB,GAAA;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAEzC,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,OAAO,EAAE,IAAI;AACd,qBAAA,CAAC,CAAC;AAEH,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,IAAa,YAAY,GAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IACD,IAAI,YAAY,CAAC,GAAW,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC5D;AAED,IAAA,IAAa,SAAS,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IAAI,SAAS,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACvB;AAED,IAAA,IAAa,SAAS,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IACD,IAAI,SAAS,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACvB;AAED,IAAA,IAAa,aAAa,GAAA;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAI,aAAa,CAAC,GAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;KAC3B;AAED,IAAA,IAAa,SAAS,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IAAI,SAAS,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACvB;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAClC,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;oBAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvF,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClG,aAAA;AACF,SAAA;KACF;AAED,IAAA,YAAY,CAAC,KAAK,EAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;;YAC9D,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;AAED,IAAA,IAAI,CAAC,KAAK,EAAA;AACR,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC/F,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;AAElB,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;YAChC,IAAI,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;YAC7D,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7C,YAAA,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,OAAO,EAAE;oBACZ,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE3E,oBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,EAAE;wBAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACtC,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACnC,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAEzB,oBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,EAAE;wBAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC/E,aAAA;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACrD,aAAA;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE3B,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,QAAQ,GAAa;gBACvB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;aACtB,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,SAAS,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,aAAA,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;YACL,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC1B,gBAAA,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACtE,gBAAA,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,MAAM,GAAG,IAAI,CAAC;AAElB,gBAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,qBAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBAAE,MAAM,GAAG,CAAC,CAAC;AACjD,qBAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBAAE,MAAM,GAAG,CAAC,CAAC;qBACjD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;AAC/D,oBAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;oBACjE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7D,gBAAA,OAAO,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;AACjC,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;KACF;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACrD,aAAA;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEnC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9C,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;QACrB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,aAAA,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;YACL,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC1B,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAClE,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAA;KACF;AAED,IAAA,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAA;AAC/C,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;AACxF,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAClF,QAAA,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAClF,IAAI,MAAM,GAAG,IAAI,CAAC;AAElB,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,aAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;AACjD,aAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;QACtD,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,YAAY,MAAM,EAAE;AACzD,YAAA,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,IAAI,MAAM,EAAE;gBAC5C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAChG,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnC,SAAA;QAED,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,YAAA,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3G,SAAA;QAED,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;KAC5C;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACnD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;AACzC,oBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACnD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;YACvC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAClD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE;wBACxC,MAAM,GAAG,IAAI,CAAC;wBACd,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;KACF;IAED,sBAAsB,GAAA;QACpB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI;YAC1F,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;SAC3C,CAAC;KACH;AAED,IAAA,cAAc,CAAC,KAAK,EAAA;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,+CACf,IAAI,CAAC,sBAAsB,EAAE,CAC7B,EAAA,KAAK,KACR,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAA,CAAA,CAC9B,CAAC;KACJ;IAEM,cAAc,GAAA;QACnB,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;;YAChD,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;KAChC;AAEM,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACvC,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACtD,SAAA;QAED,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC5D,SAAA;KACF;AAEM,IAAA,QAAQ,CAAC,OAAO,EAAA;QACrB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClD,SAAA;KACF;IAED,OAAO,GAAA;QACL,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;QAC5C,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;KACzC;IAED,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC1C;AAED,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;AACrF,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC;QACzG,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,cAAc,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACrF,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;AAClH,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AAC9D,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI;AACjD,YAAA,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;QAExF,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;KAClE;IAED,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAA;AAC7B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC1F,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,QAAA,IAAI,cAAc,GAAG,WAAW,GAAG,KAAK,CAAC;QACzC,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAE3C,IAAI,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5C,YAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;AACnC,gBAAA,IAAI,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,gBAAA,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE;AAC/B,oBAAA,UAAU,GAAG,UAAU,CAAC,kBAAkB,CAAC;AAC5C,iBAAA;AAED,gBAAA,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,eAAe,GAAG,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;oBACrD,IAAI,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;oBAEzD,IAAI,cAAc,GAAG,EAAE,IAAI,eAAe,GAAG,QAAQ,CAAC,kBAAkB,CAAC,EAAE;wBACzE,IAAI,IAAI,CAAC,UAAU,EAAE;4BACnB,IAAI,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;4BAC3D,IAAI,mBAAmB,GACrB,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,oCAAoC,CAAC;AAC3E,gCAAA,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;4BACtE,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;4BAC/G,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;4BAC/G,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAEjD,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;4BAC/F,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;4BAC7F,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAChG,yBAAA;AAAM,6BAAA;4BACL,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;AAC3C,4BAAA,IAAI,UAAU,EAAE;gCACd,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC;AACjD,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;gBAC7C,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,cAAc,GAChB,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,8BAA8B,CAAC;AACrE,wBAAA,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;oBAChE,IAAI,gBAAgB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;oBAC/F,IAAI,gBAAgB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;oBAC/F,IAAI,mBAAmB,GACrB,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,oCAAoC,CAAC;AAC3E,wBAAA,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;oBACtE,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;oBAC/G,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;AAC/G,oBAAA,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,mBAAmB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AACjF,oBAAA,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AACrF,oBAAA,IAAI,qBAAqB,EAAE;AACzB,wBAAA,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AACtF,qBAAA;oBACD,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEjD,oBAAA,MAAM,wBAAwB,GAAG,MAAM,GAAG,mBAAmB,CAAC,WAAW,GAAG,KAAK,GAAG,cAAc,CAAC;AACnG,oBAAA,MAAM,0BAA0B,GAAG,MAAM,GAAG,qBAAqB,CAAC,WAAW,GAAG,KAAK,GAAG,cAAc,CAAC;oBACvG,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,IAAI,wBAAwB,CAAC;oBAE5G,IAAI,QAAQ,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,KAAI;wBAChE,IAAI,SAAS,IAAI,KAAK,EAAE;4BACtB,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,GAAG,KAAK,GAAG,UAAU,CAAC,uBAAuB,CAAC,cAAc,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;4BAC3H,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAClC,yBAAA;AACH,qBAAC,CAAC;oBAEF,QAAQ,CAAC,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,qBAAqB,CAAC,CAAC;oBAC/F,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;oBACrG,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;oBAErG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBACpF,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBAClF,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;AACrF,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;oBAC7G,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;oBAC3C,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;AACnE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;AAC3E,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC,CAAC;AACJ,SAAA;QAED,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAChE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;KACtF;AAED,IAAA,wBAAwB,CAAC,MAAM,EAAA;AAC7B,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAAE;AAC5E,gBAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,aAAA;AAED,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AAED,IAAA,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAA;AACtE,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEpF,YAAA,IAAI,QAAQ,EAAE;gBACZ,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC/C,gBAAA,IAAI,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC;gBACrC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;gBAExC,IAAI,OAAO,IAAI,eAAe,EAAE;oBAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC;AAC9C,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,mEAAmE,CAAC;AAC3E,aAAA;AACF,SAAA;KACF;IAED,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;AAC9G,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;AAClH,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACzC;IAED,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAA;QACjC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE;YAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAClF,IAAI,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAExD,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE;gBACpC,IAAI,UAAU,GAAG,gBAAgB,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;gBAC9D,IAAI,SAAS,GAAG,eAAe,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;gBAC3D,IAAI,YAAY,GAAG,gBAAgB,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;AAEtE,gBAAA,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AACtD,oBAAA,gBAAgB,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACnF,gBAAA,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AACxD,oBAAA,gBAAgB,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,GAAG,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AAE9E,gBAAA,IAAI,KAAK,CAAC,KAAK,GAAG,YAAY,EAAE;AAC9B,oBAAA,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI;AACvD,wBAAA,UAAU,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACpF,oBAAA,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI;AACzD,wBAAA,UAAU,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACpF,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACvB,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;oBACrH,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACvH,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACxB,iBAAA;gBAED,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1E,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;AACxC,aAAA;AACF,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,EAAE;YACjD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACtE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACzE,SAAA;KACF;IAED,YAAY,CAAC,KAAK,EAAE,UAAU,EAAA;QAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YACvF,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;AAC/E,YAAA,IAAI,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC;AACvC,YAAA,IACE,SAAS;AACT,iBAAC,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,EACrH;gBACA,SAAS,GAAG,KAAK,CAAC;AACnB,aAAA;YAED,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;AACjE,gBAAA,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;AAC3B,aAAA;AAED,YAAA,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;AAClE,gBAAA,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;AAC3B,aAAA;AAED,YAAA,IAAI,SAAS,EAAE;gBACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE7D,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,SAAS;oBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,iBAAA,CAAC,CAAC;AACJ,aAAA;YAED,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACtE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACxE,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;AACrC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,cAAc,CAAC,KAAK,EAAA;QAClB,IAAI,UAAU,GAAiB,KAAK,CAAC,aAAa,CAAC,MAAO,CAAC,QAAQ,CAAC;QACpE,IACE,UAAU,IAAI,OAAO;AACrB,YAAA,UAAU,IAAI,QAAQ;AACtB,YAAA,UAAU,IAAI,GAAG;YACjB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9D;YACA,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;AAC9C,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACpE,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AAE/G,YAAA,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;gBAEzE,IAAI,QAAQ,IAAI,OAAO,EAAE;AACvB,oBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,wBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,wBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,qBAAA;AAAM,yBAAA;wBACL,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;wBACzE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACzC,yBAAA;AACF,qBAAA;oBAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnG,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,wBAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;wBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,4BAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,yBAAA;AACF,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AACzC,wBAAA,IAAI,OAAO,EAAE;4BACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AACxC,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,4BAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACzB,yBAAA;AAED,wBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;wBACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,yBAAA;AACF,qBAAA;AAED,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;wBACrB,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,wBAAA,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,KAAK,CAAC,QAAQ;AACtB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;AACnC,oBAAA,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,wBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;wBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnG,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;wBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;4BACrB,aAAa,EAAE,KAAK,CAAC,aAAa;4BAClC,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,4BAAA,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,KAAK,CAAC,QAAQ;AACtB,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,4BAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,EAAE;AAC5C,oBAAA,IAAI,QAAQ,EAAE;wBACZ,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;wBACzE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACzC,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACtF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;4BACrB,aAAa,EAAE,KAAK,CAAC,aAAa;4BAClC,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,4BAAA,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,KAAK,CAAC,QAAQ;AACtB,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;AACvC,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;AAED,IAAA,mBAAmB,CAAC,KAAK,EAAA;QACvB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAEhC,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,UAAU,EAAE;AAChD,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,OAAO,EAAE;AACpD,gBAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;gBAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;gBAEvG,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AACzC,wBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;wBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3C,qBAAA;AAED,oBAAA,IAAI,YAAY,EAAE;AAChB,wBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,qBAAA;AACF,iBAAA;gBAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF,aAAA;AACF,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,KAAK,EAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;AAC9C,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAErC,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC/C,aAAA;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,aAAA;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;KACvC;IAED,uBAAuB,CAAC,KAAY,EAAE,KAAc,EAAA;QAClD,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;AACrB,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;KAC5E;IAED,oBAAoB,CAAC,IAAc,EAAE,MAAe,EAAA;QAClD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzC,IAAI,kBAAkB,GAAW,CAAC,CAAC;YACnC,IAAI,oBAAoB,GAAY,KAAK,CAAC;YAC1C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AAEvG,YAAA,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAAE,oBAAA,kBAAkB,EAAE,CAAC;qBAC5C,IAAI,KAAK,CAAC,eAAe;oBAAE,oBAAoB,GAAG,IAAI,CAAC;AAC7D,aAAA;YAED,IAAI,MAAM,IAAI,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxD,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACpD,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,gBAAA,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,MAAM,EAAE;oBACX,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,CAAC,EAAE;wBACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AAEhE,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACzC,yBAAA;AACF,qBAAA;AACF,iBAAA;AAED,gBAAA,IAAI,oBAAoB,KAAK,kBAAkB,GAAG,CAAC,IAAI,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;AAC3H,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACnC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,SAAA;KACF;IAED,sBAAsB,CAAC,IAAc,EAAE,MAAe,EAAA;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AAEvG,QAAA,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACpD,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AAChE,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzC,YAAA,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;KACF;AAED,IAAA,UAAU,CAAC,IAAI,EAAA;AACb,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC;AAChG,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,CAAC,SAAS,YAAY,KAAK;oBAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;oBAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,IAAI,KAAK,GAAW,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC3C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBACxC,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM;AACP,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;KACxC;IAED,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC;KAC1C;IAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ,GAAG,KAAK,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1H;AAED,IAAA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAA;QAC5B,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC9D,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5B,SAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACtB;IAED,YAAY,CAAC,KAAK,EAAE,SAAS,EAAA;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;KACzC;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YAC3C,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,MAAM,YAAY,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;;AACzH,gBAAA,OAAO,KAAK,CAAC;AACnB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACrD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACxD,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,uBAAuB,CAAC;AAC5B,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB;AAC3C,wBAAA,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;;wBAC/F,uBAAuB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC;AACxE,iBAAA;AAED,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC;gBAClD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,oBAAA,IAAI,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAE,CAAC;oBAC3B,IAAI,UAAU,GAAG,IAAI,CAAC;oBACtB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,oBAAA,IAAI,iBAAiB,CAAC;AAEtB,oBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AAC7B,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;4BAC1D,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACpC,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB,4BAAA,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC;AACnC,4BAAA,IAAI,eAAe,GAAG,UAAU,CAAC,SAAS,IAAI,YAAY,CAAC;4BAC3D,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;4BACnE,iBAAiB,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AACjF,4BAAA,IACE,CAAC,YAAY;AACX,gCAAA,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC7G,iCAAC,CAAC,YAAY;oCACZ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9G;gCACA,UAAU,GAAG,KAAK,CAAC;AACpB,6BAAA;4BAED,IAAI,CAAC,UAAU,EAAE;gCACf,MAAM;AACP,6BAAA;AACF,yBAAA;AACF,qBAAA;oBAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,uBAAuB,EAAE;AACrE,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvD,4BAAA,IAAI,iBAAiB,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,QAAQ,CAAE,CAAC;AACxC,4BAAA,IAAI,WAAW,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC;4BACjF,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAC/C,4BAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;4BACpF,iBAAiB,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AAEjF,4BAAA,IACE,CAAC,YAAY;AACX,iCAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;oCAC3D,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AAC/D,iCAAC,CAAC,YAAY;AACZ,qCAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;wCACzD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAClE;gCACA,WAAW,GAAG,IAAI,CAAC;gCACnB,QAAQ,GAAG,iBAAiB,CAAC;AAC9B,6BAAA;AACF,yBAAA;AACF,qBAAA;oBAED,IAAI,OAAO,GAAG,UAAU,CAAC;AACzB,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC1B,wBAAA,OAAO,GAAG,UAAU,IAAI,WAAW,CAAC;AACrC,qBAAA;AAED,oBAAA,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnC,qBAAA;oBAED,cAAc;wBACZ,cAAc;AACd,4BAAA,CAAC,UAAU;4BACX,WAAW;6BACV,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;6BAC5C,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACrD,iBAAA;gBAED,IAAI,CAAC,cAAc,EAAE;AACnB,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC3B,iBAAA;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzG,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;AAEvD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,aAAa,EAAE,aAAa;AAC7B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;IAED,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAA;AACvC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,gBAAA,KAAK,IAAI,SAAS,IAAI,UAAU,EAAE;AAChC,oBAAA,IAAI,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,SAAS,CAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE;wBAC1D,OAAO,GAAG,IAAI,CAAC;AACf,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,qBAAA;AACF,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;KACF;IAED,eAAe,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAA;QAChF,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,gBAAgB,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;YACpE,OAAO,GAAG,IAAI,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,IAAI,OAAO,CAAC;AACjH,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,UAAU,CAAC,IAAI,EAAA;QACb,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC/E;IAED,SAAS,GAAA;QACP,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBACrC,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;AACP,aAAA;AACF,SAAA;QAED,OAAO,CAAC,KAAK,CAAC;KACf;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAElB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACrD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;IAED,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;KACnG;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,YAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,KAAI;AACpC,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;oBAC3E,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAC3D,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACvF,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,iBAAA;AAED,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,aAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC/D,SAAA;KACF;IAED,0BAA0B,GAAA;QACxB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAClC,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;;sGA1hDU,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,4iFAPT,CAAC,gBAAgB,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAoKZ,aAAa,EA/QpB,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GT,EAAA,CAAA,EAutDU,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2iGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,cAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,gBAAgB,8JAjJhB,MAAM,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FA9jDN,SAAS,EAAA,UAAA,EAAA,CAAA;kBApHrB,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EACb,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GT,EAAA,CAAA,EAAA,SAAA,EACU,CAAC,gBAAgB,CAAC,iBACd,iBAAiB,CAAC,IAAI,EAE/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA,EAAA,MAAA,EAAA,CAAA,2iGAAA,CAAA,EAAA,CAAA;8MAGQ,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEG,yBAAyB,EAAA,CAAA;sBAAjC,KAAK;gBAEG,yBAAyB,EAAA,CAAA;sBAAjC,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEE,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAEI,0BAA0B,EAAA,CAAA;sBAAnC,MAAM;gBAEE,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBAEG,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEiB,kBAAkB,EAAA,CAAA;sBAAzC,SAAS;uBAAC,WAAW,CAAA;gBAEK,qBAAqB,EAAA,CAAA;sBAA/C,SAAS;uBAAC,cAAc,CAAA;gBAEQ,2BAA2B,EAAA,CAAA;sBAA3D,SAAS;uBAAC,oBAAoB,CAAA;gBAEI,6BAA6B,EAAA,CAAA;sBAA/D,SAAS;uBAAC,sBAAsB,CAAA;gBAEb,cAAc,EAAA,CAAA;sBAAjC,SAAS;uBAAC,OAAO,CAAA;gBAEW,mBAAmB,EAAA,CAAA;sBAA/C,SAAS;uBAAC,gBAAgB,CAAA;gBAEQ,yBAAyB,EAAA,CAAA;sBAA3D,SAAS;uBAAC,sBAAsB,CAAA;gBAED,SAAS,EAAA,CAAA;sBAAxC,eAAe;uBAAC,aAAa,CAAA;gBAIjB,gBAAgB,EAAA,CAAA;sBAA5B,KAAK;gBAiOO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAuDO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAQO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAQO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAOO,aAAa,EAAA,CAAA;sBAAzB,KAAK;gBAQO,SAAS,EAAA,CAAA;sBAArB,KAAK;;MAsmCK,MAAM,CAAA;AAajB,IAAA,WAAA,CAAmB,EAAa,EAAS,gBAAkC,EAAS,EAAqB,EAAA;AAAtF,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AACvG,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;AACtE,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACzB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,iBAAiB,CAAC,MAAM,EAAE,OAAQ,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,YAAA,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;AAC1C,YAAA,OAAO,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACzC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,WAAW,CAAC,QAAQ,EAAA;QAClB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AAChE,QAAA,OAAO,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;KACnE;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;mGAvCU,MAAM,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAN,MAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,EA/BP,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAMU,MAAM,EAAA,UAAA,EAAA,CAAA;kBAjClB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;yJAE0B,OAAO,EAAA,CAAA;sBAA/B,KAAK;uBAAC,gBAAgB,CAAA;gBAEU,QAAQ,EAAA,CAAA;sBAAxC,KAAK;uBAAC,wBAAwB,CAAA;gBAEtB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;MAwIK,gBAAgB,CAAA;AAiD3B,IAAA,WAAA,CAAmB,EAAa,EAAS,EAAc,EAAS,IAAY,EAAA;AAAzD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAAS,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;AAZhF,IAAA,IAAa,YAAY,GAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IACD,IAAI,YAAY,CAAC,GAAW,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;AACzB,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AAC9D,YAAA,OAAO,CAAC,GAAG,CACT,uIAAuI,CACxI,CAAC;AACH,SAAA;KACF;IAID,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;gBACvD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;AACzE,aAAA;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;AAC9D,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa;oBAAE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;;oBACzG,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;AACjG,aAAA;AAED,YAAA,IAAI,cAAc,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;AAC1D,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,IAAI,CAAC;YAEvF,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE;AAChF,gBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,IAAI,CAAC;AACxF,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE;AACpF,gBAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC;AAC3G,aAAA;AACF,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;gBAC1E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,gBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACnG,aAAA;YAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;gBAC1E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAChG,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEvD,gBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;AACtH,oBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACjG,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC1E,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACtG,SAAA;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC1E,YAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACnG,SAAA;QAED,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACtE,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC/F,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACpG,SAAA;KACF;IAED,cAAc,GAAA;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,CAAC;QAEvE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QAE/D,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YAC1E,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;AAClE,SAAA;AAED,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;KAC1C;IAED,cAAc,GAAA;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,CAAC;QACvE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QAE/D,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YAC1E,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;AAClE,SAAA;AAED,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;KAC1C;AAED,IAAA,YAAY,CAAC,KAAK,EAAA;QAChB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;YAC1C,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC1E,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AACpG,SAAA;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC1E,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AACpG,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AAC3D,SAAA;KACF;AAED,IAAA,oBAAoB,CAAC,KAAa,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,SAAA;KACF;AAED,IAAA,QAAQ,CAAC,OAAO,EAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACnD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC1D,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;gBACjE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;AAChE,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC/B;;6GAtLU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EArGjB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3IU,MAAM,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAiJN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvG5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;2IAE4B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,kBAAkB,CAAA;gBAEhB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEqB,qBAAqB,EAAA,CAAA;sBAA/C,SAAS;uBAAC,cAAc,CAAA;gBAEK,wBAAwB,EAAA,CAAA;sBAArD,SAAS;uBAAC,iBAAiB,CAAA;gBAEH,mBAAmB,EAAA,CAAA;sBAA3C,SAAS;uBAAC,YAAY,CAAA;gBAEG,oBAAoB,EAAA,CAAA;sBAA7C,SAAS;uBAAC,aAAa,CAAA;gBAEG,2BAA2B,EAAA,CAAA;sBAArD,SAAS;uBAAC,cAAc,CAAA;gBAEE,qBAAqB,EAAA,CAAA;sBAA/C,SAAS;uBAAC,cAAc,CAAA;gBAEK,wBAAwB,EAAA,CAAA;sBAArD,SAAS;uBAAC,iBAAiB,CAAA;gBAEI,0BAA0B,EAAA,CAAA;sBAAzD,SAAS;uBAAC,mBAAmB,CAAA;gBAEP,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU,CAAA;gBAgBR,YAAY,EAAA,CAAA;sBAAxB,KAAK;;MA8JK,gBAAgB,CAAA;AAS3B,IAAA,WAAA,CAAmB,EAAa,EAAA;AAAb,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAC9B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;gBAC1E,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;AAGD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AACX,gBAAA,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC,CAAC;YAEH,UAAU,CAAC,cAAc,EAAE,CAAC;AAC7B,SAAA;KACF;AAGD,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACrB;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KAC/C;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;6GArDU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iGAAhB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,2BAA2B,EAAE,aAAa;AAC1C,wBAAA,qBAAqB,EAAE,QAAQ;AAC/B,wBAAA,iBAAiB,EAAE,0BAA0B;AAC7C,wBAAA,aAAa,EAAE,gBAAgB;AAChC,qBAAA;iBACF,CAAA;6FAE4B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,kBAAkB,CAAA;gBAEhB,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAyBN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAcjC,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;MAkC9B,UAAU,CAAA;IAWrB,WAAmB,CAAA,EAAa,EAAS,EAAqB,EAAA;AAA3C,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AAC5D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YAC1E,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAED,IAAA,OAAO,CAAC,KAAK,EAAA;QACX,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;AACvE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC1C,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;uGAvCU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAhBX,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;GAST,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAOU,UAAU,EAAA,UAAA,EAAA,CAAA;kBAlBtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;6HAEU,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;;MA2CK,iBAAiB,CAAA;AAW5B,IAAA,WAAA,CAAmB,EAAa,EAAS,EAAc,EAAS,IAAY,EAAA;AAAzD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAAS,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAEhF,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;YAC5C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;gBAC/B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC5E,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAEvE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;KACJ;IAED,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;AACvC,SAAA;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACrC,SAAA;KACF;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;AAED,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,yBAAyB,KAAK,IAAI,CAAC;KAChD;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC9E,SAAA;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;8GAzEU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;2IAEU,yBAAyB,EAAA,CAAA;sBAAjC,KAAK;;MAiFK,mBAAmB,CAAA;AAa9B,IAAA,WAAA,CAAmB,EAAa,EAAS,EAAc,EAAS,IAAY,EAAA;AAAzD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAAS,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAEhF,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC9E,SAAC,CAAC,CAAC;KACJ;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC;YACpI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;;YACrC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;KAC7C;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KACzD;AAED,IAAA,UAAU,CAAC,KAAK,EAAA;QACd,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KACzD;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAClC;AAGD,IAAA,MAAM,CAAC,KAAK,EAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACpD,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,2BAA2B,KAAK,IAAI,CAAC;KAClD;IAED,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;;gHAtGU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAnB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;2IAEU,2BAA2B,EAAA,CAAA;sBAAnC,KAAK;gBAyFN,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;;MAuBrB,eAAe,CAAA;IAS1B,WAAmB,CAAA,EAAa,EAAS,YAA8B,EAAA;AAApD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AACrE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAK;AACvE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxD,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,SAAA;KACF;AAGD,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AACrB,gBAAA,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAGD,IAAA,UAAU,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;KACF;AAGD,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;KAC9C;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;4GAvDU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,CAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,qBAAqB,EAAE,UAAU;AAClC,qBAAA;iBACF,CAAA;yHAE2B,OAAO,EAAA,CAAA;sBAAhC,KAAK;uBAAC,iBAAiB,CAAA;gBAEf,uBAAuB,EAAA,CAAA;sBAA/B,KAAK;gBAqBN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAWjC,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQnC,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAA;;MAyBzB,uBAAuB,CAAA;IASlC,WAAmB,CAAA,EAAa,EAAS,YAA8B,EAAA;AAApD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AACrE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAK;AACvE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxD,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,SAAA;KACF;AAGD,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AACrB,gBAAA,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;KAC9C;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;oHAzCU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;wGAAvB,uBAAuB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,SAAA,CAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,qBAAqB,EAAE,UAAU;AAClC,qBAAA;iBACF,CAAA;yHAEmC,OAAO,EAAA,CAAA;sBAAxC,KAAK;uBAAC,yBAAyB,CAAA;gBAEvB,uBAAuB,EAAA,CAAA;sBAA/B,KAAK;gBAqBN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAA;;MA6BzB,gBAAgB,CAAA;AAS3B,IAAA,WAAA,CAAmB,EAAa,EAAS,YAA8B,EAAU,EAAc,EAAA;AAA5E,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AAAU,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAC7F,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7E,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1D,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAGD,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAC1B,gBAAA,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAE9B,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KAC/C;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;6GAvCU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iGAAhB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,CAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,eAAA,EAAA,6BAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,iBAAiB,EAAE,6BAA6B;AACjD,qBAAA;iBACF,CAAA;kJAE4B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,kBAAkB,CAAA;gBAEhB,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAeN,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAA;;MAsD5B,UAAU,CAAA;AAWrB,IAAA,WAAA,CAAmB,EAAa,EAAS,YAA8B,EAAS,EAAqB,EAAA;AAAlF,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AACnG,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACtD;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC;AAC7B,gBAAA,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC,CAAC;AACJ,SAAA;QACD,UAAU,CAAC,cAAc,EAAE,CAAC;KAC7B;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;;uGA5CU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EA3BX,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;GAoBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAOU,UAAU,EAAA,UAAA,EAAA,CAAA;kBA7BtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;yJAEU,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEU,OAAO,EAAA,CAAA;sBAAtB,KAAK;uBAAC,OAAO,CAAA;;MA+EH,gBAAgB,CAAA;AAa3B,IAAA,WAAA,CAAmB,EAAa,EAAS,YAA8B,EAAU,EAAqB,EAAA;AAAnF,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;AAAU,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AACpG,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;AACjF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAK;AACtF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC1C;IAED,OAAO,CAAC,KAAY,EAAE,OAAO,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;AAClD,SAAA;QAED,UAAU,CAAC,cAAc,EAAE,CAAC;KAC7B;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,2BAA2B,EAAE;AACpC,YAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,CAAC;AAChD,SAAA;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;AAC5C,SAAA;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACvB,QAAA,IAAI,OAAgB,CAAC;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;gBACrB,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBAC5B,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;AAAM,qBAAA;oBACL,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;AACP,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA;YACL,OAAO,GAAG,KAAK,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;;6GAxEU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAjCjB,QAAA,EAAA,2BAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAOU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAnC5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;yJAEmB,YAAY,EAAA,CAAA;sBAA7B,SAAS;uBAAC,KAAK,CAAA;;MAgFL,gBAAgB,CAAA;AAO3B,IAAA,WAAA,CAAmB,EAAa,EAAS,EAAc,EAAS,IAAY,EAAA;AAAzD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAAS,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAEhF,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;AACjE,SAAA;KACF;AAGD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAEhC,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBACvB,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACjD,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;wBACjC,OAAO;AACR,qBAAA;oBAED,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;oBAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,aAAA;AACF,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAChF,gBAAA,IAAI,SAAS,EAAE;oBACb,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,iBAAA;aACF,EAAE,EAAE,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KACJ;IAED,gBAAgB,GAAA;QACd,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC;KACtC;AAGD,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;AAEpB,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;oBAChC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;oBAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,aAAA;;AAGI,iBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;oBAChC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;oBAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACnE,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,aAAA;;AAGI,iBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE;gBAC3B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEpE,IAAI,KAAK,CAAC,QAAQ;AAAE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;;AAC9C,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACF,SAAA;KACF;AAED,IAAA,QAAQ,CAAC,OAAO,EAAA;AACd,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,IAAI,GAAG,OAAO,CAAC;YACnB,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE;AAC3D,gBAAA,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3B,aAAA;AAED,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAA,IAAI,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;AAE9D,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;KACF;AAED,IAAA,cAAc,CAAC,KAAoB,EAAA;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAA,IAAI,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAE1D,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;KACF;AAED,IAAA,0BAA0B,CAAC,IAAa,EAAA;AACtC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAE3C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACxF,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC;AACzC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAAE,gBAAA,OAAO,QAAQ,CAAC;;AACnE,gBAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AACvD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,IAAa,EAAA;AAClC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEvC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAChF,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;AACtC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAAE,gBAAA,OAAO,QAAQ,CAAC;;AACnE,gBAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACnD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KAC/C;;6GApKU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iGAAhB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,EAAA,KAAA,EAAA,CAAA,uBAAA,EAAA,OAAA,CAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;2IAE4B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,kBAAkB,CAAA;gBAEO,KAAK,EAAA,CAAA;sBAApC,KAAK;uBAAC,uBAAuB,CAAA;gBAErB,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAWN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBA0CjC,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;MA8HxB,mBAAmB,CAAA;IAO9B,WAAmB,CAAA,EAAa,EAAS,cAAgC,EAAA;AAAtD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAkB;KAAI;IAE7E,kBAAkB,GAAA;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE;AACpB,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACnC,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AACT,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;gHArBU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAnB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EACb,aAAa,EAdpB,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAMU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;AAOT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;yHAEiC,SAAS,EAAA,CAAA;sBAAxC,eAAe;uBAAC,aAAa,CAAA;;MA8BnB,KAAK,CAAA;AAGhB,IAAA,WAAA,CAAmB,EAAa,EAAS,EAAc,EAAS,IAAY,EAAA;AAAzD,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAAS,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;AAGhF,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,QAAQ,KAAK,CAAC,KAAK;;AAEjB,YAAA,KAAK,EAAE;gBACL,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;AACvD,gBAAA,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,KAAK,EAAE,CAAC;AACjB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;;AAGR,YAAA,KAAK,EAAE;gBACL,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;AAC3D,gBAAA,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,KAAK,EAAE,CAAC;AACjB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;;AAGR,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9B,oBAAA,IAAI,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAEnC,oBAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1B,wBAAA,aAAa,EAAE,KAAK;AACpB,wBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACxB,qBAAA,CAAC,CAAC;AAEH,oBAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;AAChC,oBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,iBAAA;gBACD,MAAM;;AAGR,YAAA,KAAK,EAAE;gBACL,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAA,IAAI,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAElC,oBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;AACxB,wBAAA,aAAa,EAAE,KAAK;AACpB,wBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACxB,qBAAA,CAAC,CAAC;AAEH,oBAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;AAChC,oBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,iBAAA;gBACD,MAAM;AACT,SAAA;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,UAAU,CAAC,MAAK;gBACd,IAAI,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AACjI,gBAAA,IAAI,GAAG,EAAE;oBACP,GAAG,CAAC,KAAK,EAAE,CAAC;AACb,iBAAA;aACF,EAAE,EAAE,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KACJ;;kGAzEU,KAAK,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sFAAL,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBAPjB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,iBAAiB,EAAE,KAAK;AACzB,qBAAA;iBACF,CAAA;2IAEiB,OAAO,EAAA,CAAA;sBAAtB,KAAK;uBAAC,OAAO,CAAA;gBAKd,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;MA2FxB,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAmB,EAAa,EAAA;AAAb,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAW;KAAI;AAEpC,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;AACxB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACxB,aAAA,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1B,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACxB,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE/C,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;6GAxBU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAlBjB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;GAYT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAMU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AACnB,qBAAA;iBACF,CAAA;6FAEU,OAAO,EAAA,CAAA;sBAAf,KAAK;;MAiEK,eAAe,CAAA;;4GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAp6Ff,YAAA,EAAA,CAAA,SAAS,EAk2FT,gBAAgB,EAnpChB,gBAAgB,EAjJhB,MAAM,EAoVN,gBAAgB,EA0EhB,UAAU,EAgDV,iBAAiB,EAsvBjB,KAAK,EApqBL,mBAAmB,EAgHnB,eAAe,EAiEf,uBAAuB,EAoDvB,gBAAgB,EAuEhB,UAAU,EAkFV,gBAAgB,EAiFhB,gBAAgB,EAsLhB,mBAAmB,aA2JpB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,CA93FxE,EAAA,OAAA,EAAA,CAAA,SAAS,EAk2FT,gBAAgB,EAh9BhB,gBAAgB,EA0EhB,UAAU,EAgDV,iBAAiB,EAsvBjB,KAAK,EApqBL,mBAAmB,EAgHnB,eAAe,EAiEf,uBAAuB,EAoDvB,gBAAgB,EAuEhB,UAAU,EAkFV,gBAAgB,EAiFhB,gBAAgB,EAsLhB,mBAAmB,EA2K5B,cAAc;QACd,YAAY,CAAA,EAAA,CAAA,CAAA;6GAqBH,eAAe,EAAA,OAAA,EAAA,CAtChB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAgBjF,cAAc;QACd,YAAY,CAAA,EAAA,CAAA,CAAA;2FAqBH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvC3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC;AACpF,oBAAA,OAAO,EAAE;wBACP,SAAS;wBACT,gBAAgB;wBAChB,gBAAgB;wBAChB,UAAU;wBACV,iBAAiB;wBACjB,KAAK;wBACL,mBAAmB;wBACnB,eAAe;wBACf,uBAAuB;wBACvB,gBAAgB;wBAChB,UAAU;wBACV,gBAAgB;wBAChB,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,SAAS;wBACT,gBAAgB;wBAChB,gBAAgB;wBAChB,MAAM;wBACN,gBAAgB;wBAChB,UAAU;wBACV,iBAAiB;wBACjB,KAAK;wBACL,mBAAmB;wBACnB,eAAe;wBACf,uBAAuB;wBACvB,gBAAgB;wBAChB,UAAU;wBACV,gBAAgB;wBAChB,gBAAgB;wBAChB,mBAAmB;AACpB,qBAAA;iBACF,CAAA;;;AC5lGD;;AAEG;;;;"}