@fundamental-ngx/platform 0.62.0-rc.21 → 0.62.0-rc.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-platform-table-helpers.mjs","sources":["../../../../libs/platform/table-helpers/table.ts","../../../../libs/platform/table-helpers/constants/tokens.ts","../../../../libs/platform/table-helpers/constants/index.ts","../../../../libs/platform/table-helpers/services/table.service.ts","../../../../libs/platform/table-helpers/services/table-responsive.service.ts","../../../../libs/platform/table-helpers/table-column.ts","../../../../libs/platform/table-helpers/directives/platform-table-column-responsive.directive.ts","../../../../libs/platform/table-helpers/directives/table-cell-header-popover.directive.ts","../../../../libs/platform/table-helpers/services/table-scroll-dispatcher.service.ts","../../../../libs/platform/table-helpers/services/table-column-resize.service.ts","../../../../libs/platform/table-helpers/directives/table-cell-resizable.directive.ts","../../../../libs/platform/table-helpers/table-cell.class.ts","../../../../libs/platform/table-helpers/directives/table-cell.directive.ts","../../../../libs/platform/table-helpers/enums/filter-type.enum.ts","../../../../libs/platform/table-helpers/enums/collection-filter.enum.ts","../../../../libs/platform/table-helpers/enums/column-align.enum.ts","../../../../libs/platform/table-helpers/enums/row-type.enum.ts","../../../../libs/platform/table-helpers/enums/selection-mode.enum.ts","../../../../libs/platform/table-helpers/enums/sort-direction.enum.ts","../../../../libs/platform/table-helpers/utils.ts","../../../../libs/platform/table-helpers/domain/table-data-provider.ts","../../../../libs/platform/table-helpers/domain/table-data-source.ts","../../../../libs/platform/table-helpers/domain/array-data-source.ts","../../../../libs/platform/table-helpers/domain/observable-data-source.ts","../../../../libs/platform/table-helpers/domain/data-source-parser.class.ts","../../../../libs/platform/table-helpers/directives/table-data-source.directive.ts","../../../../libs/platform/table-helpers/models/table-row.model.ts","../../../../libs/platform/table-helpers/helpers.ts","../../../../libs/platform/table-helpers/models/column-freeze-event.model.ts","../../../../libs/platform/table-helpers/models/columns-change-event.model.ts","../../../../libs/platform/table-helpers/models/directives.ts","../../../../libs/platform/table-helpers/models/filter-change-event.model.ts","../../../../libs/platform/table-helpers/models/group-change-event.model.ts","../../../../libs/platform/table-helpers/models/page-change-event.model.ts","../../../../libs/platform/table-helpers/models/save-rows-event.interface.ts","../../../../libs/platform/table-helpers/models/search-change-event.model.ts","../../../../libs/platform/table-helpers/models/selection-change-event.model.ts","../../../../libs/platform/table-helpers/models/sort-change-event.model.ts","../../../../libs/platform/table-helpers/models/table-cell-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-dialog-common-data.model.ts","../../../../libs/platform/table-helpers/models/table-row-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-row-toggle-open-state-event.model.ts","../../../../libs/platform/table-helpers/models/table-rows-rearrange-event.model.ts","../../../../libs/platform/table-helpers/directives/table-draggable.directive.ts","../../../../libs/platform/table-helpers/services/table-row.service.ts","../../../../libs/platform/table-helpers/directives/table-header-resizer.directive.ts","../../../../libs/platform/table-helpers/directives/table-header.directive.ts","../../../../libs/platform/table-helpers/directives/table-initial-state.directive.ts","../../../../libs/platform/table-helpers/directives/table-scrollable.directive.ts","../../../../libs/platform/table-helpers/directives/table-view-settings-filter-custom.directive.ts","../../../../libs/platform/table-helpers/directives/table-virtual-scroll.directive.ts","../../../../libs/platform/table-helpers/pipes/cell-styles.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-resizable-side.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-sorting-direction.pipe.ts","../../../../libs/platform/table-helpers/pipes/row-classes.pipe.ts","../../../../libs/platform/table-helpers/pipes/selection-cell-styles.pipe.ts","../../../../libs/platform/table-helpers/table-helpers.module.ts","../../../../libs/platform/table-helpers/fundamental-ngx-platform-table-helpers.ts"],"sourcesContent":["import { ElementRef, EventEmitter, Injector, Signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { PresetManagedComponent } from '@fundamental-ngx/platform/shared';\nimport { Observable } from 'rxjs';\n\nimport { FocusableGridDirective, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { TableDataSource } from './domain';\nimport { CollectionFilter } from './interfaces/collection-filter.interface';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { CollectionSort } from './interfaces/collection-sort.interface';\nimport { TableState } from './interfaces/table-state.interface';\nimport { PlatformTableManagedPreset, SaveRowsEvent, TableInitialState, TableRow } from './models';\nimport { TableScrollable } from './services/table-scroll-dispatcher.service';\nimport { TableColumn } from './table-column';\n\nexport abstract class Table<T = any> implements PresetManagedComponent<PlatformTableManagedPreset> {\n abstract readonly name: string;\n\n abstract readonly id: string;\n\n abstract _loadPreviousPages: boolean;\n\n abstract pageScrolling: boolean;\n\n abstract loadPagesBefore: boolean;\n\n abstract pageSize: Nullable<number>;\n\n abstract freezeColumnsTo: string;\n\n abstract freezeEndColumnsTo: string;\n\n /** Event emitted when current preset configuration has been changed. */\n abstract presetChanged: EventEmitter<PlatformTableManagedPreset>;\n\n /** Sum of widths of fixed columns (semantic highlighting, selection) */\n abstract get _fixedColumnsPadding(): number;\n\n /** Freezable column names and their respective indexes */\n abstract get _freezableColumns(): ReadonlyMap<string, number>;\n\n /** Freezable column names and their respective indexes */\n abstract get _freezableEndColumns(): ReadonlyMap<string, number>;\n\n /** Width of the table element in px */\n abstract get _tableWidthPx(): number;\n\n abstract get loadingState(): boolean;\n\n abstract initialState: TableInitialState | null;\n\n /** Table columns definition list */\n abstract readonly tableColumnsStream: Observable<TableColumn[]>;\n\n abstract readonly injector: Injector;\n\n abstract readonly tableContainer: ElementRef;\n\n abstract readonly tableScrollable: TableScrollable;\n\n abstract _tableRowsVisible: TableRow<T>[];\n\n abstract _tableRows: TableRow<T>[];\n\n abstract loadedRows$: Signal<number>;\n\n abstract _tableCurrentlyRenderedRowsPlaceholder: number[];\n\n abstract minimumColumnWidth: number;\n\n abstract _focusableGrid: FocusableGridDirective;\n\n /** Get table state */\n abstract getTableState(): TableState;\n\n /** Set table state */\n abstract setTableState(tableState: TableState): void;\n\n /** Get table columns definition list */\n abstract getTableColumns(): TableColumn[];\n\n /** Get a list of visible table columns. */\n abstract getVisibleTableColumns(): TableColumn[];\n\n /** Set Sorting rules */\n abstract sort(sortRules: CollectionSort[]): void;\n\n /** Add Sorting rules to the existing ones */\n abstract addSort(sortRules: CollectionSort[]): void;\n\n /** Set Filtering rules */\n abstract filter(filterRules: CollectionFilter[]): void;\n\n /** Add Filter rules to the existing ones */\n abstract addFilter(filterRules: CollectionFilter[]): void;\n\n /** Set grouping rules */\n abstract group(groupRules: CollectionGroup[]): void;\n\n /** Add Group rules to the existing ones */\n abstract addGroup(groupRules: CollectionGroup[]): void;\n\n /** Set table columns */\n abstract setColumns(columns: string[]): void;\n\n /** Toggle row checked state. */\n abstract toggleSelectableRow(rowIndex: number): void;\n\n /** Freeze table columns to including */\n abstract freezeToColumn(columnKey: string, end?: boolean): void;\n\n /** Unfreeze column */\n abstract unfreeze(columnKey: string, end?: boolean): void;\n\n /** Search in all table columns */\n abstract search(searchInput: SearchInput): void;\n\n /** Toolbar Sort Settings button visibility */\n abstract showSortSettingsInToolbar(showSortSettings: boolean): void;\n\n /** Toolbar Filter Settings button visibility */\n abstract showFilterSettingsInToolbar(showFilterSettings: boolean): void;\n\n /** Toolbar Group Settings button visibility */\n abstract showGroupSettingsInToolbar(showGroupSettings: boolean): void;\n\n /** Toolbar Columns Settings button visibility */\n abstract showColumnSettingsInToolbar(showColumnSettings: boolean): void;\n\n /** Toolbar Settings button visibility */\n abstract showSettingsInToolbar(showSettings: boolean): void;\n\n /** Disable filtering by header column menu */\n abstract setHeaderColumnFilteringDisabled(disabled: boolean): void;\n\n /** Set current page */\n abstract setCurrentPage(currentPage: number): void;\n\n /** Gets the max allowed width for all freezable columns */\n abstract getMaxAllowedFreezableColumnsWidth(): number;\n\n /** Get table data source */\n abstract getDataSource(): TableDataSource<T>;\n\n /** Manually triggers columns width recalculation */\n abstract recalculateTableColumnWidth(): void;\n\n /** Fetch data source data. */\n abstract fetch(): void;\n\n /** Adds empty row for editing at the beginning of the rows array. */\n abstract addRow(): void;\n\n /** Emits save event and resets editable rows array. */\n abstract saveRows(): void;\n\n /** Cancels editing and discards newly added rows */\n abstract cancelEditing(): void;\n\n /** Expand all the rows of the table */\n abstract expandAll(): void;\n\n /** Collapse all the rows of the table */\n abstract collapseAll(): void;\n\n /** Sets selected preset. */\n abstract setPreset(data: PlatformTableManagedPreset): void;\n\n /** Returns current preset. */\n abstract getCurrentPreset(): PlatformTableManagedPreset;\n\n abstract getCurrentlyRenderedRows(): number[];\n\n abstract setCurrentlyRenderedRows(startIndex: number, length: number): void;\n\n abstract toggleExpandableTableRow(row: TableRow<T>, forceFetch?: boolean);\n\n abstract onTableRowsChanged(): void;\n\n abstract refreshDndList(): void;\n\n abstract clearTableRows(): void;\n\n /** Toolbar Sort Settings button click event */\n readonly openTableSortSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Filter Settings button click event */\n readonly openTableFilterSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Group Settings button click event */\n readonly openTableGroupSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Column Settings button click event */\n readonly openTableColumnSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event fired when table state changes. */\n readonly tableColumnFilterChange: EventEmitter<any> = new EventEmitter<void>();\n\n /** Event fired when empty row added. */\n readonly emptyRowAdded: EventEmitter<void>;\n\n /** Event fired when save button pressed. */\n readonly save: EventEmitter<SaveRowsEvent<T>>;\n\n /** Event fired when cancel button pressed. */\n readonly cancel: EventEmitter<void>;\n}\n","import { InjectionToken } from '@angular/core';\nimport { TableDraggable, TableInitialState, TableVirtualScroll } from '../models';\n\nexport const FDP_TABLE_DRAGGABLE_DIRECTIVE = new InjectionToken<TableDraggable>('FdpTableDraggableDirective');\nexport const FDP_TABLE_STATE_DIRECTIVE = new InjectionToken<TableInitialState>('FdpTableStateDirective');\nexport const FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE = new InjectionToken<TableVirtualScroll>(\n 'FdpTableVirtualScrollDirective'\n);\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { CollectionPage, TableState } from '../interfaces';\n\nexport * from './tokens';\n\nexport const DEFAULT_TABLE_PAGE: Readonly<CollectionPage> = {\n pageSize: 0,\n currentPage: 1\n};\n\nexport const DEFAULT_TABLE_SEARCH_INPUT: Readonly<SearchInput> = {\n text: '',\n category: ''\n};\n\nexport const DEFAULT_TABLE_STATE: Readonly<TableState> = {\n sortBy: [],\n filterBy: [],\n groupBy: [],\n page: DEFAULT_TABLE_PAGE,\n columns: [],\n columnKeys: [],\n freezeToColumn: null,\n freezeToEndColumn: null,\n searchInput: DEFAULT_TABLE_SEARCH_INPUT,\n scrollTopPosition: 0\n};\n\nexport const DEFAULT_HIGHLIGHTING_KEY = 'semantic';\n\nexport const EDITABLE_ROW_SEMANTIC_STATE = 'information';\n\nexport const SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH = 6;\n\nexport const SELECTION_COLUMN_WIDTH: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n [ContentDensityMode.COZY, 44],\n [ContentDensityMode.COMPACT, 32],\n [ContentDensityMode.CONDENSED, 32]\n]);\n\nexport const TABLE_COLUMN_MIN_WIDTH = 50;\n\nexport const ROW_HEIGHT: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n [ContentDensityMode.COZY, 44],\n [ContentDensityMode.COMPACT, 32],\n [ContentDensityMode.CONDENSED, 24]\n]);\n","import { Injectable, computed, signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { DEFAULT_TABLE_STATE } from '../constants';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { shallowEqual } from 'fast-equals';\nimport { CollectionFilter, CollectionGroup, CollectionPage, CollectionSort, TableState } from '../interfaces';\nimport {\n ColumnsChange,\n FilterChange,\n FreezeChange,\n GroupChange,\n PageChange,\n SearchChange,\n SortChange\n} from '../models';\nimport { TableColumn } from '../table-column';\n\nexport type TableStateChange =\n | TableStateProperty<'sort', SortChange>\n | TableStateProperty<'page', PageChange>\n | TableStateProperty<'filter', FilterChange>\n | TableStateProperty<'group', GroupChange>\n | TableStateProperty<'freeze', FreezeChange>\n | TableStateProperty<'columns', ColumnsChange>\n | TableStateProperty<'search', SearchChange>;\n\nexport type TableStateProperty<\n T = 'sort' | 'page' | 'filter' | 'group' | 'freeze' | 'columns' | 'search',\n P = SortChange | PageChange | FilterChange | GroupChange | FreezeChange | ColumnsChange\n> = {\n type: T;\n state: P;\n};\n\n@Injectable()\nexport class TableService {\n /** Table state stream. */\n readonly tableState$ = new BehaviorSubject(DEFAULT_TABLE_STATE);\n /** @hidden */\n readonly _semanticHighlighting$ = signal('');\n /** @hidden */\n readonly _isFilteringFromHeaderDisabled$ = signal(false);\n /** @hidden */\n readonly _isShownNavigationColumn$ = signal(false);\n /** @hidden */\n readonly _semanticHighlightingColumnWidth$ = signal(0);\n /** Visible columns stream. */\n readonly visibleColumns$ = signal<TableColumn[]>([]);\n /** Visible columns length. */\n visibleColumnsLength = computed(() => this.visibleColumns$().length);\n /** Popping columns stream. */\n readonly poppingColumns$ = signal<TableColumn[]>([]);\n /** Popping columns length. */\n _poppingColumnsLength = 0;\n /** Table columns stream. */\n readonly tableColumns$ = new BehaviorSubject<TableColumn[]>([]);\n /** @hidden */\n readonly tableStateChanges$ = this.tableState$.pipe(skip(1));\n /** Stream that emits when search state changes. */\n readonly searchChange$ = new Subject<SearchChange>();\n /** Stream that emits when sort state changes. */\n readonly sortChange$ = new Subject<SortChange>();\n /** Stream that emits when filter state changes. */\n readonly filterChange$ = new Subject<FilterChange>();\n /** Stream that emits when group state changes. */\n readonly groupChange$ = new Subject<GroupChange>();\n /** Stream that emits when freeze state changes. */\n readonly freezeChange$ = new Subject<FreezeChange>();\n /** Stream that emits when columns state changes. */\n readonly columnsChange$ = new Subject<ColumnsChange>();\n /** Stream that emits when page state changes. */\n readonly pageChange$ = new Subject<PageChange>();\n /** Stream that emits when new fetch of data is needed. */\n readonly needFetch$ = new Subject<void>();\n /** @hidden */\n readonly stateChange$ = new Subject<TableStateChange>();\n /** Stream that emits when loading state changes. */\n readonly tableLoading$ = new BehaviorSubject<boolean>(false);\n /** Listen for soft changes in table subcomponents (mostly table column) */\n readonly markForCheck$ = new Subject<void>();\n /** Listen for immediate changes in table subcomponents (mostly table column) */\n readonly detectChanges$ = new Subject<void>();\n /** Sort rules stream. */\n readonly sortRules$ = signal<Map<string, CollectionSort>>(new Map());\n /**\n * Filter Rules Map stream. Where key is column key, and value is the associated filter rules.\n * Many filters can be applied to one column.\n */\n readonly filterRules$ = signal<Map<string, CollectionFilter[]>>(new Map());\n\n /**\n * Group Rules Map stream. Where key is column key and value is associated group rule\n */\n readonly groupRulesSubject = new BehaviorSubject<Map<string, CollectionGroup>>(new Map());\n\n /** Group Rules Map signal. */\n readonly groupRules$ = toSignal(this.groupRulesSubject);\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this.tableState$.getValue();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState): void {\n this.tableState$.next(state);\n }\n\n /** Set current loading state of the Table. */\n setTableLoading(isLoading: boolean): void {\n this.tableLoading$.next(isLoading);\n }\n\n /** Notify about changes in table subcomponents (mostly table column) and detect them on next detector check. */\n markForCheck(): void {\n this.markForCheck$.next();\n }\n\n /** Notify about changes in table subcomponents (mostly table column) and detect them immediately. */\n detectChanges(): void {\n this.detectChanges$.next();\n }\n\n /** Search */\n search(searchInput: SearchInput): void {\n const prevState = this.getTableState();\n\n const state: TableState = { ...prevState, searchInput };\n\n this.setTableState(setCurrentPageToState(state, 1));\n\n const evt = { current: searchInput, previous: prevState.searchInput };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'search', state: evt });\n this.searchChange$.next(evt);\n }\n\n /** Set new sort rules */\n setSort(sortRules: CollectionSort[] | undefined): void {\n const prevState = this.getTableState();\n const prevSortRules = (prevState && prevState.sortBy) || [];\n\n const newSortRules: CollectionSort[] = sortRules ? [...sortRules] : [];\n\n const state: TableState = { ...prevState, sortBy: newSortRules };\n\n if (!shallowEqual(prevSortRules, state.sortBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n this.buildSortRulesMap();\n const evt = { current: state.sortBy, previous: prevSortRules };\n this.buildSortRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'sort', state: evt });\n this.sortChange$.next(evt);\n }\n }\n\n /** Add sort rules to the existing ones */\n addSort(sortRules: CollectionSort[]): void {\n const prevState = this.getTableState();\n const prevSortRules = (prevState && prevState.sortBy) || [];\n\n const newSortRules: CollectionSort[] = [\n ...prevSortRules.filter((existing) => !sortRules.find(({ field }) => field === existing.field)),\n ...sortRules\n ];\n\n const state: TableState = { ...prevState, sortBy: newSortRules };\n\n if (!shallowEqual(prevSortRules, state.sortBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.sortBy, previous: prevSortRules };\n this.buildSortRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'sort', state: evt });\n this.sortChange$.next(evt);\n }\n }\n\n /** Set new filter rules */\n setFilters(filterRules: CollectionFilter[] | undefined): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = filterRules\n ? filterRules.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }))\n : [];\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n\n this.buildFilterRulesMap();\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /** Add filter rules to the existing ones */\n addFilters(rulesToAdd: CollectionFilter[]): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = [\n ...prevFilterRules.filter((existing) => !rulesToAdd.find(({ field }) => field === existing.field)),\n ...rulesToAdd.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }))\n ];\n\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n this.buildFilterRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /** Removes filters for the provided fields */\n removeFilters(fields: string[]): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = prevFilterRules.filter(\n (existing) => !fields.includes(existing.field)\n );\n\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n this.buildFilterRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n\n /** Set group rules */\n setGroups(groups: CollectionGroup[] | undefined): void {\n const prevState = this.getTableState();\n const prevGroups = (prevState && prevState.groupBy) || [];\n\n const newGroups: CollectionGroup[] = groups ? [...groups] : [];\n const state: TableState = { ...prevState, groupBy: newGroups };\n\n if (!shallowEqual(prevGroups, state.groupBy)) {\n this.setTableState(state);\n const evt = { current: state.groupBy, previous: prevGroups };\n this.buildGroupRulesMap();\n\n this.stateChange$.next({ type: 'group', state: evt });\n this.groupChange$.next(evt);\n }\n }\n\n /** Add group rules to the existing ones */\n addGroups(groupsToAdd: CollectionGroup[]): void {\n const prevState = this.getTableState();\n const prevGroups = (prevState && prevState.groupBy) || [];\n\n const newGroups: CollectionGroup[] = [\n ...prevGroups.filter((existing) => !groupsToAdd.find(({ field }) => field === existing.field)),\n ...groupsToAdd\n ];\n\n const state: TableState = { ...prevState, groupBy: newGroups };\n\n if (!shallowEqual(prevGroups, state.groupBy)) {\n this.setTableState(state);\n this.buildGroupRulesMap();\n\n const evt = { current: state.groupBy, previous: prevGroups };\n this.stateChange$.next({ type: 'group', state: evt });\n this.groupChange$.next(evt);\n }\n }\n\n /** Freeze table to column */\n freezeTo(columnName: string | null, end?: boolean): void {\n const prevState = this.getTableState();\n\n if (!end) {\n this.setTableState({ ...prevState, freezeToColumn: columnName });\n } else {\n this.setTableState({ ...prevState, freezeToEndColumn: columnName });\n }\n\n const evt = {\n current: columnName,\n previous: end ? prevState.freezeToEndColumn : prevState.freezeToColumn\n };\n\n this.stateChange$.next({ type: 'freeze', state: evt });\n this.freezeChange$.next(evt);\n }\n\n /** Set table columns */\n setColumns(columns: string[], keys: string[]): void {\n const prevState = this.getTableState();\n const prevColumns = (prevState && prevState.columns) || [];\n\n const newColumns = [...columns];\n const newColumnKeys = [...keys];\n const state: TableState = { ...prevState, columns: newColumns, columnKeys: newColumnKeys };\n\n if (!shallowEqual(prevColumns, state.columns)) {\n this.setTableState(state);\n\n const evt = { current: state.columns, previous: prevColumns };\n this.stateChange$.next({ type: 'columns', state: evt });\n this.columnsChange$.next(evt);\n }\n }\n\n /** Set page. */\n setCurrentPage(currentPage: number): void {\n const prevState = this.getTableState();\n const prevPageState = prevState.page;\n\n if (prevPageState.currentPage === currentPage) {\n return;\n }\n\n const state: TableState = setCurrentPageToState(prevState, currentPage);\n\n this.setTableState(state);\n const evt = { current: state.page, previous: prevPageState };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'page', state: evt });\n this.pageChange$.next(evt);\n }\n\n /** Set items per page. */\n setItemsPerPage(itemsPerPage: number, resetPageNumber = true): void {\n const prevState = this.getTableState();\n const prevPageState = prevState.page;\n\n if (prevPageState.pageSize === itemsPerPage) {\n return;\n }\n\n let state: TableState = setPageSizeToState(prevState, itemsPerPage);\n\n if (resetPageNumber) {\n state = setCurrentPageToState(state, 1);\n }\n\n this.setTableState(state);\n const evt = { current: state.page, previous: prevPageState };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'page', state: evt });\n this.pageChange$.next(evt);\n }\n\n /** Returns default table state. */\n getDefaultState(): TableState {\n const tableState = this.getTableState();\n return {\n columnKeys: tableState.columnKeys,\n sortBy: [],\n filterBy: [],\n groupBy: [],\n columns: tableState.columns,\n searchInput: {\n category: null,\n text: ''\n },\n freezeToColumn: null,\n freezeToEndColumn: null,\n page: {\n pageSize: 0,\n currentPage: 1\n },\n scrollTopPosition: 0\n };\n }\n\n /**\n * Shares visible columns array across listeners.\n * @param columns Visible columns to share.\n */\n setVisibleColumns(columns: TableColumn[]): void {\n this.visibleColumns$.set(columns);\n }\n\n /**\n * Shares popping columns array across listeners.\n * @param columns Popping columns to share.\n */\n setPoppingColumns(columns: TableColumn[]): void {\n this.poppingColumns$.set(columns);\n this._poppingColumnsLength = columns.length;\n }\n\n /**\n * Constructs grouping rules based on the table state.\n * @param state Table state.\n */\n buildGroupRulesMap(state = this.getTableState()): void {\n const groupMap = new Map(state.groupBy.map((rule) => [rule.field, rule]));\n this.groupRulesSubject.next(groupMap);\n }\n\n /**\n * Constructs sorting rules based on the table state.\n * @param state Table state\n */\n buildSortRulesMap(state = this.getTableState()): void {\n this.sortRules$.set(new Map(state.sortBy.filter((rule) => rule.field).map((rule) => [rule.field!, rule])));\n }\n\n /**\n * Constructs filter rules based on the table state.\n * @param state Table state.\n */\n buildFilterRulesMap(state = this.getTableState()): void {\n const filterRulesWithFieldNames = state.filterBy.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }));\n this.filterRules$.set(\n filterRulesWithFieldNames.reduce((hash, rule) => {\n const key = rule.field;\n if (!hash.has(key)) {\n hash.set(key, []);\n }\n hash.get(key)?.push(rule);\n return hash;\n }, new Map<string, CollectionFilter[]>())\n );\n const evt = { current: filterRulesWithFieldNames, previous: state.filterBy };\n\n this.stateChange$.next({ type: 'filter', state: evt });\n }\n\n /** Reset all filter rules */\n resetFilters(): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = [];\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n\n this.buildFilterRulesMap();\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /**\n * Constructs base table config.\n */\n constructTableMetadata(): void {\n this.buildGroupRulesMap();\n this.buildSortRulesMap();\n this.buildFilterRulesMap();\n }\n\n /** @hidden */\n private _getFieldName(field: string, fieldName: Nullable<string>): string {\n const column = this.tableColumns$.getValue().find((col) => col.key === field);\n return column ? column.name : (fieldName ?? field);\n }\n}\n\n/** @hidden */\nfunction setCurrentPageToState(state: TableState, currentPage: number): TableState {\n const newPageState: CollectionPage = { ...state.page, currentPage };\n return { ...state, page: newPageState };\n}\n\n/** @hidden */\nfunction setPageSizeToState(state: TableState, pageSize: number): TableState {\n const newPageState: CollectionPage = { ...state.page, pageSize };\n return { ...state, page: newPageState };\n}\n","import { DestroyRef, ElementRef, Inject, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { Table } from '../table';\nimport { TableColumn } from '../table-column';\nimport { TableService } from './table.service';\n\nexport interface FdpTableBreakpoint {\n min: number;\n max: number;\n visibility: FdpColumnResponsiveState;\n}\n\n@Injectable()\nexport class TableResponsiveService {\n /** @hidden */\n private readonly _responsiveBreakpoints = new Map<TableColumn, FdpTableBreakpoint[]>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _resizeSubscription: Subscription | undefined;\n\n /** @hidden */\n constructor(\n @Inject(Table) private readonly _table: Table,\n private readonly _tableService: TableService,\n private readonly _elmRef: ElementRef\n ) {}\n\n /**\n * Registers responsive column with it's breakpoint configuration.\n * @param column Table Column\n * @param breakpoints Breakpoint configuration.\n */\n registerResponsiveColumn(column: TableColumn, breakpoints: Record<string, FdpColumnResponsiveState>): void {\n this._responsiveBreakpoints.set(column, this._normalizeBreakpoints(breakpoints));\n\n this._listenToTableResize();\n }\n /**\n * @hidden\n * Transforms plain breakpoints into a list with minimal/maximal element width with it's visibility state.\n */\n private _normalizeBreakpoints(breakpoints: Record<string, FdpColumnResponsiveState>): FdpTableBreakpoint[] {\n const sortedBreakpoints = Object.keys(breakpoints)\n .map((i) => parseInt(i, 10))\n .sort((a, b) => a - b);\n const newBreakpoints = sortedBreakpoints.reduce((result: FdpTableBreakpoint[], value, index, array) => {\n result.push({\n min: value,\n max: index + 1 < array.length ? array[index + 1] - 1 : Infinity,\n visibility: breakpoints[value.toString()]\n });\n\n return result;\n }, []);\n\n return newBreakpoints;\n }\n\n /**\n * @hidden\n * Listens to the table element resize and calculates columns visibility based on the current breakpoint.\n */\n private _listenToTableResize(): void {\n this._resizeSubscription?.unsubscribe();\n\n this._resizeSubscription = resizeObservable(this._elmRef.nativeElement)\n .pipe(debounceTime(20), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._processResponsiveColumns();\n });\n }\n\n /** @hidden */\n private _processResponsiveColumns(): void {\n let shouldNotify = false;\n const { width } = this._elmRef.nativeElement.getBoundingClientRect();\n\n this._responsiveBreakpoints.forEach((breakpoints, item) => {\n const fittingBreakpoint = breakpoints.find(\n (breakpoint) => breakpoint.min <= width && breakpoint.max >= width\n );\n\n if (fittingBreakpoint) {\n shouldNotify = shouldNotify || item.responsiveState !== fittingBreakpoint.visibility;\n item.responsiveState = fittingBreakpoint.visibility;\n }\n });\n\n // Notify only when there's actual visibility changes to any of the columns.\n if (!shouldNotify) {\n return;\n }\n\n const currentTableColumns = this._table.getVisibleTableColumns().map((column) => column.name);\n\n this._tableService.stateChange$.next({\n type: 'columns',\n state: { previous: currentTableColumns, current: currentTableColumns }\n });\n\n this._tableService.columnsChange$.next({ previous: currentTableColumns, current: currentTableColumns });\n }\n}\n","import { Signal, TemplateRef } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { Observable } from 'rxjs';\nimport { ColumnAlignValue, FilterableColumnDataType } from './enums';\nimport { FdpColumnResponsiveState } from './interfaces';\n\nexport abstract class TableColumn {\n /** Column unique identifier. */\n abstract name: string;\n\n /** Column data accessor key. */\n abstract key: string;\n\n /** Column header label. */\n abstract label: string;\n\n /** Column footer label. */\n abstract footerLabel: string;\n\n /** Emits when the label value changes. */\n abstract labelValueChanges$: Observable<Nullable<string>>;\n\n /** Cell text alignment. */\n abstract align: ColumnAlignValue;\n\n /** Toggles sort feature in the column header. */\n abstract sortable: boolean;\n\n /** Toggles filter feature in the column header. */\n abstract filterable: boolean;\n\n /** Data type the column represents. */\n abstract dataType: FilterableColumnDataType;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n abstract filterSelectOptions: string[];\n\n /** Width of the column cells. */\n abstract width: string;\n\n /** Toggles grouping feature in the column header. */\n abstract groupable: boolean;\n\n /** Toggles freeze/unfreeze feature in the column header. */\n abstract freezable: boolean;\n\n /** Toggles end column freeze/unfreeze feature in the column header. */\n abstract endFreezable: boolean;\n\n /** Whether the table cell inside table header should be non-interactive. */\n abstract nonInteractive: boolean;\n\n /** Initial visibility state of the column. */\n abstract visible: boolean;\n\n /** Column cell template for readonly mode. */\n abstract columnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column cell template for editing mode. */\n abstract editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template. */\n abstract headerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template. */\n abstract footerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header popover template. */\n abstract headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Whether the text should wrap, when text is too long for 1 line. */\n abstract noWrap: boolean;\n\n /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n abstract applyText: boolean;\n\n /** Stores information for the header cell if the ellipsis are visible after the column resize */\n abstract headerOverflows: boolean; // Not being used anywhere, is here for information\n\n /** Whether this column is visible */\n abstract responsiveState: FdpColumnResponsiveState;\n /** Column role attribute. */\n abstract role: 'cell' | 'rowheader' | 'gridcell';\n\n /**\n * Whether to announce built-in empty cells to screen readers for columns with column templates.\n * This provides option to turn off the announcement if the column template already includes its own\n * */\n abstract announceEmptyCell: Signal<boolean>;\n\n /** @hidden */\n abstract _freezed: boolean;\n\n /** @hidden */\n abstract _endFreezed: boolean;\n}\n","import { Directive, Inject, Input, Optional } from '@angular/core';\nimport { shallowEqual } from 'fast-equals';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { TableResponsiveService } from '../services/table-responsive.service';\nimport { TableColumn } from '../table-column';\n\n@Directive({\n selector: '[fdpTableColumnResponsive]',\n standalone: true\n})\nexport class PlatformTableColumnResponsiveDirective {\n /**\n * Responsive breakpoints configuration.\n * @param value where key is minimal table with and value is a column visibility type.\n */\n @Input('fdpTableColumnResponsive')\n set breakpoints(value: Record<string, FdpColumnResponsiveState>) {\n if (shallowEqual(value, this._breakpoints) || !this._column) {\n return;\n }\n this._breakpoints = value;\n this._responsiveTableService.registerResponsiveColumn(this._column, this._breakpoints);\n }\n\n get breakpoints(): Record<number, FdpColumnResponsiveState> {\n return this._breakpoints;\n }\n\n /** @hidden */\n private _breakpoints: Record<number, FdpColumnResponsiveState> = {};\n\n /** @hidden */\n constructor(\n private readonly _responsiveTableService: TableResponsiveService,\n @Optional() @Inject(TableColumn) private readonly _column: TableColumn | null\n ) {}\n}\n","import { Directive, Signal, TemplateRef } from '@angular/core';\n\nexport interface TableCellHeaderPopoverDirectiveContext {\n $implicit: Signal<TemplateRef<any>[]>;\n}\n\n@Directive({\n selector: '[fdpTableCellHeaderPopover]',\n standalone: true\n})\nexport class TableCellHeaderPopoverDirective {\n /** @hidden */\n constructor(public templateRef: TemplateRef<TableCellHeaderPopoverDirectiveContext>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n directive: TableCellHeaderPopoverDirective,\n context: unknown\n ): context is TableCellHeaderPopoverDirectiveContext {\n return true;\n }\n}\n","import { ElementRef, Injectable, InjectionToken, OnDestroy } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nexport interface TableScrollable {\n /** Get scrollable ElementRef of. */\n elementRef: ElementRef<HTMLElement>;\n\n /** Returns observable that emits when a scroll event is fired on the host element. */\n getScrollStream(): Observable<Event>;\n\n /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n getVerticalScrollStream(): Observable<Event>;\n\n /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n getHorizontalScrollStream(): Observable<Event>;\n\n /** Returns scrollTop position of the host element. */\n getScrollTop(): number;\n\n /** Returns scrollLeft position of the host element. */\n getScrollLeft(): number;\n\n /** Set scrollTop position of the host element. */\n setScrollTop(scrollTop: number, emitEvent: boolean): void;\n\n /** Set scrollLeft position of the host element. */\n setScrollLeft(scrollLeft: number, emitEvent: boolean): void;\n\n /** Scrolls to overlapped cell. */\n scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void;\n\n /** Set Scroll Position during component initialization. */\n initializeScrollTop(scrollTop: number): void;\n}\n\nexport const TABLE_SCROLLABLE = new InjectionToken<TableScrollable>('Table Scrollable');\n\n@Injectable()\nexport class TableScrollDispatcherService implements OnDestroy {\n /** @hidden */\n private _scrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _verticalScrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _horizontalScrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _scrollableSubscriptionsMap: Map<TableScrollable, Subscription> = new Map();\n\n /** @hidden */\n register(scrollable: TableScrollable): void {\n if (this._scrollableSubscriptionsMap.has(scrollable)) {\n return;\n }\n\n const sub = new Subscription();\n sub.add(scrollable.getScrollStream().subscribe(() => this._scrollSubject.next(scrollable)));\n sub.add(scrollable.getHorizontalScrollStream().subscribe(() => this._horizontalScrollSubject.next(scrollable)));\n sub.add(scrollable.getVerticalScrollStream().subscribe(() => this._verticalScrollSubject.next(scrollable)));\n\n this._scrollableSubscriptionsMap.set(scrollable, sub);\n }\n\n /** @hidden */\n deregister(scrollable: TableScrollable): void {\n if (!this._scrollableSubscriptionsMap.has(scrollable)) {\n return;\n }\n\n this._scrollableSubscriptionsMap.get(scrollable)?.unsubscribe();\n }\n\n /** Scroll stream */\n scrolled(): Observable<TableScrollable> {\n return this._scrollSubject.asObservable();\n }\n\n /** Horizontal scroll stream */\n horizontallyScrolled(): Observable<TableScrollable> {\n return this._horizontalScrollSubject.asObservable();\n }\n\n /** Vertical scroll stream */\n verticallyScrolled(): Observable<TableScrollable> {\n return this._verticalScrollSubject.asObservable();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n Array.from(this._scrollableSubscriptionsMap.values()).forEach((subscription) => subscription.unsubscribe());\n\n this._scrollableSubscriptionsMap.clear();\n }\n}\n","import { DestroyRef, ElementRef, Injectable, OnDestroy, computed, inject, signal } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Table } from '../table';\nimport { TableScrollDispatcherService } from './table-scroll-dispatcher.service';\n\nexport const TABLE_RESIZER_BORDER_WIDTH = 3;\n\n/**\n * Service to handle all things related to column resizing:\n * - Setting resizer\n * - Processing resize\n * - Calculating the real columns width\n */\n@Injectable()\nexport class TableColumnResizeService implements OnDestroy {\n /** Subject that emits new map of fixed columns and their respective width. */\n readonly fixedColumsWidthChange = new BehaviorSubject<Map<string, string>>(new Map());\n /** Indicate if resizing process in progress. */\n get resizeInProgress(): boolean {\n return this._resizeInProgress;\n }\n\n /** Resize progress stream. */\n readonly resizeInProgress$ = new BehaviorSubject<boolean>(false);\n\n /** Whether cell mock should be visible. */\n readonly cellMockVisible$ = signal(false);\n\n /** Current column resizer position. */\n get resizerPosition(): number {\n return this._resizerPosition ?? 0;\n }\n\n /** Resizer position stream. */\n readonly resizerPosition$ = new BehaviorSubject<number>(0);\n\n /** Observable to notify to run CD */\n get markForCheck(): Observable<void> {\n return this._markForCheck.asObservable();\n }\n\n /** table has fixed width if all of it's columns are fixed */\n get fixedWidth(): boolean {\n return this._fixedColumnsWidthMap.size === this._visibleColumnNames.length;\n }\n\n /** @hidden */\n private _fixedColumnsWidthMap = new Map<string, string>();\n\n /** @hidden */\n private _columnsCellMap = new Map<string, ElementRef<HTMLTableDataCellElement>[]>();\n\n /** @hidden */\n private _visibleColumnNames: string[] = [];\n\n /** @hidden */\n private _visibleColumnLeftNeighbourMap = new Map<string, string | undefined>();\n\n /** @hidden */\n private _visibleColumnRightNeighbourMap = new Map<string, string | undefined>();\n\n /** @hidden */\n private _visibleColumnLeftOffsetPxMap = new Map<string, number>();\n\n /** @hidden */\n private _visibleColumnRightOffsetPxMap = new Map<string, number>();\n\n /** @hidden */\n private _startX: number | null = null;\n\n /** @hidden */\n private _clientStartX: number | null = null;\n\n /** @hidden */\n private _resizeInProgress = this.resizeInProgress$.value;\n\n /** @hidden */\n private _resizedColumn: string;\n\n /** @hidden */\n private _resizerPosition: number | null = null;\n\n /** @hidden */\n private _scrollLeft = 0;\n\n /** @hidden */\n private _markForCheck = new Subject<void>();\n\n /** @hidden */\n private _destroyed = inject(DestroyRef);\n\n /** @hidden */\n private _resizerMoveSubscription = new Subscription();\n\n /** @hidden */\n private _tableRef: Table;\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n constructor(private readonly _tableScrollDispatcherService: TableScrollDispatcherService) {\n this._tableScrollDispatcherService\n ?.horizontallyScrolled()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe((scrollable) => {\n this.resizerPosition$.next(0);\n this._scrollLeft = scrollable.getScrollLeft();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._resizeInProgress = false;\n this.resizeInProgress$.next(false);\n\n this._resizerMoveSubscription.unsubscribe();\n }\n\n /** @hidden */\n setTableRef(ref: Table): void {\n this._tableRef = ref;\n }\n\n /** @hidden initializes service with data, trigger columns width calculation. */\n setColumnNames(visibleColumnNames: string[]): void {\n this._visibleColumnLeftNeighbourMap.clear();\n this._visibleColumnRightNeighbourMap.clear();\n visibleColumnNames.forEach((column, index) => {\n this._visibleColumnLeftNeighbourMap.set(column, visibleColumnNames[index - 1]);\n });\n visibleColumnNames.reverse().forEach((column, index) => {\n this._visibleColumnRightNeighbourMap.set(column, visibleColumnNames[index - 1]);\n });\n this._visibleColumnNames = [...visibleColumnNames];\n this.updateFrozenColumnsWidth();\n }\n\n /** @hidden */\n updateFrozenColumnsWidth(): void {\n let allPreviousWidths = 0,\n allNextWidths = 0;\n for (const [column, prevColumn] of this._visibleColumnLeftNeighbourMap.entries()) {\n allPreviousWidths +=\n this._columnsCellMap.get(prevColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n this._visibleColumnLeftOffsetPxMap.set(column, allPreviousWidths);\n }\n for (const [column, nextColumn] of this._visibleColumnRightNeighbourMap.entries()) {\n allNextWidths +=\n this._columnsCellMap.get(nextColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n this._visibleColumnRightOffsetPxMap.set(column, allNextWidths);\n }\n }\n\n /** @hidden */\n updateFrozenColumnsWidthAfterResize(columnName: string, diffX: number): void {\n let found = false;\n for (const [column, width] of this._visibleColumnLeftOffsetPxMap.entries()) {\n if (column === columnName) {\n found = true;\n } else if (found) {\n this._visibleColumnLeftOffsetPxMap.set(column, width + diffX);\n }\n }\n }\n\n /** Retrieves custom column value or returns `unset` */\n getColumnWidthStyle(columnName: string): string {\n const calculatedWidth = this._fixedColumnsWidthMap.get(columnName);\n return calculatedWidth || 'unset';\n }\n\n /** Previous column name */\n getPreviousColumnName(columnName: string): string | undefined {\n return this._visibleColumnLeftNeighbourMap.get(columnName);\n }\n\n /** Previous column name */\n getNextColumnName(columnName: string): string | undefined {\n return this._visibleColumnRightNeighbourMap.get(columnName);\n }\n\n /** Overall previous columns width. Used to calculate offset for the absolute positioned cells. */\n getPrevColumnsWidth(columnName: string): number {\n return this._visibleColumnLeftOffsetPxMap.get(columnName) ?? 0;\n }\n\n /** Overall next columns width. Used to calculate offset for the absolute positioned cells. */\n getNextColumnsWidth(columnName: string): number {\n return this._visibleColumnRightOffsetPxMap.get(columnName) ?? 0;\n }\n\n /** Register column's cell to get its dimensions in further. */\n registerColumnCell(columnName: string, cellElRef: ElementRef): void {\n const columnCells = this._columnsCellMap.get(columnName) || [];\n this._columnsCellMap.set(columnName, [cellElRef, ...columnCells]);\n }\n\n /** Unregister column's cell. */\n unregisterColumnCell(columnName: string, cellElRef: ElementRef): void {\n const columnCells = this._columnsCellMap.get(columnName) || [];\n const elmIndex = columnCells.findIndex((e) => e.nativeElement === cellElRef.nativeElement);\n\n if (elmIndex === -1) {\n return;\n }\n\n columnCells.splice(elmIndex, 1);\n\n this._columnsCellMap.set(columnName, columnCells);\n }\n\n /** Register the value of column width that changed from input */\n setCustomWidth(columnName: string, value: string): void {\n this._fixedColumnsWidthMap.set(columnName, value);\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n }\n\n /** Set the appropriate column resizer position. */\n setInitialResizerPosition(resizerPosition: number, resizedColumn: string): void {\n if (this.resizeInProgress) {\n return;\n }\n\n this._resizedColumn = resizedColumn;\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n\n if (resizerPosition != null) {\n const scrollLeftOffset = this._scrollLeft * (this._isRtl() ? 1 : -1);\n this._resizerPosition = resizerPosition - TABLE_RESIZER_BORDER_WIDTH + scrollLeftOffset;\n this.resizerPosition$.next(this.resizerPosition);\n }\n\n this._markForCheck.next();\n }\n\n /** Hide the column resizer. */\n hideResizer(): void {\n if (this._resizeInProgress) {\n return;\n }\n\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n this._markForCheck.next();\n }\n\n /** Handle start resizing. */\n startResize(event: MouseEvent): void {\n this._startX = this.resizerPosition;\n this._clientStartX = event.clientX;\n\n this._updateResizerPositionOnMouseMove();\n\n this._resizeInProgress = true;\n this.resizeInProgress$.next(true);\n }\n\n /** Handle end resizing. */\n finishResize(event: MouseEvent): void {\n this._resizerMoveSubscription.unsubscribe();\n\n this._resizeInProgress = false;\n this.resizeInProgress$.next(false);\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n\n if (this._startX != null) {\n const clientStartX = this._clientStartX ?? 0;\n const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n this._processResize(diffX);\n }\n\n this._startX = null;\n this._clientStartX = null;\n\n this._markForCheck.next();\n }\n\n /** Update columns width after resizing, prevent from having too small columns. */\n _processResize(diffX: number): void {\n const resizedElement = this._columnsCellMap.get(this._resizedColumn)?.[0]?.nativeElement;\n const columnWidth = resizedElement?.getBoundingClientRect().width;\n\n if (!columnWidth || !resizedElement) {\n return;\n }\n\n if (diffX < 0 && columnWidth + diffX < this._tableRef.minimumColumnWidth) {\n diffX = this._tableRef.minimumColumnWidth - columnWidth;\n }\n\n if (!this.fixedWidth) {\n for (const [columnName, cells] of this._columnsCellMap.entries()) {\n if (cells.length) {\n this._fixedColumnsWidthMap.set(\n columnName,\n cells[0].nativeElement.getBoundingClientRect().width + 'px'\n );\n }\n }\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n }\n\n /**\n * In case \"_resizedColumn\" is freezable, make sure the overall width of freezable columns does not exceed the width of the table.\n * If it does, columns will be made unfrozen.\n */\n if (\n diffX > 0 &&\n (this._tableRef._freezableColumns.has(this._resizedColumn) ||\n this._tableRef._freezableEndColumns?.has(this._resizedColumn))\n ) {\n let actualWidth = this.getPrevColumnsWidth(this._resizedColumn) + columnWidth;\n if (this._tableRef._freezableEndColumns?.has(this._resizedColumn)) {\n actualWidth = this.getNextColumnsWidth(this._resizedColumn) + columnWidth;\n }\n const newWidth = actualWidth + diffX;\n const maxWidth = this._tableRef.getMaxAllowedFreezableColumnsWidth();\n if (newWidth >= maxWidth) {\n this._tableRef._freezableColumns.forEach((column) => {\n this._tableRef.unfreeze(column.toString());\n });\n }\n }\n\n const updatedWidth = columnWidth + diffX;\n this._fixedColumnsWidthMap.set(this._resizedColumn, updatedWidth + 'px');\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n this.updateFrozenColumnsWidthAfterResize(this._resizedColumn, diffX);\n\n const computedStyles = window.getComputedStyle(resizedElement);\n const padding = parseInt(computedStyles.paddingLeft, 10) + parseInt(computedStyles.paddingRight, 10);\n this._updateHeaderOverflowState(updatedWidth - padding);\n this._markForCheck.next();\n }\n\n /** Update column resizer position. */\n private _updateResizerPositionOnMouseMove(): void {\n this._resizerMoveSubscription = fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(debounceTime(10))\n .subscribe((event) => {\n const clientStartX = this._clientStartX ?? 0;\n const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n this._resizerPosition = (this._startX ?? 0) + diffX;\n this.resizerPosition$.next(this.resizerPosition);\n\n this._markForCheck.next();\n });\n }\n\n /**\n * Check if the header text length goes over the column width. In such case applies text truncation with\n * ellipsis and make sure we also show a tooltip.\n *\n * @private\n */\n private _updateHeaderOverflowState(updatedWidth: number): void {\n const element = this._columnsCellMap\n .get(this._resizedColumn)\n ?.find((c) => c?.nativeElement.tagName === 'TH')?.nativeElement;\n const visibleColumn = this._tableRef.getVisibleTableColumns().find((c) => c.name === this._resizedColumn);\n const headerTextElem = element?.querySelector(`#${this._tableRef.id}-header-cell-${this._resizedColumn}`);\n\n if (!headerTextElem || !visibleColumn) {\n return;\n }\n visibleColumn.headerOverflows = headerTextElem.scrollWidth > updatedWidth;\n }\n}\n","import { AfterViewInit, computed, Directive, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FDK_FOCUSABLE_ITEM_DIRECTIVE, FocusableItemDirective, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective } from '@fundamental-ngx/core/table';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\n\nexport type TableColumnResizableSide = 'start' | 'end' | 'both';\n\nexport const TABLE_CELL_RESIZABLE_THRESHOLD_PX = 4;\n\n/**\n * Tracks mouse movement over the cell if the mouse pointer near the side of the cell, informs resize service.\n */\n@Directive({\n selector: '[fdpTableCellResizable]',\n standalone: true,\n providers: [\n {\n provide: FDK_FOCUSABLE_ITEM_DIRECTIVE,\n useExisting: PlatformTableCellResizableDirective\n },\n {\n provide: FocusableItemDirective,\n useExisting: PlatformTableCellResizableDirective\n },\n {\n provide: TableCellDirective,\n useExisting: PlatformTableCellResizableDirective\n }\n ]\n})\nexport class PlatformTableCellResizableDirective\n extends TableCellDirective\n implements OnInit, AfterViewInit, OnDestroy\n{\n /** First column can be resized only by its end */\n @Input('fdpTableCellResizable')\n set resizableSide(value: TableColumnResizableSide) {\n if (!value) {\n return;\n }\n\n this._resizableSide = value;\n }\n\n /** Column name */\n @Input()\n columnName: string;\n\n /** @hidden */\n private _resizableSide: TableColumnResizableSide = 'both';\n\n /** @hidden */\n private readonly _isRtl = computed(() => !!this._rtlService?.rtl());\n\n /** @hidden */\n private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousemove')\n .pipe(\n filter(() => this._tableColumnResizeService?.resizeInProgress !== true),\n debounceTime(5),\n map((event) => this._getResizer(event) || { resizerPosition: 0, resizedColumn: this.columnName }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((data) => {\n this._tableColumnResizeService.setInitialResizerPosition(data.resizerPosition, data.resizedColumn);\n });\n fromEvent<FocusEvent>(this.elementRef.nativeElement, 'focus')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._tableColumnResizeService.setInitialResizerPosition(0, this.columnName);\n });\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.columnName == null) {\n return;\n }\n\n this._tableColumnResizeService?.registerColumnCell(this.columnName, this.elementRef);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._tableColumnResizeService?.unregisterColumnCell(this.columnName, this.elementRef);\n }\n\n /** @hidden */\n private _getResizer(event: MouseEvent): { resizerPosition: number; resizedColumn: string } | null {\n const el = this.elementRef.nativeElement;\n const elPosition = el.getBoundingClientRect();\n // check if mouse is within 5px of cell border\n if (event.clientX > elPosition.x + elPosition.width - 5 || event.clientX < elPosition.x + 5) {\n let resizerPosition: number | undefined;\n let resizedColumn: string | undefined;\n\n const pointerOnLeft = this._isRtl()\n ? elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n : event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n if (pointerOnLeft && this._resizableSide !== 'end') {\n resizerPosition = this._isRtl()\n ? el.parentElement!.offsetWidth - (el.offsetLeft + el.offsetWidth)\n : el.offsetLeft;\n\n resizedColumn = this._tableColumnResizeService.getPreviousColumnName(this.columnName);\n }\n\n const pointerOnRight = this._isRtl()\n ? event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n : elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n if (pointerOnRight && this._resizableSide !== 'start') {\n resizerPosition = this._isRtl()\n ? el.parentElement!.offsetWidth - el.offsetLeft\n : el.offsetLeft + el.offsetWidth;\n\n resizedColumn = this.columnName;\n }\n\n if (!resizedColumn) {\n return null;\n }\n\n return { resizerPosition: resizerPosition!, resizedColumn };\n } else {\n return null;\n }\n }\n}\n","import { NgForm } from '@angular/forms';\n\nexport abstract class EditableTableCell {\n abstract form: NgForm;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport interface FdpCellDefContext<T = any> {\n $implicit: T;\n popping: boolean;\n rowIndex: number;\n}\n\n/** Column cell container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-cell', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableCell {}\n\n/**\n * Cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpCellDef<T = any> {\n /** Property to support typings. */\n @Input()\n fdpCellDefAs: T;\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n /** @hidden */\n static ngTemplateContextGuard<T>(dir: FdpCellDef<T>, ctx: FdpCellDefContext): ctx is FdpCellDefContext<T> {\n return true;\n }\n}\n\n@Directive({ selector: '[fdpEditableCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpEditableCellDef {\n /** @hidden */\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n selector: '[fdpEditableCellForm]',\n standalone: true,\n providers: [{ provide: EditableTableCell, useExisting: FdpEditableCellFormDirective }]\n})\nexport class FdpEditableCellFormDirective implements EditableTableCell {\n /** @hidden */\n constructor(public form: NgForm) {}\n}\n","export enum FilterType {\n INPUT = 'input',\n SINGLE = 'single-select',\n MULTI = 'multi-select',\n CATEGORY = 'category',\n CUSTOM = 'custom'\n}\n\nexport enum FilterableColumnDataType {\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n DATE = 'date'\n}\n","import { FdLanguageKeyIdentifier } from '@fundamental-ngx/i18n';\nimport { FilterableColumnDataType } from './filter-type.enum';\n\n/** All possible strategies */\nexport const FILTER_STRATEGY = {\n EQ: 'equalTo',\n CONTAINS: 'contains',\n BETWEEN: 'between',\n BEGINS_WITH: 'beginsWith',\n ENDS_WITH: 'endsWith',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo',\n AFTER: 'after',\n ON_OR_AFTER: 'onOrAfter',\n BEFORE: 'before',\n BEFORE_OR_ON: 'beforeOrOn'\n} as const;\n\ntype FilterStrategyType = typeof FILTER_STRATEGY;\n\nexport type FilterStrategy = FilterStrategyType[keyof FilterStrategyType];\n\nexport const FILTER_STRATEGY_LABEL: Record<FilterStrategy, FdLanguageKeyIdentifier> = {\n equalTo: 'platformTable.P13FilterStrategyLabelEqualTo',\n contains: 'platformTable.P13FilterStrategyLabelContains',\n between: 'platformTable.P13FilterStrategyLabelBetween',\n beginsWith: 'platformTable.P13FilterStrategyLabelBeginsWith',\n endsWith: 'platformTable.P13FilterStrategyLabelEndsWith',\n greaterThan: 'platformTable.P13FilterStrategyLabelGreaterThan',\n greaterThanOrEqualTo: 'platformTable.P13FilterStrategyLabelGreaterThanOrEqualTo',\n lessThan: 'platformTable.P13FilterStrategyLabelLessThan',\n lessThanOrEqualTo: 'platformTable.P13FilterStrategyLabelLessThanOrEqualTo',\n after: 'platformTable.P13FilterStrategyLabelAfter',\n onOrAfter: 'platformTable.P13FilterStrategyLabelOnOrAfter',\n before: 'platformTable.P13FilterStrategyLabelBefore',\n beforeOrOn: 'platformTable.P13FilterStrategyLabelBeforeOrOn'\n};\n\n/** Date Filter Strategies */\nexport const FILTER_DATE_STRATEGY: Pick<\n FilterStrategyType,\n 'BETWEEN' | 'EQ' | 'AFTER' | 'ON_OR_AFTER' | 'BEFORE' | 'BEFORE_OR_ON'\n> = {\n EQ: 'equalTo',\n BETWEEN: 'between',\n AFTER: 'after',\n ON_OR_AFTER: 'onOrAfter',\n BEFORE: 'before',\n BEFORE_OR_ON: 'beforeOrOn'\n};\n\nexport type FilterDateStrategy = (typeof FILTER_DATE_STRATEGY)[keyof typeof FILTER_DATE_STRATEGY];\n\nexport const FILTER_DATE_STRATEGIES: ReadonlyArray<FilterDateStrategy> = Object.values(FILTER_DATE_STRATEGY);\n\n/** Number Filter Strategies */\nexport const FILTER_NUMBER_STRATEGY: Pick<FilterStrategyType, 'BETWEEN' | 'EQ' | 'GT' | 'GTE' | 'LT' | 'LTE'> = {\n EQ: 'equalTo',\n BETWEEN: 'between',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterNumberStrategy = (typeof FILTER_NUMBER_STRATEGY)[keyof typeof FILTER_NUMBER_STRATEGY];\n\nexport const FILTER_NUMBER_STRATEGIES: ReadonlyArray<FilterNumberStrategy> = Object.values(FILTER_NUMBER_STRATEGY);\n\n/** String Filter Strategies */\nexport const FILTER_STRING_STRATEGY: Pick<\n FilterStrategyType,\n 'BETWEEN' | 'CONTAINS' | 'EQ' | 'BEGINS_WITH' | 'ENDS_WITH' | 'GT' | 'GTE' | 'LT' | 'LTE'\n> = {\n CONTAINS: 'contains',\n EQ: 'equalTo',\n BEGINS_WITH: 'beginsWith',\n BETWEEN: 'between',\n ENDS_WITH: 'endsWith',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterAllStrategy = (typeof FILTER_STRATEGY)[keyof typeof FILTER_STRATEGY];\n\nexport type FilterStringStrategy = (typeof FILTER_STRING_STRATEGY)[keyof typeof FILTER_STRING_STRATEGY];\n\nexport const FILTER_STRING_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_STRING_STRATEGY);\n\n/** Boolean Filter Strategies */\nexport const FILTER_BOOLEAN_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n EQ: 'equalTo'\n};\n\nexport type FilterBooleanStrategy = (typeof FILTER_BOOLEAN_STRATEGY)[keyof typeof FILTER_BOOLEAN_STRATEGY];\n\nexport const FILTER_BOOLEAN_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_BOOLEAN_STRATEGY);\n\n/** Default Filter Strategies for undefined data type */\nexport const FILTER_DEFAULT_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n EQ: 'equalTo'\n};\n\nexport type FilterDefaultStrategy = (typeof FILTER_DEFAULT_STRATEGY)[keyof typeof FILTER_DEFAULT_STRATEGY];\n\nexport const FILTER_DEFAULT_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_DEFAULT_STRATEGY);\n\n// Get Possible strategies based on data type\nexport const getFilterStrategiesBasedOnDataType = (\n dataType: FilterableColumnDataType\n): readonly FilterStringStrategy[] | readonly FilterDateStrategy[] => {\n switch (dataType) {\n case FilterableColumnDataType.STRING:\n return FILTER_STRING_STRATEGIES;\n case FilterableColumnDataType.NUMBER:\n return FILTER_NUMBER_STRATEGIES;\n case FilterableColumnDataType.DATE:\n return FILTER_DATE_STRATEGIES;\n case FilterableColumnDataType.BOOLEAN:\n return FILTER_BOOLEAN_STRATEGIES;\n\n default:\n return FILTER_DEFAULT_STRATEGIES;\n }\n};\n","export enum ColumnAlign {\n START = 'start',\n CENTER = 'center',\n END = 'end'\n}\n\nexport type ColumnAlignValue = 'start' | 'center' | 'end';\n","export enum TableRowType {\n ITEM = 'item',\n GROUP = 'group',\n TREE = 'tree'\n}\n","export enum SelectionMode {\n SINGLE = 'single',\n MULTIPLE = 'multiple',\n NONE = 'none'\n}\n\nexport type SelectionModeValue = 'single' | 'multiple' | 'none';\n","export enum SortDirection {\n NONE = 'none',\n ASC = 'asc',\n DESC = 'desc'\n}\n","import { get } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FILTER_DATE_STRATEGY, FILTER_NUMBER_STRATEGY, FILTER_STRING_STRATEGY } from './enums';\nimport {\n CollectionBooleanFilter,\n CollectionDateFilter,\n CollectionFilter,\n CollectionNumberFilter,\n CollectionStringFilter\n} from './interfaces';\nimport { TableRow } from './models/table-row.model';\n\nexport const filterByString = (rows: TableRow[], filter: CollectionStringFilter): TableRow[] => {\n const filterValue = filter.value && filter.value.toLocaleLowerCase();\n const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n\n switch (filter.strategy) {\n case FILTER_STRING_STRATEGY.EQ:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() === filterValue);\n case FILTER_STRING_STRATEGY.GT:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() > filterValue);\n case FILTER_STRING_STRATEGY.GTE:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() >= filterValue);\n case FILTER_STRING_STRATEGY.LT:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() < filterValue);\n case FILTER_STRING_STRATEGY.LTE:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() <= filterValue);\n case FILTER_STRING_STRATEGY.BETWEEN:\n return rows.filter((r) => {\n const rowValue = get(r.value, filter.field).toLocaleLowerCase();\n return rowValue >= filterValue && rowValue <= filterValue2;\n });\n case FILTER_STRING_STRATEGY.BEGINS_WITH:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().startsWith(filterValue));\n case FILTER_STRING_STRATEGY.ENDS_WITH:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().endsWith(filterValue));\n case FILTER_STRING_STRATEGY.CONTAINS:\n default:\n return rows.filter((r) => {\n let rowValue = get(r.value, filter.field);\n if (typeof rowValue === 'number') {\n rowValue = rowValue.toString();\n }\n\n return rowValue.toLocaleLowerCase().includes(filterValue);\n });\n }\n};\n\nexport const filterByNumber = (rows: TableRow[], filter: CollectionNumberFilter): TableRow[] => {\n const filterValue = filter.value;\n const filterValue2 = filter.value2 || 0;\n\n switch (filter.strategy) {\n case FILTER_NUMBER_STRATEGY.EQ:\n return rows.filter((r) => get(r.value, filter.field) === filterValue);\n case FILTER_NUMBER_STRATEGY.GT:\n return rows.filter((r) => get(r.value, filter.field) > filterValue);\n case FILTER_NUMBER_STRATEGY.GTE:\n return rows.filter((r) => get(r.value, filter.field) >= filterValue);\n case FILTER_NUMBER_STRATEGY.LT:\n return rows.filter((r) => get(r.value, filter.field) < filterValue);\n case FILTER_NUMBER_STRATEGY.LTE:\n return rows.filter((r) => get(r.value, filter.field) <= filterValue);\n case FILTER_NUMBER_STRATEGY.BETWEEN:\n return rows.filter((r) => {\n const rowValue = get(r.value, filter.field);\n return rowValue >= filterValue && rowValue <= filterValue2;\n });\n default:\n return rows.filter((r) => get(r.value, filter.field).toString().includes(filterValue));\n }\n};\n\nexport const filterByDate = <D = any>(\n rows: TableRow[],\n filter: CollectionDateFilter,\n adapter: DatetimeAdapter<D>\n): TableRow[] => {\n const filterValue = filter.value;\n const filterValue2 = filter.value2;\n\n switch (filter.strategy) {\n case FILTER_DATE_STRATEGY.AFTER:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) > 0);\n case FILTER_DATE_STRATEGY.ON_OR_AFTER:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) >= 0);\n case FILTER_DATE_STRATEGY.BEFORE:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) < 0);\n case FILTER_DATE_STRATEGY.BEFORE_OR_ON:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) <= 0);\n case FILTER_DATE_STRATEGY.BETWEEN:\n return rows.filter((r) => adapter.isBetween(get(r.value, filter.field), filterValue, filterValue2));\n case FILTER_DATE_STRATEGY.EQ:\n default:\n return rows.filter((r) => adapter.dateTimesEqual(get(r.value, filter.field), filterValue));\n }\n};\n\nexport const filterByBoolean = (rows: TableRow[], filter: CollectionBooleanFilter): TableRow[] =>\n rows.filter((r) => get(r.value, filter.field) === filter.value);\n\nexport const getUniqueListValuesByKey = <T, K extends keyof T>(list: T[], key: K): T[] =>\n Array.from(\n list\n .reduce((map, item) => {\n map.delete(item[key]);\n map.set(item[key], item);\n return map;\n }, new Map<T[K], T>())\n .values()\n );\n\nexport const getScrollBarWidth = (document: Document): number => {\n const div = document.createElement('div');\n div.textContent = 'W';\n div.style.position = 'absolute';\n div.style.visibility = 'hidden';\n div.style.overflowY = 'scroll';\n document.body.appendChild(div);\n const scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n return scrollbarWidth;\n};\n\n/** @hidden */\nexport function isCollectionFilter(item: any): item is CollectionFilter {\n return item.type !== undefined && item.strategy !== undefined && item.value !== undefined;\n}\n","import { DatetimeAdapter, FdDate } from '@fundamental-ngx/core/datetime';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { SelectItem, isSelectItem } from '@fundamental-ngx/platform/shared';\nimport { Observable, Subject } from 'rxjs';\nimport { map, take, takeUntil } from 'rxjs/operators';\nimport {\n CollectionBooleanFilter,\n CollectionDateFilter,\n CollectionFilter,\n CollectionFilterAndGroup,\n CollectionFilterGroup,\n CollectionNumberFilter,\n CollectionSelectFilter,\n CollectionStringFilter\n} from '../interfaces/collection-filter.interface';\n\nimport { get } from '@fundamental-ngx/cdk/utils';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { isCollectionFilter } from '../utils';\n\nexport abstract class BaseTableDataProvider<T, P = T[]> {\n abstract fetch(state?: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n\n abstract fetchData(state: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n /** Total items count. */\n totalItems: number;\n /** Array of items. */\n items: P;\n\n /** Date time adapter for date field filtering. */\n dateTimeAdapter?: DatetimeAdapter<any>;\n /** Additional set of filters provided by outside component. */\n protected filterBy: CollectionFilterAndGroup[];\n\n /** Additional search query provided by outside component. */\n protected searchInput?: SearchInput;\n\n /** @hidden */\n protected _destroy$ = new Subject<void>();\n\n /**\n * Method for setting external filtering conditions.\n * @param filterBy Set of column filters.\n * @param searchInput Search condition from search field.\n */\n setFilters(filterBy: CollectionFilterAndGroup[], searchInput?: SearchInput): void {\n this.filterBy = filterBy;\n this.searchInput = searchInput;\n }\n\n /**\n * Method for filtering the data.\n * @param items Array of data source items.\n * @param filters Set of column filters.\n * @returns Array of filtered items.\n */\n applyFiltering(items: T[], filters: CollectionFilterAndGroup[]): T[] {\n items = items.filter((i) => this.getFilteringStrategy(i, filters));\n return items;\n }\n\n /** @hidden */\n getSelectItemValue(item: any): any {\n return isSelectItem(item) ? item.value : item;\n }\n\n /**\n * Method which selects appropriate filtering strategy of the field depending on the filter type.\n * Developers can override this method to extend the filtering functionality.\n * @param item item of the data source.\n * @param filters Set of column filters.\n * @returns Whether or not item should be included in data array.\n */\n getFilteringStrategy(item: T, filters: CollectionFilterAndGroup[]): boolean {\n return filters\n .filter((condition) => condition.field)\n .every((filter) => {\n if (isCollectionFilter(filter)) {\n return this.collectionFilterStrategy(item, filter);\n }\n\n return this.collectionFilterGroupStrategy(item, filter);\n });\n }\n\n /**\n * Method which filters item depending on applied condition result.\n * Developers can override this method to extend its functionality\n * @param item Item to apply conditions to.\n * @param filter Column filter.\n * @returns {boolean} Whether this item should be present in filtered array of items.\n */\n collectionFilterStrategy(item: T, filter: CollectionFilter): boolean {\n let result: boolean;\n\n switch (filter.type) {\n case 'boolean':\n result = this.filterBoolean(item, filter as CollectionBooleanFilter);\n break;\n case 'number':\n result = this.filterNumber(item, filter as CollectionNumberFilter);\n break;\n case 'date': {\n result = this.filterDate(item, filter as CollectionDateFilter, this.dateTimeAdapter);\n break;\n }\n case 'string':\n default:\n result = Array.isArray(filter.value)\n ? this.filterArray(item, filter as CollectionSelectFilter)\n : this.filterString(item, filter as CollectionStringFilter);\n break;\n }\n\n return result;\n }\n\n /**\n * Method which applies group filtering conditions for the item.\n * @param item Item to apply conditions to.\n * @param filter Filter group.\n * @returns {boolean} Whether this item should be present in filtered items array.\n */\n collectionFilterGroupStrategy(item: T, filter: CollectionFilterGroup): boolean {\n return filter.strategy === 'and'\n ? filter.filters.every((f) => this.collectionFilterStrategy(item, f))\n : filter.filters.some((f) => this.collectionFilterStrategy(item, f));\n }\n\n /**\n * Applies search of the search term for visible table columns.\n * Developers can override this method to extend the filtering functionality.\n * @param items data source items array.\n * @param tableState @see TableState Set of table parameters.\n * @returns filtered data source items array.\n */\n search(items: T[], { searchInput, columnKeys }: TableState): T[] {\n const searchText = searchInput?.text || '';\n const keysToSearchBy = columnKeys;\n\n if (searchText.trim() === '' || keysToSearchBy.length === 0) {\n return items;\n }\n\n items = items.filter((item) => {\n const valuesForSearch = keysToSearchBy.map((key) => get(item, key));\n\n return valuesForSearch\n .filter((value) => !!value)\n .map((value): string => value.toString())\n .some((value) => value.toLocaleLowerCase().includes(searchText.toLocaleLowerCase()));\n });\n\n return items;\n }\n\n /**\n * String filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterString(item: T, filter: CollectionStringFilter): boolean {\n const filterValue = filter.value && filter.value.toLocaleLowerCase();\n const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n let itemValue = get(item, filter.field);\n\n itemValue = itemValue ? itemValue.toLocaleLowerCase() : itemValue;\n\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n result = itemValue === filterValue;\n break;\n case 'greaterThan':\n result = itemValue > filterValue;\n break;\n case 'greaterThanOrEqualTo':\n result = itemValue >= filterValue;\n break;\n case 'lessThan':\n result = itemValue < filterValue;\n break;\n case 'lessThanOrEqualTo':\n result = itemValue <= filterValue;\n break;\n case 'between':\n result = itemValue >= filterValue && itemValue <= filterValue2;\n break;\n case 'beginsWith':\n result = itemValue.startsWith(filterValue);\n break;\n case 'endsWith':\n result = itemValue.endsWith(filterValue);\n break;\n case 'contains':\n default:\n result = itemValue ? itemValue.includes(filterValue) : itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Number filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterNumber(item: T, filter: CollectionNumberFilter): boolean {\n const filterValue = Number.parseFloat(filter.value as unknown as string);\n const filterValue2 = Number.parseFloat(filter.value2 as unknown as string) || 0;\n const itemValue = Number.parseFloat(get(item, filter.field));\n let result: boolean;\n\n switch (filter.strategy) {\n case 'greaterThan':\n result = itemValue > filterValue;\n break;\n case 'greaterThanOrEqualTo':\n result = itemValue >= filterValue;\n break;\n case 'lessThan':\n result = itemValue < filterValue;\n break;\n case 'lessThanOrEqualTo':\n result = itemValue <= filterValue;\n break;\n case 'between':\n result = itemValue >= filterValue && itemValue <= filterValue2;\n break;\n case 'equalTo':\n default:\n result = itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Date filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @param adapter\n * @returns whether or not item should be included in data source array.\n */\n protected filterDate<D = FdDate>(item: T, filter: CollectionDateFilter, adapter?: DatetimeAdapter<D>): boolean {\n if (!adapter) {\n throw new Error(\n 'In order to filter date columns, please provide DateTime adapter in your TableDataProvider constructor.'\n );\n }\n\n const filterValue = filter.value;\n const filterValue2 = filter.value2;\n const itemValue = get(item, filter.field);\n const diff = adapter.compareDate(itemValue, filterValue);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'after':\n result = diff > 0;\n break;\n case 'onOrAfter':\n result = diff >= 0;\n break;\n case 'before':\n result = diff < 0;\n break;\n case 'beforeOrOn':\n result = diff <= 0;\n break;\n case 'between':\n result = adapter.isBetween(itemValue, filterValue, filterValue2);\n break;\n\n case 'equalTo':\n default:\n result = adapter.dateTimesEqual(itemValue, filterValue);\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Boolean filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterBoolean(item: T, filter: CollectionBooleanFilter): boolean {\n const filterValue = filter.value;\n const itemValue = get(item, filter.field);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n default:\n result = itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Array filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterArray(item: T, filter: CollectionSelectFilter): boolean {\n const filterValues = filter.value.map((v) => this.getSelectItemValue(v));\n const itemValue = get(item, filter.field);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n default:\n result = filterValues.includes(itemValue);\n }\n\n return !filterValues.length || filter.exclude ? !result : result;\n }\n\n /** @hidden */\n protected unsubscribe(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n\nexport class TableDataProvider<T> extends BaseTableDataProvider<T> {\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fetch(tableState?: TableState): Observable<T[]> {\n throw new Error('fetch method should be implemented by developers for custom data providers.');\n }\n\n /**\n * Method for applying filtering and retrieving the data.\n * @param state @see TableState Set of table parameters.\n * @returns Observable with filtered data.\n */\n fetchData(state: TableState): Observable<T[]> {\n return this.fetch(state).pipe(\n map((items) => {\n if (this.searchInput) {\n items = this.search(items, { ...state, ...{ searchInput: this.searchInput } });\n }\n\n if (this.filterBy) {\n items = this.applyFiltering(items, this.filterBy);\n }\n\n return items;\n }),\n takeUntil(this._destroy$)\n );\n }\n\n /**\n * Method for getting all possible options for particular field.\n * Used for creating select options.\n * Developers can override this method to extend the filtering functionality.\n * @param field key of the data item.\n * @returns Observable with select items.\n */\n getFieldOptions(field: string): Observable<SelectItem[]> {\n return this.fetch().pipe(\n take(1),\n map((data) => {\n const options: SelectItem[] = data.map((item) => ({\n label: get(item, field),\n value: get(item, field)\n }));\n\n return options;\n })\n );\n }\n}\n\nexport abstract class TableChildrenDataProvider<T> extends BaseTableDataProvider<T, Map<TableRow<T>, T[]>> {\n /**\n * Method for retrieving the amount of child itemf or a defined row.\n * @param row\n * @param state\n */\n abstract rowChildrenCount(row: TableRow<T>, state: TableState): Observable<number>;\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @param parentRows\n * @returns Observable with data.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fetch(tableState?: TableState, parentRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n throw new Error('fetch method should be implemented by developers for custom data providers.');\n }\n\n /**\n * Method for applying filtering and retrieving the data.\n * @param state @see TableState Set of table parameters.\n * @param tableRows\n * @returns Observable with filtered data.\n */\n fetchData(state: TableState, tableRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n return this.fetch(state, tableRows).pipe(\n map((items) => {\n items.forEach((rowItems, row) => {\n if (this.searchInput) {\n rowItems = this.search(rowItems, { ...state, ...{ searchInput: this.searchInput } });\n }\n\n if (this.filterBy) {\n rowItems = this.applyFiltering(rowItems, this.filterBy);\n }\n\n if (rowItems.length === 0) {\n items.delete(row);\n } else {\n items.set(row, rowItems);\n }\n });\n return items;\n }),\n takeUntil(this._destroy$)\n );\n }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { DataSource } from '@fundamental-ngx/platform/shared';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { TableChildrenDataProvider, TableDataProvider } from './table-data-provider';\n\nexport abstract class BaseTableDataSource<T, P = T[], L = boolean> implements DataSource<T, P, L> {\n /**\n * Method for retrieving the data of the provided data source.\n * @param tableState @see TableState Set of table parameters.\n * @param parentRows\n */\n abstract fetch(tableState: TableState, parentRows?: TableRow<T>[]): void;\n /** @hidden */\n protected readonly _dataChanges$ = new BehaviorSubject<P>([] as any);\n /** @hidden */\n protected readonly _onDataRequested$ = new Subject<boolean>();\n\n /** @hidden */\n protected readonly _onDataReceived$ = new Subject<boolean>();\n\n /** @hidden */\n protected _dataLoading: L;\n\n /** @hidden */\n protected readonly _dataLoading$: BehaviorSubject<L>;\n\n /** @hidden */\n protected readonly _destroy$ = new Subject<void>();\n\n /** @hidden */\n protected constructor() {\n this._dataLoading$ = new BehaviorSubject(this._dataLoading);\n }\n\n /**\n * Emitted when new data has been requested.\n * @returns Observable\n */\n get dataRequested(): Observable<boolean> {\n return this._onDataRequested$.asObservable();\n }\n\n /**\n * Emitted when new data has been received.\n * @returns Observable\n */\n get dataReceived(): Observable<boolean> {\n return this._onDataReceived$.asObservable();\n }\n\n /**\n * Emitted when loading state has been changed.\n * @returns Observable.\n */\n get dataLoading(): Observable<L> {\n return this._dataLoading$.asObservable();\n }\n\n /**\n * Emits when the data from the provider has been changed.\n * @returns Observable of data source objects.\n */\n get dataChanges(): Observable<P> {\n return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));\n }\n\n /** @hidden */\n get isDataLoading(): L {\n return this._dataLoading;\n }\n\n /** @hidden */\n get data(): P {\n return this._dataChanges$.value;\n }\n\n /** @hidden */\n open(): Observable<P> {\n return this._dataChanges$.asObservable();\n }\n\n /** @hidden */\n onDataRequested(): Observable<void> {\n return this._onDataRequested$.asObservable().pipe(map(() => void 0));\n }\n\n /** @hidden */\n onDataReceived(): Observable<void> {\n return this._onDataReceived$.asObservable().pipe(map(() => void 0));\n }\n\n /** @hidden */\n close(): void {}\n\n /**\n * Closes the stream\n */\n unsubscribe(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n\nexport class TableDataSource<T> extends BaseTableDataSource<T> {\n /**\n * @hidden\n */\n constructor(readonly dataProvider: TableDataProvider<T>) {\n super();\n }\n\n /**\n * Method for retrieving the data of the provided data source.\n * @param tableState @see TableState Set of table parameters.\n */\n fetch(tableState: TableState): void {\n this._onDataRequested$.next(true);\n this._dataLoading$.next(true);\n this._dataLoading = true;\n\n this.dataProvider.fetchData(tableState).subscribe({\n next: (items) => {\n this._onDataReceived$.next(true);\n this._dataLoading = false;\n this._dataLoading$.next(false);\n this._dataChanges$.next(items);\n },\n error: (error) => {\n this._onDataReceived$.next(false);\n this._dataLoading = false;\n this._dataChanges$.error(error);\n }\n });\n }\n}\n\nexport class ChildTableDataSource<T> extends BaseTableDataSource<\n T,\n Map<TableRow<T>, T[]>,\n { row?: TableRow<T>; loading: boolean }[]\n> {\n /**\n * @hidden\n */\n constructor(readonly dataProvider: TableChildrenDataProvider<T>) {\n super();\n }\n\n /**\n * Method responsible for retrieving the items from the data provider.\n * Additionaly, it sets the loading state along with the dataLoading and dataChanges streams.\n * @param tableState\n * @param parentRows\n */\n fetch(tableState: TableState, parentRows?: TableRow<T>[]): void {\n this._onDataRequested$.next(true);\n const loadingState = parentRows?.map((row) => ({ row, loading: true })) || [];\n const finishedLoadingState = loadingState.map(({ row }) => ({ row, loading: false }));\n this._dataLoading$.next(loadingState);\n this._dataLoading = loadingState;\n\n this.dataProvider.fetchData(tableState, parentRows).subscribe({\n next: (items) => {\n this._onDataReceived$.next(true);\n this._dataLoading = finishedLoadingState;\n this._dataLoading$.next(finishedLoadingState);\n this._dataChanges$.next(items);\n },\n error: (error) => {\n this._onDataReceived$.next(false);\n this._dataLoading = finishedLoadingState;\n this._dataLoading$.next(finishedLoadingState);\n this._dataChanges$.error(error);\n }\n });\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an array.\n *\n * Used to convert array source to the TableDataProvider interface.\n *\n */\nexport class ArrayTableDataProvider<T> extends TableDataProvider<T> {\n /** @hidden */\n protected items$ = new BehaviorSubject<T[]>([]);\n\n /** @hidden */\n constructor(items: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n super();\n this.items = items;\n this.totalItems = this.items.length;\n this.items$.next(this.items);\n this.dateTimeAdapter = dateTimeAdapter;\n }\n\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n fetch(state?: TableState): Observable<T[]> {\n return this.items$.asObservable().pipe(\n map((items) => {\n if (state?.searchInput) {\n items = this.search(items, state);\n }\n\n if (state?.filterBy) {\n items = this.applyFiltering(items, state.filterBy);\n }\n\n this.totalItems = items.length;\n\n return items;\n })\n );\n }\n}\n\nexport class ArrayTableDataSource<T> extends TableDataSource<T> {\n /** @hidden */\n constructor(data: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n super(new ArrayTableDataProvider(data, dateTimeAdapter));\n }\n}\n","import { Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an Observable.\n *\n * Used to convert observable source to the TableDataProvider interface.\n *\n */\nexport class ObservableTableDataProvider<T> extends TableDataProvider<T> {\n /** @hidden */\n protected items$: Observable<T[]>;\n\n /** @hidden */\n constructor(items$: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n super();\n this.items$ = items$;\n this.dateTimeAdapter = dateTimeAdapter;\n }\n\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n fetch(state?: TableState): Observable<T[]> {\n return this.items$.pipe(\n map((items) => {\n this.items = items;\n if (state?.searchInput) {\n items = this.search(items, state);\n }\n\n if (state?.filterBy) {\n items = this.applyFiltering(items, state.filterBy);\n }\n\n this.totalItems = items.length;\n\n return items;\n })\n );\n }\n}\n\nexport class ObservableTableDataSource<T> extends TableDataSource<T> {\n /** @hidden */\n constructor(data: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n super(new ObservableTableDataProvider(data, dateTimeAdapter));\n }\n}\n","import { DataSource, DataSourceParser, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './array-data-source';\nimport { ObservableTableDataSource } from './observable-data-source';\nimport { TableDataSource } from './table-data-source';\n\nexport class TableDataSourceParser<T> implements DataSourceParser<T, TableDataSource<T>> {\n /** @hidden */\n parse(source: DataSource<T>): TableDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as TableDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayTableDataSource(source);\n }\n\n if (isObservable(source)) {\n return new ObservableTableDataSource(source);\n }\n\n return undefined;\n }\n}\n","import { Directive, EventEmitter, inject, Input, OnDestroy, Output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { filter, startWith } from 'rxjs/operators';\nimport { FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { ChildTableDataSource, TableDataSource, TableDataSourceParser } from '../domain';\nimport { TableInitialState, TableRow } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n selector: '[fdpTableDataSource]',\n standalone: true,\n providers: [\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: TableDataSourceParser\n }\n ]\n})\nexport class TableDataSourceDirective<T> extends DataSourceDirective<T, TableDataSource<T>> implements OnDestroy {\n /**\n * Data source.\n * @param source\n */\n @Input()\n set childDataSource(source: ChildTableDataSource<T> | null) {\n this._childDataSource = source;\n this._initializeChildDataSource();\n this.childDataSourceChanged.next();\n }\n\n get childDataSource(): ChildTableDataSource<T> | null {\n return this._childDataSource;\n }\n\n /** Event emitted when child data source instance being changed. */\n @Output()\n childDataSourceChanged = new EventEmitter<void>();\n\n /** Event emitted when data loading is started. */\n @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataReceived = new EventEmitter<void>();\n\n /** Total items count stream. */\n totalItems$ = signal<number>(0);\n\n /** Items stream. */\n items$ = new BehaviorSubject<T[]>([]);\n\n /** Child items stream. */\n childItems$ = new Subject<Map<TableRow<T>, T[]>>();\n\n /** @hidden */\n _tableDataSource: TableDataSource<T>;\n\n /** @hidden */\n _firstLoadingDone = false;\n\n /** @hidden */\n _internalLoadingState = false;\n\n /** @hidden */\n _internalChildrenLoadingState = false;\n\n /** @hidden */\n private _childDataSource: ChildTableDataSource<T> | null;\n\n /** @hidden */\n private _childDsSubscription = new Subscription();\n\n /** @hidden */\n set totalItems(value: number) {\n this.totalItems$.set(value);\n }\n\n get totalItems(): number {\n return this.totalItems$();\n }\n\n /** @hidden for data source handling */\n private _tableDsSubscription: Subscription | null;\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n optional: true\n });\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n initializeDataSource(): void {\n this.dataSourceChanged.pipe(startWith(true), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._closeDataSource();\n this._listenToDataSource();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this._tableDsSubscription?.unsubscribe();\n }\n\n /** @hidden */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * @hidden\n * Initializes the child data source to fetch child rows.\n */\n private _initializeChildDataSource(): void {\n if (isDataSource(this.childDataSource)) {\n this.childDataSource?.unsubscribe();\n\n this._childDsSubscription?.unsubscribe();\n }\n if (!this.childDataSource) {\n return;\n }\n\n this._childDsSubscription = new Subscription();\n\n this._childDsSubscription.add(\n this.childDataSource.onDataRequested().subscribe(() => {\n this._internalChildrenLoadingState = true;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.onDataReceived().subscribe(() => {\n this._internalChildrenLoadingState = false;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.dataLoading\n .pipe(\n filter((state) => !!state),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((loadingStates) => {\n loadingStates.forEach((state) => state.row?.childItemsLoading$.next(state.loading));\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.dataChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n this.childItems$.next(data);\n })\n );\n }\n\n /**\n * @hidden\n * This is a single point of data entry to the component. We don't want to set data on different\n * places. If any new data comes in, or you do a search, and you want to pass initial data\n * its here.\n */\n private _listenToDataSource(): void {\n this._tableDsSubscription?.unsubscribe();\n this._tableDsSubscription = new Subscription();\n\n const dataSourceStream = this.dataSourceProvider;\n if (dataSourceStream === undefined) {\n throw new Error(`[TableDataSource] source did not match an Array, Observable, nor DataSource`);\n }\n\n this._tableDsSubscription.add(\n this.dataChanged$.subscribe((items) => {\n this.totalItems$.set(dataSourceStream.dataProvider.totalItems);\n this.items$.next(items);\n })\n );\n\n this._tableDsSubscription.add(\n dataSourceStream.onDataRequested().subscribe(() => {\n this.onDataRequested.emit();\n this._internalLoadingState = true;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n this._tableDsSubscription.add(\n dataSourceStream.onDataReceived().subscribe(() => {\n this.onDataReceived.emit();\n this._internalLoadingState = false;\n this._firstLoadingDone = true;\n this._tableService.setTableLoading(this._table.loadingState);\n\n // Restore normal pagination after the first fetch of data.\n if (this._table._loadPreviousPages) {\n const state = this._tableService.getTableState();\n this._tableService.setTableState({\n ...state,\n ...{\n page: {\n currentPage: this.initialState?.initialPage || state.page.currentPage,\n pageSize: this._table.pageSize || state.page.pageSize\n }\n }\n });\n this._table._loadPreviousPages = false;\n }\n })\n );\n\n // initial data fetch\n dataSourceStream.fetch(this._tableService.getTableState());\n\n this._tableDataSource = dataSourceStream;\n }\n\n /** @hidden */\n private _closeDataSource(): void {\n if (!this._tableDataSource) {\n return;\n }\n\n this._tableDataSource.close();\n\n this._tableDsSubscription?.unsubscribe();\n this._tableDsSubscription = null;\n this._table.clearTableRows();\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableDataSource } from '../domain';\nimport { TableRowType } from '../enums';\n\nexport type TableRowState = 'editable' | 'readonly';\n\nexport interface TableRowKeyboardDrag {\n direction: 'up' | 'down';\n event: KeyboardEvent;\n mode: 'group' | 'shift';\n}\n\n/**\n * Table row entity\n * Used to represent table row in the template\n */\nexport interface TableRow<T = any> {\n /**\n * Row semantic type\n */\n type: TableRowType.ITEM | TableRowType.GROUP | TableRowType.TREE;\n\n /**\n * Indicates if row is selected. It also supports intermediate state\n */\n checked: boolean | null;\n\n checked$?: Observable<TableRow['checked']>;\n\n /**\n * Index of a \"value\" in data source list\n */\n index: number;\n\n /**\n * Data model it represents\n */\n readonly value: T;\n\n /**\n * Reference to a parent if any\n */\n parent: TableRow | null;\n\n /**\n * Nesting level\n */\n level: number;\n\n /**\n * Expandable\n */\n expandable: boolean;\n\n /**\n * Expanded/Collapsed\n */\n expanded: boolean;\n\n expanded$?: Observable<TableRow['expanded']>;\n\n childItems$: Observable<T[]>;\n\n childItemsLoading$: BehaviorSubject<boolean>;\n\n stateChanged$: Observable<boolean>;\n\n /**\n * If item should be hidden. Used to skip rendering\n */\n hidden: boolean;\n\n /**\n * If the row is navigatable\n */\n navigatable: boolean;\n\n /**\n * Row state: readonly or editable.\n */\n state: TableRowState;\n\n /**\n * Children table rows.\n */\n children: TableRow<T>[];\n\n isTree: boolean;\n\n setRowType: (type: TableRowType) => void;\n\n lastChild?: TableRow<T>;\n\n /** Flag indicating that all child rows should be fetched again. */\n forceFetch: boolean;\n}\n\nexport type TableRowClass<T = any> = string | ((row: T) => string);\n\n/** @hidden */\nexport function isTableRow<T = any>(row: TableRow<T>): row is TableRow<T> {\n return row && row.type !== undefined && row.value !== undefined && row.index >= 0 && row.state !== undefined;\n}\n\nexport class TableRowImpl<T> implements TableRow<T> {\n /** @hidden */\n set checked(value: boolean | null) {\n this._checkedSubject.next(value);\n }\n get checked(): boolean | null {\n return this._checkedSubject.value;\n }\n /** @hidden */\n readonly checked$: Observable<boolean>;\n /** @hidden */\n readonly childItems$: Observable<T[]>;\n\n /** @hidden */\n readonly stateChanged$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n readonly childItemsLoading$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n forceFetch = false;\n\n /** @hidden */\n children: TableRow<T>[];\n\n /** @hidden */\n expandable: boolean;\n /** @hidden */\n set expanded(value: boolean) {\n this._expandedSubject.next(value);\n this.children.forEach((childRow) => {\n childRow.hidden = !value;\n });\n }\n get expanded(): boolean {\n return this._expandedSubject.value;\n }\n /** @hidden */\n readonly expanded$: Observable<boolean>;\n /** @hidden */\n hidden: boolean;\n\n /** @hidden */\n index: number;\n /** @hidden */\n level: number;\n /** @hidden */\n navigatable: boolean;\n /** @hidden */\n parent: TableRow | null;\n /** @hidden */\n state: TableRowState;\n /** @hidden */\n type: TableRowType;\n /** @hidden */\n readonly value: T;\n /** @hidden */\n childDataSource: TableDataSource<T> | undefined;\n\n /** @hidden */\n isTree: boolean;\n\n /** @hidden */\n lastChild?: TableRow<T>;\n\n /** @hidden */\n private readonly _expandedSubject = new BehaviorSubject<boolean>(false);\n /** @hidden */\n private readonly _checkedSubject = new BehaviorSubject<boolean | null>(false);\n\n /** @hidden */\n constructor(row: Partial<TableRow>) {\n this.checked$ = this._checkedSubject.asObservable().pipe(map(Boolean));\n this.expanded$ = this._expandedSubject.asObservable().pipe(map(Boolean));\n this.checked = row.checked || false;\n this.children = row.children || [];\n this.expandable = row.expandable || false;\n this.expanded = row.expanded || false;\n this.hidden = row.hidden || false;\n this.index = row.index || 0;\n this.level = row.level || 0;\n this.navigatable = row.navigatable || false;\n this.parent = row.parent || null;\n this.state = row.state || 'readonly';\n this.value = row.value;\n this.setRowType(row.type || TableRowType.ITEM);\n }\n\n /**\n * Sets the row type and checks whether the row is a tree.\n * @param type Row type.\n */\n setRowType(type: TableRowType): void {\n this.type = type;\n this.isTree = this.type === TableRowType.TREE;\n }\n}\n","import { dfs, get, isString, set } from '@fundamental-ngx/cdk/utils';\nimport { isDataSource } from '@fundamental-ngx/platform/shared';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './domain/array-data-source';\nimport { ObservableTableDataSource } from './domain/observable-data-source';\nimport { TableDataSource } from './domain/table-data-source';\nimport { TableRowType } from './enums/row-type.enum';\nimport { SelectionMode, SelectionModeValue } from './enums/selection-mode.enum';\nimport { SortDirection } from './enums/sort-direction.enum';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { FdpTableDataSource } from './models/data-source.type';\nimport { RowComparator } from './models/row-comparator.model';\nimport { TableRow, TableRowImpl, isTableRow } from './models/table-row.model';\nimport { GroupTableRowValueType, TreeLike } from './models/tree-table.model';\nimport { TableColumn } from './table-column';\n\n/** @hidden */\nexport function newTableRow<T = any>(row: Partial<TableRow<T>>): TableRow<T> {\n if (!row.value) {\n throw new Error('Unexpected value. TableRow.value cannot be undefined.');\n }\n\n return new TableRowImpl({\n type: row.type || TableRowType.ITEM,\n checked: row.checked || false,\n index: row.index || 0,\n value: row.value,\n parent: row.parent || null,\n level: row.level || 0,\n expandable: row.expandable || false,\n expanded: row.expanded || false,\n hidden: row.hidden || false,\n navigatable: row.navigatable || false,\n state: row.state || 'readonly',\n children: row.children || []\n });\n}\n\n/** @hidden */\nexport function getSelectableRows(rows: TableRow[], selectableKey: string): TableRow[] {\n return rows.filter((row) => isSelectableRow(row, selectableKey));\n}\n\n/** @hidden */\nexport function isSelectableRow(row: TableRow, selectableKey: string): boolean {\n return (isItemRow(row) || isTreeRow(row)) && row.value[selectableKey] !== false;\n}\n\n/** @hidden */\nexport function isItemRow(row: TableRow): boolean {\n return row.type === TableRowType.ITEM;\n}\n\n/** @hidden */\nexport function isTreeRow(row: TableRow): boolean {\n return row.type === TableRowType.TREE;\n}\n\n/**\n * Since we dont work with the tree, we need to convert incoming tree to\n * flat format while maintaining original state.\n *\n * @hidden\n */\nexport function convertTreeTableRowToFlatList<T>(rows: TableRow<T>[], rowNavigatable: string | boolean): TableRow<T>[] {\n let flatList: TableRow[] = [];\n\n for (const item of rows) {\n item.navigatable = isRowNavigatable(item as T, rowNavigatable);\n flatList.push(item);\n\n if (Array.isArray(item.children)) {\n item.children.forEach((c) => (c.hidden = !item.expanded));\n flatList = flatList.concat(convertTreeTableRowToFlatList(item.children, rowNavigatable));\n }\n }\n return flatList;\n}\n\n/** @hidden */\nexport function isRowNavigatable<T>(row: T, rowNavigatable: string | boolean): boolean {\n if (!row) {\n return false;\n }\n\n /** If key of the row's item field passed */\n if (isString(rowNavigatable)) {\n return !!row[rowNavigatable as string];\n }\n\n return !!rowNavigatable;\n}\n\n/** @hidden */\nexport function getFreezableColumns(columns: TableColumn[], freezeColumnsTo: string): Map<string, number> {\n const columnNames = new Map<string, number>();\n\n if (!columns.length || !freezeColumnsTo) {\n return columnNames;\n }\n\n for (const column of columns) {\n if (!column.name) {\n continue;\n }\n\n // using columnNames.size as index of a column\n columnNames.set(column.name, columnNames.size);\n\n if (column.name === freezeColumnsTo) {\n return columnNames;\n }\n }\n\n return new Map();\n}\n\n/** @hidden */\nexport function getFreezableEndColumns(columns: TableColumn[], freezeEndColumnsTo: string): Map<string, number> {\n const columnNames = new Map<string, number>();\n\n if (!columns.length || !freezeEndColumnsTo) {\n return columnNames;\n }\n\n for (let i = columns.length - 1; i >= 0; i--) {\n // using columnNames.size as index of a column\n columnNames.set(columns[i].name, columnNames.size);\n\n if (columns[i].name === freezeEndColumnsTo) {\n return columnNames;\n }\n }\n\n return new Map();\n}\n\n/** @hidden */\nexport function convertTreeObjectsToTableRows<T>(\n source: T[],\n selectionMode: SelectionModeValue,\n tableRows: TableRow<T>[],\n rowComparator: RowComparator<T>,\n relationKey: string,\n hasChildrenKey: string,\n selectedKey: string,\n expandedStateKey: string,\n rowNavigatable: string | boolean,\n enableTristateMode = false\n): TableRow<T>[] {\n const rows: TableRow<T>[] = [];\n const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, tableRows, rowComparator);\n\n source.forEach((item: T, index: number) => {\n const hasChildren =\n Object.prototype.hasOwnProperty.call(item, relationKey) &&\n Array.isArray(item[relationKey]) &&\n item[relationKey].length;\n\n const row = isTableRow(item as TableRow<T>)\n ? (item as TableRow<T>)\n : newTableRow({\n type: hasChildren || item[hasChildrenKey] === true ? TableRowType.TREE : TableRowType.ITEM,\n checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n index,\n value: item\n });\n\n row.expanded =\n expandedStateKey && Object.prototype.hasOwnProperty.call(item, expandedStateKey)\n ? item[expandedStateKey]\n : false;\n row.navigatable = isRowNavigatable(item, rowNavigatable);\n rows.push(row);\n\n if (hasChildren) {\n const children = convertTreeObjectsToTableRows(\n item[relationKey],\n selectionMode,\n tableRows,\n rowComparator,\n relationKey,\n hasChildrenKey,\n selectedKey,\n expandedStateKey,\n rowNavigatable,\n enableTristateMode\n );\n\n children.forEach((c) => {\n c.parent = c.parent || row;\n c.level = c.parent.level + 1;\n c.hidden = !c.parent.expanded;\n });\n row.children.push(...children);\n\n rows.push(...children);\n }\n if (row.level === 0 && row.isTree) {\n dfs([row], (r) => {\n const children = r.children || [];\n const selectedChildren: TableRow<T>[] = [];\n const indeterminateChildren: TableRow<T>[] = [];\n children.forEach((child) => {\n if (child.checked === true) {\n selectedChildren.push(child);\n } else if (child.checked === null) {\n indeterminateChildren.push(child);\n }\n });\n\n const selectedAll = selectedChildren.length === children.length && children.length > 0;\n const selectedSome = selectedChildren.length > 0;\n if (r.checked && selectionMode === SelectionMode.MULTIPLE) {\n applySelectionToChildren(rows, r, [], []);\n return;\n }\n if (!enableTristateMode) {\n return;\n }\n if (selectedAll) {\n r.checked = true;\n return;\n }\n if (selectedSome || indeterminateChildren.length > 0) {\n r.checked = null;\n return;\n }\n });\n }\n });\n\n return rows;\n}\n\n/**\n * @hidden\n * Runs `rowComparator` function against checked rows and compares them with the new `source`\n * If matched, creates an association between the source item and checked status of corresponding row.\n *\n * @returns `Map` object with the `checked` status for particular source item\n */\nexport function getSelectionStatusByRowValue<T>(\n source: T[],\n selectionMode: SelectionModeValue,\n tableRows: TableRow[],\n rowComparator: RowComparator<T>\n): Map<T, boolean | null> {\n const rowMap = new Map<T, boolean | null>();\n if (\n (selectionMode === SelectionMode.SINGLE || selectionMode === SelectionMode.MULTIPLE) &&\n typeof rowComparator === 'function'\n ) {\n const checkedRows = tableRows.filter((r) => r.checked);\n checkedRows.forEach((row) => {\n const found = source.find((e) => rowComparator(row.value, e));\n if (found) {\n rowMap.set(found, row.checked);\n }\n });\n }\n return rowMap;\n}\n\n/** @hidden */\nexport function applySelectionToChildren<T>(\n allRows: Array<TableRow<T>>,\n row: TableRow,\n addedRows: TableRow<T>[],\n removedRows: TableRow<T>[]\n): void {\n const allChildren = findRowChildren(row, allRows);\n\n allChildren.forEach((r) => {\n r.checked = row.checked;\n r.checked ? addedRows.push(r) : removedRows.push(r);\n });\n}\n\n/** @hidden */\nexport function findRowChildren<T>(row: TableRow<T>, allRows: TableRow<T>[]): TableRow<T>[] {\n const rowsLength = allRows.length;\n\n /**\n * Since we are dealing with a flat list\n * it means all children go next right after the expandable row\n * until the next row has a mutual parent\n */\n\n let index = allRows.indexOf(row);\n const parents = getRowParents(row);\n const children: TableRow<T>[] = [];\n\n while (index++ < rowsLength) {\n const nextRow = allRows[index];\n if (!nextRow?.parent || parents.includes(nextRow.parent)) {\n break;\n }\n children.push(nextRow);\n }\n\n return children;\n}\n\n/**\n * Get row parents path where the first is the direct parent\n * @param row Row which parents we need to find\n * @param untilParent Parent to stop a search on. Default is \"null\" that means look up until the root\n * @returns parents list [direct parent, ..., ancestor]\n * @hidden\n */\nexport function getRowParents<T>(row: TableRow<T>, untilParent: TableRow<T> | null = null): TableRow<T>[] {\n untilParent = untilParent || null; // to avoid \"undefined\"\n const parents: TableRow<T>[] = [];\n let parent = row.parent || null; // empty parent should be coerced to \"null\" do not get into infinite loop\n while (parent && parent !== untilParent) {\n parents.push(parent);\n parent = parent.parent || null;\n }\n return parents;\n}\n\n/** @hidden */\nexport function toDataStream<T>(source: FdpTableDataSource<T>): TableDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as TableDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayTableDataSource(source);\n }\n\n if (isObservable(source)) {\n return new ObservableTableDataSource(source);\n }\n\n return undefined;\n}\n/**\n * @hidden\n * Creates an empty column skeleton object.\n * @returns Column model.\n */\nexport function buildNewRowSkeleton<T>(editableRowSkeleton: T, columns: TableColumn[]): T {\n if (editableRowSkeleton) {\n return structuredClone(editableRowSkeleton);\n }\n\n let newRow = {};\n columns.forEach((column) => {\n newRow = set(newRow, column.key, undefined);\n });\n\n return newRow as T;\n}\n\n/** @hidden */\nexport function isGroupRow(row: TableRow): boolean {\n return row.type === TableRowType.GROUP;\n}\n\n/** @hidden */\nexport function sortTreeLikeGroupedRows(\n groupedRows: TreeLike<TableRow>[],\n groupRulesMap: Map<string, CollectionGroup>\n): TreeLike<TableRow>[] {\n if (!groupedRows[0] || !isGroupRow(groupedRows[0])) {\n return groupedRows;\n }\n\n const treeLikeRows = groupedRows as TreeLike<TableRow<GroupTableRowValueType>>[];\n const firstRow = treeLikeRows[0];\n\n treeLikeRows.forEach((group) => {\n if (group._children) {\n group._children = sortTreeLikeGroupedRows(group._children, groupRulesMap);\n }\n });\n\n const groupRule = groupRulesMap.get(firstRow.value.field);\n\n if (!groupRule || groupRule.direction === SortDirection.NONE) {\n return treeLikeRows;\n }\n\n const direction = groupRule.direction;\n const directionMultiplier = direction === SortDirection.ASC ? 1 : direction === SortDirection.DESC ? -1 : 0;\n\n return treeLikeRows.slice().sort((a, b) => {\n const aValue = a.value.value as any;\n const bValue = b.value.value as any;\n\n const aNumber = Number.parseFloat(aValue);\n const bNumber = Number.parseFloat(bValue);\n if (!Number.isNaN(aNumber) && !Number.isNaN(bNumber)) {\n return (aNumber - bNumber) * directionMultiplier;\n }\n\n return (aValue > bValue ? 1 : -1) * directionMultiplier;\n });\n}\n\n/** @hidden */\nexport function convertTreeLikeToFlatList<K>(treeLikeList: TreeLike<K>[]): K[] {\n let flatList: K[] = [];\n\n for (const item of treeLikeList) {\n flatList.push(item);\n\n if (Array.isArray(item._children)) {\n flatList = flatList.concat(convertTreeLikeToFlatList(item._children));\n delete item._children;\n }\n }\n\n return flatList;\n}\n\n/**\n * @hidden\n * Group table rows and return tree like rows list.\n * It's intended to be called recursively.\n * @param rules group rules to group by\n * @param rows source table rows\n * @param parent row parent\n * @param level level of nesting\n */\nexport function createGroupedTableRowsTree(\n rules: CollectionGroup[],\n rows: TableRow[],\n parent: TableRow | null = null,\n level = 0\n): TreeLike<TableRow>[] {\n rules = [...rules];\n\n if (!rules.length) {\n // no rules mean that it's the level of source items\n return rows.map((row) => {\n row.parent = parent;\n row.level = level;\n row.hidden = !!parent && !parent.expanded;\n return row;\n });\n }\n\n // Retrieve first group rule\n const rule = rules.shift()!;\n\n // Build map of unique values for a given group rule\n const valuesHash = rows\n .filter((r) => r.state !== 'editable')\n .reduce((hash, row) => {\n const modelValue = get(row.value, rule.field);\n\n if (!hash.has(modelValue)) {\n hash.set(modelValue, []);\n }\n\n hash.get(modelValue)?.push(row);\n\n return hash;\n }, new Map<unknown, TableRow[]>());\n\n // Build table rows tree\n let groupedTableRows: TreeLike<TableRow>[] = [];\n\n if (rows.some((r) => r.state === 'editable')) {\n groupedTableRows = rows\n .filter((r) => r.state === 'editable')\n .map((row) => {\n row.parent = parent;\n row.level = -1;\n row.hidden = !!parent && !parent.expanded;\n return row;\n });\n }\n\n for (const [value, values] of Array.from(valuesHash)) {\n const filteredRows = rows.filter((_item) => values.includes(_item));\n\n if (filteredRows.length === 0) {\n continue;\n }\n\n const groupTableRow: TreeLike<TableRow<GroupTableRowValueType>> = newTableRow<GroupTableRowValueType>({\n type: TableRowType.GROUP,\n checked: false,\n index: 0,\n value: { field: rule.field, value, count: 0 },\n parent,\n level,\n expandable: true,\n expanded: true,\n hidden: !!parent && !parent.expanded\n });\n\n // Ads group's children rows\n groupTableRow._children = createGroupedTableRowsTree(rules, filteredRows, groupTableRow, level + 1);\n\n groupTableRow.value.count = groupTableRow._children?.length;\n\n groupedTableRows.push(groupTableRow);\n }\n\n return groupedTableRows;\n}\n\n/** @hidden */\nexport function convertObjectsToTableRows<T>(\n source: T[],\n addedItems: T[],\n selectedKey: string,\n rowNavigatable: boolean | string,\n selectionMode: SelectionModeValue,\n rows: TableRow[],\n rowComparator: RowComparator\n): TableRow<T>[] {\n const rowItem = source[0] as any;\n\n if (isTableRow(rowItem)) {\n return source as TableRow[];\n }\n\n const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, rows, rowComparator);\n return source.map((item: T, index: number) => {\n const isNewItem = addedItems.includes(item);\n const row = newTableRow({\n type: TableRowType.ITEM,\n checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n index,\n value: item\n });\n row.navigatable = isRowNavigatable(item, rowNavigatable);\n row.state = isNewItem ? 'editable' : 'readonly';\n return row;\n });\n}\n\n/** @hidden */\nexport function isTreeRowFirstCell(cellIndex: number, row: TableRow, event?: Event): boolean {\n return (cellIndex === 0 && isTreeRow(row)) || (!!event && !row.isTree);\n}\n","import { Table } from '../table';\nimport { TableColumn } from '../table-column';\n\nexport interface TableColumnFreezeInternalEvent {\n name: TableColumn['name'];\n endFreezable: TableColumn['endFreezable'];\n}\n\nexport interface FreezeChange {\n current: string | null;\n previous: string | null;\n end?: boolean;\n}\n\nexport class TableColumnFreezeEvent {\n /**\n * Table column freeze event\n * @param source Table component\n * @param current Current freezeTo column\n * @param previous Previous freezeTo column\n */\n constructor(\n public source: Table,\n public current: string | null,\n public previous: string | null\n ) {}\n}\n","import { Table } from '../table';\n\nexport class ColumnsChange {\n /**\n * Columns change event\n * @param current Current columns\n * @param previous Previous columns\n */\n constructor(\n public current: string[],\n public previous: string[]\n ) {}\n}\n\nexport class TableColumnsChangeEvent extends ColumnsChange {\n /**\n * Table columns change event\n * @param source Table component\n * @param current Current columns\n * @param previous Previous columns\n */\n constructor(\n public source: Table,\n current: string[],\n previous: string[]\n ) {\n super(current, previous);\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { DragoverPredicate, DropPredicate, FdDndDropType, FdDropEvent } from '@fundamental-ngx/cdk/utils';\nimport { Observable } from 'rxjs';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { Table } from '../table';\nimport { TableRow } from './table-row.model';\nimport { TableRowsRearrangeEvent } from './table-rows-rearrange-event.model';\n\nexport abstract class TableDraggable<T = any> {\n abstract dragDropInProgress: boolean;\n abstract enableRowReordering: boolean;\n abstract isTreeTable: boolean;\n abstract dropMode: FdDndDropType;\n abstract dropPredicate: DropPredicate<TableRow<T>>;\n abstract dragoverPredicate: DragoverPredicate<TableRow<T>>;\n abstract rowsRearrange: EventEmitter<TableRowsRearrangeEvent<T>>;\n abstract dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void;\n abstract dragDropItemDrop(event: FdDropEvent<TableRow>): void;\n abstract dragDropStart(): void;\n abstract setTable(table: Table): void;\n abstract dropCancelled(): void;\n}\n\nexport abstract class TableInitialState {\n abstract initialSortBy: CollectionSort[];\n abstract initialVisibleColumns: string[];\n abstract initialFilterBy: CollectionFilter[];\n abstract initialGroupBy: CollectionGroup[];\n abstract initialPage: number;\n abstract state: TableState;\n abstract setTable(table: Table): void;\n abstract setInitialState(): void;\n}\n\nexport abstract class TableVirtualScroll {\n abstract rowHeight: number;\n abstract secondaryRowHeight: number | undefined;\n abstract virtualScrollTransform$: Observable<number>;\n abstract virtualScroll: boolean;\n abstract virtualScrollTotalHeight: number;\n abstract setTable(table: Table): void;\n abstract listenOnVirtualScroll(): void;\n abstract calculateVirtualScrollRows(): void;\n}\n","import { CollectionFilter } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface FilterChange {\n current: CollectionFilter[];\n previous: CollectionFilter[];\n}\n\nexport class TableFilterChangeEvent {\n /**\n * Table filter change event\n * @param source Table component\n * @param current Current filters\n * @param previous Previous filters\n */\n constructor(\n public source: Table,\n public current: CollectionFilter[],\n public previous: CollectionFilter[]\n ) {}\n}\n","import { CollectionGroup } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface GroupChange {\n current: CollectionGroup[];\n previous: CollectionGroup[];\n}\n\nexport class TableGroupChangeEvent {\n /**\n * Table group change event\n * @param source Table component\n * @param current Current groups\n * @param previous Previous groups\n */\n constructor(\n public source: Table,\n public current: CollectionGroup[],\n public previous: CollectionGroup[]\n ) {}\n}\n","import { CollectionPage } from '../interfaces';\nimport { Table } from '../table';\n\nexport class PageChange {\n /**\n * Page change event\n * @param current Current page\n * @param previous Previous page\n */\n constructor(\n public current: CollectionPage,\n public previous: CollectionPage\n ) {}\n}\n\nexport class TablePageChangeEvent extends PageChange {\n /**\n * Table page change event\n * @param source Table component\n * @param current Current page\n * @param previous Previous page\n */\n constructor(\n public source: Table,\n current: CollectionPage,\n previous: CollectionPage\n ) {\n super(current, previous);\n }\n}\n","export class SaveRowsEvent<T> {\n /**\n * Table save rows event\n * @param done Callback function. Call it when newly added items has been saved and new data source fetch is needed.\n * @param items Array of newly created items.\n */\n constructor(\n public done: () => void,\n public items: T[]\n ) {}\n}\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { Table } from '../table';\n\nexport interface SearchChange {\n current: SearchInput;\n previous: SearchInput;\n}\n\nexport class TableSearchChangeEvent {\n /**\n * Table search change event\n * @param source Table component\n * @param current Current search (fields, directions)\n * @param previous Previous search (fields, directions)\n */\n constructor(\n public source: Table,\n public current: SearchInput,\n public previous: SearchInput\n ) {}\n}\n","import { Table } from '../table';\n\nexport class TableSelectionChangeEvent<T> {\n /** currently selected items */\n selection: T[];\n /** Items added */\n added: T[]; //\n /** Items removed */\n removed: T[];\n /** Indexes location of additions or removals */\n index: number[];\n /** Whether `Check/Uncheck` all checkbox was pressed. */\n all?: boolean;\n}\n\nexport class TableRowSelectionChangeEvent<T> extends TableSelectionChangeEvent<T> {\n /** Table component */\n source: Table;\n}\n","import { CollectionSort } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface SortChange {\n current: CollectionSort[];\n previous: CollectionSort[];\n}\n\nexport class TableSortChangeEvent {\n /**\n * Table sort change event\n * @param source Table component\n * @param current Current sort (fields, directions)\n * @param previous Previous sort (fields, directions)\n */\n constructor(\n public source: Table,\n public current: CollectionSort[],\n public previous: CollectionSort[]\n ) {}\n}\n","export class TableCellActivateEvent<T> {\n /**\n * Table cell activate event\n * @param columnIndex Index of the clicked column\n * @param row Row that was activated\n */\n constructor(\n public columnIndex: number,\n public row: T\n ) {}\n}\n","/** Common properties for table dialogs */\n\nexport interface TableDialogCommonData {\n // nothing here yet - placeholder for tslint\n _placeholder?: unknown;\n}\n","export class TableRowActivateEvent<T> {\n /**\n * Table row activate event\n * @param index Index of the activated row\n * @param ctrlKey Whether control/command key was pressed during the mouse/keyboard event\n * @param row Row that was activated\n */\n constructor(\n public index: number,\n public ctrlKey: boolean,\n public row: T\n ) {}\n}\n","export class TableRowToggleOpenStateEvent<T> {\n /**\n * Table row toggle open state event\n * @param index Index of the row\n * @param row Row that was toggled\n * @param expanded Expanded state of the row\n */\n constructor(\n public index: number,\n public row: T,\n public expanded: boolean\n ) {}\n}\n","import { FdDndDropEventMode } from '@fundamental-ngx/cdk/utils';\n\nexport class TableRowsRearrangeEvent<T> {\n /**\n * Table rows rearrange event\n * @param row Row that was rearranged\n * @param dropRow Row where the dragged item has been dropped\n * @param previousIndex Previous index of the row\n * @param newIndex New index of the row\n * @param insertAt Whether dragged the row was inserted before or after the dropped row\n * @param mode Whether the dropped element shifts other items or is grouped with them\n * @param rows All rows of the table in the state they exist on the datasource\n */\n constructor(\n public row: T,\n public dropRow: T,\n public previousIndex: number,\n public newIndex: number,\n public insertAt: 'before' | 'after' | null,\n public mode: FdDndDropEventMode,\n public rows: T[]\n ) {}\n}\n","import {\n DOWN_ARROW,\n END,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n Output\n} from '@angular/core';\nimport {\n DragoverPredicate,\n DropPredicate,\n FdDndDropEventMode,\n FdDndDropType,\n FdDropEvent,\n KeyUtil\n} from '@fundamental-ngx/cdk/utils';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE } from '../constants';\nimport { TableRowType } from '../enums';\nimport { findRowChildren, getRowParents } from '../helpers';\nimport { TableRow, TableRowsRearrangeEvent, UpdatedDndRowsPosition } from '../models';\nimport { TableDraggable } from '../models/directives';\nimport { Table } from '../table';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdp-table[isTreeTable], fdp-table[enableRowReordering]',\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_DRAGGABLE_DIRECTIVE,\n useExisting: forwardRef(() => TableDraggableDirective)\n }\n ]\n})\nexport class TableDraggableDirective<T = any> extends TableDraggable<T> implements OnDestroy {\n /** Whether to allow for row reordering on tree tables via drag and drop. */\n @Input()\n enableRowReordering = true;\n\n /** Whether tree mode is enabled. */\n @HostBinding('class.fd-table--tree')\n @Input()\n isTreeTable = false;\n\n /**\n * Row drop mode.\n */\n @Input()\n dropMode: FdDndDropType = 'auto';\n\n /** Predicate function that checks whether the item can be dropped over another item. */\n @Input()\n dropPredicate: DropPredicate<TableRow<T>>;\n\n /**\n * Predicate function that checks whether the item can be dragged over another item.\n * If the function returns `false`, dragged over item will not be highlighted, and drop event will be canceled.\n */\n @Input()\n dragoverPredicate: DragoverPredicate<TableRow<T>>;\n\n /** Event fired when tree rows rearranged through drag & drop. Consider that rows rearranged with their children rows. */\n @Output()\n readonly rowsRearrange = new EventEmitter<TableRowsRearrangeEvent<T>>();\n\n /** @hidden */\n get _rowsDraggable(): boolean {\n return this.isTreeTable && this.enableRowReordering;\n }\n\n /** @hidden */\n dragDropInProgress = false;\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef, {\n host: true\n });\n\n /** @hidden */\n ngOnDestroy(): void {\n this._setDragInProgress(false);\n }\n\n /** Sets table reference. */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * Initiates drag&drop sequence.\n */\n dragDropStart(): void {\n this._setDragInProgress(true);\n }\n\n /** Method called when dnd performed with the keyboard. */\n dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void {\n if (!this._rowsDraggable) {\n return;\n }\n event.preventDefault();\n let replacedIndex;\n dir === 'up' ? (replacedIndex = currentRowIndex - 1) : (replacedIndex = currentRowIndex + 1);\n\n if (this._table._tableRowsVisible[replacedIndex]) {\n const dragDropEvent: FdDropEvent<TableRow<T>> = {\n items: this._table._tableRowsVisible,\n draggedItemIndex: currentRowIndex,\n replacedItemIndex: replacedIndex,\n insertAt: dir === 'down' ? 'after' : 'before',\n mode\n };\n this.dragDropItemDrop(dragDropEvent);\n setTimeout(() => {\n (event.target as HTMLElement).focus();\n });\n }\n }\n\n /** Method called when drag&drop event being cancelled. */\n dropCancelled(): void {\n /** After timeout to make click event handled first */\n setTimeout(() => this._setDragInProgress(false));\n }\n\n /** Method called when dragged item being dropped. */\n dragDropItemDrop(event: FdDropEvent<TableRow>): void {\n /** After timeout to make click event handled first */\n setTimeout(() => {\n this._setDragInProgress(false);\n });\n\n if (this.isTreeTable && event.draggedItemIndex !== event.replacedItemIndex) {\n event.draggedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.draggedItemIndex];\n event.replacedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.replacedItemIndex];\n const dragRow = this._table._tableRows.find(\n (row) => row === this._table._tableRowsVisible[event.draggedItemIndex]\n );\n const dropRow = this._table._tableRows.find(\n (row) => row === this._table._tableRowsVisible[event.replacedItemIndex]\n );\n\n if (!dragRow || !dropRow || this._isDroppedInsideItself(dropRow, dragRow)) {\n return;\n }\n this._dragDropUpdateDragParentRowAttributes(dragRow);\n this._dragDropRearrangeTreeRows(dragRow, dropRow, event);\n this._dragDropUpdateDropRowAttributes(dragRow, dropRow, event.mode);\n\n if (!dropRow.expanded && event.mode === 'group') {\n this._table.toggleExpandableTableRow(dropRow, true);\n } else {\n this._table.onTableRowsChanged();\n }\n\n this._cdr.detectChanges();\n this._emitRowsRearrangeEvent(dragRow, dropRow, event);\n this._table.refreshDndList();\n }\n }\n\n /**\n * @hidden\n * Create table rows rearrange event\n */\n _emitRowsRearrangeEvent(row: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n const rows: any[] = [];\n\n this._table._tableRows.forEach((r, index) => {\n r.index = index;\n rows.push(r.value);\n });\n\n this.rowsRearrange.emit(\n new TableRowsRearrangeEvent(\n row.value,\n dropRow.value,\n event.draggedItemIndex,\n event.replacedItemIndex,\n event.insertAt,\n event.mode,\n rows\n )\n );\n }\n\n /** @hidden */\n private _setDragInProgress(dragging: boolean): void {\n this.dragDropInProgress = dragging;\n dragging ? this._blockScrolling() : this._enableScrolling();\n }\n\n /** @hidden */\n private _isDroppedInsideItself(dropRow: TableRow, dragRow: TableRow): boolean {\n const dropRowParents = getRowParents(dropRow);\n return !!dropRowParents.find((row) => row === dragRow);\n }\n\n /** @hidden */\n private _dragDropUpdateDragParentRowAttributes(dragRow: TableRow): void {\n const parentRow = dragRow.parent;\n\n if (!parentRow) {\n return;\n }\n\n const parentRowChildren = findRowChildren(parentRow, this._table._tableRows);\n const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n if (parentRowChildren.length - (dragRowChildren.length + 1) === 0) {\n parentRow.setRowType(TableRowType.ITEM);\n }\n }\n\n /** @hidden */\n private _dragDropUpdateDropRowAttributes(dragRow: TableRow, dropRow: TableRow, mode: FdDndDropEventMode): void {\n if (dragRow.parent) {\n // Remove child row from previous parent row.\n dragRow.parent.children.splice(dragRow.parent.children.indexOf(dragRow), 1);\n }\n dragRow.level = dropRow.level + (mode === 'group' ? 1 : 0);\n\n if (mode === 'group') {\n dragRow.parent = dropRow;\n if (!dropRow.isTree) {\n dropRow.setRowType(TableRowType.TREE);\n }\n\n dropRow.children.push(dragRow);\n dropRow.lastChild = dragRow;\n } else {\n dragRow.parent = dropRow.parent;\n dropRow.parent?.children.push(dragRow);\n if (dropRow.parent) {\n dropRow.parent.lastChild = dragRow;\n }\n }\n\n const children = findRowChildren(dragRow, this._table._tableRows);\n children.forEach((row) => {\n row.level = getRowParents(row).length;\n });\n }\n\n /** @hidden */\n private _dragDropRearrangeTreeRows(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n if (event.mode === 'shift') {\n this._handleShiftDropAction(dragRow, dropRow, event);\n } else {\n this._handleReplaceDropAction(dragRow, dropRow);\n }\n }\n\n /** @hidden */\n private _getNewDragDropRowsPosition(dragRow: TableRow, dropRow: TableRow): UpdatedDndRowsPosition {\n const allRows = this._table._tableRows;\n\n const dragRowIndex = allRows.findIndex((row) => row === dragRow);\n const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n const rowsToMove = allRows.splice(dragRowIndex, dragRowChildren.length + 1);\n\n const dropRowIndex = allRows.findIndex((row) => row === dropRow);\n const dropRowChildren = findRowChildren(dropRow, this._table._tableRows);\n\n const dropRowItemsLength = dropRowChildren.length + 1;\n\n const rowsAfterDropRow = allRows.splice(dropRowIndex + dropRowItemsLength, allRows.length + dropRowItemsLength);\n const dropRowItems = allRows.splice(dropRowIndex, dropRowItemsLength);\n\n return {\n allRows,\n rowsToMove,\n rowsAfterDropRow,\n dropRowItems\n };\n }\n\n /** @hidden */\n private _handleShiftDropAction(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n dragRow,\n dropRow\n );\n\n this._table._tableRows = [\n ...allRows,\n ...(event.insertAt === 'after' ? dropRowItems : []),\n ...rowsToMove,\n ...(event.insertAt === 'after' ? [] : dropRowItems),\n ...rowsAfterDropRow\n ];\n }\n\n /** @hidden */\n private _handleReplaceDropAction(dragRow: TableRow, dropRow: TableRow): void {\n const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n dragRow,\n dropRow\n );\n\n this._table._tableRows = [...allRows, ...dropRowItems, ...rowsToMove, ...rowsAfterDropRow];\n }\n\n /** @hidden */\n private _blockScrolling(): void {\n this._table._focusableGrid._preventKeydown = true;\n this._table.tableContainer.nativeElement.addEventListener('DOMMouseScroll', preventDefault, false);\n this._table.tableContainer.nativeElement.addEventListener('wheel', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('mousewheel', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('touchmove', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('keydown', preventDefaultForScrollKeys, false);\n }\n\n /** @hidden */\n private _enableScrolling(): void {\n this._table._focusableGrid._preventKeydown = false;\n this._table.tableContainer.nativeElement.removeEventListener('DOMMouseScroll', preventDefault, false);\n this._table.tableContainer.nativeElement.removeEventListener('wheel', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('mousewheel', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('touchmove', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('keydown', preventDefaultForScrollKeys, false);\n }\n}\n\nfunction preventDefault(event: Event): void {\n event.preventDefault();\n}\n\nfunction preventDefaultForScrollKeys(event: KeyboardEvent): boolean | undefined {\n if (\n !event.altKey &&\n KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, SPACE, PAGE_DOWN, PAGE_UP, END, HOME])\n ) {\n preventDefault(event);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FocusableItemPosition } from '@fundamental-ngx/cdk/utils';\nimport { Observable, Subject } from 'rxjs';\nimport { convertTreeLikeToFlatList, createGroupedTableRowsTree, sortTreeLikeGroupedRows } from '../helpers';\nimport { CollectionGroup } from '../interfaces';\nimport { TableRow } from '../models';\nimport { TableCellActivateEvent } from '../models/table-cell-activate-event.model';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport type ToggleRowModel =\n | {\n type: 'toggleRow';\n row: TableRow;\n }\n | {\n type: 'toggleSingleSelectableRow';\n row: TableRow;\n }\n | {\n type: 'toggleMultiSelectRow';\n row: TableRow;\n event?: Event;\n };\n\nexport interface CellClickedModel {\n index: number;\n row: TableRow;\n}\n\n@Injectable()\nexport class TableRowService<T = any> {\n /** Stream that emits when toggling all selectable rows is needed. */\n readonly toggleAllSelectableRows$: Observable<boolean>;\n\n /** Stream that emits when table cell being clicked. */\n readonly cellClicked$: Observable<CellClickedModel>;\n\n /** Stream that emits when scrolling to overlapped cell is needed. */\n readonly scrollToOverlappedCell$: Observable<void>;\n\n /** Stream that emits when the table cell being focused. */\n readonly cellFocused$: Observable<FocusableItemPosition>;\n\n /** Stream that emits when the table cell being focused. */\n readonly cellActivate$: Observable<TableCellActivateEvent<any>>;\n\n /** Toggle row stream. */\n readonly toggleRow$: Observable<ToggleRowModel>;\n\n /** Editable cells map. */\n readonly editableCells = new Map<TableRow<any>, EditableTableCell[]>();\n\n /** @hidden */\n readonly childRowsAdded$ = new Subject<{ row: TableRow; rowIndex: number; items: T[] }>();\n\n /** Stream to load child items for a particular rows. */\n readonly loadChildRows$ = new Subject<TableRow<T>[]>();\n\n /** @hidden */\n private readonly _toggleRowSubject = new Subject<ToggleRowModel>();\n\n /** @hidden */\n private readonly _scrollToOverlappedCellSubject = new Subject<void>();\n\n /** @hidden */\n private readonly _cellClickedSubject = new Subject<CellClickedModel>();\n\n /** @hidden */\n private readonly _cellActivateSubject = new Subject<TableCellActivateEvent<any>>();\n\n /** @hidden */\n private readonly _cellFocusedSubject = new Subject<FocusableItemPosition>();\n\n /** @hidden */\n private readonly _toggleAllSelectableRowsSubject = new Subject<boolean>();\n\n /** @hidden */\n constructor() {\n this.toggleAllSelectableRows$ = this._toggleAllSelectableRowsSubject.asObservable();\n this.cellClicked$ = this._cellClickedSubject.asObservable();\n this.scrollToOverlappedCell$ = this._scrollToOverlappedCellSubject.asObservable();\n this.cellFocused$ = this._cellFocusedSubject.asObservable();\n this.cellActivate$ = this._cellActivateSubject.asObservable();\n this.toggleRow$ = this._toggleRowSubject.asObservable();\n }\n\n /** `toggleRow$` stream trigger. */\n toggleRow(evt: ToggleRowModel): void {\n this._toggleRowSubject.next(evt);\n }\n\n /** `scrollToOverlappedCell$` stream trigger. */\n scrollToOverlappedCell(): void {\n this._scrollToOverlappedCellSubject.next();\n }\n\n /** `cellClicked$` stream trigger. */\n cellClicked(evt: CellClickedModel): void {\n this._cellClickedSubject.next(evt);\n }\n\n /** @hidden */\n cellActivate(columnIndex: number, row: TableRow): void {\n this._cellActivateSubject.next({ columnIndex, row: row.value });\n }\n\n /** `cellFocused$` stream trigger. */\n cellFocused(evt: FocusableItemPosition): void {\n this._cellFocusedSubject.next(evt);\n }\n\n /** `toggleAllSelectableRows$` stream trigger. */\n toggleAllSelectableRows(selectAll: boolean): void {\n this._toggleAllSelectableRowsSubject.next(selectAll);\n }\n\n /** Groups the table rows. */\n groupTableRows(\n sourceRows: TableRow[],\n groups: Iterable<CollectionGroup>,\n groupRulesMap: Map<string, CollectionGroup>\n ): TableRow[] {\n const groupRules = Array.from(groups);\n\n if (!groupRules.length) {\n /**\n * In case if previously we had groups with collapsed items\n * but now we don't have it we need to reset row.hidden flag\n * in order to avoid empty table after groups settings removing\n */\n sourceRows.forEach((row) => {\n row.hidden = false;\n });\n return sourceRows;\n }\n\n // Build tree like groups\n const treeLikeGroupedRows = createGroupedTableRowsTree(groupRules, sourceRows);\n\n // Sort tree like groups\n const sortedTreeLikeGroupedRows = sortTreeLikeGroupedRows(treeLikeGroupedRows, groupRulesMap);\n\n // Convert tree like list to a flat list\n return convertTreeLikeToFlatList(sortedTreeLikeGroupedRows);\n }\n\n /** Sets editable cells for particular row. */\n updateEditableCells(row: TableRow, cells: EditableTableCell[]): void {\n this.editableCells.set(row, cells);\n }\n\n /** Removes editable cells of particular row. */\n removeEditableCells(row: TableRow): void {\n this.editableCells.delete(row);\n }\n\n /** Triggers stream to load child items for a particular rows. */\n loadChildRows(rows: TableRow<T> | TableRow<T>[]): void {\n const expandableRows: TableRow<T>[] = [];\n if (Array.isArray(rows)) {\n expandableRows.push(...rows.filter((r) => !r.childItemsLoading$.value));\n } else {\n if (rows.childItemsLoading$.value) {\n return;\n }\n expandableRows.push(rows);\n }\n this.loadChildRows$.next(expandableRows);\n }\n}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\n\nimport { DOCUMENT, DestroyRef, Directive, ElementRef, NgZone, OnInit, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n FocusableCellPosition,\n FocusableItemPosition,\n KeyUtil,\n Nullable,\n RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { fromEvent } from 'rxjs';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\nimport { TableRowService } from '../services/table-row.service';\n\n@Directive({\n selector: '[fdpTableHeaderResizer]',\n standalone: true\n})\nexport class TableHeaderResizerDirective implements OnInit {\n /** @hidden */\n focusedCellPosition: Nullable<FocusableCellPosition>;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _elmRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n private readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n private readonly _document = inject(DOCUMENT);\n\n /** @hidden */\n private _focusinTimerId: any;\n\n /** @hidden */\n private get _headerCellFocused(): boolean {\n return this._document.activeElement?.tagName.toLowerCase() === 'th';\n }\n /** @hidden */\n ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n if (\n (KeyUtil.isKeyCode(event, LEFT_ARROW) ||\n (this._isRtl() && KeyUtil.isKeyCode(event, RIGHT_ARROW))) &&\n event.shiftKey &&\n this._headerCellFocused\n ) {\n this._tableColumnResizeService._processResize(-32);\n event.preventDefault();\n event.stopImmediatePropagation();\n } else if (\n (KeyUtil.isKeyCode(event, RIGHT_ARROW) ||\n (this._isRtl() && KeyUtil.isKeyCode(event, LEFT_ARROW))) &&\n event.shiftKey &&\n this._headerCellFocused\n ) {\n this._tableColumnResizeService._processResize(32);\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n });\n\n fromEvent(this._elmRef.nativeElement, 'focusin')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n if (!this._focusinTimerId) {\n return;\n }\n clearTimeout(this._focusinTimerId);\n this._focusinTimerId = null;\n });\n\n fromEvent(this._elmRef.nativeElement, 'focusout')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._focusinTimerId = setTimeout(() => {\n this.focusedCellPosition = null;\n });\n });\n });\n\n this._tableRowService.cellFocused$.subscribe((evt) => {\n this._onCellFocused(evt);\n });\n }\n\n /** @hidden */\n private _onCellFocused(position: FocusableItemPosition): void {\n this.focusedCellPosition = { rowIndex: position.rowIndex, colIndex: position.colIndex };\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { FdpCellDefContext } from './table-cell.directive';\n\nexport interface FdpHeaderCellDefContext<T = any> {\n $implicit: T;\n}\n\n/** Column header container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-header', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableHeader {}\n\n/**\n * Header cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpHeaderCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpHeaderCellDef<T = any> {\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(dir: FdpHeaderCellDef, ctx: FdpHeaderCellDefContext): ctx is FdpHeaderCellDefContext {\n return true;\n }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { DEFAULT_TABLE_STATE, FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { TableInitialState } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n selector: `[fdpTableInitialState],\n fdp-table`,\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_STATE_DIRECTIVE,\n useExisting: TableInitialStateDirective\n }\n ]\n})\nexport class TableInitialStateDirective extends TableInitialState {\n /** Initial visible columns. Consist of a list of unique column names */\n @Input()\n initialVisibleColumns: string[];\n\n /** Initial sort options. */\n @Input()\n initialSortBy: CollectionSort[] = [];\n\n /** Initial filter options. */\n @Input()\n initialFilterBy: CollectionFilter[] = [];\n\n /** Initial group options. */\n @Input()\n initialGroupBy: CollectionGroup[] = [];\n\n /** Initial page. */\n @Input()\n initialPage = 1;\n\n /**\n * Initial state of table.\n */\n @Input()\n set state(value: TableState) {\n this.setTableState(value || DEFAULT_TABLE_STATE);\n }\n\n get state(): TableState {\n return this.getTableState();\n }\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /** @hidden */\n setInitialState(): void {\n const prevState = this.getTableState();\n const columns = this._table.getTableColumns();\n const page = prevState.page;\n const visibleColumns =\n this.initialVisibleColumns ||\n (prevState.columns.length ? prevState.columns : columns.filter((c) => c.visible).map(({ name }) => name));\n\n const directiveInitialPage = this.initialPage ?? 1;\n\n this._table._loadPreviousPages =\n this._table.pageScrolling && this._table.loadPagesBefore && directiveInitialPage > 1;\n\n const initialPage = this._table._loadPreviousPages\n ? 1\n : directiveInitialPage < page.currentPage\n ? page.currentPage\n : directiveInitialPage;\n\n const initialPageSize =\n (this._table._loadPreviousPages ? directiveInitialPage : initialPage) *\n (this._table.pageSize || page.pageSize);\n\n this.setTableState({\n ...prevState,\n columns: visibleColumns,\n columnKeys: columns.filter((c) => visibleColumns.includes(c.name)).map((c) => c.key),\n sortBy: this.initialSortBy || prevState.sortBy,\n filterBy: this.initialFilterBy || prevState.filterBy,\n groupBy: this.initialGroupBy || prevState.groupBy,\n freezeToColumn: this._table.freezeColumnsTo || prevState.freezeToColumn,\n freezeToEndColumn: this._table.freezeEndColumnsTo || prevState.freezeToEndColumn,\n page: {\n currentPage: initialPage,\n pageSize: initialPageSize\n }\n });\n }\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this._tableService.getTableState();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState): void {\n this._tableService.setTableState(state);\n }\n}\n","import {\n DestroyRef,\n Directive,\n DOCUMENT,\n ElementRef,\n forwardRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable, Observer } from 'rxjs';\nimport { filter, share, tap } from 'rxjs/operators';\nimport {\n TABLE_SCROLLABLE,\n TableScrollable,\n TableScrollDispatcherService\n} from '../services/table-scroll-dispatcher.service';\n\n/**\n * Table Scrollable.\n * That directive should be assigned to table scrollable area.\n * It registers itself in table scroll dispatcher\n * and notify once element scrolled.\n *\n * For internal usage.\n */\n@Directive({\n selector: '[fdpTableScrollable]',\n exportAs: 'tableScrollable',\n standalone: true,\n providers: [{ provide: TABLE_SCROLLABLE, useExisting: forwardRef(() => TableScrollableDirective) }]\n})\nexport class TableScrollableDirective implements TableScrollable, OnInit, OnDestroy {\n /** @hidden */\n private _skipEvent = false;\n\n /** @hidden */\n private _prevScrollTop = 0;\n\n /** @hidden */\n private _prevScrollLeft = 0;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _document = inject(DOCUMENT);\n\n /** Scroll events stream */\n private _elementScrollStream: Observable<Event> = new Observable((observer: Observer<Event>) => {\n const subscription = this.ngZone.runOutsideAngular(() =>\n fromEvent(this.elementRef.nativeElement, 'scroll').subscribe(observer)\n );\n return () => subscription.unsubscribe();\n }).pipe(\n filter(() => {\n if (this._skipEvent) {\n this._skipEvent = false;\n return false;\n }\n return true;\n }),\n takeUntilDestroyed(this._destroyRef),\n share()\n );\n\n /** Vertical scroll stream */\n private _elementVerticalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n filter(() => this._prevScrollTop !== this.getScrollTop()),\n tap(() => (this._prevScrollTop = this.getScrollTop()))\n );\n\n /** Horizontal scroll stream */\n private _elementHorizontalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n filter(() => this._prevScrollLeft !== this.getScrollLeft()),\n tap(() => (this._prevScrollLeft = this.getScrollLeft()))\n );\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n protected scrollDispatcher: TableScrollDispatcherService,\n protected ngZone: NgZone\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.scrollDispatcher.register(this);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.scrollDispatcher.deregister(this);\n }\n\n /** Returns observable that emits when a scroll event is fired on the host element. */\n getScrollStream(): Observable<Event> {\n return this._elementScrollStream;\n }\n\n /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n getVerticalScrollStream(): Observable<Event> {\n return this._elementVerticalScrollStream;\n }\n\n /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n getHorizontalScrollStream(): Observable<Event> {\n return this._elementHorizontalScrollStream;\n }\n\n /** Returns scrollTop position of the host element. */\n getScrollTop(): number {\n return this.elementRef.nativeElement?.scrollTop;\n }\n\n /** Returns scrollLeft position of the host element. */\n getScrollLeft(): number {\n return this.elementRef.nativeElement?.scrollLeft;\n }\n\n /** Set scrollTop position of the host element. */\n setScrollTop(scrollTop: number, emitEvent = true): void {\n if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollTop === scrollTop) {\n return;\n }\n this._skipEvent = !emitEvent;\n this.elementRef.nativeElement.scrollTop = scrollTop;\n }\n\n /** Set scrollLeft position of the host element. */\n setScrollLeft(scrollLeft: number, emitEvent = true): void {\n if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollLeft === scrollLeft) {\n return;\n }\n this._skipEvent = !emitEvent;\n this.elementRef.nativeElement.scrollLeft = scrollLeft;\n }\n\n /** Scrolls to overlapped cell. */\n scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void {\n const tableScrollableEl = this.elementRef.nativeElement;\n const isRtl = rtl;\n\n if (\n (freezableColumnsSize || freezableEndColumnSize) &&\n tableScrollableEl.scrollWidth > tableScrollableEl.clientWidth\n ) {\n const activeEl = this._document.activeElement;\n if (\n activeEl &&\n !(\n activeEl.classList.contains('fd-table__cell--fixed') ||\n activeEl.classList.contains('fd-table__cell--fixed-end')\n )\n ) {\n if (freezableColumnsSize && !freezableEndColumnSize) {\n activeEl.scrollIntoView({ block: 'nearest', inline: 'end' });\n } else if (!freezableColumnsSize && freezableEndColumnSize) {\n activeEl.scrollIntoView({ block: 'nearest', inline: 'center' });\n } else if (freezableColumnsSize && freezableEndColumnSize) {\n // check to see if another element obstructs the active element\n const activeElmRect = activeEl.getBoundingClientRect();\n const activeElLeft = activeElmRect.left;\n const activeElTop = activeElmRect.top;\n const activeElWidth = activeElmRect.width;\n const topElementFromLeft = this._document.elementFromPoint(activeElLeft, activeElTop);\n // if the activeEl is overlapped\n if (\n topElementFromLeft &&\n !activeEl.isSameNode(topElementFromLeft) &&\n topElementFromLeft.classList.contains('fd-table__cell--fixed-end')\n ) {\n const topElementX = topElementFromLeft.getBoundingClientRect().left;\n const leftVal = isRtl\n ? (activeElLeft + activeElWidth - topElementX) * -1\n : activeElLeft + activeElWidth - topElementX;\n tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n } else if (\n topElementFromLeft &&\n !activeEl.isSameNode(topElementFromLeft) &&\n topElementFromLeft.classList.contains('fd-table__cell--fixed')\n ) {\n const topElementX = topElementFromLeft.getBoundingClientRect().right;\n const leftVal = isRtl\n ? (activeElLeft - activeElWidth - topElementX) * -1\n : activeElLeft - activeElWidth - topElementX;\n tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n }\n }\n }\n }\n }\n\n /** Set Scroll Position during component initialization. */\n initializeScrollTop(scrollTop: number): void {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setScrollTop(scrollTop, false);\n });\n });\n }\n}\n","import { Directive, EventEmitter, TemplateRef } from '@angular/core';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\n\nexport interface FdpViewSettingsFilterCustomDefContext {\n $implicit: any;\n valueChangeEmitter: EventEmitter<unknown>;\n contentDensity: ContentDensityMode;\n}\n\n@Directive({ selector: '[fdpViewSettingsFilterCustomDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpViewSettingsFilterCustomDef {\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpViewSettingsFilterCustomDefContext>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FdpViewSettingsFilterCustomDef,\n ctx: FdpViewSettingsFilterCustomDefContext\n ): ctx is FdpViewSettingsFilterCustomDefContext {\n return true;\n }\n}\n","import { DestroyRef, Directive, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE, FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE, ROW_HEIGHT } from '../constants';\nimport { TableDraggable, TableVirtualScroll } from '../models';\nimport { TableScrollDispatcherService } from '../services/table-scroll-dispatcher.service';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdp-table[virtualScroll]',\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n useExisting: TableVirtualScrollDirective\n }\n ]\n})\nexport class TableVirtualScrollDirective extends TableVirtualScroll implements OnChanges {\n /** Whether to show only visible rows in matter of performance\n * false by default, when true setting bodyHeight and rowHeight is required.\n */\n @Input()\n virtualScroll = false;\n\n /** Cache size for the virtualScroll, default is 40 in each direction */\n @Input()\n renderAhead = 40;\n\n /** Body height. */\n @Input()\n bodyHeight: string;\n\n /**\n * Minimum height of the row, required for the virtualScroll,\n * default is 44px in cozy, 32px in compact and 24px in condensed (set automatically)\n */\n @Input()\n rowHeight = ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n\n /**\n * Minimum height of the popping column when displayed in pop-in mode. Required when using popping columns and virtual scroll.\n */\n @Input()\n secondaryRowHeight: number | undefined;\n\n /** @hidden */\n virtualScrollTotalHeight = 0;\n\n /** @hidden */\n virtualScrollTransform$ = new BehaviorSubject<number>(0);\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private _virtualScrollCache = { startNodeIndex: -1, visibleNodeCount: -1, totalNodeCount: -1 };\n\n /** @hidden */\n private readonly _tableScrollDispatcher = inject(TableScrollDispatcherService);\n\n /** @hidden */\n private readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(readonly _tableService: TableService) {\n super();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._table.tableScrollable) {\n return;\n }\n if (this.virtualScroll && (changes['rowHeight'] || changes['virtualScroll'] || changes['renderAhead'])) {\n this.calculateVirtualScrollRows();\n }\n }\n\n /** Sets table reference. */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * Calculates rows to be rendered in the table.\n */\n calculateVirtualScrollRows(): void {\n if (!this.virtualScroll || !this.bodyHeight || this._dndTableDirective?.dragDropInProgress) {\n return;\n }\n\n let rowHeight = this.rowHeight + 1;\n\n const tableContainerEl = this._table.tableContainer.nativeElement;\n\n if (this._tableService.poppingColumns$().length > 0) {\n const secondaryRows = tableContainerEl.getElementsByClassName('fd-table__row--secondary');\n if (secondaryRows[0]) {\n rowHeight = rowHeight + secondaryRows[0].clientHeight;\n }\n }\n\n const rowsVisible = this._table._tableRowsVisible;\n const currentlyRenderedRows = this._table.getCurrentlyRenderedRows();\n const totalNodeCount = rowsVisible.length;\n const scrollTop = this._table.tableScrollable.getScrollTop();\n\n let startNodeIndex = Math.floor(scrollTop / rowHeight) - this.renderAhead;\n startNodeIndex = Math.max(0, startNodeIndex);\n\n let visibleNodeCount = Math.ceil(tableContainerEl.clientHeight / rowHeight) + 2 * this.renderAhead;\n visibleNodeCount = Math.min(totalNodeCount - startNodeIndex, visibleNodeCount);\n\n this.virtualScrollTransform$.next(startNodeIndex * rowHeight);\n\n // Simple caching to avoid unnecessary re-renderings\n const isCached =\n startNodeIndex === this._virtualScrollCache.startNodeIndex &&\n visibleNodeCount === this._virtualScrollCache.visibleNodeCount &&\n totalNodeCount === this._virtualScrollCache.totalNodeCount &&\n // On rows change, even if the total number of rows is the same, the row object will be different\n startNodeIndex === currentlyRenderedRows[0];\n\n if (isCached) {\n return;\n }\n\n this._virtualScrollCache = { startNodeIndex, visibleNodeCount, totalNodeCount };\n this.virtualScrollTotalHeight = totalNodeCount * rowHeight - visibleNodeCount * rowHeight;\n this._table.setCurrentlyRenderedRows(\n startNodeIndex,\n rowsVisible.slice(startNodeIndex, startNodeIndex + visibleNodeCount).length\n );\n }\n\n /**\n * Initialises scroll listener.\n */\n listenOnVirtualScroll(): void {\n this._tableScrollDispatcher\n .verticallyScrolled()\n .pipe(\n filter(() => this.virtualScroll && !!this.bodyHeight),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((scrollable) => {\n this.calculateVirtualScrollRows();\n this._tableService.setTableState({\n ...this._table.getTableState(),\n scrollTopPosition: scrollable.getScrollTop()\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ColumnAlign } from '../enums/column-align.enum';\nimport { TableColumn } from '../table-column';\n\n@Pipe({ name: 'tableCellStyles', standalone: true })\nexport class TableCellStylesPipe implements PipeTransform {\n /** @hidden */\n transform(\n column: TableColumn,\n isRtl: boolean,\n semanticHighlightingColumnWidth: number | null,\n selectionColumnWidth: number | null,\n isFrozenColumn: boolean,\n isFrozenEndColumn: boolean,\n prevColumnWidthPx: number | null,\n columnWidth: string,\n nextColumnWidthPx: number | null,\n noBorders?: boolean,\n noHorizontalBorders?: boolean,\n noVerticalBorders?: boolean\n ): Record<string, number | string> {\n const styles: { [property: string]: number | string } = {};\n\n if (isFrozenColumn) {\n const key = isRtl ? 'right.px' : 'left.px';\n styles[key] =\n (semanticHighlightingColumnWidth || 0) + (selectionColumnWidth || 0) + (prevColumnWidthPx || 0);\n }\n\n if (isFrozenEndColumn) {\n const key = isRtl ? 'left.px' : 'right.px';\n styles[key] = (nextColumnWidthPx || 0).toString();\n }\n\n if (noHorizontalBorders) {\n styles['border-top'] = 'none';\n styles['border-bottom'] = 'none';\n }\n\n if (noVerticalBorders) {\n styles['border-left'] = 'none';\n styles['border-right'] = 'none';\n }\n\n if (noBorders) {\n styles['border'] = 'none';\n } else {\n styles['min-width'] = columnWidth;\n styles['max-width'] = columnWidth;\n styles['width'] = columnWidth;\n }\n\n // The \"start\" value does align left when you are using a LTR browser.\n // In RTL browsers, the \"start\" value aligns right.\n // Since we want to dynamically apply alignment only depending on the service value, we are using \"left\"/\"right\" as values instead\n switch (column.align) {\n case ColumnAlign.START:\n styles['text-align'] = isRtl ? 'right' : 'left';\n break;\n case ColumnAlign.END:\n styles['text-align'] = isRtl ? 'left' : 'right';\n break;\n default:\n styles['text-align'] = 'center';\n break;\n }\n\n return styles;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TableColumnResizableSide } from '../directives/table-cell-resizable.directive';\n\n@Pipe({ name: 'columnResizableSide', standalone: true })\nexport class ColumnResizableSidePipe implements PipeTransform {\n /** @hidden */\n transform(\n columnIndex: number,\n visibleColumnsLength: number,\n navigationColumnShown: boolean | null\n ): TableColumnResizableSide {\n if (columnIndex === 0) {\n return 'end';\n }\n\n const isLastColumn = columnIndex === visibleColumnsLength - 1;\n\n if (isLastColumn && navigationColumnShown) {\n return 'start';\n }\n\n return 'both';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { SortDirection } from '../enums';\nimport { CollectionSort } from '../interfaces';\n\nexport const ARIA_SORT: Record<`${SortDirection}`, string> = {\n none: 'none',\n asc: 'ascending',\n desc: 'descending'\n};\n\n@Pipe({\n pure: true,\n standalone: true,\n name: 'fdpTableColumnSortingDirection'\n})\nexport class TableColumnSortingDirectionPipe implements PipeTransform {\n /** @hidden */\n transform(sorting: Nullable<CollectionSort>): string {\n if (!sorting) {\n return 'none';\n }\n\n return ARIA_SORT[sorting.direction];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isFunction, isString } from '@fundamental-ngx/platform/shared';\nimport { TableRowType } from '../enums/row-type.enum';\nimport { TableRow, TableRowClass } from '../models';\n\n@Pipe({ name: 'rowClasses', standalone: true })\nexport class RowClassesPipe implements PipeTransform {\n /** @hidden */\n transform(row: TableRow, rowsClass: TableRowClass): string {\n const treeRowClass = row.type === TableRowType.TREE ? 'fdp-table__row--tree' : '';\n const rowClasses = this._getRowCustomCssClasses(row, rowsClass);\n\n return rowClasses.concat(' ', treeRowClass).trim();\n }\n\n /** @hidden */\n private _getRowCustomCssClasses(row: TableRow, rowsClass: TableRowClass): string {\n if (!rowsClass) {\n return '';\n }\n\n let rowClasses = '';\n\n if (isString(rowsClass)) {\n rowClasses = rowsClass;\n }\n\n if (isFunction(rowsClass)) {\n rowClasses = (rowsClass as any)(row.value) || '';\n }\n\n return rowClasses.trim();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { SELECTION_COLUMN_WIDTH } from '../constants';\n\n@Pipe({ name: 'selectionCellStyles', standalone: true })\nexport class SelectionCellStylesPipe implements PipeTransform {\n /** @hidden */\n transform(\n contentDensity: Nullable<ContentDensityMode>,\n rtl: boolean,\n semanticHighlightingColumnWidth: number | null\n ): Record<string, string> {\n if (!contentDensity) {\n contentDensity = ContentDensityMode.COZY;\n }\n const rtlKey = rtl ? 'right' : 'left';\n const selectionColumnWidth = SELECTION_COLUMN_WIDTH.get(contentDensity) + 'px';\n\n return {\n [rtlKey]: (semanticHighlightingColumnWidth || 0) + 'px',\n 'min-width': selectionColumnWidth,\n 'max-width': selectionColumnWidth\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n FdpCellDef,\n FdpEditableCellDef,\n FdpEditableCellFormDirective,\n FdpHeaderCellDef,\n FdpTableCell,\n FdpTableHeader,\n FdpViewSettingsFilterCustomDef,\n PlatformTableCellResizableDirective,\n PlatformTableColumnResponsiveDirective,\n TableCellHeaderPopoverDirective,\n TableDataSourceDirective,\n TableDraggableDirective,\n TableHeaderResizerDirective,\n TableInitialStateDirective,\n TableScrollableDirective,\n TableVirtualScrollDirective\n} from './directives';\nimport { ColumnResizableSidePipe, RowClassesPipe, SelectionCellStylesPipe, TableCellStylesPipe } from './pipes';\n\nconst importExports = [\n TableInitialStateDirective,\n TableDraggableDirective,\n TableVirtualScrollDirective,\n PlatformTableColumnResponsiveDirective,\n FdpTableCell,\n TableCellHeaderPopoverDirective,\n PlatformTableCellResizableDirective,\n TableDataSourceDirective,\n TableDraggableDirective,\n FdpTableHeader,\n TableHeaderResizerDirective,\n TableInitialStateDirective,\n TableScrollableDirective,\n FdpCellDef,\n FdpEditableCellDef,\n FdpEditableCellFormDirective,\n FdpViewSettingsFilterCustomDef,\n TableVirtualScrollDirective,\n FdpHeaderCellDef,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n RowClassesPipe\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...importExports],\n exports: [...importExports]\n})\nexport class TableHelpersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TableService","i1.TableScrollDispatcherService","isDataSource","filter","isString"],"mappings":";;;;;;;;;;;;;;MAesB,KAAK,CAAA;AAA3B,IAAA,WAAA,GAAA;;AAyKa,QAAA,IAAA,CAAA,qBAAqB,GAAuB,IAAI,YAAY,EAAQ;;AAGpE,QAAA,IAAA,CAAA,uBAAuB,GAAuB,IAAI,YAAY,EAAQ;;AAGtE,QAAA,IAAA,CAAA,sBAAsB,GAAuB,IAAI,YAAY,EAAQ;;AAGrE,QAAA,IAAA,CAAA,uBAAuB,GAAuB,IAAI,YAAY,EAAQ;;AAGtE,QAAA,IAAA,CAAA,uBAAuB,GAAsB,IAAI,YAAY,EAAQ;IAUlF;AAAC;;MC3MY,6BAA6B,GAAG,IAAI,cAAc,CAAiB,4BAA4B;MAC/F,yBAAyB,GAAG,IAAI,cAAc,CAAoB,wBAAwB;MAC1F,kCAAkC,GAAG,IAAI,cAAc,CAChE,gCAAgC;;ACC7B,MAAM,kBAAkB,GAA6B;AACxD,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,WAAW,EAAE;;AAGV,MAAM,0BAA0B,GAA0B;AAC7D,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE;;AAGP,MAAM,mBAAmB,GAAyB;AACrD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,WAAW,EAAE,0BAA0B;AACvC,IAAA,iBAAiB,EAAE;;AAGhB,MAAM,wBAAwB,GAAG;AAEjC,MAAM,2BAA2B,GAAG;AAEpC,MAAM,kCAAkC,GAAG;AAE3C,MAAM,sBAAsB,GAA4C,IAAI,GAAG,CAA6B;AAC/G,IAAA,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7B,IAAA,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;AAChC,IAAA,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE;AACpC,CAAA;AAEM,MAAM,sBAAsB,GAAG;AAE/B,MAAM,UAAU,GAA4C,IAAI,GAAG,CAA6B;AACnG,IAAA,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7B,IAAA,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;AAChC,IAAA,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE;AACpC,CAAA;;MCTY,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;;AAGa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAC,mBAAmB,CAAC;;AAEtD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,EAAE,kEAAC;;AAEnC,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,KAAK,2EAAC;;AAE/C,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,KAAK,qEAAC;;AAEzC,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CAAC,CAAC,6EAAC;;AAE7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,EAAE,2DAAC;;AAEpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,gEAAC;;AAE3D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,EAAE,2DAAC;;QAEpD,IAAA,CAAA,qBAAqB,GAAG,CAAC;;AAEhB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAgB,EAAE,CAAC;;AAEtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEnD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAc;;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAe;;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAiB;;AAE7C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAc;;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAoB;;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAEnD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;AAEpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA8B,IAAI,GAAG,EAAE,sDAAC;AACpE;;;AAGG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAkC,IAAI,GAAG,EAAE,wDAAC;AAE1E;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAA+B,IAAI,GAAG,EAAE,CAAC;;AAGhF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAqY1D,IAAA;;IAlYG,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACtC;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;;AAGA,IAAA,eAAe,CAAC,SAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACtC;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;;AAGA,IAAA,MAAM,CAAC,WAAwB,EAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE;QAEvD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEnD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;AAErE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;AAGA,IAAA,OAAO,CAAC,SAAuC,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,aAAa,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;AAE3D,QAAA,MAAM,YAAY,GAAqB,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE;QAEtE,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE;QAEhE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;AAExB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B;IACJ;;AAGA,IAAA,OAAO,CAAC,SAA2B,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,aAAa,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;AAE3D,QAAA,MAAM,YAAY,GAAqB;YACnC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/F,YAAA,GAAG;SACN;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE;QAEhE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;AAExB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B;IACJ;;AAGA,IAAA,UAAU,CAAC,WAA2C,EAAA;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB;cACrC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACvB,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,aAAA,CAAC;cACF,EAAE;QACR,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAElE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;;AAGA,IAAA,UAAU,CAAC,UAA8B,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;AAE/D,QAAA,MAAM,cAAc,GAAuB;YACvC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACzB,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,aAAA,CAAC;SACL;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAClE,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;;AAGA,IAAA,aAAa,CAAC,MAAgB,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB,eAAe,CAAC,MAAM,CAC7D,CAAC,QAAQ,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjD;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;QAClE,IAAI,CAAC,mBAAmB,EAAE;AAE1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;AAGA,IAAA,SAAS,CAAC,MAAqC,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAEzD,QAAA,MAAM,SAAS,GAAsB,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;QAE9D,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC5D,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B;IACJ;;AAGA,IAAA,SAAS,CAAC,WAA8B,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAEzD,QAAA,MAAM,SAAS,GAAsB;YACjC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,YAAA,GAAG;SACN;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;QAE9D,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B;IACJ;;IAGA,QAAQ,CAAC,UAAyB,EAAE,GAAa,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;QACpE;aAAO;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QACvE;AAEA,QAAA,MAAM,GAAG,GAAG;AACR,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,QAAQ,EAAE,GAAG,GAAG,SAAS,CAAC,iBAAiB,GAAG,SAAS,CAAC;SAC3D;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;IAGA,UAAU,CAAC,OAAiB,EAAE,IAAc,EAAA;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,WAAW,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAE1D,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC;AAC/B,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE;QAE1F,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAEzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC;IACJ;;AAGA,IAAA,cAAc,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI;AAEpC,QAAA,IAAI,aAAa,CAAC,WAAW,KAAK,WAAW,EAAE;YAC3C;QACJ;QAEA,MAAM,KAAK,GAAe,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC;AAEvE,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE;AAE5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;;AAGA,IAAA,eAAe,CAAC,YAAoB,EAAE,eAAe,GAAG,IAAI,EAAA;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI;AAEpC,QAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC;QACJ;QAEA,IAAI,KAAK,GAAe,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC;QAEnE,IAAI,eAAe,EAAE;AACjB,YAAA,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE;AAE5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;;IAGA,eAAe,GAAA;AACX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,OAAO;YACH,UAAU,EAAE,UAAU,CAAC,UAAU;AACjC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,UAAU,CAAC,OAAO;AAC3B,YAAA,WAAW,EAAE;AACT,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,IAAI,EAAE;AACF,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA,iBAAiB,EAAE;SACtB;IACL;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,MAAM;IAC/C;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9G;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;AAC5C,QAAA,MAAM,yBAAyB,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC5D,YAAA,GAAG,IAAI;AACP,YAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AAC5C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACrB;YACA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AACzB,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,EAAE,IAAI,GAAG,EAA8B,CAAC,CAC5C;AACD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;AAE5E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1D;;IAGA,YAAY,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB,EAAE;QAC7C,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAElE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;AAEA;;AAEG;IACH,sBAAsB,GAAA;QAClB,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;;IAGQ,aAAa,CAAC,KAAa,EAAE,SAA2B,EAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC;AAC7E,QAAA,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;IACtD;8GAjcS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;AAqcD;AACA,SAAS,qBAAqB,CAAC,KAAiB,EAAE,WAAmB,EAAA;IACjE,MAAM,YAAY,GAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE;IACnE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;AAC3C;AAEA;AACA,SAAS,kBAAkB,CAAC,KAAiB,EAAE,QAAgB,EAAA;IAC3D,MAAM,YAAY,GAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE;IAChE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;AAC3C;;MCpea,sBAAsB,CAAA;;AAW/B,IAAA,WAAA,CACoC,MAAa,EAC5B,aAA2B,EAC3B,OAAmB,EAAA;QAFJ,IAAA,CAAA,MAAM,GAAN,MAAM;QACrB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,OAAO,GAAP,OAAO;;AAZX,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,GAAG,EAAqC;;AAGrE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAU9C;AAEH;;;;AAIG;IACH,wBAAwB,CAAC,MAAmB,EAAE,WAAqD,EAAA;AAC/F,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEhF,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AACA;;;AAGG;AACK,IAAA,qBAAqB,CAAC,WAAqD,EAAA;AAC/E,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AAC5C,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAI;YAClG,MAAM,CAAC,IAAI,CAAC;AACR,gBAAA,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ;AAC/D,gBAAA,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC3C,aAAA,CAAC;AAEF,YAAA,OAAO,MAAM;QACjB,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,cAAc;IACzB;AAEA;;;AAGG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;QAEvC,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;AACjE,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAC3D,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,yBAAyB,EAAE;AACpC,QAAA,CAAC,CAAC;IACV;;IAGQ,yBAAyB,GAAA;QAC7B,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAEpE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,IAAI,KAAI;YACtD,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CACtC,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,IAAI,KAAK,IAAI,UAAU,CAAC,GAAG,IAAI,KAAK,CACrE;YAED,IAAI,iBAAiB,EAAE;gBACnB,YAAY,GAAG,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,iBAAiB,CAAC,UAAU;AACpF,gBAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,UAAU;YACvD;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,YAAY,EAAE;YACf;QACJ;QAEA,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC;AAE7F,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;AACvE,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC3G;AA3FS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAYnB,KAAK,EAAA,EAAA,EAAA,KAAA,EAAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAZR,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;0BAaQ,MAAM;2BAAC,KAAK;;;MCtBC,WAAW,CAAA;AA4FhC;;MCzFY,sCAAsC,CAAA;AAC/C;;;AAGG;IACH,IACI,WAAW,CAAC,KAA+C,EAAA;AAC3D,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzD;QACJ;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;IAC1F;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;;IAMA,WAAA,CACqB,uBAA+C,EACd,OAA2B,EAAA;QAD5D,IAAA,CAAA,uBAAuB,GAAvB,uBAAuB;QACU,IAAA,CAAA,OAAO,GAAP,OAAO;;QALrD,IAAA,CAAA,YAAY,GAA6C,EAAE;IAMhE;AAzBM,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,qDAwBvB,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAxB1B,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,0BAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAyBQ;;0BAAY,MAAM;2BAAC,WAAW;;sBAnBlC,KAAK;uBAAC,0BAA0B;;;MCLxB,+BAA+B,CAAA;;AAExC,IAAA,WAAA,CAAmB,WAAgE,EAAA;QAAhE,IAAA,CAAA,WAAW,GAAX,WAAW;IAAwD;;AAGtF,IAAA,OAAO,sBAAsB,CACzB,SAA0C,EAC1C,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI;IACf;8GAVS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MC0BY,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB;MAGzE,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;;AAGY,QAAA,IAAA,CAAA,cAAc,GAA6B,IAAI,OAAO,EAAE;;AAExD,QAAA,IAAA,CAAA,sBAAsB,GAA6B,IAAI,OAAO,EAAE;;AAEhE,QAAA,IAAA,CAAA,wBAAwB,GAA6B,IAAI,OAAO,EAAE;;AAElE,QAAA,IAAA,CAAA,2BAA2B,GAAuC,IAAI,GAAG,EAAE;AA8CtF,IAAA;;AA3CG,IAAA,QAAQ,CAAC,UAA2B,EAAA;QAChC,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAClD;QACJ;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE;QAC9B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3F,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/G,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAE3G,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;IACzD;;AAGA,IAAA,UAAU,CAAC,UAA2B,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACnD;QACJ;QAEA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE;IACnE;;IAGA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC7C;;IAGA,oBAAoB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;IACvD;;IAGA,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;IACrD;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;AAE3G,QAAA,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE;IAC5C;8GArDS,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;AC3BM,MAAM,0BAA0B,GAAG;AAE1C;;;;;AAKG;MAEU,wBAAwB,CAAA;;AAIjC,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB;IACjC;;AASA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,CAAC;IACrC;;AAMA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;;AAGA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM;IAC9E;;AA8DA,IAAA,WAAA,CAA6B,6BAA2D,EAAA;QAA3D,IAAA,CAAA,6BAA6B,GAA7B,6BAA6B;;QA1FjD,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAsB,IAAI,GAAG,EAAE,CAAC;;AAO5E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,4DAAC;;AAQhC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;;AAalD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,GAAG,EAAkB;;AAGjD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAkD;;QAG3E,IAAA,CAAA,mBAAmB,GAAa,EAAE;;AAGlC,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,GAAG,EAA8B;;AAGtE,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,GAAG,EAA8B;;AAGvE,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,GAAG,EAAkB;;AAGzD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,GAAG,EAAkB;;QAG1D,IAAA,CAAA,OAAO,GAAkB,IAAI;;QAG7B,IAAA,CAAA,aAAa,GAAkB,IAAI;;AAGnC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;;QAMhD,IAAA,CAAA,gBAAgB,GAAkB,IAAI;;QAGtC,IAAA,CAAA,WAAW,GAAG,CAAC;;AAGf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;AAGnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG/B,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAE;;AAMpC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;AAGzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAIE,QAAA,IAAI,CAAC;AACD,cAAE,oBAAoB;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE;AACjD,QAAA,CAAC,CAAC;IACV;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAElC,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;IAC/C;;AAGA,IAAA,WAAW,CAAC,GAAU,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;IACxB;;AAGA,IAAA,cAAc,CAAC,kBAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE;AAC3C,QAAA,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE;QAC5C,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACzC,YAAA,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAClF,QAAA,CAAC,CAAC;QACF,kBAAkB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACnD,YAAA,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACnF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,kBAAkB,CAAC;QAClD,IAAI,CAAC,wBAAwB,EAAE;IACnC;;IAGA,wBAAwB,GAAA;AACpB,QAAA,IAAI,iBAAiB,GAAG,CAAC,EACrB,aAAa,GAAG,CAAC;AACrB,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE;YAC9E,iBAAiB;gBACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC;YACzG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACrE;AACA,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,EAAE;YAC/E,aAAa;gBACT,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC;YACzG,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;QAClE;IACJ;;IAGA,mCAAmC,CAAC,UAAkB,EAAE,KAAa,EAAA;QACjE,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,EAAE;AACxE,YAAA,IAAI,MAAM,KAAK,UAAU,EAAE;gBACvB,KAAK,GAAG,IAAI;YAChB;iBAAO,IAAI,KAAK,EAAE;gBACd,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;YACjE;QACJ;IACJ;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC;QAClE,OAAO,eAAe,IAAI,OAAO;IACrC;;AAGA,IAAA,qBAAqB,CAAC,UAAkB,EAAA;QACpC,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9D;;AAGA,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAChC,OAAO,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/D;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IAClE;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IACnE;;IAGA,kBAAkB,CAAC,UAAkB,EAAE,SAAqB,EAAA;AACxD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;IACrE;;IAGA,oBAAoB,CAAC,UAAkB,EAAE,SAAqB,EAAA;AAC1D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AAC9D,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,CAAC;AAE1F,QAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;YACjB;QACJ;AAEA,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC;IACrD;;IAGA,cAAc,CAAC,UAAkB,EAAE,KAAa,EAAA;QAC5C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QACjD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;IAChE;;IAGA,yBAAyB,CAAC,eAAuB,EAAE,aAAqB,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,QAAA,IAAI,eAAe,IAAI,IAAI,EAAE;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,eAAe,GAAG,0BAA0B,GAAG,gBAAgB;YACvF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO;QAElC,IAAI,CAAC,iCAAiC,EAAE;AAExC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC;;AAGA,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAE3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY;AAEzF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC9B;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa;QACxF,MAAM,WAAW,GAAG,cAAc,EAAE,qBAAqB,EAAE,CAAC,KAAK;AAEjE,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE;YACjC;QACJ;AAEA,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;YACtE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,WAAW;QAC3D;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;AAC9D,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC1B,UAAU,EACV,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAC9D;gBACL;YACJ;YACA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAChE;AAEA;;;AAGG;QACH,IACI,KAAK,GAAG,CAAC;aACR,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AACtD,gBAAA,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EACpE;AACE,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,WAAW;AAC7E,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC/D,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,WAAW;YAC7E;AACA,YAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,kCAAkC,EAAE;AACpE,YAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;oBAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9C,gBAAA,CAAC,CAAC;YACN;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAC;QACxE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC5D,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;QAEpE,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAC9D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;AACpG,QAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,GAAG,OAAO,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGQ,iCAAiC,GAAA;QACrC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAa,QAAQ,EAAE,WAAW;AACtE,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACrB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY;AAEzF,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK;YACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAC7B,QAAA,CAAC,CAAC;IACV;AAEA;;;;;AAKG;AACK,IAAA,0BAA0B,CAAC,YAAoB,EAAA;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAChB,aAAA,GAAG,CAAC,IAAI,CAAC,cAAc;AACxB,cAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,aAAa;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC;AACzG,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,cAAc,CAAA,CAAE,CAAC;AAEzG,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE;YACnC;QACJ;QACA,aAAa,CAAC,eAAe,GAAG,cAAc,CAAC,WAAW,GAAG,YAAY;IAC7E;8GA1WS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACPM,MAAM,iCAAiC,GAAG;AAEjD;;AAEG;AAmBG,MAAO,mCACT,SAAQ,kBAAkB,CAAA;AAnB9B,IAAA,WAAA,GAAA;;;QAqCY,IAAA,CAAA,cAAc,GAA6B,MAAM;;AAGxC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,kDAAC;;AAGlD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AA+E1C,IAAA;;IA3GG,IACI,aAAa,CAAC,KAA+B,EAAA;QAC7C,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC/B;;IAwBA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAC9B,SAAS,CAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW;iBAC3D,IAAI,CACD,MAAM,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,KAAK,IAAI,CAAC,EACvE,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EACjG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;AACtG,YAAA,CAAC,CAAC;YACN,SAAS,CAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO;AACvD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;gBACZ,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAChF,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB;QACJ;AAEA,QAAA,IAAI,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;IACxF;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;IAC1F;;AAGQ,IAAA,WAAW,CAAC,KAAiB,EAAA;AACjC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AACxC,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC,qBAAqB,EAAE;;QAE7C,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;AACzF,YAAA,IAAI,eAAmC;AACvC,YAAA,IAAI,aAAiC;AAErC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;kBAC3B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG;kBACnC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,iCAAiC;YAEzE,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE;AAChD,gBAAA,eAAe,GAAG,IAAI,CAAC,MAAM;AACzB,sBAAE,EAAE,CAAC,aAAc,CAAC,WAAW,IAAI,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW;AACjE,sBAAE,EAAE,CAAC,UAAU;gBAEnB,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YACzF;AAEA,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM;kBAC5B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG;kBAClC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,iCAAiC;YAE1E,IAAI,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,EAAE;AACnD,gBAAA,eAAe,GAAG,IAAI,CAAC,MAAM;sBACvB,EAAE,CAAC,aAAc,CAAC,WAAW,GAAG,EAAE,CAAC;sBACnC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW;AAEpC,gBAAA,aAAa,GAAG,IAAI,CAAC,UAAU;YACnC;YAEA,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,OAAO,EAAE,eAAe,EAAE,eAAgB,EAAE,aAAa,EAAE;QAC/D;aAAO;AACH,YAAA,OAAO,IAAI;QACf;IACJ;8GA/GS,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAfjC;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAlB/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,WAAW,EAAA;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAMI,KAAK;uBAAC,uBAAuB;;sBAU7B;;;MC/CiB,iBAAiB,CAAA;AAEtC;;ACMD;AACA;AAEA;MACa,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAFxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAI3D;;;AAGG;AAEH;MACa,UAAU,CAAA;;AAKnB,IAAA,WAAA,CAAmB,WAA8C,EAAA;QAA9C,IAAA,CAAA,WAAW,GAAX,WAAW;IAAsC;;AAGpE,IAAA,OAAO,sBAAsB,CAAI,GAAkB,EAAE,GAAsB,EAAA;AACvE,QAAA,OAAO,IAAI;IACf;8GAVS,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAFtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAIpD;;AAYL;MACa,kBAAkB,CAAA;;AAE3B,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;8GAF1C,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAF9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;;MAYpD,4BAA4B,CAAA;;AAErC,IAAA,WAAA,CAAmB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;8GAFzB,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAF1B,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE7E,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAA,4BAA8B,EAAE;AACxF,iBAAA;;;IC9CW;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,eAAwB;AACxB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,cAAsB;AACtB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EANW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAQV;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAChC,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,wBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;;ACLpC;AACO,MAAM,eAAe,GAAG;AAC3B,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,YAAY,EAAE;;AAOX,MAAM,qBAAqB,GAAoD;AAClF,IAAA,OAAO,EAAE,6CAA6C;AACtD,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,OAAO,EAAE,6CAA6C;AACtD,IAAA,UAAU,EAAE,gDAAgD;AAC5D,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,WAAW,EAAE,iDAAiD;AAC9D,IAAA,oBAAoB,EAAE,0DAA0D;AAChF,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,iBAAiB,EAAE,uDAAuD;AAC1E,IAAA,KAAK,EAAE,2CAA2C;AAClD,IAAA,SAAS,EAAE,+CAA+C;AAC1D,IAAA,MAAM,EAAE,4CAA4C;AACpD,IAAA,UAAU,EAAE;;AAGhB;AACO,MAAM,oBAAoB,GAG7B;AACA,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,YAAY,EAAE;;AAKX,MAAM,sBAAsB,GAAsC,MAAM,CAAC,MAAM,CAAC,oBAAoB;AAE3G;AACO,MAAM,sBAAsB,GAA6E;AAC5G,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE;;AAKF,MAAM,wBAAwB,GAAwC,MAAM,CAAC,MAAM,CAAC,sBAAsB;AAEjH;AACO,MAAM,sBAAsB,GAG/B;AACA,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE;;AAOF,MAAM,wBAAwB,GAAwC,MAAM,CAAC,MAAM,CAAC,sBAAsB;AAEjH;AACO,MAAM,uBAAuB,GAAmC;AACnE,IAAA,EAAE,EAAE;;AAKD,MAAM,yBAAyB,GAAwC,MAAM,CAAC,MAAM,CAAC,uBAAuB;AAEnH;AACO,MAAM,uBAAuB,GAAmC;AACnE,IAAA,EAAE,EAAE;;AAKD,MAAM,yBAAyB,GAAwC,MAAM,CAAC,MAAM,CAAC,uBAAuB;AAEnH;AACO,MAAM,kCAAkC,GAAG,CAC9C,QAAkC,KAC+B;IACjE,QAAQ,QAAQ;QACZ,KAAK,wBAAwB,CAAC,MAAM;AAChC,YAAA,OAAO,wBAAwB;QACnC,KAAK,wBAAwB,CAAC,MAAM;AAChC,YAAA,OAAO,wBAAwB;QACnC,KAAK,wBAAwB,CAAC,IAAI;AAC9B,YAAA,OAAO,sBAAsB;QACjC,KAAK,wBAAwB,CAAC,OAAO;AACjC,YAAA,OAAO,yBAAyB;AAEpC,QAAA;AACI,YAAA,OAAO,yBAAyB;;AAE5C;;IChIY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;ICAX;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;ICAZ;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;ICAb;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MCYZ,cAAc,GAAG,CAAC,IAAgB,EAAE,MAA8B,KAAgB;AAC3F,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACpE,IAAA,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE;AAE/E,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,KAAK,WAAW,CAAC;QAC7F,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,WAAW,CAAC;QAC3F,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC;QAC5F,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,WAAW,CAAC;QAC3F,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC;QAC5F,KAAK,sBAAsB,CAAC,OAAO;AAC/B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE;AAC/D,gBAAA,OAAO,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY;AAC9D,YAAA,CAAC,CAAC;QACN,KAAK,sBAAsB,CAAC,WAAW;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrG,KAAK,sBAAsB,CAAC,SAAS;AACjC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACnG,KAAK,sBAAsB,CAAC,QAAQ;AACpC,QAAA;AACI,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,gBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9B,oBAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;gBAClC;gBAEA,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7D,YAAA,CAAC,CAAC;;AAEd;MAEa,cAAc,GAAG,CAAC,IAAgB,EAAE,MAA8B,KAAgB;AAC3F,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;AAEvC,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC;QACzE,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QACvE,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;QACxE,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QACvE,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;QACxE,KAAK,sBAAsB,CAAC,OAAO;AAC/B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AAC3C,gBAAA,OAAO,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY;AAC9D,YAAA,CAAC,CAAC;AACN,QAAA;AACI,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;AAElG;AAEO,MAAM,YAAY,GAAG,CACxB,IAAgB,EAChB,MAA4B,EAC5B,OAA2B,KACf;AACZ,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM;AAElC,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,oBAAoB,CAAC,KAAK;AAC3B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/F,KAAK,oBAAoB,CAAC,WAAW;AACjC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChG,KAAK,oBAAoB,CAAC,MAAM;AAC5B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/F,KAAK,oBAAoB,CAAC,YAAY;AAClC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChG,KAAK,oBAAoB,CAAC,OAAO;AAC7B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACvG,KAAK,oBAAoB,CAAC,EAAE;AAC5B,QAAA;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;;AAEtG;AAEO,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAE,MAA+B,KAC7E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK;AAE3D,MAAM,wBAAwB,GAAG,CAAuB,IAAS,EAAE,GAAM,KAC5E,KAAK,CAAC,IAAI,CACN;AACK,KAAA,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;IAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACxB,IAAA,OAAO,GAAG;AACd,CAAC,EAAE,IAAI,GAAG,EAAW;KACpB,MAAM,EAAE;AAGd,MAAM,iBAAiB,GAAG,CAAC,QAAkB,KAAY;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,IAAA,GAAG,CAAC,WAAW,GAAG,GAAG;AACrB,IAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAC/B,IAAA,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AAC/B,IAAA,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ;AAC9B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;AACxD,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,IAAA,OAAO,cAAc;AACzB;AAEA;AACM,SAAU,kBAAkB,CAAC,IAAS,EAAA;AACxC,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAC7F;;MC3GsB,qBAAqB,CAAA;AAA3C,IAAA,WAAA,GAAA;;AAkBc,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;IAoS7C;AAlSI;;;;AAIG;IACH,UAAU,CAAC,QAAoC,EAAE,WAAyB,EAAA;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;AAEA;;;;;AAKG;IACH,cAAc,CAAC,KAAU,EAAE,OAAmC,EAAA;AAC1D,QAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,kBAAkB,CAAC,IAAS,EAAA;AACxB,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;IACjD;AAEA;;;;;;AAMG;IACH,oBAAoB,CAAC,IAAO,EAAE,OAAmC,EAAA;AAC7D,QAAA,OAAO;aACF,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK;AACrC,aAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AACd,YAAA,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC;YACtD;YAEA,OAAO,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3D,QAAA,CAAC,CAAC;IACV;AAEA;;;;;;AAMG;IACH,wBAAwB,CAAC,IAAO,EAAE,MAAwB,EAAA;AACtD,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAiC,CAAC;gBACpE;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAgC,CAAC;gBAClE;YACJ,KAAK,MAAM,EAAE;AACT,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAA8B,EAAE,IAAI,CAAC,eAAe,CAAC;gBACpF;YACJ;AACA,YAAA,KAAK,QAAQ;AACb,YAAA;gBACI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;sBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAgC;sBACvD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAgC,CAAC;gBAC/D;;AAGR,QAAA,OAAO,MAAM;IACjB;AAEA;;;;;AAKG;IACH,6BAA6B,CAAC,IAAO,EAAE,MAA6B,EAAA;AAChE,QAAA,OAAO,MAAM,CAAC,QAAQ,KAAK;cACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC;cAClE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,KAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAc,EAAA;AACtD,QAAA,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,IAAI,EAAE;QAC1C,MAAM,cAAc,GAAG,UAAU;AAEjC,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACzD,YAAA,OAAO,KAAK;QAChB;QAEA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC1B,YAAA,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAEnE,YAAA,OAAO;iBACF,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;iBACzB,GAAG,CAAC,CAAC,KAAK,KAAa,KAAK,CAAC,QAAQ,EAAE;AACvC,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC5F,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;AAKG;IACO,YAAY,CAAC,IAAO,EAAE,MAA8B,EAAA;AAC1D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACpE,QAAA,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE;QAC/E,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AAEvC,QAAA,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,iBAAiB,EAAE,GAAG,SAAS;AAEjE,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;gBAClC;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,sBAAsB;AACvB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,mBAAmB;AACpB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,SAAS,IAAI,WAAW,IAAI,SAAS,IAAI,YAAY;gBAC9D;AACJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC1C;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACxC;AACJ,YAAA,KAAK,UAAU;AACf,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,SAAS,KAAK,WAAW;;AAGxF,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,YAAY,CAAC,IAAO,EAAE,MAA8B,EAAA;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAA0B,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAA2B,CAAC,IAAI,CAAC;AAC/E,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,aAAa;AACd,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,sBAAsB;AACvB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,mBAAmB;AACpB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,SAAS,IAAI,WAAW,IAAI,SAAS,IAAI,YAAY;gBAC9D;AACJ,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;;AAG1C,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;;AAMG;AACO,IAAA,UAAU,CAAa,IAAO,EAAE,MAA4B,EAAE,OAA4B,EAAA;QAChG,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACX,yGAAyG,CAC5G;QACL;AAEA,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC;AACxD,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,OAAO;AACR,gBAAA,MAAM,GAAG,IAAI,GAAG,CAAC;gBACjB;AACJ,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC;gBAClB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,MAAM,GAAG,IAAI,GAAG,CAAC;gBACjB;AACJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC;gBAClB;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC;gBAChE;AAEJ,YAAA,KAAK,SAAS;AACd,YAAA;gBACI,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;;AAG/D,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,aAAa,CAAC,IAAO,EAAE,MAA+B,EAAA;AAC5D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;;AAG1C,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,WAAW,CAAC,IAAO,EAAE,MAA8B,EAAA;QACzD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;;AAGjD,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IACpE;;IAGU,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7B;AACH;AAEK,MAAO,iBAAqB,SAAQ,qBAAwB,CAAA;AAC9D;;;;AAIG;;AAEH,IAAA,KAAK,CAAC,UAAuB,EAAA;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;IAClG;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACzB,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAClF;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrD;AAEA,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B;IACL;AAEA;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,IAAI,KAAI;YACT,MAAM,OAAO,GAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC9C,gBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACvB,gBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK;AACzB,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAgB,yBAA6B,SAAQ,qBAA+C,CAAA;AAOtG;;;;;AAKG;;IAEH,KAAK,CAAC,UAAuB,EAAE,UAA0B,EAAA;AACrD,QAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;IAClG;AAEA;;;;;AAKG;IACH,SAAS,CAAC,KAAiB,EAAE,SAAyB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,KAAK,KAAI;YACV,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC5B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxF;AAEA,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC3D;AAEA,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,oBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBACrB;qBAAO;AACH,oBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAC5B;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B;IACL;AACH;;MC1aqB,mBAAmB,CAAA;;AAyBrC,IAAA,WAAA,GAAA;;AAjBmB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAI,EAAS,CAAC;;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;;AAG1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAW;;AASzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;QAI9C,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;IAC/D;AAEA;;;AAGG;AACH,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAChD;AAEA;;;AAGG;AACH,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC/C;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK;IACnC;;IAGA,IAAI,GAAA;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;;IAGA,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACxE;;IAGA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACvE;;AAGA,IAAA,KAAK,KAAU;AAEf;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7B;AACH;AAEK,MAAO,eAAmB,SAAQ,mBAAsB,CAAA;AAC1D;;AAEG;AACH,IAAA,WAAA,CAAqB,YAAkC,EAAA;AACnD,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,UAAsB,EAAA;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAExB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC9C,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC;AACH,SAAA,CAAC;IACN;AACH;AAEK,MAAO,oBAAwB,SAAQ,mBAI5C,CAAA;AACG;;AAEG;AACH,IAAA,WAAA,CAAqB,YAA0C,EAAA;AAC3D,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEA;;;;;AAKG;IACH,KAAK,CAAC,UAAsB,EAAE,UAA0B,EAAA;AACpD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC7E,MAAM,oBAAoB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAEhC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AAC1D,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,GAAG,oBAAoB;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,oBAAoB;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC;AACH,SAAA,CAAC;IACN;AACH;;AC5KD;;;;;AAKG;AACG,MAAO,sBAA0B,SAAQ,iBAAoB,CAAA;;IAK/D,WAAA,CAAY,KAAU,EAAE,eAAsC,EAAA;AAC1D,QAAA,KAAK,EAAE;;AAJD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAK3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,KAAkB,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,KAAK,EAAE,WAAW,EAAE;gBACpB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC;AAEA,YAAA,IAAI,KAAK,EAAE,QAAQ,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM;AAE9B,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAO,oBAAwB,SAAQ,eAAkB,CAAA;;IAE3D,WAAA,CAAY,IAAS,EAAE,eAAsC,EAAA;QACzD,KAAK,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC5D;AACH;;AChDD;;;;;AAKG;AACG,MAAO,2BAA+B,SAAQ,iBAAoB,CAAA;;IAKpE,WAAA,CAAY,MAAuB,EAAE,eAAsC,EAAA;AACvE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,KAAkB,EAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,KAAK,EAAE,WAAW,EAAE;gBACpB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC;AAEA,YAAA,IAAI,KAAK,EAAE,QAAQ,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM;AAE9B,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAO,yBAA6B,SAAQ,eAAkB,CAAA;;IAEhE,WAAA,CAAY,IAAqB,EAAE,eAAsC,EAAA;QACrE,KAAK,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACjE;AACH;;MCjDY,qBAAqB,CAAA;;AAE9B,IAAA,KAAK,CAAC,MAAqB,EAAA;AACvB,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAA4B;QACvC;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC;QAC3C;AAEA,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC;QAChD;AAEA,QAAA,OAAO,SAAS;IACpB;AACH;;ACFK,MAAO,wBAA4B,SAAQ,mBAA0C,CAAA;AAV3F,IAAA,WAAA,GAAA;;;AA4BI,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;;AAIxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAI1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGlD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,CAAC,uDAAC;;AAG/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;;AAGrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAyB;;QAMlD,IAAA,CAAA,iBAAiB,GAAG,KAAK;;QAGzB,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QAG7B,IAAA,CAAA,6BAA6B,GAAG,KAAK;;AAM7B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAE;;AAkBhC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,yBAAyB,EAAE;AACjF,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AA4IxD,IAAA;AAvNG;;;AAGG;IACH,IACI,eAAe,CAAC,MAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;QAC9B,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACtC;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;IAChC;;IA0CA,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;;IAiBA,oBAAoB,GAAA;QAChB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC9F,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACN;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;IAC5C;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;;AAGG;IACK,0BAA0B,GAAA;AAC9B,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AAEnC,YAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;QAC5C;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAK;AAClD,YAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI;YACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAK;AACjD,YAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK;YAC1C,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC;AAChB,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAC1B,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,aAAa,KAAI;YACzB,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvF,CAAC,CAAC,CACT;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC3F,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CACL;IACL;AAEA;;;;;AAKG;IACK,mBAAmB,GAAA;AACvB,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB;AAChD,QAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2EAAA,CAA6E,CAAC;QAClG;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC;AAC9D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,gBAAgB,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAK;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACjC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,gBAAgB,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YAC7B,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;;AAG5D,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC7B,oBAAA,GAAG,KAAK;oBACR,GAAG;AACC,wBAAA,IAAI,EAAE;4BACF,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW;4BACrE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;AAChD;AACJ;AACJ,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,KAAK;YAC1C;QACJ,CAAC,CAAC,CACL;;QAGD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;AAE1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;IAC5C;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAE7B,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAChC;8GAvNS,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAPtB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,0BAA0B;AACnC,4BAAA,QAAQ,EAAE;AACb;AACJ;AACJ,iBAAA;;sBAMI;;sBAYA;;sBAIA;;sBAIA;;;ACsDL;AACM,SAAU,UAAU,CAAU,GAAgB,EAAA;IAChD,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;AAChH;MAEa,YAAY,CAAA;;IAErB,IAAI,OAAO,CAAC,KAAqB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AACA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACrC;;IAqBA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC/B,YAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK;AAC5B,QAAA,CAAC,CAAC;IACN;AACA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACtC;;AAmCA,IAAA,WAAA,CAAY,GAAsB,EAAA;;AAzDzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGnD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;QAGjE,IAAA,CAAA,UAAU,GAAG,KAAK;;AA8CD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAEtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAiB,KAAK,CAAC;AAIzE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK;QACnC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE;QAClC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,KAAK;QACzC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,KAAK;QACrC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK;QACjC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,KAAK;QAC3C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI;QAChC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;IAClD;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;IACjD;AACH;;ACzLD;AACM,SAAU,WAAW,CAAU,GAAyB,EAAA;AAC1D,IAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;IAC5E;IAEA,OAAO,IAAI,YAAY,CAAC;AACpB,QAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI;AACnC,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;AAC7B,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACrB,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;AAC1B,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AACrB,QAAA,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;AACnC,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;AAC/B,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;AAC3B,QAAA,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK;AACrC,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU;AAC9B,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI;AAC7B,KAAA,CAAC;AACN;AAEA;AACM,SAAU,iBAAiB,CAAC,IAAgB,EAAE,aAAqB,EAAA;AACrE,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACpE;AAEA;AACM,SAAU,eAAe,CAAC,GAAa,EAAE,aAAqB,EAAA;IAChE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK;AACnF;AAEA;AACM,SAAU,SAAS,CAAC,GAAa,EAAA;AACnC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;AACzC;AAEA;AACM,SAAU,SAAS,CAAC,GAAa,EAAA;AACnC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;AACzC;AAEA;;;;;AAKG;AACG,SAAU,6BAA6B,CAAI,IAAmB,EAAE,cAAgC,EAAA;IAClG,IAAI,QAAQ,GAAe,EAAE;AAE7B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAS,EAAE,cAAc,CAAC;AAC9D,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5F;IACJ;AACA,IAAA,OAAO,QAAQ;AACnB;AAEA;AACM,SAAU,gBAAgB,CAAI,GAAM,EAAE,cAAgC,EAAA;IACxE,IAAI,CAAC,GAAG,EAAE;AACN,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC1B,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,cAAwB,CAAC;IAC1C;IAEA,OAAO,CAAC,CAAC,cAAc;AAC3B;AAEA;AACM,SAAU,mBAAmB,CAAC,OAAsB,EAAE,eAAuB,EAAA;AAC/E,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;IAE7C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACd;QACJ;;QAGA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;AAE9C,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;AACjC,YAAA,OAAO,WAAW;QACtB;IACJ;IAEA,OAAO,IAAI,GAAG,EAAE;AACpB;AAEA;AACM,SAAU,sBAAsB,CAAC,OAAsB,EAAE,kBAA0B,EAAA;AACrF,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;IAE7C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;;AAE1C,QAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;QAElD,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACxC,YAAA,OAAO,WAAW;QACtB;IACJ;IAEA,OAAO,IAAI,GAAG,EAAE;AACpB;AAEA;AACM,SAAU,6BAA6B,CACzC,MAAW,EACX,aAAiC,EACjC,SAAwB,EACxB,aAA+B,EAC/B,WAAmB,EACnB,cAAsB,EACtB,WAAmB,EACnB,gBAAwB,EACxB,cAAgC,EAChC,kBAAkB,GAAG,KAAK,EAAA;IAE1B,MAAM,IAAI,GAAkB,EAAE;AAC9B,IAAA,MAAM,eAAe,GAAG,4BAA4B,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC;IAErG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAO,EAAE,KAAa,KAAI;AACtC,QAAA,MAAM,WAAW,GACb,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACvD,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;AAE5B,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,IAAmB;AACtC,cAAG;cACD,WAAW,CAAC;gBACR,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC1F,gBAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzD,KAAK;AACL,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC;AAER,QAAA,GAAG,CAAC,QAAQ;AACR,YAAA,gBAAgB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB;AAC3E,kBAAE,IAAI,CAAC,gBAAgB;kBACrB,KAAK;QACf,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAEd,IAAI,WAAW,EAAE;YACb,MAAM,QAAQ,GAAG,6BAA6B,CAC1C,IAAI,CAAC,WAAW,CAAC,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,kBAAkB,CACrB;AAED,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACnB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG;gBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACjC,YAAA,CAAC,CAAC;YACF,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AAE9B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC1B;QACA,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;YAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE;gBACjC,MAAM,gBAAgB,GAAkB,EAAE;gBAC1C,MAAM,qBAAqB,GAAkB,EAAE;AAC/C,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AACxB,wBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;oBAChC;AAAO,yBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AAC/B,wBAAA,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;oBACrC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;AACtF,gBAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAChD,IAAI,CAAC,CAAC,OAAO,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;oBACvD,wBAAwB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;oBACzC;gBACJ;gBACA,IAAI,CAAC,kBAAkB,EAAE;oBACrB;gBACJ;gBACA,IAAI,WAAW,EAAE;AACb,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI;oBAChB;gBACJ;gBACA,IAAI,YAAY,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI;oBAChB;gBACJ;AACJ,YAAA,CAAC,CAAC;QACN;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,IAAI;AACf;AAEA;;;;;;AAMG;AACG,SAAU,4BAA4B,CACxC,MAAW,EACX,aAAiC,EACjC,SAAqB,EACrB,aAA+B,EAAA;AAE/B,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB;AAC3C,IAAA,IACI,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ;AACnF,QAAA,OAAO,aAAa,KAAK,UAAU,EACrC;AACE,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACtD,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;YAClC;AACJ,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,MAAM;AACjB;AAEA;AACM,SAAU,wBAAwB,CACpC,OAA2B,EAC3B,GAAa,EACb,SAAwB,EACxB,WAA0B,EAAA;IAE1B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC;AAEjD,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACtB,QAAA,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;QACvB,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,IAAA,CAAC,CAAC;AACN;AAEA;AACM,SAAU,eAAe,CAAI,GAAgB,EAAE,OAAsB,EAAA;AACvE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;AAEjC;;;;AAIG;IAEH,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,IAAA,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC;IAClC,MAAM,QAAQ,GAAkB,EAAE;AAElC,IAAA,OAAO,KAAK,EAAE,GAAG,UAAU,EAAE;AACzB,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtD;QACJ;AACA,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1B;AAEA,IAAA,OAAO,QAAQ;AACnB;AAEA;;;;;;AAMG;SACa,aAAa,CAAI,GAAgB,EAAE,cAAkC,IAAI,EAAA;AACrF,IAAA,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;IAClC,MAAM,OAAO,GAAkB,EAAE;IACjC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;AAChC,IAAA,OAAO,MAAM,IAAI,MAAM,KAAK,WAAW,EAAE;AACrC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI;IAClC;AACA,IAAA,OAAO,OAAO;AAClB;AAEA;AACM,SAAU,YAAY,CAAI,MAA6B,EAAA;AACzD,IAAA,IAAIC,cAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,OAAO,MAA4B;IACvC;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,QAAA,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC;IAC3C;AAEA,IAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC;IAChD;AAEA,IAAA,OAAO,SAAS;AACpB;AACA;;;;AAIG;AACG,SAAU,mBAAmB,CAAI,mBAAsB,EAAE,OAAsB,EAAA;IACjF,IAAI,mBAAmB,EAAE;AACrB,QAAA,OAAO,eAAe,CAAC,mBAAmB,CAAC;IAC/C;IAEA,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;QACvB,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/C,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAW;AACtB;AAEA;AACM,SAAU,UAAU,CAAC,GAAa,EAAA;AACpC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK;AAC1C;AAEA;AACM,SAAU,uBAAuB,CACnC,WAAiC,EACjC,aAA2C,EAAA;AAE3C,IAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;AAChD,QAAA,OAAO,WAAW;IACtB;IAEA,MAAM,YAAY,GAAG,WAA2D;AAChF,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;AAEhC,IAAA,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3B,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACjB,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC;QAC7E;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IAEzD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,aAAa,CAAC,IAAI,EAAE;AAC1D,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;AACrC,IAAA,MAAM,mBAAmB,GAAG,SAAS,KAAK,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;AAE3G,IAAA,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAY;AACnC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAY;QAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAClD,YAAA,OAAO,CAAC,OAAO,GAAG,OAAO,IAAI,mBAAmB;QACpD;AAEA,QAAA,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,mBAAmB;AAC3D,IAAA,CAAC,CAAC;AACN;AAEA;AACM,SAAU,yBAAyB,CAAI,YAA2B,EAAA;IACpE,IAAI,QAAQ,GAAQ,EAAE;AAEtB,IAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AAC7B,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS;QACzB;IACJ;AAEA,IAAA,OAAO,QAAQ;AACnB;AAEA;;;;;;;;AAQG;AACG,SAAU,0BAA0B,CACtC,KAAwB,EACxB,IAAgB,EAChB,MAAA,GAA0B,IAAI,EAC9B,KAAK,GAAG,CAAC,EAAA;AAET,IAAA,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;AAElB,IAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;;AAEf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACpB,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,YAAA,GAAG,CAAC,KAAK,GAAG,KAAK;YACjB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;AACzC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG;;IAG3B,MAAM,UAAU,GAAG;SACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU;AACpC,SAAA,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;AAClB,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5B;QAEA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAE/B,QAAA,OAAO,IAAI;AACf,IAAA,CAAC,EAAE,IAAI,GAAG,EAAuB,CAAC;;IAGtC,IAAI,gBAAgB,GAAyB,EAAE;AAE/C,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE;AAC1C,QAAA,gBAAgB,GAAG;aACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU;AACpC,aAAA,GAAG,CAAC,CAAC,GAAG,KAAI;AACT,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,YAAA,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;AACzC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACV;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAClD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEnE,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B;QACJ;QAEA,MAAM,aAAa,GAA+C,WAAW,CAAyB;YAClG,IAAI,EAAE,YAAY,CAAC,KAAK;AACxB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7C,MAAM;YACN,KAAK;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC;AAC/B,SAAA,CAAC;;AAGF,QAAA,aAAa,CAAC,SAAS,GAAG,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC;QAEnG,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM;AAE3D,QAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;IACxC;AAEA,IAAA,OAAO,gBAAgB;AAC3B;AAEA;AACM,SAAU,yBAAyB,CACrC,MAAW,EACX,UAAe,EACf,WAAmB,EACnB,cAAgC,EAChC,aAAiC,EACjC,IAAgB,EAChB,aAA4B,EAAA;AAE5B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAQ;AAEhC,IAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACrB,QAAA,OAAO,MAAoB;IAC/B;AAEA,IAAA,MAAM,eAAe,GAAG,4BAA4B,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC;IAChG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAO,EAAE,KAAa,KAAI;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3C,MAAM,GAAG,GAAG,WAAW,CAAC;YACpB,IAAI,EAAE,YAAY,CAAC,IAAI;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YACzD,KAAK;AACL,YAAA,KAAK,EAAE;AACV,SAAA,CAAC;QACF,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC;AACxD,QAAA,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU;AAC/C,QAAA,OAAO,GAAG;AACd,IAAA,CAAC,CAAC;AACN;AAEA;SACgB,kBAAkB,CAAC,SAAiB,EAAE,GAAa,EAAE,KAAa,EAAA;IAC9E,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1E;;MC/gBa,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAsB,EACtB,QAAuB,EAAA;QAFvB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCxBY,aAAa,CAAA;AACtB;;;;AAIG;IACH,WAAA,CACW,OAAiB,EACjB,QAAkB,EAAA;QADlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;AAEK,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AACtD;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACpB,OAAiB,EACjB,QAAkB,EAAA;AAElB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;QAJjB,IAAA,CAAA,MAAM,GAAN,MAAM;IAKjB;AACH;;MCpBqB,cAAc,CAAA;AAanC;MAEqB,iBAAiB,CAAA;AAStC;MAEqB,kBAAkB,CAAA;AASvC;;MCnCY,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAA2B,EAC3B,QAA4B,EAAA;QAF5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCZY,qBAAqB,CAAA;AAC9B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAA0B,EAC1B,QAA2B,EAAA;QAF3B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCjBY,UAAU,CAAA;AACnB;;;;AAIG;IACH,WAAA,CACW,OAAuB,EACvB,QAAwB,EAAA;QADxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;AAEK,MAAO,oBAAqB,SAAQ,UAAU,CAAA;AAChD;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACpB,OAAuB,EACvB,QAAwB,EAAA;AAExB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;QAJjB,IAAA,CAAA,MAAM,GAAN,MAAM;IAKjB;AACH;;MC7BY,aAAa,CAAA;AACtB;;;;AAIG;IACH,WAAA,CACW,IAAgB,EAChB,KAAU,EAAA;QADV,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,KAAK,GAAL,KAAK;IACb;AACN;;MCFY,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAoB,EACpB,QAAqB,EAAA;QAFrB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MClBY,yBAAyB,CAAA;AAWrC;AAEK,MAAO,4BAAgC,SAAQ,yBAA4B,CAAA;AAGhF;;MCVY,oBAAoB,CAAA;AAC7B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAyB,EACzB,QAA0B,EAAA;QAF1B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCpBY,sBAAsB,CAAA;AAC/B;;;;AAIG;IACH,WAAA,CACW,WAAmB,EACnB,GAAM,EAAA;QADN,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,GAAG,GAAH,GAAG;IACX;AACN;;ACVD;;MCAa,qBAAqB,CAAA;AAC9B;;;;;AAKG;AACH,IAAA,WAAA,CACW,KAAa,EACb,OAAgB,EAChB,GAAM,EAAA;QAFN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;IACX;AACN;;MCZY,4BAA4B,CAAA;AACrC;;;;;AAKG;AACH,IAAA,WAAA,CACW,KAAa,EACb,GAAM,EACN,QAAiB,EAAA;QAFjB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCVY,uBAAuB,CAAA;AAChC;;;;;;;;;AASG;AACH,IAAA,WAAA,CACW,GAAM,EACN,OAAU,EACV,aAAqB,EACrB,QAAgB,EAChB,QAAmC,EACnC,IAAwB,EACxB,IAAS,EAAA;QANT,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AACN;;AC0BK,MAAO,uBAAiC,SAAQ,cAAiB,CAAA;AAXvE,IAAA,WAAA,GAAA;;;QAcI,IAAA,CAAA,mBAAmB,GAAG,IAAI;;QAK1B,IAAA,CAAA,WAAW,GAAG,KAAK;AAEnB;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAkB,MAAM;;AAevB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA8B;;QAQvE,IAAA,CAAA,kBAAkB,GAAG,KAAK;;AAMT,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,EAAE;AAC9C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAuPL,IAAA;;AApQG,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB;IACvD;;IAcA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACjC;;AAGA,IAAA,mBAAmB,CAAC,GAAW,EAAE,KAAY,EAAE,eAAuB,EAAE,IAAuB,EAAA;AAC3F,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB;QACJ;QACA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,aAAa;QACjB,GAAG,KAAK,IAAI,IAAI,aAAa,GAAG,eAAe,GAAG,CAAC,KAAK,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC;QAE5F,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE;AAC9C,YAAA,MAAM,aAAa,GAA6B;AAC5C,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;AACpC,gBAAA,gBAAgB,EAAE,eAAe;AACjC,gBAAA,iBAAiB,EAAE,aAAa;gBAChC,QAAQ,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ;gBAC7C;aACH;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YACpC,UAAU,CAAC,MAAK;AACX,gBAAA,KAAK,CAAC,MAAsB,CAAC,KAAK,EAAE;AACzC,YAAA,CAAC,CAAC;QACN;IACJ;;IAGA,aAAa,GAAA;;QAET,UAAU,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACpD;;AAGA,IAAA,gBAAgB,CAAC,KAA4B,EAAA;;QAEzC,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,iBAAiB,EAAE;AACxE,YAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACnG,YAAA,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACrG,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACzE;AACD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAC1E;AAED,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;gBACvE;YACJ;AACA,YAAA,IAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC;YACpD,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;YACxD,IAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;YAEnE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC;YACvD;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YACpC;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACrD,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;QAChC;IACJ;AAEA;;;AAGG;AACH,IAAA,uBAAuB,CAAC,GAAa,EAAE,OAAiB,EAAE,KAA4B,EAAA;QAClF,MAAM,IAAI,GAAU,EAAE;AAEtB,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AACxC,YAAA,CAAC,CAAC,KAAK,GAAG,KAAK;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACnB,IAAI,uBAAuB,CACvB,GAAG,CAAC,KAAK,EACT,OAAO,CAAC,KAAK,EACb,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,IAAI,EACV,IAAI,CACP,CACJ;IACL;;AAGQ,IAAA,kBAAkB,CAAC,QAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,QAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAC/D;;IAGQ,sBAAsB,CAAC,OAAiB,EAAE,OAAiB,EAAA;AAC/D,QAAA,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,OAAO,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;IAC1D;;AAGQ,IAAA,sCAAsC,CAAC,OAAiB,EAAA;AAC5D,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM;QAEhC,IAAI,CAAC,SAAS,EAAE;YACZ;QACJ;AAEA,QAAA,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5E,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,IAAI,iBAAiB,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC/D,YAAA,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;QAC3C;IACJ;;AAGQ,IAAA,gCAAgC,CAAC,OAAiB,EAAE,OAAiB,EAAE,IAAwB,EAAA;AACnG,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;;YAEhB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/E;QACA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1D,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjB,gBAAA,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;YACzC;AAEA,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,CAAC,SAAS,GAAG,OAAO;QAC/B;aAAO;AACH,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAC/B,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,gBAAA,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO;YACtC;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACjE,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACrB,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM;AACzC,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,0BAA0B,CAAC,OAAiB,EAAE,OAAiB,EAAE,KAA4B,EAAA;AACjG,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACxB,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QACxD;aAAO;AACH,YAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD;IACJ;;IAGQ,2BAA2B,CAAC,OAAiB,EAAE,OAAiB,EAAA;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAEtC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAE3E,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;AAErD,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,kBAAkB,EAAE,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAC/G,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAErE,OAAO;YACH,OAAO;YACP,UAAU;YACV,gBAAgB;YAChB;SACH;IACL;;AAGQ,IAAA,sBAAsB,CAAC,OAAiB,EAAE,OAAiB,EAAE,KAA4B,EAAA;AAC7F,QAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAC5F,OAAO,EACP,OAAO,CACV;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;AACrB,YAAA,GAAG,OAAO;AACV,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;AACnD,YAAA,GAAG,UAAU;AACb,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC;AACnD,YAAA,GAAG;SACN;IACL;;IAGQ,wBAAwB,CAAC,OAAiB,EAAE,OAAiB,EAAA;AACjE,QAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAC5F,OAAO,EACP,OAAO,CACV;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,EAAE,GAAG,gBAAgB,CAAC;IAC9F;;IAGQ,eAAe,GAAA;QACnB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC;AAClG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3G,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1G,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;IAC5G;;IAGQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,GAAG,KAAK;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC;AACrG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC;AACrF,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC;AAC1F,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC;AACzF,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;IAC/G;8GAnSS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAPrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;AACxD;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,wDAAwD;AAClE,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,6BAA6B;AACtC,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B;AACxD;AACJ;AACJ,iBAAA;;sBAGI;;sBAIA,WAAW;uBAAC,sBAAsB;;sBAClC;;sBAMA;;sBAIA;;sBAOA;;sBAIA;;AA0QL,SAAS,cAAc,CAAC,KAAY,EAAA;IAChC,KAAK,CAAC,cAAc,EAAE;AAC1B;AAEA,SAAS,2BAA2B,CAAC,KAAoB,EAAA;IACrD,IACI,CAAC,KAAK,CAAC,MAAM;QACb,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,EACjH;QACE,cAAc,CAAC,KAAK,CAAC;AACrB,QAAA,OAAO,KAAK;IAChB;AACJ;;MCpUa,eAAe,CAAA;;AA+CxB,IAAA,WAAA,GAAA;;AA3BS,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAsC;;AAG7D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAmD;;AAGhF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAiB;;AAGrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAkB;;AAGjD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,OAAO,EAAQ;;AAGpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAoB;;AAGrD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAA+B;;AAGjE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAyB;;AAG1D,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,OAAO,EAAW;QAIrE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,YAAY,EAAE;QACnF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;QAC3D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,CAAC,YAAY,EAAE;QACjF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAC3D;;AAGA,IAAA,SAAS,CAAC,GAAmB,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC;;IAGA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;IAC9C;;AAGA,IAAA,WAAW,CAAC,GAAqB,EAAA;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;;IAGA,YAAY,CAAC,WAAmB,EAAE,GAAa,EAAA;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACnE;;AAGA,IAAA,WAAW,CAAC,GAA0B,EAAA;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;;AAGA,IAAA,uBAAuB,CAAC,SAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,SAAS,CAAC;IACxD;;AAGA,IAAA,cAAc,CACV,UAAsB,EACtB,MAAiC,EACjC,aAA2C,EAAA;QAE3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACpB;;;;AAIG;AACH,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACvB,gBAAA,GAAG,CAAC,MAAM,GAAG,KAAK;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,UAAU;QACrB;;QAGA,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,UAAU,EAAE,UAAU,CAAC;;QAG9E,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,aAAa,CAAC;;AAG7F,QAAA,OAAO,yBAAyB,CAAC,yBAAyB,CAAC;IAC/D;;IAGA,mBAAmB,CAAC,GAAa,EAAE,KAA0B,EAAA;QACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IACtC;;AAGA,IAAA,mBAAmB,CAAC,GAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;IAClC;;AAGA,IAAA,aAAa,CAAC,IAAiC,EAAA;QAC3C,MAAM,cAAc,GAAkB,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3E;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;gBAC/B;YACJ;AACA,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5C;8GA1IS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCVY,2BAA2B,CAAA;AAJxC,IAAA,WAAA,GAAA;;AASqB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;AAGzD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG5B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;;AAG1C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAgEhD,IAAA;;AA1DG,IAAA,IAAY,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI;IACvE;;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAC9B,SAAS,CAAgB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS;AACzD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;gBACjB,IACI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;AACjC,qBAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC5D,oBAAA,KAAK,CAAC,QAAQ;oBACd,IAAI,CAAC,kBAAkB,EACzB;oBACE,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;oBAClD,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,wBAAwB,EAAE;gBACpC;qBAAO,IACH,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;AAClC,qBAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3D,oBAAA,KAAK,CAAC,QAAQ;oBACd,IAAI,CAAC,kBAAkB,EACzB;AACE,oBAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,wBAAwB,EAAE;gBACpC;AACJ,YAAA,CAAC,CAAC;YAEN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS;AAC1C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACvB;gBACJ;AACA,gBAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,YAAA,CAAC,CAAC;YAEN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU;AAC3C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACnC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,cAAc,CAAC,QAA+B,EAAA;AAClD,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IAC3F;8GA3FS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACXD;AACA;AAEA;MACa,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAF1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAI7D;;;AAGG;AAEH;MACa,gBAAgB,CAAA;;AAEzB,IAAA,WAAA,CAAmB,WAA8C,EAAA;QAA9C,IAAA,CAAA,WAAW,GAAX,WAAW;IAAsC;;AAGpE,IAAA,OAAO,sBAAsB,CAAC,GAAqB,EAAE,GAA4B,EAAA;AAC7E,QAAA,OAAO,IAAI;IACf;8GAPS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAF5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACCzD,MAAO,0BAA2B,SAAQ,iBAAiB,CAAA;AAXjE,IAAA,WAAA,GAAA;;;QAkBI,IAAA,CAAA,aAAa,GAAqB,EAAE;;QAIpC,IAAA,CAAA,eAAe,GAAuB,EAAE;;QAIxC,IAAA,CAAA,cAAc,GAAsB,EAAE;;QAItC,IAAA,CAAA,WAAW,GAAG,CAAC;;AAkBE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AAwDxD,IAAA;AAxEG;;AAEG;IACH,IACI,KAAK,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,mBAAmB,CAAC;IACpD;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC/B;;AASA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;;IAGA,eAAe,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC7C,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI;AAC3B,QAAA,MAAM,cAAc,GAChB,IAAI,CAAC,qBAAqB;AAC1B,aAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;AAE7G,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,kBAAkB;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,oBAAoB,GAAG,CAAC;AAExF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,cAAE;AACF,cAAE,oBAAoB,GAAG,IAAI,CAAC;kBAC1B,IAAI,CAAC;kBACL,oBAAoB;AAE5B,QAAA,MAAM,eAAe,GACjB,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,oBAAoB,GAAG,WAAW;aACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC;AACf,YAAA,GAAG,SAAS;AACZ,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACpF,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM;AAC9C,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,QAAQ;AACpD,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO;YACjD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,SAAS,CAAC,cAAc;YACvE,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,SAAS,CAAC,iBAAiB;AAChF,YAAA,IAAI,EAAE;AACF,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,CAAC;IACN;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;IAC7C;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3C;8GA5FS,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAPxB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAXtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA;AACA,aAAA,CAAA;AACV,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAGI;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;;ACtBL;;;;;;;AAOG;MAOU,wBAAwB,CAAA;;AA+CjC,IAAA,WAAA,CACW,UAAmC,EAChC,gBAA8C,EAC9C,MAAc,EAAA;QAFjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACP,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,MAAM,GAAN,MAAM;;QAhDZ,IAAA,CAAA,UAAU,GAAG,KAAK;;QAGlB,IAAA,CAAA,cAAc,GAAG,CAAC;;QAGlB,IAAA,CAAA,eAAe,GAAG,CAAC;;AAGV,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAGrC,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,UAAU,CAAC,CAAC,QAAyB,KAAI;YAC3F,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC/C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzE;AACD,YAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE;AAC3C,QAAA,CAAC,CAAC,CAAC,IAAI,CACH,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,KAAK,EAAE,CACV;;AAGO,QAAA,IAAA,CAAA,4BAA4B,GAAsB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACpF,MAAM,CAAC,MAAM,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC,EACzD,GAAG,CAAC,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CACzD;;AAGO,QAAA,IAAA,CAAA,8BAA8B,GAAsB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACtF,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,EAC3D,GAAG,CAAC,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAC3D;IAOE;;IAGH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;IAC1C;;IAGA,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,oBAAoB;IACpC;;IAGA,uBAAuB,GAAA;QACnB,OAAO,IAAI,CAAC,4BAA4B;IAC5C;;IAGA,yBAAyB,GAAA;QACrB,OAAO,IAAI,CAAC,8BAA8B;IAC9C;;IAGA,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS;IACnD;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU;IACpD;;AAGA,IAAA,YAAY,CAAC,SAAiB,EAAE,SAAS,GAAG,IAAI,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE;YACzF;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS;QAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS;IACvD;;AAGA,IAAA,aAAa,CAAC,UAAkB,EAAE,SAAS,GAAG,IAAI,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YAC3F;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS;QAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU;IACzD;;AAGA,IAAA,sBAAsB,CAAC,GAAY,EAAE,oBAA4B,EAAE,sBAA8B,EAAA;AAC7F,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QACvD,MAAM,KAAK,GAAG,GAAG;AAEjB,QAAA,IACI,CAAC,oBAAoB,IAAI,sBAAsB;AAC/C,YAAA,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAC/D;AACE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC7C,YAAA,IACI,QAAQ;gBACR,EACI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACpD,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAC3D,EACH;AACE,gBAAA,IAAI,oBAAoB,IAAI,CAAC,sBAAsB,EAAE;AACjD,oBAAA,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBAChE;AAAO,qBAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,EAAE;AACxD,oBAAA,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACnE;AAAO,qBAAA,IAAI,oBAAoB,IAAI,sBAAsB,EAAE;;AAEvD,oBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACtD,oBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI;AACvC,oBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG;AACrC,oBAAA,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK;AACzC,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;;AAErF,oBAAA,IACI,kBAAkB;AAClB,wBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;wBACxC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EACpE;wBACE,MAAM,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,IAAI;wBACnE,MAAM,OAAO,GAAG;8BACV,CAAC,YAAY,GAAG,aAAa,GAAG,WAAW,IAAI,CAAC;AAClD,8BAAE,YAAY,GAAG,aAAa,GAAG,WAAW;AAChD,wBAAA,iBAAiB,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBACzD;AAAO,yBAAA,IACH,kBAAkB;AAClB,wBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;wBACxC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAChE;wBACE,MAAM,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,KAAK;wBACpE,MAAM,OAAO,GAAG;8BACV,CAAC,YAAY,GAAG,aAAa,GAAG,WAAW,IAAI,CAAC;AAClD,8BAAE,YAAY,GAAG,aAAa,GAAG,WAAW;AAChD,wBAAA,iBAAiB,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBACzD;gBACJ;YACJ;QACJ;IACJ;;AAGA,IAAA,mBAAmB,CAAC,SAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;8GAxKS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,mEAFtB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE1F,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,wBAAyB,CAAC,EAAE;AACrG,iBAAA;;;ACvBD;MACa,8BAA8B,CAAA;;AAEvC,IAAA,WAAA,CAAmB,WAA+D,EAAA;QAA/D,IAAA,CAAA,WAAW,GAAX,WAAW;IAAuD;;AAGrF,IAAA,OAAO,sBAAsB,CACzB,GAAmC,EACnC,GAA0C,EAAA;AAE1C,QAAA,OAAO,IAAI;IACf;8GAVS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAF1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,kCAAkC,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACYvE,MAAO,2BAA4B,SAAQ,kBAAkB,CAAA;;AAoD/D,IAAA,WAAA,CAAqB,aAA2B,EAAA;AAC5C,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,aAAa,GAAb,aAAa;AAnDlC;;AAEG;QAEH,IAAA,CAAA,aAAa,GAAG,KAAK;;QAIrB,IAAA,CAAA,WAAW,GAAG,EAAE;AAMhB;;;AAGG;QAEH,IAAA,CAAA,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAE;;QASpD,IAAA,CAAA,wBAAwB,GAAG,CAAC;;AAG5B,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;;AAMhD,QAAA,IAAA,CAAA,mBAAmB,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE;;AAG7E,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,4BAA4B,CAAC;;AAG7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAiB,6BAA6B,EAAE;AACxF,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAKjD;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAC9B;QACJ;QACA,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE;YACpG,IAAI,CAAC,0BAA0B,EAAE;QACrC;IACJ;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,0BAA0B,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;YACxF;QACJ;AAEA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa;QAEjE,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,0BAA0B,CAAC;AACzF,YAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBAClB,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY;YACzD;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;QACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;AACpE,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE;AAE5D,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW;QACzE,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;AAE5C,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW;QAClG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,cAAc,EAAE,gBAAgB,CAAC;QAE9E,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;;QAG7D,MAAM,QAAQ,GACV,cAAc,KAAK,IAAI,CAAC,mBAAmB,CAAC,cAAc;AAC1D,YAAA,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,CAAC,gBAAgB;AAC9D,YAAA,cAAc,KAAK,IAAI,CAAC,mBAAmB,CAAC,cAAc;;AAE1D,YAAA,cAAc,KAAK,qBAAqB,CAAC,CAAC,CAAC;QAE/C,IAAI,QAAQ,EAAE;YACV;QACJ;QAEA,IAAI,CAAC,mBAAmB,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE;QAC/E,IAAI,CAAC,wBAAwB,GAAG,cAAc,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;QACzF,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAChC,cAAc,EACd,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAC9E;IACL;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC;AACA,aAAA,kBAAkB;aAClB,IAAI,CACDE,QAAM,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EACrD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,CAAC,0BAA0B,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC7B,gBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC9B,gBAAA,iBAAiB,EAAE,UAAU,CAAC,YAAY;AAC7C,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACV;8GA5IS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAPzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAXvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAKI;;sBAIA;;sBAIA;;sBAOA;;sBAMA;;;MCzCQ,mBAAmB,CAAA;;IAE5B,SAAS,CACL,MAAmB,EACnB,KAAc,EACd,+BAA8C,EAC9C,oBAAmC,EACnC,cAAuB,EACvB,iBAA0B,EAC1B,iBAAgC,EAChC,WAAmB,EACnB,iBAAgC,EAChC,SAAmB,EACnB,mBAA6B,EAC7B,iBAA2B,EAAA;QAE3B,MAAM,MAAM,GAA4C,EAAE;QAE1D,IAAI,cAAc,EAAE;YAChB,MAAM,GAAG,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS;YAC1C,MAAM,CAAC,GAAG,CAAC;AACP,gBAAA,CAAC,+BAA+B,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACvG;QAEA,IAAI,iBAAiB,EAAE;YACnB,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU;AAC1C,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,QAAQ,EAAE;QACrD;QAEA,IAAI,mBAAmB,EAAE;AACrB,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM;AAC7B,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM;QACpC;QAEA,IAAI,iBAAiB,EAAE;AACnB,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM;AAC9B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM;QACnC;QAEA,IAAI,SAAS,EAAE;AACX,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM;QAC7B;aAAO;AACH,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW;AACjC,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW;AACjC,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW;QACjC;;;;AAKA,QAAA,QAAQ,MAAM,CAAC,KAAK;YAChB,KAAK,WAAW,CAAC,KAAK;AAClB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;gBAC/C;YACJ,KAAK,WAAW,CAAC,GAAG;AAChB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO;gBAC/C;AACJ,YAAA;AACI,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ;gBAC/B;;AAGR,QAAA,OAAO,MAAM;IACjB;8GA/DS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCAtC,uBAAuB,CAAA;;AAEhC,IAAA,SAAS,CACL,WAAmB,EACnB,oBAA4B,EAC5B,qBAAqC,EAAA;AAErC,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACnB,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,YAAY,GAAG,WAAW,KAAK,oBAAoB,GAAG,CAAC;AAE7D,QAAA,IAAI,YAAY,IAAI,qBAAqB,EAAE;AACvC,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,OAAO,MAAM;IACjB;8GAlBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACEhD,MAAM,SAAS,GAAuC;AACzD,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,IAAI,EAAE;;MAQG,+BAA+B,CAAA;;AAExC,IAAA,SAAS,CAAC,OAAiC,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;IACvC;8GARS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gCAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACT,iBAAA;;;MCTY,cAAc,CAAA;;IAEvB,SAAS,CAAC,GAAa,EAAE,SAAwB,EAAA;AAC7C,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,GAAG,sBAAsB,GAAG,EAAE;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC;QAE/D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE;IACtD;;IAGQ,uBAAuB,CAAC,GAAa,EAAE,SAAwB,EAAA;QACnE,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;QAEA,IAAI,UAAU,GAAG,EAAE;AAEnB,QAAA,IAAII,UAAQ,CAAC,SAAS,CAAC,EAAE;YACrB,UAAU,GAAG,SAAS;QAC1B;AAEA,QAAA,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;YACvB,UAAU,GAAI,SAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;QACpD;AAEA,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE;IAC5B;8GA1BS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCCjC,uBAAuB,CAAA;;AAEhC,IAAA,SAAS,CACL,cAA4C,EAC5C,GAAY,EACZ,+BAA8C,EAAA;QAE9C,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,cAAc,GAAG,kBAAkB,CAAC,IAAI;QAC5C;QACA,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM;QACrC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI;QAE9E,OAAO;YACH,CAAC,MAAM,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,IAAI;AACvD,YAAA,WAAW,EAAE,oBAAoB;AACjC,YAAA,WAAW,EAAE;SAChB;IACL;8GAlBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACgBvD,MAAM,aAAa,GAAG;IAClB,0BAA0B;IAC1B,uBAAuB;IACvB,2BAA2B;IAC3B,sCAAsC;IACtC,YAAY;IACZ,+BAA+B;IAC/B,mCAAmC;IACnC,wBAAwB;IACxB,uBAAuB;IACvB,cAAc;IACd,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,UAAU;IACV,kBAAkB;IAClB,4BAA4B;IAC5B,8BAA8B;IAC9B,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB;CACH;AAED;;;AAGG;MAKU,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAjC3B,0BAA0B;YAC1B,uBAAuB;YACvB,2BAA2B;YAC3B,sCAAsC;YACtC,YAAY;YACZ,+BAA+B;YAC/B,mCAAmC;YACnC,wBAAwB;YACxB,uBAAuB;YACvB,cAAc;YACd,2BAA2B;YAC3B,0BAA0B;YAC1B,wBAAwB;YACxB,UAAU;YACV,kBAAkB;YAClB,4BAA4B;YAC5B,8BAA8B;YAC9B,2BAA2B;YAC3B,gBAAgB;YAChB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;AACvB,YAAA,cAAc,aAtBd,0BAA0B;YAC1B,uBAAuB;YACvB,2BAA2B;YAC3B,sCAAsC;YACtC,YAAY;YACZ,+BAA+B;YAC/B,mCAAmC;YACnC,wBAAwB;YACxB,uBAAuB;YACvB,cAAc;YACd,2BAA2B;YAC3B,0BAA0B;YAC1B,wBAAwB;YACxB,UAAU;YACV,kBAAkB;YAClB,4BAA4B;YAC5B,8BAA8B;YAC9B,2BAA2B;YAC3B,gBAAgB;YAChB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;YACvB,cAAc,CAAA,EAAA,CAAA,CAAA;+GAWL,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC;AAC3B,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa;AAC7B,iBAAA;;;ACtDD;;AAEG;;;;"}
1
+ {"version":3,"file":"fundamental-ngx-platform-table-helpers.mjs","sources":["../../../../libs/platform/table-helpers/table.ts","../../../../libs/platform/table-helpers/constants/tokens.ts","../../../../libs/platform/table-helpers/constants/index.ts","../../../../libs/platform/table-helpers/services/table.service.ts","../../../../libs/platform/table-helpers/services/table-responsive.service.ts","../../../../libs/platform/table-helpers/table-column.ts","../../../../libs/platform/table-helpers/directives/platform-table-column-responsive.directive.ts","../../../../libs/platform/table-helpers/directives/table-cell-header-popover.directive.ts","../../../../libs/platform/table-helpers/services/table-scroll-dispatcher.service.ts","../../../../libs/platform/table-helpers/services/table-column-resize.service.ts","../../../../libs/platform/table-helpers/directives/table-cell-resizable.directive.ts","../../../../libs/platform/table-helpers/table-cell.class.ts","../../../../libs/platform/table-helpers/directives/table-cell.directive.ts","../../../../libs/platform/table-helpers/enums/filter-type.enum.ts","../../../../libs/platform/table-helpers/enums/collection-filter.enum.ts","../../../../libs/platform/table-helpers/enums/column-align.enum.ts","../../../../libs/platform/table-helpers/enums/row-type.enum.ts","../../../../libs/platform/table-helpers/enums/selection-mode.enum.ts","../../../../libs/platform/table-helpers/enums/sort-direction.enum.ts","../../../../libs/platform/table-helpers/utils.ts","../../../../libs/platform/table-helpers/domain/table-data-provider.ts","../../../../libs/platform/table-helpers/domain/table-data-source.ts","../../../../libs/platform/table-helpers/domain/array-data-source.ts","../../../../libs/platform/table-helpers/domain/observable-data-source.ts","../../../../libs/platform/table-helpers/domain/data-source-parser.class.ts","../../../../libs/platform/table-helpers/directives/table-data-source.directive.ts","../../../../libs/platform/table-helpers/models/table-row.model.ts","../../../../libs/platform/table-helpers/helpers.ts","../../../../libs/platform/table-helpers/models/column-freeze-event.model.ts","../../../../libs/platform/table-helpers/models/columns-change-event.model.ts","../../../../libs/platform/table-helpers/models/directives.ts","../../../../libs/platform/table-helpers/models/filter-change-event.model.ts","../../../../libs/platform/table-helpers/models/group-change-event.model.ts","../../../../libs/platform/table-helpers/models/page-change-event.model.ts","../../../../libs/platform/table-helpers/models/save-rows-event.interface.ts","../../../../libs/platform/table-helpers/models/search-change-event.model.ts","../../../../libs/platform/table-helpers/models/selection-change-event.model.ts","../../../../libs/platform/table-helpers/models/sort-change-event.model.ts","../../../../libs/platform/table-helpers/models/table-cell-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-dialog-common-data.model.ts","../../../../libs/platform/table-helpers/models/table-row-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-row-toggle-open-state-event.model.ts","../../../../libs/platform/table-helpers/models/table-rows-rearrange-event.model.ts","../../../../libs/platform/table-helpers/directives/table-draggable.directive.ts","../../../../libs/platform/table-helpers/services/table-row.service.ts","../../../../libs/platform/table-helpers/directives/table-header-resizer.directive.ts","../../../../libs/platform/table-helpers/directives/table-header.directive.ts","../../../../libs/platform/table-helpers/directives/table-initial-state.directive.ts","../../../../libs/platform/table-helpers/directives/table-scrollable.directive.ts","../../../../libs/platform/table-helpers/directives/table-view-settings-filter-custom.directive.ts","../../../../libs/platform/table-helpers/directives/table-virtual-scroll.directive.ts","../../../../libs/platform/table-helpers/pipes/cell-styles.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-resizable-side.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-sorting-direction.pipe.ts","../../../../libs/platform/table-helpers/pipes/row-classes.pipe.ts","../../../../libs/platform/table-helpers/pipes/selection-cell-styles.pipe.ts","../../../../libs/platform/table-helpers/table-helpers.module.ts","../../../../libs/platform/table-helpers/fundamental-ngx-platform-table-helpers.ts"],"sourcesContent":["import { ElementRef, EventEmitter, Injector, Signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { PresetManagedComponent } from '@fundamental-ngx/platform/shared';\nimport { Observable } from 'rxjs';\n\nimport { FocusableGridDirective, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { TableDataSource } from './domain';\nimport { CollectionFilter } from './interfaces/collection-filter.interface';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { CollectionSort } from './interfaces/collection-sort.interface';\nimport { TableState } from './interfaces/table-state.interface';\nimport { PlatformTableManagedPreset, SaveRowsEvent, TableInitialState, TableRow } from './models';\nimport { TableScrollable } from './services/table-scroll-dispatcher.service';\nimport { TableColumn } from './table-column';\n\nexport abstract class Table<T = any> implements PresetManagedComponent<PlatformTableManagedPreset> {\n abstract readonly name: string;\n\n abstract readonly id: string;\n\n abstract _loadPreviousPages: boolean;\n\n abstract pageScrolling: boolean;\n\n abstract loadPagesBefore: boolean;\n\n abstract pageSize: Nullable<number>;\n\n abstract freezeColumnsTo: string;\n\n abstract freezeEndColumnsTo: string;\n\n /** Event emitted when current preset configuration has been changed. */\n abstract presetChanged: EventEmitter<PlatformTableManagedPreset>;\n\n /** Sum of widths of fixed columns (semantic highlighting, selection) */\n abstract get _fixedColumnsPadding(): number;\n\n /** Freezable column names and their respective indexes */\n abstract get _freezableColumns(): ReadonlyMap<string, number>;\n\n /** Freezable column names and their respective indexes */\n abstract get _freezableEndColumns(): ReadonlyMap<string, number>;\n\n /** Width of the table element in px */\n abstract get _tableWidthPx(): number;\n\n abstract get loadingState(): boolean;\n\n abstract initialState: TableInitialState | null;\n\n /** Table columns definition list */\n abstract readonly tableColumnsStream: Observable<TableColumn[]>;\n\n abstract readonly injector: Injector;\n\n abstract readonly tableContainer: ElementRef;\n\n abstract readonly tableScrollable: TableScrollable;\n\n abstract _tableRowsVisible: TableRow<T>[];\n\n abstract _tableRows: TableRow<T>[];\n\n abstract loadedRows$: Signal<number>;\n\n abstract _tableCurrentlyRenderedRowsPlaceholder: number[];\n\n abstract minimumColumnWidth: number;\n\n abstract _focusableGrid: FocusableGridDirective;\n\n /** Get table state */\n abstract getTableState(): TableState;\n\n /** Set table state */\n abstract setTableState(tableState: TableState): void;\n\n /** Get table columns definition list */\n abstract getTableColumns(): TableColumn[];\n\n /** Get a list of visible table columns. */\n abstract getVisibleTableColumns(): TableColumn[];\n\n /** Set Sorting rules */\n abstract sort(sortRules: CollectionSort[]): void;\n\n /** Add Sorting rules to the existing ones */\n abstract addSort(sortRules: CollectionSort[]): void;\n\n /** Set Filtering rules */\n abstract filter(filterRules: CollectionFilter[]): void;\n\n /** Add Filter rules to the existing ones */\n abstract addFilter(filterRules: CollectionFilter[]): void;\n\n /** Set grouping rules */\n abstract group(groupRules: CollectionGroup[]): void;\n\n /** Add Group rules to the existing ones */\n abstract addGroup(groupRules: CollectionGroup[]): void;\n\n /** Set table columns */\n abstract setColumns(columns: string[]): void;\n\n /** Toggle row checked state. */\n abstract toggleSelectableRow(rowIndex: number): void;\n\n /** Freeze table columns to including */\n abstract freezeToColumn(columnKey: string, end?: boolean): void;\n\n /** Unfreeze column */\n abstract unfreeze(columnKey: string, end?: boolean): void;\n\n /** Search in all table columns */\n abstract search(searchInput: SearchInput): void;\n\n /** Toolbar Sort Settings button visibility */\n abstract showSortSettingsInToolbar(showSortSettings: boolean): void;\n\n /** Toolbar Filter Settings button visibility */\n abstract showFilterSettingsInToolbar(showFilterSettings: boolean): void;\n\n /** Toolbar Group Settings button visibility */\n abstract showGroupSettingsInToolbar(showGroupSettings: boolean): void;\n\n /** Toolbar Columns Settings button visibility */\n abstract showColumnSettingsInToolbar(showColumnSettings: boolean): void;\n\n /** Toolbar Settings button visibility */\n abstract showSettingsInToolbar(showSettings: boolean): void;\n\n /** Disable filtering by header column menu */\n abstract setHeaderColumnFilteringDisabled(disabled: boolean): void;\n\n /** Set current page */\n abstract setCurrentPage(currentPage: number): void;\n\n /** Gets the max allowed width for all freezable columns */\n abstract getMaxAllowedFreezableColumnsWidth(): number;\n\n /** Get table data source */\n abstract getDataSource(): TableDataSource<T>;\n\n /** Manually triggers columns width recalculation */\n abstract recalculateTableColumnWidth(): void;\n\n /** Fetch data source data. */\n abstract fetch(): void;\n\n /** Adds empty row for editing at the beginning of the rows array. */\n abstract addRow(): void;\n\n /** Emits save event and resets editable rows array. */\n abstract saveRows(): void;\n\n /** Cancels editing and discards newly added rows */\n abstract cancelEditing(): void;\n\n /** Expand all the rows of the table */\n abstract expandAll(): void;\n\n /** Collapse all the rows of the table */\n abstract collapseAll(): void;\n\n /** Sets selected preset. */\n abstract setPreset(data: PlatformTableManagedPreset): void;\n\n /** Returns current preset. */\n abstract getCurrentPreset(): PlatformTableManagedPreset;\n\n abstract getCurrentlyRenderedRows(): number[];\n\n abstract setCurrentlyRenderedRows(startIndex: number, length: number): void;\n\n abstract toggleExpandableTableRow(row: TableRow<T>, forceFetch?: boolean);\n\n abstract onTableRowsChanged(): void;\n\n abstract refreshDndList(): void;\n\n abstract clearTableRows(): void;\n\n /** Toolbar Sort Settings button click event */\n readonly openTableSortSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Filter Settings button click event */\n readonly openTableFilterSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Group Settings button click event */\n readonly openTableGroupSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Toolbar Column Settings button click event */\n readonly openTableColumnSettings: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event fired when table state changes. */\n readonly tableColumnFilterChange: EventEmitter<any> = new EventEmitter<void>();\n\n /** Event fired when empty row added. */\n readonly emptyRowAdded: EventEmitter<void>;\n\n /** Event fired when save button pressed. */\n readonly save: EventEmitter<SaveRowsEvent<T>>;\n\n /** Event fired when cancel button pressed. */\n readonly cancel: EventEmitter<void>;\n}\n","import { InjectionToken } from '@angular/core';\nimport { TableDraggable, TableInitialState, TableVirtualScroll } from '../models';\n\nexport const FDP_TABLE_DRAGGABLE_DIRECTIVE = new InjectionToken<TableDraggable>('FdpTableDraggableDirective');\nexport const FDP_TABLE_STATE_DIRECTIVE = new InjectionToken<TableInitialState>('FdpTableStateDirective');\nexport const FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE = new InjectionToken<TableVirtualScroll>(\n 'FdpTableVirtualScrollDirective'\n);\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { CollectionPage, TableState } from '../interfaces';\n\nexport * from './tokens';\n\nexport const DEFAULT_TABLE_PAGE: Readonly<CollectionPage> = {\n pageSize: 0,\n currentPage: 1\n};\n\nexport const DEFAULT_TABLE_SEARCH_INPUT: Readonly<SearchInput> = {\n text: '',\n category: ''\n};\n\nexport const DEFAULT_TABLE_STATE: Readonly<TableState> = {\n sortBy: [],\n filterBy: [],\n groupBy: [],\n page: DEFAULT_TABLE_PAGE,\n columns: [],\n columnKeys: [],\n freezeToColumn: null,\n freezeToEndColumn: null,\n searchInput: DEFAULT_TABLE_SEARCH_INPUT,\n scrollTopPosition: 0\n};\n\nexport const DEFAULT_HIGHLIGHTING_KEY = 'semantic';\n\nexport const EDITABLE_ROW_SEMANTIC_STATE = 'information';\n\nexport const SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH = 6;\n\nexport const SELECTION_COLUMN_WIDTH: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n [ContentDensityMode.COZY, 44],\n [ContentDensityMode.COMPACT, 32],\n [ContentDensityMode.CONDENSED, 32]\n]);\n\nexport const TABLE_COLUMN_MIN_WIDTH = 50;\n\nexport const ROW_HEIGHT: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n [ContentDensityMode.COZY, 44],\n [ContentDensityMode.COMPACT, 32],\n [ContentDensityMode.CONDENSED, 24]\n]);\n","import { Injectable, computed, signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { DEFAULT_TABLE_STATE } from '../constants';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { shallowEqual } from 'fast-equals';\nimport { CollectionFilter, CollectionGroup, CollectionPage, CollectionSort, TableState } from '../interfaces';\nimport {\n ColumnsChange,\n FilterChange,\n FreezeChange,\n GroupChange,\n PageChange,\n SearchChange,\n SortChange\n} from '../models';\nimport { TableColumn } from '../table-column';\n\nexport type TableStateChange =\n | TableStateProperty<'sort', SortChange>\n | TableStateProperty<'page', PageChange>\n | TableStateProperty<'filter', FilterChange>\n | TableStateProperty<'group', GroupChange>\n | TableStateProperty<'freeze', FreezeChange>\n | TableStateProperty<'columns', ColumnsChange>\n | TableStateProperty<'search', SearchChange>;\n\nexport type TableStateProperty<\n T = 'sort' | 'page' | 'filter' | 'group' | 'freeze' | 'columns' | 'search',\n P = SortChange | PageChange | FilterChange | GroupChange | FreezeChange | ColumnsChange\n> = {\n type: T;\n state: P;\n};\n\n@Injectable()\nexport class TableService {\n /** Table state stream. */\n readonly tableState$ = new BehaviorSubject(DEFAULT_TABLE_STATE);\n /** @hidden */\n readonly _semanticHighlighting$ = signal('');\n /** @hidden */\n readonly _isFilteringFromHeaderDisabled$ = signal(false);\n /** @hidden */\n readonly _isShownNavigationColumn$ = signal(false);\n /** @hidden */\n readonly _semanticHighlightingColumnWidth$ = signal(0);\n /** Visible columns stream. */\n readonly visibleColumns$ = signal<TableColumn[]>([]);\n /** Visible columns length. */\n visibleColumnsLength = computed(() => this.visibleColumns$().length);\n /** Popping columns stream. */\n readonly poppingColumns$ = signal<TableColumn[]>([]);\n /** Popping columns length. */\n _poppingColumnsLength = 0;\n /** Table columns stream. */\n readonly tableColumns$ = new BehaviorSubject<TableColumn[]>([]);\n /** @hidden */\n readonly tableStateChanges$ = this.tableState$.pipe(skip(1));\n /** Stream that emits when search state changes. */\n readonly searchChange$ = new Subject<SearchChange>();\n /** Stream that emits when sort state changes. */\n readonly sortChange$ = new Subject<SortChange>();\n /** Stream that emits when filter state changes. */\n readonly filterChange$ = new Subject<FilterChange>();\n /** Stream that emits when group state changes. */\n readonly groupChange$ = new Subject<GroupChange>();\n /** Stream that emits when freeze state changes. */\n readonly freezeChange$ = new Subject<FreezeChange>();\n /** Stream that emits when columns state changes. */\n readonly columnsChange$ = new Subject<ColumnsChange>();\n /** Stream that emits when page state changes. */\n readonly pageChange$ = new Subject<PageChange>();\n /** Stream that emits when new fetch of data is needed. */\n readonly needFetch$ = new Subject<void>();\n /** @hidden */\n readonly stateChange$ = new Subject<TableStateChange>();\n /** Stream that emits when loading state changes. */\n readonly tableLoading$ = new BehaviorSubject<boolean>(false);\n /** Listen for soft changes in table subcomponents (mostly table column) */\n readonly markForCheck$ = new Subject<void>();\n /** Listen for immediate changes in table subcomponents (mostly table column) */\n readonly detectChanges$ = new Subject<void>();\n /** Sort rules stream. */\n readonly sortRules$ = signal<Map<string, CollectionSort>>(new Map());\n /**\n * Filter Rules Map stream. Where key is column key, and value is the associated filter rules.\n * Many filters can be applied to one column.\n */\n readonly filterRules$ = signal<Map<string, CollectionFilter[]>>(new Map());\n\n /**\n * Group Rules Map stream. Where key is column key and value is associated group rule\n */\n readonly groupRulesSubject = new BehaviorSubject<Map<string, CollectionGroup>>(new Map());\n\n /** Group Rules Map signal. */\n readonly groupRules$ = toSignal(this.groupRulesSubject);\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this.tableState$.getValue();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState): void {\n this.tableState$.next(state);\n }\n\n /** Set current loading state of the Table. */\n setTableLoading(isLoading: boolean): void {\n this.tableLoading$.next(isLoading);\n }\n\n /** Notify about changes in table subcomponents (mostly table column) and detect them on next detector check. */\n markForCheck(): void {\n this.markForCheck$.next();\n }\n\n /** Notify about changes in table subcomponents (mostly table column) and detect them immediately. */\n detectChanges(): void {\n this.detectChanges$.next();\n }\n\n /** Search */\n search(searchInput: SearchInput): void {\n const prevState = this.getTableState();\n\n const state: TableState = { ...prevState, searchInput };\n\n this.setTableState(setCurrentPageToState(state, 1));\n\n const evt = { current: searchInput, previous: prevState.searchInput };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'search', state: evt });\n this.searchChange$.next(evt);\n }\n\n /** Set new sort rules */\n setSort(sortRules: CollectionSort[] | undefined): void {\n const prevState = this.getTableState();\n const prevSortRules = (prevState && prevState.sortBy) || [];\n\n const newSortRules: CollectionSort[] = sortRules ? [...sortRules] : [];\n\n const state: TableState = { ...prevState, sortBy: newSortRules };\n\n if (!shallowEqual(prevSortRules, state.sortBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n this.buildSortRulesMap();\n const evt = { current: state.sortBy, previous: prevSortRules };\n this.buildSortRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'sort', state: evt });\n this.sortChange$.next(evt);\n }\n }\n\n /** Add sort rules to the existing ones */\n addSort(sortRules: CollectionSort[]): void {\n const prevState = this.getTableState();\n const prevSortRules = (prevState && prevState.sortBy) || [];\n\n const newSortRules: CollectionSort[] = [\n ...prevSortRules.filter((existing) => !sortRules.find(({ field }) => field === existing.field)),\n ...sortRules\n ];\n\n const state: TableState = { ...prevState, sortBy: newSortRules };\n\n if (!shallowEqual(prevSortRules, state.sortBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.sortBy, previous: prevSortRules };\n this.buildSortRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'sort', state: evt });\n this.sortChange$.next(evt);\n }\n }\n\n /** Set new filter rules */\n setFilters(filterRules: CollectionFilter[] | undefined): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = filterRules\n ? filterRules.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }))\n : [];\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n\n this.buildFilterRulesMap();\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /** Add filter rules to the existing ones */\n addFilters(rulesToAdd: CollectionFilter[]): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = [\n ...prevFilterRules.filter((existing) => !rulesToAdd.find(({ field }) => field === existing.field)),\n ...rulesToAdd.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }))\n ];\n\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n this.buildFilterRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /** Removes filters for the provided fields */\n removeFilters(fields: string[]): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = prevFilterRules.filter(\n (existing) => !fields.includes(existing.field)\n );\n\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n this.buildFilterRulesMap();\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n\n /** Set group rules */\n setGroups(groups: CollectionGroup[] | undefined): void {\n const prevState = this.getTableState();\n const prevGroups = (prevState && prevState.groupBy) || [];\n\n const newGroups: CollectionGroup[] = groups ? [...groups] : [];\n const state: TableState = { ...prevState, groupBy: newGroups };\n\n if (!shallowEqual(prevGroups, state.groupBy)) {\n this.setTableState(state);\n const evt = { current: state.groupBy, previous: prevGroups };\n this.buildGroupRulesMap();\n\n this.stateChange$.next({ type: 'group', state: evt });\n this.groupChange$.next(evt);\n }\n }\n\n /** Add group rules to the existing ones */\n addGroups(groupsToAdd: CollectionGroup[]): void {\n const prevState = this.getTableState();\n const prevGroups = (prevState && prevState.groupBy) || [];\n\n const newGroups: CollectionGroup[] = [\n ...prevGroups.filter((existing) => !groupsToAdd.find(({ field }) => field === existing.field)),\n ...groupsToAdd\n ];\n\n const state: TableState = { ...prevState, groupBy: newGroups };\n\n if (!shallowEqual(prevGroups, state.groupBy)) {\n this.setTableState(state);\n this.buildGroupRulesMap();\n\n const evt = { current: state.groupBy, previous: prevGroups };\n this.stateChange$.next({ type: 'group', state: evt });\n this.groupChange$.next(evt);\n }\n }\n\n /** Freeze table to column */\n freezeTo(columnName: string | null, end?: boolean): void {\n const prevState = this.getTableState();\n\n if (!end) {\n this.setTableState({ ...prevState, freezeToColumn: columnName });\n } else {\n this.setTableState({ ...prevState, freezeToEndColumn: columnName });\n }\n\n const evt = {\n current: columnName,\n previous: end ? prevState.freezeToEndColumn : prevState.freezeToColumn\n };\n\n this.stateChange$.next({ type: 'freeze', state: evt });\n this.freezeChange$.next(evt);\n }\n\n /** Set table columns */\n setColumns(columns: string[], keys: string[]): void {\n const prevState = this.getTableState();\n const prevColumns = (prevState && prevState.columns) || [];\n\n const newColumns = [...columns];\n const newColumnKeys = [...keys];\n const state: TableState = { ...prevState, columns: newColumns, columnKeys: newColumnKeys };\n\n if (!shallowEqual(prevColumns, state.columns)) {\n this.setTableState(state);\n\n const evt = { current: state.columns, previous: prevColumns };\n this.stateChange$.next({ type: 'columns', state: evt });\n this.columnsChange$.next(evt);\n }\n }\n\n /** Set page. */\n setCurrentPage(currentPage: number): void {\n const prevState = this.getTableState();\n const prevPageState = prevState.page;\n\n if (prevPageState.currentPage === currentPage) {\n return;\n }\n\n const state: TableState = setCurrentPageToState(prevState, currentPage);\n\n this.setTableState(state);\n const evt = { current: state.page, previous: prevPageState };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'page', state: evt });\n this.pageChange$.next(evt);\n }\n\n /** Set items per page. */\n setItemsPerPage(itemsPerPage: number, resetPageNumber = true): void {\n const prevState = this.getTableState();\n const prevPageState = prevState.page;\n\n if (prevPageState.pageSize === itemsPerPage) {\n return;\n }\n\n let state: TableState = setPageSizeToState(prevState, itemsPerPage);\n\n if (resetPageNumber) {\n state = setCurrentPageToState(state, 1);\n }\n\n this.setTableState(state);\n const evt = { current: state.page, previous: prevPageState };\n\n this.needFetch$.next();\n this.stateChange$.next({ type: 'page', state: evt });\n this.pageChange$.next(evt);\n }\n\n /** Returns default table state. */\n getDefaultState(): TableState {\n const tableState = this.getTableState();\n return {\n columnKeys: tableState.columnKeys,\n sortBy: [],\n filterBy: [],\n groupBy: [],\n columns: tableState.columns,\n searchInput: {\n category: null,\n text: ''\n },\n freezeToColumn: null,\n freezeToEndColumn: null,\n page: {\n pageSize: 0,\n currentPage: 1\n },\n scrollTopPosition: 0\n };\n }\n\n /**\n * Shares visible columns array across listeners.\n * @param columns Visible columns to share.\n */\n setVisibleColumns(columns: TableColumn[]): void {\n this.visibleColumns$.set(columns);\n }\n\n /**\n * Shares popping columns array across listeners.\n * @param columns Popping columns to share.\n */\n setPoppingColumns(columns: TableColumn[]): void {\n this.poppingColumns$.set(columns);\n this._poppingColumnsLength = columns.length;\n }\n\n /**\n * Constructs grouping rules based on the table state.\n * @param state Table state.\n */\n buildGroupRulesMap(state = this.getTableState()): void {\n const groupMap = new Map(state.groupBy.map((rule) => [rule.field, rule]));\n this.groupRulesSubject.next(groupMap);\n }\n\n /**\n * Constructs sorting rules based on the table state.\n * @param state Table state\n */\n buildSortRulesMap(state = this.getTableState()): void {\n this.sortRules$.set(new Map(state.sortBy.filter((rule) => rule.field).map((rule) => [rule.field!, rule])));\n }\n\n /**\n * Constructs filter rules based on the table state.\n * @param state Table state.\n */\n buildFilterRulesMap(state = this.getTableState()): void {\n const filterRulesWithFieldNames = state.filterBy.map((rule) => ({\n ...rule,\n fieldName: this._getFieldName(rule.field, rule.fieldName)\n }));\n this.filterRules$.set(\n filterRulesWithFieldNames.reduce((hash, rule) => {\n const key = rule.field;\n if (!hash.has(key)) {\n hash.set(key, []);\n }\n hash.get(key)?.push(rule);\n return hash;\n }, new Map<string, CollectionFilter[]>())\n );\n const evt = { current: filterRulesWithFieldNames, previous: state.filterBy };\n\n this.stateChange$.next({ type: 'filter', state: evt });\n }\n\n /** Reset all filter rules */\n resetFilters(): void {\n const prevState = this.getTableState();\n const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n const newFilterRules: CollectionFilter[] = [];\n const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n if (!shallowEqual(prevFilterRules, state.filterBy)) {\n this.setTableState(setCurrentPageToState(state, 1));\n const evt = { current: state.filterBy, previous: prevFilterRules };\n\n this.buildFilterRulesMap();\n this.needFetch$.next();\n this.stateChange$.next({ type: 'filter', state: evt });\n this.filterChange$.next(evt);\n }\n }\n\n /**\n * Constructs base table config.\n */\n constructTableMetadata(): void {\n this.buildGroupRulesMap();\n this.buildSortRulesMap();\n this.buildFilterRulesMap();\n }\n\n /** @hidden */\n private _getFieldName(field: string, fieldName: Nullable<string>): string {\n const column = this.tableColumns$.getValue().find((col) => col.key === field);\n return column ? column.name : (fieldName ?? field);\n }\n}\n\n/** @hidden */\nfunction setCurrentPageToState(state: TableState, currentPage: number): TableState {\n const newPageState: CollectionPage = { ...state.page, currentPage };\n return { ...state, page: newPageState };\n}\n\n/** @hidden */\nfunction setPageSizeToState(state: TableState, pageSize: number): TableState {\n const newPageState: CollectionPage = { ...state.page, pageSize };\n return { ...state, page: newPageState };\n}\n","import { DestroyRef, ElementRef, Inject, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { Table } from '../table';\nimport { TableColumn } from '../table-column';\nimport { TableService } from './table.service';\n\nexport interface FdpTableBreakpoint {\n min: number;\n max: number;\n visibility: FdpColumnResponsiveState;\n}\n\n@Injectable()\nexport class TableResponsiveService {\n /** @hidden */\n private readonly _responsiveBreakpoints = new Map<TableColumn, FdpTableBreakpoint[]>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _resizeSubscription: Subscription | undefined;\n\n /** @hidden */\n constructor(\n @Inject(Table) private readonly _table: Table,\n private readonly _tableService: TableService,\n private readonly _elmRef: ElementRef\n ) {}\n\n /**\n * Registers responsive column with it's breakpoint configuration.\n * @param column Table Column\n * @param breakpoints Breakpoint configuration.\n */\n registerResponsiveColumn(column: TableColumn, breakpoints: Record<string, FdpColumnResponsiveState>): void {\n this._responsiveBreakpoints.set(column, this._normalizeBreakpoints(breakpoints));\n\n this._listenToTableResize();\n }\n /**\n * @hidden\n * Transforms plain breakpoints into a list with minimal/maximal element width with it's visibility state.\n */\n private _normalizeBreakpoints(breakpoints: Record<string, FdpColumnResponsiveState>): FdpTableBreakpoint[] {\n const sortedBreakpoints = Object.keys(breakpoints)\n .map((i) => parseInt(i, 10))\n .sort((a, b) => a - b);\n const newBreakpoints = sortedBreakpoints.reduce((result: FdpTableBreakpoint[], value, index, array) => {\n result.push({\n min: value,\n max: index + 1 < array.length ? array[index + 1] - 1 : Infinity,\n visibility: breakpoints[value.toString()]\n });\n\n return result;\n }, []);\n\n return newBreakpoints;\n }\n\n /**\n * @hidden\n * Listens to the table element resize and calculates columns visibility based on the current breakpoint.\n */\n private _listenToTableResize(): void {\n this._resizeSubscription?.unsubscribe();\n\n this._resizeSubscription = resizeObservable(this._elmRef.nativeElement)\n .pipe(debounceTime(20), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._processResponsiveColumns();\n });\n }\n\n /** @hidden */\n private _processResponsiveColumns(): void {\n let shouldNotify = false;\n const { width } = this._elmRef.nativeElement.getBoundingClientRect();\n\n this._responsiveBreakpoints.forEach((breakpoints, item) => {\n const fittingBreakpoint = breakpoints.find(\n (breakpoint) => breakpoint.min <= width && breakpoint.max >= width\n );\n\n if (fittingBreakpoint) {\n shouldNotify = shouldNotify || item.responsiveState !== fittingBreakpoint.visibility;\n item.responsiveState = fittingBreakpoint.visibility;\n }\n });\n\n // Notify only when there's actual visibility changes to any of the columns.\n if (!shouldNotify) {\n return;\n }\n\n const currentTableColumns = this._table.getVisibleTableColumns().map((column) => column.name);\n\n this._tableService.stateChange$.next({\n type: 'columns',\n state: { previous: currentTableColumns, current: currentTableColumns }\n });\n\n this._tableService.columnsChange$.next({ previous: currentTableColumns, current: currentTableColumns });\n }\n}\n","import { Signal, TemplateRef } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { Observable } from 'rxjs';\nimport { ColumnAlignValue, FilterableColumnDataType } from './enums';\nimport { FdpColumnResponsiveState } from './interfaces';\n\nexport abstract class TableColumn {\n /** Column unique identifier. */\n abstract name: string;\n\n /** Column data accessor key. */\n abstract key: string;\n\n /** Column header label. */\n abstract label: string;\n\n /** Column footer label. */\n abstract footerLabel: string;\n\n /** Emits when the label value changes. */\n abstract labelValueChanges$: Observable<Nullable<string>>;\n\n /** Cell text alignment. */\n abstract align: ColumnAlignValue;\n\n /** Toggles sort feature in the column header. */\n abstract sortable: boolean;\n\n /** Toggles filter feature in the column header. */\n abstract filterable: boolean;\n\n /** Data type the column represents. */\n abstract dataType: FilterableColumnDataType;\n\n /**\n * Optional array of available filter options.\n * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n * */\n abstract filterSelectOptions: string[];\n\n /** Width of the column cells. */\n abstract width: string;\n\n /** Toggles grouping feature in the column header. */\n abstract groupable: boolean;\n\n /** Toggles freeze/unfreeze feature in the column header. */\n abstract freezable: boolean;\n\n /** Toggles end column freeze/unfreeze feature in the column header. */\n abstract endFreezable: boolean;\n\n /** Whether the table cell inside table header should be non-interactive. */\n abstract nonInteractive: boolean;\n\n /** Initial visibility state of the column. */\n abstract visible: boolean;\n\n /** Column cell template for readonly mode. */\n abstract columnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column cell template for editing mode. */\n abstract editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template. */\n abstract headerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header template. */\n abstract footerCellTemplate: Nullable<TemplateRef<any>>;\n\n /** Column header popover template. */\n abstract headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n /** Whether the text should wrap, when text is too long for 1 line. */\n abstract noWrap: boolean;\n\n /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n abstract applyText: boolean;\n\n /** Stores information for the header cell if the ellipsis are visible after the column resize */\n abstract headerOverflows: boolean; // Not being used anywhere, is here for information\n\n /** Whether this column is visible */\n abstract responsiveState: FdpColumnResponsiveState;\n /** Column role attribute. */\n abstract role: 'cell' | 'rowheader' | 'gridcell';\n\n /**\n * Whether to announce built-in empty cells to screen readers for columns with column templates.\n * This provides option to turn off the announcement if the column template already includes its own\n * */\n abstract announceEmptyCell: Signal<boolean>;\n\n /** @hidden */\n abstract _freezed: boolean;\n\n /** @hidden */\n abstract _endFreezed: boolean;\n}\n","import { Directive, Inject, Input, Optional } from '@angular/core';\nimport { shallowEqual } from 'fast-equals';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { TableResponsiveService } from '../services/table-responsive.service';\nimport { TableColumn } from '../table-column';\n\n@Directive({\n selector: '[fdpTableColumnResponsive]',\n standalone: true\n})\nexport class PlatformTableColumnResponsiveDirective {\n /**\n * Responsive breakpoints configuration.\n * @param value where key is minimal table with and value is a column visibility type.\n */\n @Input('fdpTableColumnResponsive')\n set breakpoints(value: Record<string, FdpColumnResponsiveState>) {\n if (shallowEqual(value, this._breakpoints) || !this._column) {\n return;\n }\n this._breakpoints = value;\n this._responsiveTableService.registerResponsiveColumn(this._column, this._breakpoints);\n }\n\n get breakpoints(): Record<number, FdpColumnResponsiveState> {\n return this._breakpoints;\n }\n\n /** @hidden */\n private _breakpoints: Record<number, FdpColumnResponsiveState> = {};\n\n /** @hidden */\n constructor(\n private readonly _responsiveTableService: TableResponsiveService,\n @Optional() @Inject(TableColumn) private readonly _column: TableColumn | null\n ) {}\n}\n","import { Directive, Signal, TemplateRef } from '@angular/core';\n\nexport interface TableCellHeaderPopoverDirectiveContext {\n $implicit: Signal<TemplateRef<any>[]>;\n}\n\n@Directive({\n selector: '[fdpTableCellHeaderPopover]',\n standalone: true\n})\nexport class TableCellHeaderPopoverDirective {\n /** @hidden */\n constructor(public templateRef: TemplateRef<TableCellHeaderPopoverDirectiveContext>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n directive: TableCellHeaderPopoverDirective,\n context: unknown\n ): context is TableCellHeaderPopoverDirectiveContext {\n return true;\n }\n}\n","import { ElementRef, Injectable, InjectionToken, OnDestroy } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nexport interface TableScrollable {\n /** Get scrollable ElementRef of. */\n elementRef: ElementRef<HTMLElement>;\n\n /** Returns observable that emits when a scroll event is fired on the host element. */\n getScrollStream(): Observable<Event>;\n\n /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n getVerticalScrollStream(): Observable<Event>;\n\n /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n getHorizontalScrollStream(): Observable<Event>;\n\n /** Returns scrollTop position of the host element. */\n getScrollTop(): number;\n\n /** Returns scrollLeft position of the host element. */\n getScrollLeft(): number;\n\n /** Set scrollTop position of the host element. */\n setScrollTop(scrollTop: number, emitEvent: boolean): void;\n\n /** Set scrollLeft position of the host element. */\n setScrollLeft(scrollLeft: number, emitEvent: boolean): void;\n\n /** Scrolls to overlapped cell. */\n scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void;\n\n /** Set Scroll Position during component initialization. */\n initializeScrollTop(scrollTop: number): void;\n}\n\nexport const TABLE_SCROLLABLE = new InjectionToken<TableScrollable>('Table Scrollable');\n\n@Injectable()\nexport class TableScrollDispatcherService implements OnDestroy {\n /** @hidden */\n private _scrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _verticalScrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _horizontalScrollSubject: Subject<TableScrollable> = new Subject();\n /** @hidden */\n private _scrollableSubscriptionsMap: Map<TableScrollable, Subscription> = new Map();\n\n /** @hidden */\n register(scrollable: TableScrollable): void {\n if (this._scrollableSubscriptionsMap.has(scrollable)) {\n return;\n }\n\n const sub = new Subscription();\n sub.add(scrollable.getScrollStream().subscribe(() => this._scrollSubject.next(scrollable)));\n sub.add(scrollable.getHorizontalScrollStream().subscribe(() => this._horizontalScrollSubject.next(scrollable)));\n sub.add(scrollable.getVerticalScrollStream().subscribe(() => this._verticalScrollSubject.next(scrollable)));\n\n this._scrollableSubscriptionsMap.set(scrollable, sub);\n }\n\n /** @hidden */\n deregister(scrollable: TableScrollable): void {\n if (!this._scrollableSubscriptionsMap.has(scrollable)) {\n return;\n }\n\n this._scrollableSubscriptionsMap.get(scrollable)?.unsubscribe();\n }\n\n /** Scroll stream */\n scrolled(): Observable<TableScrollable> {\n return this._scrollSubject.asObservable();\n }\n\n /** Horizontal scroll stream */\n horizontallyScrolled(): Observable<TableScrollable> {\n return this._horizontalScrollSubject.asObservable();\n }\n\n /** Vertical scroll stream */\n verticallyScrolled(): Observable<TableScrollable> {\n return this._verticalScrollSubject.asObservable();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n Array.from(this._scrollableSubscriptionsMap.values()).forEach((subscription) => subscription.unsubscribe());\n\n this._scrollableSubscriptionsMap.clear();\n }\n}\n","import { DestroyRef, ElementRef, Injectable, OnDestroy, computed, inject, signal } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Table } from '../table';\nimport { TableScrollDispatcherService } from './table-scroll-dispatcher.service';\n\nexport const TABLE_RESIZER_BORDER_WIDTH = 3;\n\n/**\n * Service to handle all things related to column resizing:\n * - Setting resizer\n * - Processing resize\n * - Calculating the real columns width\n */\n@Injectable()\nexport class TableColumnResizeService implements OnDestroy {\n /** Subject that emits new map of fixed columns and their respective width. */\n readonly fixedColumsWidthChange = new BehaviorSubject<Map<string, string>>(new Map());\n /** Indicate if resizing process in progress. */\n get resizeInProgress(): boolean {\n return this._resizeInProgress;\n }\n\n /** Resize progress stream. */\n readonly resizeInProgress$ = new BehaviorSubject<boolean>(false);\n\n /** Whether cell mock should be visible. */\n readonly cellMockVisible$ = signal(false);\n\n /** Current column resizer position. */\n get resizerPosition(): number {\n return this._resizerPosition ?? 0;\n }\n\n /** Resizer position stream. */\n readonly resizerPosition$ = new BehaviorSubject<number>(0);\n\n /** Observable to notify to run CD */\n get markForCheck(): Observable<void> {\n return this._markForCheck.asObservable();\n }\n\n /** table has fixed width if all of it's columns are fixed */\n get fixedWidth(): boolean {\n return this._fixedColumnsWidthMap.size === this._visibleColumnNames.length;\n }\n\n /** @hidden */\n private _fixedColumnsWidthMap = new Map<string, string>();\n\n /** @hidden */\n private _columnsCellMap = new Map<string, ElementRef<HTMLTableDataCellElement>[]>();\n\n /** @hidden */\n private _visibleColumnNames: string[] = [];\n\n /** @hidden */\n private _visibleColumnLeftNeighbourMap = new Map<string, string | undefined>();\n\n /** @hidden */\n private _visibleColumnRightNeighbourMap = new Map<string, string | undefined>();\n\n /** @hidden */\n private _visibleColumnLeftOffsetPxMap = new Map<string, number>();\n\n /** @hidden */\n private _visibleColumnRightOffsetPxMap = new Map<string, number>();\n\n /** @hidden */\n private _startX: number | null = null;\n\n /** @hidden */\n private _clientStartX: number | null = null;\n\n /** @hidden */\n private _resizeInProgress = this.resizeInProgress$.value;\n\n /** @hidden */\n private _resizedColumn: string;\n\n /** @hidden */\n private _resizerPosition: number | null = null;\n\n /** @hidden */\n private _scrollLeft = 0;\n\n /** @hidden */\n private _markForCheck = new Subject<void>();\n\n /** @hidden */\n private _destroyed = inject(DestroyRef);\n\n /** @hidden */\n private _resizerMoveSubscription = new Subscription();\n\n /** @hidden */\n private _tableRef: Table;\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n constructor(private readonly _tableScrollDispatcherService: TableScrollDispatcherService) {\n this._tableScrollDispatcherService\n ?.horizontallyScrolled()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe((scrollable) => {\n this.resizerPosition$.next(0);\n this._scrollLeft = scrollable.getScrollLeft();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._resizeInProgress = false;\n this.resizeInProgress$.next(false);\n\n this._resizerMoveSubscription.unsubscribe();\n }\n\n /** @hidden */\n setTableRef(ref: Table): void {\n this._tableRef = ref;\n }\n\n /** @hidden initializes service with data, trigger columns width calculation. */\n setColumnNames(visibleColumnNames: string[]): void {\n this._visibleColumnLeftNeighbourMap.clear();\n this._visibleColumnRightNeighbourMap.clear();\n visibleColumnNames.forEach((column, index) => {\n this._visibleColumnLeftNeighbourMap.set(column, visibleColumnNames[index - 1]);\n });\n visibleColumnNames.reverse().forEach((column, index) => {\n this._visibleColumnRightNeighbourMap.set(column, visibleColumnNames[index - 1]);\n });\n this._visibleColumnNames = [...visibleColumnNames];\n this.updateFrozenColumnsWidth();\n }\n\n /** @hidden */\n updateFrozenColumnsWidth(): void {\n let allPreviousWidths = 0,\n allNextWidths = 0;\n for (const [column, prevColumn] of this._visibleColumnLeftNeighbourMap.entries()) {\n allPreviousWidths +=\n this._columnsCellMap.get(prevColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n this._visibleColumnLeftOffsetPxMap.set(column, allPreviousWidths);\n }\n for (const [column, nextColumn] of this._visibleColumnRightNeighbourMap.entries()) {\n allNextWidths +=\n this._columnsCellMap.get(nextColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n this._visibleColumnRightOffsetPxMap.set(column, allNextWidths);\n }\n }\n\n /** @hidden */\n updateFrozenColumnsWidthAfterResize(columnName: string, diffX: number): void {\n let found = false;\n for (const [column, width] of this._visibleColumnLeftOffsetPxMap.entries()) {\n if (column === columnName) {\n found = true;\n } else if (found) {\n this._visibleColumnLeftOffsetPxMap.set(column, width + diffX);\n }\n }\n }\n\n /** Retrieves custom column value or returns `unset` */\n getColumnWidthStyle(columnName: string): string {\n const calculatedWidth = this._fixedColumnsWidthMap.get(columnName);\n return calculatedWidth || 'unset';\n }\n\n /** Previous column name */\n getPreviousColumnName(columnName: string): string | undefined {\n return this._visibleColumnLeftNeighbourMap.get(columnName);\n }\n\n /** Previous column name */\n getNextColumnName(columnName: string): string | undefined {\n return this._visibleColumnRightNeighbourMap.get(columnName);\n }\n\n /** Overall previous columns width. Used to calculate offset for the absolute positioned cells. */\n getPrevColumnsWidth(columnName: string): number {\n return this._visibleColumnLeftOffsetPxMap.get(columnName) ?? 0;\n }\n\n /** Overall next columns width. Used to calculate offset for the absolute positioned cells. */\n getNextColumnsWidth(columnName: string): number {\n return this._visibleColumnRightOffsetPxMap.get(columnName) ?? 0;\n }\n\n /** Register column's cell to get its dimensions in further. */\n registerColumnCell(columnName: string, cellElRef: ElementRef): void {\n const columnCells = this._columnsCellMap.get(columnName) || [];\n this._columnsCellMap.set(columnName, [cellElRef, ...columnCells]);\n }\n\n /** Unregister column's cell. */\n unregisterColumnCell(columnName: string, cellElRef: ElementRef): void {\n const columnCells = this._columnsCellMap.get(columnName) || [];\n const elmIndex = columnCells.findIndex((e) => e.nativeElement === cellElRef.nativeElement);\n\n if (elmIndex === -1) {\n return;\n }\n\n columnCells.splice(elmIndex, 1);\n\n this._columnsCellMap.set(columnName, columnCells);\n }\n\n /** Register the value of column width that changed from input */\n setCustomWidth(columnName: string, value: string): void {\n this._fixedColumnsWidthMap.set(columnName, value);\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n }\n\n /** Set the appropriate column resizer position. */\n setInitialResizerPosition(resizerPosition: number, resizedColumn: string): void {\n if (this.resizeInProgress) {\n return;\n }\n\n this._resizedColumn = resizedColumn;\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n\n if (resizerPosition != null) {\n const scrollLeftOffset = this._scrollLeft * (this._isRtl() ? 1 : -1);\n this._resizerPosition = resizerPosition - TABLE_RESIZER_BORDER_WIDTH + scrollLeftOffset;\n this.resizerPosition$.next(this.resizerPosition);\n }\n\n this._markForCheck.next();\n }\n\n /** Hide the column resizer. */\n hideResizer(): void {\n if (this._resizeInProgress) {\n return;\n }\n\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n this._markForCheck.next();\n }\n\n /** Handle start resizing. */\n startResize(event: MouseEvent): void {\n this._startX = this.resizerPosition;\n this._clientStartX = event.clientX;\n\n this._updateResizerPositionOnMouseMove();\n\n this._resizeInProgress = true;\n this.resizeInProgress$.next(true);\n }\n\n /** Handle end resizing. */\n finishResize(event: MouseEvent): void {\n this._resizerMoveSubscription.unsubscribe();\n\n this._resizeInProgress = false;\n this.resizeInProgress$.next(false);\n this._resizerPosition = null;\n this.resizerPosition$.next(this.resizerPosition);\n\n if (this._startX != null) {\n const clientStartX = this._clientStartX ?? 0;\n const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n this._processResize(diffX);\n }\n\n this._startX = null;\n this._clientStartX = null;\n\n this._markForCheck.next();\n }\n\n /** Update columns width after resizing, prevent from having too small columns. */\n _processResize(diffX: number): void {\n const resizedElement = this._columnsCellMap.get(this._resizedColumn)?.[0]?.nativeElement;\n const columnWidth = resizedElement?.getBoundingClientRect().width;\n\n if (!columnWidth || !resizedElement) {\n return;\n }\n\n if (diffX < 0 && columnWidth + diffX < this._tableRef.minimumColumnWidth) {\n diffX = this._tableRef.minimumColumnWidth - columnWidth;\n }\n\n if (!this.fixedWidth) {\n for (const [columnName, cells] of this._columnsCellMap.entries()) {\n if (cells.length) {\n this._fixedColumnsWidthMap.set(\n columnName,\n cells[0].nativeElement.getBoundingClientRect().width + 'px'\n );\n }\n }\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n }\n\n /**\n * In case \"_resizedColumn\" is freezable, make sure the overall width of freezable columns does not exceed the width of the table.\n * If it does, columns will be made unfrozen.\n */\n if (\n diffX > 0 &&\n (this._tableRef._freezableColumns.has(this._resizedColumn) ||\n this._tableRef._freezableEndColumns?.has(this._resizedColumn))\n ) {\n let actualWidth = this.getPrevColumnsWidth(this._resizedColumn) + columnWidth;\n if (this._tableRef._freezableEndColumns?.has(this._resizedColumn)) {\n actualWidth = this.getNextColumnsWidth(this._resizedColumn) + columnWidth;\n }\n const newWidth = actualWidth + diffX;\n const maxWidth = this._tableRef.getMaxAllowedFreezableColumnsWidth();\n if (newWidth >= maxWidth) {\n this._tableRef._freezableColumns.forEach((column) => {\n this._tableRef.unfreeze(column.toString());\n });\n }\n }\n\n const updatedWidth = columnWidth + diffX;\n this._fixedColumnsWidthMap.set(this._resizedColumn, updatedWidth + 'px');\n this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n this.updateFrozenColumnsWidthAfterResize(this._resizedColumn, diffX);\n\n const computedStyles = window.getComputedStyle(resizedElement);\n const padding = parseInt(computedStyles.paddingLeft, 10) + parseInt(computedStyles.paddingRight, 10);\n this._updateHeaderOverflowState(updatedWidth - padding);\n this._markForCheck.next();\n }\n\n /** Update column resizer position. */\n private _updateResizerPositionOnMouseMove(): void {\n this._resizerMoveSubscription = fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(debounceTime(10))\n .subscribe((event) => {\n const clientStartX = this._clientStartX ?? 0;\n const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n this._resizerPosition = (this._startX ?? 0) + diffX;\n this.resizerPosition$.next(this.resizerPosition);\n\n this._markForCheck.next();\n });\n }\n\n /**\n * Check if the header text length goes over the column width. In such case applies text truncation with\n * ellipsis and make sure we also show a tooltip.\n *\n * @private\n */\n private _updateHeaderOverflowState(updatedWidth: number): void {\n const element = this._columnsCellMap\n .get(this._resizedColumn)\n ?.find((c) => c?.nativeElement.tagName === 'TH')?.nativeElement;\n const visibleColumn = this._tableRef.getVisibleTableColumns().find((c) => c.name === this._resizedColumn);\n const headerTextElem = element?.querySelector(`#${this._tableRef.id}-header-cell-${this._resizedColumn}`);\n\n if (!headerTextElem || !visibleColumn) {\n return;\n }\n visibleColumn.headerOverflows = headerTextElem.scrollWidth > updatedWidth;\n }\n}\n","import { AfterViewInit, computed, Directive, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FDK_FOCUSABLE_ITEM_DIRECTIVE, FocusableItemDirective, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective } from '@fundamental-ngx/core/table';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\n\nexport type TableColumnResizableSide = 'start' | 'end' | 'both';\n\nexport const TABLE_CELL_RESIZABLE_THRESHOLD_PX = 4;\n\n/**\n * Tracks mouse movement over the cell if the mouse pointer near the side of the cell, informs resize service.\n */\n@Directive({\n selector: '[fdpTableCellResizable]',\n standalone: true,\n providers: [\n {\n provide: FDK_FOCUSABLE_ITEM_DIRECTIVE,\n useExisting: PlatformTableCellResizableDirective\n },\n {\n provide: FocusableItemDirective,\n useExisting: PlatformTableCellResizableDirective\n },\n {\n provide: TableCellDirective,\n useExisting: PlatformTableCellResizableDirective\n }\n ]\n})\nexport class PlatformTableCellResizableDirective\n extends TableCellDirective\n implements OnInit, AfterViewInit, OnDestroy\n{\n /** First column can be resized only by its end */\n @Input('fdpTableCellResizable')\n set resizableSide(value: TableColumnResizableSide) {\n if (!value) {\n return;\n }\n\n this._resizableSide = value;\n }\n\n /** Column name */\n @Input()\n columnName: string;\n\n /** @hidden */\n private _resizableSide: TableColumnResizableSide = 'both';\n\n /** @hidden */\n private readonly _isRtl = computed(() => !!this._rtlService?.rtl());\n\n /** @hidden */\n private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousemove')\n .pipe(\n filter(() => this._tableColumnResizeService?.resizeInProgress !== true),\n debounceTime(5),\n map((event) => this._getResizer(event) || { resizerPosition: 0, resizedColumn: this.columnName }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((data) => {\n this._tableColumnResizeService.setInitialResizerPosition(data.resizerPosition, data.resizedColumn);\n });\n fromEvent<FocusEvent>(this.elementRef.nativeElement, 'focus')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._tableColumnResizeService.setInitialResizerPosition(0, this.columnName);\n });\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.columnName == null) {\n return;\n }\n\n this._tableColumnResizeService?.registerColumnCell(this.columnName, this.elementRef);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._tableColumnResizeService?.unregisterColumnCell(this.columnName, this.elementRef);\n }\n\n /** @hidden */\n private _getResizer(event: MouseEvent): { resizerPosition: number; resizedColumn: string } | null {\n const el = this.elementRef.nativeElement;\n const elPosition = el.getBoundingClientRect();\n // check if mouse is within 5px of cell border\n if (event.clientX > elPosition.x + elPosition.width - 5 || event.clientX < elPosition.x + 5) {\n let resizerPosition: number | undefined;\n let resizedColumn: string | undefined;\n\n const pointerOnLeft = this._isRtl()\n ? elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n : event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n if (pointerOnLeft && this._resizableSide !== 'end') {\n resizerPosition = this._isRtl()\n ? el.parentElement!.offsetWidth - (el.offsetLeft + el.offsetWidth)\n : el.offsetLeft;\n\n resizedColumn = this._tableColumnResizeService.getPreviousColumnName(this.columnName);\n }\n\n const pointerOnRight = this._isRtl()\n ? event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n : elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n if (pointerOnRight && this._resizableSide !== 'start') {\n resizerPosition = this._isRtl()\n ? el.parentElement!.offsetWidth - el.offsetLeft\n : el.offsetLeft + el.offsetWidth;\n\n resizedColumn = this.columnName;\n }\n\n if (!resizedColumn) {\n return null;\n }\n\n return { resizerPosition: resizerPosition!, resizedColumn };\n } else {\n return null;\n }\n }\n}\n","import { NgForm } from '@angular/forms';\n\nexport abstract class EditableTableCell {\n abstract form: NgForm;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport interface FdpCellDefContext<T = any> {\n $implicit: T;\n popping: boolean;\n rowIndex: number;\n}\n\n/** Column cell container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-cell', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableCell {}\n\n/**\n * Cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpCellDef<T = any> {\n /** Property to support typings. */\n @Input()\n fdpCellDefAs: T;\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n /** @hidden */\n static ngTemplateContextGuard<T>(dir: FdpCellDef<T>, ctx: FdpCellDefContext): ctx is FdpCellDefContext<T> {\n return true;\n }\n}\n\n@Directive({ selector: '[fdpEditableCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpEditableCellDef {\n /** @hidden */\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n selector: '[fdpEditableCellForm]',\n standalone: true,\n providers: [{ provide: EditableTableCell, useExisting: FdpEditableCellFormDirective }]\n})\nexport class FdpEditableCellFormDirective implements EditableTableCell {\n /** @hidden */\n constructor(public form: NgForm) {}\n}\n","export enum FilterType {\n INPUT = 'input',\n SINGLE = 'single-select',\n MULTI = 'multi-select',\n CATEGORY = 'category',\n CUSTOM = 'custom'\n}\n\nexport enum FilterableColumnDataType {\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n DATE = 'date'\n}\n","import { FdLanguageKeyIdentifier } from '@fundamental-ngx/i18n';\nimport { FilterableColumnDataType } from './filter-type.enum';\n\n/** All possible strategies */\nexport const FILTER_STRATEGY = {\n EQ: 'equalTo',\n CONTAINS: 'contains',\n BETWEEN: 'between',\n BEGINS_WITH: 'beginsWith',\n ENDS_WITH: 'endsWith',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo',\n AFTER: 'after',\n ON_OR_AFTER: 'onOrAfter',\n BEFORE: 'before',\n BEFORE_OR_ON: 'beforeOrOn'\n} as const;\n\ntype FilterStrategyType = typeof FILTER_STRATEGY;\n\nexport type FilterStrategy = FilterStrategyType[keyof FilterStrategyType];\n\nexport const FILTER_STRATEGY_LABEL: Record<FilterStrategy, FdLanguageKeyIdentifier> = {\n equalTo: 'platformTable.P13FilterStrategyLabelEqualTo',\n contains: 'platformTable.P13FilterStrategyLabelContains',\n between: 'platformTable.P13FilterStrategyLabelBetween',\n beginsWith: 'platformTable.P13FilterStrategyLabelBeginsWith',\n endsWith: 'platformTable.P13FilterStrategyLabelEndsWith',\n greaterThan: 'platformTable.P13FilterStrategyLabelGreaterThan',\n greaterThanOrEqualTo: 'platformTable.P13FilterStrategyLabelGreaterThanOrEqualTo',\n lessThan: 'platformTable.P13FilterStrategyLabelLessThan',\n lessThanOrEqualTo: 'platformTable.P13FilterStrategyLabelLessThanOrEqualTo',\n after: 'platformTable.P13FilterStrategyLabelAfter',\n onOrAfter: 'platformTable.P13FilterStrategyLabelOnOrAfter',\n before: 'platformTable.P13FilterStrategyLabelBefore',\n beforeOrOn: 'platformTable.P13FilterStrategyLabelBeforeOrOn'\n};\n\n/** Date Filter Strategies */\nexport const FILTER_DATE_STRATEGY: Pick<\n FilterStrategyType,\n 'BETWEEN' | 'EQ' | 'AFTER' | 'ON_OR_AFTER' | 'BEFORE' | 'BEFORE_OR_ON'\n> = {\n EQ: 'equalTo',\n BETWEEN: 'between',\n AFTER: 'after',\n ON_OR_AFTER: 'onOrAfter',\n BEFORE: 'before',\n BEFORE_OR_ON: 'beforeOrOn'\n};\n\nexport type FilterDateStrategy = (typeof FILTER_DATE_STRATEGY)[keyof typeof FILTER_DATE_STRATEGY];\n\nexport const FILTER_DATE_STRATEGIES: ReadonlyArray<FilterDateStrategy> = Object.values(FILTER_DATE_STRATEGY);\n\n/** Number Filter Strategies */\nexport const FILTER_NUMBER_STRATEGY: Pick<FilterStrategyType, 'BETWEEN' | 'EQ' | 'GT' | 'GTE' | 'LT' | 'LTE'> = {\n EQ: 'equalTo',\n BETWEEN: 'between',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterNumberStrategy = (typeof FILTER_NUMBER_STRATEGY)[keyof typeof FILTER_NUMBER_STRATEGY];\n\nexport const FILTER_NUMBER_STRATEGIES: ReadonlyArray<FilterNumberStrategy> = Object.values(FILTER_NUMBER_STRATEGY);\n\n/** String Filter Strategies */\nexport const FILTER_STRING_STRATEGY: Pick<\n FilterStrategyType,\n 'BETWEEN' | 'CONTAINS' | 'EQ' | 'BEGINS_WITH' | 'ENDS_WITH' | 'GT' | 'GTE' | 'LT' | 'LTE'\n> = {\n CONTAINS: 'contains',\n EQ: 'equalTo',\n BEGINS_WITH: 'beginsWith',\n BETWEEN: 'between',\n ENDS_WITH: 'endsWith',\n GT: 'greaterThan',\n GTE: 'greaterThanOrEqualTo',\n LT: 'lessThan',\n LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterAllStrategy = (typeof FILTER_STRATEGY)[keyof typeof FILTER_STRATEGY];\n\nexport type FilterStringStrategy = (typeof FILTER_STRING_STRATEGY)[keyof typeof FILTER_STRING_STRATEGY];\n\nexport const FILTER_STRING_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_STRING_STRATEGY);\n\n/** Boolean Filter Strategies */\nexport const FILTER_BOOLEAN_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n EQ: 'equalTo'\n};\n\nexport type FilterBooleanStrategy = (typeof FILTER_BOOLEAN_STRATEGY)[keyof typeof FILTER_BOOLEAN_STRATEGY];\n\nexport const FILTER_BOOLEAN_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_BOOLEAN_STRATEGY);\n\n/** Default Filter Strategies for undefined data type */\nexport const FILTER_DEFAULT_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n EQ: 'equalTo'\n};\n\nexport type FilterDefaultStrategy = (typeof FILTER_DEFAULT_STRATEGY)[keyof typeof FILTER_DEFAULT_STRATEGY];\n\nexport const FILTER_DEFAULT_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_DEFAULT_STRATEGY);\n\n// Get Possible strategies based on data type\nexport const getFilterStrategiesBasedOnDataType = (\n dataType: FilterableColumnDataType\n): readonly FilterStringStrategy[] | readonly FilterDateStrategy[] => {\n switch (dataType) {\n case FilterableColumnDataType.STRING:\n return FILTER_STRING_STRATEGIES;\n case FilterableColumnDataType.NUMBER:\n return FILTER_NUMBER_STRATEGIES;\n case FilterableColumnDataType.DATE:\n return FILTER_DATE_STRATEGIES;\n case FilterableColumnDataType.BOOLEAN:\n return FILTER_BOOLEAN_STRATEGIES;\n\n default:\n return FILTER_DEFAULT_STRATEGIES;\n }\n};\n","export enum ColumnAlign {\n START = 'start',\n CENTER = 'center',\n END = 'end'\n}\n\nexport type ColumnAlignValue = 'start' | 'center' | 'end';\n","export enum TableRowType {\n ITEM = 'item',\n GROUP = 'group',\n TREE = 'tree'\n}\n","export enum SelectionMode {\n SINGLE = 'single',\n MULTIPLE = 'multiple',\n NONE = 'none'\n}\n\nexport type SelectionModeValue = 'single' | 'multiple' | 'none';\n","export enum SortDirection {\n NONE = 'none',\n ASC = 'asc',\n DESC = 'desc'\n}\n","import { get } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FILTER_DATE_STRATEGY, FILTER_NUMBER_STRATEGY, FILTER_STRING_STRATEGY } from './enums';\nimport {\n CollectionBooleanFilter,\n CollectionDateFilter,\n CollectionFilter,\n CollectionNumberFilter,\n CollectionStringFilter\n} from './interfaces';\nimport { TableRow } from './models/table-row.model';\n\nexport const filterByString = (rows: TableRow[], filter: CollectionStringFilter): TableRow[] => {\n const filterValue = filter.value && filter.value.toLocaleLowerCase();\n const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n\n switch (filter.strategy) {\n case FILTER_STRING_STRATEGY.EQ:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() === filterValue);\n case FILTER_STRING_STRATEGY.GT:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() > filterValue);\n case FILTER_STRING_STRATEGY.GTE:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() >= filterValue);\n case FILTER_STRING_STRATEGY.LT:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() < filterValue);\n case FILTER_STRING_STRATEGY.LTE:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() <= filterValue);\n case FILTER_STRING_STRATEGY.BETWEEN:\n return rows.filter((r) => {\n const rowValue = get(r.value, filter.field).toLocaleLowerCase();\n return rowValue >= filterValue && rowValue <= filterValue2;\n });\n case FILTER_STRING_STRATEGY.BEGINS_WITH:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().startsWith(filterValue));\n case FILTER_STRING_STRATEGY.ENDS_WITH:\n return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().endsWith(filterValue));\n case FILTER_STRING_STRATEGY.CONTAINS:\n default:\n return rows.filter((r) => {\n let rowValue = get(r.value, filter.field);\n if (typeof rowValue === 'number') {\n rowValue = rowValue.toString();\n }\n\n return rowValue.toLocaleLowerCase().includes(filterValue);\n });\n }\n};\n\nexport const filterByNumber = (rows: TableRow[], filter: CollectionNumberFilter): TableRow[] => {\n const filterValue = filter.value;\n const filterValue2 = filter.value2 || 0;\n\n switch (filter.strategy) {\n case FILTER_NUMBER_STRATEGY.EQ:\n return rows.filter((r) => get(r.value, filter.field) === filterValue);\n case FILTER_NUMBER_STRATEGY.GT:\n return rows.filter((r) => get(r.value, filter.field) > filterValue);\n case FILTER_NUMBER_STRATEGY.GTE:\n return rows.filter((r) => get(r.value, filter.field) >= filterValue);\n case FILTER_NUMBER_STRATEGY.LT:\n return rows.filter((r) => get(r.value, filter.field) < filterValue);\n case FILTER_NUMBER_STRATEGY.LTE:\n return rows.filter((r) => get(r.value, filter.field) <= filterValue);\n case FILTER_NUMBER_STRATEGY.BETWEEN:\n return rows.filter((r) => {\n const rowValue = get(r.value, filter.field);\n return rowValue >= filterValue && rowValue <= filterValue2;\n });\n default:\n return rows.filter((r) => get(r.value, filter.field).toString().includes(filterValue));\n }\n};\n\nexport const filterByDate = <D = any>(\n rows: TableRow[],\n filter: CollectionDateFilter,\n adapter: DatetimeAdapter<D>\n): TableRow[] => {\n const filterValue = filter.value;\n const filterValue2 = filter.value2;\n\n switch (filter.strategy) {\n case FILTER_DATE_STRATEGY.AFTER:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) > 0);\n case FILTER_DATE_STRATEGY.ON_OR_AFTER:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) >= 0);\n case FILTER_DATE_STRATEGY.BEFORE:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) < 0);\n case FILTER_DATE_STRATEGY.BEFORE_OR_ON:\n return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) <= 0);\n case FILTER_DATE_STRATEGY.BETWEEN:\n return rows.filter((r) => adapter.isBetween(get(r.value, filter.field), filterValue, filterValue2));\n case FILTER_DATE_STRATEGY.EQ:\n default:\n return rows.filter((r) => adapter.dateTimesEqual(get(r.value, filter.field), filterValue));\n }\n};\n\nexport const filterByBoolean = (rows: TableRow[], filter: CollectionBooleanFilter): TableRow[] =>\n rows.filter((r) => get(r.value, filter.field) === filter.value);\n\nexport const getUniqueListValuesByKey = <T, K extends keyof T>(list: T[], key: K): T[] =>\n Array.from(\n list\n .reduce((map, item) => {\n map.delete(item[key]);\n map.set(item[key], item);\n return map;\n }, new Map<T[K], T>())\n .values()\n );\n\nexport const getScrollBarWidth = (document: Document): number => {\n const div = document.createElement('div');\n div.textContent = 'W';\n div.style.position = 'absolute';\n div.style.visibility = 'hidden';\n div.style.overflowY = 'scroll';\n document.body.appendChild(div);\n const scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n return scrollbarWidth;\n};\n\n/** @hidden */\nexport function isCollectionFilter(item: any): item is CollectionFilter {\n return item.type !== undefined && item.strategy !== undefined && item.value !== undefined;\n}\n","import { DatetimeAdapter, FdDate } from '@fundamental-ngx/core/datetime';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { SelectItem, isSelectItem } from '@fundamental-ngx/platform/shared';\nimport { Observable, Subject } from 'rxjs';\nimport { map, take, takeUntil } from 'rxjs/operators';\nimport {\n CollectionBooleanFilter,\n CollectionDateFilter,\n CollectionFilter,\n CollectionFilterAndGroup,\n CollectionFilterGroup,\n CollectionNumberFilter,\n CollectionSelectFilter,\n CollectionStringFilter\n} from '../interfaces/collection-filter.interface';\n\nimport { get } from '@fundamental-ngx/cdk/utils';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { isCollectionFilter } from '../utils';\n\nexport abstract class BaseTableDataProvider<T, P = T[]> {\n abstract fetch(state?: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n\n abstract fetchData(state: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n /** Total items count. */\n totalItems: number;\n /** Array of items. */\n items: P;\n\n /** Date time adapter for date field filtering. */\n dateTimeAdapter?: DatetimeAdapter<any>;\n /** Additional set of filters provided by outside component. */\n protected filterBy: CollectionFilterAndGroup[];\n\n /** Additional search query provided by outside component. */\n protected searchInput?: SearchInput;\n\n /** @hidden */\n protected _destroy$ = new Subject<void>();\n\n /**\n * Method for setting external filtering conditions.\n * @param filterBy Set of column filters.\n * @param searchInput Search condition from search field.\n */\n setFilters(filterBy: CollectionFilterAndGroup[], searchInput?: SearchInput): void {\n this.filterBy = filterBy;\n this.searchInput = searchInput;\n }\n\n /**\n * Method for filtering the data.\n * @param items Array of data source items.\n * @param filters Set of column filters.\n * @returns Array of filtered items.\n */\n applyFiltering(items: T[], filters: CollectionFilterAndGroup[]): T[] {\n items = items.filter((i) => this.getFilteringStrategy(i, filters));\n return items;\n }\n\n /** @hidden */\n getSelectItemValue(item: any): any {\n return isSelectItem(item) ? item.value : item;\n }\n\n /**\n * Method which selects appropriate filtering strategy of the field depending on the filter type.\n * Developers can override this method to extend the filtering functionality.\n * @param item item of the data source.\n * @param filters Set of column filters.\n * @returns Whether or not item should be included in data array.\n */\n getFilteringStrategy(item: T, filters: CollectionFilterAndGroup[]): boolean {\n return filters\n .filter((condition) => condition.field)\n .every((filter) => {\n if (isCollectionFilter(filter)) {\n return this.collectionFilterStrategy(item, filter);\n }\n\n return this.collectionFilterGroupStrategy(item, filter);\n });\n }\n\n /**\n * Method which filters item depending on applied condition result.\n * Developers can override this method to extend its functionality\n * @param item Item to apply conditions to.\n * @param filter Column filter.\n * @returns {boolean} Whether this item should be present in filtered array of items.\n */\n collectionFilterStrategy(item: T, filter: CollectionFilter): boolean {\n let result: boolean;\n\n switch (filter.type) {\n case 'boolean':\n result = this.filterBoolean(item, filter as CollectionBooleanFilter);\n break;\n case 'number':\n result = this.filterNumber(item, filter as CollectionNumberFilter);\n break;\n case 'date': {\n result = this.filterDate(item, filter as CollectionDateFilter, this.dateTimeAdapter);\n break;\n }\n case 'string':\n default:\n result = Array.isArray(filter.value)\n ? this.filterArray(item, filter as CollectionSelectFilter)\n : this.filterString(item, filter as CollectionStringFilter);\n break;\n }\n\n return result;\n }\n\n /**\n * Method which applies group filtering conditions for the item.\n * @param item Item to apply conditions to.\n * @param filter Filter group.\n * @returns {boolean} Whether this item should be present in filtered items array.\n */\n collectionFilterGroupStrategy(item: T, filter: CollectionFilterGroup): boolean {\n return filter.strategy === 'and'\n ? filter.filters.every((f) => this.collectionFilterStrategy(item, f))\n : filter.filters.some((f) => this.collectionFilterStrategy(item, f));\n }\n\n /**\n * Applies search of the search term for visible table columns.\n * Developers can override this method to extend the filtering functionality.\n * @param items data source items array.\n * @param tableState @see TableState Set of table parameters.\n * @returns filtered data source items array.\n */\n search(items: T[], { searchInput, columnKeys }: TableState): T[] {\n const searchText = searchInput?.text || '';\n const keysToSearchBy = columnKeys;\n\n if (searchText.trim() === '' || keysToSearchBy.length === 0) {\n return items;\n }\n\n items = items.filter((item) => {\n const valuesForSearch = keysToSearchBy.map((key) => get(item, key));\n\n return valuesForSearch\n .filter((value) => !!value)\n .map((value): string => value.toString())\n .some((value) => value.toLocaleLowerCase().includes(searchText.toLocaleLowerCase()));\n });\n\n return items;\n }\n\n /**\n * String filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterString(item: T, filter: CollectionStringFilter): boolean {\n const filterValue = filter.value && filter.value.toLocaleLowerCase();\n const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n let itemValue = get(item, filter.field);\n\n itemValue = itemValue ? itemValue.toLocaleLowerCase() : itemValue;\n\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n result = itemValue === filterValue;\n break;\n case 'greaterThan':\n result = itemValue > filterValue;\n break;\n case 'greaterThanOrEqualTo':\n result = itemValue >= filterValue;\n break;\n case 'lessThan':\n result = itemValue < filterValue;\n break;\n case 'lessThanOrEqualTo':\n result = itemValue <= filterValue;\n break;\n case 'between':\n result = itemValue >= filterValue && itemValue <= filterValue2;\n break;\n case 'beginsWith':\n result = itemValue.startsWith(filterValue);\n break;\n case 'endsWith':\n result = itemValue.endsWith(filterValue);\n break;\n case 'contains':\n default:\n result = itemValue ? itemValue.includes(filterValue) : itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Number filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterNumber(item: T, filter: CollectionNumberFilter): boolean {\n const filterValue = Number.parseFloat(filter.value as unknown as string);\n const filterValue2 = Number.parseFloat(filter.value2 as unknown as string) || 0;\n const itemValue = Number.parseFloat(get(item, filter.field));\n let result: boolean;\n\n switch (filter.strategy) {\n case 'greaterThan':\n result = itemValue > filterValue;\n break;\n case 'greaterThanOrEqualTo':\n result = itemValue >= filterValue;\n break;\n case 'lessThan':\n result = itemValue < filterValue;\n break;\n case 'lessThanOrEqualTo':\n result = itemValue <= filterValue;\n break;\n case 'between':\n result = itemValue >= filterValue && itemValue <= filterValue2;\n break;\n case 'equalTo':\n default:\n result = itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Date filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @param adapter\n * @returns whether or not item should be included in data source array.\n */\n protected filterDate<D = FdDate>(item: T, filter: CollectionDateFilter, adapter?: DatetimeAdapter<D>): boolean {\n if (!adapter) {\n throw new Error(\n 'In order to filter date columns, please provide DateTime adapter in your TableDataProvider constructor.'\n );\n }\n\n const filterValue = filter.value;\n const filterValue2 = filter.value2;\n const itemValue = get(item, filter.field);\n const diff = adapter.compareDate(itemValue, filterValue);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'after':\n result = diff > 0;\n break;\n case 'onOrAfter':\n result = diff >= 0;\n break;\n case 'before':\n result = diff < 0;\n break;\n case 'beforeOrOn':\n result = diff <= 0;\n break;\n case 'between':\n result = adapter.isBetween(itemValue, filterValue, filterValue2);\n break;\n\n case 'equalTo':\n default:\n result = adapter.dateTimesEqual(itemValue, filterValue);\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Boolean filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterBoolean(item: T, filter: CollectionBooleanFilter): boolean {\n const filterValue = filter.value;\n const itemValue = get(item, filter.field);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n default:\n result = itemValue === filterValue;\n }\n\n return filter.exclude ? !result : result;\n }\n\n /**\n * Array filtering strategy\n * @param item data source array item.\n * @param filter filter object\n * @returns whether or not item should be included in data source array.\n */\n protected filterArray(item: T, filter: CollectionSelectFilter): boolean {\n const filterValues = filter.value.map((v) => this.getSelectItemValue(v));\n const itemValue = get(item, filter.field);\n let result: boolean;\n\n switch (filter.strategy) {\n case 'equalTo':\n default:\n result = filterValues.includes(itemValue);\n }\n\n return !filterValues.length || filter.exclude ? !result : result;\n }\n\n /** @hidden */\n protected unsubscribe(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n\nexport class TableDataProvider<T> extends BaseTableDataProvider<T> {\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fetch(tableState?: TableState): Observable<T[]> {\n throw new Error('fetch method should be implemented by developers for custom data providers.');\n }\n\n /**\n * Method for applying filtering and retrieving the data.\n * @param state @see TableState Set of table parameters.\n * @returns Observable with filtered data.\n */\n fetchData(state: TableState): Observable<T[]> {\n return this.fetch(state).pipe(\n map((items) => {\n if (this.searchInput) {\n items = this.search(items, { ...state, ...{ searchInput: this.searchInput } });\n }\n\n if (this.filterBy) {\n items = this.applyFiltering(items, this.filterBy);\n }\n\n return items;\n }),\n takeUntil(this._destroy$)\n );\n }\n\n /**\n * Method for getting all possible options for particular field.\n * Used for creating select options.\n * Developers can override this method to extend the filtering functionality.\n * @param field key of the data item.\n * @returns Observable with select items.\n */\n getFieldOptions(field: string): Observable<SelectItem[]> {\n return this.fetch().pipe(\n take(1),\n map((data) => {\n const options: SelectItem[] = data.map((item) => ({\n label: get(item, field),\n value: get(item, field)\n }));\n\n return options;\n })\n );\n }\n}\n\nexport abstract class TableChildrenDataProvider<T> extends BaseTableDataProvider<T, Map<TableRow<T>, T[]>> {\n /**\n * Method for retrieving the amount of child itemf or a defined row.\n * @param row\n * @param state\n */\n abstract rowChildrenCount(row: TableRow<T>, state: TableState): Observable<number>;\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @param parentRows\n * @returns Observable with data.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fetch(tableState?: TableState, parentRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n throw new Error('fetch method should be implemented by developers for custom data providers.');\n }\n\n /**\n * Method for applying filtering and retrieving the data.\n * @param state @see TableState Set of table parameters.\n * @param tableRows\n * @returns Observable with filtered data.\n */\n fetchData(state: TableState, tableRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n return this.fetch(state, tableRows).pipe(\n map((items) => {\n items.forEach((rowItems, row) => {\n if (this.searchInput) {\n rowItems = this.search(rowItems, { ...state, ...{ searchInput: this.searchInput } });\n }\n\n if (this.filterBy) {\n rowItems = this.applyFiltering(rowItems, this.filterBy);\n }\n\n if (rowItems.length === 0) {\n items.delete(row);\n } else {\n items.set(row, rowItems);\n }\n });\n return items;\n }),\n takeUntil(this._destroy$)\n );\n }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { DataSource } from '@fundamental-ngx/platform/shared';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { TableChildrenDataProvider, TableDataProvider } from './table-data-provider';\n\nexport abstract class BaseTableDataSource<T, P = T[], L = boolean> implements DataSource<T, P, L> {\n /**\n * Method for retrieving the data of the provided data source.\n * @param tableState @see TableState Set of table parameters.\n * @param parentRows\n */\n abstract fetch(tableState: TableState, parentRows?: TableRow<T>[]): void;\n /** @hidden */\n protected readonly _dataChanges$ = new BehaviorSubject<P>([] as any);\n /** @hidden */\n protected readonly _onDataRequested$ = new Subject<boolean>();\n\n /** @hidden */\n protected readonly _onDataReceived$ = new Subject<boolean>();\n\n /** @hidden */\n protected _dataLoading: L;\n\n /** @hidden */\n protected readonly _dataLoading$: BehaviorSubject<L>;\n\n /** @hidden */\n protected readonly _destroy$ = new Subject<void>();\n\n /** @hidden */\n protected constructor() {\n this._dataLoading$ = new BehaviorSubject(this._dataLoading);\n }\n\n /**\n * Emitted when new data has been requested.\n * @returns Observable\n */\n get dataRequested(): Observable<boolean> {\n return this._onDataRequested$.asObservable();\n }\n\n /**\n * Emitted when new data has been received.\n * @returns Observable\n */\n get dataReceived(): Observable<boolean> {\n return this._onDataReceived$.asObservable();\n }\n\n /**\n * Emitted when loading state has been changed.\n * @returns Observable.\n */\n get dataLoading(): Observable<L> {\n return this._dataLoading$.asObservable();\n }\n\n /**\n * Emits when the data from the provider has been changed.\n * @returns Observable of data source objects.\n */\n get dataChanges(): Observable<P> {\n return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));\n }\n\n /** @hidden */\n get isDataLoading(): L {\n return this._dataLoading;\n }\n\n /** @hidden */\n get data(): P {\n return this._dataChanges$.value;\n }\n\n /** @hidden */\n open(): Observable<P> {\n return this._dataChanges$.asObservable();\n }\n\n /** @hidden */\n onDataRequested(): Observable<void> {\n return this._onDataRequested$.asObservable().pipe(map(() => void 0));\n }\n\n /** @hidden */\n onDataReceived(): Observable<void> {\n return this._onDataReceived$.asObservable().pipe(map(() => void 0));\n }\n\n /** @hidden */\n close(): void {}\n\n /**\n * Closes the stream\n */\n unsubscribe(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n\nexport class TableDataSource<T> extends BaseTableDataSource<T> {\n /**\n * @hidden\n */\n constructor(readonly dataProvider: TableDataProvider<T>) {\n super();\n }\n\n /**\n * Method for retrieving the data of the provided data source.\n * @param tableState @see TableState Set of table parameters.\n */\n fetch(tableState: TableState): void {\n this._onDataRequested$.next(true);\n this._dataLoading$.next(true);\n this._dataLoading = true;\n\n this.dataProvider.fetchData(tableState).subscribe({\n next: (items) => {\n this._onDataReceived$.next(true);\n this._dataLoading = false;\n this._dataLoading$.next(false);\n this._dataChanges$.next(items);\n },\n error: (error) => {\n this._onDataReceived$.next(false);\n this._dataLoading = false;\n this._dataChanges$.error(error);\n }\n });\n }\n}\n\nexport class ChildTableDataSource<T> extends BaseTableDataSource<\n T,\n Map<TableRow<T>, T[]>,\n { row?: TableRow<T>; loading: boolean }[]\n> {\n /**\n * @hidden\n */\n constructor(readonly dataProvider: TableChildrenDataProvider<T>) {\n super();\n }\n\n /**\n * Method responsible for retrieving the items from the data provider.\n * Additionaly, it sets the loading state along with the dataLoading and dataChanges streams.\n * @param tableState\n * @param parentRows\n */\n fetch(tableState: TableState, parentRows?: TableRow<T>[]): void {\n this._onDataRequested$.next(true);\n const loadingState = parentRows?.map((row) => ({ row, loading: true })) || [];\n const finishedLoadingState = loadingState.map(({ row }) => ({ row, loading: false }));\n this._dataLoading$.next(loadingState);\n this._dataLoading = loadingState;\n\n this.dataProvider.fetchData(tableState, parentRows).subscribe({\n next: (items) => {\n this._onDataReceived$.next(true);\n this._dataLoading = finishedLoadingState;\n this._dataLoading$.next(finishedLoadingState);\n this._dataChanges$.next(items);\n },\n error: (error) => {\n this._onDataReceived$.next(false);\n this._dataLoading = finishedLoadingState;\n this._dataLoading$.next(finishedLoadingState);\n this._dataChanges$.error(error);\n }\n });\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an array.\n *\n * Used to convert array source to the TableDataProvider interface.\n *\n */\nexport class ArrayTableDataProvider<T> extends TableDataProvider<T> {\n /** @hidden */\n protected items$ = new BehaviorSubject<T[]>([]);\n\n /** @hidden */\n constructor(items: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n super();\n this.items = items;\n this.totalItems = this.items.length;\n this.items$.next(this.items);\n this.dateTimeAdapter = dateTimeAdapter;\n }\n\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n fetch(state?: TableState): Observable<T[]> {\n return this.items$.asObservable().pipe(\n map((items) => {\n if (state?.searchInput) {\n items = this.search(items, state);\n }\n\n if (state?.filterBy) {\n items = this.applyFiltering(items, state.filterBy);\n }\n\n this.totalItems = items.length;\n\n return items;\n })\n );\n }\n}\n\nexport class ArrayTableDataSource<T> extends TableDataSource<T> {\n /** @hidden */\n constructor(data: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n super(new ArrayTableDataProvider(data, dateTimeAdapter));\n }\n}\n","import { Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an Observable.\n *\n * Used to convert observable source to the TableDataProvider interface.\n *\n */\nexport class ObservableTableDataProvider<T> extends TableDataProvider<T> {\n /** @hidden */\n protected items$: Observable<T[]>;\n\n /** @hidden */\n constructor(items$: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n super();\n this.items$ = items$;\n this.dateTimeAdapter = dateTimeAdapter;\n }\n\n /**\n * Method for retrieving the data.\n * @param tableState @see TableState Set of table parameters.\n * @returns Observable with data.\n */\n fetch(state?: TableState): Observable<T[]> {\n return this.items$.pipe(\n map((items) => {\n this.items = items;\n if (state?.searchInput) {\n items = this.search(items, state);\n }\n\n if (state?.filterBy) {\n items = this.applyFiltering(items, state.filterBy);\n }\n\n this.totalItems = items.length;\n\n return items;\n })\n );\n }\n}\n\nexport class ObservableTableDataSource<T> extends TableDataSource<T> {\n /** @hidden */\n constructor(data: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n super(new ObservableTableDataProvider(data, dateTimeAdapter));\n }\n}\n","import { DataSource, DataSourceParser, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './array-data-source';\nimport { ObservableTableDataSource } from './observable-data-source';\nimport { TableDataSource } from './table-data-source';\n\nexport class TableDataSourceParser<T> implements DataSourceParser<T, TableDataSource<T>> {\n /** @hidden */\n parse(source: DataSource<T>): TableDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as TableDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayTableDataSource(source);\n }\n\n if (isObservable(source)) {\n return new ObservableTableDataSource(source);\n }\n\n return undefined;\n }\n}\n","import { Directive, EventEmitter, inject, Input, OnDestroy, Output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { filter, startWith } from 'rxjs/operators';\nimport { FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { ChildTableDataSource, TableDataSource, TableDataSourceParser } from '../domain';\nimport { TableInitialState, TableRow } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n selector: '[fdpTableDataSource]',\n standalone: true,\n providers: [\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: TableDataSourceParser\n }\n ]\n})\nexport class TableDataSourceDirective<T> extends DataSourceDirective<T, TableDataSource<T>> implements OnDestroy {\n /**\n * Data source.\n * @param source\n */\n @Input()\n set childDataSource(source: ChildTableDataSource<T> | null) {\n this._childDataSource = source;\n this._initializeChildDataSource();\n this.childDataSourceChanged.next();\n }\n\n get childDataSource(): ChildTableDataSource<T> | null {\n return this._childDataSource;\n }\n\n /** Event emitted when child data source instance being changed. */\n @Output()\n childDataSourceChanged = new EventEmitter<void>();\n\n /** Event emitted when data loading is started. */\n @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataReceived = new EventEmitter<void>();\n\n /** Total items count stream. */\n totalItems$ = signal<number>(0);\n\n /** Items stream. */\n items$ = new BehaviorSubject<T[]>([]);\n\n /** Child items stream. */\n childItems$ = new Subject<Map<TableRow<T>, T[]>>();\n\n /** @hidden */\n _tableDataSource: TableDataSource<T>;\n\n /** @hidden */\n _firstLoadingDone = false;\n\n /** @hidden */\n _internalLoadingState = false;\n\n /** @hidden */\n _internalChildrenLoadingState = false;\n\n /** @hidden */\n private _childDataSource: ChildTableDataSource<T> | null;\n\n /** @hidden */\n private _childDsSubscription = new Subscription();\n\n /** @hidden */\n set totalItems(value: number) {\n this.totalItems$.set(value);\n }\n\n get totalItems(): number {\n return this.totalItems$();\n }\n\n /** @hidden for data source handling */\n private _tableDsSubscription: Subscription | null;\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n optional: true\n });\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n initializeDataSource(): void {\n this.dataSourceChanged.pipe(startWith(true), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._closeDataSource();\n this._listenToDataSource();\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this._tableDsSubscription?.unsubscribe();\n }\n\n /** @hidden */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * @hidden\n * Initializes the child data source to fetch child rows.\n */\n private _initializeChildDataSource(): void {\n if (isDataSource(this.childDataSource)) {\n this.childDataSource?.unsubscribe();\n\n this._childDsSubscription?.unsubscribe();\n }\n if (!this.childDataSource) {\n return;\n }\n\n this._childDsSubscription = new Subscription();\n\n this._childDsSubscription.add(\n this.childDataSource.onDataRequested().subscribe(() => {\n this._internalChildrenLoadingState = true;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.onDataReceived().subscribe(() => {\n this._internalChildrenLoadingState = false;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.dataLoading\n .pipe(\n filter((state) => !!state),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((loadingStates) => {\n loadingStates.forEach((state) => state.row?.childItemsLoading$.next(state.loading));\n })\n );\n\n this._childDsSubscription.add(\n this.childDataSource.dataChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n this.childItems$.next(data);\n })\n );\n }\n\n /**\n * @hidden\n * This is a single point of data entry to the component. We don't want to set data on different\n * places. If any new data comes in, or you do a search, and you want to pass initial data\n * its here.\n */\n private _listenToDataSource(): void {\n this._tableDsSubscription?.unsubscribe();\n this._tableDsSubscription = new Subscription();\n\n const dataSourceStream = this.dataSourceProvider;\n if (dataSourceStream === undefined) {\n throw new Error(`[TableDataSource] source did not match an Array, Observable, nor DataSource`);\n }\n\n this._tableDsSubscription.add(\n this.dataChanged$.subscribe((items) => {\n this.totalItems$.set(dataSourceStream.dataProvider.totalItems);\n this.items$.next(items);\n })\n );\n\n this._tableDsSubscription.add(\n dataSourceStream.onDataRequested().subscribe(() => {\n this.onDataRequested.emit();\n this._internalLoadingState = true;\n this._tableService.setTableLoading(this._table.loadingState);\n })\n );\n this._tableDsSubscription.add(\n dataSourceStream.onDataReceived().subscribe(() => {\n this.onDataReceived.emit();\n this._internalLoadingState = false;\n this._firstLoadingDone = true;\n this._tableService.setTableLoading(this._table.loadingState);\n\n // Restore normal pagination after the first fetch of data.\n if (this._table._loadPreviousPages) {\n const state = this._tableService.getTableState();\n this._tableService.setTableState({\n ...state,\n ...{\n page: {\n currentPage: this.initialState?.initialPage || state.page.currentPage,\n pageSize: this._table.pageSize || state.page.pageSize\n }\n }\n });\n this._table._loadPreviousPages = false;\n }\n })\n );\n\n // initial data fetch\n dataSourceStream.fetch(this._tableService.getTableState());\n\n this._tableDataSource = dataSourceStream;\n }\n\n /** @hidden */\n private _closeDataSource(): void {\n if (!this._tableDataSource) {\n return;\n }\n\n this._tableDataSource.close();\n\n this._tableDsSubscription?.unsubscribe();\n this._tableDsSubscription = null;\n this._table.clearTableRows();\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableDataSource } from '../domain';\nimport { TableRowType } from '../enums';\n\nexport type TableRowState = 'editable' | 'readonly';\n\nexport type TableRowSemanticHighlight = 'valid' | 'warning' | 'information' | 'error';\n\nexport interface TableRowKeyboardDrag {\n direction: 'up' | 'down';\n event: KeyboardEvent;\n mode: 'group' | 'shift';\n}\n\n/**\n * Table row entity\n * Used to represent table row in the template\n */\nexport interface TableRow<T = any> {\n /**\n * Row semantic type\n */\n type: TableRowType.ITEM | TableRowType.GROUP | TableRowType.TREE;\n\n /**\n * Indicates if row is selected. It also supports intermediate state\n */\n checked: boolean | null;\n\n checked$?: Observable<TableRow['checked']>;\n\n /**\n * Index of a \"value\" in data source list\n */\n index: number;\n\n /**\n * Data model it represents\n */\n readonly value: T;\n\n /**\n * Reference to a parent if any\n */\n parent: TableRow | null;\n\n /**\n * Nesting level\n */\n level: number;\n\n /**\n * Expandable\n */\n expandable: boolean;\n\n /**\n * Expanded/Collapsed\n */\n expanded: boolean;\n\n expanded$?: Observable<TableRow['expanded']>;\n\n childItems$: Observable<T[]>;\n\n childItemsLoading$: BehaviorSubject<boolean>;\n\n stateChanged$: Observable<boolean>;\n\n /**\n * If item should be hidden. Used to skip rendering\n */\n hidden: boolean;\n\n /**\n * If the row is navigatable\n */\n navigatable: boolean;\n\n /**\n * Row state: readonly or editable.\n */\n state: TableRowState;\n\n /**\n * Children table rows.\n */\n children: TableRow<T>[];\n\n isTree: boolean;\n\n setRowType: (type: TableRowType) => void;\n\n lastChild?: TableRow<T>;\n\n /** Flag indicating that all child rows should be fetched again. */\n forceFetch: boolean;\n}\n\nexport type TableRowClass<T = any> = string | ((row: T) => string);\n\n/** @hidden */\nexport function isTableRow<T = any>(row: TableRow<T>): row is TableRow<T> {\n return row && row.type !== undefined && row.value !== undefined && row.index >= 0 && row.state !== undefined;\n}\n\nexport class TableRowImpl<T> implements TableRow<T> {\n /** @hidden */\n set checked(value: boolean | null) {\n this._checkedSubject.next(value);\n }\n get checked(): boolean | null {\n return this._checkedSubject.value;\n }\n /** @hidden */\n readonly checked$: Observable<boolean>;\n /** @hidden */\n readonly childItems$: Observable<T[]>;\n\n /** @hidden */\n readonly stateChanged$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n readonly childItemsLoading$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n forceFetch = false;\n\n /** @hidden */\n children: TableRow<T>[];\n\n /** @hidden */\n expandable: boolean;\n /** @hidden */\n set expanded(value: boolean) {\n this._expandedSubject.next(value);\n this.children.forEach((childRow) => {\n childRow.hidden = !value;\n });\n }\n get expanded(): boolean {\n return this._expandedSubject.value;\n }\n /** @hidden */\n readonly expanded$: Observable<boolean>;\n /** @hidden */\n hidden: boolean;\n\n /** @hidden */\n index: number;\n /** @hidden */\n level: number;\n /** @hidden */\n navigatable: boolean;\n /** @hidden */\n parent: TableRow | null;\n /** @hidden */\n state: TableRowState;\n /** @hidden */\n type: TableRowType;\n /** @hidden */\n readonly value: T;\n /** @hidden */\n childDataSource: TableDataSource<T> | undefined;\n\n /** @hidden */\n isTree: boolean;\n\n /** @hidden */\n lastChild?: TableRow<T>;\n\n /** @hidden */\n private readonly _expandedSubject = new BehaviorSubject<boolean>(false);\n /** @hidden */\n private readonly _checkedSubject = new BehaviorSubject<boolean | null>(false);\n\n /** @hidden */\n constructor(row: Partial<TableRow>) {\n this.checked$ = this._checkedSubject.asObservable().pipe(map(Boolean));\n this.expanded$ = this._expandedSubject.asObservable().pipe(map(Boolean));\n this.checked = row.checked || false;\n this.children = row.children || [];\n this.expandable = row.expandable || false;\n this.expanded = row.expanded || false;\n this.hidden = row.hidden || false;\n this.index = row.index || 0;\n this.level = row.level || 0;\n this.navigatable = row.navigatable || false;\n this.parent = row.parent || null;\n this.state = row.state || 'readonly';\n this.value = row.value;\n this.setRowType(row.type || TableRowType.ITEM);\n }\n\n /**\n * Sets the row type and checks whether the row is a tree.\n * @param type Row type.\n */\n setRowType(type: TableRowType): void {\n this.type = type;\n this.isTree = this.type === TableRowType.TREE;\n }\n}\n","import { dfs, get, isString, set } from '@fundamental-ngx/cdk/utils';\nimport { isDataSource } from '@fundamental-ngx/platform/shared';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './domain/array-data-source';\nimport { ObservableTableDataSource } from './domain/observable-data-source';\nimport { TableDataSource } from './domain/table-data-source';\nimport { TableRowType } from './enums/row-type.enum';\nimport { SelectionMode, SelectionModeValue } from './enums/selection-mode.enum';\nimport { SortDirection } from './enums/sort-direction.enum';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { FdpTableDataSource } from './models/data-source.type';\nimport { RowComparator } from './models/row-comparator.model';\nimport { TableRow, TableRowImpl, isTableRow } from './models/table-row.model';\nimport { GroupTableRowValueType, TreeLike } from './models/tree-table.model';\nimport { TableColumn } from './table-column';\n\n/** @hidden */\nexport function newTableRow<T = any>(row: Partial<TableRow<T>>): TableRow<T> {\n if (!row.value) {\n throw new Error('Unexpected value. TableRow.value cannot be undefined.');\n }\n\n return new TableRowImpl({\n type: row.type || TableRowType.ITEM,\n checked: row.checked || false,\n index: row.index || 0,\n value: row.value,\n parent: row.parent || null,\n level: row.level || 0,\n expandable: row.expandable || false,\n expanded: row.expanded || false,\n hidden: row.hidden || false,\n navigatable: row.navigatable || false,\n state: row.state || 'readonly',\n children: row.children || []\n });\n}\n\n/** @hidden */\nexport function getSelectableRows(rows: TableRow[], selectableKey: string): TableRow[] {\n return rows.filter((row) => isSelectableRow(row, selectableKey));\n}\n\n/** @hidden */\nexport function isSelectableRow(row: TableRow, selectableKey: string): boolean {\n return (isItemRow(row) || isTreeRow(row)) && row.value[selectableKey] !== false;\n}\n\n/** @hidden */\nexport function isItemRow(row: TableRow): boolean {\n return row.type === TableRowType.ITEM;\n}\n\n/** @hidden */\nexport function isTreeRow(row: TableRow): boolean {\n return row.type === TableRowType.TREE;\n}\n\n/**\n * Since we dont work with the tree, we need to convert incoming tree to\n * flat format while maintaining original state.\n *\n * @hidden\n */\nexport function convertTreeTableRowToFlatList<T>(rows: TableRow<T>[], rowNavigatable: string | boolean): TableRow<T>[] {\n let flatList: TableRow[] = [];\n\n for (const item of rows) {\n item.navigatable = isRowNavigatable(item as T, rowNavigatable);\n flatList.push(item);\n\n if (Array.isArray(item.children)) {\n item.children.forEach((c) => (c.hidden = !item.expanded));\n flatList = flatList.concat(convertTreeTableRowToFlatList(item.children, rowNavigatable));\n }\n }\n return flatList;\n}\n\n/** @hidden */\nexport function isRowNavigatable<T>(row: T, rowNavigatable: string | boolean): boolean {\n if (!row) {\n return false;\n }\n\n /** If key of the row's item field passed */\n if (isString(rowNavigatable)) {\n return !!row[rowNavigatable as string];\n }\n\n return !!rowNavigatable;\n}\n\n/** @hidden */\nexport function getFreezableColumns(columns: TableColumn[], freezeColumnsTo: string): Map<string, number> {\n const columnNames = new Map<string, number>();\n\n if (!columns.length || !freezeColumnsTo) {\n return columnNames;\n }\n\n for (const column of columns) {\n if (!column.name) {\n continue;\n }\n\n // using columnNames.size as index of a column\n columnNames.set(column.name, columnNames.size);\n\n if (column.name === freezeColumnsTo) {\n return columnNames;\n }\n }\n\n return new Map();\n}\n\n/** @hidden */\nexport function getFreezableEndColumns(columns: TableColumn[], freezeEndColumnsTo: string): Map<string, number> {\n const columnNames = new Map<string, number>();\n\n if (!columns.length || !freezeEndColumnsTo) {\n return columnNames;\n }\n\n for (let i = columns.length - 1; i >= 0; i--) {\n // using columnNames.size as index of a column\n columnNames.set(columns[i].name, columnNames.size);\n\n if (columns[i].name === freezeEndColumnsTo) {\n return columnNames;\n }\n }\n\n return new Map();\n}\n\n/** @hidden */\nexport function convertTreeObjectsToTableRows<T>(\n source: T[],\n selectionMode: SelectionModeValue,\n tableRows: TableRow<T>[],\n rowComparator: RowComparator<T>,\n relationKey: string,\n hasChildrenKey: string,\n selectedKey: string,\n expandedStateKey: string,\n rowNavigatable: string | boolean,\n enableTristateMode = false\n): TableRow<T>[] {\n const rows: TableRow<T>[] = [];\n const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, tableRows, rowComparator);\n\n source.forEach((item: T, index: number) => {\n const hasChildren =\n Object.prototype.hasOwnProperty.call(item, relationKey) &&\n Array.isArray(item[relationKey]) &&\n item[relationKey].length;\n\n const row = isTableRow(item as TableRow<T>)\n ? (item as TableRow<T>)\n : newTableRow({\n type: hasChildren || item[hasChildrenKey] === true ? TableRowType.TREE : TableRowType.ITEM,\n checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n index,\n value: item\n });\n\n row.expanded =\n expandedStateKey && Object.prototype.hasOwnProperty.call(item, expandedStateKey)\n ? item[expandedStateKey]\n : false;\n row.navigatable = isRowNavigatable(item, rowNavigatable);\n rows.push(row);\n\n if (hasChildren) {\n const children = convertTreeObjectsToTableRows(\n item[relationKey],\n selectionMode,\n tableRows,\n rowComparator,\n relationKey,\n hasChildrenKey,\n selectedKey,\n expandedStateKey,\n rowNavigatable,\n enableTristateMode\n );\n\n children.forEach((c) => {\n c.parent = c.parent || row;\n c.level = c.parent.level + 1;\n c.hidden = !c.parent.expanded;\n });\n row.children.push(...children);\n\n rows.push(...children);\n }\n if (row.level === 0 && row.isTree) {\n dfs([row], (r) => {\n const children = r.children || [];\n const selectedChildren: TableRow<T>[] = [];\n const indeterminateChildren: TableRow<T>[] = [];\n children.forEach((child) => {\n if (child.checked === true) {\n selectedChildren.push(child);\n } else if (child.checked === null) {\n indeterminateChildren.push(child);\n }\n });\n\n const selectedAll = selectedChildren.length === children.length && children.length > 0;\n const selectedSome = selectedChildren.length > 0;\n if (r.checked && selectionMode === SelectionMode.MULTIPLE) {\n applySelectionToChildren(rows, r, [], []);\n return;\n }\n if (!enableTristateMode) {\n return;\n }\n if (selectedAll) {\n r.checked = true;\n return;\n }\n if (selectedSome || indeterminateChildren.length > 0) {\n r.checked = null;\n return;\n }\n });\n }\n });\n\n return rows;\n}\n\n/**\n * @hidden\n * Runs `rowComparator` function against checked rows and compares them with the new `source`\n * If matched, creates an association between the source item and checked status of corresponding row.\n *\n * @returns `Map` object with the `checked` status for particular source item\n */\nexport function getSelectionStatusByRowValue<T>(\n source: T[],\n selectionMode: SelectionModeValue,\n tableRows: TableRow[],\n rowComparator: RowComparator<T>\n): Map<T, boolean | null> {\n const rowMap = new Map<T, boolean | null>();\n if (\n (selectionMode === SelectionMode.SINGLE || selectionMode === SelectionMode.MULTIPLE) &&\n typeof rowComparator === 'function'\n ) {\n const checkedRows = tableRows.filter((r) => r.checked);\n checkedRows.forEach((row) => {\n const found = source.find((e) => rowComparator(row.value, e));\n if (found) {\n rowMap.set(found, row.checked);\n }\n });\n }\n return rowMap;\n}\n\n/** @hidden */\nexport function applySelectionToChildren<T>(\n allRows: Array<TableRow<T>>,\n row: TableRow,\n addedRows: TableRow<T>[],\n removedRows: TableRow<T>[]\n): void {\n const allChildren = findRowChildren(row, allRows);\n\n allChildren.forEach((r) => {\n r.checked = row.checked;\n r.checked ? addedRows.push(r) : removedRows.push(r);\n });\n}\n\n/** @hidden */\nexport function findRowChildren<T>(row: TableRow<T>, allRows: TableRow<T>[]): TableRow<T>[] {\n const rowsLength = allRows.length;\n\n /**\n * Since we are dealing with a flat list\n * it means all children go next right after the expandable row\n * until the next row has a mutual parent\n */\n\n let index = allRows.indexOf(row);\n const parents = getRowParents(row);\n const children: TableRow<T>[] = [];\n\n while (index++ < rowsLength) {\n const nextRow = allRows[index];\n if (!nextRow?.parent || parents.includes(nextRow.parent)) {\n break;\n }\n children.push(nextRow);\n }\n\n return children;\n}\n\n/**\n * Get row parents path where the first is the direct parent\n * @param row Row which parents we need to find\n * @param untilParent Parent to stop a search on. Default is \"null\" that means look up until the root\n * @returns parents list [direct parent, ..., ancestor]\n * @hidden\n */\nexport function getRowParents<T>(row: TableRow<T>, untilParent: TableRow<T> | null = null): TableRow<T>[] {\n untilParent = untilParent || null; // to avoid \"undefined\"\n const parents: TableRow<T>[] = [];\n let parent = row.parent || null; // empty parent should be coerced to \"null\" do not get into infinite loop\n while (parent && parent !== untilParent) {\n parents.push(parent);\n parent = parent.parent || null;\n }\n return parents;\n}\n\n/** @hidden */\nexport function toDataStream<T>(source: FdpTableDataSource<T>): TableDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as TableDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayTableDataSource(source);\n }\n\n if (isObservable(source)) {\n return new ObservableTableDataSource(source);\n }\n\n return undefined;\n}\n/**\n * @hidden\n * Creates an empty column skeleton object.\n * @returns Column model.\n */\nexport function buildNewRowSkeleton<T>(editableRowSkeleton: T, columns: TableColumn[]): T {\n if (editableRowSkeleton) {\n return structuredClone(editableRowSkeleton);\n }\n\n let newRow = {};\n columns.forEach((column) => {\n newRow = set(newRow, column.key, undefined);\n });\n\n return newRow as T;\n}\n\n/** @hidden */\nexport function isGroupRow(row: TableRow): boolean {\n return row.type === TableRowType.GROUP;\n}\n\n/** @hidden */\nexport function sortTreeLikeGroupedRows(\n groupedRows: TreeLike<TableRow>[],\n groupRulesMap: Map<string, CollectionGroup>\n): TreeLike<TableRow>[] {\n if (!groupedRows[0] || !isGroupRow(groupedRows[0])) {\n return groupedRows;\n }\n\n const treeLikeRows = groupedRows as TreeLike<TableRow<GroupTableRowValueType>>[];\n const firstRow = treeLikeRows[0];\n\n treeLikeRows.forEach((group) => {\n if (group._children) {\n group._children = sortTreeLikeGroupedRows(group._children, groupRulesMap);\n }\n });\n\n const groupRule = groupRulesMap.get(firstRow.value.field);\n\n if (!groupRule || groupRule.direction === SortDirection.NONE) {\n return treeLikeRows;\n }\n\n const direction = groupRule.direction;\n const directionMultiplier = direction === SortDirection.ASC ? 1 : direction === SortDirection.DESC ? -1 : 0;\n\n return treeLikeRows.slice().sort((a, b) => {\n const aValue = a.value.value as any;\n const bValue = b.value.value as any;\n\n const aNumber = Number.parseFloat(aValue);\n const bNumber = Number.parseFloat(bValue);\n if (!Number.isNaN(aNumber) && !Number.isNaN(bNumber)) {\n return (aNumber - bNumber) * directionMultiplier;\n }\n\n return (aValue > bValue ? 1 : -1) * directionMultiplier;\n });\n}\n\n/** @hidden */\nexport function convertTreeLikeToFlatList<K>(treeLikeList: TreeLike<K>[]): K[] {\n let flatList: K[] = [];\n\n for (const item of treeLikeList) {\n flatList.push(item);\n\n if (Array.isArray(item._children)) {\n flatList = flatList.concat(convertTreeLikeToFlatList(item._children));\n delete item._children;\n }\n }\n\n return flatList;\n}\n\n/**\n * @hidden\n * Group table rows and return tree like rows list.\n * It's intended to be called recursively.\n * @param rules group rules to group by\n * @param rows source table rows\n * @param parent row parent\n * @param level level of nesting\n */\nexport function createGroupedTableRowsTree(\n rules: CollectionGroup[],\n rows: TableRow[],\n parent: TableRow | null = null,\n level = 0\n): TreeLike<TableRow>[] {\n rules = [...rules];\n\n if (!rules.length) {\n // no rules mean that it's the level of source items\n return rows.map((row) => {\n row.parent = parent;\n row.level = level;\n row.hidden = !!parent && !parent.expanded;\n return row;\n });\n }\n\n // Retrieve first group rule\n const rule = rules.shift()!;\n\n // Build map of unique values for a given group rule\n const valuesHash = rows\n .filter((r) => r.state !== 'editable')\n .reduce((hash, row) => {\n const modelValue = get(row.value, rule.field);\n\n if (!hash.has(modelValue)) {\n hash.set(modelValue, []);\n }\n\n hash.get(modelValue)?.push(row);\n\n return hash;\n }, new Map<unknown, TableRow[]>());\n\n // Build table rows tree\n let groupedTableRows: TreeLike<TableRow>[] = [];\n\n if (rows.some((r) => r.state === 'editable')) {\n groupedTableRows = rows\n .filter((r) => r.state === 'editable')\n .map((row) => {\n row.parent = parent;\n row.level = -1;\n row.hidden = !!parent && !parent.expanded;\n return row;\n });\n }\n\n for (const [value, values] of Array.from(valuesHash)) {\n const filteredRows = rows.filter((_item) => values.includes(_item));\n\n if (filteredRows.length === 0) {\n continue;\n }\n\n const groupTableRow: TreeLike<TableRow<GroupTableRowValueType>> = newTableRow<GroupTableRowValueType>({\n type: TableRowType.GROUP,\n checked: false,\n index: 0,\n value: { field: rule.field, value, count: 0 },\n parent,\n level,\n expandable: true,\n expanded: true,\n hidden: !!parent && !parent.expanded\n });\n\n // Ads group's children rows\n groupTableRow._children = createGroupedTableRowsTree(rules, filteredRows, groupTableRow, level + 1);\n\n groupTableRow.value.count = groupTableRow._children?.length;\n\n groupedTableRows.push(groupTableRow);\n }\n\n return groupedTableRows;\n}\n\n/** @hidden */\nexport function convertObjectsToTableRows<T>(\n source: T[],\n addedItems: T[],\n selectedKey: string,\n rowNavigatable: boolean | string,\n selectionMode: SelectionModeValue,\n rows: TableRow[],\n rowComparator: RowComparator\n): TableRow<T>[] {\n const rowItem = source[0] as any;\n\n if (isTableRow(rowItem)) {\n return source as TableRow[];\n }\n\n const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, rows, rowComparator);\n return source.map((item: T, index: number) => {\n const isNewItem = addedItems.includes(item);\n const row = newTableRow({\n type: TableRowType.ITEM,\n checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n index,\n value: item\n });\n row.navigatable = isRowNavigatable(item, rowNavigatable);\n row.state = isNewItem ? 'editable' : 'readonly';\n return row;\n });\n}\n\n/** @hidden */\nexport function isTreeRowFirstCell(cellIndex: number, row: TableRow, event?: Event): boolean {\n return (cellIndex === 0 && isTreeRow(row)) || (!!event && !row.isTree);\n}\n","import { Table } from '../table';\nimport { TableColumn } from '../table-column';\n\nexport interface TableColumnFreezeInternalEvent {\n name: TableColumn['name'];\n endFreezable: TableColumn['endFreezable'];\n}\n\nexport interface FreezeChange {\n current: string | null;\n previous: string | null;\n end?: boolean;\n}\n\nexport class TableColumnFreezeEvent {\n /**\n * Table column freeze event\n * @param source Table component\n * @param current Current freezeTo column\n * @param previous Previous freezeTo column\n */\n constructor(\n public source: Table,\n public current: string | null,\n public previous: string | null\n ) {}\n}\n","import { Table } from '../table';\n\nexport class ColumnsChange {\n /**\n * Columns change event\n * @param current Current columns\n * @param previous Previous columns\n */\n constructor(\n public current: string[],\n public previous: string[]\n ) {}\n}\n\nexport class TableColumnsChangeEvent extends ColumnsChange {\n /**\n * Table columns change event\n * @param source Table component\n * @param current Current columns\n * @param previous Previous columns\n */\n constructor(\n public source: Table,\n current: string[],\n previous: string[]\n ) {\n super(current, previous);\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { DragoverPredicate, DropPredicate, FdDndDropType, FdDropEvent } from '@fundamental-ngx/cdk/utils';\nimport { Observable } from 'rxjs';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { Table } from '../table';\nimport { TableRow } from './table-row.model';\nimport { TableRowsRearrangeEvent } from './table-rows-rearrange-event.model';\n\nexport abstract class TableDraggable<T = any> {\n abstract dragDropInProgress: boolean;\n abstract enableRowReordering: boolean;\n abstract isTreeTable: boolean;\n abstract dropMode: FdDndDropType;\n abstract dropPredicate: DropPredicate<TableRow<T>>;\n abstract dragoverPredicate: DragoverPredicate<TableRow<T>>;\n abstract rowsRearrange: EventEmitter<TableRowsRearrangeEvent<T>>;\n abstract dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void;\n abstract dragDropItemDrop(event: FdDropEvent<TableRow>): void;\n abstract dragDropStart(): void;\n abstract setTable(table: Table): void;\n abstract dropCancelled(): void;\n}\n\nexport abstract class TableInitialState {\n abstract initialSortBy: CollectionSort[];\n abstract initialVisibleColumns: string[];\n abstract initialFilterBy: CollectionFilter[];\n abstract initialGroupBy: CollectionGroup[];\n abstract initialPage: number;\n abstract state: TableState;\n abstract setTable(table: Table): void;\n abstract setInitialState(): void;\n}\n\nexport abstract class TableVirtualScroll {\n abstract rowHeight: number;\n abstract secondaryRowHeight: number | undefined;\n abstract virtualScrollTransform$: Observable<number>;\n abstract virtualScroll: boolean;\n abstract virtualScrollTotalHeight: number;\n abstract setTable(table: Table): void;\n abstract listenOnVirtualScroll(): void;\n abstract calculateVirtualScrollRows(): void;\n}\n","import { CollectionFilter } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface FilterChange {\n current: CollectionFilter[];\n previous: CollectionFilter[];\n}\n\nexport class TableFilterChangeEvent {\n /**\n * Table filter change event\n * @param source Table component\n * @param current Current filters\n * @param previous Previous filters\n */\n constructor(\n public source: Table,\n public current: CollectionFilter[],\n public previous: CollectionFilter[]\n ) {}\n}\n","import { CollectionGroup } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface GroupChange {\n current: CollectionGroup[];\n previous: CollectionGroup[];\n}\n\nexport class TableGroupChangeEvent {\n /**\n * Table group change event\n * @param source Table component\n * @param current Current groups\n * @param previous Previous groups\n */\n constructor(\n public source: Table,\n public current: CollectionGroup[],\n public previous: CollectionGroup[]\n ) {}\n}\n","import { CollectionPage } from '../interfaces';\nimport { Table } from '../table';\n\nexport class PageChange {\n /**\n * Page change event\n * @param current Current page\n * @param previous Previous page\n */\n constructor(\n public current: CollectionPage,\n public previous: CollectionPage\n ) {}\n}\n\nexport class TablePageChangeEvent extends PageChange {\n /**\n * Table page change event\n * @param source Table component\n * @param current Current page\n * @param previous Previous page\n */\n constructor(\n public source: Table,\n current: CollectionPage,\n previous: CollectionPage\n ) {\n super(current, previous);\n }\n}\n","export class SaveRowsEvent<T> {\n /**\n * Table save rows event\n * @param done Callback function. Call it when newly added items has been saved and new data source fetch is needed.\n * @param items Array of newly created items.\n */\n constructor(\n public done: () => void,\n public items: T[]\n ) {}\n}\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { Table } from '../table';\n\nexport interface SearchChange {\n current: SearchInput;\n previous: SearchInput;\n}\n\nexport class TableSearchChangeEvent {\n /**\n * Table search change event\n * @param source Table component\n * @param current Current search (fields, directions)\n * @param previous Previous search (fields, directions)\n */\n constructor(\n public source: Table,\n public current: SearchInput,\n public previous: SearchInput\n ) {}\n}\n","import { Table } from '../table';\n\nexport class TableSelectionChangeEvent<T> {\n /** currently selected items */\n selection: T[];\n /** Items added */\n added: T[]; //\n /** Items removed */\n removed: T[];\n /** Indexes location of additions or removals */\n index: number[];\n /** Whether `Check/Uncheck` all checkbox was pressed. */\n all?: boolean;\n}\n\nexport class TableRowSelectionChangeEvent<T> extends TableSelectionChangeEvent<T> {\n /** Table component */\n source: Table;\n}\n","import { CollectionSort } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface SortChange {\n current: CollectionSort[];\n previous: CollectionSort[];\n}\n\nexport class TableSortChangeEvent {\n /**\n * Table sort change event\n * @param source Table component\n * @param current Current sort (fields, directions)\n * @param previous Previous sort (fields, directions)\n */\n constructor(\n public source: Table,\n public current: CollectionSort[],\n public previous: CollectionSort[]\n ) {}\n}\n","export class TableCellActivateEvent<T> {\n /**\n * Table cell activate event\n * @param columnIndex Index of the clicked column\n * @param row Row that was activated\n */\n constructor(\n public columnIndex: number,\n public row: T\n ) {}\n}\n","/** Common properties for table dialogs */\n\nexport interface TableDialogCommonData {\n // nothing here yet - placeholder for tslint\n _placeholder?: unknown;\n}\n","export class TableRowActivateEvent<T> {\n /**\n * Table row activate event\n * @param index Index of the activated row\n * @param ctrlKey Whether control/command key was pressed during the mouse/keyboard event\n * @param row Row that was activated\n */\n constructor(\n public index: number,\n public ctrlKey: boolean,\n public row: T\n ) {}\n}\n","export class TableRowToggleOpenStateEvent<T> {\n /**\n * Table row toggle open state event\n * @param index Index of the row\n * @param row Row that was toggled\n * @param expanded Expanded state of the row\n */\n constructor(\n public index: number,\n public row: T,\n public expanded: boolean\n ) {}\n}\n","import { FdDndDropEventMode } from '@fundamental-ngx/cdk/utils';\n\nexport class TableRowsRearrangeEvent<T> {\n /**\n * Table rows rearrange event\n * @param row Row that was rearranged\n * @param dropRow Row where the dragged item has been dropped\n * @param previousIndex Previous index of the row\n * @param newIndex New index of the row\n * @param insertAt Whether dragged the row was inserted before or after the dropped row\n * @param mode Whether the dropped element shifts other items or is grouped with them\n * @param rows All rows of the table in the state they exist on the datasource\n */\n constructor(\n public row: T,\n public dropRow: T,\n public previousIndex: number,\n public newIndex: number,\n public insertAt: 'before' | 'after' | null,\n public mode: FdDndDropEventMode,\n public rows: T[]\n ) {}\n}\n","import {\n DOWN_ARROW,\n END,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n Output\n} from '@angular/core';\nimport {\n DragoverPredicate,\n DropPredicate,\n FdDndDropEventMode,\n FdDndDropType,\n FdDropEvent,\n KeyUtil\n} from '@fundamental-ngx/cdk/utils';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE } from '../constants';\nimport { TableRowType } from '../enums';\nimport { findRowChildren, getRowParents } from '../helpers';\nimport { TableRow, TableRowsRearrangeEvent, UpdatedDndRowsPosition } from '../models';\nimport { TableDraggable } from '../models/directives';\nimport { Table } from '../table';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdp-table[isTreeTable], fdp-table[enableRowReordering]',\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_DRAGGABLE_DIRECTIVE,\n useExisting: forwardRef(() => TableDraggableDirective)\n }\n ]\n})\nexport class TableDraggableDirective<T = any> extends TableDraggable<T> implements OnDestroy {\n /** Whether to allow for row reordering on tree tables via drag and drop. */\n @Input()\n enableRowReordering = true;\n\n /** Whether tree mode is enabled. */\n @HostBinding('class.fd-table--tree')\n @Input()\n isTreeTable = false;\n\n /**\n * Row drop mode.\n */\n @Input()\n dropMode: FdDndDropType = 'auto';\n\n /** Predicate function that checks whether the item can be dropped over another item. */\n @Input()\n dropPredicate: DropPredicate<TableRow<T>>;\n\n /**\n * Predicate function that checks whether the item can be dragged over another item.\n * If the function returns `false`, dragged over item will not be highlighted, and drop event will be canceled.\n */\n @Input()\n dragoverPredicate: DragoverPredicate<TableRow<T>>;\n\n /** Event fired when tree rows rearranged through drag & drop. Consider that rows rearranged with their children rows. */\n @Output()\n readonly rowsRearrange = new EventEmitter<TableRowsRearrangeEvent<T>>();\n\n /** @hidden */\n get _rowsDraggable(): boolean {\n return this.isTreeTable && this.enableRowReordering;\n }\n\n /** @hidden */\n dragDropInProgress = false;\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef, {\n host: true\n });\n\n /** @hidden */\n ngOnDestroy(): void {\n this._setDragInProgress(false);\n }\n\n /** Sets table reference. */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * Initiates drag&drop sequence.\n */\n dragDropStart(): void {\n this._setDragInProgress(true);\n }\n\n /** Method called when dnd performed with the keyboard. */\n dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void {\n if (!this._rowsDraggable) {\n return;\n }\n event.preventDefault();\n let replacedIndex;\n dir === 'up' ? (replacedIndex = currentRowIndex - 1) : (replacedIndex = currentRowIndex + 1);\n\n if (this._table._tableRowsVisible[replacedIndex]) {\n const dragDropEvent: FdDropEvent<TableRow<T>> = {\n items: this._table._tableRowsVisible,\n draggedItemIndex: currentRowIndex,\n replacedItemIndex: replacedIndex,\n insertAt: dir === 'down' ? 'after' : 'before',\n mode\n };\n this.dragDropItemDrop(dragDropEvent);\n setTimeout(() => {\n (event.target as HTMLElement).focus();\n });\n }\n }\n\n /** Method called when drag&drop event being cancelled. */\n dropCancelled(): void {\n /** After timeout to make click event handled first */\n setTimeout(() => this._setDragInProgress(false));\n }\n\n /** Method called when dragged item being dropped. */\n dragDropItemDrop(event: FdDropEvent<TableRow>): void {\n /** After timeout to make click event handled first */\n setTimeout(() => {\n this._setDragInProgress(false);\n });\n\n if (this.isTreeTable && event.draggedItemIndex !== event.replacedItemIndex) {\n event.draggedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.draggedItemIndex];\n event.replacedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.replacedItemIndex];\n const dragRow = this._table._tableRows.find(\n (row) => row === this._table._tableRowsVisible[event.draggedItemIndex]\n );\n const dropRow = this._table._tableRows.find(\n (row) => row === this._table._tableRowsVisible[event.replacedItemIndex]\n );\n\n if (!dragRow || !dropRow || this._isDroppedInsideItself(dropRow, dragRow)) {\n return;\n }\n this._dragDropUpdateDragParentRowAttributes(dragRow);\n this._dragDropRearrangeTreeRows(dragRow, dropRow, event);\n this._dragDropUpdateDropRowAttributes(dragRow, dropRow, event.mode);\n\n if (!dropRow.expanded && event.mode === 'group') {\n this._table.toggleExpandableTableRow(dropRow, true);\n } else {\n this._table.onTableRowsChanged();\n }\n\n this._cdr.detectChanges();\n this._emitRowsRearrangeEvent(dragRow, dropRow, event);\n this._table.refreshDndList();\n }\n }\n\n /**\n * @hidden\n * Create table rows rearrange event\n */\n _emitRowsRearrangeEvent(row: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n const rows: any[] = [];\n\n this._table._tableRows.forEach((r, index) => {\n r.index = index;\n rows.push(r.value);\n });\n\n this.rowsRearrange.emit(\n new TableRowsRearrangeEvent(\n row.value,\n dropRow.value,\n event.draggedItemIndex,\n event.replacedItemIndex,\n event.insertAt,\n event.mode,\n rows\n )\n );\n }\n\n /** @hidden */\n private _setDragInProgress(dragging: boolean): void {\n this.dragDropInProgress = dragging;\n dragging ? this._blockScrolling() : this._enableScrolling();\n }\n\n /** @hidden */\n private _isDroppedInsideItself(dropRow: TableRow, dragRow: TableRow): boolean {\n const dropRowParents = getRowParents(dropRow);\n return !!dropRowParents.find((row) => row === dragRow);\n }\n\n /** @hidden */\n private _dragDropUpdateDragParentRowAttributes(dragRow: TableRow): void {\n const parentRow = dragRow.parent;\n\n if (!parentRow) {\n return;\n }\n\n const parentRowChildren = findRowChildren(parentRow, this._table._tableRows);\n const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n if (parentRowChildren.length - (dragRowChildren.length + 1) === 0) {\n parentRow.setRowType(TableRowType.ITEM);\n }\n }\n\n /** @hidden */\n private _dragDropUpdateDropRowAttributes(dragRow: TableRow, dropRow: TableRow, mode: FdDndDropEventMode): void {\n if (dragRow.parent) {\n // Remove child row from previous parent row.\n dragRow.parent.children.splice(dragRow.parent.children.indexOf(dragRow), 1);\n }\n dragRow.level = dropRow.level + (mode === 'group' ? 1 : 0);\n\n if (mode === 'group') {\n dragRow.parent = dropRow;\n if (!dropRow.isTree) {\n dropRow.setRowType(TableRowType.TREE);\n }\n\n dropRow.children.push(dragRow);\n dropRow.lastChild = dragRow;\n } else {\n dragRow.parent = dropRow.parent;\n dropRow.parent?.children.push(dragRow);\n if (dropRow.parent) {\n dropRow.parent.lastChild = dragRow;\n }\n }\n\n const children = findRowChildren(dragRow, this._table._tableRows);\n children.forEach((row) => {\n row.level = getRowParents(row).length;\n });\n }\n\n /** @hidden */\n private _dragDropRearrangeTreeRows(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n if (event.mode === 'shift') {\n this._handleShiftDropAction(dragRow, dropRow, event);\n } else {\n this._handleReplaceDropAction(dragRow, dropRow);\n }\n }\n\n /** @hidden */\n private _getNewDragDropRowsPosition(dragRow: TableRow, dropRow: TableRow): UpdatedDndRowsPosition {\n const allRows = this._table._tableRows;\n\n const dragRowIndex = allRows.findIndex((row) => row === dragRow);\n const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n const rowsToMove = allRows.splice(dragRowIndex, dragRowChildren.length + 1);\n\n const dropRowIndex = allRows.findIndex((row) => row === dropRow);\n const dropRowChildren = findRowChildren(dropRow, this._table._tableRows);\n\n const dropRowItemsLength = dropRowChildren.length + 1;\n\n const rowsAfterDropRow = allRows.splice(dropRowIndex + dropRowItemsLength, allRows.length + dropRowItemsLength);\n const dropRowItems = allRows.splice(dropRowIndex, dropRowItemsLength);\n\n return {\n allRows,\n rowsToMove,\n rowsAfterDropRow,\n dropRowItems\n };\n }\n\n /** @hidden */\n private _handleShiftDropAction(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n dragRow,\n dropRow\n );\n\n this._table._tableRows = [\n ...allRows,\n ...(event.insertAt === 'after' ? dropRowItems : []),\n ...rowsToMove,\n ...(event.insertAt === 'after' ? [] : dropRowItems),\n ...rowsAfterDropRow\n ];\n }\n\n /** @hidden */\n private _handleReplaceDropAction(dragRow: TableRow, dropRow: TableRow): void {\n const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n dragRow,\n dropRow\n );\n\n this._table._tableRows = [...allRows, ...dropRowItems, ...rowsToMove, ...rowsAfterDropRow];\n }\n\n /** @hidden */\n private _blockScrolling(): void {\n this._table._focusableGrid._preventKeydown = true;\n this._table.tableContainer.nativeElement.addEventListener('DOMMouseScroll', preventDefault, false);\n this._table.tableContainer.nativeElement.addEventListener('wheel', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('mousewheel', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('touchmove', preventDefault, { passive: false });\n this._table.tableContainer.nativeElement.addEventListener('keydown', preventDefaultForScrollKeys, false);\n }\n\n /** @hidden */\n private _enableScrolling(): void {\n this._table._focusableGrid._preventKeydown = false;\n this._table.tableContainer.nativeElement.removeEventListener('DOMMouseScroll', preventDefault, false);\n this._table.tableContainer.nativeElement.removeEventListener('wheel', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('mousewheel', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('touchmove', preventDefault);\n this._table.tableContainer.nativeElement.removeEventListener('keydown', preventDefaultForScrollKeys, false);\n }\n}\n\nfunction preventDefault(event: Event): void {\n event.preventDefault();\n}\n\nfunction preventDefaultForScrollKeys(event: KeyboardEvent): boolean | undefined {\n if (\n !event.altKey &&\n KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, SPACE, PAGE_DOWN, PAGE_UP, END, HOME])\n ) {\n preventDefault(event);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FocusableItemPosition } from '@fundamental-ngx/cdk/utils';\nimport { Observable, Subject } from 'rxjs';\nimport { convertTreeLikeToFlatList, createGroupedTableRowsTree, sortTreeLikeGroupedRows } from '../helpers';\nimport { CollectionGroup } from '../interfaces';\nimport { TableRow } from '../models';\nimport { TableCellActivateEvent } from '../models/table-cell-activate-event.model';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport type ToggleRowModel =\n | {\n type: 'toggleRow';\n row: TableRow;\n }\n | {\n type: 'toggleSingleSelectableRow';\n row: TableRow;\n }\n | {\n type: 'toggleMultiSelectRow';\n row: TableRow;\n event?: Event;\n };\n\nexport interface CellClickedModel {\n index: number;\n row: TableRow;\n}\n\n@Injectable()\nexport class TableRowService<T = any> {\n /** Stream that emits when toggling all selectable rows is needed. */\n readonly toggleAllSelectableRows$: Observable<boolean>;\n\n /** Stream that emits when table cell being clicked. */\n readonly cellClicked$: Observable<CellClickedModel>;\n\n /** Stream that emits when scrolling to overlapped cell is needed. */\n readonly scrollToOverlappedCell$: Observable<void>;\n\n /** Stream that emits when the table cell being focused. */\n readonly cellFocused$: Observable<FocusableItemPosition>;\n\n /** Stream that emits when the table cell being focused. */\n readonly cellActivate$: Observable<TableCellActivateEvent<any>>;\n\n /** Toggle row stream. */\n readonly toggleRow$: Observable<ToggleRowModel>;\n\n /** Editable cells map. */\n readonly editableCells = new Map<TableRow<any>, EditableTableCell[]>();\n\n /** @hidden */\n readonly childRowsAdded$ = new Subject<{ row: TableRow; rowIndex: number; items: T[] }>();\n\n /** Stream to load child items for a particular rows. */\n readonly loadChildRows$ = new Subject<TableRow<T>[]>();\n\n /** @hidden */\n private readonly _toggleRowSubject = new Subject<ToggleRowModel>();\n\n /** @hidden */\n private readonly _scrollToOverlappedCellSubject = new Subject<void>();\n\n /** @hidden */\n private readonly _cellClickedSubject = new Subject<CellClickedModel>();\n\n /** @hidden */\n private readonly _cellActivateSubject = new Subject<TableCellActivateEvent<any>>();\n\n /** @hidden */\n private readonly _cellFocusedSubject = new Subject<FocusableItemPosition>();\n\n /** @hidden */\n private readonly _toggleAllSelectableRowsSubject = new Subject<boolean>();\n\n /** @hidden */\n constructor() {\n this.toggleAllSelectableRows$ = this._toggleAllSelectableRowsSubject.asObservable();\n this.cellClicked$ = this._cellClickedSubject.asObservable();\n this.scrollToOverlappedCell$ = this._scrollToOverlappedCellSubject.asObservable();\n this.cellFocused$ = this._cellFocusedSubject.asObservable();\n this.cellActivate$ = this._cellActivateSubject.asObservable();\n this.toggleRow$ = this._toggleRowSubject.asObservable();\n }\n\n /** `toggleRow$` stream trigger. */\n toggleRow(evt: ToggleRowModel): void {\n this._toggleRowSubject.next(evt);\n }\n\n /** `scrollToOverlappedCell$` stream trigger. */\n scrollToOverlappedCell(): void {\n this._scrollToOverlappedCellSubject.next();\n }\n\n /** `cellClicked$` stream trigger. */\n cellClicked(evt: CellClickedModel): void {\n this._cellClickedSubject.next(evt);\n }\n\n /** @hidden */\n cellActivate(columnIndex: number, row: TableRow): void {\n this._cellActivateSubject.next({ columnIndex, row: row.value });\n }\n\n /** `cellFocused$` stream trigger. */\n cellFocused(evt: FocusableItemPosition): void {\n this._cellFocusedSubject.next(evt);\n }\n\n /** `toggleAllSelectableRows$` stream trigger. */\n toggleAllSelectableRows(selectAll: boolean): void {\n this._toggleAllSelectableRowsSubject.next(selectAll);\n }\n\n /** Groups the table rows. */\n groupTableRows(\n sourceRows: TableRow[],\n groups: Iterable<CollectionGroup>,\n groupRulesMap: Map<string, CollectionGroup>\n ): TableRow[] {\n const groupRules = Array.from(groups);\n\n if (!groupRules.length) {\n /**\n * In case if previously we had groups with collapsed items\n * but now we don't have it we need to reset row.hidden flag\n * in order to avoid empty table after groups settings removing\n */\n sourceRows.forEach((row) => {\n row.hidden = false;\n });\n return sourceRows;\n }\n\n // Build tree like groups\n const treeLikeGroupedRows = createGroupedTableRowsTree(groupRules, sourceRows);\n\n // Sort tree like groups\n const sortedTreeLikeGroupedRows = sortTreeLikeGroupedRows(treeLikeGroupedRows, groupRulesMap);\n\n // Convert tree like list to a flat list\n return convertTreeLikeToFlatList(sortedTreeLikeGroupedRows);\n }\n\n /** Sets editable cells for particular row. */\n updateEditableCells(row: TableRow, cells: EditableTableCell[]): void {\n this.editableCells.set(row, cells);\n }\n\n /** Removes editable cells of particular row. */\n removeEditableCells(row: TableRow): void {\n this.editableCells.delete(row);\n }\n\n /** Triggers stream to load child items for a particular rows. */\n loadChildRows(rows: TableRow<T> | TableRow<T>[]): void {\n const expandableRows: TableRow<T>[] = [];\n if (Array.isArray(rows)) {\n expandableRows.push(...rows.filter((r) => !r.childItemsLoading$.value));\n } else {\n if (rows.childItemsLoading$.value) {\n return;\n }\n expandableRows.push(rows);\n }\n this.loadChildRows$.next(expandableRows);\n }\n}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\n\nimport { DOCUMENT, DestroyRef, Directive, ElementRef, NgZone, OnInit, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n FocusableCellPosition,\n FocusableItemPosition,\n KeyUtil,\n Nullable,\n RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { fromEvent } from 'rxjs';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\nimport { TableRowService } from '../services/table-row.service';\n\n@Directive({\n selector: '[fdpTableHeaderResizer]',\n standalone: true\n})\nexport class TableHeaderResizerDirective implements OnInit {\n /** @hidden */\n focusedCellPosition: Nullable<FocusableCellPosition>;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _elmRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n /** @hidden */\n private readonly _tableRowService = inject(TableRowService);\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n private readonly _document = inject(DOCUMENT);\n\n /** @hidden */\n private _focusinTimerId: any;\n\n /** @hidden */\n private get _headerCellFocused(): boolean {\n return this._document.activeElement?.tagName.toLowerCase() === 'th';\n }\n /** @hidden */\n ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n if (\n (KeyUtil.isKeyCode(event, LEFT_ARROW) ||\n (this._isRtl() && KeyUtil.isKeyCode(event, RIGHT_ARROW))) &&\n event.shiftKey &&\n this._headerCellFocused\n ) {\n this._tableColumnResizeService._processResize(-32);\n event.preventDefault();\n event.stopImmediatePropagation();\n } else if (\n (KeyUtil.isKeyCode(event, RIGHT_ARROW) ||\n (this._isRtl() && KeyUtil.isKeyCode(event, LEFT_ARROW))) &&\n event.shiftKey &&\n this._headerCellFocused\n ) {\n this._tableColumnResizeService._processResize(32);\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n });\n\n fromEvent(this._elmRef.nativeElement, 'focusin')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n if (!this._focusinTimerId) {\n return;\n }\n clearTimeout(this._focusinTimerId);\n this._focusinTimerId = null;\n });\n\n fromEvent(this._elmRef.nativeElement, 'focusout')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._focusinTimerId = setTimeout(() => {\n this.focusedCellPosition = null;\n });\n });\n });\n\n this._tableRowService.cellFocused$.subscribe((evt) => {\n this._onCellFocused(evt);\n });\n }\n\n /** @hidden */\n private _onCellFocused(position: FocusableItemPosition): void {\n this.focusedCellPosition = { rowIndex: position.rowIndex, colIndex: position.colIndex };\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { FdpCellDefContext } from './table-cell.directive';\n\nexport interface FdpHeaderCellDefContext<T = any> {\n $implicit: T;\n}\n\n/** Column header container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-header', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableHeader {}\n\n/**\n * Header cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpHeaderCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpHeaderCellDef<T = any> {\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(dir: FdpHeaderCellDef, ctx: FdpHeaderCellDefContext): ctx is FdpHeaderCellDefContext {\n return true;\n }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { DEFAULT_TABLE_STATE, FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { TableInitialState } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n selector: `[fdpTableInitialState],\n fdp-table`,\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_STATE_DIRECTIVE,\n useExisting: TableInitialStateDirective\n }\n ]\n})\nexport class TableInitialStateDirective extends TableInitialState {\n /** Initial visible columns. Consist of a list of unique column names */\n @Input()\n initialVisibleColumns: string[];\n\n /** Initial sort options. */\n @Input()\n initialSortBy: CollectionSort[] = [];\n\n /** Initial filter options. */\n @Input()\n initialFilterBy: CollectionFilter[] = [];\n\n /** Initial group options. */\n @Input()\n initialGroupBy: CollectionGroup[] = [];\n\n /** Initial page. */\n @Input()\n initialPage = 1;\n\n /**\n * Initial state of table.\n */\n @Input()\n set state(value: TableState) {\n this.setTableState(value || DEFAULT_TABLE_STATE);\n }\n\n get state(): TableState {\n return this.getTableState();\n }\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private readonly _tableService = inject(TableService);\n\n /** @hidden */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /** @hidden */\n setInitialState(): void {\n const prevState = this.getTableState();\n const columns = this._table.getTableColumns();\n const page = prevState.page;\n const visibleColumns =\n this.initialVisibleColumns ||\n (prevState.columns.length ? prevState.columns : columns.filter((c) => c.visible).map(({ name }) => name));\n\n const directiveInitialPage = this.initialPage ?? 1;\n\n this._table._loadPreviousPages =\n this._table.pageScrolling && this._table.loadPagesBefore && directiveInitialPage > 1;\n\n const initialPage = this._table._loadPreviousPages\n ? 1\n : directiveInitialPage < page.currentPage\n ? page.currentPage\n : directiveInitialPage;\n\n const initialPageSize =\n (this._table._loadPreviousPages ? directiveInitialPage : initialPage) *\n (this._table.pageSize || page.pageSize);\n\n this.setTableState({\n ...prevState,\n columns: visibleColumns,\n columnKeys: columns.filter((c) => visibleColumns.includes(c.name)).map((c) => c.key),\n sortBy: this.initialSortBy || prevState.sortBy,\n filterBy: this.initialFilterBy || prevState.filterBy,\n groupBy: this.initialGroupBy || prevState.groupBy,\n freezeToColumn: this._table.freezeColumnsTo || prevState.freezeToColumn,\n freezeToEndColumn: this._table.freezeEndColumnsTo || prevState.freezeToEndColumn,\n page: {\n currentPage: initialPage,\n pageSize: initialPageSize\n }\n });\n }\n\n /** Get current state/settings of the Table. */\n getTableState(): TableState {\n return this._tableService.getTableState();\n }\n\n /** Set current state/settings of the Table. */\n setTableState(state: TableState): void {\n this._tableService.setTableState(state);\n }\n}\n","import {\n DestroyRef,\n Directive,\n DOCUMENT,\n ElementRef,\n forwardRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable, Observer } from 'rxjs';\nimport { filter, share, tap } from 'rxjs/operators';\nimport {\n TABLE_SCROLLABLE,\n TableScrollable,\n TableScrollDispatcherService\n} from '../services/table-scroll-dispatcher.service';\n\n/**\n * Table Scrollable.\n * That directive should be assigned to table scrollable area.\n * It registers itself in table scroll dispatcher\n * and notify once element scrolled.\n *\n * For internal usage.\n */\n@Directive({\n selector: '[fdpTableScrollable]',\n exportAs: 'tableScrollable',\n standalone: true,\n providers: [{ provide: TABLE_SCROLLABLE, useExisting: forwardRef(() => TableScrollableDirective) }]\n})\nexport class TableScrollableDirective implements TableScrollable, OnInit, OnDestroy {\n /** @hidden */\n private _skipEvent = false;\n\n /** @hidden */\n private _prevScrollTop = 0;\n\n /** @hidden */\n private _prevScrollLeft = 0;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _document = inject(DOCUMENT);\n\n /** Scroll events stream */\n private _elementScrollStream: Observable<Event> = new Observable((observer: Observer<Event>) => {\n const subscription = this.ngZone.runOutsideAngular(() =>\n fromEvent(this.elementRef.nativeElement, 'scroll').subscribe(observer)\n );\n return () => subscription.unsubscribe();\n }).pipe(\n filter(() => {\n if (this._skipEvent) {\n this._skipEvent = false;\n return false;\n }\n return true;\n }),\n takeUntilDestroyed(this._destroyRef),\n share()\n );\n\n /** Vertical scroll stream */\n private _elementVerticalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n filter(() => this._prevScrollTop !== this.getScrollTop()),\n tap(() => (this._prevScrollTop = this.getScrollTop()))\n );\n\n /** Horizontal scroll stream */\n private _elementHorizontalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n filter(() => this._prevScrollLeft !== this.getScrollLeft()),\n tap(() => (this._prevScrollLeft = this.getScrollLeft()))\n );\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n protected scrollDispatcher: TableScrollDispatcherService,\n protected ngZone: NgZone\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.scrollDispatcher.register(this);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.scrollDispatcher.deregister(this);\n }\n\n /** Returns observable that emits when a scroll event is fired on the host element. */\n getScrollStream(): Observable<Event> {\n return this._elementScrollStream;\n }\n\n /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n getVerticalScrollStream(): Observable<Event> {\n return this._elementVerticalScrollStream;\n }\n\n /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n getHorizontalScrollStream(): Observable<Event> {\n return this._elementHorizontalScrollStream;\n }\n\n /** Returns scrollTop position of the host element. */\n getScrollTop(): number {\n return this.elementRef.nativeElement?.scrollTop;\n }\n\n /** Returns scrollLeft position of the host element. */\n getScrollLeft(): number {\n return this.elementRef.nativeElement?.scrollLeft;\n }\n\n /** Set scrollTop position of the host element. */\n setScrollTop(scrollTop: number, emitEvent = true): void {\n if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollTop === scrollTop) {\n return;\n }\n this._skipEvent = !emitEvent;\n this.elementRef.nativeElement.scrollTop = scrollTop;\n }\n\n /** Set scrollLeft position of the host element. */\n setScrollLeft(scrollLeft: number, emitEvent = true): void {\n if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollLeft === scrollLeft) {\n return;\n }\n this._skipEvent = !emitEvent;\n this.elementRef.nativeElement.scrollLeft = scrollLeft;\n }\n\n /** Scrolls to overlapped cell. */\n scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void {\n const tableScrollableEl = this.elementRef.nativeElement;\n const isRtl = rtl;\n\n if (\n (freezableColumnsSize || freezableEndColumnSize) &&\n tableScrollableEl.scrollWidth > tableScrollableEl.clientWidth\n ) {\n const activeEl = this._document.activeElement;\n if (\n activeEl &&\n !(\n activeEl.classList.contains('fd-table__cell--fixed') ||\n activeEl.classList.contains('fd-table__cell--fixed-end')\n )\n ) {\n if (freezableColumnsSize && !freezableEndColumnSize) {\n activeEl.scrollIntoView({ block: 'nearest', inline: 'end' });\n } else if (!freezableColumnsSize && freezableEndColumnSize) {\n activeEl.scrollIntoView({ block: 'nearest', inline: 'center' });\n } else if (freezableColumnsSize && freezableEndColumnSize) {\n // check to see if another element obstructs the active element\n const activeElmRect = activeEl.getBoundingClientRect();\n const activeElLeft = activeElmRect.left;\n const activeElTop = activeElmRect.top;\n const activeElWidth = activeElmRect.width;\n const topElementFromLeft = this._document.elementFromPoint(activeElLeft, activeElTop);\n // if the activeEl is overlapped\n if (\n topElementFromLeft &&\n !activeEl.isSameNode(topElementFromLeft) &&\n topElementFromLeft.classList.contains('fd-table__cell--fixed-end')\n ) {\n const topElementX = topElementFromLeft.getBoundingClientRect().left;\n const leftVal = isRtl\n ? (activeElLeft + activeElWidth - topElementX) * -1\n : activeElLeft + activeElWidth - topElementX;\n tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n } else if (\n topElementFromLeft &&\n !activeEl.isSameNode(topElementFromLeft) &&\n topElementFromLeft.classList.contains('fd-table__cell--fixed')\n ) {\n const topElementX = topElementFromLeft.getBoundingClientRect().right;\n const leftVal = isRtl\n ? (activeElLeft - activeElWidth - topElementX) * -1\n : activeElLeft - activeElWidth - topElementX;\n tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n }\n }\n }\n }\n }\n\n /** Set Scroll Position during component initialization. */\n initializeScrollTop(scrollTop: number): void {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setScrollTop(scrollTop, false);\n });\n });\n }\n}\n","import { Directive, EventEmitter, TemplateRef } from '@angular/core';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\n\nexport interface FdpViewSettingsFilterCustomDefContext {\n $implicit: any;\n valueChangeEmitter: EventEmitter<unknown>;\n contentDensity: ContentDensityMode;\n}\n\n@Directive({ selector: '[fdpViewSettingsFilterCustomDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpViewSettingsFilterCustomDef {\n /** @hidden */\n constructor(public templateRef: TemplateRef<FdpViewSettingsFilterCustomDefContext>) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FdpViewSettingsFilterCustomDef,\n ctx: FdpViewSettingsFilterCustomDefContext\n ): ctx is FdpViewSettingsFilterCustomDefContext {\n return true;\n }\n}\n","import { DestroyRef, Directive, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE, FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE, ROW_HEIGHT } from '../constants';\nimport { TableDraggable, TableVirtualScroll } from '../models';\nimport { TableScrollDispatcherService } from '../services/table-scroll-dispatcher.service';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdp-table[virtualScroll]',\n standalone: true,\n providers: [\n {\n provide: FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n useExisting: TableVirtualScrollDirective\n }\n ]\n})\nexport class TableVirtualScrollDirective extends TableVirtualScroll implements OnChanges {\n /** Whether to show only visible rows in matter of performance\n * false by default, when true setting bodyHeight and rowHeight is required.\n */\n @Input()\n virtualScroll = false;\n\n /** Cache size for the virtualScroll, default is 40 in each direction */\n @Input()\n renderAhead = 40;\n\n /** Body height. */\n @Input()\n bodyHeight: string;\n\n /**\n * Minimum height of the row, required for the virtualScroll,\n * default is 44px in cozy, 32px in compact and 24px in condensed (set automatically)\n */\n @Input()\n rowHeight = ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n\n /**\n * Minimum height of the popping column when displayed in pop-in mode. Required when using popping columns and virtual scroll.\n */\n @Input()\n secondaryRowHeight: number | undefined;\n\n /** @hidden */\n virtualScrollTotalHeight = 0;\n\n /** @hidden */\n virtualScrollTransform$ = new BehaviorSubject<number>(0);\n\n /** @hidden */\n private _table: Table;\n\n /** @hidden */\n private _virtualScrollCache = { startNodeIndex: -1, visibleNodeCount: -1, totalNodeCount: -1 };\n\n /** @hidden */\n private readonly _tableScrollDispatcher = inject(TableScrollDispatcherService);\n\n /** @hidden */\n private readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(readonly _tableService: TableService) {\n super();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._table.tableScrollable) {\n return;\n }\n if (this.virtualScroll && (changes['rowHeight'] || changes['virtualScroll'] || changes['renderAhead'])) {\n this.calculateVirtualScrollRows();\n }\n }\n\n /** Sets table reference. */\n setTable(table: Table): void {\n this._table = table;\n }\n\n /**\n * Calculates rows to be rendered in the table.\n */\n calculateVirtualScrollRows(): void {\n if (!this.virtualScroll || !this.bodyHeight || this._dndTableDirective?.dragDropInProgress) {\n return;\n }\n\n let rowHeight = this.rowHeight + 1;\n\n const tableContainerEl = this._table.tableContainer.nativeElement;\n\n if (this._tableService.poppingColumns$().length > 0) {\n const secondaryRows = tableContainerEl.getElementsByClassName('fd-table__row--secondary');\n if (secondaryRows[0]) {\n rowHeight = rowHeight + secondaryRows[0].clientHeight;\n }\n }\n\n const rowsVisible = this._table._tableRowsVisible;\n const currentlyRenderedRows = this._table.getCurrentlyRenderedRows();\n const totalNodeCount = rowsVisible.length;\n const scrollTop = this._table.tableScrollable.getScrollTop();\n\n let startNodeIndex = Math.floor(scrollTop / rowHeight) - this.renderAhead;\n startNodeIndex = Math.max(0, startNodeIndex);\n\n let visibleNodeCount = Math.ceil(tableContainerEl.clientHeight / rowHeight) + 2 * this.renderAhead;\n visibleNodeCount = Math.min(totalNodeCount - startNodeIndex, visibleNodeCount);\n\n this.virtualScrollTransform$.next(startNodeIndex * rowHeight);\n\n // Simple caching to avoid unnecessary re-renderings\n const isCached =\n startNodeIndex === this._virtualScrollCache.startNodeIndex &&\n visibleNodeCount === this._virtualScrollCache.visibleNodeCount &&\n totalNodeCount === this._virtualScrollCache.totalNodeCount &&\n // On rows change, even if the total number of rows is the same, the row object will be different\n startNodeIndex === currentlyRenderedRows[0];\n\n if (isCached) {\n return;\n }\n\n this._virtualScrollCache = { startNodeIndex, visibleNodeCount, totalNodeCount };\n this.virtualScrollTotalHeight = totalNodeCount * rowHeight - visibleNodeCount * rowHeight;\n this._table.setCurrentlyRenderedRows(\n startNodeIndex,\n rowsVisible.slice(startNodeIndex, startNodeIndex + visibleNodeCount).length\n );\n }\n\n /**\n * Initialises scroll listener.\n */\n listenOnVirtualScroll(): void {\n this._tableScrollDispatcher\n .verticallyScrolled()\n .pipe(\n filter(() => this.virtualScroll && !!this.bodyHeight),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((scrollable) => {\n this.calculateVirtualScrollRows();\n this._tableService.setTableState({\n ...this._table.getTableState(),\n scrollTopPosition: scrollable.getScrollTop()\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ColumnAlign } from '../enums/column-align.enum';\nimport { TableColumn } from '../table-column';\n\n@Pipe({ name: 'tableCellStyles', standalone: true })\nexport class TableCellStylesPipe implements PipeTransform {\n /** @hidden */\n transform(\n column: TableColumn,\n isRtl: boolean,\n semanticHighlightingColumnWidth: number | null,\n selectionColumnWidth: number | null,\n isFrozenColumn: boolean,\n isFrozenEndColumn: boolean,\n prevColumnWidthPx: number | null,\n columnWidth: string,\n nextColumnWidthPx: number | null,\n noBorders?: boolean,\n noHorizontalBorders?: boolean,\n noVerticalBorders?: boolean\n ): Record<string, number | string> {\n const styles: { [property: string]: number | string } = {};\n\n if (isFrozenColumn) {\n const key = isRtl ? 'right.px' : 'left.px';\n styles[key] =\n (semanticHighlightingColumnWidth || 0) + (selectionColumnWidth || 0) + (prevColumnWidthPx || 0);\n }\n\n if (isFrozenEndColumn) {\n const key = isRtl ? 'left.px' : 'right.px';\n styles[key] = (nextColumnWidthPx || 0).toString();\n }\n\n if (noHorizontalBorders) {\n styles['border-top'] = 'none';\n styles['border-bottom'] = 'none';\n }\n\n if (noVerticalBorders) {\n styles['border-left'] = 'none';\n styles['border-right'] = 'none';\n }\n\n if (noBorders) {\n styles['border'] = 'none';\n } else {\n styles['min-width'] = columnWidth;\n styles['max-width'] = columnWidth;\n styles['width'] = columnWidth;\n }\n\n // The \"start\" value does align left when you are using a LTR browser.\n // In RTL browsers, the \"start\" value aligns right.\n // Since we want to dynamically apply alignment only depending on the service value, we are using \"left\"/\"right\" as values instead\n switch (column.align) {\n case ColumnAlign.START:\n styles['text-align'] = isRtl ? 'right' : 'left';\n break;\n case ColumnAlign.END:\n styles['text-align'] = isRtl ? 'left' : 'right';\n break;\n default:\n styles['text-align'] = 'center';\n break;\n }\n\n return styles;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TableColumnResizableSide } from '../directives/table-cell-resizable.directive';\n\n@Pipe({ name: 'columnResizableSide', standalone: true })\nexport class ColumnResizableSidePipe implements PipeTransform {\n /** @hidden */\n transform(\n columnIndex: number,\n visibleColumnsLength: number,\n navigationColumnShown: boolean | null\n ): TableColumnResizableSide {\n if (columnIndex === 0) {\n return 'end';\n }\n\n const isLastColumn = columnIndex === visibleColumnsLength - 1;\n\n if (isLastColumn && navigationColumnShown) {\n return 'start';\n }\n\n return 'both';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { SortDirection } from '../enums';\nimport { CollectionSort } from '../interfaces';\n\nexport const ARIA_SORT: Record<`${SortDirection}`, string> = {\n none: 'none',\n asc: 'ascending',\n desc: 'descending'\n};\n\n@Pipe({\n pure: true,\n standalone: true,\n name: 'fdpTableColumnSortingDirection'\n})\nexport class TableColumnSortingDirectionPipe implements PipeTransform {\n /** @hidden */\n transform(sorting: Nullable<CollectionSort>): string {\n if (!sorting) {\n return 'none';\n }\n\n return ARIA_SORT[sorting.direction];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isFunction, isString } from '@fundamental-ngx/platform/shared';\nimport { TableRowType } from '../enums/row-type.enum';\nimport { TableRow, TableRowClass } from '../models';\n\n@Pipe({ name: 'rowClasses', standalone: true })\nexport class RowClassesPipe implements PipeTransform {\n /** @hidden */\n transform(row: TableRow, rowsClass: TableRowClass): string {\n const treeRowClass = row.type === TableRowType.TREE ? 'fdp-table__row--tree' : '';\n const rowClasses = this._getRowCustomCssClasses(row, rowsClass);\n\n return rowClasses.concat(' ', treeRowClass).trim();\n }\n\n /** @hidden */\n private _getRowCustomCssClasses(row: TableRow, rowsClass: TableRowClass): string {\n if (!rowsClass) {\n return '';\n }\n\n let rowClasses = '';\n\n if (isString(rowsClass)) {\n rowClasses = rowsClass;\n }\n\n if (isFunction(rowsClass)) {\n rowClasses = (rowsClass as any)(row.value) || '';\n }\n\n return rowClasses.trim();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { SELECTION_COLUMN_WIDTH } from '../constants';\n\n@Pipe({ name: 'selectionCellStyles', standalone: true })\nexport class SelectionCellStylesPipe implements PipeTransform {\n /** @hidden */\n transform(\n contentDensity: Nullable<ContentDensityMode>,\n rtl: boolean,\n semanticHighlightingColumnWidth: number | null\n ): Record<string, string> {\n if (!contentDensity) {\n contentDensity = ContentDensityMode.COZY;\n }\n const rtlKey = rtl ? 'right' : 'left';\n const selectionColumnWidth = SELECTION_COLUMN_WIDTH.get(contentDensity) + 'px';\n\n return {\n [rtlKey]: (semanticHighlightingColumnWidth || 0) + 'px',\n 'min-width': selectionColumnWidth,\n 'max-width': selectionColumnWidth\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n FdpCellDef,\n FdpEditableCellDef,\n FdpEditableCellFormDirective,\n FdpHeaderCellDef,\n FdpTableCell,\n FdpTableHeader,\n FdpViewSettingsFilterCustomDef,\n PlatformTableCellResizableDirective,\n PlatformTableColumnResponsiveDirective,\n TableCellHeaderPopoverDirective,\n TableDataSourceDirective,\n TableDraggableDirective,\n TableHeaderResizerDirective,\n TableInitialStateDirective,\n TableScrollableDirective,\n TableVirtualScrollDirective\n} from './directives';\nimport { ColumnResizableSidePipe, RowClassesPipe, SelectionCellStylesPipe, TableCellStylesPipe } from './pipes';\n\nconst importExports = [\n TableInitialStateDirective,\n TableDraggableDirective,\n TableVirtualScrollDirective,\n PlatformTableColumnResponsiveDirective,\n FdpTableCell,\n TableCellHeaderPopoverDirective,\n PlatformTableCellResizableDirective,\n TableDataSourceDirective,\n TableDraggableDirective,\n FdpTableHeader,\n TableHeaderResizerDirective,\n TableInitialStateDirective,\n TableScrollableDirective,\n FdpCellDef,\n FdpEditableCellDef,\n FdpEditableCellFormDirective,\n FdpViewSettingsFilterCustomDef,\n TableVirtualScrollDirective,\n FdpHeaderCellDef,\n SelectionCellStylesPipe,\n TableCellStylesPipe,\n ColumnResizableSidePipe,\n RowClassesPipe\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...importExports],\n exports: [...importExports]\n})\nexport class TableHelpersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TableService","i1.TableScrollDispatcherService","isDataSource","filter","isString"],"mappings":";;;;;;;;;;;;;;MAesB,KAAK,CAAA;AAA3B,IAAA,WAAA,GAAA;;AAyKa,QAAA,IAAA,CAAA,qBAAqB,GAAuB,IAAI,YAAY,EAAQ;;AAGpE,QAAA,IAAA,CAAA,uBAAuB,GAAuB,IAAI,YAAY,EAAQ;;AAGtE,QAAA,IAAA,CAAA,sBAAsB,GAAuB,IAAI,YAAY,EAAQ;;AAGrE,QAAA,IAAA,CAAA,uBAAuB,GAAuB,IAAI,YAAY,EAAQ;;AAGtE,QAAA,IAAA,CAAA,uBAAuB,GAAsB,IAAI,YAAY,EAAQ;IAUlF;AAAC;;MC3MY,6BAA6B,GAAG,IAAI,cAAc,CAAiB,4BAA4B;MAC/F,yBAAyB,GAAG,IAAI,cAAc,CAAoB,wBAAwB;MAC1F,kCAAkC,GAAG,IAAI,cAAc,CAChE,gCAAgC;;ACC7B,MAAM,kBAAkB,GAA6B;AACxD,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,WAAW,EAAE;;AAGV,MAAM,0BAA0B,GAA0B;AAC7D,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE;;AAGP,MAAM,mBAAmB,GAAyB;AACrD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,WAAW,EAAE,0BAA0B;AACvC,IAAA,iBAAiB,EAAE;;AAGhB,MAAM,wBAAwB,GAAG;AAEjC,MAAM,2BAA2B,GAAG;AAEpC,MAAM,kCAAkC,GAAG;AAE3C,MAAM,sBAAsB,GAA4C,IAAI,GAAG,CAA6B;AAC/G,IAAA,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7B,IAAA,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;AAChC,IAAA,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE;AACpC,CAAA;AAEM,MAAM,sBAAsB,GAAG;AAE/B,MAAM,UAAU,GAA4C,IAAI,GAAG,CAA6B;AACnG,IAAA,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7B,IAAA,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;AAChC,IAAA,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE;AACpC,CAAA;;MCTY,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;;AAGa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAC,mBAAmB,CAAC;;AAEtD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,EAAE,kEAAC;;AAEnC,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,KAAK,2EAAC;;AAE/C,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,KAAK,qEAAC;;AAEzC,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CAAC,CAAC,6EAAC;;AAE7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,EAAE,2DAAC;;AAEpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,gEAAC;;AAE3D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,EAAE,2DAAC;;QAEpD,IAAA,CAAA,qBAAqB,GAAG,CAAC;;AAEhB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAgB,EAAE,CAAC;;AAEtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEnD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAc;;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAe;;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;;AAE3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAiB;;AAE7C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAc;;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAoB;;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAEnD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;AAEpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA8B,IAAI,GAAG,EAAE,sDAAC;AACpE;;;AAGG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAkC,IAAI,GAAG,EAAE,wDAAC;AAE1E;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAA+B,IAAI,GAAG,EAAE,CAAC;;AAGhF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAqY1D,IAAA;;IAlYG,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACtC;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;;AAGA,IAAA,eAAe,CAAC,SAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACtC;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;;AAGA,IAAA,MAAM,CAAC,WAAwB,EAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE;QAEvD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEnD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;AAErE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;AAGA,IAAA,OAAO,CAAC,SAAuC,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,aAAa,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;AAE3D,QAAA,MAAM,YAAY,GAAqB,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE;QAEtE,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE;QAEhE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;AAExB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B;IACJ;;AAGA,IAAA,OAAO,CAAC,SAA2B,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,aAAa,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;AAE3D,QAAA,MAAM,YAAY,GAAqB;YACnC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/F,YAAA,GAAG;SACN;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE;QAEhE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;AAExB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B;IACJ;;AAGA,IAAA,UAAU,CAAC,WAA2C,EAAA;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB;cACrC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACvB,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,aAAA,CAAC;cACF,EAAE;QACR,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAElE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;;AAGA,IAAA,UAAU,CAAC,UAA8B,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;AAE/D,QAAA,MAAM,cAAc,GAAuB;YACvC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACzB,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,aAAA,CAAC;SACL;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAClE,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;;AAGA,IAAA,aAAa,CAAC,MAAgB,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB,eAAe,CAAC,MAAM,CAC7D,CAAC,QAAQ,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjD;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;QAClE,IAAI,CAAC,mBAAmB,EAAE;AAE1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;AAGA,IAAA,SAAS,CAAC,MAAqC,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAEzD,QAAA,MAAM,SAAS,GAAsB,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;QAE9D,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC5D,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B;IACJ;;AAGA,IAAA,SAAS,CAAC,WAA8B,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAEzD,QAAA,MAAM,SAAS,GAAsB;YACjC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,YAAA,GAAG;SACN;QAED,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;QAE9D,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B;IACJ;;IAGA,QAAQ,CAAC,UAAyB,EAAE,GAAa,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;QACpE;aAAO;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QACvE;AAEA,QAAA,MAAM,GAAG,GAAG;AACR,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,QAAQ,EAAE,GAAG,GAAG,SAAS,CAAC,iBAAiB,GAAG,SAAS,CAAC;SAC3D;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;;IAGA,UAAU,CAAC,OAAiB,EAAE,IAAc,EAAA;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,WAAW,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE;AAE1D,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC;AAC/B,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE;QAE1F,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAEzB,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC;IACJ;;AAGA,IAAA,cAAc,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI;AAEpC,QAAA,IAAI,aAAa,CAAC,WAAW,KAAK,WAAW,EAAE;YAC3C;QACJ;QAEA,MAAM,KAAK,GAAe,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC;AAEvE,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE;AAE5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;;AAGA,IAAA,eAAe,CAAC,YAAoB,EAAE,eAAe,GAAG,IAAI,EAAA;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI;AAEpC,QAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC;QACJ;QAEA,IAAI,KAAK,GAAe,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC;QAEnE,IAAI,eAAe,EAAE;AACjB,YAAA,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE;AAE5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;;IAGA,eAAe,GAAA;AACX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,OAAO;YACH,UAAU,EAAE,UAAU,CAAC,UAAU;AACjC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,UAAU,CAAC,OAAO;AAC3B,YAAA,WAAW,EAAE;AACT,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,IAAI,EAAE;AACF,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA,iBAAiB,EAAE;SACtB;IACL;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,MAAM;IAC/C;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9G;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;AAC5C,QAAA,MAAM,yBAAyB,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC5D,YAAA,GAAG,IAAI;AACP,YAAA,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3D,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AAC5C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACrB;YACA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AACzB,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,EAAE,IAAI,GAAG,EAA8B,CAAC,CAC5C;AACD,QAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;AAE5E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1D;;IAGA,YAAY,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;QAE/D,MAAM,cAAc,GAAuB,EAAE;QAC7C,MAAM,KAAK,GAAe,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;QAEpE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE;YAElE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACJ;AAEA;;AAEG;IACH,sBAAsB,GAAA;QAClB,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;;IAGQ,aAAa,CAAC,KAAa,EAAE,SAA2B,EAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC;AAC7E,QAAA,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;IACtD;8GAjcS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;AAqcD;AACA,SAAS,qBAAqB,CAAC,KAAiB,EAAE,WAAmB,EAAA;IACjE,MAAM,YAAY,GAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE;IACnE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;AAC3C;AAEA;AACA,SAAS,kBAAkB,CAAC,KAAiB,EAAE,QAAgB,EAAA;IAC3D,MAAM,YAAY,GAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE;IAChE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;AAC3C;;MCpea,sBAAsB,CAAA;;AAW/B,IAAA,WAAA,CACoC,MAAa,EAC5B,aAA2B,EAC3B,OAAmB,EAAA;QAFJ,IAAA,CAAA,MAAM,GAAN,MAAM;QACrB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,OAAO,GAAP,OAAO;;AAZX,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,GAAG,EAAqC;;AAGrE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAU9C;AAEH;;;;AAIG;IACH,wBAAwB,CAAC,MAAmB,EAAE,WAAqD,EAAA;AAC/F,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEhF,IAAI,CAAC,oBAAoB,EAAE;IAC/B;AACA;;;AAGG;AACK,IAAA,qBAAqB,CAAC,WAAqD,EAAA;AAC/E,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AAC5C,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAI;YAClG,MAAM,CAAC,IAAI,CAAC;AACR,gBAAA,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ;AAC/D,gBAAA,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC3C,aAAA,CAAC;AAEF,YAAA,OAAO,MAAM;QACjB,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,cAAc;IACzB;AAEA;;;AAGG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;QAEvC,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;AACjE,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAC3D,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,yBAAyB,EAAE;AACpC,QAAA,CAAC,CAAC;IACV;;IAGQ,yBAAyB,GAAA;QAC7B,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAEpE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,IAAI,KAAI;YACtD,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CACtC,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,IAAI,KAAK,IAAI,UAAU,CAAC,GAAG,IAAI,KAAK,CACrE;YAED,IAAI,iBAAiB,EAAE;gBACnB,YAAY,GAAG,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,iBAAiB,CAAC,UAAU;AACpF,gBAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,UAAU;YACvD;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,YAAY,EAAE;YACf;QACJ;QAEA,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC;AAE7F,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;AACvE,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC3G;AA3FS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAYnB,KAAK,EAAA,EAAA,EAAA,KAAA,EAAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAZR,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;0BAaQ,MAAM;2BAAC,KAAK;;;MCtBC,WAAW,CAAA;AA4FhC;;MCzFY,sCAAsC,CAAA;AAC/C;;;AAGG;IACH,IACI,WAAW,CAAC,KAA+C,EAAA;AAC3D,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzD;QACJ;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;IAC1F;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;;IAMA,WAAA,CACqB,uBAA+C,EACd,OAA2B,EAAA;QAD5D,IAAA,CAAA,uBAAuB,GAAvB,uBAAuB;QACU,IAAA,CAAA,OAAO,GAAP,OAAO;;QALrD,IAAA,CAAA,YAAY,GAA6C,EAAE;IAMhE;AAzBM,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,qDAwBvB,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAxB1B,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,0BAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAyBQ;;0BAAY,MAAM;2BAAC,WAAW;;sBAnBlC,KAAK;uBAAC,0BAA0B;;;MCLxB,+BAA+B,CAAA;;AAExC,IAAA,WAAA,CAAmB,WAAgE,EAAA;QAAhE,IAAA,CAAA,WAAW,GAAX,WAAW;IAAwD;;AAGtF,IAAA,OAAO,sBAAsB,CACzB,SAA0C,EAC1C,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI;IACf;8GAVS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MC0BY,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB;MAGzE,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;;AAGY,QAAA,IAAA,CAAA,cAAc,GAA6B,IAAI,OAAO,EAAE;;AAExD,QAAA,IAAA,CAAA,sBAAsB,GAA6B,IAAI,OAAO,EAAE;;AAEhE,QAAA,IAAA,CAAA,wBAAwB,GAA6B,IAAI,OAAO,EAAE;;AAElE,QAAA,IAAA,CAAA,2BAA2B,GAAuC,IAAI,GAAG,EAAE;AA8CtF,IAAA;;AA3CG,IAAA,QAAQ,CAAC,UAA2B,EAAA;QAChC,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAClD;QACJ;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE;QAC9B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3F,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/G,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAE3G,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;IACzD;;AAGA,IAAA,UAAU,CAAC,UAA2B,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACnD;QACJ;QAEA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE;IACnE;;IAGA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC7C;;IAGA,oBAAoB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;IACvD;;IAGA,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;IACrD;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;AAE3G,QAAA,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE;IAC5C;8GArDS,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;AC3BM,MAAM,0BAA0B,GAAG;AAE1C;;;;;AAKG;MAEU,wBAAwB,CAAA;;AAIjC,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB;IACjC;;AASA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,CAAC;IACrC;;AAMA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;;AAGA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM;IAC9E;;AA8DA,IAAA,WAAA,CAA6B,6BAA2D,EAAA;QAA3D,IAAA,CAAA,6BAA6B,GAA7B,6BAA6B;;QA1FjD,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAsB,IAAI,GAAG,EAAE,CAAC;;AAO5E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,4DAAC;;AAQhC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;;AAalD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,GAAG,EAAkB;;AAGjD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAkD;;QAG3E,IAAA,CAAA,mBAAmB,GAAa,EAAE;;AAGlC,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,GAAG,EAA8B;;AAGtE,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,GAAG,EAA8B;;AAGvE,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,GAAG,EAAkB;;AAGzD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,GAAG,EAAkB;;QAG1D,IAAA,CAAA,OAAO,GAAkB,IAAI;;QAG7B,IAAA,CAAA,aAAa,GAAkB,IAAI;;AAGnC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;;QAMhD,IAAA,CAAA,gBAAgB,GAAkB,IAAI;;QAGtC,IAAA,CAAA,WAAW,GAAG,CAAC;;AAGf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;AAGnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG/B,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAE;;AAMpC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;AAGzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAIE,QAAA,IAAI,CAAC;AACD,cAAE,oBAAoB;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE;AACjD,QAAA,CAAC,CAAC;IACV;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAElC,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;IAC/C;;AAGA,IAAA,WAAW,CAAC,GAAU,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;IACxB;;AAGA,IAAA,cAAc,CAAC,kBAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE;AAC3C,QAAA,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE;QAC5C,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACzC,YAAA,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAClF,QAAA,CAAC,CAAC;QACF,kBAAkB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACnD,YAAA,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACnF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,kBAAkB,CAAC;QAClD,IAAI,CAAC,wBAAwB,EAAE;IACnC;;IAGA,wBAAwB,GAAA;AACpB,QAAA,IAAI,iBAAiB,GAAG,CAAC,EACrB,aAAa,GAAG,CAAC;AACrB,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE;YAC9E,iBAAiB;gBACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC;YACzG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACrE;AACA,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,EAAE;YAC/E,aAAa;gBACT,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC;YACzG,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;QAClE;IACJ;;IAGA,mCAAmC,CAAC,UAAkB,EAAE,KAAa,EAAA;QACjE,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,EAAE;AACxE,YAAA,IAAI,MAAM,KAAK,UAAU,EAAE;gBACvB,KAAK,GAAG,IAAI;YAChB;iBAAO,IAAI,KAAK,EAAE;gBACd,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;YACjE;QACJ;IACJ;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC;QAClE,OAAO,eAAe,IAAI,OAAO;IACrC;;AAGA,IAAA,qBAAqB,CAAC,UAAkB,EAAA;QACpC,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9D;;AAGA,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAChC,OAAO,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/D;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IAClE;;AAGA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IACnE;;IAGA,kBAAkB,CAAC,UAAkB,EAAE,SAAqB,EAAA;AACxD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;IACrE;;IAGA,oBAAoB,CAAC,UAAkB,EAAE,SAAqB,EAAA;AAC1D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AAC9D,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,CAAC;AAE1F,QAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;YACjB;QACJ;AAEA,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC;IACrD;;IAGA,cAAc,CAAC,UAAkB,EAAE,KAAa,EAAA;QAC5C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QACjD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;IAChE;;IAGA,yBAAyB,CAAC,eAAuB,EAAE,aAAqB,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,QAAA,IAAI,eAAe,IAAI,IAAI,EAAE;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,eAAe,GAAG,0BAA0B,GAAG,gBAAgB;YACvF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO;QAElC,IAAI,CAAC,iCAAiC,EAAE;AAExC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC;;AAGA,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAE3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY;AAEzF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC9B;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa;QACxF,MAAM,WAAW,GAAG,cAAc,EAAE,qBAAqB,EAAE,CAAC,KAAK;AAEjE,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE;YACjC;QACJ;AAEA,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;YACtE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,WAAW;QAC3D;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;AAC9D,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC1B,UAAU,EACV,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAC9D;gBACL;YACJ;YACA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAChE;AAEA;;;AAGG;QACH,IACI,KAAK,GAAG,CAAC;aACR,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AACtD,gBAAA,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EACpE;AACE,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,WAAW;AAC7E,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC/D,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,WAAW;YAC7E;AACA,YAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,kCAAkC,EAAE;AACpE,YAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;oBAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9C,gBAAA,CAAC,CAAC;YACN;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAC;QACxE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC5D,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;QAEpE,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAC9D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;AACpG,QAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,GAAG,OAAO,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;IAGQ,iCAAiC,GAAA;QACrC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAa,QAAQ,EAAE,WAAW;AACtE,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACrB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY;AAEzF,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK;YACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAEhD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAC7B,QAAA,CAAC,CAAC;IACV;AAEA;;;;;AAKG;AACK,IAAA,0BAA0B,CAAC,YAAoB,EAAA;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAChB,aAAA,GAAG,CAAC,IAAI,CAAC,cAAc;AACxB,cAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,aAAa;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC;AACzG,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,cAAc,CAAA,CAAE,CAAC;AAEzG,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE;YACnC;QACJ;QACA,aAAa,CAAC,eAAe,GAAG,cAAc,CAAC,WAAW,GAAG,YAAY;IAC7E;8GA1WS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACPM,MAAM,iCAAiC,GAAG;AAEjD;;AAEG;AAmBG,MAAO,mCACT,SAAQ,kBAAkB,CAAA;AAnB9B,IAAA,WAAA,GAAA;;;QAqCY,IAAA,CAAA,cAAc,GAA6B,MAAM;;AAGxC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,kDAAC;;AAGlD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AA+E1C,IAAA;;IA3GG,IACI,aAAa,CAAC,KAA+B,EAAA;QAC7C,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC/B;;IAwBA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAC9B,SAAS,CAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW;iBAC3D,IAAI,CACD,MAAM,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,KAAK,IAAI,CAAC,EACvE,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EACjG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;AACtG,YAAA,CAAC,CAAC;YACN,SAAS,CAAa,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO;AACvD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;gBACZ,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAChF,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB;QACJ;AAEA,QAAA,IAAI,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;IACxF;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;IAC1F;;AAGQ,IAAA,WAAW,CAAC,KAAiB,EAAA;AACjC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AACxC,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC,qBAAqB,EAAE;;QAE7C,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;AACzF,YAAA,IAAI,eAAmC;AACvC,YAAA,IAAI,aAAiC;AAErC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;kBAC3B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG;kBACnC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,iCAAiC;YAEzE,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE;AAChD,gBAAA,eAAe,GAAG,IAAI,CAAC,MAAM;AACzB,sBAAE,EAAE,CAAC,aAAc,CAAC,WAAW,IAAI,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW;AACjE,sBAAE,EAAE,CAAC,UAAU;gBAEnB,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YACzF;AAEA,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM;kBAC5B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG;kBAClC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,iCAAiC;YAE1E,IAAI,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,EAAE;AACnD,gBAAA,eAAe,GAAG,IAAI,CAAC,MAAM;sBACvB,EAAE,CAAC,aAAc,CAAC,WAAW,GAAG,EAAE,CAAC;sBACnC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW;AAEpC,gBAAA,aAAa,GAAG,IAAI,CAAC,UAAU;YACnC;YAEA,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,OAAO,EAAE,eAAe,EAAE,eAAgB,EAAE,aAAa,EAAE;QAC/D;aAAO;AACH,YAAA,OAAO,IAAI;QACf;IACJ;8GA/GS,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAfjC;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAlB/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAA;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,WAAW,EAAA;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAMI,KAAK;uBAAC,uBAAuB;;sBAU7B;;;MC/CiB,iBAAiB,CAAA;AAEtC;;ACMD;AACA;AAEA;MACa,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAFxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAI3D;;;AAGG;AAEH;MACa,UAAU,CAAA;;AAKnB,IAAA,WAAA,CAAmB,WAA8C,EAAA;QAA9C,IAAA,CAAA,WAAW,GAAX,WAAW;IAAsC;;AAGpE,IAAA,OAAO,sBAAsB,CAAI,GAAkB,EAAE,GAAsB,EAAA;AACvE,QAAA,OAAO,IAAI;IACf;8GAVS,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAFtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAIpD;;AAYL;MACa,kBAAkB,CAAA;;AAE3B,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;8GAF1C,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAF9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;;MAYpD,4BAA4B,CAAA;;AAErC,IAAA,WAAA,CAAmB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;8GAFzB,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAF1B,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE7E,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAA,4BAA8B,EAAE;AACxF,iBAAA;;;IC9CW;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,eAAwB;AACxB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,cAAsB;AACtB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EANW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAQV;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAChC,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,wBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;;ACLpC;AACO,MAAM,eAAe,GAAG;AAC3B,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,YAAY,EAAE;;AAOX,MAAM,qBAAqB,GAAoD;AAClF,IAAA,OAAO,EAAE,6CAA6C;AACtD,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,OAAO,EAAE,6CAA6C;AACtD,IAAA,UAAU,EAAE,gDAAgD;AAC5D,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,WAAW,EAAE,iDAAiD;AAC9D,IAAA,oBAAoB,EAAE,0DAA0D;AAChF,IAAA,QAAQ,EAAE,8CAA8C;AACxD,IAAA,iBAAiB,EAAE,uDAAuD;AAC1E,IAAA,KAAK,EAAE,2CAA2C;AAClD,IAAA,SAAS,EAAE,+CAA+C;AAC1D,IAAA,MAAM,EAAE,4CAA4C;AACpD,IAAA,UAAU,EAAE;;AAGhB;AACO,MAAM,oBAAoB,GAG7B;AACA,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,YAAY,EAAE;;AAKX,MAAM,sBAAsB,GAAsC,MAAM,CAAC,MAAM,CAAC,oBAAoB;AAE3G;AACO,MAAM,sBAAsB,GAA6E;AAC5G,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE;;AAKF,MAAM,wBAAwB,GAAwC,MAAM,CAAC,MAAM,CAAC,sBAAsB;AAEjH;AACO,MAAM,sBAAsB,GAG/B;AACA,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,EAAE,EAAE,UAAU;AACd,IAAA,GAAG,EAAE;;AAOF,MAAM,wBAAwB,GAAwC,MAAM,CAAC,MAAM,CAAC,sBAAsB;AAEjH;AACO,MAAM,uBAAuB,GAAmC;AACnE,IAAA,EAAE,EAAE;;AAKD,MAAM,yBAAyB,GAAwC,MAAM,CAAC,MAAM,CAAC,uBAAuB;AAEnH;AACO,MAAM,uBAAuB,GAAmC;AACnE,IAAA,EAAE,EAAE;;AAKD,MAAM,yBAAyB,GAAwC,MAAM,CAAC,MAAM,CAAC,uBAAuB;AAEnH;AACO,MAAM,kCAAkC,GAAG,CAC9C,QAAkC,KAC+B;IACjE,QAAQ,QAAQ;QACZ,KAAK,wBAAwB,CAAC,MAAM;AAChC,YAAA,OAAO,wBAAwB;QACnC,KAAK,wBAAwB,CAAC,MAAM;AAChC,YAAA,OAAO,wBAAwB;QACnC,KAAK,wBAAwB,CAAC,IAAI;AAC9B,YAAA,OAAO,sBAAsB;QACjC,KAAK,wBAAwB,CAAC,OAAO;AACjC,YAAA,OAAO,yBAAyB;AAEpC,QAAA;AACI,YAAA,OAAO,yBAAyB;;AAE5C;;IChIY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;ICAX;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;ICAZ;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;ICAb;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MCYZ,cAAc,GAAG,CAAC,IAAgB,EAAE,MAA8B,KAAgB;AAC3F,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACpE,IAAA,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE;AAE/E,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,KAAK,WAAW,CAAC;QAC7F,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,WAAW,CAAC;QAC3F,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC;QAC5F,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,WAAW,CAAC;QAC3F,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC;QAC5F,KAAK,sBAAsB,CAAC,OAAO;AAC/B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE;AAC/D,gBAAA,OAAO,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY;AAC9D,YAAA,CAAC,CAAC;QACN,KAAK,sBAAsB,CAAC,WAAW;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrG,KAAK,sBAAsB,CAAC,SAAS;AACjC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACnG,KAAK,sBAAsB,CAAC,QAAQ;AACpC,QAAA;AACI,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,gBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9B,oBAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;gBAClC;gBAEA,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7D,YAAA,CAAC,CAAC;;AAEd;MAEa,cAAc,GAAG,CAAC,IAAgB,EAAE,MAA8B,KAAgB;AAC3F,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;AAEvC,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC;QACzE,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QACvE,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;QACxE,KAAK,sBAAsB,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QACvE,KAAK,sBAAsB,CAAC,GAAG;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;QACxE,KAAK,sBAAsB,CAAC,OAAO;AAC/B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AAC3C,gBAAA,OAAO,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY;AAC9D,YAAA,CAAC,CAAC;AACN,QAAA;AACI,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;AAElG;AAEO,MAAM,YAAY,GAAG,CACxB,IAAgB,EAChB,MAA4B,EAC5B,OAA2B,KACf;AACZ,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM;AAElC,IAAA,QAAQ,MAAM,CAAC,QAAQ;QACnB,KAAK,oBAAoB,CAAC,KAAK;AAC3B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/F,KAAK,oBAAoB,CAAC,WAAW;AACjC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChG,KAAK,oBAAoB,CAAC,MAAM;AAC5B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/F,KAAK,oBAAoB,CAAC,YAAY;AAClC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChG,KAAK,oBAAoB,CAAC,OAAO;AAC7B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACvG,KAAK,oBAAoB,CAAC,EAAE;AAC5B,QAAA;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;;AAEtG;AAEO,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAE,MAA+B,KAC7E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK;AAE3D,MAAM,wBAAwB,GAAG,CAAuB,IAAS,EAAE,GAAM,KAC5E,KAAK,CAAC,IAAI,CACN;AACK,KAAA,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;IAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACxB,IAAA,OAAO,GAAG;AACd,CAAC,EAAE,IAAI,GAAG,EAAW;KACpB,MAAM,EAAE;AAGd,MAAM,iBAAiB,GAAG,CAAC,QAAkB,KAAY;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,IAAA,GAAG,CAAC,WAAW,GAAG,GAAG;AACrB,IAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAC/B,IAAA,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AAC/B,IAAA,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ;AAC9B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;AACxD,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,IAAA,OAAO,cAAc;AACzB;AAEA;AACM,SAAU,kBAAkB,CAAC,IAAS,EAAA;AACxC,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAC7F;;MC3GsB,qBAAqB,CAAA;AAA3C,IAAA,WAAA,GAAA;;AAkBc,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;IAoS7C;AAlSI;;;;AAIG;IACH,UAAU,CAAC,QAAoC,EAAE,WAAyB,EAAA;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;AAEA;;;;;AAKG;IACH,cAAc,CAAC,KAAU,EAAE,OAAmC,EAAA;AAC1D,QAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,kBAAkB,CAAC,IAAS,EAAA;AACxB,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;IACjD;AAEA;;;;;;AAMG;IACH,oBAAoB,CAAC,IAAO,EAAE,OAAmC,EAAA;AAC7D,QAAA,OAAO;aACF,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK;AACrC,aAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AACd,YAAA,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC;YACtD;YAEA,OAAO,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3D,QAAA,CAAC,CAAC;IACV;AAEA;;;;;;AAMG;IACH,wBAAwB,CAAC,IAAO,EAAE,MAAwB,EAAA;AACtD,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAiC,CAAC;gBACpE;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAgC,CAAC;gBAClE;YACJ,KAAK,MAAM,EAAE;AACT,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAA8B,EAAE,IAAI,CAAC,eAAe,CAAC;gBACpF;YACJ;AACA,YAAA,KAAK,QAAQ;AACb,YAAA;gBACI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;sBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAgC;sBACvD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAgC,CAAC;gBAC/D;;AAGR,QAAA,OAAO,MAAM;IACjB;AAEA;;;;;AAKG;IACH,6BAA6B,CAAC,IAAO,EAAE,MAA6B,EAAA;AAChE,QAAA,OAAO,MAAM,CAAC,QAAQ,KAAK;cACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC;cAClE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,KAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAc,EAAA;AACtD,QAAA,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,IAAI,EAAE;QAC1C,MAAM,cAAc,GAAG,UAAU;AAEjC,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACzD,YAAA,OAAO,KAAK;QAChB;QAEA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC1B,YAAA,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAEnE,YAAA,OAAO;iBACF,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;iBACzB,GAAG,CAAC,CAAC,KAAK,KAAa,KAAK,CAAC,QAAQ,EAAE;AACvC,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC5F,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;AAKG;IACO,YAAY,CAAC,IAAO,EAAE,MAA8B,EAAA;AAC1D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACpE,QAAA,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE;QAC/E,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AAEvC,QAAA,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,iBAAiB,EAAE,GAAG,SAAS;AAEjE,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;gBAClC;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,sBAAsB;AACvB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,mBAAmB;AACpB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,SAAS,IAAI,WAAW,IAAI,SAAS,IAAI,YAAY;gBAC9D;AACJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC1C;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACxC;AACJ,YAAA,KAAK,UAAU;AACf,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,SAAS,KAAK,WAAW;;AAGxF,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,YAAY,CAAC,IAAO,EAAE,MAA8B,EAAA;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAA0B,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAA2B,CAAC,IAAI,CAAC;AAC/E,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,aAAa;AACd,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,sBAAsB;AACvB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,SAAS,GAAG,WAAW;gBAChC;AACJ,YAAA,KAAK,mBAAmB;AACpB,gBAAA,MAAM,GAAG,SAAS,IAAI,WAAW;gBACjC;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,SAAS,IAAI,WAAW,IAAI,SAAS,IAAI,YAAY;gBAC9D;AACJ,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;;AAG1C,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;;AAMG;AACO,IAAA,UAAU,CAAa,IAAO,EAAE,MAA4B,EAAE,OAA4B,EAAA;QAChG,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACX,yGAAyG,CAC5G;QACL;AAEA,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC;AACxD,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,OAAO;AACR,gBAAA,MAAM,GAAG,IAAI,GAAG,CAAC;gBACjB;AACJ,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC;gBAClB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,MAAM,GAAG,IAAI,GAAG,CAAC;gBACjB;AACJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC;gBAClB;AACJ,YAAA,KAAK,SAAS;gBACV,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC;gBAChE;AAEJ,YAAA,KAAK,SAAS;AACd,YAAA;gBACI,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;;AAG/D,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,aAAa,CAAC,IAAO,EAAE,MAA+B,EAAA;AAC5D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,SAAS,KAAK,WAAW;;AAG1C,QAAA,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IAC5C;AAEA;;;;;AAKG;IACO,WAAW,CAAC,IAAO,EAAE,MAA8B,EAAA;QACzD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,YAAA,KAAK,SAAS;AACd,YAAA;AACI,gBAAA,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;;AAGjD,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM;IACpE;;IAGU,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7B;AACH;AAEK,MAAO,iBAAqB,SAAQ,qBAAwB,CAAA;AAC9D;;;;AAIG;;AAEH,IAAA,KAAK,CAAC,UAAuB,EAAA;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;IAClG;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACzB,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAClF;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrD;AAEA,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B;IACL;AAEA;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,IAAI,KAAI;YACT,MAAM,OAAO,GAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC9C,gBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACvB,gBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK;AACzB,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAgB,yBAA6B,SAAQ,qBAA+C,CAAA;AAOtG;;;;;AAKG;;IAEH,KAAK,CAAC,UAAuB,EAAE,UAA0B,EAAA;AACrD,QAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;IAClG;AAEA;;;;;AAKG;IACH,SAAS,CAAC,KAAiB,EAAE,SAAyB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,KAAK,KAAI;YACV,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC5B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxF;AAEA,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC3D;AAEA,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,oBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBACrB;qBAAO;AACH,oBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAC5B;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B;IACL;AACH;;MC1aqB,mBAAmB,CAAA;;AAyBrC,IAAA,WAAA,GAAA;;AAjBmB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAI,EAAS,CAAC;;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;;AAG1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAW;;AASzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;QAI9C,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;IAC/D;AAEA;;;AAGG;AACH,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAChD;AAEA;;;AAGG;AACH,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC/C;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK;IACnC;;IAGA,IAAI,GAAA;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;;IAGA,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACxE;;IAGA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACvE;;AAGA,IAAA,KAAK,KAAU;AAEf;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7B;AACH;AAEK,MAAO,eAAmB,SAAQ,mBAAsB,CAAA;AAC1D;;AAEG;AACH,IAAA,WAAA,CAAqB,YAAkC,EAAA;AACnD,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,UAAsB,EAAA;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAExB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC9C,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC;AACH,SAAA,CAAC;IACN;AACH;AAEK,MAAO,oBAAwB,SAAQ,mBAI5C,CAAA;AACG;;AAEG;AACH,IAAA,WAAA,CAAqB,YAA0C,EAAA;AAC3D,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEA;;;;;AAKG;IACH,KAAK,CAAC,UAAsB,EAAE,UAA0B,EAAA;AACpD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC7E,MAAM,oBAAoB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAEhC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AAC1D,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,GAAG,oBAAoB;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,oBAAoB;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC;AACH,SAAA,CAAC;IACN;AACH;;AC5KD;;;;;AAKG;AACG,MAAO,sBAA0B,SAAQ,iBAAoB,CAAA;;IAK/D,WAAA,CAAY,KAAU,EAAE,eAAsC,EAAA;AAC1D,QAAA,KAAK,EAAE;;AAJD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAK3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,KAAkB,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,KAAK,EAAE,WAAW,EAAE;gBACpB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC;AAEA,YAAA,IAAI,KAAK,EAAE,QAAQ,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM;AAE9B,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAO,oBAAwB,SAAQ,eAAkB,CAAA;;IAE3D,WAAA,CAAY,IAAS,EAAE,eAAsC,EAAA;QACzD,KAAK,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC5D;AACH;;AChDD;;;;;AAKG;AACG,MAAO,2BAA+B,SAAQ,iBAAoB,CAAA;;IAKpE,WAAA,CAAY,MAAuB,EAAE,eAAsC,EAAA;AACvE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,KAAkB,EAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,KAAK,EAAE,WAAW,EAAE;gBACpB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC;AAEA,YAAA,IAAI,KAAK,EAAE,QAAQ,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM;AAE9B,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,CACL;IACL;AACH;AAEK,MAAO,yBAA6B,SAAQ,eAAkB,CAAA;;IAEhE,WAAA,CAAY,IAAqB,EAAE,eAAsC,EAAA;QACrE,KAAK,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACjE;AACH;;MCjDY,qBAAqB,CAAA;;AAE9B,IAAA,KAAK,CAAC,MAAqB,EAAA;AACvB,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAA4B;QACvC;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC;QAC3C;AAEA,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC;QAChD;AAEA,QAAA,OAAO,SAAS;IACpB;AACH;;ACFK,MAAO,wBAA4B,SAAQ,mBAA0C,CAAA;AAV3F,IAAA,WAAA,GAAA;;;AA4BI,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;;AAIxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAI1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGlD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,CAAC,uDAAC;;AAG/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;;AAGrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAyB;;QAMlD,IAAA,CAAA,iBAAiB,GAAG,KAAK;;QAGzB,IAAA,CAAA,qBAAqB,GAAG,KAAK;;QAG7B,IAAA,CAAA,6BAA6B,GAAG,KAAK;;AAM7B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAE;;AAkBhC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,yBAAyB,EAAE;AACjF,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AA4IxD,IAAA;AAvNG;;;AAGG;IACH,IACI,eAAe,CAAC,MAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;QAC9B,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACtC;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;IAChC;;IA0CA,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;;IAiBA,oBAAoB,GAAA;QAChB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC9F,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACN;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;IAC5C;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;;AAGG;IACK,0BAA0B,GAAA;AAC9B,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AAEnC,YAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;QAC5C;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAK;AAClD,YAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI;YACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAK;AACjD,YAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK;YAC1C,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC;AAChB,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAC1B,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,aAAa,KAAI;YACzB,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvF,CAAC,CAAC,CACT;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC3F,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CACL;IACL;AAEA;;;;;AAKG;IACK,mBAAmB,GAAA;AACvB,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB;AAChD,QAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2EAAA,CAA6E,CAAC;QAClG;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC;AAC9D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,gBAAgB,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAK;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACjC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,gBAAgB,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YAC7B,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;;AAG5D,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC7B,oBAAA,GAAG,KAAK;oBACR,GAAG;AACC,wBAAA,IAAI,EAAE;4BACF,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW;4BACrE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;AAChD;AACJ;AACJ,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,KAAK;YAC1C;QACJ,CAAC,CAAC,CACL;;QAGD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;AAE1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;IAC5C;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAE7B,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAChC;8GAvNS,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAPtB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,0BAA0B;AACnC,4BAAA,QAAQ,EAAE;AACb;AACJ;AACJ,iBAAA;;sBAMI;;sBAYA;;sBAIA;;sBAIA;;;ACwDL;AACM,SAAU,UAAU,CAAU,GAAgB,EAAA;IAChD,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;AAChH;MAEa,YAAY,CAAA;;IAErB,IAAI,OAAO,CAAC,KAAqB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AACA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACrC;;IAqBA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC/B,YAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK;AAC5B,QAAA,CAAC,CAAC;IACN;AACA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACtC;;AAmCA,IAAA,WAAA,CAAY,GAAsB,EAAA;;AAzDzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGnD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;QAGjE,IAAA,CAAA,UAAU,GAAG,KAAK;;AA8CD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAEtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAiB,KAAK,CAAC;AAIzE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK;QACnC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE;QAClC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,KAAK;QACzC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,KAAK;QACrC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK;QACjC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,KAAK;QAC3C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI;QAChC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;IAClD;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;IACjD;AACH;;AC3LD;AACM,SAAU,WAAW,CAAU,GAAyB,EAAA;AAC1D,IAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;IAC5E;IAEA,OAAO,IAAI,YAAY,CAAC;AACpB,QAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI;AACnC,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;AAC7B,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACrB,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;AAC1B,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AACrB,QAAA,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;AACnC,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;AAC/B,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;AAC3B,QAAA,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK;AACrC,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU;AAC9B,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI;AAC7B,KAAA,CAAC;AACN;AAEA;AACM,SAAU,iBAAiB,CAAC,IAAgB,EAAE,aAAqB,EAAA;AACrE,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACpE;AAEA;AACM,SAAU,eAAe,CAAC,GAAa,EAAE,aAAqB,EAAA;IAChE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK;AACnF;AAEA;AACM,SAAU,SAAS,CAAC,GAAa,EAAA;AACnC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;AACzC;AAEA;AACM,SAAU,SAAS,CAAC,GAAa,EAAA;AACnC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;AACzC;AAEA;;;;;AAKG;AACG,SAAU,6BAA6B,CAAI,IAAmB,EAAE,cAAgC,EAAA;IAClG,IAAI,QAAQ,GAAe,EAAE;AAE7B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAS,EAAE,cAAc,CAAC;AAC9D,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5F;IACJ;AACA,IAAA,OAAO,QAAQ;AACnB;AAEA;AACM,SAAU,gBAAgB,CAAI,GAAM,EAAE,cAAgC,EAAA;IACxE,IAAI,CAAC,GAAG,EAAE;AACN,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC1B,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,cAAwB,CAAC;IAC1C;IAEA,OAAO,CAAC,CAAC,cAAc;AAC3B;AAEA;AACM,SAAU,mBAAmB,CAAC,OAAsB,EAAE,eAAuB,EAAA;AAC/E,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;IAE7C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACd;QACJ;;QAGA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;AAE9C,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;AACjC,YAAA,OAAO,WAAW;QACtB;IACJ;IAEA,OAAO,IAAI,GAAG,EAAE;AACpB;AAEA;AACM,SAAU,sBAAsB,CAAC,OAAsB,EAAE,kBAA0B,EAAA;AACrF,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;IAE7C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;;AAE1C,QAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;QAElD,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACxC,YAAA,OAAO,WAAW;QACtB;IACJ;IAEA,OAAO,IAAI,GAAG,EAAE;AACpB;AAEA;AACM,SAAU,6BAA6B,CACzC,MAAW,EACX,aAAiC,EACjC,SAAwB,EACxB,aAA+B,EAC/B,WAAmB,EACnB,cAAsB,EACtB,WAAmB,EACnB,gBAAwB,EACxB,cAAgC,EAChC,kBAAkB,GAAG,KAAK,EAAA;IAE1B,MAAM,IAAI,GAAkB,EAAE;AAC9B,IAAA,MAAM,eAAe,GAAG,4BAA4B,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC;IAErG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAO,EAAE,KAAa,KAAI;AACtC,QAAA,MAAM,WAAW,GACb,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACvD,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;AAE5B,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,IAAmB;AACtC,cAAG;cACD,WAAW,CAAC;gBACR,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC1F,gBAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzD,KAAK;AACL,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC;AAER,QAAA,GAAG,CAAC,QAAQ;AACR,YAAA,gBAAgB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB;AAC3E,kBAAE,IAAI,CAAC,gBAAgB;kBACrB,KAAK;QACf,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAEd,IAAI,WAAW,EAAE;YACb,MAAM,QAAQ,GAAG,6BAA6B,CAC1C,IAAI,CAAC,WAAW,CAAC,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,kBAAkB,CACrB;AAED,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACnB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG;gBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACjC,YAAA,CAAC,CAAC;YACF,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AAE9B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC1B;QACA,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;YAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE;gBACjC,MAAM,gBAAgB,GAAkB,EAAE;gBAC1C,MAAM,qBAAqB,GAAkB,EAAE;AAC/C,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AACxB,wBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;oBAChC;AAAO,yBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AAC/B,wBAAA,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;oBACrC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;AACtF,gBAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAChD,IAAI,CAAC,CAAC,OAAO,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;oBACvD,wBAAwB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;oBACzC;gBACJ;gBACA,IAAI,CAAC,kBAAkB,EAAE;oBACrB;gBACJ;gBACA,IAAI,WAAW,EAAE;AACb,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI;oBAChB;gBACJ;gBACA,IAAI,YAAY,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI;oBAChB;gBACJ;AACJ,YAAA,CAAC,CAAC;QACN;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,IAAI;AACf;AAEA;;;;;;AAMG;AACG,SAAU,4BAA4B,CACxC,MAAW,EACX,aAAiC,EACjC,SAAqB,EACrB,aAA+B,EAAA;AAE/B,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB;AAC3C,IAAA,IACI,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ;AACnF,QAAA,OAAO,aAAa,KAAK,UAAU,EACrC;AACE,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACtD,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;YAClC;AACJ,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,MAAM;AACjB;AAEA;AACM,SAAU,wBAAwB,CACpC,OAA2B,EAC3B,GAAa,EACb,SAAwB,EACxB,WAA0B,EAAA;IAE1B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC;AAEjD,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACtB,QAAA,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;QACvB,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,IAAA,CAAC,CAAC;AACN;AAEA;AACM,SAAU,eAAe,CAAI,GAAgB,EAAE,OAAsB,EAAA;AACvE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;AAEjC;;;;AAIG;IAEH,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,IAAA,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC;IAClC,MAAM,QAAQ,GAAkB,EAAE;AAElC,IAAA,OAAO,KAAK,EAAE,GAAG,UAAU,EAAE;AACzB,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtD;QACJ;AACA,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1B;AAEA,IAAA,OAAO,QAAQ;AACnB;AAEA;;;;;;AAMG;SACa,aAAa,CAAI,GAAgB,EAAE,cAAkC,IAAI,EAAA;AACrF,IAAA,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;IAClC,MAAM,OAAO,GAAkB,EAAE;IACjC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;AAChC,IAAA,OAAO,MAAM,IAAI,MAAM,KAAK,WAAW,EAAE;AACrC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI;IAClC;AACA,IAAA,OAAO,OAAO;AAClB;AAEA;AACM,SAAU,YAAY,CAAI,MAA6B,EAAA;AACzD,IAAA,IAAIC,cAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,OAAO,MAA4B;IACvC;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,QAAA,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC;IAC3C;AAEA,IAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC;IAChD;AAEA,IAAA,OAAO,SAAS;AACpB;AACA;;;;AAIG;AACG,SAAU,mBAAmB,CAAI,mBAAsB,EAAE,OAAsB,EAAA;IACjF,IAAI,mBAAmB,EAAE;AACrB,QAAA,OAAO,eAAe,CAAC,mBAAmB,CAAC;IAC/C;IAEA,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;QACvB,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/C,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAW;AACtB;AAEA;AACM,SAAU,UAAU,CAAC,GAAa,EAAA;AACpC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK;AAC1C;AAEA;AACM,SAAU,uBAAuB,CACnC,WAAiC,EACjC,aAA2C,EAAA;AAE3C,IAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;AAChD,QAAA,OAAO,WAAW;IACtB;IAEA,MAAM,YAAY,GAAG,WAA2D;AAChF,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;AAEhC,IAAA,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3B,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACjB,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC;QAC7E;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IAEzD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,aAAa,CAAC,IAAI,EAAE;AAC1D,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;AACrC,IAAA,MAAM,mBAAmB,GAAG,SAAS,KAAK,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;AAE3G,IAAA,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAY;AACnC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAY;QAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAClD,YAAA,OAAO,CAAC,OAAO,GAAG,OAAO,IAAI,mBAAmB;QACpD;AAEA,QAAA,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,mBAAmB;AAC3D,IAAA,CAAC,CAAC;AACN;AAEA;AACM,SAAU,yBAAyB,CAAI,YAA2B,EAAA;IACpE,IAAI,QAAQ,GAAQ,EAAE;AAEtB,IAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AAC7B,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS;QACzB;IACJ;AAEA,IAAA,OAAO,QAAQ;AACnB;AAEA;;;;;;;;AAQG;AACG,SAAU,0BAA0B,CACtC,KAAwB,EACxB,IAAgB,EAChB,MAAA,GAA0B,IAAI,EAC9B,KAAK,GAAG,CAAC,EAAA;AAET,IAAA,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;AAElB,IAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;;AAEf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACpB,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,YAAA,GAAG,CAAC,KAAK,GAAG,KAAK;YACjB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;AACzC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG;;IAG3B,MAAM,UAAU,GAAG;SACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU;AACpC,SAAA,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;AAClB,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5B;QAEA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAE/B,QAAA,OAAO,IAAI;AACf,IAAA,CAAC,EAAE,IAAI,GAAG,EAAuB,CAAC;;IAGtC,IAAI,gBAAgB,GAAyB,EAAE;AAE/C,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE;AAC1C,QAAA,gBAAgB,GAAG;aACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU;AACpC,aAAA,GAAG,CAAC,CAAC,GAAG,KAAI;AACT,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,YAAA,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;AACzC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACV;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAClD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEnE,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B;QACJ;QAEA,MAAM,aAAa,GAA+C,WAAW,CAAyB;YAClG,IAAI,EAAE,YAAY,CAAC,KAAK;AACxB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7C,MAAM;YACN,KAAK;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC;AAC/B,SAAA,CAAC;;AAGF,QAAA,aAAa,CAAC,SAAS,GAAG,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC;QAEnG,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM;AAE3D,QAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;IACxC;AAEA,IAAA,OAAO,gBAAgB;AAC3B;AAEA;AACM,SAAU,yBAAyB,CACrC,MAAW,EACX,UAAe,EACf,WAAmB,EACnB,cAAgC,EAChC,aAAiC,EACjC,IAAgB,EAChB,aAA4B,EAAA;AAE5B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAQ;AAEhC,IAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;AACrB,QAAA,OAAO,MAAoB;IAC/B;AAEA,IAAA,MAAM,eAAe,GAAG,4BAA4B,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC;IAChG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAO,EAAE,KAAa,KAAI;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3C,MAAM,GAAG,GAAG,WAAW,CAAC;YACpB,IAAI,EAAE,YAAY,CAAC,IAAI;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YACzD,KAAK;AACL,YAAA,KAAK,EAAE;AACV,SAAA,CAAC;QACF,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC;AACxD,QAAA,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU;AAC/C,QAAA,OAAO,GAAG;AACd,IAAA,CAAC,CAAC;AACN;AAEA;SACgB,kBAAkB,CAAC,SAAiB,EAAE,GAAa,EAAE,KAAa,EAAA;IAC9E,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1E;;MC/gBa,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAsB,EACtB,QAAuB,EAAA;QAFvB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCxBY,aAAa,CAAA;AACtB;;;;AAIG;IACH,WAAA,CACW,OAAiB,EACjB,QAAkB,EAAA;QADlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;AAEK,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AACtD;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACpB,OAAiB,EACjB,QAAkB,EAAA;AAElB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;QAJjB,IAAA,CAAA,MAAM,GAAN,MAAM;IAKjB;AACH;;MCpBqB,cAAc,CAAA;AAanC;MAEqB,iBAAiB,CAAA;AAStC;MAEqB,kBAAkB,CAAA;AASvC;;MCnCY,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAA2B,EAC3B,QAA4B,EAAA;QAF5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCZY,qBAAqB,CAAA;AAC9B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAA0B,EAC1B,QAA2B,EAAA;QAF3B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCjBY,UAAU,CAAA;AACnB;;;;AAIG;IACH,WAAA,CACW,OAAuB,EACvB,QAAwB,EAAA;QADxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;AAEK,MAAO,oBAAqB,SAAQ,UAAU,CAAA;AAChD;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACpB,OAAuB,EACvB,QAAwB,EAAA;AAExB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;QAJjB,IAAA,CAAA,MAAM,GAAN,MAAM;IAKjB;AACH;;MC7BY,aAAa,CAAA;AACtB;;;;AAIG;IACH,WAAA,CACW,IAAgB,EAChB,KAAU,EAAA;QADV,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,KAAK,GAAL,KAAK;IACb;AACN;;MCFY,sBAAsB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAoB,EACpB,QAAqB,EAAA;QAFrB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MClBY,yBAAyB,CAAA;AAWrC;AAEK,MAAO,4BAAgC,SAAQ,yBAA4B,CAAA;AAGhF;;MCVY,oBAAoB,CAAA;AAC7B;;;;;AAKG;AACH,IAAA,WAAA,CACW,MAAa,EACb,OAAyB,EACzB,QAA0B,EAAA;QAF1B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCpBY,sBAAsB,CAAA;AAC/B;;;;AAIG;IACH,WAAA,CACW,WAAmB,EACnB,GAAM,EAAA;QADN,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,GAAG,GAAH,GAAG;IACX;AACN;;ACVD;;MCAa,qBAAqB,CAAA;AAC9B;;;;;AAKG;AACH,IAAA,WAAA,CACW,KAAa,EACb,OAAgB,EAChB,GAAM,EAAA;QAFN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;IACX;AACN;;MCZY,4BAA4B,CAAA;AACrC;;;;;AAKG;AACH,IAAA,WAAA,CACW,KAAa,EACb,GAAM,EACN,QAAiB,EAAA;QAFjB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AACN;;MCVY,uBAAuB,CAAA;AAChC;;;;;;;;;AASG;AACH,IAAA,WAAA,CACW,GAAM,EACN,OAAU,EACV,aAAqB,EACrB,QAAgB,EAChB,QAAmC,EACnC,IAAwB,EACxB,IAAS,EAAA;QANT,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AACN;;AC0BK,MAAO,uBAAiC,SAAQ,cAAiB,CAAA;AAXvE,IAAA,WAAA,GAAA;;;QAcI,IAAA,CAAA,mBAAmB,GAAG,IAAI;;QAK1B,IAAA,CAAA,WAAW,GAAG,KAAK;AAEnB;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAkB,MAAM;;AAevB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA8B;;QAQvE,IAAA,CAAA,kBAAkB,GAAG,KAAK;;AAMT,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,EAAE;AAC9C,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;AAuPL,IAAA;;AApQG,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB;IACvD;;IAcA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACjC;;AAGA,IAAA,mBAAmB,CAAC,GAAW,EAAE,KAAY,EAAE,eAAuB,EAAE,IAAuB,EAAA;AAC3F,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB;QACJ;QACA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,aAAa;QACjB,GAAG,KAAK,IAAI,IAAI,aAAa,GAAG,eAAe,GAAG,CAAC,KAAK,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC;QAE5F,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE;AAC9C,YAAA,MAAM,aAAa,GAA6B;AAC5C,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;AACpC,gBAAA,gBAAgB,EAAE,eAAe;AACjC,gBAAA,iBAAiB,EAAE,aAAa;gBAChC,QAAQ,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ;gBAC7C;aACH;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YACpC,UAAU,CAAC,MAAK;AACX,gBAAA,KAAK,CAAC,MAAsB,CAAC,KAAK,EAAE;AACzC,YAAA,CAAC,CAAC;QACN;IACJ;;IAGA,aAAa,GAAA;;QAET,UAAU,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACpD;;AAGA,IAAA,gBAAgB,CAAC,KAA4B,EAAA;;QAEzC,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,iBAAiB,EAAE;AACxE,YAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACnG,YAAA,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACrG,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACzE;AACD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAC1E;AAED,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;gBACvE;YACJ;AACA,YAAA,IAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC;YACpD,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;YACxD,IAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;YAEnE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC;YACvD;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YACpC;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACrD,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;QAChC;IACJ;AAEA;;;AAGG;AACH,IAAA,uBAAuB,CAAC,GAAa,EAAE,OAAiB,EAAE,KAA4B,EAAA;QAClF,MAAM,IAAI,GAAU,EAAE;AAEtB,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AACxC,YAAA,CAAC,CAAC,KAAK,GAAG,KAAK;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACnB,IAAI,uBAAuB,CACvB,GAAG,CAAC,KAAK,EACT,OAAO,CAAC,KAAK,EACb,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,IAAI,EACV,IAAI,CACP,CACJ;IACL;;AAGQ,IAAA,kBAAkB,CAAC,QAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,QAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAC/D;;IAGQ,sBAAsB,CAAC,OAAiB,EAAE,OAAiB,EAAA;AAC/D,QAAA,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,OAAO,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;IAC1D;;AAGQ,IAAA,sCAAsC,CAAC,OAAiB,EAAA;AAC5D,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM;QAEhC,IAAI,CAAC,SAAS,EAAE;YACZ;QACJ;AAEA,QAAA,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5E,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,IAAI,iBAAiB,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC/D,YAAA,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;QAC3C;IACJ;;AAGQ,IAAA,gCAAgC,CAAC,OAAiB,EAAE,OAAiB,EAAE,IAAwB,EAAA;AACnG,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;;YAEhB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/E;QACA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1D,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjB,gBAAA,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;YACzC;AAEA,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,CAAC,SAAS,GAAG,OAAO;QAC/B;aAAO;AACH,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAC/B,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,gBAAA,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO;YACtC;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACjE,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACrB,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM;AACzC,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,0BAA0B,CAAC,OAAiB,EAAE,OAAiB,EAAE,KAA4B,EAAA;AACjG,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACxB,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QACxD;aAAO;AACH,YAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD;IACJ;;IAGQ,2BAA2B,CAAC,OAAiB,EAAE,OAAiB,EAAA;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAEtC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAE3E,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAExE,QAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;AAErD,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,kBAAkB,EAAE,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAC/G,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAErE,OAAO;YACH,OAAO;YACP,UAAU;YACV,gBAAgB;YAChB;SACH;IACL;;AAGQ,IAAA,sBAAsB,CAAC,OAAiB,EAAE,OAAiB,EAAE,KAA4B,EAAA;AAC7F,QAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAC5F,OAAO,EACP,OAAO,CACV;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;AACrB,YAAA,GAAG,OAAO;AACV,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;AACnD,YAAA,GAAG,UAAU;AACb,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC;AACnD,YAAA,GAAG;SACN;IACL;;IAGQ,wBAAwB,CAAC,OAAiB,EAAE,OAAiB,EAAA;AACjE,QAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAC5F,OAAO,EACP,OAAO,CACV;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,EAAE,GAAG,gBAAgB,CAAC;IAC9F;;IAGQ,eAAe,GAAA;QACnB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC;AAClG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3G,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1G,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;IAC5G;;IAGQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,GAAG,KAAK;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC;AACrG,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC;AACrF,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC;AAC1F,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC;AACzF,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;IAC/G;8GAnSS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAPrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;AACxD;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,wDAAwD;AAClE,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,6BAA6B;AACtC,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B;AACxD;AACJ;AACJ,iBAAA;;sBAGI;;sBAIA,WAAW;uBAAC,sBAAsB;;sBAClC;;sBAMA;;sBAIA;;sBAOA;;sBAIA;;AA0QL,SAAS,cAAc,CAAC,KAAY,EAAA;IAChC,KAAK,CAAC,cAAc,EAAE;AAC1B;AAEA,SAAS,2BAA2B,CAAC,KAAoB,EAAA;IACrD,IACI,CAAC,KAAK,CAAC,MAAM;QACb,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,EACjH;QACE,cAAc,CAAC,KAAK,CAAC;AACrB,QAAA,OAAO,KAAK;IAChB;AACJ;;MCpUa,eAAe,CAAA;;AA+CxB,IAAA,WAAA,GAAA;;AA3BS,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAsC;;AAG7D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAmD;;AAGhF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAiB;;AAGrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAkB;;AAGjD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,OAAO,EAAQ;;AAGpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAoB;;AAGrD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAA+B;;AAGjE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAyB;;AAG1D,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,OAAO,EAAW;QAIrE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,YAAY,EAAE;QACnF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;QAC3D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,CAAC,YAAY,EAAE;QACjF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAC3D;;AAGA,IAAA,SAAS,CAAC,GAAmB,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC;;IAGA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;IAC9C;;AAGA,IAAA,WAAW,CAAC,GAAqB,EAAA;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;;IAGA,YAAY,CAAC,WAAmB,EAAE,GAAa,EAAA;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACnE;;AAGA,IAAA,WAAW,CAAC,GAA0B,EAAA;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;;AAGA,IAAA,uBAAuB,CAAC,SAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,SAAS,CAAC;IACxD;;AAGA,IAAA,cAAc,CACV,UAAsB,EACtB,MAAiC,EACjC,aAA2C,EAAA;QAE3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACpB;;;;AAIG;AACH,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACvB,gBAAA,GAAG,CAAC,MAAM,GAAG,KAAK;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,UAAU;QACrB;;QAGA,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,UAAU,EAAE,UAAU,CAAC;;QAG9E,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,aAAa,CAAC;;AAG7F,QAAA,OAAO,yBAAyB,CAAC,yBAAyB,CAAC;IAC/D;;IAGA,mBAAmB,CAAC,GAAa,EAAE,KAA0B,EAAA;QACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IACtC;;AAGA,IAAA,mBAAmB,CAAC,GAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;IAClC;;AAGA,IAAA,aAAa,CAAC,IAAiC,EAAA;QAC3C,MAAM,cAAc,GAAkB,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3E;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;gBAC/B;YACJ;AACA,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5C;8GA1IS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCVY,2BAA2B,CAAA;AAJxC,IAAA,WAAA,GAAA;;AASqB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;AAGzD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG5B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAG5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;;AAG1C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAgEhD,IAAA;;AA1DG,IAAA,IAAY,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI;IACvE;;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAC9B,SAAS,CAAgB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS;AACzD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;gBACjB,IACI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;AACjC,qBAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC5D,oBAAA,KAAK,CAAC,QAAQ;oBACd,IAAI,CAAC,kBAAkB,EACzB;oBACE,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;oBAClD,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,wBAAwB,EAAE;gBACpC;qBAAO,IACH,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;AAClC,qBAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3D,oBAAA,KAAK,CAAC,QAAQ;oBACd,IAAI,CAAC,kBAAkB,EACzB;AACE,oBAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,wBAAwB,EAAE;gBACpC;AACJ,YAAA,CAAC,CAAC;YAEN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS;AAC1C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACvB;gBACJ;AACA,gBAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,YAAA,CAAC,CAAC;YAEN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU;AAC3C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACnC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,cAAc,CAAC,QAA+B,EAAA;AAClD,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IAC3F;8GA3FS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACXD;AACA;AAEA;MACa,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAF1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAI7D;;;AAGG;AAEH;MACa,gBAAgB,CAAA;;AAEzB,IAAA,WAAA,CAAmB,WAA8C,EAAA;QAA9C,IAAA,CAAA,WAAW,GAAX,WAAW;IAAsC;;AAGpE,IAAA,OAAO,sBAAsB,CAAC,GAAqB,EAAE,GAA4B,EAAA;AAC7E,QAAA,OAAO,IAAI;IACf;8GAPS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAF5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACCzD,MAAO,0BAA2B,SAAQ,iBAAiB,CAAA;AAXjE,IAAA,WAAA,GAAA;;;QAkBI,IAAA,CAAA,aAAa,GAAqB,EAAE;;QAIpC,IAAA,CAAA,eAAe,GAAuB,EAAE;;QAIxC,IAAA,CAAA,cAAc,GAAsB,EAAE;;QAItC,IAAA,CAAA,WAAW,GAAG,CAAC;;AAkBE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AAwDxD,IAAA;AAxEG;;AAEG;IACH,IACI,KAAK,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,mBAAmB,CAAC;IACpD;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC/B;;AASA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;;IAGA,eAAe,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC7C,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI;AAC3B,QAAA,MAAM,cAAc,GAChB,IAAI,CAAC,qBAAqB;AAC1B,aAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;AAE7G,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,kBAAkB;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,oBAAoB,GAAG,CAAC;AAExF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,cAAE;AACF,cAAE,oBAAoB,GAAG,IAAI,CAAC;kBAC1B,IAAI,CAAC;kBACL,oBAAoB;AAE5B,QAAA,MAAM,eAAe,GACjB,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,oBAAoB,GAAG,WAAW;aACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC;AACf,YAAA,GAAG,SAAS;AACZ,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACpF,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM;AAC9C,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,QAAQ;AACpD,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO;YACjD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,SAAS,CAAC,cAAc;YACvE,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,SAAS,CAAC,iBAAiB;AAChF,YAAA,IAAI,EAAE;AACF,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,CAAC;IACN;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;IAC7C;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3C;8GA5FS,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAPxB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAXtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA;AACA,aAAA,CAAA;AACV,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAGI;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;;ACtBL;;;;;;;AAOG;MAOU,wBAAwB,CAAA;;AA+CjC,IAAA,WAAA,CACW,UAAmC,EAChC,gBAA8C,EAC9C,MAAc,EAAA;QAFjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACP,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,MAAM,GAAN,MAAM;;QAhDZ,IAAA,CAAA,UAAU,GAAG,KAAK;;QAGlB,IAAA,CAAA,cAAc,GAAG,CAAC;;QAGlB,IAAA,CAAA,eAAe,GAAG,CAAC;;AAGV,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAGrC,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,UAAU,CAAC,CAAC,QAAyB,KAAI;YAC3F,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC/C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzE;AACD,YAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE;AAC3C,QAAA,CAAC,CAAC,CAAC,IAAI,CACH,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,KAAK,EAAE,CACV;;AAGO,QAAA,IAAA,CAAA,4BAA4B,GAAsB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACpF,MAAM,CAAC,MAAM,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC,EACzD,GAAG,CAAC,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CACzD;;AAGO,QAAA,IAAA,CAAA,8BAA8B,GAAsB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACtF,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,EAC3D,GAAG,CAAC,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAC3D;IAOE;;IAGH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;IAC1C;;IAGA,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,oBAAoB;IACpC;;IAGA,uBAAuB,GAAA;QACnB,OAAO,IAAI,CAAC,4BAA4B;IAC5C;;IAGA,yBAAyB,GAAA;QACrB,OAAO,IAAI,CAAC,8BAA8B;IAC9C;;IAGA,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS;IACnD;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU;IACpD;;AAGA,IAAA,YAAY,CAAC,SAAiB,EAAE,SAAS,GAAG,IAAI,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE;YACzF;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS;QAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS;IACvD;;AAGA,IAAA,aAAa,CAAC,UAAkB,EAAE,SAAS,GAAG,IAAI,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YAC3F;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS;QAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU;IACzD;;AAGA,IAAA,sBAAsB,CAAC,GAAY,EAAE,oBAA4B,EAAE,sBAA8B,EAAA;AAC7F,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QACvD,MAAM,KAAK,GAAG,GAAG;AAEjB,QAAA,IACI,CAAC,oBAAoB,IAAI,sBAAsB;AAC/C,YAAA,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAC/D;AACE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC7C,YAAA,IACI,QAAQ;gBACR,EACI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACpD,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAC3D,EACH;AACE,gBAAA,IAAI,oBAAoB,IAAI,CAAC,sBAAsB,EAAE;AACjD,oBAAA,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBAChE;AAAO,qBAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,EAAE;AACxD,oBAAA,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACnE;AAAO,qBAAA,IAAI,oBAAoB,IAAI,sBAAsB,EAAE;;AAEvD,oBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACtD,oBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI;AACvC,oBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG;AACrC,oBAAA,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK;AACzC,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;;AAErF,oBAAA,IACI,kBAAkB;AAClB,wBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;wBACxC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EACpE;wBACE,MAAM,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,IAAI;wBACnE,MAAM,OAAO,GAAG;8BACV,CAAC,YAAY,GAAG,aAAa,GAAG,WAAW,IAAI,CAAC;AAClD,8BAAE,YAAY,GAAG,aAAa,GAAG,WAAW;AAChD,wBAAA,iBAAiB,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBACzD;AAAO,yBAAA,IACH,kBAAkB;AAClB,wBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;wBACxC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAChE;wBACE,MAAM,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,KAAK;wBACpE,MAAM,OAAO,GAAG;8BACV,CAAC,YAAY,GAAG,aAAa,GAAG,WAAW,IAAI,CAAC;AAClD,8BAAE,YAAY,GAAG,aAAa,GAAG,WAAW;AAChD,wBAAA,iBAAiB,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBACzD;gBACJ;YACJ;QACJ;IACJ;;AAGA,IAAA,mBAAmB,CAAC,SAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;8GAxKS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,mEAFtB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE1F,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,wBAAyB,CAAC,EAAE;AACrG,iBAAA;;;ACvBD;MACa,8BAA8B,CAAA;;AAEvC,IAAA,WAAA,CAAmB,WAA+D,EAAA;QAA/D,IAAA,CAAA,WAAW,GAAX,WAAW;IAAuD;;AAGrF,IAAA,OAAO,sBAAsB,CACzB,GAAmC,EACnC,GAA0C,EAAA;AAE1C,QAAA,OAAO,IAAI;IACf;8GAVS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAF1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,kCAAkC,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACYvE,MAAO,2BAA4B,SAAQ,kBAAkB,CAAA;;AAoD/D,IAAA,WAAA,CAAqB,aAA2B,EAAA;AAC5C,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,aAAa,GAAb,aAAa;AAnDlC;;AAEG;QAEH,IAAA,CAAA,aAAa,GAAG,KAAK;;QAIrB,IAAA,CAAA,WAAW,GAAG,EAAE;AAMhB;;;AAGG;QAEH,IAAA,CAAA,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAE;;QASpD,IAAA,CAAA,wBAAwB,GAAG,CAAC;;AAG5B,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;;AAMhD,QAAA,IAAA,CAAA,mBAAmB,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE;;AAG7E,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,4BAA4B,CAAC;;AAG7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAiB,6BAA6B,EAAE;AACxF,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAKjD;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAC9B;QACJ;QACA,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE;YACpG,IAAI,CAAC,0BAA0B,EAAE;QACrC;IACJ;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,0BAA0B,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;YACxF;QACJ;AAEA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa;QAEjE,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,0BAA0B,CAAC;AACzF,YAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBAClB,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY;YACzD;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;QACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;AACpE,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE;AAE5D,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW;QACzE,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;AAE5C,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW;QAClG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,cAAc,EAAE,gBAAgB,CAAC;QAE9E,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;;QAG7D,MAAM,QAAQ,GACV,cAAc,KAAK,IAAI,CAAC,mBAAmB,CAAC,cAAc;AAC1D,YAAA,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,CAAC,gBAAgB;AAC9D,YAAA,cAAc,KAAK,IAAI,CAAC,mBAAmB,CAAC,cAAc;;AAE1D,YAAA,cAAc,KAAK,qBAAqB,CAAC,CAAC,CAAC;QAE/C,IAAI,QAAQ,EAAE;YACV;QACJ;QAEA,IAAI,CAAC,mBAAmB,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE;QAC/E,IAAI,CAAC,wBAAwB,GAAG,cAAc,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;QACzF,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAChC,cAAc,EACd,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAC9E;IACL;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC;AACA,aAAA,kBAAkB;aAClB,IAAI,CACDE,QAAM,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EACrD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,CAAC,0BAA0B,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC7B,gBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC9B,gBAAA,iBAAiB,EAAE,UAAU,CAAC,YAAY;AAC7C,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACV;8GA5IS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAPzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAXvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAKI;;sBAIA;;sBAIA;;sBAOA;;sBAMA;;;MCzCQ,mBAAmB,CAAA;;IAE5B,SAAS,CACL,MAAmB,EACnB,KAAc,EACd,+BAA8C,EAC9C,oBAAmC,EACnC,cAAuB,EACvB,iBAA0B,EAC1B,iBAAgC,EAChC,WAAmB,EACnB,iBAAgC,EAChC,SAAmB,EACnB,mBAA6B,EAC7B,iBAA2B,EAAA;QAE3B,MAAM,MAAM,GAA4C,EAAE;QAE1D,IAAI,cAAc,EAAE;YAChB,MAAM,GAAG,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS;YAC1C,MAAM,CAAC,GAAG,CAAC;AACP,gBAAA,CAAC,+BAA+B,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACvG;QAEA,IAAI,iBAAiB,EAAE;YACnB,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU;AAC1C,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,QAAQ,EAAE;QACrD;QAEA,IAAI,mBAAmB,EAAE;AACrB,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM;AAC7B,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM;QACpC;QAEA,IAAI,iBAAiB,EAAE;AACnB,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM;AAC9B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM;QACnC;QAEA,IAAI,SAAS,EAAE;AACX,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM;QAC7B;aAAO;AACH,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW;AACjC,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,WAAW;AACjC,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW;QACjC;;;;AAKA,QAAA,QAAQ,MAAM,CAAC,KAAK;YAChB,KAAK,WAAW,CAAC,KAAK;AAClB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;gBAC/C;YACJ,KAAK,WAAW,CAAC,GAAG;AAChB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO;gBAC/C;AACJ,YAAA;AACI,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ;gBAC/B;;AAGR,QAAA,OAAO,MAAM;IACjB;8GA/DS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCAtC,uBAAuB,CAAA;;AAEhC,IAAA,SAAS,CACL,WAAmB,EACnB,oBAA4B,EAC5B,qBAAqC,EAAA;AAErC,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACnB,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,YAAY,GAAG,WAAW,KAAK,oBAAoB,GAAG,CAAC;AAE7D,QAAA,IAAI,YAAY,IAAI,qBAAqB,EAAE;AACvC,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,OAAO,MAAM;IACjB;8GAlBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACEhD,MAAM,SAAS,GAAuC;AACzD,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,IAAI,EAAE;;MAQG,+BAA+B,CAAA;;AAExC,IAAA,SAAS,CAAC,OAAiC,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;IACvC;8GARS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gCAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACT,iBAAA;;;MCTY,cAAc,CAAA;;IAEvB,SAAS,CAAC,GAAa,EAAE,SAAwB,EAAA;AAC7C,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,GAAG,sBAAsB,GAAG,EAAE;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC;QAE/D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE;IACtD;;IAGQ,uBAAuB,CAAC,GAAa,EAAE,SAAwB,EAAA;QACnE,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;QAEA,IAAI,UAAU,GAAG,EAAE;AAEnB,QAAA,IAAII,UAAQ,CAAC,SAAS,CAAC,EAAE;YACrB,UAAU,GAAG,SAAS;QAC1B;AAEA,QAAA,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;YACvB,UAAU,GAAI,SAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;QACpD;AAEA,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE;IAC5B;8GA1BS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCCjC,uBAAuB,CAAA;;AAEhC,IAAA,SAAS,CACL,cAA4C,EAC5C,GAAY,EACZ,+BAA8C,EAAA;QAE9C,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,cAAc,GAAG,kBAAkB,CAAC,IAAI;QAC5C;QACA,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM;QACrC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI;QAE9E,OAAO;YACH,CAAC,MAAM,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,IAAI;AACvD,YAAA,WAAW,EAAE,oBAAoB;AACjC,YAAA,WAAW,EAAE;SAChB;IACL;8GAlBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACgBvD,MAAM,aAAa,GAAG;IAClB,0BAA0B;IAC1B,uBAAuB;IACvB,2BAA2B;IAC3B,sCAAsC;IACtC,YAAY;IACZ,+BAA+B;IAC/B,mCAAmC;IACnC,wBAAwB;IACxB,uBAAuB;IACvB,cAAc;IACd,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,UAAU;IACV,kBAAkB;IAClB,4BAA4B;IAC5B,8BAA8B;IAC9B,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB;CACH;AAED;;;AAGG;MAKU,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAjC3B,0BAA0B;YAC1B,uBAAuB;YACvB,2BAA2B;YAC3B,sCAAsC;YACtC,YAAY;YACZ,+BAA+B;YAC/B,mCAAmC;YACnC,wBAAwB;YACxB,uBAAuB;YACvB,cAAc;YACd,2BAA2B;YAC3B,0BAA0B;YAC1B,wBAAwB;YACxB,UAAU;YACV,kBAAkB;YAClB,4BAA4B;YAC5B,8BAA8B;YAC9B,2BAA2B;YAC3B,gBAAgB;YAChB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;AACvB,YAAA,cAAc,aAtBd,0BAA0B;YAC1B,uBAAuB;YACvB,2BAA2B;YAC3B,sCAAsC;YACtC,YAAY;YACZ,+BAA+B;YAC/B,mCAAmC;YACnC,wBAAwB;YACxB,uBAAuB;YACvB,cAAc;YACd,2BAA2B;YAC3B,0BAA0B;YAC1B,wBAAwB;YACxB,UAAU;YACV,kBAAkB;YAClB,4BAA4B;YAC5B,8BAA8B;YAC9B,2BAA2B;YAC3B,gBAAgB;YAChB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;YACvB,cAAc,CAAA,EAAA,CAAA,CAAA;+GAWL,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC;AAC3B,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa;AAC7B,iBAAA;;;ACtDD;;AAEG;;;;"}