{"version":3,"file":"angular-bootstrap-ngbootstrap.mjs","sources":["../../../src/pagination/src/pagination/pagination.component.ts","../../../src/pagination/src/pagination/pager-settings.ts","../../../src/pagination/src/pagination/pager.component.ts","../../../src/datagrid/src/models/datagrid-pageable.ts","../../../src/datagrid/src/directives/datagrid-templates.directive.ts","../../../src/datagrid/src/models/filtering.ts","../../../src/datagrid/src/data-operations.ts","../../../src/datagrid/src/services/export.services.ts","../../../src/datagrid/src/services/editing.service.ts","../../../src/datagrid/src/adapters/jsdf.adapter.ts","../../../src/datagrid/src/adapters/browser-excel-export.adapter.ts","../../../src/datagrid/src/directives/export-button.directive.ts","../../../src/datagrid/src/directives/grid-column.directive.ts","../../../src/datagrid/src/foundation/datagrid-button.directive.ts","../../../src/datagrid/src/foundation/datagrid-control.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-add-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-colgroup.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-data-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-detail-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-footer.component.ts","../../../src/datagrid/src/foundation/datagrid-field-shell.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-header.component.ts","../../../src/datagrid/src/foundation/datagrid-surface-card.component.ts","../../../src/datagrid/src/foundation/datagrid-floating-panel.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-filter-menu-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-row-filter-operator-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-editing-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-external-editor.component.ts","../../../src/drag-drop/src/a11y/live-announcer.service.ts","../../../src/drag-drop/src/i18n/dnd-i18n.ts","../../../src/drag-drop/src/service/drag-state.service.ts","../../../src/datagrid/src/datagrid/directives/colgroup-sync.directive.ts","../../../src/drag-drop/src/directive/dnd-list.directive.ts","../../../src/drag-drop/src/directive/dnd-item.directive.ts","../../../src/datagrid/src/layout-toolbar/datagrid-host.token.ts","../../../src/datagrid/src/models/datagrid-labels.ts","../../../src/datagrid/src/datagrid/datagrid.component.ts","../../../src/datagrid/src/datagrid/datagrid.component.html","../../../src/datagrid/src/layout-toolbar/datagrid-tool-host.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar-coordinator.ts","../../../src/datagrid/src/layout-toolbar/datagrid-column-chooser-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-filter-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-sort-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar.component.ts","../../../src/datagrid/src/chart/data-chart.helpers.ts","../../../src/datagrid/src/chart/data-chart.component.ts","../../../src/datagrid/src/chart/data-sparkline.component.ts","../../../src/datagrid/src/chart/grid-chart.component.ts","../../../src/datagrid/src/search/advanced-search.component.ts","../../../src/datagrid/src/search/search-highlight.component.ts","../../../src/datagrid/src/datagrid.types.ts","../../../src/datagrid/src/theme/datagrid-theme-picker.component.ts","../../../src/datagrid/src/datagrid/directives/grid-highlight.directive.ts","../../../src/drag-drop/src/directive/dnd-handle.directive.ts","../../../src/drag-drop/src/json-preview/json-preview.component.ts","../../../src/stepper/src/stepper/step-label.directive.ts","../../../src/stepper/src/stepper/stepper.component.ts","../../../src/stepper/src/stepper/stepper.component.html","../../../src/splitter/src/splitter/splitter-pane.component.ts","../../../src/splitter/src/splitter/splitter.component.ts","../../../src/chips/src/chips/chips.component.ts","../../../src/typeahead/src/typeahead/typeahead.component.ts","../../../src/tree/src/tree/tree.component.ts","../../../src/angular-bootstrap-ngbootstrap.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'ngb-pagination',\n  standalone: true,\n  imports: [CommonModule, FormsModule],\n  template: `\n    @if (totalPages >= 1) {\n      <nav\n        class=\"ngb-pagination\"\n        [class.ngb-pagination--responsive]=\"responsive\"\n        aria-label=\"Pagination\"\n      >\n      @if (pagerType === 'input') {\n        <div class=\"ngb-pagination__input-group\">\n          @if (previousNext) {\n            <button\n              class=\"btn btn-sm btn-outline-secondary\"\n              type=\"button\"\n              [disabled]=\"page === 1\"\n              (click)=\"go(page - 1)\"\n              aria-label=\"Previous page\"\n            >\n              ‹\n            </button>\n          }\n          <label class=\"ngb-pagination__input-label\">\n            <span class=\"visually-hidden\">Page</span>\n            <input\n              class=\"form-control form-control-sm ngb-pagination__page-input\"\n              type=\"number\"\n              [min]=\"1\"\n              [max]=\"totalPages\"\n              [ngModel]=\"page\"\n              (ngModelChange)=\"go($event)\"\n              aria-label=\"Current page\"\n            />\n          </label>\n          <span class=\"ngb-pagination__input-total\" aria-hidden=\"true\">/ {{ totalPages }}</span>\n          @if (previousNext) {\n            <button\n              class=\"btn btn-sm btn-outline-secondary\"\n              type=\"button\"\n              [disabled]=\"page === totalPages\"\n              (click)=\"go(page + 1)\"\n              aria-label=\"Next page\"\n            >\n              ›\n            </button>\n          }\n        </div>\n      } @else {\n        <ul class=\"pagination pagination-sm justify-content-center mb-0\">\n          @if (previousNext) {\n            <li class=\"page-item\" [class.disabled]=\"page === 1\">\n              <button\n                class=\"page-link\"\n                type=\"button\"\n                (click)=\"go(page - 1)\"\n                aria-label=\"Previous page\"\n              >\n                <span aria-hidden=\"true\">«</span>\n              </button>\n            </li>\n          }\n\n          @for (p of pages; track p) {\n            <li\n              class=\"page-item\"\n              [class.active]=\"p === page\"\n              [class.disabled]=\"p === '…'\"\n            >\n              @if (p === '…') {\n                <span class=\"page-link\" aria-hidden=\"true\">…</span>\n              } @else {\n                <button\n                  class=\"page-link\"\n                  type=\"button\"\n                  (click)=\"go(p)\"\n                  [attr.aria-current]=\"p === page ? 'page' : null\"\n                >\n                  {{ p }}\n                </button>\n              }\n            </li>\n          }\n\n          @if (previousNext) {\n            <li class=\"page-item\" [class.disabled]=\"page === totalPages\">\n              <button\n                class=\"page-link\"\n                type=\"button\"\n                (click)=\"go(page + 1)\"\n                aria-label=\"Next page\"\n              >\n                <span aria-hidden=\"true\">»</span>\n              </button>\n            </li>\n          }\n        </ul>\n      }\n      </nav>\n    }\n  `,\n  styles: [`\n    .ngb-pagination--responsive .pagination {\n      flex-wrap: wrap;\n      justify-content: center;\n      gap: 0.15rem;\n    }\n\n    .ngb-pagination .page-link,\n    .ngb-pagination .btn {\n      border-color: var(--dg-pager-control-border, var(--bs-border-color));\n      background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n      color: var(--dg-pager-link-text, var(--dg-primary, var(--bs-primary)));\n    }\n\n    .ngb-pagination .page-link:hover,\n    .ngb-pagination .btn:hover {\n      border-color: var(--dg-border-strong, var(--bs-border-color));\n      background-color: var(--dg-pager-control-hover-bg, var(--bs-tertiary-bg));\n      color: var(--dg-primary-hover, var(--bs-link-hover-color));\n    }\n\n    .ngb-pagination .page-item.active .page-link {\n      border-color: var(--dg-pager-active-border, var(--dg-primary, var(--bs-primary)));\n      background-color: var(--dg-pager-active-bg, var(--dg-primary, var(--bs-primary)));\n      color: var(--dg-pager-active-text, var(--dg-on-primary, #fff));\n    }\n\n    .ngb-pagination .page-item.disabled .page-link,\n    .ngb-pagination .btn:disabled {\n      border-color: var(--dg-pager-control-border, var(--bs-border-color));\n      background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n      color: var(--dg-text-subtle, var(--bs-secondary-color));\n      opacity: 0.55;\n    }\n\n    .ngb-pagination__input-group {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.35rem;\n      flex-wrap: wrap;\n      justify-content: center;\n    }\n\n    .ngb-pagination__page-input {\n      width: 4.25rem;\n      text-align: center;\n      border-color: var(--dg-pager-control-border, var(--bs-border-color));\n      background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n      color: var(--dg-text, var(--bs-body-color));\n    }\n\n    .ngb-pagination__input-label {\n      margin: 0;\n    }\n\n    .ngb-pagination__input-total {\n      font-size: 0.875rem;\n      color: var(--dg-pager-text, var(--bs-secondary-color));\n      white-space: nowrap;\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPaginationComponent {\n  @Input() page = 1;\n  @Input() pageSize = 10;\n  @Input() collectionSize = 0;\n  /** @deprecated Use `buttonCount`. Kept for compatibility. */\n  @Input() maxSize = 5;\n  @Input() buttonCount?: number;\n  @Input() previousNext = true;\n  @Input() pagerType: 'numeric' | 'input' = 'numeric';\n  @Input() responsive = true;\n  @Output() pageChange = new EventEmitter<number>();\n\n  get effectiveButtonCount(): number {\n    const count = this.buttonCount ?? this.maxSize;\n    return Math.max(3, count | 0);\n  }\n\n  get totalPages(): number {\n    return Math.max(1, Math.ceil(this.collectionSize / Math.max(1, this.pageSize)));\n  }\n\n  get pages(): Array<number | '…'> {\n    const total = this.totalPages;\n    const max = this.effectiveButtonCount;\n    if (total <= max) return Array.from({ length: total }, (_, i) => i + 1);\n\n    const half = Math.floor(max / 2);\n    let start = Math.max(1, this.page - half);\n    let end = start + max - 1;\n    if (end > total) {\n      end = total;\n      start = end - max + 1;\n    }\n\n    const nums = Array.from({ length: end - start + 1 }, (_, i) => start + i);\n    const head = start > 1 ? [1, start > 2 ? ('…' as const) : 2] : [];\n    const tail = end < total ? [end < total - 1 ? ('…' as const) : total - 1, total] : [];\n    return [...head, ...nums, ...tail];\n  }\n\n  go(p: number | string): void {\n    const next = typeof p === 'string' ? Number(p) : p;\n    if (!Number.isFinite(next)) return;\n    const page = Math.trunc(next);\n    if (page < 1 || page > this.totalPages || page === this.page) return;\n    this.pageChange.emit(page);\n  }\n}\n","export type NgbPagerType = 'numeric' | 'input';\n\n/**\n * Responsive pager density based on container width.\n * - `full`: info, pagination, and page-size controls\n * - `compact`: hides range info\n * - `minimal`: hides range info and page-size controls (pagination remains)\n */\nexport type NgbPagerDensity = 'full' | 'compact' | 'minimal';\n\n/** Width breakpoints (px) for {@link ngbResolvePagerDensity}. */\nexport const NGB_PAGER_BREAKPOINTS = {\n  fullMinWidth: 520,\n  compactMinWidth: 360,\n} as const;\n\n/** Configuration for {@link NgbPagerComponent}. */\nexport interface NgbPagerSettings {\n  /** Maximum numeric page buttons before ellipsis collapse. Default `10`. */\n  buttonCount?: number;\n  /** Shows the current range and total record count. Default `true`. */\n  info?: boolean;\n  /**\n   * Page-size presets. `false` hides the control (set `pageSize` yourself).\n   * The active `pageSize` is included when it is not already in the list.\n   */\n  pageSizes?: false | number[];\n  /** Shows previous/next pager buttons. Default `true`. */\n  previousNext?: boolean;\n  /** `numeric` (page buttons) or `input` (type a page number). Default `numeric`. */\n  type?: NgbPagerType;\n  /**\n   * When `true` (default), hides info and page-size controls as the container narrows.\n   * When `false`, all controls stay visible and wrap onto new rows.\n   */\n  responsive?: boolean;\n}\n\nexport const NGB_PAGER_DEFAULT_SETTINGS: Required<\n  Omit<NgbPagerSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n  buttonCount: 10,\n  info: true,\n  pageSizes: false,\n  previousNext: true,\n  type: 'numeric',\n  responsive: true,\n};\n\nexport function ngbResolvePagerSettings(\n  settings: boolean | NgbPagerSettings | null | undefined\n): NgbPagerSettings | null {\n  if (!settings) return null;\n  const overrides = typeof settings === 'object' ? settings : {};\n  return { ...NGB_PAGER_DEFAULT_SETTINGS, ...overrides };\n}\n\nexport function ngbResolvePagerDensity(width: number): NgbPagerDensity {\n  if (width >= NGB_PAGER_BREAKPOINTS.fullMinWidth) return 'full';\n  if (width >= NGB_PAGER_BREAKPOINTS.compactMinWidth) return 'compact';\n  return 'minimal';\n}\n\nexport function ngbResolvePagerPageSizeOptions(\n  pageSizes: false | number[] | undefined,\n  pageSize: number\n): number[] {\n  const presets = Array.isArray(pageSizes) && pageSizes.length ? pageSizes : [];\n  const options = presets\n    .map((value) => Number(value))\n    .filter((value) => Number.isFinite(value) && value > 0);\n  const size = Number(pageSize);\n  if (Number.isFinite(size) && size > 0 && !options.includes(size)) {\n    options.push(size);\n  }\n  return options.sort((a, b) => a - b);\n}\n\nexport function ngbPagerButtonCountForDensity(\n  base: number,\n  density: NgbPagerDensity,\n  responsive: boolean\n): number {\n  if (!responsive) return base;\n  if (density === 'minimal') return Math.min(base, 3);\n  if (density === 'compact') return Math.min(base, 5);\n  return base;\n}\n\nexport function ngbFormatPagerRangeLabel(\n  start: number,\n  end: number,\n  total: number,\n  template = '{start}–{end} of {total}'\n): string {\n  return template\n    .replace(/\\{start\\}/g, String(start))\n    .replace(/\\{end\\}/g, String(end))\n    .replace(/\\{total\\}/g, String(total));\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbPaginationComponent } from './pagination.component';\nimport {\n  NgbPagerDensity,\n  NgbPagerSettings,\n  ngbFormatPagerRangeLabel,\n  ngbPagerButtonCountForDensity,\n  ngbResolvePagerDensity,\n  ngbResolvePagerPageSizeOptions,\n  ngbResolvePagerSettings,\n} from './pager-settings';\n\n@Component({\n  selector: 'ngb-pager',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NgbPaginationComponent],\n  template: `\n    <div\n      #pagerRoot\n      class=\"ngb-pager\"\n      [class.ngb-pager--wrap]=\"!responsiveEnabled\"\n      [class.ngb-pager--responsive]=\"responsiveEnabled\"\n      [class.ngb-pager--density-compact]=\"pagerDensity === 'compact' || pagerDensity === 'minimal'\"\n      [class.ngb-pager--density-minimal]=\"pagerDensity === 'minimal'\"\n    >\n      @if (showInfoSetting) {\n        <div\n          class=\"ngb-pager__range ngb-pager__part--info small text-muted\"\n          [class.ngb-pager__part--hidden]=\"!showInfo\"\n          [attr.aria-hidden]=\"showInfo ? null : true\"\n        >\n          {{ displayInfoLabel }}\n        </div>\n      } @else {\n        <div class=\"ngb-pager__range ngb-pager__part--info ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n      }\n\n      <div class=\"ngb-pager__pagination ngb-pager__part--nav\">\n        <ngb-pagination\n          [page]=\"page\"\n          [pageSize]=\"pageSize\"\n          [collectionSize]=\"collectionSize\"\n          [buttonCount]=\"effectiveButtonCount\"\n          [previousNext]=\"previousNextEnabled\"\n          [pagerType]=\"pagerType\"\n          [responsive]=\"!responsiveEnabled\"\n          (pageChange)=\"onPageChange($event)\"\n        >\n        </ngb-pagination>\n      </div>\n\n      @if (showPageSizesSetting) {\n        <div\n          class=\"ngb-pager__page-size ngb-pager__part--sizes\"\n          [class.ngb-pager__part--hidden]=\"!showPageSizes\"\n          [attr.aria-hidden]=\"showPageSizes ? null : true\"\n        >\n          <label class=\"ngb-pager__page-size-label\" [attr.for]=\"pageSizeSelectId\">\n            {{ rowsPerPageLabel }}\n          </label>\n          <select\n            [id]=\"pageSizeSelectId\"\n            class=\"form-select form-select-sm ngb-pager__page-size-select\"\n            [ngModel]=\"pageSize\"\n            (ngModelChange)=\"onPageSizeChange($event)\"\n            [disabled]=\"!showPageSizes\"\n            [attr.aria-label]=\"rowsPerPageLabel\"\n          >\n            @for (s of resolvedPageSizeOptions; track s) {\n              <option [ngValue]=\"s\">{{ s }}</option>\n            }\n          </select>\n        </div>\n      } @else {\n        <div class=\"ngb-pager__page-size ngb-pager__part--sizes ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n      }\n    </div>\n  `,\n  styles: [`\n    .ngb-pager {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n      align-items: center;\n      gap: 0.5rem 0.75rem;\n      width: 100%;\n      color: var(--dg-pager-text, var(--bs-secondary-color));\n    }\n\n    .ngb-pager__range {\n      justify-self: start;\n      min-width: 0;\n      color: var(--dg-pager-text, var(--bs-secondary-color)) !important;\n    }\n\n    .ngb-pager__pagination {\n      display: flex;\n      justify-content: center;\n      justify-self: center;\n      min-width: 0;\n    }\n\n    .ngb-pager__page-size {\n      display: inline-flex;\n      align-items: center;\n      justify-self: end;\n      gap: 0.5rem;\n      min-width: 0;\n    }\n\n    .ngb-pager__page-size-label {\n      margin: 0;\n      white-space: nowrap;\n      font-size: 0.875rem;\n      line-height: 1.25;\n      color: var(--dg-pager-text, var(--bs-secondary-color));\n    }\n\n    .ngb-pager__page-size-select {\n      width: auto;\n      min-width: 4.5rem;\n      flex: 0 0 auto;\n      border-color: var(--dg-pager-control-border, var(--bs-border-color));\n      background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n      background-image: var(--dg-pager-select-icon);\n      background-position: right 0.75rem center;\n      background-repeat: no-repeat;\n      background-size: 16px 12px;\n      color: var(--dg-text, var(--bs-body-color));\n      padding-right: 2.25rem;\n      appearance: none;\n    }\n\n    .ngb-pager--wrap {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: center;\n    }\n\n    .ngb-pager--wrap .ngb-pager__range {\n      flex: 1 1 100%;\n      justify-self: auto;\n    }\n\n    .ngb-pager--wrap .ngb-pager__pagination {\n      flex: 1 1 100%;\n      justify-content: center;\n      justify-self: auto;\n    }\n\n    .ngb-pager--wrap .ngb-pager__page-size {\n      flex: 0 0 auto;\n      justify-self: auto;\n    }\n\n    .ngb-pager--responsive {\n      flex-wrap: nowrap;\n      overflow: hidden;\n    }\n\n    .ngb-pager__part--hidden {\n      visibility: hidden;\n      pointer-events: none;\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPagerComponent implements AfterViewInit, OnDestroy {\n  private static nextId = 0;\n\n  private readonly uid = NgbPagerComponent.nextId++;\n\n  readonly pageSizeSelectId = `ngb-pager-page-size-${this.uid}`;\n\n  pagerDensity: NgbPagerDensity = 'full';\n\n  private resizeObserver?: ResizeObserver;\n\n  @ViewChild('pagerRoot') pagerRoot?: ElementRef<HTMLElement>;\n\n  @Input() page = 1;\n  @Input() pageSize = 10;\n  @Input() collectionSize = 0;\n  @Input() settings: boolean | NgbPagerSettings | null = true;\n  /** Overrides the default range label when `info` is enabled. */\n  @Input() infoLabel?: string;\n  @Input() rangeLabelTemplate = '{start}–{end} of {total}';\n  @Input() rowsPerPageLabel = 'Rows per page';\n  /** When set, overrides `settings.responsive`. */\n  @Input() responsive?: boolean;\n\n  @Output() pageChange = new EventEmitter<number>();\n  @Output() pageSizeChange = new EventEmitter<number>();\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  get resolved(): NgbPagerSettings {\n    return ngbResolvePagerSettings(this.settings) ?? ngbResolvePagerSettings(true)!;\n  }\n\n  get responsiveEnabled(): boolean {\n    return this.responsive ?? this.resolved.responsive !== false;\n  }\n\n  get showInfoSetting(): boolean {\n    return this.resolved.info !== false;\n  }\n\n  get showPageSizesSetting(): boolean {\n    const pageSizes = this.resolved.pageSizes;\n    return Array.isArray(pageSizes) && pageSizes.length > 0;\n  }\n\n  get showInfo(): boolean {\n    return this.pagerDensity === 'full';\n  }\n\n  get showPageSizes(): boolean {\n    return this.pagerDensity !== 'minimal';\n  }\n\n  get previousNextEnabled(): boolean {\n    return this.resolved.previousNext !== false;\n  }\n\n  get pagerType(): 'numeric' | 'input' {\n    return this.resolved.type ?? 'numeric';\n  }\n\n  get effectiveButtonCount(): number {\n    const base = this.resolved.buttonCount ?? 10;\n    return ngbPagerButtonCountForDensity(base, this.pagerDensity, this.responsiveEnabled);\n  }\n\n  get resolvedPageSizeOptions(): number[] {\n    return ngbResolvePagerPageSizeOptions(this.resolved.pageSizes, this.pageSize);\n  }\n\n  get displayInfoLabel(): string {\n    if (this.infoLabel != null && this.infoLabel !== '') {\n      return this.infoLabel;\n    }\n    const total = this.collectionSize;\n    const start = total ? (this.page - 1) * this.pageSize + 1 : 0;\n    const end = Math.min(this.page * this.pageSize, total);\n    return ngbFormatPagerRangeLabel(start, end, total, this.rangeLabelTemplate);\n  }\n\n  ngAfterViewInit(): void {\n    this.observeWidth();\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n  }\n\n  onPageChange(page: number): void {\n    this.pageChange.emit(page);\n  }\n\n  onPageSizeChange(size: number): void {\n    this.pageSizeChange.emit(size);\n  }\n\n  private observeWidth(): void {\n    if (!this.responsiveEnabled || !this.pagerRoot?.nativeElement) {\n      this.pagerDensity = 'full';\n      return;\n    }\n\n    const element = this.pagerRoot.nativeElement;\n    const apply = (width: number) => {\n      const next = ngbResolvePagerDensity(width);\n      if (next !== this.pagerDensity) {\n        this.pagerDensity = next;\n        this.cdr.markForCheck();\n      }\n    };\n\n    apply(element.getBoundingClientRect().width);\n\n    if (typeof ResizeObserver === 'undefined') {\n      return;\n    }\n\n    this.resizeObserver = new ResizeObserver((entries) => {\n      const width = entries[0]?.contentRect.width ?? element.getBoundingClientRect().width;\n      apply(width);\n    });\n    this.resizeObserver.observe(element);\n  }\n}\n","import {\n  NGB_PAGER_BREAKPOINTS,\n  NGB_PAGER_DEFAULT_SETTINGS,\n  NgbPagerDensity,\n  NgbPagerSettings,\n  NgbPagerType,\n  ngbResolvePagerDensity,\n} from '../../../pagination';\n\nexport type NgbDatagridPagerType = NgbPagerType;\n\nexport type NgbDatagridPagerPosition = 'top' | 'bottom' | 'both';\n\nexport type NgbDatagridPagerDensity = NgbPagerDensity;\n\n/** @deprecated Use {@link NGB_PAGER_BREAKPOINTS}. */\nexport const NGB_DATAGRID_PAGER_BREAKPOINTS = NGB_PAGER_BREAKPOINTS;\n\n/** Pager configuration for {@link Datagrid} via `[pageable]`. */\nexport interface NgbDatagridPageableSettings extends NgbPagerSettings {\n  /** Pager placement relative to the table. Default `bottom`. */\n  position?: NgbDatagridPagerPosition;\n}\n\nexport const NGB_DATAGRID_DEFAULT_PAGEABLE: Required<\n  Omit<NgbDatagridPageableSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n  ...NGB_PAGER_DEFAULT_SETTINGS,\n  position: 'bottom',\n};\n\nexport { ngbResolvePagerDensity };\n\nexport function ngbResolvePageableSettings(\n  pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n  legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbDatagridPageableSettings | null {\n  if (pageable) {\n    const overrides = typeof pageable === 'object' ? pageable : {};\n    return { ...NGB_DATAGRID_DEFAULT_PAGEABLE, ...overrides };\n  }\n  if (legacy?.enablePagination) {\n    return {\n      ...NGB_DATAGRID_DEFAULT_PAGEABLE,\n      pageSizes: legacy.pageSizeOptions?.length ? legacy.pageSizeOptions : [5, 10, 25, 50],\n    };\n  }\n  return null;\n}\n\n/** Settings for {@link NgbPagerComponent} (excludes grid-only `position`). */\nexport function ngbDatagridPagerSettings(\n  pageable: NgbDatagridPageableSettings\n): NgbPagerSettings {\n  const { position: _position, ...settings } = pageable;\n  return settings;\n}\n\nexport function ngbResolveDatagridPagerSettings(\n  pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n  legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbPagerSettings | null {\n  const resolved = ngbResolvePageableSettings(pageable, legacy);\n  return resolved ? ngbDatagridPagerSettings(resolved) : null;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { ColumnDef } from '../models/column-def';\nimport { NgbCompositeFilterDescriptor, NgbFilterDescriptor, NgbFilterOperator } from '../models/filtering';\nimport { NgbDataGridAggregateResults, NgbDataGridGroupResult } from '../datagrid.types';\n\nexport interface CellCtx<T = any>   { $implicit: any; row: T; col: ColumnDef<T>; index: number; }\nexport interface EditCtx<T = any>   { $implicit: AbstractControl | null; control: AbstractControl | null; row: T; col: ColumnDef<T>; form: FormGroup; index: number; isNew: boolean; }\nexport interface FilterCtx<T = any> {\n  $implicit: AbstractControl | null;\n  control: AbstractControl | null;\n  col: ColumnDef<T>;\n  /** Column field name (same as `col.field`). */\n  field: string;\n  descriptor: NgbFilterDescriptor | null;\n  /** Current composite filter root (clone). Use with `filterChange` for custom filter templates. */\n  filter: NgbCompositeFilterDescriptor;\n  operators: NgbFilterOperator[];\n  setOperator: (operator: NgbFilterOperator) => void;\n  setValue: (value: any) => void;\n  clear: () => void;\n  /** Replaces the grid filter state and emits `filterChange` when enabled. */\n  filterChange: (filter: NgbCompositeFilterDescriptor) => void;\n  /** Sets this column's field filter in the current descriptor and commits. */\n  setFieldFilter: (operator: NgbFilterOperator, value?: any) => void;\n}\nexport interface GlobalFilterCtx    { $implicit: AbstractControl; }\n\nexport interface PagerCtx<T = any> {\n  grid: T;\n  page: number;\n  pageSize: number;\n  total: number;\n  pageCount: number;\n}\n\nexport interface GroupHeaderCtx<T = any> {\n  $implicit: NgbDataGridGroupResult<T>;\n  group: NgbDataGridGroupResult<T>;\n  field: string;\n  value: unknown;\n  items: Array<NgbDataGridGroupResult<T> | T>;\n  level: number;\n  count: number;\n  aggregates: NgbDataGridAggregateResults;\n}\n\nexport interface GroupColumnCtx<T = any> extends GroupHeaderCtx<T> {\n  col: ColumnDef<T>;\n}\n\n@Directive({ selector: 'ng-template[ngbCell]', standalone: true })\nexport class NgbCellTemplate<T = any> {\n  @Input('ngbCell') field!: string;\n  constructor(public readonly template: TemplateRef<CellCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbEditor]', standalone: true })\nexport class NgbEditorTemplate<T = any> {\n  @Input('ngbEditor') field!: string;\n  constructor(public readonly template: TemplateRef<EditCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilter]', standalone: true })\nexport class NgbFilterTemplate<T = any> {\n  @Input('ngbFilter') field!: string;\n  constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilterMenu]', standalone: true })\nexport class NgbFilterMenuTemplate<T = any> {\n  @Input('ngbFilterMenu') field!: string;\n  constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbGlobalFilter]', standalone: true })\nexport class NgbGlobalFilterTemplate {\n  constructor(public readonly template: TemplateRef<GlobalFilterCtx>) {}\n}\n\n\n@Directive({ selector: 'ng-template[ngbRowDetail]', standalone: true })\nexport class NgbRowDetailTemplate<T = any> {\n  constructor(public readonly template: TemplateRef<{ $implicit: T; index: number }>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbPager]', standalone: true })\nexport class NgbPagerTemplate<T = any> {\n  constructor(public readonly template: TemplateRef<PagerCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbDatagridGroupHeaderTemplate], ng-template[ngbGroupHeader]', standalone: true })\nexport class NgbDataGridGroupHeaderTemplateDirective<T = any> {\n  constructor(public readonly template: TemplateRef<GroupHeaderCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbDatagridGroupHeaderColumnTemplate], ng-template[ngbGroupHeaderColumn]', standalone: true })\nexport class NgbDataGridGroupHeaderColumnTemplateDirective<T = any> {\n  // Preserve the explicit public template binding names for compatibility.\n  @Input('ngbDatagridGroupHeaderColumnTemplate') field!: string;\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('ngbGroupHeaderColumn') set legacyField(value: string) {\n    this.field = value;\n  }\n\n  constructor(public readonly template: TemplateRef<GroupColumnCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbDatagridGroupFooterTemplate], ng-template[ngbGroupFooter]', standalone: true })\nexport class NgbDataGridGroupFooterTemplateDirective<T = any> {\n  // Preserve the explicit public template binding names for compatibility.\n  @Input('ngbDatagridGroupFooterTemplate') field!: string;\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('ngbGroupFooter') set legacyField(value: string) {\n    this.field = value;\n  }\n\n  constructor(public readonly template: TemplateRef<GroupColumnCtx<T>>) {}\n}\n\n/** Handy constant to import in consumer apps */\nexport const DATAGRID_TEMPLATE_DIRECTIVES = [\n  NgbCellTemplate,\n  NgbEditorTemplate,\n  NgbFilterTemplate,\n  NgbFilterMenuTemplate,\n  NgbGlobalFilterTemplate,\n  NgbRowDetailTemplate,\n  NgbPagerTemplate,\n  NgbDataGridGroupHeaderTemplateDirective,\n  NgbDataGridGroupHeaderColumnTemplateDirective,\n  NgbDataGridGroupFooterTemplateDirective,\n];\n","import { ColumnType } from './column-def';\n\nexport type NgbFilterMode = 'row' | 'menu' | 'multi' | 'none';\nexport type NgbFilterable = boolean | 'row' | 'menu' | 'multi' | 'none';\n\nexport type NgbFilterOperator =\n  | 'contains'\n  | 'doesnotcontain'\n  | 'eq'\n  | 'neq'\n  | 'startswith'\n  | 'endswith'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'isnull'\n  | 'isnotnull'\n  | 'isempty'\n  | 'isnotempty';\n\nexport interface NgbFilterDescriptor {\n  field: string;\n  operator: NgbFilterOperator;\n  value?: unknown;\n  ignoreCase?: boolean;\n}\n\n/** Single condition in a column filter menu or layout-toolbar filter tool. */\nexport interface NgbMenuFilterConditionDraft {\n  operator: NgbFilterOperator;\n  value: unknown;\n}\n\nexport interface NgbCompositeFilterDescriptor {\n  logic: 'and' | 'or';\n  filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>;\n}\n\nexport interface NgbFilterState {\n  global?: string;\n  root: NgbCompositeFilterDescriptor;\n}\n\nexport type NgbColumnFilterType = 'text' | 'numeric' | 'boolean' | 'date' | 'select';\n\nexport const NGB_TEXT_FILTER_OPERATORS: NgbFilterOperator[] = [\n  'eq',\n  'neq',\n  'contains',\n  'doesnotcontain',\n  'startswith',\n  'endswith'\n];\n\nexport const NGB_NUMERIC_FILTER_OPERATORS: NgbFilterOperator[] = [\n  'eq',\n  'neq',\n  'gte',\n  'gt',\n  'lte',\n  'lt'\n];\n\nexport const NGB_BOOLEAN_FILTER_OPERATORS: NgbFilterOperator[] = ['eq', 'neq', 'isnull', 'isnotnull'];\n\nexport const NGB_DATE_FILTER_OPERATORS: NgbFilterOperator[] = [\n  'eq',\n  'neq',\n  'gte',\n  'gt',\n  'lte',\n  'lt'\n];\n\nexport const NGB_SELECT_FILTER_OPERATORS: NgbFilterOperator[] = [\n  'contains',\n  'doesnotcontain',\n  'eq',\n  'neq',\n  'isempty',\n  'isnotempty',\n  'isnull',\n  'isnotnull'\n];\n\nexport function ngbColumnTypeToFilterType(type?: ColumnType): NgbColumnFilterType {\n  switch (type) {\n    case 'number':\n      return 'numeric';\n    case 'boolean':\n      return 'boolean';\n    case 'date':\n      return 'date';\n    case 'select':\n      return 'select';\n    default:\n      return 'text';\n  }\n}\n\nexport function ngbDefaultFilterOperator(type: NgbColumnFilterType): NgbFilterOperator {\n  switch (type) {\n    case 'numeric':\n    case 'boolean':\n      return 'eq';\n    case 'date':\n      return 'gte';\n    default:\n      return 'contains';\n  }\n}\n\nexport function ngbAllowedFilterOperators(type: NgbColumnFilterType): NgbFilterOperator[] {\n  switch (type) {\n    case 'numeric':\n      return [...NGB_NUMERIC_FILTER_OPERATORS];\n    case 'boolean':\n      return [...NGB_BOOLEAN_FILTER_OPERATORS];\n    case 'date':\n      return [...NGB_DATE_FILTER_OPERATORS];\n    case 'select':\n      return [...NGB_SELECT_FILTER_OPERATORS];\n    default:\n      return [...NGB_TEXT_FILTER_OPERATORS];\n  }\n}\n\nexport function ngbFilterOperatorLabel(operator: NgbFilterOperator, type: NgbColumnFilterType = 'text'): string {\n  if (type === 'date') {\n    switch (operator) {\n      case 'eq': return 'Is equal to';\n      case 'neq': return 'Is not equal to';\n      case 'gte': return 'Is after or equal to';\n      case 'gt': return 'Is after';\n      case 'lte': return 'Is before or equal to';\n      case 'lt': return 'Is before';\n      default: break;\n    }\n  }\n  if (type === 'numeric') {\n    switch (operator) {\n      case 'eq': return 'Is equal to';\n      case 'neq': return 'Is not equal to';\n      case 'gte': return 'Is greater than or equal to';\n      case 'gt': return 'Is greater than';\n      case 'lte': return 'Is less than or equal to';\n      case 'lt': return 'Is less than';\n      default: break;\n    }\n  }\n  if (type === 'text' || type === 'select') {\n    switch (operator) {\n      case 'eq': return 'Is equal to';\n      case 'neq': return 'Is not equal to';\n      case 'contains': return 'Contains';\n      case 'doesnotcontain': return 'Does not contain';\n      case 'startswith': return 'Starts with';\n      case 'endswith': return 'Ends with';\n      default: break;\n    }\n  }\n  const labels: Record<NgbFilterOperator, string> = {\n    contains: 'Contains',\n    doesnotcontain: 'Does not contain',\n    eq: 'Equals',\n    neq: 'Does not equal',\n    startswith: 'Starts with',\n    endswith: 'Ends with',\n    gt: 'Greater than',\n    gte: 'Greater than or equal',\n    lt: 'Less than',\n    lte: 'Less than or equal',\n    isnull: 'Is null',\n    isnotnull: 'Is not null',\n    isempty: 'Is empty',\n    isnotempty: 'Is not empty'\n  };\n  return labels[operator];\n}\n\nexport function ngbIsCompositeFilter(\n  filter: NgbFilterDescriptor | NgbCompositeFilterDescriptor\n): filter is NgbCompositeFilterDescriptor {\n  return Array.isArray((filter as NgbCompositeFilterDescriptor).filters);\n}\n\n/** Recursively collects leaf filter descriptors from a composite filter tree. */\nexport function ngbFlattenFilterDescriptors(\n  composite: NgbCompositeFilterDescriptor | null | undefined\n): NgbFilterDescriptor[] {\n  if (!composite?.filters?.length) return [];\n  const descriptors: NgbFilterDescriptor[] = [];\n  for (const item of composite.filters) {\n    if (ngbIsCompositeFilter(item)) {\n      descriptors.push(...ngbFlattenFilterDescriptors(item));\n    } else {\n      descriptors.push(item);\n    }\n  }\n  return descriptors;\n}\n\n/** Returns the first leaf descriptor for `field`, searching nested composite nodes. */\nexport function ngbFindFieldFilterDescriptor(\n  composite: NgbCompositeFilterDescriptor | null | undefined,\n  field: string\n): NgbFilterDescriptor | null {\n  return ngbFlattenFilterDescriptors(composite).find((descriptor) => descriptor.field === field) ?? null;\n}\n\nfunction ngbWithoutFieldFilters(\n  filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>,\n  field: string\n): Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor> {\n  return filters.filter((filter) => {\n    if (ngbIsCompositeFilter(filter)) {\n      return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n    }\n    return filter.field !== field;\n  });\n}\n\nexport function ngbOperatorRequiresFilterValue(operator: NgbFilterOperator): boolean {\n  return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n}\n\n/**\n * Returns a new composite filter with the field set (or removed when value is empty).\n * Supports manual `filterChange(root)` updates from custom filter templates.\n */\nexport function ngbSetFieldFilter(\n  composite: NgbCompositeFilterDescriptor,\n  field: string,\n  operator: NgbFilterOperator,\n  value?: unknown,\n  options?: { requiresValue?: (operator: NgbFilterOperator) => boolean }\n): NgbCompositeFilterDescriptor {\n  const requiresValue = options?.requiresValue ?? ngbOperatorRequiresFilterValue;\n  const filters = ngbWithoutFieldFilters([...composite.filters], field);\n  if (requiresValue(operator)) {\n    const normalized = value === undefined ? null : value;\n    if (normalized === null || normalized === '') {\n      return { logic: composite.logic, filters };\n    }\n    filters.push({ field, operator, value: normalized, ignoreCase: true });\n  } else {\n    filters.push({ field, operator, ignoreCase: true });\n  }\n  return { logic: composite.logic, filters };\n}\n","import {\n  NgbColumnFilterType,\n  NgbCompositeFilterDescriptor,\n  NgbFilterDescriptor,\n  NgbFilterOperator,\n  ngbColumnTypeToFilterType,\n  ngbIsCompositeFilter,\n  ngbOperatorRequiresFilterValue,\n} from './models/filtering';\nimport {\n  NgbDataGridAggregateDescriptor,\n  NgbDataGridAggregateResults,\n  NgbDataGridDataResult,\n  NgbDataGridGroupDescriptor,\n  NgbDataGridGroupResult,\n  NgbDataGridProcessOptions,\n  NgbDataGridSortDescriptor,\n  NgbDataGridState,\n} from './datagrid.types';\n\ntype ColumnMeta<T> = NonNullable<NgbDataGridProcessOptions<T>['columns']>[number];\n\nconst EMPTY_FILTER: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n\nexport function ngbApplyDataGridOperations<T>(\n  data: readonly T[] | null | undefined,\n  options: NgbDataGridProcessOptions<T> = {},\n): NgbDataGridDataResult<T> {\n  const state = options.state ?? {};\n  const rows = [...(data ?? [])];\n  const columns = options.columns ?? [];\n  const filtered = applyGlobalFilter(\n    applyCompositeFilter(rows, state.filter ?? EMPTY_FILTER, columns),\n    state.globalFilter,\n    options.globalFilterFields ?? columns.map((column) => String(column.field)),\n  );\n  const sorted = applySort(filtered, state.sort ?? []);\n  const total = sorted.length;\n  const aggregates = ngbCalculateDataGridAggregates(sorted, options.aggregates ?? []);\n  const page = options.page === false ? sorted : applyPage(sorted, state);\n  const groupedData = (state.group?.length ?? 0) > 0\n    ? (options.groupedData?.length ? cloneGroupResults(options.groupedData) : ngbGroupData(page, state.group ?? []))\n    : undefined;\n\n  return {\n    data: page,\n    total,\n    ...(Object.keys(aggregates).length ? { aggregates } : {}),\n    ...(groupedData?.length ? { groupedData } : {}),\n  };\n}\n\nexport function ngbGroupData<T>(\n  data: readonly T[] | null | undefined,\n  descriptors: readonly NgbDataGridGroupDescriptor[] | null | undefined,\n): NgbDataGridGroupResult<T>[] {\n  const rows = [...(data ?? [])];\n  const normalized = normalizeGroupDescriptors(descriptors);\n  if (!normalized.length || !rows.length) return [];\n  return groupRows(rows, normalized, 0);\n}\n\nexport function ngbCalculateDataGridAggregates<T>(\n  data: readonly T[] | null | undefined,\n  descriptors: readonly NgbDataGridAggregateDescriptor[] | null | undefined,\n): NgbDataGridAggregateResults {\n  const rows = [...(data ?? [])];\n  const results: NgbDataGridAggregateResults = {};\n\n  for (const descriptor of descriptors ?? []) {\n    const field = descriptor.field;\n    const bucket = results[field] ?? {};\n    const values = rows\n      .map((row) => (row as Record<string, unknown>)?.[field])\n      .filter((value) => value !== null && value !== undefined && value !== '');\n    const aggregate = normalizeAggregate(descriptor.aggregate);\n\n    switch (aggregate) {\n      case 'count':\n        bucket.count = values.length;\n        break;\n      case 'sum':\n        bucket.sum = numericValues(values).reduce((sum, value) => sum + value, 0);\n        break;\n      case 'avg': {\n        const numbers = numericValues(values);\n        const average = numbers.length ? numbers.reduce((sum, value) => sum + value, 0) / numbers.length : null;\n        bucket.avg = average;\n        bucket.average = average;\n        break;\n      }\n      case 'min':\n        bucket.min = minMax(values, 'min');\n        break;\n      case 'max':\n        bucket.max = minMax(values, 'max');\n        break;\n      default:\n        break;\n    }\n\n    results[field] = bucket;\n  }\n\n  return results;\n}\n\nfunction applyCompositeFilter<T>(\n  rows: T[],\n  filter: NgbCompositeFilterDescriptor,\n  columns: readonly ColumnMeta<T>[],\n): T[] {\n  if (!filter.filters.length) return rows;\n  return rows.filter((row) => matchesComposite(row, filter, columns));\n}\n\nfunction matchesComposite<T>(\n  row: T,\n  filter: NgbCompositeFilterDescriptor,\n  columns: readonly ColumnMeta<T>[],\n): boolean {\n  if (!filter.filters.length) return true;\n  const results = filter.filters.map((item) =>\n    ngbIsCompositeFilter(item) ? matchesComposite(row, item, columns) : matchesDescriptor(row, item, columns),\n  );\n  return filter.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n}\n\nfunction matchesDescriptor<T>(\n  row: T,\n  descriptor: NgbFilterDescriptor,\n  columns: readonly ColumnMeta<T>[],\n): boolean {\n  const raw = (row as Record<string, unknown>)?.[descriptor.field];\n  const column = columns.find((item) => String(item.field) === descriptor.field);\n  const filterType = resolveFilterType(column, raw, descriptor.value);\n  const cellValue = normalizeFilterValue(raw, filterType);\n  const compareValue = normalizeFilterValue(descriptor.value, filterType);\n  const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n  if (descriptor.operator === 'isnull') return raw == null;\n  if (descriptor.operator === 'isnotnull') return raw != null;\n  if (descriptor.operator === 'isempty') return raw === '';\n  if (descriptor.operator === 'isnotempty') return raw !== '' && raw != null;\n  if (ngbOperatorRequiresFilterValue(descriptor.operator) && (descriptor.value === '' || descriptor.value == null)) {\n    return true;\n  }\n\n  if (filterType === 'numeric' || filterType === 'date') {\n    const left = cellValue as number | null;\n    const right = compareValue as number | null;\n    if (left == null || right == null) return false;\n    return compareByOperator(left, right, descriptor.operator);\n  }\n\n  if (filterType === 'boolean') {\n    switch (descriptor.operator) {\n      case 'eq':\n        return cellValue === compareValue;\n      case 'neq':\n        return cellValue !== compareValue;\n      default:\n        return false;\n    }\n  }\n\n  const left = String(cellValue ?? '');\n  const right = String(compareValue ?? '');\n  const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n  const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n  switch (descriptor.operator) {\n    case 'contains':\n      return normalizedLeft.includes(normalizedRight);\n    case 'doesnotcontain':\n      return !normalizedLeft.includes(normalizedRight);\n    case 'eq':\n      return normalizedLeft === normalizedRight;\n    case 'neq':\n      return normalizedLeft !== normalizedRight;\n    case 'startswith':\n      return normalizedLeft.startsWith(normalizedRight);\n    case 'endswith':\n      return normalizedLeft.endsWith(normalizedRight);\n    default:\n      return false;\n  }\n}\n\nfunction applyGlobalFilter<T>(rows: T[], rawFilter: string | null | undefined, fields: readonly string[]): T[] {\n  const filter = String(rawFilter ?? '').trim().toLowerCase();\n  if (!filter) return rows;\n  return rows.filter((row) => {\n    const source = row as Record<string, unknown>;\n    const searchFields = fields.length ? fields : Object.keys(source);\n    return searchFields.some((field) => String(source[field] ?? '').toLowerCase().includes(filter));\n  });\n}\n\nfunction applySort<T>(rows: T[], descriptors: readonly NgbDataGridSortDescriptor[]): T[] {\n  const sort = descriptors.filter((descriptor) => descriptor.field && descriptor.direction);\n  if (!sort.length) return rows;\n  return [...rows].sort((left, right) => {\n    for (const descriptor of sort) {\n      const result = compareValues(\n        (left as Record<string, unknown>)?.[descriptor.field],\n        (right as Record<string, unknown>)?.[descriptor.field],\n      );\n      if (result !== 0) return descriptor.direction === 'asc' ? result : -result;\n    }\n    return 0;\n  });\n}\n\nfunction applyPage<T>(rows: T[], state: NgbDataGridState): T[] {\n  const pageSize = Number(state.pageSize);\n  if (!Number.isFinite(pageSize) || pageSize <= 0) return rows;\n  const skip = Number.isFinite(Number(state.skip))\n    ? Math.max(0, Math.trunc(Number(state.skip)))\n    : Math.max(0, (Math.max(1, Math.trunc(Number(state.page) || 1)) - 1) * pageSize);\n  return rows.slice(skip, skip + pageSize);\n}\n\nfunction groupRows<T>(\n  rows: T[],\n  descriptors: readonly Required<NgbDataGridGroupDescriptor>[],\n  level: number,\n): NgbDataGridGroupResult<T>[] {\n  const descriptor = descriptors[level];\n  if (!descriptor) return [];\n\n  const buckets = new Map<string, { value: unknown; rows: T[] }>();\n  for (const row of rows) {\n    const value = (row as Record<string, unknown>)?.[descriptor.field];\n    const key = groupValueKey(value);\n    const bucket = buckets.get(key);\n    if (bucket) {\n      bucket.rows.push(row);\n    } else {\n      buckets.set(key, { value, rows: [row] });\n    }\n  }\n\n  const groups = Array.from(buckets.values()).sort((left, right) => {\n    const result = compareValues(left.value, right.value);\n    return descriptor.dir === 'desc' ? -result : result;\n  });\n\n  return groups.map((bucket) => {\n    const childGroups = groupRows(bucket.rows, descriptors, level + 1);\n    return {\n      field: descriptor.field,\n      value: bucket.value,\n      dir: descriptor.dir,\n      level,\n      count: bucket.rows.length,\n      ...(descriptor.aggregates?.length ? { aggregates: ngbCalculateDataGridAggregates(bucket.rows, descriptor.aggregates) } : {}),\n      items: childGroups.length ? childGroups : bucket.rows,\n    };\n  });\n}\n\nfunction normalizeGroupDescriptors(\n  descriptors: readonly NgbDataGridGroupDescriptor[] | null | undefined,\n): Array<Required<NgbDataGridGroupDescriptor>> {\n  const seen = new Set<string>();\n  const normalized: Array<Required<NgbDataGridGroupDescriptor>> = [];\n\n  for (const descriptor of descriptors ?? []) {\n    const field = String(descriptor?.field ?? '').trim();\n    if (!field || seen.has(field)) continue;\n      seen.add(field);\n      normalized.push({\n        field,\n        dir: descriptor.dir === 'desc' ? 'desc' : 'asc',\n        aggregates: [...(descriptor.aggregates ?? [])],\n      });\n    }\n\n  return normalized;\n}\n\nfunction normalizeAggregate(aggregate: NgbDataGridAggregateDescriptor['aggregate']): 'count' | 'sum' | 'avg' | 'min' | 'max' {\n  return aggregate === 'average' ? 'avg' : aggregate;\n}\n\nfunction cloneGroupResults<T>(groups: readonly NgbDataGridGroupResult<T>[]): NgbDataGridGroupResult<T>[] {\n  return groups.map((group) => ({\n    ...group,\n    ...(group.aggregates ? { aggregates: cloneAggregateResults(group.aggregates) } : {}),\n    items: group.items.map((item) => (isGroupResult(item) ? cloneGroupResults([item])[0] : item)),\n  }));\n}\n\nfunction cloneAggregateResults(\n  results: NgbDataGridAggregateResults | null | undefined,\n): NgbDataGridAggregateResults {\n  const cloned: NgbDataGridAggregateResults = {};\n  for (const field of Object.keys(results ?? {})) {\n    cloned[field] = { ...(results as NgbDataGridAggregateResults)[field] };\n  }\n  return cloned;\n}\n\nfunction isGroupResult<T>(item: NgbDataGridGroupResult<T> | T): item is NgbDataGridGroupResult<T> {\n  return typeof item === 'object' && item !== null && Array.isArray((item as NgbDataGridGroupResult<T>).items);\n}\n\nfunction groupValueKey(value: unknown): string {\n  if (value instanceof Date) return `date:${value.toISOString()}`;\n  return `${typeof value}:${String(value)}`;\n}\n\nfunction resolveFilterType<T>(\n  column: ColumnMeta<T> | undefined,\n  raw: unknown,\n  value: unknown,\n): NgbColumnFilterType {\n  if (column?.filterType) return column.filterType as NgbColumnFilterType;\n  if (column?.type) return ngbColumnTypeToFilterType(column.type as any);\n  if (typeof raw === 'number' || typeof value === 'number') return 'numeric';\n  if (typeof raw === 'boolean' || typeof value === 'boolean') return 'boolean';\n  if (raw instanceof Date || value instanceof Date) return 'date';\n  return 'text';\n}\n\nfunction normalizeFilterValue(value: unknown, type: NgbColumnFilterType): unknown {\n  if (value === '' || value === undefined || value === null) return null;\n  switch (type) {\n    case 'numeric': {\n      const parsed = Number(value);\n      return Number.isNaN(parsed) ? null : parsed;\n    }\n    case 'date': {\n      const parsed = value instanceof Date ? value.getTime() : Date.parse(String(value));\n      return Number.isNaN(parsed) ? null : parsed;\n    }\n    case 'boolean':\n      if (value === 'true') return true;\n      if (value === 'false') return false;\n      return !!value;\n    default:\n      return String(value);\n  }\n}\n\nfunction compareByOperator(left: number, right: number, operator: NgbFilterOperator): boolean {\n  switch (operator) {\n    case 'eq':\n      return left === right;\n    case 'neq':\n      return left !== right;\n    case 'gt':\n      return left > right;\n    case 'gte':\n      return left >= right;\n    case 'lt':\n      return left < right;\n    case 'lte':\n      return left <= right;\n    default:\n      return false;\n  }\n}\n\nfunction compareValues(left: unknown, right: unknown): number {\n  if (left == null && right == null) return 0;\n  if (left == null) return -1;\n  if (right == null) return 1;\n  const leftNumber = Number(left);\n  const rightNumber = Number(right);\n  if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {\n    return leftNumber - rightNumber;\n  }\n  return String(left).localeCompare(String(right), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nfunction numericValues(values: unknown[]): number[] {\n  return values.map((value) => Number(value)).filter((value) => Number.isFinite(value));\n}\n\nfunction minMax(values: unknown[], mode: 'min' | 'max'): number | string | Date | null {\n  if (!values.length) return null;\n  return values.reduce((winner, candidate) => {\n    const result = compareValues(candidate, winner);\n    return mode === 'min' ? (result < 0 ? candidate : winner) : (result > 0 ? candidate : winner);\n  }) as number | string | Date | null;\n}\n","import { inject, Injectable } from \"@angular/core\";\n\nexport interface PdfExportOptions {\n  pageSize?: 'A4' | 'Letter' | string;\n  landscape?: boolean;\n  margins?: [number, number, number, number];\n}\n\nexport interface PdfExportPayload {\n  fileName: string;\n  columns: string[];\n  rows: Array<Record<string, unknown>>;\n  options?: PdfExportOptions;\n}\n\nexport interface ExcelExportPayload {\n  fileName: string;\n  sheetName: string;\n  columns: Array<{ key: string; title: string }>;\n  rows: Array<Record<string, unknown>>;\n}\n\nexport abstract class PdfExportAdapter { abstract export(p: PdfExportPayload): Promise<void>; }\nexport abstract class ExcelExportAdapter { abstract export(p: ExcelExportPayload): Promise<void>; }\n\n@Injectable({ providedIn: 'root' })\nexport class NgbExportService {\n  // Optional injections via inject()\n  private pdf = inject(PdfExportAdapter, { optional: true });\n  private excel = inject(ExcelExportAdapter, { optional: true });\n\n  exportPdf(p: PdfExportPayload) {\n    if (!this.pdf) throw new Error('No PdfExportAdapter provided');\n    return this.pdf.export(p);\n  }\n\n  exportExcel(p: ExcelExportPayload) {\n    if (!this.excel) throw new Error('No ExcelExportAdapter provided');\n    return this.excel.export(p);\n  }\n}\n","import { signal } from '@angular/core';\n\nexport type NgbDatagridRowId = unknown;\n\nexport type NgbDatagridTrackByFn<T> = (index: number, row: T) => NgbDatagridRowId;\n\nexport interface NgbDatagridEditService<T> {\n  /**\n   * Create a new row in the provided data set.\n   * Implementations may mark the row as \"new\" until `saveChanges` is called.\n   */\n  create(data: readonly T[], newRow: T, rowIndex: number, rowId: NgbDatagridRowId): T[];\n\n  /**\n   * Update an existing row in the provided data set.\n   * Implementations may snapshot the original row to support `cancelChanges` and `hasChanges`.\n   */\n  update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: NgbDatagridRowId): T[];\n\n  /**\n   * Remove a row from the provided data set.\n   */\n  remove(data: readonly T[], rowIndex: number, rowId: NgbDatagridRowId): T[];\n\n  /**\n   * Used by the datagrid while editing to compute a new row instance.\n   * Default behavior is a shallow merge of the values into the row.\n   */\n  assignValues(row: T, values: Partial<T>): T;\n\n  /**\n   * Whether this row is considered newly created (not yet saved).\n   */\n  isNew(rowId: NgbDatagridRowId): boolean;\n\n  /**\n   * Whether the row differs from its captured baseline (after `update`/`create` starts tracking).\n   */\n  hasChanges(rowId: NgbDatagridRowId, currentRow: T): boolean;\n\n  /**\n   * Commit current changes (and clear tracking state) for the row.\n   */\n  saveChanges(data: readonly T[], rowIndex: number, rowId: NgbDatagridRowId, currentRow: T): T[];\n\n  /**\n   * Revert tracked changes for the row (or remove it if it was new).\n   */\n  cancelChanges(data: readonly T[], rowIndex: number, rowId: NgbDatagridRowId): T[];\n}\n\ntype RecordLike = Record<string, unknown>;\n\nconst hasStructuredClone = (\n  value: typeof globalThis,\n): value is typeof globalThis & { structuredClone: <T>(input: T) => T } => typeof value.structuredClone === 'function';\n\nconst clone = <T>(value: T): T => {\n  try {\n    if (hasStructuredClone(globalThis)) {\n      return globalThis.structuredClone(value);\n    }\n\n    return JSON.parse(JSON.stringify(value)) as T;\n  } catch {\n    return value;\n  }\n};\n\nconst asRecordLike = (value: unknown): RecordLike | null =>\n  typeof value === 'object' && value !== null ? (value as RecordLike) : null;\n\nconst shallowEqual = (a: RecordLike | null, b: RecordLike | null): boolean => {\n  if (a === b) return true;\n  if (!a || !b) return false;\n  const aKeys = Object.keys(a);\n  const bKeys = Object.keys(b);\n  if (aKeys.length !== bKeys.length) return false;\n  for (const key of aKeys) {\n    if (a[key] !== b[key]) return false;\n  }\n  return true;\n};\n\nexport class NgbDatagridDefaultEditService<T> implements NgbDatagridEditService<T> {\n  private originals = signal<Array<{ id: NgbDatagridRowId; row: T }>>([]);\n  private newRows = signal<NgbDatagridRowId[]>([]);\n\n  create(data: readonly T[], newRow: T, _rowIndex: number, rowId: NgbDatagridRowId): T[] {\n    this.newRows.update((ids) => (ids.some((id) => Object.is(id, rowId)) ? ids : [...ids, rowId]));\n    // Baseline for a new row is itself until saved/cancelled.\n    this.originals.update((items) => {\n      if (items.some((it) => Object.is(it.id, rowId))) return items;\n      return [...items, { id: rowId, row: clone(newRow) }];\n    });\n    return [...data, newRow];\n  }\n\n  update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: NgbDatagridRowId): T[] {\n    // Snapshot original the first time we see this rowId.\n    const hasBaseline = this.originals().some((it) => Object.is(it.id, rowId));\n    if (!hasBaseline) {\n      const current = data[rowIndex];\n      if (current != null) {\n        this.originals.update((items) => [...items, { id: rowId, row: clone(current) }]);\n      }\n    }\n    return this.replaceRow(data, updatedRow, rowIndex);\n  }\n\n  remove(data: readonly T[], rowIndex: number, rowId: NgbDatagridRowId): T[] {\n    this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n    this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n    return this.removeRow(data, rowIndex);\n  }\n\n  assignValues(row: T, values: Partial<T>): T {\n    return { ...(row as object), ...(values as object) } as T;\n  }\n\n  isNew(rowId: NgbDatagridRowId): boolean {\n    return this.newRows().some((id) => Object.is(id, rowId));\n  }\n\n  hasChanges(rowId: NgbDatagridRowId, currentRow: T): boolean {\n    const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n    if (!baseline) return false;\n    return !shallowEqual(asRecordLike(baseline), asRecordLike(currentRow));\n  }\n\n  saveChanges(data: readonly T[], _rowIndex: number, rowId: NgbDatagridRowId, _currentRow: T): T[] {\n    this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n    // Once saved, clear baseline tracking (no longer \"dirty\").\n    this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n    // Data is already updated by `create` or `update` at this point.\n    return data.slice();\n  }\n\n  cancelChanges(data: readonly T[], rowIndex: number, rowId: NgbDatagridRowId): T[] {\n    if (this.newRows().some((id) => Object.is(id, rowId))) {\n      this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n      this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n      return this.removeRow(data, rowIndex);\n    }\n    const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n    this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n    if (!baseline) return data.slice();\n    return this.replaceRow(data, baseline, rowIndex);\n  }\n\n  private replaceRow(data: readonly T[], updatedRow: T, rowIndex: number): T[] {\n    if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n    const copy = data.slice() as T[];\n    copy[rowIndex] = updatedRow;\n    return copy;\n  }\n\n  private removeRow(data: readonly T[], rowIndex: number): T[] {\n    if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n    return data.filter((_, i) => i !== rowIndex);\n  }\n}\n","import { PdfExportAdapter, PdfExportPayload } from '../services/export.services';\n\nconst PAGE_SIZES: Record<string, [number, number]> = {\n  A4: [595.28, 841.89],\n  Letter: [612, 792],\n};\n\nexport class JsPdfAdapter implements PdfExportAdapter {\n  async export(payload: PdfExportPayload) {\n    const pdf = this.createPdf(payload);\n    const blob = new Blob([pdf], { type: 'application/pdf' });\n    const url = URL.createObjectURL(blob);\n    const link = document.createElement('a');\n    link.href = url;\n    link.download = `${payload.fileName}.pdf`;\n    link.click();\n    URL.revokeObjectURL(url);\n  }\n\n  private createPdf({ fileName, columns, rows, options }: PdfExportPayload): string {\n    const requestedSize = String(options?.pageSize || 'A4');\n    const baseSize = PAGE_SIZES[requestedSize] || PAGE_SIZES.A4;\n    const landscape = Boolean(options?.landscape);\n    const [pageWidth, pageHeight] = landscape ? [baseSize[1], baseSize[0]] : baseSize;\n    const margin = this.resolveMargin(options?.margins);\n    const lineHeight = 14;\n    const maxLines = Math.max(1, Math.floor((pageHeight - margin.top - margin.bottom - 52) / lineHeight));\n    const tableLines = this.toTableLines(columns, rows);\n    const pages = this.chunk(tableLines, maxLines);\n    const objects: string[] = [];\n    const pageIds: number[] = [];\n\n    objects.push('<< /Type /Catalog /Pages 2 0 R >>');\n    objects.push('');\n\n    for (const [index, lines] of pages.entries()) {\n      const pageObjectId = objects.length + 1;\n      const contentObjectId = pageObjectId + 1;\n      pageIds.push(pageObjectId);\n      objects.push(\n        `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${pages.length * 2 + 3} 0 R >> >> /Contents ${contentObjectId} 0 R >>`\n      );\n      objects.push(this.contentStream(fileName, lines, index + 1, pages.length, pageHeight, margin, lineHeight));\n    }\n\n    objects[1] = `<< /Type /Pages /Kids [${pageIds.map(id => `${id} 0 R`).join(' ')}] /Count ${pageIds.length} >>`;\n    objects.push('<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>');\n\n    return this.serializePdf(objects);\n  }\n\n  private resolveMargin(margins?: [number, number, number, number]) {\n    if (!Array.isArray(margins) || margins.length !== 4) {\n      return { top: 40, right: 40, bottom: 40, left: 40 };\n    }\n    const [top, right, bottom, left] = margins.map(value => Math.max(16, Number(value) || 40));\n    return { top, right, bottom, left };\n  }\n\n  private toTableLines(columns: string[], rows: any[]): string[] {\n    const headers = columns.map(column => this.printable(column));\n    const body = rows.map(row => columns.map(column => this.printable(row?.[column])));\n    const widths = headers.map((header, index) =>\n      Math.min(\n        24,\n        Math.max(\n          header.length,\n          ...body.map(values => values[index]?.length || 0)\n        )\n      )\n    );\n    const format = (values: string[]) => values.map((value, index) => value.padEnd(widths[index]).slice(0, widths[index])).join('  ');\n    return [\n      format(headers),\n      widths.map(width => '-'.repeat(width)).join('  '),\n      ...body.map(format),\n    ];\n  }\n\n  private contentStream(\n    fileName: string,\n    lines: string[],\n    page: number,\n    totalPages: number,\n    pageHeight: number,\n    margin: { top: number; left: number },\n    lineHeight: number\n  ): string {\n    const commands = [\n      'BT',\n      `/F1 16 Tf ${margin.left} ${pageHeight - margin.top} Td (${this.pdfText(fileName)}) Tj`,\n      `/F1 9 Tf 0 -24 Td (${this.pdfText(`Page ${page} of ${totalPages}`)}) Tj`,\n      ...lines.map(line => `0 -${lineHeight} Td (${this.pdfText(line)}) Tj`),\n      'ET',\n    ].join('\\n');\n    return `<< /Length ${commands.length} >>\\nstream\\n${commands}\\nendstream`;\n  }\n\n  private chunk<T>(items: T[], size: number): T[][] {\n    const pages: T[][] = [];\n    for (let index = 0; index < items.length; index += size) {\n      pages.push(items.slice(index, index + size));\n    }\n    return pages.length ? pages : [[]];\n  }\n\n  private printable(value: unknown): string {\n    if (value === null || value === undefined) {\n      return '';\n    }\n    return String(value).replace(/[^\\x20-\\x7E]/g, '?').replace(/\\s+/g, ' ').trim();\n  }\n\n  private pdfText(value: string): string {\n    return value.replace(/\\\\/g, '\\\\\\\\').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\n  }\n\n  private serializePdf(objects: string[]): string {\n    let pdf = '%PDF-1.4\\n';\n    const offsets = [0];\n    for (const [index, object] of objects.entries()) {\n      offsets[index + 1] = pdf.length;\n      pdf += `${index + 1} 0 obj\\n${object}\\nendobj\\n`;\n    }\n    const xrefOffset = pdf.length;\n    pdf += `xref\\n0 ${objects.length + 1}\\n0000000000 65535 f \\n`;\n    for (let index = 1; index <= objects.length; index++) {\n      pdf += `${String(offsets[index]).padStart(10, '0')} 00000 n \\n`;\n    }\n    pdf += `trailer\\n<< /Size ${objects.length + 1} /Root 1 0 R >>\\nstartxref\\n${xrefOffset}\\n%%EOF`;\n    return pdf;\n  }\n}\n","import { ExcelExportAdapter, ExcelExportPayload } from '../services/export.services';\n\nexport class BrowserExcelExportAdapter implements ExcelExportAdapter {\n  async export(payload: ExcelExportPayload) {\n    const workbook = this.createSpreadsheetXml(payload);\n    const blob = new Blob([workbook], { type: 'application/vnd.ms-excel;charset=utf-8' });\n    const url = URL.createObjectURL(blob);\n    const anchor = document.createElement('a');\n    anchor.href = url;\n    anchor.download = `${this.baseFileName(payload.fileName)}.xls`;\n    anchor.style.display = 'none';\n\n    document.body.appendChild(anchor);\n    anchor.click();\n    anchor.remove();\n    URL.revokeObjectURL(url);\n  }\n\n  private createSpreadsheetXml({ sheetName, columns, rows }: ExcelExportPayload) {\n    const header = this.createRow(columns.map(column => column.title));\n    const body = rows.map(row => this.createRow(columns.map(column => row[column.key]))).join('');\n\n    return `<?xml version=\"1.0\"?>\n<?mso-application progid=\"Excel.Sheet\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\n  xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n  xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n  xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n  <Worksheet ss:Name=\"${this.escapeXml(this.safeSheetName(sheetName))}\">\n    <Table>${header}${body}</Table>\n  </Worksheet>\n</Workbook>`;\n  }\n\n  private createRow(values: unknown[]) {\n    return `<Row>${values.map(value => this.createCell(value)).join('')}</Row>`;\n  }\n\n  private createCell(value: unknown) {\n    if (value === null || value === undefined) {\n      return '<Cell><Data ss:Type=\"String\"></Data></Cell>';\n    }\n\n    if (typeof value === 'number' && Number.isFinite(value)) {\n      return `<Cell><Data ss:Type=\"Number\">${value}</Data></Cell>`;\n    }\n\n    if (typeof value === 'boolean') {\n      return `<Cell><Data ss:Type=\"Boolean\">${value ? 1 : 0}</Data></Cell>`;\n    }\n\n    if (value instanceof Date) {\n      return `<Cell><Data ss:Type=\"DateTime\">${value.toISOString()}</Data></Cell>`;\n    }\n\n    return `<Cell><Data ss:Type=\"String\">${this.escapeXml(String(value))}</Data></Cell>`;\n  }\n\n  private safeSheetName(sheetName: string) {\n    return (sheetName || 'Sheet1').replace(/[\\\\/?*[\\]:]/g, '').slice(0, 31) || 'Sheet1';\n  }\n\n  private baseFileName(fileName: string) {\n    return (fileName || 'export').replace(/\\.(xls)$/i, '');\n  }\n\n  private escapeXml(value: string) {\n    return value\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&apos;');\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport interface ExportButtonContext {\n  $implicit: (kind: 'pdf' | 'excel') => void; // let-trigger\n}\n\n@Directive({ selector: '[ngbExportButton]' })\nexport class ExportButtonDirective {\n  // Expose the TemplateRef so the grid can render it with a context\n  readonly templateRef = inject<TemplateRef<ExportButtonContext>>(TemplateRef as any);\n}\n","import { Directive, Input } from '@angular/core';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport { NgbColumnFilterType, NgbFilterOperator } from '../models/filtering';\n\n@Directive({\n  selector: 'ngb-grid-column',\n  standalone: true\n})\nexport class NgbGridColumnDirective<T = any> implements ColumnDef<T> {\n  @Input() field!: Extract<keyof T, string>;\n  @Input() header!: string;\n  @Input() title?: string;\n  @Input() cellTitle?: string | ((row: T) => string);\n  @Input() sortable?: boolean;\n  @Input() filterable?: boolean;\n  @Input() filterType?: NgbColumnFilterType;\n  @Input() defaultFilterOperator?: NgbFilterOperator;\n  @Input() allowedFilterOperators?: NgbFilterOperator[];\n  @Input() showFilterMenu?: boolean;\n  @Input() showFilterRow?: boolean;\n  @Input() showFilterOperator?: boolean;\n  @Input() editable?: boolean;\n  @Input() type?: ColumnType;\n  @Input() options?: Array<{ label: string; value: unknown }>;\n  @Input() width?: number;\n  @Input() stackedGroup?: 'start' | 'center' | 'end';\n  @Input() required?: boolean;\n  @Input() hidden?: boolean;\n  @Input() sticky?: boolean | 'start' | 'end';\n  @Input() locked?: boolean;\n  @Input() reorderable?: boolean;\n  @Input() resizable?: boolean;\n  @Input() minResizableWidth?: number;\n  @Input() maxResizableWidth?: number;\n\n  toColumnDef(): ColumnDef<T> {\n    return {\n      field: this.field,\n      header: this.header,\n      title: this.title,\n      cellTitle: this.cellTitle,\n      sortable: this.sortable,\n      filterable: this.filterable,\n      filterType: this.filterType,\n      defaultFilterOperator: this.defaultFilterOperator,\n      allowedFilterOperators: this.allowedFilterOperators,\n      showFilterMenu: this.showFilterMenu,\n      showFilterRow: this.showFilterRow,\n      showFilterOperator: this.showFilterOperator,\n      editable: this.editable,\n      type: this.type,\n      options: this.options,\n      width: this.width,\n      stackedGroup: this.stackedGroup,\n      required: this.required,\n      hidden: this.hidden,\n      sticky: this.sticky,\n      locked: this.locked,\n      reorderable: this.reorderable,\n      resizable: this.resizable,\n      minResizableWidth: this.minResizableWidth,\n      maxResizableWidth: this.maxResizableWidth\n    };\n  }\n}\n\nexport const DATAGRID_COLUMN_DIRECTIVES = [NgbGridColumnDirective];\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nexport type NgbDatagridButtonVariant =\n  | 'primary'\n  | 'secondary'\n  | 'success'\n  | 'danger'\n  | 'neutral'\n  | 'icon';\n\n@Directive({\n  selector: 'button[ngbDatagridButton], a[ngbDatagridButton]',\n  standalone: true,\n})\nexport class NgbDatagridButtonDirective {\n  @Input('ngbDatagridButton') variant: NgbDatagridButtonVariant = 'secondary';\n\n  @HostBinding('class.datagrid-toolbar__button') get toolbarButtonClass(): boolean {\n    return this.variant === 'primary' || this.variant === 'secondary';\n  }\n\n  @HostBinding('class.datagrid-toolbar__button--primary') get toolbarPrimary(): boolean {\n    return this.variant === 'primary';\n  }\n\n  @HostBinding('class.datagrid-toolbar__button--secondary') get toolbarSecondary(): boolean {\n    return this.variant === 'secondary';\n  }\n\n  @HostBinding('class.grid-row-action') get rowActionClass(): boolean {\n    return this.variant === 'success' || this.variant === 'danger' || this.variant === 'neutral';\n  }\n\n  @HostBinding('class.grid-row-action--success') get rowSuccess(): boolean {\n    return this.variant === 'success';\n  }\n\n  @HostBinding('class.grid-row-action--danger') get rowDanger(): boolean {\n    return this.variant === 'danger';\n  }\n\n  @HostBinding('class.grid-row-action--neutral') get rowNeutral(): boolean {\n    return this.variant === 'neutral';\n  }\n\n  @HostBinding('class.grid-filter-menu-trigger') get iconButtonClass(): boolean {\n    return this.variant === 'icon';\n  }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n  selector: 'input[ngbDatagridControl], select[ngbDatagridControl], textarea[ngbDatagridControl]',\n  standalone: true,\n})\nexport class NgbDatagridControlDirective {\n  @Input() ngbDatagridControlMode: 'filter' | 'edit' = 'filter';\n\n  @HostBinding('class.grid-filter-control') get filterClass(): boolean {\n    return this.ngbDatagridControlMode === 'filter';\n  }\n\n  @HostBinding('class.grid-edit-control') get editClass(): boolean {\n    return this.ngbDatagridControlMode === 'edit';\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'tr[ngbDatagridAddRow]',\n  standalone: true,\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (grid.showSelectionColumn()) {\n    <td\n      [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n      [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n    ></td>\n    }\n    @if (grid.rowDetailTpl) {\n    <td\n      [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n      [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n    ></td>\n    }\n    @if (grid.stickyRowsEnabled) {\n    <td\n      class=\"text-center\"\n      [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n      [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n    ></td>\n    }\n\n    @for (col of grid.visibleColumns; track col.field) {\n    <td\n      [attr.data-title]=\"col.header\"\n      [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n      [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n      [style.left.px]=\"grid.columnStartOffset(col)\"\n      [style.right.px]=\"grid.columnEndOffset(col)\"\n    >\n      @switch (col.type) {\n        @case ('boolean') {\n        <div\n          class=\"form-check m-0 grid-edit-boolean\"\n          [class.is-invalid]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n          \"\n        >\n          <input\n            type=\"checkbox\"\n            class=\"form-check-input grid-edit-checkbox\"\n            [formControlName]=\"col.field\"\n            [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n            [attr.aria-invalid]=\"\n              (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n              grid.addForm.get(col.field)?.invalid\n                ? 'true'\n                : null\n            \"\n            [attr.aria-describedby]=\"\n              (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n              grid.addForm.get(col.field)?.invalid\n                ? 'add-error-' + col.field\n                : null\n            \"\n          />\n        </div>\n        }\n\n        @case ('select') {\n        <select\n          ngbDatagridControl\n          [ngbDatagridControlMode]=\"'edit'\"\n          [class.is-invalid]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n          \"\n          [formControlName]=\"col.field\"\n          [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n          [attr.aria-invalid]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n              ? 'true'\n              : null\n          \"\n          [attr.aria-describedby]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n              ? 'add-error-' + col.field\n              : null\n          \"\n        >\n          @for (option of col.options ?? []; track option.value) {\n            <option [ngValue]=\"option.value\">{{ option.label }}</option>\n          }\n        </select>\n        }\n\n        @default {\n        <input\n          ngbDatagridControl\n          [ngbDatagridControlMode]=\"'edit'\"\n          [class.is-invalid]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n          \"\n          [attr.type]=\"\n            col.type === 'number'\n              ? 'number'\n              : col.type === 'email'\n                ? 'email'\n                : col.type === 'date'\n                  ? 'date'\n                  : 'text'\n          \"\n          [formControlName]=\"col.field\"\n          [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n          [attr.aria-invalid]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n              ? 'true'\n              : null\n          \"\n          [attr.aria-describedby]=\"\n            (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n            grid.addForm.get(col.field)?.invalid\n              ? 'add-error-' + col.field\n              : null\n          \"\n        />\n        }\n      }\n\n      @if ((grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) && grid.addForm.get(col.field)?.errors; as e) {\n        <div class=\"invalid-feedback d-block\" [attr.id]=\"'add-error-' + col.field\" role=\"alert\">\n          @if (e['required']) { Required }\n          @if (e['email']) { Invalid email }\n          @if (e['number']) { Invalid number }\n          @if (e['date']) { Invalid date }\n        </div>\n      }\n    </td>\n    }\n\n    @if (grid.showActionsColumn()) {\n    <td class=\"text-center grid-actions-cell\" [style.width.px]=\"grid.utilityColumnWidth('actions')\">\n      <div class=\"grid-actions-cell__inner\">\n        <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"grid.saveAdd()\" [disabled]=\"grid.addForm.invalid\">\n          Save\n        </button>\n        <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelAdd()\">\n          Cancel\n        </button>\n      </div>\n    </td>\n    }\n  `\n})\nexport class NgbDatagridAddRowComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'colgroup[ngbDatagridColgroup]',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    @if (grid.showSelectionColumn()) {\n      <col [style.width.px]=\"grid.utilityColumnWidth('selection')\" />\n    }\n    @if (grid.rowDetailTpl) {\n      <col [style.width.px]=\"grid.utilityColumnWidth('detail')\" data-fixed=\"true\" />\n    }\n    @if (grid.stickyRowsEnabled) {\n      <col [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\" />\n    }\n    @for (col of grid.visibleColumns; track col.field) {\n      <col\n        [style.width.px]=\"grid.columnWidth(col) || null\"\n        [attr.data-fixed]=\"grid.resizable ? 'true' : null\"\n      />\n    }\n    @if (grid.showActionsColumn()) {\n      <col [style.width.px]=\"grid.utilityColumnWidth('actions')\" />\n    }\n  `\n})\nexport class NgbDatagridColgroupComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, ReactiveFormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'tr[ngbDatagridDataRow]',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (grid.showSelectionColumn()) {\n    <td\n      class=\"text-center align-middle\"\n      [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('selection')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n      [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('selection')\"\n    >\n      <input\n        type=\"checkbox\"\n        [checked]=\"selected\"\n        [disabled]=\"\n          grid.selectionMode === 'none' ||\n          grid.selectionBehavior === 'row' ||\n          grid.isSelectionDisabled(row, index)\n        \"\n        (click)=\"$event.stopPropagation()\"\n        (change)=\"grid.toggleSelection(index, $event)\"\n        [attr.aria-label]=\"grid.rowSelectionLabel(index)\"\n      />\n    </td>\n    }\n\n    @if (grid.rowDetailTpl) {\n    <td\n      class=\"text-center align-middle\"\n      [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('detail')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n      [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('detail')\"\n    >\n      <button\n        type=\"button\"\n        class=\"grid-detail-toggle\"\n        (click)=\"$event.stopPropagation(); grid.toggleExpand(index)\"\n        [attr.aria-expanded]=\"grid.isExpanded(index)\"\n        [attr.aria-controls]=\"'dg-row-detail-' + index\"\n        [attr.aria-label]=\"grid.isExpanded(index) ? grid.collapseRowAriaLabel : grid.expandRowAriaLabel\"\n      >\n        <span\n          class=\"bi\"\n          [ngClass]=\"grid.isExpanded(index) ? 'bi-chevron-down' : 'bi-chevron-right'\"\n          aria-hidden=\"true\"\n        ></span>\n      </button>\n    </td>\n    }\n\n    @if (grid.stickyRowsEnabled) {\n    <td\n      class=\"text-center align-middle\"\n      data-title=\"Sticky\"\n      [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('sticky-toggle')\"\n      [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n      [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('sticky-toggle')\"\n    >\n      <button\n        type=\"button\"\n        class=\"btn btn-link p-0 no-edit-trigger sticky-toggle\"\n        (click)=\"$event.stopPropagation(); grid.toggleStickyRow(index)\"\n        [attr.aria-pressed]=\"grid.isRowSticky(row, index)\"\n        [attr.aria-label]=\"grid.stickyRowToggleAriaLabel()\"\n      >\n        @if (grid.stickyIcon(row, index); as icon) {\n          <span class=\"bi\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n        }\n      </button>\n    </td>\n    }\n\n    @if (grid.isStackedCardsLayout()) {\n      <td [attr.colspan]=\"grid.stackedCardColspan()\" class=\"ngb-stacked-card-cell\">\n        <div class=\"ngb-stacked-card\">\n          <div class=\"ngb-stacked-card__layout\">\n            @for (group of grid.stackedCardGroups(); track group) {\n            <div\n              class=\"ngb-stacked-card__group\"\n              [attr.data-stacked-group]=\"group\"\n            >\n              @for (col of grid.stackedColumnsInGroup(group); track col.field) {\n              <div\n                class=\"ngb-stacked-card__field\"\n                [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, grid.visibleColumnIndex(col))\"\n                [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n                [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n                [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n                [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n                (mousedown)=\"grid.onCellMouseDown($event, index, col)\"\n                (click)=\"grid.onCellClick($event, index, col)\"\n              >\n                <div class=\"ngb-stacked-card__label\">{{ col.header }}</div>\n                <div class=\"ngb-stacked-card__value\">\n                  <ng-container\n                    *ngTemplateOutlet=\"\n                      dataCell;\n                      context: { col: col, ci: grid.visibleColumnIndex(col) }\n                    \"\n                  ></ng-container>\n                </div>\n              </div>\n              }\n            </div>\n            }\n          </div>\n        </div>\n      </td>\n    } @else {\n      @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n      <td\n        role=\"gridcell\"\n        [attr.data-col-index]=\"ci\"\n        [attr.aria-colindex]=\"grid.ariaColIndexForDataColumn(ci)\"\n        [attr.tabindex]=\"grid.cellTabIndex(index, ci)\"\n        [attr.data-title]=\"grid.isStackedLayout() ? col.header : null\"\n        [attr.title]=\"grid.cellTitle(row, col)\"\n        [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, ci)\"\n        [class.grid-cell--focused]=\"grid.isCellFocused(index, ci)\"\n        [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n        [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n        [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n        [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n        [class.column-locked]=\"col.locked\"\n        [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n        [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n        [style.width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n        [style.min-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n        [style.max-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n        [style.left.px]=\"grid.isStackedLayout() ? null : grid.columnStartOffset(col)\"\n        [style.right.px]=\"grid.isStackedLayout() ? null : grid.columnEndOffset(col)\"\n        (focus)=\"grid.onDataCellFocus(index, ci)\"\n        (keydown)=\"grid.onDataCellKeydown($event, index, ci, col)\"\n        (mousedown)=\"grid.onCellMouseDown($event, index, col)\"\n        (click)=\"grid.onCellClick($event, index, col)\"\n      >\n        <ng-container *ngTemplateOutlet=\"dataCell; context: { col: col, ci: ci }\"></ng-container>\n      </td>\n      }\n    }\n\n    @if (grid.showActionsColumn()) {\n    <td\n      class=\"text-center grid-actions-cell\"\n      [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('actions')\"\n    >\n      <ng-container *ngTemplateOutlet=\"actionsCell\"></ng-container>\n    </td>\n    }\n\n    <ng-template #dataCell let-col=\"col\" let-ci=\"ci\">\n      @if (grid.isCellInEditMode(index, col)) {\n        @if (grid.editTpls[col.field]; as et) {\n          <ng-container\n            [ngTemplateOutlet]=\"et.template\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: grid.editForm.get(col.field),\n              control: grid.editForm.get(col.field),\n              row: row,\n              col: col,\n              form: grid.editForm,\n              index: index,\n              isNew: false,\n            }\"\n          >\n          </ng-container>\n        } @else {\n          @switch (col.type) {\n            @case ('boolean') {\n            <div class=\"form-check m-0 grid-edit-boolean\">\n              <input\n                type=\"checkbox\"\n                class=\"form-check-input grid-edit-checkbox\"\n                [formControlName]=\"col.field\"\n                [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n                [attr.aria-invalid]=\"\n                  (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n                  grid.editForm?.get(col.field)?.invalid\n                    ? 'true'\n                    : null\n                \"\n                [attr.aria-describedby]=\"\n                  (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n                  grid.editForm?.get(col.field)?.invalid\n                    ? 'edit-error-' + col.field\n                    : null\n                \"\n              />\n            </div>\n            }\n            @case ('select') {\n            <select\n              ngbDatagridControl\n              [ngbDatagridControlMode]=\"'edit'\"\n              [formControlName]=\"col.field\"\n              [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n            >\n              @for (o of col.options ?? []; track o.value) {\n                <option [ngValue]=\"o.value\">{{ o.label }}</option>\n              }\n            </select>\n            }\n            @default {\n            <input\n              ngbDatagridControl\n              [ngbDatagridControlMode]=\"'edit'\"\n              [attr.type]=\"\n                col.type === 'number'\n                  ? 'number'\n                  : col.type === 'email'\n                    ? 'email'\n                    : col.type === 'date'\n                      ? 'date'\n                      : 'text'\n              \"\n              [formControlName]=\"col.field\"\n              (keydown)=\"grid.onCellKeydown($event, index, col, ci)\"\n              [attr.autofocus]=\"grid.isCellInEditMode(index, col) ? '' : null\"\n              [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n              [attr.aria-invalid]=\"\n                (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n                grid.editForm?.get(col.field)?.invalid\n                  ? 'true'\n                  : null\n              \"\n              [attr.aria-describedby]=\"\n                (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n                grid.editForm?.get(col.field)?.invalid\n                  ? 'edit-error-' + col.field\n                  : null\n              \"\n            />\n            }\n          }\n\n          @if ((grid.editForm?.touched || grid.saveAttemptedEdit) && grid.editForm?.get(col.field)?.errors; as e) {\n            <div class=\"invalid-feedback d-block\" [attr.id]=\"'edit-error-' + col.field\" role=\"alert\">\n              @if (e['required']) { <span>Required</span> }\n              @if (e['email']) { <span>Invalid email</span> }\n              @if (e['number']) { <span>Invalid number</span> }\n              @if (e['date']) { <span>Invalid date</span> }\n            </div>\n          }\n        }\n      } @else {\n        @if (grid.cellTpls[col.field]; as ct) {\n          <ng-container\n            [ngTemplateOutlet]=\"ct.template\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: valueFor(row, col),\n              row: row,\n              col: col,\n              index: index,\n            }\"\n          >\n          </ng-container>\n        } @else {\n          <div class=\"grid-cell-content\">\n            @switch (col.type) {\n              @case ('boolean') {\n              <span class=\"grid-boolean-pill\" [class.grid-boolean-pill--true]=\"valueFor(row, col)\">\n                {{ grid.booleanDisplayLabel(!!valueFor(row, col)) }}\n              </span>\n              }\n              @default {\n              <span class=\"grid-cell-text\">\n                @if (grid.isSearchHighlightEnabled() && grid.shouldHighlightSearchInColumn(col.field)) {\n                  @for (part of grid.getSearchHighlightSegments(valueFor(row, col), col.field); track part.key) {\n                    @if (part.match) {\n                      <mark class=\"grid-search-highlight\">{{ part.text }}</mark>\n                    } @else {\n                      {{ part.text }}\n                    }\n                  }\n                } @else {\n                  {{ grid.formatCellDisplayValue(valueFor(row, col)) }}\n                }\n                @if (grid.showStickyRowBadge && grid.stickyRowBadgeField === col.field && grid.isRowSticky(row, index)) {\n                <span\n                  class=\"grid-sticky-badge\"\n                >{{ grid.stickyRowBadgeLabel }}</span>\n                }\n              </span>\n              }\n            }\n          </div>\n        }\n      }\n    </ng-template>\n\n    <ng-template #actionsCell>\n      @if (grid.editingIndex !== index) {\n        <div class=\"grid-actions-cell__inner\">\n          @if (grid.showRowEditAction()) {\n          <button\n            type=\"button\"\n            class=\"grid-row-action no-edit-trigger\"\n            [class.grid-row-action--secondary]=\"grid.actionDisplay !== 'icons'\"\n            [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n            [class.grid-row-action--edit-icon]=\"grid.actionDisplay === 'icons'\"\n            (click)=\"grid.startEdit(index)\"\n            [attr.aria-label]=\"grid.editRowAriaLabel(index)\"\n          >\n            @if (grid.actionDisplay === 'icons') {\n              <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n            } @else {\n              <span>Edit</span>\n            }\n          </button>\n          }\n          @if (grid.showRowDeleteAction()) {\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"danger\"\n            class=\"no-edit-trigger\"\n            [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n            (click)=\"grid.deleteRow(index)\"\n            [attr.aria-label]=\"grid.deleteRowAriaLabel(index)\"\n          >\n            @if (grid.actionDisplay === 'icons') {\n              <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n            } @else {\n              <span>Delete</span>\n            }\n          </button>\n          }\n        </div>\n      } @else {\n        <div class=\"grid-actions-cell__inner\">\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"success\"\n            (click)=\"grid.saveEdit(index)\"\n            [disabled]=\"grid.editForm.invalid\"\n          >\n            Save\n          </button>\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"neutral\"\n            (click)=\"grid.cancelEdit(index)\"\n          >\n            Cancel\n          </button>\n        </div>\n      }\n    </ng-template>\n  `,\n})\nexport class NgbDatagridDataRowComponent<T = unknown> {\n  @Input({ required: true }) grid!: Datagrid<T>;\n  @Input() renderTick = 0;\n  @Input({ required: true }) row!: T;\n  @Input({ required: true }) index!: number;\n  @Input() selected = false;\n\n  valueFor(row: T, col: ColumnDef): unknown {\n    return (row as Record<string, unknown>)[col.field];\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'tr[ngbDatagridDetailRow]',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <td [attr.colspan]=\"grid.detailColspan\" role=\"region\" class=\"grid-detail-row__cell\">\n      <div class=\"grid-detail-row__content\">\n        <ng-container\n          [ngTemplateOutlet]=\"grid.rowDetailTpl!.template\"\n          [ngTemplateOutletContext]=\"{ $implicit: row, index: index }\"\n        >\n        </ng-container>\n      </div>\n    </td>\n  `\n})\nexport class NgbDatagridDetailRowComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n  @Input({ required: true }) row!: unknown;\n  @Input({ required: true }) index!: number;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input } from '@angular/core';\nimport { NgbPagerComponent } from '../../../../pagination';\nimport { NgbDatagridPagerPosition, ngbDatagridPagerSettings } from '../../models/datagrid-pageable';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-footer',\n  standalone: true,\n  imports: [CommonModule, NgbPagerComponent],\n  template: `\n    @if (grid().paginationActive && grid().pagerShowsAt(placement())) {\n      @if (grid().hasCustomPagerTemplate()) {\n      <div\n        class=\"grid-footer grid-footer--custom\"\n        [class.grid-footer--top]=\"isTop()\"\n        [class.grid-footer--bottom]=\"isBottom()\"\n        [class.sticky-footer]=\"grid().isFooterSticky && isBottom()\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"grid().pagerTpl!.template; context: grid().pagerContext()\"\n        ></ng-container>\n      </div>\n      } @else {\n        <div\n          class=\"grid-footer\"\n          [class.grid-footer--top]=\"isTop()\"\n          [class.grid-footer--bottom]=\"isBottom()\"\n          [class.sticky-footer]=\"grid().isFooterSticky && isBottom()\"\n        >\n          <ngb-pager\n            [page]=\"grid().page\"\n            [pageSize]=\"grid().pageSize\"\n            [collectionSize]=\"grid().pagerCollectionSize()\"\n            [settings]=\"pagerSettings\"\n            [infoLabel]=\"grid().paginationRangeLabel()\"\n            [rowsPerPageLabel]=\"grid().rowsPerPageLabel()\"\n            [responsive]=\"grid().pagerResponsive()\"\n            (pageChange)=\"grid().onPage($event)\"\n            (pageSizeChange)=\"grid().onPageSize($event)\"\n          />\n        </div>\n      }\n    }\n  `,\n})\nexport class NgbDatagridFooterComponent {\n  readonly grid = input.required<Datagrid<any>>();\n  readonly placement = input<NgbDatagridPagerPosition>('bottom');\n  readonly isTop = computed(() => this.placement() === 'top');\n  readonly isBottom = computed(() => this.placement() === 'bottom');\n\n  get pagerSettings() {\n    return ngbDatagridPagerSettings(this.grid().resolvedPageable());\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'ngb-datagrid-field-shell',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"grid-filter-field\" [class.grid-filter-field--with-icon]=\"!!icon\">\n      <ng-content></ng-content>\n      @if (icon) {\n        <span class=\"bi grid-filter-field__icon\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n      }\n    </div>\n  `\n})\nexport class NgbDatagridFieldShellComponent {\n  @Input() icon?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'thead[ngbDatagridHeader]',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    NgbDatagridButtonDirective,\n    NgbDatagridControlDirective,\n    NgbDatagridFieldShellComponent,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <tr>\n      @if (grid.showSelectionColumn()) {\n      <th\n        class=\"text-center\"\n        scope=\"col\"\n        [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n        [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n        [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n      >\n        @if (grid.selectionMode === 'multiple' && grid.selectAllEnabled) {\n          <input\n            type=\"checkbox\"\n            [checked]=\"grid.isPageAllSelected()\"\n            [indeterminate]=\"grid.isPageIndeterminate()\"\n            (change)=\"grid.toggleSelectAllCurrentPage()\"\n            [attr.aria-label]=\"grid.selectAllLabel()\"\n          />\n        }\n      </th>\n      }\n      @if (grid.rowDetailTpl) {\n      <th\n        [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n        scope=\"col\"\n        aria-hidden=\"true\"\n        [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n        [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n      ></th>\n      }\n      @if (grid.stickyRowsEnabled) {\n      <th\n        [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n        scope=\"col\"\n        class=\"text-center\"\n        data-title=\"Sticky\"\n        [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n        [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n      ></th>\n      }\n      @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n      <th\n        [attr.data-title]=\"col.header\"\n        [class.sortable]=\"grid.enableSorting && col.sortable\"\n        [class.filter-menu-active]=\"grid.hasActiveColumnFilter(col.field)\"\n        [class.filter-menu-open]=\"grid.openFilterMenuField === col.field\"\n        [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n        [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n        [class.column-locked]=\"col.locked\"\n        [class.grid-header__column--resizable]=\"grid.isColumnResizable(col)\"\n        [class.grid-header__column--reorderable]=\"grid.isColumnReorderable(col)\"\n        [class.grid-header__column--drag-over]=\"grid.columnDragOverIndex === ci && grid.columnDragField\"\n        (dragover)=\"grid.onColumnDragOver($event, ci)\"\n        (dragleave)=\"grid.onColumnDragLeave($event, ci)\"\n        (drop)=\"grid.onColumnDrop($event, ci)\"\n        [ngClass]=\"grid.resolveHeaderClass(col)\"\n        [ngStyle]=\"grid.resolveHeaderStyle(col)\"\n        [style.width.px]=\"grid.columnWidth(col) || null\"\n        [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n        [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n        [style.left.px]=\"grid.columnStartOffset(col)\"\n        [style.right.px]=\"grid.columnEndOffset(col)\"\n        scope=\"col\"\n        [attr.title]=\"grid.headerTitle(col)\"\n        [attr.aria-sort]=\"grid.enableSorting && col.sortable ? grid.ariaSortFor(col.field) : null\"\n      >\n        <div class=\"grid-header__cell\">\n          @if (grid.isColumnGroupable(col)) {\n          <span\n            class=\"grid-column-group-handle bi bi-diagram-3\"\n            [class.grid-column-group-handle--active]=\"grid.isFieldGrouped(col.field)\"\n            draggable=\"true\"\n            role=\"button\"\n            tabindex=\"0\"\n            [attr.aria-label]=\"grid.groupHandleAriaLabel(col)\"\n            (dragstart)=\"grid.onGroupHandleDragStart($event, col.field); $event.stopPropagation()\"\n            (dragend)=\"grid.onGroupHandleDragEnd()\"\n            (keydown.enter)=\"grid.toggleGroupField(col.field); $event.preventDefault(); $event.stopPropagation()\"\n            (keydown.space)=\"grid.toggleGroupField(col.field); $event.preventDefault(); $event.stopPropagation()\"\n          ></span>\n          }\n          @if (grid.isColumnReorderable(col)) {\n          <span\n            class=\"grid-column-reorder-handle bi bi-grip-vertical\"\n            draggable=\"true\"\n            role=\"button\"\n            tabindex=\"0\"\n            [attr.aria-label]=\"grid.reorderColumnAriaLabel(col)\"\n            (dragstart)=\"grid.onColumnDragStart($event, col, ci); $event.stopPropagation()\"\n            (dragend)=\"grid.onColumnDragEnd()\"\n          ></span>\n          }\n          @if (grid.enableSorting && col.sortable) {\n            <button\n              type=\"button\"\n              class=\"grid-sort-button\"\n              (click)=\"grid.toggleSort(col.field)\"\n              [attr.aria-label]=\"grid.sortButtonAriaLabel(col)\"\n            >\n              <span class=\"grid-sort-button__label\">{{ col.header }}</span>\n              <span\n                class=\"grid-sort-button__indicator\"\n                [class.grid-sort-button__indicator--active]=\"grid.sort.active === col.field\"\n                aria-hidden=\"true\"\n              >\n                {{\n                  grid.sort.active === col.field\n                    ? grid.sort.direction === 'asc'\n                      ? '▲'\n                      : grid.sort.direction === 'desc'\n                        ? '▼'\n                        : '↕'\n                    : '↕'\n                }}\n              </span>\n            </button>\n          } @else {\n            <span>{{ col.header }}</span>\n          }\n\n          @if (grid.isMenuFilterVisible(col)) {\n          <div class=\"grid-filter-menu-host\">\n            <button\n              type=\"button\"\n              ngbDatagridButton=\"icon\"\n              class=\"grid-filter-menu-trigger\"\n              [class.grid-filter-menu-trigger--active]=\"grid.hasActiveColumnFilter(col.field)\"\n              [class.grid-filter-menu-trigger--check]=\"grid.isMultiCheckboxMode(col)\"\n              (click)=\"grid.toggleFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n              [attr.aria-expanded]=\"grid.openFilterMenuField === col.field\"\n              [attr.aria-label]=\"grid.openFilterMenuAriaLabel(col)\"\n            >\n              <span\n                class=\"bi\"\n                [ngClass]=\"grid.isMultiCheckboxMode(col) ? 'bi-check2-square' : 'bi-funnel'\"\n                aria-hidden=\"true\"\n              ></span>\n            </button>\n          </div>\n          }\n        </div>\n        @if (grid.isColumnResizable(col)) {\n        <span\n          class=\"grid-column-resize-handle\"\n          role=\"separator\"\n          aria-orientation=\"vertical\"\n          [attr.aria-label]=\"grid.resizeColumnAriaLabel(col)\"\n          (mousedown)=\"grid.startColumnResize($event, col)\"\n        ></span>\n        }\n      </th>\n      }\n      @if (grid.showActionsColumn()) {\n      <th\n        class=\"text-center\"\n        scope=\"col\"\n        [style.width.px]=\"grid.utilityColumnWidth('actions')\"\n      >\n        Actions\n      </th>\n      }\n    </tr>\n\n    @if (grid.anyFilterable) {\n    <tr class=\"filter-row\" [formGroup]=\"grid.filterForm\">\n      @if (grid.showSelectionColumn()) { <th></th> }\n      @if (grid.rowDetailTpl) { <th></th> }\n      @if (grid.stickyRowsEnabled) { <th></th> }\n      @for (col of grid.visibleColumns; track col.field) {\n      <th\n        [attr.data-title]=\"col.header\"\n        [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n        [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n        [style.width.px]=\"grid.columnWidth(col) || null\"\n        [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n        [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n        [style.left.px]=\"grid.columnStartOffset(col)\"\n        [style.right.px]=\"grid.columnEndOffset(col)\"\n      >\n        @if (grid.isRowFilterVisible(col)) {\n          @if (grid.filterTpls[col.field]; as ft) {\n            <ng-container\n              [ngTemplateOutlet]=\"ft.template\"\n              [ngTemplateOutletContext]=\"grid.filterContext(col, 'row')\"\n            >\n            </ng-container>\n          } @else {\n            <div class=\"grid-filter-inline\">\n              @switch (grid.getColumnFilterType(col)) {\n                @case ('date') {\n                <ngb-datagrid-field-shell>\n                  <input\n                    ngbDatagridControl\n                    type=\"date\"\n                    [formControlName]=\"grid.valueControlName(col.field)\"\n                    (input)=\"grid.applyRowFilter(col)\"\n                    [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n                  />\n                </ngb-datagrid-field-shell>\n                }\n                @case ('boolean') {\n                <select\n                  ngbDatagridControl\n                  [formControlName]=\"grid.valueControlName(col.field)\"\n                  (change)=\"grid.applyRowFilter(col)\"\n                >\n                  <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n                  <option [ngValue]=\"true\">{{ grid.booleanFilterOptionLabel(true) }}</option>\n                  <option [ngValue]=\"false\">{{ grid.booleanFilterOptionLabel(false) }}</option>\n                </select>\n                }\n                @case ('select') {\n                <select\n                  ngbDatagridControl\n                  [formControlName]=\"grid.valueControlName(col.field)\"\n                  (change)=\"grid.applyRowFilter(col)\"\n                >\n                  <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n                  @for (option of col.options ?? []; track option.value) {\n                    <option [ngValue]=\"option.value\">{{ option.label }}</option>\n                  }\n                </select>\n                }\n                @default {\n                <input\n                  ngbDatagridControl\n                  [attr.type]=\"\n                    grid.getColumnFilterType(col) === 'numeric'\n                      ? 'number'\n                      : 'text'\n                  \"\n                  [placeholder]=\"grid.rowFilterPlaceholder(col)\"\n                  [formControlName]=\"grid.valueControlName(col.field)\"\n                  (input)=\"grid.applyRowFilter(col)\"\n                  [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n                />\n                }\n              }\n\n              @if (grid.isRowFilterOperatorVisible(col)) {\n              <div class=\"grid-filter-operator\">\n                <button\n                  type=\"button\"\n                  ngbDatagridButton=\"icon\"\n                  class=\"grid-filter-operator__button grid-filter-operator__button--compact\"\n                  [class.grid-filter-operator__button--active]=\"grid.hasActiveColumnFilter(col.field)\"\n                  (click)=\"grid.toggleRowFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n                  [attr.aria-expanded]=\"grid.isRowFilterMenuOpen(col.field)\"\n                  [attr.aria-haspopup]=\"'listbox'\"\n                  [attr.aria-label]=\"grid.filterOperatorAriaLabel(col)\"\n                  [attr.title]=\"grid.rowFilterMenuTitle(col)\"\n                >\n                  <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n                </button>\n              </div>\n              }\n\n              @if (grid.isRowFilterOperatorVisible(col) && grid.hasActiveColumnFilter(col.field)) {\n              <button\n                ngbDatagridButton=\"icon\"\n                class=\"grid-filter-clear\"\n                type=\"button\"\n                (click)=\"grid.clearColumnFilter(col.field)\"\n                title=\"Clear filter\"\n                [attr.aria-label]=\"grid.clearFilterAriaLabel(col)\"\n              >\n                <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n              </button>\n              }\n            </div>\n          }\n        }\n      </th>\n      }\n      @if (grid.showActionsColumn()) { <th></th> }\n    </tr>\n    }\n  `\n})\nexport class NgbDatagridHeaderComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n  @Input() renderTick = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'ngb-datagrid-surface-card',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"grid-filter-menu-surface\">\n      <ng-content></ng-content>\n    </div>\n  `\n})\nexport class NgbDatagridSurfaceCardComponent {}\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Renderer2,\n  SimpleChanges,\n  inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type NgbDatagridFloatingPanelPlacement = 'menu' | 'operator';\n\n/**\n * Popup-style overlay: anchors to a trigger, portals to document.body,\n * and uses viewport-fixed coordinates.\n */\n@Directive({\n  selector: '[ngbDatagridFloatingPanel]',\n  standalone: true,\n})\nexport class NgbDatagridFloatingPanelDirective implements OnChanges, AfterViewInit, OnDestroy {\n  private readonly el = inject(ElementRef<HTMLElement>);\n  private readonly renderer = inject(Renderer2);\n  private readonly document = inject(DOCUMENT);\n  private readonly cdr = inject(ChangeDetectorRef);\n\n  @Input() ngbDatagridFloatingPanelAnchor?: HTMLElement | null;\n  @Input() ngbDatagridFloatingPanelPlacement: NgbDatagridFloatingPanelPlacement = 'menu';\n\n  @HostBinding('style.position') readonly hostPosition = 'fixed';\n  @HostBinding('style.z-index') readonly hostZIndex = 1200;\n  @HostBinding('style.margin') readonly hostMargin = '0';\n  @HostBinding('style.transform') readonly hostTransform = 'none';\n  @HostBinding('style.top.px') panelTop = 0;\n  @HostBinding('style.left.px') panelLeft = 0;\n\n  private active = false;\n  private portaled = false;\n  private originalParent: HTMLElement | null = null;\n  private originalNextSibling: Node | null = null;\n\n  private scrollListeners: Array<{ target: EventTarget; handler: () => void }> = [];\n  private resizeObserver: ResizeObserver | null = null;\n  private rafId: number | null = null;\n\n  private readonly scheduleUpdate = () => {\n    if (this.rafId != null) return;\n    this.rafId = requestAnimationFrame(() => {\n      this.rafId = null;\n      if (this.active) this.updatePosition();\n    });\n  };\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('ngbDatagridFloatingPanelAnchor' in changes) {\n      this.tryActivate();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.tryActivate();\n  }\n\n  private tryActivate(): void {\n    if (!(this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement)) {\n      return;\n    }\n    if (this.active) {\n      this.scheduleUpdate();\n      return;\n    }\n    this.activate();\n  }\n\n  ngOnDestroy(): void {\n    this.deactivate();\n  }\n\n  /** Called when anchor/layout may have changed after the panel opens. */\n  reposition(): void {\n    if (this.active) this.scheduleUpdate();\n  }\n\n  private activate(): void {\n    if (this.active) return;\n    this.active = true;\n    const node = this.el.nativeElement;\n    this.renderer.addClass(node, 'ngb-datagrid-floating-panel');\n    this.renderer.addClass(node, 'show');\n    this.syncThemeFromGrid(node);\n    this.portalToBody();\n    this.attachObservers();\n    this.schedulePositionPasses();\n  }\n\n  private deactivate(): void {\n    this.active = false;\n    if (this.rafId != null) {\n      cancelAnimationFrame(this.rafId);\n      this.rafId = null;\n    }\n    this.detachObservers();\n    const node = this.el.nativeElement;\n    this.renderer.removeClass(node, 'ngb-datagrid-floating-panel');\n    this.renderer.removeClass(node, 'show');\n    this.renderer.removeAttribute(node, 'data-theme');\n    this.panelTop = 0;\n    this.panelLeft = 0;\n    this.clearPositionStyles(node);\n    this.restoreFromBody();\n    this.cdr.markForCheck();\n  }\n\n  private portalToBody(): void {\n    if (this.portaled) return;\n    const node = this.el.nativeElement;\n    const body = this.document.body;\n    if (!body || node.parentElement === body) {\n      this.portaled = true;\n      return;\n    }\n    this.originalParent = node.parentElement;\n    this.originalNextSibling = node.nextSibling;\n    this.renderer.appendChild(body, node);\n    this.portaled = true;\n  }\n\n  private restoreFromBody(): void {\n    if (!this.portaled) return;\n    const node = this.el.nativeElement;\n    if (this.originalParent?.isConnected) {\n      if (this.originalNextSibling && this.originalNextSibling.parentNode === this.originalParent) {\n        this.renderer.insertBefore(this.originalParent, node, this.originalNextSibling);\n      } else {\n        this.renderer.appendChild(this.originalParent, node);\n      }\n    } else if (node.parentElement === this.document.body) {\n      this.renderer.removeChild(this.document.body, node);\n    }\n    this.portaled = false;\n    this.originalParent = null;\n    this.originalNextSibling = null;\n  }\n\n  private schedulePositionPasses(): void {\n    this.updatePosition();\n    requestAnimationFrame(() => this.updatePosition());\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => this.updatePosition());\n    });\n  }\n\n  private attachObservers(): void {\n    this.detachObservers();\n\n    const addScroll = (target: EventTarget) => {\n      target.addEventListener('scroll', this.scheduleUpdate, { passive: true, capture: true });\n      this.scrollListeners.push({ target, handler: this.scheduleUpdate });\n    };\n\n    addScroll(window);\n    addScroll(this.document);\n\n    const anchor = this.resolveAnchor();\n    let parent: HTMLElement | null = anchor?.parentElement ?? null;\n    const seen = new Set<EventTarget>();\n    while (parent) {\n      const { overflow, overflowY, overflowX } = getComputedStyle(parent);\n      if (/(auto|scroll|overlay)/.test(`${overflow} ${overflowY} ${overflowX}`)) {\n        if (!seen.has(parent)) {\n          seen.add(parent);\n          addScroll(parent);\n        }\n      }\n      parent = parent.parentElement;\n    }\n\n    window.addEventListener('resize', this.scheduleUpdate, { passive: true });\n    window.visualViewport?.addEventListener('scroll', this.scheduleUpdate, { passive: true });\n    window.visualViewport?.addEventListener('resize', this.scheduleUpdate, { passive: true });\n\n    if (typeof ResizeObserver !== 'undefined') {\n      this.resizeObserver = new ResizeObserver(() => this.scheduleUpdate());\n      const anchorEl = this.resolveAnchor();\n      if (anchorEl) this.resizeObserver.observe(anchorEl);\n      this.resizeObserver.observe(this.el.nativeElement);\n    }\n  }\n\n  private detachObservers(): void {\n    for (const { target, handler } of this.scrollListeners) {\n      target.removeEventListener('scroll', handler, true);\n    }\n    this.scrollListeners = [];\n    window.removeEventListener('resize', this.scheduleUpdate);\n    window.visualViewport?.removeEventListener('scroll', this.scheduleUpdate);\n    window.visualViewport?.removeEventListener('resize', this.scheduleUpdate);\n    this.resizeObserver?.disconnect();\n    this.resizeObserver = null;\n  }\n\n  private resolveAnchor(): HTMLElement | null {\n    if (this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement) {\n      return this.ngbDatagridFloatingPanelAnchor;\n    }\n    return null;\n  }\n\n  /** Portaled panels must carry the grid theme so token SCSS applies on document.body. */\n  private syncThemeFromGrid(panel: HTMLElement): void {\n    const anchor = this.resolveAnchor();\n    const grid =\n      anchor?.closest('.ngb-grid') ??\n      anchor?.closest('ngb-datagrid')?.querySelector('.ngb-grid') ??\n      this.document.querySelector('.ngb-grid');\n    const theme = grid?.getAttribute('data-theme');\n    if (theme) {\n      this.renderer.setAttribute(panel, 'data-theme', theme);\n    } else {\n      this.renderer.removeAttribute(panel, 'data-theme');\n    }\n  }\n\n  private anchorRect(anchor: HTMLElement): DOMRect {\n    const rect = anchor.getBoundingClientRect();\n    if (rect.width > 0 || rect.height > 0) return rect;\n    const host = anchor.closest('.grid-filter-menu-host, th') as HTMLElement | null;\n    return host?.getBoundingClientRect() ?? rect;\n  }\n\n  private updatePosition(): void {\n    const node = this.el.nativeElement;\n    const anchor = this.resolveAnchor();\n    if (!anchor) return;\n\n    const rect = this.anchorRect(anchor);\n    if (!rect.width && !rect.height) return;\n\n    const margin = 4;\n    const viewportPadding = 8;\n    const viewportWidth = window.innerWidth;\n    const viewportHeight = window.innerHeight;\n\n    const panelWidth = Math.max(node.offsetWidth || 0, node.scrollWidth || 0, this.placementWidth());\n    const panelHeight = Math.max(node.offsetHeight || 0, node.scrollHeight || 0);\n\n    let top = rect.bottom + margin;\n    let left = rect.right - panelWidth;\n\n    if (left < viewportPadding) left = viewportPadding;\n    if (left + panelWidth > viewportWidth - viewportPadding) {\n      left = Math.max(viewportPadding, viewportWidth - panelWidth - viewportPadding);\n    }\n\n    if (panelHeight && top + panelHeight > viewportHeight - viewportPadding) {\n      const above = rect.top - margin - panelHeight;\n      if (above >= viewportPadding) top = above;\n    }\n\n    if (top < viewportPadding) top = viewportPadding;\n    const maxTop = viewportHeight - panelHeight - viewportPadding;\n    if (top > maxTop) top = Math.max(viewportPadding, maxTop);\n\n    if (!Number.isFinite(top) || !Number.isFinite(left)) return;\n\n    this.applyPosition(node, top, left);\n  }\n\n  private applyPosition(node: HTMLElement, top: number, left: number): void {\n    const topPx = Math.round(top);\n    const leftPx = Math.round(left);\n    this.panelTop = topPx;\n    this.panelLeft = leftPx;\n    node.style.removeProperty('inset');\n    node.style.setProperty('top', `${topPx}px`, 'important');\n    node.style.setProperty('left', `${leftPx}px`, 'important');\n    this.cdr.markForCheck();\n  }\n\n  private placementWidth(): number {\n    return this.ngbDatagridFloatingPanelPlacement === 'operator' ? 220 : 288;\n  }\n\n  private clearPositionStyles(node: HTMLElement): void {\n    for (const prop of [\n      'position',\n      'top',\n      'left',\n      'right',\n      'bottom',\n      'inset',\n      'transform',\n      'margin',\n      'z-index',\n    ] as const) {\n      node.style.removeProperty(prop);\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\nimport { NgbDatagridSurfaceCardComponent } from '../../foundation/datagrid-surface-card.component';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-filter-menu-panel',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    NgbDatagridButtonDirective,\n    NgbDatagridControlDirective,\n    NgbDatagridFieldShellComponent,\n    NgbDatagridSurfaceCardComponent,\n    NgbDatagridFloatingPanelDirective,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"grid-filter-menu-popover ngb-grid__filter-menu-overlay\"\n      ngbDatagridFloatingPanel\n      [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n      ngbDatagridFloatingPanelPlacement=\"menu\"\n      (click)=\"$event.stopPropagation()\"\n    >\n      <ngb-datagrid-surface-card>\n        @if (grid.isMultiCheckboxMode(col)) {\n        <div class=\"grid-filter-menu-surface__header\">\n          <div class=\"grid-filter-menu-surface__eyebrow\">Filter</div>\n          <div class=\"grid-filter-menu-surface__title\">{{ col.header }}</div>\n        </div>\n        }\n\n        @if (grid.filterMenuTpls[col.field]; as menuTpl) {\n          <ng-container\n            [ngTemplateOutlet]=\"menuTpl.template\"\n            [ngTemplateOutletContext]=\"grid.filterContext(col, 'menu')\"\n          >\n          </ng-container>\n        } @else {\n          @if (grid.isMultiCheckboxMode(col)) {\n            <div class=\"grid-filter-menu-surface__multi\">\n              <input\n                ngbDatagridControl\n                class=\"grid-filter-menu-surface__search\"\n                type=\"text\"\n                placeholder=\"Search...\"\n                [(ngModel)]=\"grid.multiCheckboxSearch[col.field]\"\n                [attr.aria-label]=\"'Search values for ' + col.header\"\n              />\n\n              <div class=\"grid-multi-filter-list\">\n                <label class=\"grid-multi-filter-option grid-multi-filter-option--summary\">\n                  <span class=\"grid-multi-filter-option__main\">\n                    <input\n                      type=\"checkbox\"\n                      [checked]=\"grid.isMultiCheckboxAllSelected(col)\"\n                      [indeterminate]=\"grid.isMultiCheckboxPartiallySelected(col)\"\n                      (change)=\"grid.toggleMultiCheckboxAll(col)\"\n                    />\n                    <span>{{ grid.multiCheckboxToggleLabel(col) }}</span>\n                  </span>\n                  <span class=\"grid-multi-filter-option__count\">\n                    {{ grid.multiCheckboxSelectedCount(col) }} of {{ grid.multiCheckboxTotalCount(col) }}\n                  </span>\n                </label>\n\n                @for (option of grid.multiCheckboxVisibleOptions(col); track option.value) {\n                <label class=\"grid-multi-filter-option\">\n                  <span class=\"grid-multi-filter-option__main\">\n                    <input\n                      type=\"checkbox\"\n                      [checked]=\"grid.isMultiCheckboxChecked(col, option.value)\"\n                      (change)=\"grid.toggleMultiCheckboxValue(col, option.value)\"\n                    />\n                    <span>{{ option.label }}</span>\n                  </span>\n                </label>\n                }\n              </div>\n\n              <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--multi\">\n                <button type=\"button\" class=\"grid-filter-apply\" (click)=\"grid.applyMultiCheckboxFilter(col)\">\n                  {{ grid.multiCheckboxFilterApplyLabel() }}\n                </button>\n                @if (grid.multiCheckboxFilterShowCancel()) {\n                <button\n                  type=\"button\"\n                  class=\"grid-filter-cancel\"\n                  (click)=\"grid.cancelMultiCheckboxFilter(col)\"\n                >\n                  {{ grid.multiCheckboxFilterCancelLabel() }}\n                </button>\n                }\n              </div>\n            </div>\n          } @else {\n            <div class=\"grid-filter-multi-panel\">\n              @for (condition of grid.ensureMenuDraftConditions(col); track $index; let conditionIndex = $index) {\n                @if (conditionIndex > 0) {\n                <div class=\"grid-filter-join-select\">\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-join-select__control\"\n                    [ngModel]=\"grid.ensureMenuJoinLogic(col)\"\n                    (ngModelChange)=\"grid.setMenuJoinLogic(col, $event)\"\n                    aria-label=\"Combine conditions with\"\n                  >\n                    <option [ngValue]=\"'and'\">And</option>\n                    <option [ngValue]=\"'or'\">Or</option>\n                  </select>\n                </div>\n                }\n\n                <select\n                  ngbDatagridControl\n                  class=\"grid-filter-operator-select\"\n                  [(ngModel)]=\"condition.operator\"\n                  [attr.aria-label]=\"'Filter operator for ' + col.header\"\n                >\n                  @for (operator of grid.getAllowedOperators(col); track operator) {\n                    <option [ngValue]=\"operator\">{{ grid.rowFilterOperatorLabel(col, operator) }}</option>\n                  }\n                </select>\n\n                @switch (grid.getColumnFilterType(col)) {\n                  @case ('date') {\n                  <ngb-datagrid-field-shell>\n                    <input\n                      ngbDatagridControl\n                      class=\"grid-filter-value-input\"\n                      type=\"date\"\n                      [(ngModel)]=\"condition.value\"\n                      [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n                      [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n                    />\n                  </ngb-datagrid-field-shell>\n                  }\n                  @case ('boolean') {\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-value-select\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n                  >\n                    <option [ngValue]=\"''\">Select</option>\n                    <option [ngValue]=\"true\">True</option>\n                    <option [ngValue]=\"false\">False</option>\n                  </select>\n                  }\n                  @case ('select') {\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-value-select\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n                  >\n                    <option [ngValue]=\"''\">Select</option>\n                    @for (option of col.options ?? []; track option.value) {\n                      <option [ngValue]=\"option.value\">{{ option.label }}</option>\n                    }\n                  </select>\n                  }\n                  @default {\n                  <input\n                    ngbDatagridControl\n                    class=\"grid-filter-value-input\"\n                    [attr.type]=\"grid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n                    [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n                    [attr.placeholder]=\"col.filterPlaceholder || grid.rowFilterPlaceholder(col)\"\n                  />\n                  }\n                }\n              }\n\n              <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--split\">\n                <button\n                  type=\"button\"\n                  class=\"grid-filter-apply grid-filter-apply--secondary\"\n                  [disabled]=\"!grid.canApplyMenuFilter(col)\"\n                  (click)=\"grid.applyMenuFilter(col)\"\n                >\n                  Filter\n                </button>\n                <button\n                  type=\"button\"\n                  class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n                  [disabled]=\"!grid.canClearMenuFilter(col)\"\n                  (click)=\"grid.clearMenuFilter(col)\"\n                >\n                  Clear\n                </button>\n              </div>\n            </div>\n          }\n        }\n      </ngb-datagrid-surface-card>\n    </div>\n  `,\n})\nexport class NgbDatagridFilterMenuPanelComponent<T = unknown> implements AfterViewInit, OnChanges {\n  @Input({ required: true }) grid!: Datagrid<T>;\n  @Input({ required: true }) col!: ColumnDef<T>;\n  @Input({ required: true }) anchor!: HTMLElement;\n\n  @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n  private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('anchor' in changes && this.floatingPanel) {\n      this.scheduleReposition();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.scheduleReposition();\n  }\n\n  private scheduleReposition(): void {\n    requestAnimationFrame(() => {\n      this.floatingPanel?.reposition();\n      requestAnimationFrame(() => this.floatingPanel?.reposition());\n    });\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-row-filter-operator-panel',\n  standalone: true,\n  imports: [CommonModule, NgbDatagridFloatingPanelDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"dropdown-menu show ngb-datagrid-floating-panel grid-filter-operator-menu\"\n      ngbDatagridFloatingPanel\n      [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n      ngbDatagridFloatingPanelPlacement=\"operator\"\n      role=\"listbox\"\n      [attr.aria-label]=\"'Filter operators for ' + col.header\"\n      (click)=\"$event.stopPropagation()\"\n    >\n      @for (operator of grid.getAllowedOperators(col); track operator) {\n        <button\n          type=\"button\"\n          class=\"dropdown-item\"\n          role=\"option\"\n          [class.active]=\"grid.rowFilterOperator(col) === operator\"\n          [attr.aria-selected]=\"grid.rowFilterOperator(col) === operator\"\n          (click)=\"grid.setRowFilterOperator(col, operator)\"\n        >\n          {{ grid.rowFilterOperatorLabel(col, operator) }}\n        </button>\n      }\n    </div>\n  `,\n})\nexport class NgbDatagridRowFilterOperatorPanelComponent<T = unknown> implements AfterViewInit {\n  @Input({ required: true }) grid!: Datagrid<T>;\n  @Input({ required: true }) col!: ColumnDef<T>;\n  @Input({ required: true }) anchor!: HTMLElement;\n\n  @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n  private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n  ngAfterViewInit(): void {\n    requestAnimationFrame(() => {\n      this.floatingPanel?.reposition();\n      requestAnimationFrame(() => this.floatingPanel?.reposition());\n    });\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-toolbar',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridFieldShellComponent],\n  template: `\n    @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode()) || grid.enableGlobalFilter) {\n    <div\n      class=\"datagrid-toolbar\"\n    >\n      @if (grid.enableGlobalFilter) {\n      <div class=\"datagrid-toolbar__search\">\n        @if (grid.globalTpl) {\n          <ng-container\n            [ngTemplateOutlet]=\"grid.globalTpl?.template\"\n            [ngTemplateOutletContext]=\"{ $implicit: grid.globalFilterCtrl }\"\n          >\n          </ng-container>\n        } @else {\n          <div class=\"datagrid-toolbar__search-label\">Search</div>\n          <ngb-datagrid-field-shell icon=\"search\">\n            <div class=\"datagrid-toolbar__search-shell\">\n              <span class=\"bi bi-search datagrid-toolbar__search-icon\" aria-hidden=\"true\"></span>\n              <input\n                type=\"search\"\n                class=\"datagrid-toolbar__search-input\"\n                [placeholder]=\"grid.globalFilterPlaceholder\"\n                [formControl]=\"grid.globalFilterCtrl\"\n                [attr.aria-label]=\"grid.globalFilterAriaLabel\"\n              />\n            </div>\n          </ngb-datagrid-field-shell>\n        }\n      </div>\n      }\n\n      @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode())) {\n      <div class=\"datagrid-toolbar__actions\">\n        @if (grid.exportOptions?.enabled && grid.exportButtonTpl) {\n          <ng-container\n            [ngTemplateOutlet]=\"grid.exportButtonTpl\"\n            [ngTemplateOutletContext]=\"{ $implicit: grid.triggerExport.bind(grid) }\"\n          >\n          </ng-container>\n        } @else {\n          @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'pdf' || grid.exportOptions.type === 'both')) {\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"secondary\"\n            class=\"datagrid-toolbar__button\"\n            [disabled]=\"grid.exporting\"\n            (click)=\"grid.export('pdf')\"\n            [attr.aria-label]=\"grid.exportAriaLabel('pdf')\"\n          >\n            <span class=\"bi bi-filetype-pdf\" aria-hidden=\"true\"></span>\n            <span>PDF</span>\n          </button>\n          }\n          @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'excel' || grid.exportOptions.type === 'both')) {\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"secondary\"\n            class=\"datagrid-toolbar__button\"\n            [disabled]=\"grid.exporting\"\n            (click)=\"grid.export('excel')\"\n            [attr.aria-label]=\"grid.exportAriaLabel('excel')\"\n          >\n            <span class=\"bi bi-file-earmark-spreadsheet\" aria-hidden=\"true\"></span>\n            <span>Excel</span>\n          </button>\n          }\n        }\n\n        @if (grid.enableAdd) {\n        <button\n          type=\"button\"\n          ngbDatagridButton=\"primary\"\n          class=\"datagrid-toolbar__button\"\n          (click)=\"grid.startAdd()\"\n          [disabled]=\"grid.addingNew\"\n          [attr.aria-label]=\"grid.addButtonAriaLabel || grid.addButtonText\"\n        >\n          <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n          <span>{{ grid.addButtonText }}</span>\n        </button>\n        }\n      </div>\n      }\n    </div>\n    }\n  `\n})\nexport class NgbDatagridToolbarComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-editing-toolbar',\n  standalone: true,\n  imports: [CommonModule, NgbDatagridButtonDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (grid.showEditingToolbar()) {\n    <div class=\"datagrid-editing-toolbar\">\n      <div class=\"datagrid-editing-toolbar__start\">\n        @if (grid.enableAdd) {\n        <button\n          type=\"button\"\n          ngbDatagridButton=\"success\"\n          (click)=\"grid.startAdd()\"\n          [disabled]=\"editActive\"\n          [attr.aria-disabled]=\"editActive ? 'true' : null\"\n          [attr.aria-label]=\"grid.addButtonAriaLabel\"\n        >\n          <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n          <span>{{ grid.addButtonText }}</span>\n        </button>\n        }\n        <button\n          type=\"button\"\n          class=\"datagrid-editing-toolbar__save\"\n          ngbDatagridButton=\"primary\"\n          [hidden]=\"!editActive\"\n          (click)=\"grid.saveToolbarEdit()\"\n          [disabled]=\"saveDisabled\"\n          [attr.aria-disabled]=\"saveDisabled ? 'true' : null\"\n          [attr.aria-hidden]=\"editActive ? null : 'true'\"\n        >\n          <span>Save</span>\n        </button>\n        @if (grid.enableDelete && selectedCount > 0 && !editActive) {\n        <button\n          type=\"button\"\n          ngbDatagridButton=\"danger\"\n          (click)=\"grid.deleteSelectedRows()\"\n          [disabled]=\"selectedCount === 0\"\n          [attr.aria-disabled]=\"selectedCount === 0 ? 'true' : null\"\n        >\n          <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n          <span>Delete</span>\n        </button>\n        }\n      </div>\n\n      @if (selectedCount > 0) {\n      <div class=\"datagrid-editing-toolbar__hint\">\n        {{ grid.toolbarEditHint }}\n      </div>\n      }\n\n      <div class=\"datagrid-editing-toolbar__end\">\n        @if (grid.enableEdit && selectedCount > 0 && !editActive) {\n        <button\n          type=\"button\"\n          ngbDatagridButton=\"primary\"\n          (click)=\"grid.editSelectedRow()\"\n          [disabled]=\"selectedCount !== 1\"\n          [attr.aria-disabled]=\"selectedCount !== 1 ? 'true' : null\"\n        >\n          <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n          <span>Edit</span>\n        </button>\n        }\n        <button\n          type=\"button\"\n          class=\"datagrid-editing-toolbar__cancel\"\n          ngbDatagridButton=\"neutral\"\n          [hidden]=\"!editActive\"\n          (click)=\"grid.cancelToolbarEdit()\"\n          [attr.aria-hidden]=\"editActive ? null : 'true'\"\n        >\n          <span>Cancel</span>\n        </button>\n      </div>\n    </div>\n    }\n  `,\n})\nexport class NgbDatagridEditingToolbarComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n\n  @Input() selectedCount = 0;\n\n  @Input() editActive = false;\n\n  @Input() saveDisabled = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n  selector: 'ngb-datagrid-external-editor',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (grid.externalEditOpen) {\n    <div\n      class=\"grid-external-editor\"\n      role=\"dialog\"\n      aria-modal=\"true\"\n      [attr.aria-label]=\"grid.externalEditIsNew ? 'Add record' : 'Edit record'\"\n    >\n      <button type=\"button\" class=\"grid-external-editor__backdrop\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close dialog\"></button>\n\n      <div class=\"grid-external-editor__panel\">\n        <div class=\"grid-external-editor__header\">\n          <h3 class=\"grid-external-editor__title\">{{ grid.externalEditIsNew ? 'Add Record' : 'Edit Record' }}</h3>\n          <button type=\"button\" class=\"grid-external-editor__close\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close\">\n            <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n          </button>\n        </div>\n\n        <form class=\"grid-external-editor__form\" [formGroup]=\"grid.externalForm\" (ngSubmit)=\"grid.saveExternalEdit()\">\n          @for (col of grid.externalEditableColumns; track col.field) {\n          <label class=\"grid-external-editor__field\">\n            <span class=\"grid-external-editor__label\">{{ col.header }}</span>\n            @switch (col.type) {\n              @case ('boolean') {\n              <div class=\"form-check m-0\">\n                <input type=\"checkbox\" class=\"form-check-input\" [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\" />\n              </div>\n              }\n              @case ('select') {\n              <select ngbDatagridControl [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\">\n                @for (o of col.options ?? []; track o.value) {\n                  <option [ngValue]=\"o.value\">{{ o.label }}</option>\n                }\n              </select>\n              }\n              @default {\n              <input\n                ngbDatagridControl\n                [attr.type]=\"col.type === 'number' ? 'number' : col.type === 'date' ? 'date' : col.type === 'email' ? 'email' : 'text'\"\n                [formControlName]=\"col.field\"\n                [attr.aria-label]=\"col.header\"\n              />\n              }\n            }\n            @if (grid.externalForm.get(col.field)?.touched && grid.externalForm.get(col.field)?.invalid) {\n              <span class=\"grid-external-editor__error\">Invalid value</span>\n            }\n          </label>\n          }\n\n          <div class=\"grid-external-editor__actions\">\n            <button type=\"submit\" ngbDatagridButton=\"primary\" [disabled]=\"grid.externalForm.invalid\">Save</button>\n            <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelExternalEdit()\">Cancel</button>\n          </div>\n        </form>\n      </div>\n    </div>\n    }\n  `,\n})\nexport class NgbDatagridExternalEditorComponent {\n  @Input({ required: true }) grid!: Datagrid<any>;\n}\n","import { Injectable, InjectionToken } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgbLiveAnnouncer {\n  private node: HTMLElement | null = null;\n  announce(message: string) {\n    if (!this.node) {\n      this.node = document.createElement('div');\n      this.node.setAttribute('aria-live', 'polite');\n      this.node.setAttribute('aria-atomic', 'true');\n      this.node.style.position = 'fixed';\n      this.node.style.width = '1px'; this.node.style.height = '1px';\n      this.node.style.overflow = 'hidden'; this.node.style.clip = 'rect(1px,1px,1px,1px)';\n      this.node.style.whiteSpace = 'nowrap';\n      document.body.appendChild(this.node);\n    }\n    this.node.textContent = message;\n  }\n}\n\nexport const DND_LIVE_ANNOUNCE = new InjectionToken<((m: string) => void) | null>(\n  'DND_LIVE_ANNOUNCE',\n  { providedIn: 'root', factory: () => null }\n);","import { InjectionToken } from '@angular/core';\n\nexport type DndI18n = {\n  listLabel: (name?: string) => string;\n  pickedUp: () => string;\n  dropped: () => string;\n  canceled?: () => string;\n  moveToIndex: (pos: number, total: number) => string;\n  dropHere: () => string;\n  cannotDropHere: () => string;\n};\n\nexport const DND_I18N = new InjectionToken<DndI18n>('DND_I18N');\n\nexport const defaultDndI18n: DndI18n = {\n  listLabel: (n) => n ?? 'List',\n  pickedUp: () => 'Picked up. Use Arrow keys to move, Enter to drop, Escape to cancel.',\n  dropped: () => 'Dropped.',\n  canceled: () => 'Canceled.',\n  moveToIndex: (i, t) => `Moved to position ${i} of ${t}.`,\n  dropHere: () => 'Drop here',\n  cannotDropHere: () => 'Cannot drop here'\n};\n","// drag-state.service.ts\nimport { Inject, Injectable, Optional, signal } from '@angular/core';\nimport { DND_LIVE_ANNOUNCE } from '../a11y/live-announcer.service';\nimport { DndI18n, defaultDndI18n, DND_I18N } from '../i18n/dnd-i18n';\n\nexport interface DndSession<T = unknown> {\n  item: T;\n  group?: string;\n  fromList?: T[];\n  fromIndex?: number;\n  fromIsPalette?: boolean;\n  fromListRef?: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgbDndState {\n  readonly active = signal(false);\n  private store = new Map<string, DndSession>();\n  private currentId: string | null = null; // ✅ track current session id\n  private activeDropList: unknown | null = null;\n\n\n  // Public so directives can read strings and announce\n  public i18n: DndI18n = defaultDndI18n;\n  public announce?: (m: string) => void;\n\n  constructor(\n    @Optional() @Inject(DND_LIVE_ANNOUNCE) announceFn: ((m: string) => void) | null,\n    @Optional() @Inject(DND_I18N) i18n: DndI18n | null\n  ) {\n    if (i18n) this.i18n = i18n;\n    if (announceFn) this.announce = announceFn;\n  }\n\n  \n  createSession<T>(session: DndSession<T>): string {\n    const id = 'ngb-dnd-' + (crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2));\n    this.store.set(id, session as DndSession);\n    this.currentId = id;          // ✅ remember current\n    this.active.set(true);\n    return id;\n  }\n\n  get(id: string | null): DndSession | null {\n    if (!id) return null;\n    return this.store.get(id) ?? null;\n  }\n\n  getCurrent(): DndSession | null {        // ✅ fallback accessor\n    return this.currentId ? (this.store.get(this.currentId) ?? null) : null;\n  }\n\n  setActiveDropList(list: unknown): void {\n    this.activeDropList = list;\n  }\n\n  getActiveDropList(): unknown | null {\n    return this.activeDropList;\n  }\n\n  clearActiveDropList(list?: unknown): void {\n    if (!list || this.activeDropList === list) {\n      this.activeDropList = null;\n    }\n  }\n\n  clear(id?: string | null) {\n    if (id) this.store.delete(id);\n    if (this.currentId === id) this.currentId = null;\n    if (this.store.size === 0) {\n      this.activeDropList = null;\n      this.active.set(false);\n    }\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy, inject } from '@angular/core';\nimport { NgbDndState } from '../../../../drag-drop/src/service/drag-state.service';\n\nconst MIN_WIDTH = 40;\nconst MAX_WIDTH = 320;\nconst MAX_SAMPLE_ROWS = 50;\nconst CHAR_WIDTH_FACTOR = 0.6;\nconst CHROME_TOLERANCE = 12; // small buffer to ignore reapplication of padding/borders\n\ntype SyncRole = 'header' | 'body';\nexport type NgbColgroupSyncMode = 'auto' | 'explicit';\n\ninterface SyncEntry {\n  header?: NgbSyncColgroupDirective;\n  bodies: Set<NgbSyncColgroupDirective>;\n  widths?: number[];\n}\n\n@Directive({\n  selector: '[ngbSyncColgroup]',\n  standalone: true\n})\nexport class NgbSyncColgroupDirective implements AfterViewInit, OnDestroy {\n  @Input('ngbSyncColgroup') syncId!: string;\n  @Input() syncRole: SyncRole = 'header';\n  /** `explicit` copies header <col> widths without remeasuring cell content (use with column resizing). */\n  @Input() syncMode: NgbColgroupSyncMode = 'auto';\n\n  private static registry = new Map<string, SyncEntry>();\n  private mutationObserver?: MutationObserver;\n  private resizeObserver?: ResizeObserver;\n  private rafId: number | null = null;\n  private dndState = inject(NgbDndState, { optional: true });\n\n  constructor(private el: ElementRef<HTMLElement>) {}\n\n  static syncExplicitWidths(syncId: string): void {\n    const entry = NgbSyncColgroupDirective.registry.get(syncId);\n    entry?.header?.syncExplicitWidths();\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.syncId) return;\n    const entry = this.ensureEntry();\n    if (this.syncMode === 'explicit') {\n      if (this.syncRole === 'header') {\n        entry.header = this;\n        this.syncExplicitWidths();\n      } else {\n        entry.bodies.add(this);\n        entry.header?.syncExplicitWidths();\n      }\n      return;\n    }\n    if (this.syncRole === 'header') {\n      entry.header = this;\n      this.measureAndDistribute();\n    } else {\n      entry.bodies.add(this);\n      if (entry.header) entry.header.measureAndDistribute();\n      if (entry.widths?.length) this.apply(entry.widths);\n      this.startObservers();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (!this.syncId) return;\n    if (this.rafId != null) cancelAnimationFrame(this.rafId);\n    this.mutationObserver?.disconnect();\n    this.resizeObserver?.disconnect();\n    const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n    if (!entry) return;\n    if (entry.header === this) entry.header = undefined;\n    entry.bodies.delete(this);\n    if (!entry.header && entry.bodies.size === 0) {\n      NgbSyncColgroupDirective.registry.delete(this.syncId);\n    }\n  }\n\n  @HostListener('window:resize')\n  onResize(): void {\n    if (this.syncMode === 'explicit') {\n      if (this.syncRole === 'header') this.syncExplicitWidths();\n      return;\n    }\n    if (this.syncRole === 'header') this.measureAndDistribute();\n  }\n\n  syncExplicitWidths(): void {\n    const widths = this.readExplicitWidths();\n    if (!widths.length) return;\n    const entry = this.ensureEntry();\n    if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n    entry.widths = widths;\n    this.apply(widths);\n    entry.bodies.forEach((body) => body.apply(widths));\n  }\n\n  private readExplicitWidths(): number[] {\n    return this.colElements().map((col) => {\n      const explicit = parseFloat(col.style.width || '');\n      return Number.isFinite(explicit) && explicit > 0 ? explicit : MIN_WIDTH;\n    });\n  }\n\n  measureAndDistribute(): void {\n    if (this.syncMode === 'explicit') {\n      this.syncExplicitWidths();\n      return;\n    }\n    if (this.dndState?.active()) return;\n    const widths = this.measure();\n    if (!widths.length) return;\n    const entry = this.ensureEntry();\n    if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n    entry.widths = widths;\n    this.apply(widths);\n    entry.bodies.forEach(b => b.apply(widths));\n  }\n\n  private ensureEntry(): SyncEntry {\n    let entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n    if (!entry) {\n      entry = { bodies: new Set<NgbSyncColgroupDirective>() };\n      NgbSyncColgroupDirective.registry.set(this.syncId, entry);\n    }\n    return entry;\n  }\n\n  private startObservers(): void {\n    const bodyTable = this.tableEl();\n    const tbody = bodyTable?.querySelector('tbody');\n    if (tbody && typeof MutationObserver !== 'undefined' && !tbody.classList.contains('ngb-dnd-list')) {\n      this.mutationObserver = new MutationObserver(() => this.scheduleMeasure());\n      this.mutationObserver.observe(tbody, { childList: true, subtree: true, characterData: true });\n    }\n    if (bodyTable && typeof ResizeObserver !== 'undefined') {\n      this.resizeObserver = new ResizeObserver(() => this.scheduleMeasure());\n      this.resizeObserver.observe(bodyTable);\n    }\n  }\n\n  private scheduleMeasure(): void {\n    if (this.syncMode === 'explicit') return;\n    if (this.rafId != null) return;\n    this.rafId = requestAnimationFrame(() => {\n      this.rafId = null;\n      if (this.dndState?.active()) return;\n      const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n      entry?.header?.measureAndDistribute();\n    });\n  }\n\n  private colElements(): HTMLTableColElement[] {\n    return Array.from(this.el.nativeElement.querySelectorAll('col'));\n  }\n\n  private tableEl(): HTMLTableElement | null {\n    return this.el.nativeElement.closest('table');\n  }\n\n  private firstBodyForSync(): HTMLTableElement | null {\n    const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n    const bodyDir = this.syncRole === 'body'\n      ? this\n      : entry ? Array.from(entry.bodies.values())[0] : undefined;\n    return bodyDir?.tableEl() ?? null;\n  }\n\n  private measure(): number[] {\n    const bodyTable = this.firstBodyForSync();\n    const cols = this.colElements();\n    const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n    if (!cols.length) return [];\n\n    if (!bodyTable) {\n      return entry?.widths ?? [];\n    }\n\n    const bodyRows = Array.from(bodyTable.querySelectorAll<HTMLTableRowElement>('tbody tr'))\n      .filter((row) => !Array.from(row.cells).some((cell) => cell.colSpan > 1))\n      .slice(0, MAX_SAMPLE_ROWS);\n    const headerTable = this.syncRole === 'header' ? this.tableEl() : null;\n    const headerRows = Array.from(headerTable?.querySelectorAll('thead tr') ?? []);\n\n    return cols.map((col, colIndex) => {\n      const fixedWidth = (col.getAttribute('data-fixed') ?? '').toLowerCase() === 'true';\n      if (fixedWidth) {\n        const explicit = parseFloat(col.style.width || '') || MIN_WIDTH;\n        return Math.min(Math.max(explicit, MIN_WIDTH), MAX_WIDTH);\n      }\n      \n      // Measure header content width if available\n      let headerContentWidth = 0;\n      for (const headerRow of headerRows) {\n        const th = headerRow.querySelectorAll('th')[colIndex] as HTMLElement | undefined;\n        if (!th) continue;\n        headerContentWidth = Math.max(headerContentWidth, this.measureCellContent(th));\n      }\n      \n      // Measure body content width\n      let maxContent = 0;\n      for (const tr of bodyRows) {\n        const td = tr.querySelectorAll('td')[colIndex] as HTMLElement | undefined;\n        if (!td) continue;\n        maxContent = Math.max(maxContent, this.measureCellContent(td));\n        if (maxContent >= MAX_WIDTH) break;\n      }\n      \n      // Use the maximum of header and body content widths\n      let finalContent = Math.max(headerContentWidth, maxContent);\n      if (finalContent === 0) finalContent = MIN_WIDTH;\n\n      let width = Math.min(Math.max(finalContent, MIN_WIDTH), MAX_WIDTH);\n      const prev = entry?.widths?.[colIndex];\n      if (prev && width > prev) {\n        // If the only change is re-adding cell chrome (common when interactive elements span the cell),\n        // keep the previous stable width to avoid incremental growth.\n        const delta = width - prev;\n        if (delta <= CHROME_TOLERANCE) width = prev;\n      }\n      return width;\n    });\n  }\n\n  private apply(widths: number[]) {\n    const cols = this.colElements();\n    widths.forEach((w, i) => {\n      const col = cols[i];\n      if (!col) return;\n      col.style.width = w ? `${w}px` : '';\n    });\n  }\n\n  private measureCellContent(cell: HTMLElement): number {\n    const style = getComputedStyle(cell);\n    const cellClientWidth = cell.clientWidth;\n    const cellRect = cell.getBoundingClientRect();\n    const chrome =\n      (parseFloat(style.paddingLeft) || 0) +\n      (parseFloat(style.paddingRight) || 0) +\n      (parseFloat(style.borderLeftWidth) || 0) +\n      (parseFloat(style.borderRightWidth) || 0);\n\n    const interactiveEls = Array.from(cell.querySelectorAll<HTMLElement>('input, select, textarea, button'));\n    let interactiveWidth: number | null = null;\n    if (interactiveEls.length) {\n      interactiveWidth = interactiveEls.reduce((total, el) => {\n        const rect = el.getBoundingClientRect();\n        const elStyle = getComputedStyle(el);\n        const widthStr = (el.style.width || elStyle.width || '').toString().trim();\n        const usesPercentWidth = widthStr.endsWith('%');\n        const matchesCellWidth =\n          (!!cellClientWidth && rect.width && Math.abs(rect.width - cellClientWidth) <= 1) ||\n          (cellRect.width > 0 && rect.width > 0 && Math.abs(rect.width - cellRect.width) <= 1);\n        const spansCell = usesPercentWidth || matchesCellWidth;\n        const margin = (parseFloat(elStyle.marginLeft) || 0) + (parseFloat(elStyle.marginRight) || 0);\n        if (spansCell) {\n          const textWidth = this.measureTextWidth((el.textContent ?? '').trim(), elStyle);\n          const paddingBorder =\n            (parseFloat(elStyle.paddingLeft) || 0) +\n            (parseFloat(elStyle.paddingRight) || 0) +\n            (parseFloat(elStyle.borderLeftWidth) || 0) +\n            (parseFloat(elStyle.borderRightWidth) || 0);\n          return total + Math.ceil(textWidth + paddingBorder + margin);\n        }\n        const rectWidth = rect.width || parseFloat(elStyle.width) || ((el.textContent ?? '').length * ((parseFloat(elStyle.fontSize) || 14) * CHAR_WIDTH_FACTOR));\n        return total + rectWidth + margin;\n      }, 0);\n      interactiveWidth = Math.ceil((interactiveWidth || 0) + chrome);\n    }\n\n    const text = (cell.textContent ?? '').trim();\n    const textWidth = Math.ceil(this.measureTextWidth(text, style) + chrome);\n    if (interactiveWidth != null) {\n      return Math.max(textWidth, interactiveWidth);\n    }\n    return textWidth;\n  }\n\n  private areWidthsEqual(prev: number[], next: number[]): boolean {\n    if (prev.length !== next.length) return false;\n    return prev.every((v, i) => v === next[i]);\n  }\n\n  private measureTextWidth(text: string, style: CSSStyleDeclaration): number {\n    const fontSize = parseFloat(style.fontSize) || 14;\n    const font = style.font || `${style.fontStyle} ${style.fontVariant} ${style.fontWeight} ${style.fontSize} / ${style.lineHeight} ${style.fontFamily}`;\n\n    let contentWidth = 0;\n    const isJsdom = typeof navigator !== 'undefined' && /jsdom/i.test(navigator.userAgent);\n    const canvas = !isJsdom && typeof document !== 'undefined' ? document.createElement('canvas') : null;\n    let ctx: CanvasRenderingContext2D | null = null;\n    if (canvas?.getContext) {\n      try {\n        ctx = canvas.getContext('2d');\n      } catch {\n        ctx = null;\n      }\n    }\n    if (ctx && font) {\n      ctx.font = font;\n      const metrics = ctx.measureText(text);\n      contentWidth = metrics?.width ?? 0;\n    }\n\n    if (!contentWidth) {\n      contentWidth = text.length * (fontSize * CHAR_WIDTH_FACTOR);\n    }\n    return contentWidth;\n  }\n}\n","import {\n    Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject\n} from '@angular/core';\nimport { NgbDndState, DndSession } from '../service/drag-state.service';\n\ntype DndHandledDragEvent = DragEvent & { __ngbHandled?: boolean };\n\nexport interface NgbDndDropEvent<T> {\n    item: T;\n    fromIndex: number;\n    toIndex: number;\n    fromList: T[];\n    toList: T[];\n    sameList: boolean;\n}\n\nexport interface DndCanDropPayload<T = unknown> {\n  dragItem: T;        // item being dragged (best-effort if unknown)\n  srcList: T[];       // source array (best-effort if unknown)\n  srcIndex: number;   // index in source (best-effort if unknown)\n  dstList: T[];       // destination array (this list’s [ngbDndList])\n  dstIndex: number;   // intended insertion index\n  isExternal: boolean;// srcList !== dstList\n}\n\n/** Guard function; return true to allow, false to block */\nexport type DndCanDropFn<T = unknown> = (payload: DndCanDropPayload<T>) => boolean;\n\n@Directive({\n    selector: '[ngbDndList]',\n    standalone: true\n})\nexport class NgbDndListDirective<T = unknown> {\n    private el = inject(ElementRef<HTMLElement>);\n    private state = inject(NgbDndState);\n    \n    @Input() dndChildrenKey: string | null = 'children';\n\n    /** Bind your array here: <div [ngbDndList]=\"items\"> */\n    @Input('ngbDndList') list!: T[];\n    /** Optional: group barrier across lists */\n    @Input() dndGroup?: string;\n    /** Disable this list */\n    @Input() dndDisabled = false;\n\n    /** NEW: clone if source wasn't a list (e.g. palette) */\n    @Input() dndCloneOnDrop = false;\n    /** NEW: custom clone function */\n    @Input() dndCloneFn?: (item: T) => T;\n\n    @Input() dndIsPalette = false;\n\n    @Input() dndCanDrop: boolean | DndCanDropFn<T> = true;\n\n    // (optional) visual feedback while hovering a denied list\n    private _denied = false;\n    @HostBinding('class.ngb-dnd-denied') get denied() { return this._denied; }\n\n    @Input() dndAriaLabel?: string;\n    @HostBinding('attr.aria-label') get ariaLabel() { return this.dndAriaLabel || null; }\n    /** Fires after item is inserted */\n    @Output() dndDropped = new EventEmitter<NgbDndDropEvent<T>>();\n\n    @HostBinding('attr.role') role = 'list';\n\n    @HostBinding('class.ngb-dnd-list') hostClass = true;\n\n    // NEW: when the pointer is over this list while dragging\n    private hover = false;\n    @HostBinding('class.ngb-dnd-over') get isOver() { return this.hover; }\n\n    // NEW: reflect whether the current drag can drop here (for CSS)\n    private canDrop: boolean | null = null;\n    @HostBinding('attr.data-drop-valid') get dataDropValid() {\n        // values: \"true\" | \"false\" | null (attribute omitted)\n        return this.canDrop === true ? 'true' : this.canDrop === false ? 'false' : null;\n    }\n    private placeholder?: HTMLElement;\n    private lastIndex = -1;\n\n    @HostListener('dragenter', ['$event'])\n    onDragEnter(ev: DragEvent) {\n        if (this.dndDisabled) return;\n        const s = this.getSession(ev);\n        // If there is an active drag and groups match, indicate hover\n        if (s) {\n            ev.preventDefault();\n            this.hover = true;\n            this.canDrop = true; // group check already done in getSession\n        } else {\n            // Drag exists but not compatible with this list (group mismatch)\n            this.hover = true;\n            this.canDrop = false;\n        }\n    }\n\n    @HostListener('dragover', ['$event'])\n    onDragOver(ev: DragEvent) {\n        if (this.dndDisabled) return;\n\n        const s = this.getSession(ev);\n        if (!s) {\n            // Not a compatible session → show invalid\n            this.hover = true;\n            this.canDrop = false;\n            return;\n        }\n\n        this.hover = true;\n        const idx = this.indexFromPointer(ev);\n        const payload = this._buildGuardPayload(s as DndSession<T>, idx);\n        const canDropHere = this._allowDrop(payload)\n          && !this.isDroppingIntoOwnDescendant(s.item, this.list as unknown[]);\n\n        this.canDrop = canDropHere;\n        this._denied = !canDropHere;\n\n        try {\n          if (ev.dataTransfer) {\n            ev.dataTransfer.dropEffect = canDropHere ? (this.dndCloneOnDrop ? 'copy' : 'move') : 'none';\n          }\n        } catch { }\n\n        if (!canDropHere) {\n          this.removePlaceholder();\n          this.lastIndex = -1;\n          this.state.clearActiveDropList(this);\n          return;\n        }\n\n        ev.preventDefault();\n        ev.stopPropagation();\n        this.state.setActiveDropList(this);\n        this.ensurePlaceholder();\n        if (idx !== this.lastIndex) {\n            this.lastIndex = idx;\n            this.positionPlaceholderAt(idx);\n        }\n    }\n\n    @HostListener('dragleave', ['$event'])\n    onDragLeave(ev: DragEvent) {\n        // Only reset when actually leaving this list (not moving between children)\n        if (!this.el.nativeElement.contains(ev.relatedTarget as Node)) {\n            this.removePlaceholder();\n            this.lastIndex = -1;\n            this.hover = false;\n            this.canDrop = null;\n            this.state.clearActiveDropList(this);\n        }\n    }\n\n    @HostListener('document:drop', ['$event'])\n    onDocumentDrop(ev: DragEvent) {\n        const activeDropList = this.state.getActiveDropList();\n        const target = ev.target as Element | null;\n        const host = this.el.nativeElement;\n        const targetList = target?.closest?.('.ngb-dnd-list');\n        const dropTargetsThisList = targetList === host;\n\n        if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n            this.resetVisualState();\n            return;\n        }\n\n        if (!host.contains(ev.target as Node) && activeDropList !== this) {\n            this.resetVisualState();\n            return;\n        }\n        if (!activeDropList) {\n            if (targetList && targetList !== host) {\n                this.resetVisualState();\n                return;\n            }\n        }\n\n        const handledEvent = ev as DndHandledDragEvent;\n        if (handledEvent.__ngbHandled) return;\n        handledEvent.__ngbHandled = true;\n\n        ev.preventDefault();\n        this.performDrop(ev);\n\n        this.resetVisualState();\n    }\n\n    @HostListener('drop', ['$event'])\n    onDrop(ev: DragEvent) {\n        if (this.dndDisabled) return;\n        const activeDropList = this.state.getActiveDropList();\n        const target = ev.target as Element | null;\n        const targetList = target?.closest?.('.ngb-dnd-list');\n        const dropTargetsThisList = targetList === this.el.nativeElement;\n        if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n            this.resetVisualState();\n            return;\n        }\n\n        const handledEvent = ev as DndHandledDragEvent;\n        if (handledEvent.__ngbHandled) return;\n        handledEvent.__ngbHandled = true;\n\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        this.performDrop(ev);\n\n        this.resetVisualState();\n    }\n\n    @HostListener('document:dragend')\n    @HostListener('document:dragcancel')\n    onDocumentDragFinished() {\n        this.resetVisualState();\n    }\n\n    // helpers\n    private getSession(ev: DragEvent): DndSession | null {\n        // Chrome often returns \"\" during dragover/enter; try service fallback\n        const sid = ev.dataTransfer?.getData('text/ngb-dnd') || null;\n        let s = sid ? this.state.get(sid) : null;\n        if (!s) s = this.state.getCurrent();         // ✅ fallback\n        if (!s) return null;\n\n        if (this.dndGroup && s.group && s.group !== this.dndGroup) return null;\n        return s;\n    }\n\n    private ensurePlaceholder() {\n        if (!this.placeholder) {\n            const hostTag = this.el.nativeElement.tagName;\n            if (hostTag === 'TBODY') {\n                const row = document.createElement('tr');\n                row.className = 'ngb-dnd-placeholder';\n                row.setAttribute('aria-hidden', 'true');\n                const cell = document.createElement('td');\n                const sampleRow = this.el.nativeElement.querySelector('tr:not(.ngb-dnd-placeholder)');\n                const colspan = sampleRow?.children?.length || 1;\n                cell.colSpan = colspan;\n                cell.style.padding = '0';\n                cell.style.border = '0';\n                cell.style.height = '0';\n                const bar = document.createElement('div');\n                bar.className = 'ngb-dnd-placeholder__bar';\n                cell.appendChild(bar);\n                row.appendChild(cell);\n                this.placeholder = row;\n            } else {\n                this.placeholder = document.createElement('div');\n                this.placeholder.className = 'ngb-dnd-placeholder';\n                this.placeholder.setAttribute('aria-hidden', 'true');\n            }\n            this.el.nativeElement.appendChild(this.placeholder);\n        }\n    }\n    private removePlaceholder() {\n        if (this.placeholder?.parentElement) this.placeholder.parentElement.removeChild(this.placeholder);\n        this.placeholder = undefined;\n    }\n    private resetVisualState() {\n        this.removePlaceholder();\n        this.lastIndex = -1;\n        this.hover = false;\n        this.canDrop = null;\n        this._denied = false;\n        this.state.clearActiveDropList(this);\n    }\n    private positionPlaceholderAt(index: number) {\n        const host = this.el.nativeElement;\n        const children = this.draggableChildren();\n        const before = children[index];\n        if (!before) host.appendChild(this.placeholder!);\n        else host.insertBefore(this.placeholder!, before);\n    }\n    private indexFromPointer(ev: DragEvent) {\n        const y = ev.clientY;\n        const children = this.draggableChildren();\n        for (let i = 0; i < children.length; i++) {\n            const r = children[i].getBoundingClientRect();\n            const mid = r.top + r.height / 2;\n            if (y < mid) return i;\n        }\n        return children.length;\n    }\n\n    private draggableChildren(): HTMLElement[] {\n        const host = this.el.nativeElement;\n        const items = Array.from(host.children)\n            .filter(c => c !== this.placeholder && (c as HTMLElement).classList.contains('ngb-dnd-item')) as HTMLElement[];\n        if (items.length) return items;\n        return Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\n    }\n\n    private cloneItem(i: T): T {\n        if (this.dndCloneFn) return this.dndCloneFn(i);\n        // fallback shallow clone\n        if (Array.isArray(i)) return (i.slice() as unknown) as T;\n        if (i && typeof i === 'object') return { ...(i as Record<string, unknown>) } as T;\n        return i; // primitive\n    }\n\n    private isDroppingIntoOwnDescendant(item: unknown, targetList: unknown[]): boolean {\n        const key = this.dndChildrenKey;\n        if (!key || !item || typeof item !== 'object') return false;\n\n        const stack: unknown[][] = [];\n        const rootChildren = (item as Record<string, unknown>)[key];\n        if (Array.isArray(rootChildren)) stack.push(rootChildren);\n\n        while (stack.length) {\n            const arr = stack.pop()!;\n            if (arr === targetList) return true;\n            for (const child of arr) {\n              if (!child || typeof child !== 'object') continue;\n              const kids = (child as Record<string, unknown>)[key];\n              if (Array.isArray(kids)) stack.push(kids);\n            }\n        }\n        return false;\n    }\n    /**\n     * Build a guard payload using whatever drag context you already store.\n     * If some fields don’t exist in your code, the fallbacks keep it working.\n     */\n    private _buildGuardPayload(session: DndSession<T>, dstIndex: number): DndCanDropPayload<T> {\n        const srcList = session.fromList ?? [];\n        const srcIndex = typeof session.fromIndex === 'number' ? session.fromIndex : -1;\n        const dstList = this.list ?? [];\n\n        return {\n            dragItem: session.item,\n            srcList,\n            srcIndex,\n            dstList,\n            dstIndex,\n            isExternal: session.fromIsPalette === true || srcList !== dstList,\n        };\n    }\n\n    /**\n     * Compute destination index from the event position (no placeholder var needed).\n     * Uses vertical list heuristics; adjust for horizontal if your list is horizontal.\n     */\n    private _computeDropIndex(ev: DragEvent): number {\n      const host = this.el.nativeElement;\n      if (!host) return this.list?.length ?? 0;\n\n      const children = this.draggableChildren();\n      const y = ev.clientY;\n\n      for (let i = 0; i < children.length; i++) {\n          const rect = children[i].getBoundingClientRect();\n          const midY = rect.top + rect.height / 2;\n          if (y < midY) return i;\n      }\n      return children.length;\n    }\n        // Evaluate the guard safely\n    private _allowDrop(payload: DndCanDropPayload<T>): boolean {\n        const guard = this.dndCanDrop;\n        if (typeof guard === 'boolean') return guard;\n        try { return guard ? !!guard(payload) : true; } catch { return false; }\n    }\n\n    emitDropEvent(event: NgbDndDropEvent<T>): void {\n        this.dndDropped.emit(event);\n        this.state.announce?.(this.state.i18n.dropped());\n    }\n\n    // Extract your existing onDrop logic into a single method:\n    private performDrop(ev: DragEvent) {\n        const session = this.getSession(ev) as DndSession<T> | null;\n        if (!session) return;\n\n        const dstIndex = this._computeDropIndex(ev);\n\n        // Guard check (block drop if not allowed)\n        const payload = this._buildGuardPayload(session, dstIndex);\n        if (!this._allowDrop(payload)) {\n            ev.preventDefault();\n            ev.stopPropagation();\n            this._denied = true;   // cosmetic: adds .ngb-dnd-denied for styling\n            this.canDrop = false;\n            this.state.announce?.(this.state.i18n.cannotDropHere());\n            this.removePlaceholder();\n            this.lastIndex = -1;\n            return;                // ⛔ do not mutate arrays\n        }\n        this._denied = false;\n\n        // ❗ block cycles: don't allow dropping an item into its own descendants\n        if (this.isDroppingIntoOwnDescendant(session.item, this.list)) {\n            // optional: visual/aural feedback\n            this._denied = true;\n            this.canDrop = false;\n            this.state.announce?.(this.state.i18n.cannotDropHere());\n            this.removePlaceholder();\n            this.lastIndex = -1;\n            return;\n        }\n        const targetIndex = this.lastIndex < 0 ? this.list.length : this.lastIndex;\n        const fromList = session.fromList;\n        const fromIndex = (session.fromIndex as number) ?? -1;\n        const sameList = fromList === this.list;\n        const isExternal = session.fromIsPalette === true || !fromList || fromIndex === -1;\n\n        // ✅ External (palette): always transform/clone into canvas, and DO NOT remove from source.\n        // ✅ Canvas↔Canvas: move by default; if you want to clone across canvas, set dndCloneOnDrop=true.\n        const shouldCloneAcrossCanvas = this.dndCloneOnDrop && !sameList && !isExternal;\n\n        const itemToInsert: T =\n            isExternal\n                ? this.cloneItem(session.item as T) // transform palette item to Panel\n                : (shouldCloneAcrossCanvas ? this.cloneItem(session.item as T) : (session.item as T));\n\n        // Remove from source ONLY for real moves within canvas\n        if (!isExternal && !shouldCloneAcrossCanvas && fromIndex > -1) {\n            fromList!.splice(fromIndex, 1);\n        }\n\n        // adjust index when reordering within same list and moving forward\n        const insertAt = sameList && fromIndex > -1 && targetIndex > fromIndex\n            ? targetIndex - 1\n            : targetIndex;\n\n        this.list.splice(insertAt, 0, itemToInsert);\n\n        this.removePlaceholder();\n        this.lastIndex = -1;\n\n        this.emitDropEvent({\n            item: itemToInsert,\n            fromIndex,\n            toIndex: insertAt,\n            fromList: fromList ?? [],\n            toList: this.list,\n            sameList\n        });\n\n    }\n\n\n}\n","import {\n  Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject, Optional\n} from '@angular/core';\nimport { NgbDndState } from '../service/drag-state.service';\nimport { NgbDndDropEvent, NgbDndListDirective } from './dnd-list.directive';\n\ninterface DndKeyboardDragState<T> {\n  list: T[];\n  originalIndex: number;\n  currentIndex: number;\n}\n\n@Directive({\n  selector: '[ngbDndItem]',\n  standalone: true\n})\nexport class NgbDndItemDirective<T = unknown> {\n  private el = inject(ElementRef<HTMLElement>);\n  private state = inject(NgbDndState);\n  constructor(@Optional() private parentList?: NgbDndListDirective<T>) {}\n\n  /** required: the value carried by this row/panel */\n  @Input('ngbDndItem') item!: T;\n  /** optional: constrain cross-list drops */\n  @Input() dndGroup?: string;\n  /** index inside its parent list (bind to the rendered row index) */\n  @Input() dndIndex?: number;\n  /** Explicit source list for recursive templates where DI can be ambiguous. */\n  @Input() dndSourceList?: T[];\n  @Input() dndDisabled = false;\n\n  @Output() dndDragStart = new EventEmitter<T>();\n  @Output() dndDragEnd = new EventEmitter<void>();\n\n  @HostBinding('attr.draggable') get draggable() { return !this.dndDisabled; }\n  @HostBinding('class.ngb-dnd-item') hostClass = true;\n  @HostBinding('class.ngb-dnd-dragging') dragging = false;\n  @HostBinding('attr.aria-grabbed') get ariaGrabbed() { return this.dragging ? 'true' : 'false'; }\n  @HostBinding('attr.role') role = 'listitem';\n  @HostBinding('attr.tabindex') tabIndex = 0;                 // keyboard focusable\n\n  private sessionId: string | null = null;\n  private keyboardDragState: DndKeyboardDragState<T> | null = null;\n\n  private sourceList(): T[] | undefined {\n    return this.dndSourceList ?? this.parentList?.list;\n  }\n\n  private resolveIndex(list: T[] | undefined): number {\n    if (typeof this.dndIndex === 'number') return this.dndIndex;\n    return list ? list.indexOf(this.item) : -1;\n  }\n\n  private beginDragSession(dataTransfer?: DataTransfer | null): boolean {\n    if (this.dndDisabled || this.item == null) {\n      return false;\n    }\n\n    this.sessionId = this.state.createSession({\n      item: this.item,\n      group: this.dndGroup ?? this.parentList?.dndGroup,\n      fromList: this.sourceList(),\n      fromIndex: this.resolveIndex(this.sourceList()),\n      fromListRef: this.parentList,\n      fromIsPalette: this.parentList?.dndIsPalette === true\n    });\n\n    if (dataTransfer) {\n      dataTransfer.setData('text/ngb-dnd', this.sessionId);\n      dataTransfer.setData('text/plain', 'ngb');\n      dataTransfer.effectAllowed = 'copyMove';\n      dataTransfer.setDragImage(this.el.nativeElement, 16, 16);\n    }\n\n    this.dragging = true;\n    this.dndDragStart.emit(this.item);\n    this.state.announce?.(this.state.i18n.pickedUp());\n    return true;\n  }\n\n  private endDragSession(): void {\n    this.dragging = false;\n    this.state.clear(this.sessionId);\n    this.sessionId = null;\n    this.keyboardDragState = null;\n    this.dndDragEnd.emit();\n  }\n\n  @HostListener('dragstart', ['$event'])\n  onDragStart(ev: DragEvent) {\n    const eventWithFlag = ev as DragEvent & { __ngbDndItemStarted?: boolean };\n    if (eventWithFlag.__ngbDndItemStarted) return;\n    eventWithFlag.__ngbDndItemStarted = true;\n\n    if (!this.beginDragSession(ev.dataTransfer)) {\n      ev.preventDefault();\n    }\n  }\n\n  @HostListener('dragend')\n  onDragEnd() {\n    this.endDragSession();\n  }\n\n  private moveWithinKeyboardList(offset: -1 | 1): void {\n    const keyboardDragState = this.keyboardDragState;\n    if (!keyboardDragState) return;\n\n    const list = keyboardDragState.list;\n    const from = keyboardDragState.currentIndex;\n    let to = from + offset;\n    to = Math.max(0, Math.min(list.length - 1, to));\n    if (to === from) return;\n\n    const [movedItem] = list.splice(from, 1);\n    list.splice(to, 0, movedItem);\n    keyboardDragState.currentIndex = to;\n    this.dndIndex = to;\n    this.state.announce?.(this.state.i18n.moveToIndex(to + 1, list.length));\n  }\n\n  private emitKeyboardDrop(): void {\n    const keyboardDragState = this.keyboardDragState;\n    if (!keyboardDragState || !this.parentList) return;\n\n    const event: NgbDndDropEvent<T> = {\n      item: this.item,\n      fromIndex: keyboardDragState.originalIndex,\n      toIndex: keyboardDragState.currentIndex,\n      fromList: keyboardDragState.list,\n      toList: keyboardDragState.list,\n      sameList: true,\n    };\n\n    this.parentList.emitDropEvent(event);\n  }\n\n  private cancelKeyboardDrag(): void {\n    const keyboardDragState = this.keyboardDragState;\n    if (!keyboardDragState) return;\n\n    if (keyboardDragState.currentIndex !== keyboardDragState.originalIndex) {\n      const [movedItem] = keyboardDragState.list.splice(keyboardDragState.currentIndex, 1);\n      keyboardDragState.list.splice(keyboardDragState.originalIndex, 0, movedItem);\n      this.dndIndex = keyboardDragState.originalIndex;\n    }\n\n    this.state.announce?.(this.state.i18n.canceled?.() ?? 'Canceled.');\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeydown(ev: KeyboardEvent) {\n    if (this.dndDisabled) return;\n\n    // start dragging (keyboard mode)\n    if (ev.code === 'Space' && !this.dragging) {\n      ev.preventDefault();\n      const list = this.sourceList();\n      const index = this.resolveIndex(list);\n      if (!list || index < 0) return;\n      this.keyboardDragState = {\n        list,\n        originalIndex: index,\n        currentIndex: index,\n      };\n      this.beginDragSession();\n      return;\n    }\n\n    if (!this.dragging) return;\n\n    if (ev.code === 'ArrowUp' || ev.code === 'ArrowDown') {\n      ev.preventDefault();\n      this.moveWithinKeyboardList(ev.code === 'ArrowUp' ? -1 : 1);\n      return;\n    }\n\n    if (ev.code === 'Enter') {\n      ev.preventDefault();\n      this.emitKeyboardDrop();\n      this.endDragSession();\n      return;\n    }\n\n    if (ev.code === 'Escape') {\n      ev.preventDefault();\n      this.cancelKeyboardDrag();\n      this.endDragSession();\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Injection token for the active `ngb-datagrid` instance (layout toolbar tools). */\nexport const NGB_DATAGRID_HOST = new InjectionToken('NgbDatagridHost');\n","/** Localizable strings for built-in datagrid UI (pagination, filters, actions, a11y). */\nexport interface NgbDatagridLabels {\n  paginationRange?: string;\n  rowsPerPage?: string;\n  emptyState?: string;\n  booleanYes?: string;\n  booleanNo?: string;\n  selectAll?: string;\n  unselectAll?: string;\n  selectRow?: string;\n  unselectRow?: string;\n  globalFilter?: string;\n  expandRow?: string;\n  collapseRow?: string;\n  exportPdf?: string;\n  exportExcel?: string;\n  stickyRowToggle?: string;\n  editRow?: string;\n  deleteRow?: string;\n  reorderColumn?: string;\n  resizeColumn?: string;\n  openFilterMenu?: string;\n  clearFilter?: string;\n  filterOperator?: string;\n  columnFilter?: string;\n  sortBy?: string;\n  stickyBadge?: string;\n  addRow?: string;\n  addRowButton?: string;\n  save?: string;\n  cancel?: string;\n  edit?: string;\n  delete?: string;\n  multiCheckboxApply?: string;\n  multiCheckboxCancel?: string;\n  combineConditions?: string;\n  searchFilterValues?: string;\n}\n\nexport const NGB_DATAGRID_DEFAULT_LABELS: Required<NgbDatagridLabels> = {\n  paginationRange: '{start}–{end} of {total}',\n  rowsPerPage: 'Rows per page',\n  emptyState: 'No records to display.',\n  booleanYes: 'Yes',\n  booleanNo: 'No',\n  selectAll: 'Select all rows',\n  unselectAll: 'Unselect all rows',\n  selectRow: 'Select row {index}',\n  unselectRow: 'Unselect row {index}',\n  globalFilter: 'Search all columns',\n  expandRow: 'Expand row',\n  collapseRow: 'Collapse row',\n  exportPdf: 'Export to PDF',\n  exportExcel: 'Export to Excel',\n  stickyRowToggle: 'Toggle sticky row',\n  editRow: 'Edit row {index}',\n  deleteRow: 'Delete row {index}',\n  reorderColumn: 'Reorder {header}',\n  resizeColumn: 'Resize {header}',\n  openFilterMenu: 'Open filter menu for {header}',\n  clearFilter: 'Clear filter for {header}',\n  filterOperator: 'Filter operator for {header}',\n  columnFilter: '{header} filter',\n  sortBy: 'Sort by {header}. Current sort {state}.',\n  stickyBadge: 'STICKY',\n  addRow: 'Add row',\n  addRowButton: '+ Add',\n  save: 'Save',\n  cancel: 'Cancel',\n  edit: 'Edit',\n  delete: 'Delete',\n  multiCheckboxApply: 'OK',\n  multiCheckboxCancel: 'Cancel',\n  combineConditions: 'Combine conditions with',\n  searchFilterValues: 'Search values for {header}',\n};\n\n/** Documented keyboard shortcuts when [keyboardNavigation] is enabled. */\nexport const NGB_DATAGRID_KEYBOARD_SHORTCUTS = {\n  moveCell: 'Arrow keys — move focus between data cells',\n  firstLastColumn: 'Home / End — first or last column in the row',\n  firstLastRow: 'Ctrl+Home / Ctrl+End — first or last row on the page',\n  sortColumn: 'Enter on focused sortable header — cycle sort',\n  toggleSelection: 'Space on a focused row — toggle row selection (when enabled)',\n  pagePrevNext: 'Alt+Page Up / Alt+Page Down — previous or next page (when paginated)',\n  openFilter: 'F3 on a focused column — open row filter operator menu (row filter mode)',\n  cancelOverlay: 'Escape — close filter menus and cancel in-cell edit',\n  commitIncell: 'Enter — commit in-cell edit; Arrow keys move between editable cells while editing',\n} as const;\n\nexport type NgbDatagridTextDirection = 'ltr' | 'rtl' | 'auto';\n\nexport function ngbFormatDatagridLabel(\n  template: string,\n  tokens: Record<string, string | number>\n): string {\n  return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n    const value = tokens[key];\n    return value === undefined || value === null ? '' : String(value);\n  });\n}\n","import { Component, Input, EventEmitter, Output, inject, AfterContentInit, ContentChildren, QueryList, OnChanges, SimpleChanges, TemplateRef, ElementRef, ViewChild, ChangeDetectorRef, HostListener, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport {\n  NgbDatagridPageableSettings,\n  NgbDatagridPagerPosition,\n  NgbDatagridPagerType,\n  NGB_DATAGRID_DEFAULT_PAGEABLE,\n  ngbResolvePageableSettings,\n} from '../models/datagrid-pageable';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, AbstractControl, FormControl } from '@angular/forms';\nimport {\n  NgbCellTemplate,\n  NgbEditorTemplate,\n  NgbFilterTemplate,\n  NgbFilterMenuTemplate,\n  NgbGlobalFilterTemplate,\n  NgbDataGridGroupFooterTemplateDirective,\n  NgbDataGridGroupHeaderColumnTemplateDirective,\n  NgbDataGridGroupHeaderTemplateDirective,\n  GroupColumnCtx,\n  GroupHeaderCtx,\n  NgbPagerTemplate,\n  CellCtx,\n  EditCtx,\n  FilterCtx,\n  PagerCtx,\n} from '../directives/datagrid-templates.directive';\nimport { ContentChild } from '@angular/core';\nimport { NgbRowDetailTemplate } from '../directives/datagrid-templates.directive';\nimport { ngbResolvePagerPageSizeOptions } from '../../../pagination';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport {\n  NgbDataGridAggregateDescriptor,\n  NgbDataGridAggregateResults,\n  NgbColumnReorderEvent,\n  NgbColumnReorderOptions,\n  NgbDataGridState,\n  NgbDataGridExportOptions,\n  NgbDataGridGroupChange,\n  NgbDataGridGroupDescriptor,\n  NgbDataGridGroupResult,\n  NgbDataGridGroupingSettings,\n  NgbDataGridProcessOptions,\n  NgbMultiCheckboxFilterOptions,\n  NgbSearchHighlightSegment,\n  NgbDataGridTheme,\n  NgbDataGridResponsiveOptions,\n  NgbEditMode\n} from '../datagrid.types';\nimport { ngbApplyDataGridOperations, ngbGroupData } from '../data-operations';\nimport { ExcelExportAdapter, NgbExportService, PdfExportAdapter } from '../services/export.services';\nimport {\n  NgbDatagridDefaultEditService,\n  NgbDatagridEditService,\n  NgbDatagridRowId,\n  NgbDatagridTrackByFn,\n} from '../services/editing.service';\nimport { JsPdfAdapter } from '../adapters/jsdf.adapter';\nimport { BrowserExcelExportAdapter } from '../adapters/browser-excel-export.adapter';\n\nimport { ExportButtonDirective, ExportButtonContext } from '../directives/export-button.directive';\nimport { NgbGridColumnDirective } from '../directives/grid-column.directive';\nimport { NgbDatagridAddRowComponent } from './components/datagrid-add-row.component';\nimport { NgbDatagridColgroupComponent } from './components/datagrid-colgroup.component';\nimport { NgbDatagridDataRowComponent } from './components/datagrid-data-row.component';\nimport { NgbDatagridDetailRowComponent } from './components/datagrid-detail-row.component';\nimport { NgbDatagridFooterComponent } from './components/datagrid-footer.component';\nimport { NgbDatagridHeaderComponent } from './components/datagrid-header.component';\nimport { NgbDatagridFilterMenuPanelComponent } from './components/datagrid-filter-menu-panel.component';\nimport { NgbDatagridRowFilterOperatorPanelComponent } from './components/datagrid-row-filter-operator-panel.component';\nimport { NgbDatagridToolbarComponent } from './components/datagrid-toolbar.component';\nimport { NgbDatagridEditingToolbarComponent } from './components/datagrid-editing-toolbar.component';\nimport { NgbDatagridExternalEditorComponent } from './components/datagrid-external-editor.component';\nimport { HighlightItem } from './directives/grid-highlight.directive';\nimport { NgbSyncColgroupDirective } from './directives/colgroup-sync.directive';\nimport { NgbDndDropEvent, NgbDndListDirective } from '../../../drag-drop/src/directive/dnd-list.directive';\nimport { NgbDndItemDirective } from '../../../drag-drop/src/directive/dnd-item.directive';\nimport {\n  NgbCompositeFilterDescriptor,\n  NgbFilterDescriptor,\n  NgbFilterable,\n  NgbFilterMode,\n  NgbFilterOperator,\n  ngbAllowedFilterOperators,\n  ngbColumnTypeToFilterType,\n  ngbDefaultFilterOperator,\n  ngbFilterOperatorLabel,\n  ngbIsCompositeFilter,\n  ngbSetFieldFilter,\n  NgbMenuFilterConditionDraft\n} from '../models/filtering';\nimport { NGB_DATAGRID_HOST } from '../layout-toolbar/datagrid-host.token';\nimport {\n  NGB_DATAGRID_DEFAULT_LABELS,\n  NgbDatagridLabels,\n  NgbDatagridTextDirection,\n  ngbFormatDatagridLabel,\n} from '../models/datagrid-labels';\n\ntype SortDir = 'asc' | 'desc' | '';\ntype NormalizedFilterValue = string | number | boolean | null;\ntype ModifierKeyEvent = Event & Partial<Pick<MouseEvent, 'shiftKey' | 'metaKey' | 'ctrlKey'>>;\n\ntype Key<T> = Extract<keyof T, string>;\n\ntype KeyOf<T> = Extract<keyof T, string>;\ntype DraftValues<T> = Partial<Record<KeyOf<T>, unknown>>;\n\nconst MAX_EMAIL_LENGTH = 254;\nconst SELECTION_COL_WIDTH = 48;\nconst DETAIL_COL_WIDTH = 48;\nconst STICKY_TOGGLE_COL_WIDTH = 48;\nconst ACTION_COL_WIDTH = 176;\n\ntype UtilityColumnKind = 'selection' | 'detail' | 'sticky-toggle' | 'actions';\ntype StackedGroup = 'start' | 'center' | 'end';\ntype MultiCheckboxOption = { label: string; value: unknown };\ntype GroupSortDir = 'asc' | 'desc';\n\ninterface NgbDatagridGroupRenderRow<T> {\n  kind: 'group';\n  key: string;\n  group: NgbDataGridGroupResult<T>;\n  collapsed: boolean;\n  level: number;\n  startIndex: number;\n}\n\ninterface NgbDatagridGroupFooterRenderRow<T> {\n  kind: 'group-footer';\n  key: string;\n  group: NgbDataGridGroupResult<T>;\n  level: number;\n  startIndex: number;\n}\n\ninterface NgbDatagridStickyGroupMeasurement<T> {\n  key: string;\n  level: number;\n  startIndex: number;\n  endIndex: number;\n  top: number;\n  bottom: number;\n  height: number;\n  row: T;\n}\n\ninterface NgbDatagridDataRenderRow<T> {\n  kind: 'data';\n  key: NgbDatagridRowId;\n  row: T;\n  pagedIndex: number;\n  level: number;\n}\n\ntype NgbDatagridRenderRow<T> = NgbDatagridGroupRenderRow<T> | NgbDatagridGroupFooterRenderRow<T> | NgbDatagridDataRenderRow<T>;\n\nexport type NgbTableResponsive = true | false | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\nexport interface NgbTableOptions {\n  stripedRows?: boolean;\n  stripedColumns?: boolean;\n  hoverRows?: boolean;\n  activeRows?: boolean;\n  bordered?: boolean;\n  borderless?: boolean;\n  small?: boolean;\n  groupDividers?: boolean;\n  align?: 'top' | 'middle' | 'bottom';\n  caption?: string;\n  captionSide?: 'top' | 'bottom';\n  responsive?: NgbTableResponsive;\n  stickyHeader?: boolean;\n  stickyFooter?: boolean;\n  stickyRows?: boolean;\n  density?: 'comfortable' | 'compact';\n  stacked?: boolean;\n  /** `list` = single-column cards; `cards` = multi-column card rows (use `stackedGroup` on columns). */\n  stackedLayout?: 'list' | 'cards';\n  /** Alternating row backgrounds in the table body (Figma patient grid). */\n  zebraStripes?: boolean;\n}\n\n/** Tabular columns vs adaptive stacked cards (`stacked` in {@link NgbTableOptions}). */\nexport type NgbDataLayoutMode = 'tabular' | 'stacked';\n\nexport type NgbSelectionMode = 'none' | 'single' | 'multiple';\nexport type NgbSelectionBehavior = 'row' | 'checkbox' | 'both';\nexport type NgbSelectionKeyMode = 'desktop' | 'mobile';\nexport type NgbRowKey = string | ((row: unknown, rowIndex: number) => NgbDatagridRowId);\nexport type NgbColKey = string | ((column: unknown, columnIndex: number) => unknown);\n\nexport interface NgbSelectionLabels {\n  selectAll?: string;\n  unselectAll?: string;\n  selectRow?: string;\n  unselectRow?: string;\n}\n\nconst isReasonableEmail = (value: unknown): boolean => {\n  if (value == null) return false;\n  const str = String(value);\n  if (!str || str.length > MAX_EMAIL_LENGTH) return false;\n  // Basic, linear-time check: one \"@\", non-empty local part, and a domain with at least one \".\".\n  const at = str.indexOf('@');\n  if (at <= 0) return false;\n  if (str.indexOf('@', at + 1) !== -1) return false;\n  if (at === str.length - 1) return false;\n  if (/\\s/.test(str)) return false;\n  const dot = str.lastIndexOf('.');\n  if (dot <= at + 1) return false;\n  if (dot === str.length - 1) return false;\n  return true;\n};\n\n@Component({\n  selector: 'ngb-datagrid',\n  templateUrl: './datagrid.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    NgbSyncColgroupDirective,\n    NgbDatagridToolbarComponent,\n    NgbDatagridEditingToolbarComponent,\n    NgbDatagridExternalEditorComponent,\n    NgbDatagridColgroupComponent,\n    NgbDatagridHeaderComponent,\n    NgbDatagridFilterMenuPanelComponent,\n    NgbDatagridRowFilterOperatorPanelComponent,\n    NgbDatagridAddRowComponent,\n    NgbDatagridDataRowComponent,\n    NgbDatagridDetailRowComponent,\n    NgbDatagridFooterComponent,\n    NgbDndListDirective,\n    NgbDndItemDirective\n  ],\n  styleUrls: ['./datagrid.component.scss'],\n  providers: [\n    { provide: PdfExportAdapter, useClass: JsPdfAdapter },\n    { provide: ExcelExportAdapter, useClass: BrowserExcelExportAdapter },\n    { provide: NGB_DATAGRID_HOST, useExisting: forwardRef(() => Datagrid) },\n  ],\n  standalone:true\n})\nexport class Datagrid<T = any> implements AfterContentInit, OnChanges {\n  /** Column definitions to render */\n  private _columns: ColumnDef<T>[] = [];\n  renderTick = 0;\n  @Input()\n  get columns(): ColumnDef<T>[] {\n    return this._columns;\n  }\n  set columns(value: ColumnDef<T>[] | null | undefined) {\n    this._columns = value ?? [];\n    this.invalidateColumnCaches();\n    this.syncColumnWidthOverrides(true);\n    this.syncColumnOrder(true);\n  }\n\n  /** Row data to display */\n  private _data: T[] = [];\n  @Input()\n  get data(): T[] {\n    return this._data;\n  }\n  set data(value: T[] | null | undefined) {\n    this._data = value ?? [];\n    this.invalidateDataCaches();\n  }\n  /**\n   * When `true`, shows a loading overlay and sets `aria-busy` on the grid root.\n   * Use while fetching remote data before assigning `[data]`.\n   */\n  @Input() loading = false;\n  /**\n   * Total record count for paging and range labels when using server-side data binding.\n   * When set and greater than `data.length`, the grid treats `[data]` as the current page only\n   * (no client-side page slicing). Omit for local in-memory arrays.\n   */\n  private _total: number | null = null;\n  @Input()\n  get total(): number | null {\n    return this._total;\n  }\n  set total(value: number | null | undefined) {\n    this._total = value ?? null;\n    this.invalidatePagedCache();\n  }\n  private _enableSorting = false;\n  @Input()\n  get enableSorting(): boolean {\n    return this._enableSorting;\n  }\n  set enableSorting(value: boolean) {\n    this._enableSorting = value;\n    this.invalidateSortedCaches();\n    this.markGridForCheck();\n  }\n  private _enableFiltering = false;\n  @Input()\n  get enableFiltering(): boolean {\n    return this._enableFiltering;\n  }\n  set enableFiltering(value: boolean) {\n    this._enableFiltering = value;\n    this.invalidateFilteredCaches();\n    this.markGridForCheck();\n  }\n  private _filterable: NgbFilterable = false;\n  @Input()\n  get filterable(): NgbFilterable {\n    return this._filterable;\n  }\n  set filterable(value: NgbFilterable | null | undefined) {\n    this._filterable = value ?? false;\n    this.invalidateFilteredCaches();\n    this.markGridForCheck();\n  }\n  private _enableGlobalFilter = false;\n  @Input()\n  get enableGlobalFilter(): boolean {\n    return this._enableGlobalFilter;\n  }\n  set enableGlobalFilter(value: boolean) {\n    this._enableGlobalFilter = value;\n    this.invalidateFilteredCaches();\n    this.markGridForCheck();\n  }\n  private _filterMode: NgbFilterMode = 'row';\n  @Input()\n  get filterMode(): NgbFilterMode {\n    return this._filterMode;\n  }\n  set filterMode(value: NgbFilterMode | null | undefined) {\n    this._filterMode = value ?? 'row';\n    this.markGridForCheck();\n  }\n  private _filter: NgbCompositeFilterDescriptor | null = null;\n  @Input()\n  get filter(): NgbCompositeFilterDescriptor | null {\n    return this._filter;\n  }\n  set filter(value: NgbCompositeFilterDescriptor | null | undefined) {\n    this._filter = value ?? null;\n    this.localFilter = this.cloneComposite(this._filter);\n    this.syncLegacyFilters(this.localFilter);\n    this.invalidateFilteredCaches();\n  }\n  private _filterOperators?: Partial<Record<ColumnType, NgbFilterOperator[]>>;\n  @Input()\n  get filterOperators(): Partial<Record<ColumnType, NgbFilterOperator[]>> | undefined {\n    return this._filterOperators;\n  }\n  set filterOperators(value: Partial<Record<ColumnType, NgbFilterOperator[]>> | undefined) {\n    this._filterOperators = value;\n    this.filterOperatorsCache.clear();\n    this.markGridForCheck();\n  }\n  @Input() filterManual = false;\n  @Input() externalFiltering = false;\n  /** Opts local arrays into the reusable DataGrid operation helper for filter/sort/page processing. */\n  private _dataOperations: boolean | NgbDataGridProcessOptions<T> = false;\n  @Input()\n  get dataOperations(): boolean | NgbDataGridProcessOptions<T> {\n    return this._dataOperations;\n  }\n  set dataOperations(value: boolean | NgbDataGridProcessOptions<T> | null | undefined) {\n    this._dataOperations = value ?? false;\n    this.invalidatePagedCache();\n  }\n  private _groupable: boolean | NgbDataGridGroupingSettings = false;\n  @Input()\n  get groupable(): boolean | NgbDataGridGroupingSettings {\n    return this._groupable;\n  }\n  set groupable(value: boolean | NgbDataGridGroupingSettings | null | undefined) {\n    this._groupable = value ?? false;\n    this.invalidatePagedCache();\n    this.markGridForCheck();\n  }\n  private _group: NgbDataGridGroupDescriptor[] = [];\n  @Input()\n  get group(): NgbDataGridGroupDescriptor[] {\n    return this._group;\n  }\n  set group(value: NgbDataGridGroupDescriptor[] | null | undefined) {\n    this._group = this.normalizeGroupDescriptors(value);\n    this.syncCollapsedGroups();\n    this.invalidatePagedCache();\n    this.markGridForCheck();\n  }\n  private _groupedData: NgbDataGridGroupResult<T>[] | null = null;\n  @Input()\n  get groupedData(): NgbDataGridGroupResult<T>[] | null {\n    return this._groupedData;\n  }\n  set groupedData(value: NgbDataGridGroupResult<T>[] | null | undefined) {\n    this._groupedData = value ? this.cloneGroupResults(value) : null;\n    this.invalidatePagedCache();\n    this.markGridForCheck();\n  }\n  /**\n   * Optional controlled data-operation state. When provided, the grid syncs page, pageSize,\n   * sort, filter, and global filter from this object.\n   */\n  private _state: NgbDataGridState | null = null;\n  @Input()\n  get state(): NgbDataGridState | null {\n    return this._state;\n  }\n  set state(value: NgbDataGridState | null | undefined) {\n    this._state = value ?? null;\n    this.syncFromDataState(this._state);\n  }\n  /** Footer actions for the built-in multi-checkbox filter menu. */\n  @Input() multiCheckboxFilterOptions: NgbMultiCheckboxFilterOptions = {};\n  private _enablePagination = false;\n  @Input()\n  get enablePagination(): boolean {\n    return this._enablePagination;\n  }\n  set enablePagination(value: boolean) {\n    this._enablePagination = value;\n    this.invalidatePagedCache();\n  }\n  /**\n   * Pager configuration. `true` enables the pager with defaults; pass an object to customize.\n   * When set, pagination is active even if `[enablePagination]` is false.\n   */\n  private _pageable: boolean | NgbDatagridPageableSettings = false;\n  @Input()\n  get pageable(): boolean | NgbDatagridPageableSettings {\n    return this._pageable;\n  }\n  set pageable(value: boolean | NgbDatagridPageableSettings | null | undefined) {\n    this._pageable = value ?? false;\n    this.invalidatePagedCache();\n  }\n  @Input() enableEdit = false;\n  @Input() enableDelete = false;\n  /** @deprecated Prefer `pageable.pageSizes`. Kept for `[enablePagination]` compatibility. */\n  @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n\n  private _enableAdd = false;\n  @Input()\n  get enableAdd(): boolean {\n    return this._enableAdd;\n  }\n  set enableAdd(value: boolean) {\n    this._enableAdd = value;\n    this.markGridForCheck();\n  }\n  /** Accessible label (aria-label) applied to the add-row button. */\n  @Input() addButtonAriaLabel: string | null = 'Add row';\n  /** Visible text rendered inside the add-row button. */\n  @Input() addButtonText = '+ Add';\n  /** Shows sticky toggle column and keeps pinned rows at the top of the list. */\n  @Input() stickyRows = false;\n  /** Enables sticky column header when scrolling. */\n  @Input() stickyHeader = false;\n  /** Enables sticky footer when scrolling. */\n  @Input() stickyFooter = false;\n  /** Enables scroll table body container */\n  @Input() scrollable = true;\n  /** Row height used to stack multiple sticky rows without overlap (px). */\n  @Input() stickyRowHeight = 40;\n  /** Header height (px) used to offset sticky rows below the header. */\n  @Input() stickyHeaderHeight = 40;\n  /** Footer height (px) used to offset scrollable area. */\n  @Input() stickyFooterHeight = 56;\n  /** Bootstrap-like table styling options. */\n  private _tableOptions: NgbTableOptions = {};\n  @Input()\n  get tableOptions(): NgbTableOptions {\n    return this._tableOptions;\n  }\n  set tableOptions(value: NgbTableOptions | null | undefined) {\n    this._tableOptions = value ?? {};\n    this.tableClassListCache = null;\n    this.responsiveWrapperClassesCache = null;\n    this.invalidatePagedCache();\n  }\n  /**\n   * When set, overrides `tableOptions.stacked` for layout mode.\n   * Use `'stacked'` for card/label-value rows or `'tabular'` for the standard column grid.\n   */\n  @Input() dataLayoutMode: NgbDataLayoutMode | null = null;\n  /** Selection mode for rows. */\n  @Input() selectionMode: NgbSelectionMode = 'none';\n  /** Selection activation: row click, checkbox only, or both. */\n  @Input() selectionBehavior: NgbSelectionBehavior = 'row';\n  /** Keyboard modifier rules for multi-select. */\n  @Input() selectionKeyMode: NgbSelectionKeyMode = 'desktop';\n  /** Enable header select-all checkbox for multiple mode. */\n  @Input() selectAllEnabled = true;\n  /** A11y labels for selection controls. */\n  @Input() selectionA11yLabels: NgbSelectionLabels = {};\n  /** Disable selection for specific rows. */\n  @Input() selectionDisabledFn?: (row: T, index: number) => boolean;\n  /** Highlight items (row/cell). */\n  private _highlightedIndex: HighlightItem[] = [];\n  @Input()\n  get highlightedIndex(): HighlightItem[] {\n    return this._highlightedIndex;\n  }\n  set highlightedIndex(value: HighlightItem[] | null | undefined) {\n    this._highlightedIndex = value ?? [];\n    this.updateHighlightCache();\n  }\n  /** Row key for highlighting. */\n  @Input() highlightRowKey: NgbRowKey | null = null;\n  /** Column key for highlighting. */\n  @Input() highlightColKey: NgbColKey | null = null;\n  /** Accessible label for the global filter input. */\n  @Input() globalFilterAriaLabel = 'Search all columns';\n  /** Placeholder for the built-in global search input. */\n  @Input() globalFilterPlaceholder = 'Search all columns';\n  private _searchHighlightTerm = '';\n  /** When set, matching substrings in visible cells are wrapped with `.grid-search-highlight`. */\n  @Input()\n  get searchHighlightTerm(): string {\n    return this._searchHighlightTerm;\n  }\n  set searchHighlightTerm(value: string | null | undefined) {\n    this._searchHighlightTerm = value ?? '';\n    this.searchHighlightCache.clear();\n    this.markGridForCheck();\n  }\n  private _searchHighlightFields: string[] | null = null;\n  /** Column fields included in search highlighting; all visible columns when empty. */\n  @Input()\n  get searchHighlightFields(): string[] | null {\n    return this._searchHighlightFields;\n  }\n  set searchHighlightFields(value: string[] | null | undefined) {\n    this._searchHighlightFields = value ?? null;\n    this.searchHighlightCache.clear();\n    this.markGridForCheck();\n  }\n  /** Accessible label announced when expanding a row. */\n  @Input() expandRowAriaLabel = 'Expand row';\n  /** Accessible label announced when collapsing a row. */\n  @Input() collapseRowAriaLabel = 'Collapse row';\n  /** Accessible label for the PDF export button. */\n  @Input() exportPdfAriaLabel = 'Export to PDF';\n  /** Accessible label for the Excel export button. */\n  @Input() exportExcelAriaLabel = 'Export to Excel';\n  /** Optional defaults for new rows */\n  @Input() newRowDefaults: DraftValues<T> | (() => DraftValues<T>) | null = null;\n  @Input() strictEmail = false; // turn off if needed (e.g., intranet emails)\n  @Input() editOnRowClick = false;\n  /** Row editing interaction: inline actions, in-cell, external dialog, or toolbar selection. */\n  @Input() editMode: NgbEditMode = 'inline';\n  /** Hint shown in toolbar editing mode when a row is selected. */\n  @Input() toolbarEditHint = 'Row selected — click Edit to modify or Delete to remove';\n  @Input() singleExpand = false;  // accordion mode: one row expanded at a time\n  private _exportOptions: NgbDataGridExportOptions = {\n    enabled: false,\n    type: 'both',\n    pages: 'current',\n    fileName: 'export'\n  };\n  @Input()\n  get exportOptions(): NgbDataGridExportOptions {\n    return this._exportOptions;\n  }\n  set exportOptions(value: NgbDataGridExportOptions | null | undefined) {\n    this._exportOptions = value ?? {\n      enabled: false,\n      type: 'both',\n      pages: 'current',\n      fileName: 'export'\n    };\n    this.markGridForCheck();\n  }\n\n  @Input() theme: NgbDataGridTheme = 'bootstrap';\n  @Input() responsive: NgbDataGridResponsiveOptions | boolean = false;\n  private _trackBy?: NgbDatagridTrackByFn<T>;\n  @Input()\n  get trackBy(): NgbDatagridTrackByFn<T> | undefined {\n    return this._trackBy;\n  }\n  set trackBy(value: NgbDatagridTrackByFn<T> | undefined) {\n    this._trackBy = value;\n    this.invalidateRowIdentityCache();\n    this.invalidateSortedCaches();\n    this.markGridForCheck();\n  }\n  @Input() rowClass?: string | string[] | Record<string, boolean> | ((row: T, rowIndex: number) => string | string[] | Record<string, boolean>);\n  @Input() rowStyle?: Record<string, string | number> | ((row: T, rowIndex: number) => Record<string, string | number> | null | undefined);\n  @Input() rowReorderable = false;\n  private _columnReorderable = false;\n  @Input()\n  get columnReorderable(): boolean {\n    return this._columnReorderable;\n  }\n  set columnReorderable(value: boolean) {\n    this._columnReorderable = value;\n    this.markGridForCheck();\n  }\n  /** Enables drag-to-resize on column headers (requires explicit column widths). */\n  private _resizable = false;\n  @Input()\n  get resizable(): boolean {\n    return this._resizable;\n  }\n  set resizable(value: boolean) {\n    this._resizable = value;\n    this.markGridForCheck();\n  }\n  /** Render row actions as icon-only square buttons (Figma editing screen). */\n  @Input() actionDisplay: 'text' | 'icons' = 'text';\n  /** Show a STICKY badge on the configured column when a row is pinned. */\n  @Input() showStickyRowBadge = false;\n  @Input() stickyRowBadgeField: string | null = null;\n  @Input() stickyRowBadgeLabel = 'STICKY';\n  /** Localized strings for built-in UI; individual aria/text inputs override matching keys. */\n  @Input() labels: NgbDatagridLabels = {};\n  /** BCP 47 locale for pagination range and number formatting (e.g. `en-US`, `ar-SA`). */\n  @Input() locale: string | null = null;\n  /** Text direction on the grid root; `auto` inherits from document or parent `dir`. */\n  @Input() dir: NgbDatagridTextDirection = 'auto';\n  /** Enables arrow-key cell focus, Space selection, Alt+Page paging, and F3 filter shortcuts. */\n  @Input() keyboardNavigation = true;\n  @Input() editService?: NgbDatagridEditService<T>;\n\n  // Data hooks for export\n  @Input() dataProviderAll?: () => Observable<T[]> | Promise<T[]> | T[]; // used when pages='all'\n  @Input() dataProviderSelection?: () => T[]; // used when pages='selection'\n  \n  // Grab the directive and its TemplateRef\n  @ContentChild(ExportButtonDirective) exportButtonDir?: ExportButtonDirective;\n  @ViewChild('bodyScroller') bodyScroller?: ElementRef<HTMLElement>;\n  @ViewChild('headerScroller') headerScroller?: ElementRef<HTMLElement>;\n  private hostEl = inject(ElementRef<HTMLElement>);\n  colgroupSyncId = `dg-col-${Math.random().toString(36).slice(2, 8)}`;\n  private columnWidthOverrides: Record<string, number> = {};\n  private resizeSession: { field: string; startX: number; startWidth: number } | null = null;\n  private columnOrder: string[] = [];\n  columnDragField: string | null = null;\n  columnDragOverIndex: number | null = null;\n\n  exporting = false;\n  \n  @Output() rowAdd = new EventEmitter<{ newRow: T }>();\n\n  //  events\n  @Output() rowEdit = new EventEmitter<{ row: T; index: number }>();\n  @Output() rowSave = new EventEmitter<{ original: T; updated: T; index: number }>();\n  @Output() rowCancel = new EventEmitter<{ row: T; index: number }>();\n  @Output() rowDelete = new EventEmitter<{ row: T; index: number }>();\n\n  @Output() groupChange = new EventEmitter<NgbDataGridGroupChange>();\n  @Output() sortChange = new EventEmitter<{ active: string | null; direction: 'asc' | 'desc' | '' }>();\n  @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n  @Output() filtersChange = new EventEmitter<{ global: string; columns: Record<string, string> }>();\n  @Output() pageChange = new EventEmitter<{ page: number; pageSize: number }>();\n  @Output() dataStateChange = new EventEmitter<NgbDataGridState>();\n  @Output() selectionChange = new EventEmitter<{ selected: T[]; lastAction: { row: T; index: number; selected: boolean } | null }>();\n  @Output() rowReorder = new EventEmitter<{ row: T; fromIndex: number; toIndex: number; data: T[] }>();\n  @Output() columnReorder = new EventEmitter<NgbColumnReorderEvent<ColumnDef<T>>>();\n\n  @ContentChild(NgbRowDetailTemplate) rowDetailTpl?: NgbRowDetailTemplate<T>;\n  @ContentChild(NgbPagerTemplate) pagerTpl?: NgbPagerTemplate<T>;\n  @ContentChild(NgbDataGridGroupHeaderTemplateDirective) groupHeaderTpl?: NgbDataGridGroupHeaderTemplateDirective<T>;\n  private exporter = inject(NgbExportService); // instead of constructor(private exporter: NgbExportService) {}\n\n  expanded: Set<number> = new Set<number>();\n\n  private fb = inject(FormBuilder);\n\n  public filterForm: FormGroup = this.fb.group({});\n  public globalFilterCtrl = new FormControl<string>('', { nonNullable: true });\n\n  addingNew = false;\n  draftNew: DraftValues<T> | null = null;\n  errorsNew: Partial<Record<KeyOf<T>, string>> = {};\n  // --- sorting (from previous step)\n  private _sort: { active: Extract<keyof T, string> | null; direction: SortDir } = { active: null, direction: '' };\n  get sort(): { active: Extract<keyof T, string> | null; direction: SortDir } {\n    return this._sort;\n  }\n  set sort(value: { active: Extract<keyof T, string> | null; direction: SortDir } | null | undefined) {\n    this._sort = value ?? { active: null, direction: '' };\n    this.invalidateSortedCaches();\n  }\n  stickyRowIds: Set<NgbDatagridRowId> = new Set<NgbDatagridRowId>();\n  selectedRowIds: Set<NgbDatagridRowId> = new Set<NgbDatagridRowId>();\n  private selectionAnchor: number | null = null;\n  private highlightRowMap: Map<NgbDatagridRowId, HighlightItem[]> = new Map();\n  // --- filtering\n  private _globalFilter = '';\n  get globalFilter(): string {\n    return this._globalFilter;\n  }\n  set globalFilter(value: string | null | undefined) {\n    this._globalFilter = value ?? '';\n    this.invalidateFilteredCaches();\n  }\n  private _filters: Record<string, string> = {};\n  get filters(): Record<string, string> {\n    return this._filters;\n  }\n  set filters(value: Record<string, string> | null | undefined) {\n    this._filters = value ?? {};\n    this.invalidateFilteredCaches();\n  }\n  private _localFilter: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n  get localFilter(): NgbCompositeFilterDescriptor {\n    return this._localFilter;\n  }\n  set localFilter(value: NgbCompositeFilterDescriptor | null | undefined) {\n    this._localFilter = value ?? { logic: 'and', filters: [] };\n    this.invalidateFilteredCaches();\n  }\n  openFilterMenuField: string | null = null;\n  openFilterMenuAnchor: HTMLElement | null = null;\n  openRowFilterField: string | null = null;\n  openRowFilterOperatorAnchor: HTMLElement | null = null;\n  openMenuOperatorField: string | null = null;\n  menuDrafts: Record<string, NgbMenuFilterConditionDraft[]> = {};\n  /** Join logic between conditions in a column filter menu (And / Or). */\n  menuDraftJoinLogic: Record<string, 'and' | 'or'> = {};\n  multiCheckboxDrafts: Record<string, unknown[]> = {};\n  multiCheckboxSearch: Record<string, string> = {};\n  private syncingFilterForm = false;\n  private _page = 1;\n  get page(): number {\n    return this._page;\n  }\n  set page(value: number | null | undefined) {\n    const next = Math.max(1, Math.trunc(Number(value) || 1));\n    this._page = next;\n    this.invalidatePagedCache();\n  }\n  private _pageSize = 10;\n  @Input()\n  get pageSize(): number {\n    return this._pageSize;\n  }\n  set pageSize(value: number | null | undefined) {\n    this._pageSize = Math.max(1, Math.trunc(Number(value) || 10));\n    this.invalidatePagedCache();\n  }\n\n  /** Inline / in-cell editing state */\n  editingIndex: number | null = null; // index in `paged` view\n  editingCell: { rowIndex: number; field: string } | null = null;\n  /** Roving keyboard focus within the current page (data cells). */\n  focusedCell: { rowIndex: number; colIndex: number } | null = null;\n  /** Screen-reader status updates (sort, page, selection). */\n  statusMessage = '';\n  editForm: FormGroup = this.fb.group({});\n  saveAttemptedEdit = false;\n\n  /** External dialog editing state */\n  externalEditOpen = false;\n  externalEditIsNew = false;\n  externalEditPagedIndex: number | null = null;\n  externalForm: FormGroup = this.fb.group({});\n  saveAttemptedExternal = false;\n  private externalDialogOpener: HTMLElement | null = null;\n  private externalDialogFocusedOnce = false;\n\n  addForm:  FormGroup = this.fb.group({});\n  saveAttemptedNew = false;\n  private addDraftRowId: NgbDatagridRowId | null = null;\n\n  private readonly defaultEditService = new NgbDatagridDefaultEditService<T>();\n  private cdr = inject(ChangeDetectorRef);\n  private resolvedColumnsCache: ColumnDef<T>[] = [];\n  private visibleColumnsCache: ColumnDef<T>[] = [];\n  private filteredCache: T[] = [];\n  private sortedCache: T[] = [];\n  private pagedCache: T[] = [];\n  private renderRowsCache: NgbDatagridRenderRow<T>[] = [];\n  stickyGroupHeaderRows: NgbDatagridGroupRenderRow<T>[] = [];\n  stickyGroupFooterRows: NgbDatagridGroupFooterRenderRow<T>[] = [];\n  stickyGroupOverlayColumnWidths: number[] = [];\n  stickyGroupHeaderTranslateY = 0;\n  stickyGroupFooterTranslateY = 0;\n  private resolvedColumnsDirty = true;\n  private visibleColumnsDirty = true;\n  private filteredDirty = true;\n  private sortedDirty = true;\n  private pagedDirty = true;\n  private renderRowsDirty = true;\n  private stickyGroupSyncQueued = false;\n  private rowMetaMap = new Map<T, { index: number; id: NgbDatagridRowId }>();\n  private rowMetaSource: T[] | null = null;\n  private rowMetaTrackBy: NgbDatagridTrackByFn<T> | undefined;\n  private filterOperatorsCache = new Map<string, NgbFilterOperator[]>();\n  private searchHighlightCache = new Map<string, NgbSearchHighlightSegment[]>();\n  private multiCheckboxOptionsCache = new Map<string, MultiCheckboxOption[]>();\n  private multiCheckboxVisibleOptionsCache = new Map<string, MultiCheckboxOption[]>();\n  private stackedColumnsCache = new Map<StackedGroup, ColumnDef<T>[]>();\n  private stackedCardGroupsCache: StackedGroup[] | null = null;\n  private tableClassListCache: string[] | null = null;\n  private responsiveWrapperClassesCache: string[] | null = null;\n  private collapsedGroupKeys = new Set<string>();\n  private groupRenderRowLookup = new Map<string, NgbDatagridGroupRenderRow<T>>();\n  private groupFooterRenderRowLookup = new Map<string, NgbDatagridGroupFooterRenderRow<T>>();\n  groupDragField: string | null = null;\n  groupPanelDragActive = false;\n  groupPanelDragDenied = false;\n\n  private norm(v: unknown): string {\n    return (v ?? '').toString().toLowerCase().trim();\n  }\n\n  private keyOf(col: ColumnDef<T>): KeyOf<T> {\n    return col.field as KeyOf<T>;\n  }\n\n  private readFieldValue(\n    row: unknown,\n    field: string,\n  ): unknown {\n    return typeof row === 'object' && row !== null ? (row as Record<string, unknown>)[field] : undefined;\n  }\n\n  private getDefaults(): DraftValues<T> {\n    return typeof this.newRowDefaults === 'function'\n      ? this.newRowDefaults() ?? {}\n      : this.newRowDefaults ?? {};\n  }\n\n  private toDraftValues(\n    row: T | DraftValues<T> | null | undefined,\n  ): DraftValues<T> {\n    return typeof row === 'object' && row !== null ? (row as DraftValues<T>) : {};\n  }\n\n  private formDraftValues(form: FormGroup): DraftValues<T> {\n    return this.toDraftValues(form.getRawValue());\n  }\n\n  private assignDraftValues(row: T, values: DraftValues<T>): T {\n    return this.getEditService().assignValues(row, values as Partial<T>);\n  }\n\n  private patchFieldValue(field: string, value: unknown): Partial<T> {\n    return { [field]: value } as Partial<T>;\n  }\n\n  private compareSortValues(left: unknown, right: unknown): number {\n    if (typeof left === 'string' && typeof right === 'string') {\n      return left.localeCompare(right, undefined, { numeric: true, sensitivity: 'base' });\n    }\n    if (left === right) return 0;\n    return left != null && right != null && left < right ? -1 : 1;\n  }\n\n  private readModifierKeys(event?: Event): { shift: boolean; meta: boolean } {\n    const modifierEvent = event as ModifierKeyEvent | undefined;\n    return {\n      shift: !!modifierEvent?.shiftKey,\n      meta: !!(modifierEvent?.metaKey || modifierEvent?.ctrlKey),\n    };\n  }\n\n  private defaultFor(col: ColumnDef<T>): unknown {\n    const d = this.getDefaults();\n    const key = col.field as KeyOf<T>;\n    if (key in d) return d[key];\n    switch (col.type) {\n      case 'boolean': return false;\n      case 'number': return '';\n      case 'date': return '';\n      default: return '';\n    }\n  }\n  private numberValidator() {\n    const rx = /^-?\\d+(\\.\\d+)?$/;\n    return (c: AbstractControl) =>\n      c.value === '' || c.value === null || c.value === undefined || rx.test(String(c.value))\n        ? null\n        : { number: true };\n  }\n\n  private dateValidator() {\n    return (c: AbstractControl) => {\n      const v = c.value;\n      if (v === '' || v === null || v === undefined) return null;\n      return isNaN(Date.parse(String(v))) ? { date: true } : null;\n    };\n  }\n\n  private buildFormFromRow(row?: DraftValues<T>): FormGroup {\n    const group: Record<string, unknown> = {};\n    const sampleRow = (row ?? {}) as T;\n    const isNew = !row || !Object.keys(row).length;\n    for (const col of this.resolvedColumns) {\n      if (!this.isCellEditable(col, sampleRow, isNew)) continue;\n      const key = col.field as string;\n      const initial = row && key in row ? row[key as KeyOf<T>] : this.defaultFor(col);\n      const v: unknown[] = [];\n\n      if (col.required && col.type !== 'boolean') v.push(Validators.required);\n      if (col.type === 'email') {\n        v.push(this.strictEmail ? this.strictEmailValidator() : Validators.email);\n      }      \n      if (col.type === 'number') v.push(this.numberValidator());\n      if (col.type === 'date') v.push(this.dateValidator());\n      // NOTE: If you need \"boolean must be true\", add Validators.requiredTrue here.\n\n      group[key] = [initial, v];\n    }\n    return this.fb.group(group);\n  }\n\n  private strictEmailValidator() {\n    // simple, pragmatic: local@domain.tld (tld >= 2)\n    const rx = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\n    return (c: AbstractControl) => {\n      const v = c.value;\n      if (v === null || v === undefined || v === '') return null; // let \"required\" handle empties\n      if (`${v}`.length > MAX_EMAIL_LENGTH) return { email: true };\n      return rx.test(String(v)) ? null : { email: true };\n    };\n  }\n\n  //Getter for the ng-template\n  get exportButtonTpl(): TemplateRef<ExportButtonContext> | null {\n    return this.exportButtonDir?.templateRef ?? null;\n  }\n\n  get gridHost(): this {\n    return this;\n  }\n\n  get declarativeColumns(): ColumnDef<T>[] {\n    return this.gridColumnQ?.toArray().map((col) => col.toColumnDef()) ?? [];\n  }\n\n  get resolvedColumns(): ColumnDef<T>[] {\n    if (this.resolvedColumnsDirty) {\n      const declarative = this.declarativeColumns;\n      if (declarative.length) {\n        if (this.columns?.length && !this.warnedDeclarativeColumns) {\n          console.warn('ngb-datagrid: declarative columns take precedence over the columns input.');\n          this.warnedDeclarativeColumns = true;\n        }\n        this.resolvedColumnsCache = declarative;\n      } else {\n        this.resolvedColumnsCache = this.columns ?? [];\n      }\n      this.resolvedColumnsDirty = false;\n    }\n    return this.resolvedColumnsCache;\n  }\n\n  get visibleColumns(): ColumnDef<T>[] {\n    if (this.visibleColumnsDirty) {\n      const visible = this.resolvedColumns.filter((col) => !col.hidden);\n      const byField = new Map(visible.map((col) => [col.field as string, col]));\n      const order = this.columnOrder.length\n        ? this.columnOrder.filter((field) => byField.has(field))\n        : visible.map((col) => col.field as string);\n      const seen = new Set(order);\n      for (const col of visible) {\n        const field = col.field as string;\n        if (!seen.has(field)) {\n          order.push(field);\n          seen.add(field);\n        }\n      }\n      this.visibleColumnsCache = order.map((field) => byField.get(field)!).filter(Boolean);\n      this.visibleColumnsDirty = false;\n    }\n    return this.visibleColumnsCache;\n  }\n\n  private invalidateColumnCaches(): void {\n    this.resolvedColumnsDirty = true;\n    this.visibleColumnsDirty = true;\n    this.filterOperatorsCache.clear();\n    this.stackedColumnsCache.clear();\n    this.stackedCardGroupsCache = null;\n    this.multiCheckboxOptionsCache.clear();\n    this.multiCheckboxVisibleOptionsCache.clear();\n    this.searchHighlightCache.clear();\n    this.invalidateFilteredCaches();\n  }\n\n  private invalidateFilteredCaches(): void {\n    this.filteredDirty = true;\n    this.invalidateSortedCaches();\n  }\n\n  private invalidateSortedCaches(): void {\n    this.sortedDirty = true;\n    this.invalidatePagedCache();\n  }\n\n  private invalidatePagedCache(): void {\n    this.pagedDirty = true;\n    this.renderRowsDirty = true;\n    this.scheduleStickyGroupSync();\n  }\n\n  private invalidateRowIdentityCache(): void {\n    this.rowMetaSource = null;\n    this.rowMetaTrackBy = undefined;\n  }\n\n  private invalidateDataCaches(): void {\n    this.invalidateRowIdentityCache();\n    this.multiCheckboxOptionsCache.clear();\n    this.multiCheckboxVisibleOptionsCache.clear();\n    this.searchHighlightCache.clear();\n    this.invalidateFilteredCaches();\n  }\n\n  private markGridForCheck(): void {\n    this.cdr?.markForCheck();\n  }\n\n  // Some library interactions update internal state without changing an input reference.\n  // Schedule a follow-up render so zoneless hosts and child row/header views stay in sync.\n  private scheduleViewRefresh(afterRefresh?: () => void): void {\n    this.renderTick++;\n    this.cdr.markForCheck();\n    Promise.resolve().then(() => {\n      try {\n        this.cdr.detectChanges();\n        afterRefresh?.();\n      } catch {\n        // The view can be destroyed before the queued refresh runs.\n      }\n    });\n  }\n\n  private ensureRowMetaMap(): void {\n    if (this.rowMetaSource === this.data && this.rowMetaTrackBy === this.trackBy) return;\n    this.rowMetaMap.clear();\n    (this.data ?? []).forEach((row, index) => {\n      this.rowMetaMap.set(row, {\n        index,\n        id: this.trackBy ? this.trackBy(index, row) : index,\n      });\n    });\n    this.rowMetaSource = this.data;\n    this.rowMetaTrackBy = this.trackBy;\n  }\n\n  private resolveRowMeta(row: T, fallbackIndex = -1): { index: number; id: NgbDatagridRowId } {\n    this.ensureRowMetaMap();\n    const cached = this.rowMetaMap.get(row);\n    if (cached) return cached;\n\n    return {\n      index: fallbackIndex,\n      id: this.trackBy ? this.trackBy(fallbackIndex, row) : fallbackIndex,\n    };\n  }\n\n  private dataIndexOf(row: T, fallback = -1): number {\n    return this.resolveRowMeta(row, fallback).index;\n  }\n\n  private syncColumnOrder(resetFromColumns: boolean): void {\n    const visible = this.resolvedColumns.filter((col) => !col.hidden);\n    const fields = new Set(visible.map((col) => col.field as string));\n    if (resetFromColumns || !this.columnOrder.length) {\n      this.columnOrder = visible.map((col) => col.field as string);\n      return;\n    }\n    const next = this.columnOrder.filter((field) => fields.has(field));\n    for (const col of visible) {\n      const field = col.field as string;\n      if (!next.includes(field)) next.push(field);\n    }\n    this.columnOrder = next;\n  }\n\n  isGroupingEnabled(): boolean {\n    return this.groupable !== false;\n  }\n\n  isGroupingActive(): boolean {\n    return this.isGroupingEnabled() && this.group.length > 0;\n  }\n\n  isColumnGroupable(col: ColumnDef<T>): boolean {\n    return this.isGroupingEnabled() && !col.hidden;\n  }\n\n  isFieldGrouped(field: string): boolean {\n    return this.group.some((descriptor) => descriptor.field === field);\n  }\n\n  groupedColumns(): NgbDataGridGroupDescriptor[] {\n    return this.group;\n  }\n\n  groupingSettings(): NgbDataGridGroupingSettings {\n    return typeof this.groupable === 'object' && this.groupable !== null ? this.groupable : {};\n  }\n\n  showGroupFooters(): boolean {\n    return this.isGroupingActive() && this.groupingSettings().showFooter === true;\n  }\n\n  showStickyGroupHeaders(): boolean {\n    return this.isGroupingActive() && this.groupingSettings().stickyHeaders === true;\n  }\n\n  showStickyGroupFooters(): boolean {\n    return this.showGroupFooters() && this.groupingSettings().stickyFooters === true;\n  }\n\n  hasStickyGroupHeaders(): boolean {\n    return this.showStickyGroupHeaders() && this.stickyGroupHeaderRows.length > 0;\n  }\n\n  hasStickyGroupFooters(): boolean {\n    return this.showStickyGroupFooters() && this.stickyGroupFooterRows.length > 0;\n  }\n\n  groupColumnHeader(field: string): string {\n    const column = this.resolvedColumns.find((item) => item.field === field);\n    return column?.header ?? field;\n  }\n\n  groupHandleAriaLabel(col: ColumnDef<T>): string {\n    const header = this.groupColumnHeader(col.field as string);\n    return this.isFieldGrouped(col.field as string)\n      ? `Grouped by ${header}. Press Enter to remove it from grouping.`\n      : `Add ${header} to grouping. Drag into the group panel or press Enter.`;\n  }\n\n  groupDirectionAriaLabel(descriptor: NgbDataGridGroupDescriptor): string {\n    return `Toggle ${this.groupColumnHeader(descriptor.field)} group direction. Currently ${descriptor.dir === 'desc' ? 'descending' : 'ascending'}.`;\n  }\n\n  groupRemoveAriaLabel(descriptor: NgbDataGridGroupDescriptor): string {\n    return `Remove ${this.groupColumnHeader(descriptor.field)} grouping`;\n  }\n\n  groupPanelLabel(): string {\n    return this.group.length\n      ? 'Grouped by'\n      : 'Drag column headers here to group rows';\n  }\n\n  groupFieldLabel(descriptor: NgbDataGridGroupDescriptor): string {\n    return this.groupColumnHeader(descriptor.field);\n  }\n\n  groupDirectionLabel(descriptor: NgbDataGridGroupDescriptor): string {\n    return descriptor.dir === 'desc' ? 'Descending' : 'Ascending';\n  }\n\n  toggleGroupField(field: string): void {\n    if (!field) return;\n    if (this.isFieldGrouped(field)) {\n      this.removeGroupField(field);\n      return;\n    }\n    this.addGroupField(field);\n  }\n\n  addGroupField(field: string, dir: GroupSortDir = 'asc', emit = true): void {\n    if (!field || this.isFieldGrouped(field)) return;\n    this.setGroupDescriptors([...this.group, { field, dir }], emit);\n  }\n\n  removeGroupField(field: string, emit = true): void {\n    if (!field) return;\n    this.setGroupDescriptors(this.group.filter((descriptor) => descriptor.field !== field), emit);\n  }\n\n  toggleGroupDirection(field: string): void {\n    this.setGroupDescriptors(\n      this.group.map((descriptor) =>\n        descriptor.field === field\n          ? { ...descriptor, dir: descriptor.dir === 'desc' ? 'asc' : 'desc' }\n          : descriptor\n      ),\n      true,\n    );\n  }\n\n  private setGroupDescriptors(\n    descriptors: NgbDataGridGroupDescriptor[] | null | undefined,\n    emit = true,\n  ): void {\n    const normalized = this.normalizeGroupDescriptors(descriptors);\n    const changed =\n      normalized.length !== this.group.length ||\n      normalized.some((descriptor, index) =>\n        descriptor.field !== this.group[index]?.field || descriptor.dir !== this.group[index]?.dir,\n      );\n    if (!changed) {\n      this.clearGroupDragState();\n      return;\n    }\n\n    this._group = normalized;\n    this.page = 1;\n    this.syncCollapsedGroups();\n    this.invalidatePagedCache();\n    if (emit) {\n      this.groupChange.emit({ group: [...this.group] });\n      this.emitDataStateChange();\n    }\n    this.clearGroupDragState();\n    this.cdr.markForCheck();\n  }\n\n  private normalizeGroupDescriptors(\n    descriptors: NgbDataGridGroupDescriptor[] | null | undefined,\n  ): NgbDataGridGroupDescriptor[] {\n    const seen = new Set<string>();\n    const normalized: NgbDataGridGroupDescriptor[] = [];\n\n    for (const descriptor of descriptors ?? []) {\n      const field = String(descriptor?.field ?? '').trim();\n      if (!field || seen.has(field)) continue;\n      seen.add(field);\n      normalized.push({\n        field,\n        dir: descriptor.dir === 'desc' ? 'desc' : 'asc',\n        ...(descriptor.aggregates?.length ? { aggregates: this.cloneAggregateDescriptors(descriptor.aggregates) } : {}),\n      });\n    }\n\n    return normalized;\n  }\n\n  private syncCollapsedGroups(): void {\n    if (!this.collapsedGroupKeys.size) return;\n    const allowedPrefixes = new Set(this.group.map((descriptor, index) => `${index}:${descriptor.field}:`));\n    this.collapsedGroupKeys = new Set(\n      Array.from(this.collapsedGroupKeys).filter((key) =>\n        Array.from(allowedPrefixes).some((prefix) => key.startsWith(prefix)),\n      ),\n    );\n  }\n\n  private clearGroupDragState(): void {\n    this.groupDragField = null;\n    this.groupPanelDragActive = false;\n    this.groupPanelDragDenied = false;\n  }\n\n  private canAcceptGroupedField(field: string | null | undefined): boolean {\n    return !!field && this.isGroupingEnabled() && !this.isFieldGrouped(field);\n  }\n\n  onGroupHandleDragStart(event: DragEvent, field: string): void {\n    if (!this.canAcceptGroupedField(field)) {\n      event.preventDefault();\n      return;\n    }\n    this.groupDragField = field;\n    if (event.dataTransfer) {\n      event.dataTransfer.effectAllowed = 'move';\n      event.dataTransfer.setData('text/ngb-datagrid-group-field', field);\n      event.dataTransfer.setData('text/plain', field);\n    }\n  }\n\n  onGroupHandleDragEnd(): void {\n    this.clearGroupDragState();\n    this.cdr.markForCheck();\n  }\n\n  onGroupPanelDragOver(event: DragEvent): void {\n    const field = this.groupDragField || event.dataTransfer?.getData('text/ngb-datagrid-group-field') || null;\n    this.groupPanelDragDenied = !this.canAcceptGroupedField(field);\n    this.groupPanelDragActive = !!field;\n    if (this.groupPanelDragDenied) return;\n    event.preventDefault();\n    if (event.dataTransfer) {\n      event.dataTransfer.dropEffect = 'move';\n    }\n  }\n\n  onGroupPanelDragLeave(event: DragEvent): void {\n    const current = event.currentTarget as HTMLElement | null;\n    const related = event.relatedTarget as Node | null;\n    if (current && related && current.contains(related)) return;\n    this.groupPanelDragActive = false;\n    this.groupPanelDragDenied = false;\n    this.cdr.markForCheck();\n  }\n\n  onGroupPanelDrop(event: DragEvent): void {\n    const field = this.groupDragField || event.dataTransfer?.getData('text/ngb-datagrid-group-field') || null;\n    if (!this.canAcceptGroupedField(field)) {\n      this.clearGroupDragState();\n      this.cdr.markForCheck();\n      return;\n    }\n    event.preventDefault();\n    this.addGroupField(field!);\n  }\n\n  isColumnReorderEnabled(): boolean {\n    if (!this.columnReorderable || this.isStackedLayout()) return false;\n    if (this.visibleColumns.some((col) => col.locked || this.isColumnPinned(col))) return false;\n    return true;\n  }\n\n  isColumnReorderable(col: ColumnDef<T>): boolean {\n    if (!this.isColumnReorderEnabled()) return false;\n    if (col.reorderable === false || col.locked) return false;\n    if (this.isColumnPinned(col)) return false;\n    return true;\n  }\n\n  onColumnDragStart(event: DragEvent, col: ColumnDef<T>, fromIndex: number): void {\n    if (!this.isColumnReorderable(col)) {\n      event.preventDefault();\n      return;\n    }\n    this.columnDragField = col.field as string;\n    this.columnDragOverIndex = fromIndex;\n    if (event.dataTransfer) {\n      event.dataTransfer.effectAllowed = 'move';\n      event.dataTransfer.setData('text/plain', this.columnDragField);\n    }\n  }\n\n  onColumnDragOver(event: DragEvent, toIndex: number): void {\n    if (!this.columnReorderable || !this.columnDragField) return;\n    event.preventDefault();\n    if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n    this.columnDragOverIndex = toIndex;\n    this.cdr.markForCheck();\n  }\n\n  onColumnDragLeave(event: DragEvent, index: number): void {\n    if (this.columnDragOverIndex === index) {\n      const related = event.relatedTarget as Node | null;\n      const current = event.currentTarget as HTMLElement | null;\n      if (current && related && current.contains(related)) return;\n      this.columnDragOverIndex = null;\n      this.cdr.markForCheck();\n    }\n  }\n\n  onColumnDrop(event: DragEvent, toIndex: number): void {\n    if (!this.columnReorderable || !this.columnDragField) return;\n    event.preventDefault();\n    const fromIndex = this.visibleColumns.findIndex((col) => col.field === this.columnDragField);\n    this.moveColumn(fromIndex, toIndex);\n    this.onColumnDragEnd();\n  }\n\n  onColumnDragEnd(): void {\n    this.columnDragField = null;\n    this.columnDragOverIndex = null;\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Reorders a visible column relative to another visible column index.\n   * Only columns that pass {@link isColumnReorderable} can be moved.\n   */\n  reorderColumn(\n    column: ColumnDef<T> | Extract<keyof T, string>,\n    destinationIndex: number,\n    options?: NgbColumnReorderOptions,\n    emit = true\n  ): void {\n    if (!this.isColumnReorderEnabled()) return;\n    const field = typeof column === 'string' ? column : (column.field as string);\n    const cols = this.visibleColumns;\n    const fromIndex = cols.findIndex((col) => col.field === field);\n    if (fromIndex < 0 || destinationIndex < 0 || destinationIndex >= cols.length) return;\n\n    const insertAfter = options?.before === false;\n    let toIndex = insertAfter ? destinationIndex + 1 : destinationIndex;\n    toIndex = Math.max(0, Math.min(toIndex, cols.length - 1));\n    if (fromIndex === toIndex) return;\n\n    this.moveColumn(fromIndex, toIndex, emit);\n  }\n\n  moveColumn(fromIndex: number, toIndex: number, emit = true): void {\n    if (!this.isColumnReorderEnabled()) return;\n    const cols = this.visibleColumns;\n    if (fromIndex < 0 || toIndex < 0 || fromIndex >= cols.length || toIndex >= cols.length) return;\n    if (fromIndex === toIndex) return;\n\n    const fromCol = cols[fromIndex];\n    if (!fromCol || !this.isColumnReorderable(fromCol)) return;\n\n    const movingField = fromCol.field as string;\n    const reorderableFields = cols\n      .filter((col) => this.isColumnReorderable(col))\n      .map((col) => col.field as string);\n    const fromReorderIndex = reorderableFields.indexOf(movingField);\n    if (fromReorderIndex < 0) return;\n\n    let toReorderIndex = 0;\n    let reorderableSeen = 0;\n    for (let i = 0; i < cols.length; i++) {\n      if (i === toIndex) {\n        toReorderIndex = reorderableSeen;\n        break;\n      }\n      if (this.isColumnReorderable(cols[i])) reorderableSeen++;\n    }\n\n    const nextReorderable = [...reorderableFields];\n    nextReorderable.splice(fromReorderIndex, 1);\n    nextReorderable.splice(toReorderIndex, 0, movingField);\n\n    const order: string[] = [];\n    let reorderCursor = 0;\n    for (const col of cols) {\n      if (!this.isColumnReorderable(col)) {\n        order.push(col.field as string);\n      } else {\n        order.push(nextReorderable[reorderCursor++]);\n      }\n    }\n\n    this.columnOrder = order;\n    this.visibleColumnsDirty = true;\n    const column = this.resolvedColumns.find((col) => col.field === movingField);\n    const toIndexResolved = order.indexOf(movingField);\n    if (emit && column) {\n      this.columnReorder.emit({\n        columns: this.visibleColumns.map((col) => ({ ...col })),\n        column,\n        fromIndex,\n        toIndex: toIndexResolved,\n        fields: [...order],\n      });\n    }\n    this.scheduleViewRefresh(() => this.syncResizableColgroups());\n  }\n\n  private validateColumnConfig(): void {\n    const columns = this.resolvedColumns;\n    const seenFields = new Set<string>();\n    const duplicates = new Set<string>();\n    columns.forEach((col) => {\n      const field = `${col.field ?? ''}`;\n      if (seenFields.has(field)) duplicates.add(field);\n      seenFields.add(field);\n    });\n    if (duplicates.size) {\n      throw new Error(`ngb-datagrid: duplicate column field(s): ${Array.from(duplicates).join(', ')}`);\n    }\n\n    const visible = this.visibleColumns;\n    const hasPinned = visible.some((col) => this.isColumnPinned(col));\n    if (!hasPinned) return;\n\n    if (this.rowDetailTpl) {\n      throw new Error('ngb-datagrid: detail rows are not supported with sticky or locked columns.');\n    }\n\n    const missingWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n    if (missingWidth.length) {\n      throw new Error(`ngb-datagrid: sticky/locked columns require explicit width for all visible columns. Missing width on: ${missingWidth.map((col) => col.field).join(', ')}`);\n    }\n\n    if (this.resizable && !this.isStackedLayout()) {\n      const missingResizableWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n      if (missingResizableWidth.length) {\n        throw new Error(\n          `ngb-datagrid: resizable columns require explicit width for all visible columns. Missing width on: ${missingResizableWidth.map((col) => col.field).join(', ')}`\n        );\n      }\n    }\n\n    if (visible.some((col) => col.locked) && !visible.some((col) => !col.locked)) {\n      throw new Error('ngb-datagrid: at least one unlocked visible column is required when locked columns are used.');\n    }\n\n    let phase: 'leading' | 'middle' | 'trailing' = 'leading';\n    visible.forEach((col) => {\n      const side = this.columnOrderGroup(col);\n      if (side === 'leading') {\n        if (phase !== 'leading') {\n          throw new Error('ngb-datagrid: start sticky/locked columns must appear before unlocked columns.');\n        }\n        return;\n      }\n      if (side === 'trailing') {\n        phase = 'trailing';\n        return;\n      }\n      if (phase === 'trailing') {\n        throw new Error('ngb-datagrid: end sticky columns must appear after unlocked columns.');\n      }\n      phase = 'middle';\n    });\n  }\n\n  isFilteringEnabled(): boolean {\n    return ((this.filterable !== false && this.filterable !== 'none') || this.enableFiltering);\n  }\n\n  resolvedFilterMode(): NgbFilterMode {\n    if (this.filterable === 'row' || this.filterable === 'menu' || this.filterable === 'multi' || this.filterable === 'none') {\n      return this.filterable;\n    }\n    if (this.filterable === true) return 'row';\n    return this.filterMode;\n  }\n\n  get filtered(): T[] {\n    if (this.filteredDirty) {\n      const src = this.data ?? [];\n      const global = this.currentGlobalFilter();\n      const filtering = this.isFilteringEnabled();\n      const globalOnly = this.enableGlobalFilter && !filtering;\n\n      if (!filtering && !globalOnly) {\n        this.filteredCache = src;\n      } else if (this.filterManual || this.externalFiltering) {\n        this.filteredCache = src;\n      } else {\n        const descriptor = filtering ? this.effectiveFilterDescriptor() : { logic: 'and' as const, filters: [] };\n        const resolvedColumns = this.resolvedColumns;\n        this.filteredCache = src.filter((row) => {\n          const matchesComposite = !descriptor.filters.length || this.matchesComposite(row, descriptor);\n          if (!matchesComposite) return false;\n          if (!global) return true;\n          return resolvedColumns.some((column) => this.norm(this.readFieldValue(row, column.field)).includes(global));\n        });\n      }\n      this.filteredDirty = false;\n    }\n    return this.filteredCache;\n  }\n\n  private effectiveFilterDescriptor(): NgbCompositeFilterDescriptor {\n    const base = this.filter ?? this.localFilter;\n    if (base?.filters?.length) return base;\n    return this.legacyFilterDescriptor();\n  }\n\n  private legacyFilterDescriptor(): NgbCompositeFilterDescriptor {\n    const filters = this.resolvedColumns\n      .filter((col) => col.filterable && this.norm(this.filters[col.field as string]))\n      .map((col) => ({\n        field: col.field as string,\n        operator: 'contains' as NgbFilterOperator,\n        value: this.filters[col.field as string],\n        ignoreCase: true\n      }));\n    return { logic: 'and', filters };\n  }\n\n  private currentGlobalFilter(): string {\n    return this.norm(this.globalFilter || this.globalFilterCtrl.value);\n  }\n\n  private matchesComposite(row: T, descriptor: NgbCompositeFilterDescriptor): boolean {\n    if (!descriptor.filters.length) return true;\n    const results = descriptor.filters.map((filter) =>\n      ngbIsCompositeFilter(filter) ? this.matchesComposite(row, filter) : this.matchesDescriptor(row, filter)\n    );\n    return descriptor.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n  }\n\n  private matchesDescriptor(row: T, descriptor: NgbFilterDescriptor): boolean {\n    const column = this.resolvedColumns.find((col) => col.field === descriptor.field);\n    const filterType = this.getColumnFilterType(column);\n    const cellValue = this.normalizeFilterValue(this.readFieldValue(row, descriptor.field), filterType);\n    const compareValue = this.normalizeFilterValue(descriptor.value, filterType);\n    const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n    if (descriptor.operator === 'isnull') return cellValue == null;\n    if (descriptor.operator === 'isnotnull') return cellValue != null;\n    if (descriptor.operator === 'isempty') return cellValue === '';\n    if (descriptor.operator === 'isnotempty') return cellValue !== '' && cellValue != null;\n\n    if (filterType === 'numeric' || filterType === 'date') {\n      const left = cellValue as number | null;\n      const right = compareValue as number | null;\n      if (left == null || right == null) return false;\n      switch (descriptor.operator) {\n        case 'eq': return left === right;\n        case 'neq': return left !== right;\n        case 'gt': return left > right;\n        case 'gte': return left >= right;\n        case 'lt': return left < right;\n        case 'lte': return left <= right;\n        default: return false;\n      }\n    }\n\n    if (filterType === 'boolean') {\n      switch (descriptor.operator) {\n        case 'eq': return cellValue === compareValue;\n        case 'neq': return cellValue !== compareValue;\n        default: return false;\n      }\n    }\n\n    const left = cellValue == null ? '' : String(cellValue);\n    const right = compareValue == null ? '' : String(compareValue);\n    const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n    const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n\n    switch (descriptor.operator) {\n      case 'contains': return normalizedLeft.includes(normalizedRight);\n      case 'doesnotcontain': return !normalizedLeft.includes(normalizedRight);\n      case 'eq': return normalizedLeft === normalizedRight;\n      case 'neq': return normalizedLeft !== normalizedRight;\n      case 'startswith': return normalizedLeft.startsWith(normalizedRight);\n      case 'endswith': return normalizedLeft.endsWith(normalizedRight);\n      default: return false;\n    }\n  }\n\n  private normalizeFilterValue(\n    value: unknown,\n    filterType: ReturnType<Datagrid<T>['getColumnFilterType']>,\n  ): NormalizedFilterValue {\n    if (value === '' || value === undefined) return null;\n    if (value === null) return null;\n    switch (filterType) {\n      case 'numeric': {\n        const parsed = Number(value);\n        return Number.isNaN(parsed) ? null : parsed;\n      }\n      case 'date': {\n        const parsed = Date.parse(String(value));\n        return Number.isNaN(parsed) ? null : parsed;\n      }\n      case 'boolean':\n        if (value === 'true') return true;\n        if (value === 'false') return false;\n        return !!value;\n      default:\n        return String(value);\n    }\n  }\n\n  getColumnFilterType(col?: ColumnDef<T>): 'text' | 'numeric' | 'boolean' | 'date' | 'select' {\n    return col?.filterType ?? ngbColumnTypeToFilterType(col?.type);\n  }\n\n  isMultiCheckboxMode(col: ColumnDef<T>): boolean {\n    return this.isFilteringEnabled() && this.resolvedFilterMode() === 'multi' && !!col.filterable;\n  }\n\n  getAllowedOperators(col: ColumnDef<T>): NgbFilterOperator[] {\n    const field = col.field as string;\n    const cached = this.filterOperatorsCache.get(field);\n    if (cached) return cached;\n\n    const resolved = col.allowedFilterOperators?.length\n      ? col.allowedFilterOperators\n      : this.filterOperators?.[col.type ?? 'text']?.length\n        ? this.filterOperators[col.type ?? 'text']!\n        : ngbAllowedFilterOperators(this.getColumnFilterType(col));\n\n    this.filterOperatorsCache.set(field, resolved);\n    return resolved;\n  }\n\n  defaultFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n    const allowed = this.getAllowedOperators(col);\n    const explicit = col.defaultFilterOperator;\n    if (explicit === '') {\n      return allowed[0] ?? ngbDefaultFilterOperator(this.getColumnFilterType(col));\n    }\n    if (explicit) return explicit;\n    return ngbDefaultFilterOperator(this.getColumnFilterType(col));\n  }\n\n  rowFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n    const field = col.field as string;\n    const raw = this.filterForm?.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n    if (raw === '' || raw == null) {\n      return this.defaultFilterOperator(col);\n    }\n    return raw;\n  }\n\n  operatorLabel(operator: NgbFilterOperator): string {\n    const labels: Record<NgbFilterOperator, string> = {\n      contains: 'Contains',\n      doesnotcontain: 'Does not contain',\n      eq: 'Equals',\n      neq: 'Does not equal',\n      startswith: 'Starts with',\n      endswith: 'Ends with',\n      gt: 'Greater than',\n      gte: 'Greater than or equal',\n      lt: 'Less than',\n      lte: 'Less than or equal',\n      isnull: 'Is null',\n      isnotnull: 'Is not null',\n      isempty: 'Is empty',\n      isnotempty: 'Is not empty'\n    };\n    return labels[operator];\n  }\n\n  rowFilterOperatorLabel(col: ColumnDef<T>, operator: NgbFilterOperator): string {\n    return ngbFilterOperatorLabel(operator, this.getColumnFilterType(col));\n  }\n\n  rowFilterMenuTitle(col: ColumnDef<T>): string {\n    const filterType = this.getColumnFilterType(col);\n    switch (filterType) {\n      case 'numeric': return 'Number filter';\n      case 'date': return 'Date filter';\n      case 'boolean': return 'Boolean filter';\n      case 'select': return 'Select filter';\n      default: return 'String filter';\n    }\n  }\n\n  rowFilterPlaceholder(col: ColumnDef<T>): string {\n    if (col.filterPlaceholder) return col.filterPlaceholder;\n    const filterType = this.getColumnFilterType(col);\n    const header = String(col.header ?? '').trim().toLowerCase();\n    if (filterType === 'date') return 'dd/mm/yyyy';\n    if (filterType === 'numeric') return `Filter by ${header}...`;\n    if (filterType === 'text' || filterType === 'select') return `Filter by ${header}...`;\n    return '';\n  }\n\n  isSearchHighlightEnabled(): boolean {\n    return !!this.norm(this.searchHighlightTerm);\n  }\n\n  shouldHighlightSearchInColumn(field: string): boolean {\n    if (!this.isSearchHighlightEnabled()) return false;\n    const fields = this.searchHighlightFields;\n    if (!fields?.length) return true;\n    return fields.includes(field);\n  }\n\n  formatCellDisplayValue(value: unknown): string {\n    if (value == null) return '';\n    if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n    return String(value);\n  }\n\n  private groupColumn(field: string): ColumnDef<T> | undefined {\n    return this.resolvedColumns.find((column) => column.field === field);\n  }\n\n  groupColumnField(col: ColumnDef<T>): string {\n    return String(col.field);\n  }\n\n  private formatGroupValue(field: string, value: unknown): string {\n    const column = this.groupColumn(field);\n    if (value === null || value === undefined || value === '') return '(Blank)';\n    if (column?.type === 'select') {\n      const option = column.options?.find((item) => item.value === value);\n      if (option) return option.label;\n    }\n    return this.formatCellDisplayValue(value);\n  }\n\n  groupRowLabel(group: NgbDataGridGroupResult<T>): string {\n    return `${this.groupColumnHeader(group.field)}: ${this.formatGroupValue(group.field, group.value)}`;\n  }\n\n  groupRowCountLabel(group: NgbDataGridGroupResult<T>): string {\n    return `${group.count} item${group.count === 1 ? '' : 's'}`;\n  }\n\n  groupLeadColumnField(group: NgbDataGridGroupResult<T>): string | null {\n    const first = this.visibleColumns[0];\n    return first ? String(first.field) : null;\n  }\n\n  isGroupLeadColumn(col: ColumnDef<T>, group: NgbDataGridGroupResult<T>): boolean {\n    return String(col.field) === this.groupLeadColumnField(group);\n  }\n\n  shouldRenderGroupCell(col: ColumnDef<T>, group: NgbDataGridGroupResult<T>): boolean {\n    if (this.isGroupLeadColumn(col, group)) return true;\n    return !this.isCoveredByGroupLeadSpan(col, group);\n  }\n\n  groupCellColspan(col: ColumnDef<T>, group: NgbDataGridGroupResult<T>): number | null {\n    if (!this.isGroupLeadColumn(col, group)) return null;\n    return this.groupLeadColumnSpan(group);\n  }\n\n  hasGroupHeaderColumnTemplate(field: string): boolean {\n    return !!this.groupHeaderColumnTpls[field];\n  }\n\n  hasGroupFooterTemplate(field: string): boolean {\n    return !!this.groupFooterTpls[field];\n  }\n\n  groupHeaderColumnTemplate(field: string): NgbDataGridGroupHeaderColumnTemplateDirective<T> | null {\n    return this.groupHeaderColumnTpls[field] ?? null;\n  }\n\n  groupFooterTemplate(field: string): NgbDataGridGroupFooterTemplateDirective<T> | null {\n    return this.groupFooterTpls[field] ?? null;\n  }\n\n  groupHeaderContext(group: NgbDataGridGroupResult<T>): GroupHeaderCtx<T> {\n    const ctx: GroupHeaderCtx<T> = {\n      $implicit: group,\n      group,\n      field: group.field,\n      value: group.value,\n      items: group.items,\n      level: group.level,\n      count: group.count,\n      aggregates: this.cloneAggregateResults(group.aggregates),\n    };\n    return ctx;\n  }\n\n  groupColumnContext(group: NgbDataGridGroupResult<T>, col: ColumnDef<T>): GroupColumnCtx<T> {\n    return {\n      ...this.groupHeaderContext(group),\n      col,\n    };\n  }\n\n  groupRowIndent(level: number): number {\n    return level * 1.1;\n  }\n\n  private groupLeadColumnSpan(group: NgbDataGridGroupResult<T>): number {\n    const leadIndex = this.groupLeadColumnIndex(group);\n    if (leadIndex === -1) return 1;\n\n    for (let index = leadIndex + 1; index < this.visibleColumns.length; index += 1) {\n      const field = this.groupColumnField(this.visibleColumns[index]);\n      if (this.hasGroupHeaderColumnTemplate(field)) {\n        return Math.max(index - leadIndex, 1);\n      }\n    }\n\n    return Math.max(this.visibleColumns.length - leadIndex, 1);\n  }\n\n  private isCoveredByGroupLeadSpan(col: ColumnDef<T>, group: NgbDataGridGroupResult<T>): boolean {\n    const index = this.groupColumnIndex(col);\n    const leadIndex = this.groupLeadColumnIndex(group);\n    if (index === -1 || leadIndex === -1 || index <= leadIndex) return false;\n    return index < leadIndex + this.groupLeadColumnSpan(group);\n  }\n\n  private groupLeadColumnIndex(group: NgbDataGridGroupResult<T>): number {\n    const field = this.groupLeadColumnField(group);\n    return field ? this.visibleColumns.findIndex((column) => String(column.field) === field) : -1;\n  }\n\n  private groupColumnIndex(col: ColumnDef<T>): number {\n    const field = String(col.field);\n    return this.visibleColumns.findIndex((column) => String(column.field) === field);\n  }\n\n  private groupKeyFor(group: NgbDataGridGroupResult<T>, level: number, startIndex: number): string {\n    return `${level}:${group.field}:${String(group.value)}:${startIndex}`;\n  }\n\n  isGroupCollapsed(group: NgbDataGridGroupResult<T>, level: number, startIndex: number): boolean {\n    return this.collapsedGroupKeys.has(this.groupKeyFor(group, level, startIndex));\n  }\n\n  toggleGroupCollapsed(group: NgbDataGridGroupResult<T>, level: number, startIndex: number): void {\n    const key = this.groupKeyFor(group, level, startIndex);\n    if (this.collapsedGroupKeys.has(key)) {\n      this.collapsedGroupKeys.delete(key);\n    } else {\n      this.collapsedGroupKeys.add(key);\n    }\n    this.invalidatePagedCache();\n    this.cdr.markForCheck();\n  }\n\n  private isGroupResult(item: NgbDataGridGroupResult<T> | T): item is NgbDataGridGroupResult<T> {\n    return typeof item === 'object' && item !== null && Array.isArray((item as NgbDataGridGroupResult<T>).items);\n  }\n\n  private cloneAggregateDescriptors(\n    descriptors: readonly NgbDataGridAggregateDescriptor[] | null | undefined,\n  ): NgbDataGridAggregateDescriptor[] {\n    return (descriptors ?? []).map((descriptor) => ({ ...descriptor }));\n  }\n\n  private cloneAggregateResults(\n    results: NgbDataGridAggregateResults | null | undefined,\n  ): NgbDataGridAggregateResults {\n    const cloned: NgbDataGridAggregateResults = {};\n    for (const field of Object.keys(results ?? {})) {\n      cloned[field] = { ...(results as NgbDataGridAggregateResults)[field] };\n    }\n    return cloned;\n  }\n\n  private cloneGroupResults(\n    groups: readonly NgbDataGridGroupResult<T>[] | null | undefined,\n  ): NgbDataGridGroupResult<T>[] {\n    return (groups ?? []).map((group) => ({\n      ...group,\n      aggregates: this.cloneAggregateResults(group.aggregates),\n      items: group.items.map((item) => (this.isGroupResult(item) ? this.cloneGroupResults([item])[0] : item)),\n    }));\n  }\n\n  getSearchHighlightSegments(value: unknown, field: string): NgbSearchHighlightSegment[] {\n    const display = this.formatCellDisplayValue(value);\n    const term = this.norm(this.searchHighlightTerm);\n    const highlightEnabled = this.shouldHighlightSearchInColumn(field);\n    const cacheKey = JSON.stringify([field, term, display, highlightEnabled]);\n    const cached = this.searchHighlightCache.get(cacheKey);\n    if (cached) return cached;\n\n    if (!highlightEnabled) {\n      const segments = [{ key: '0:n', text: display, match: false }];\n      this.searchHighlightCache.set(cacheKey, segments);\n      return segments;\n    }\n\n    if (!term || !display) {\n      const segments = [{ key: '0:n', text: display, match: false }];\n      this.searchHighlightCache.set(cacheKey, segments);\n      return segments;\n    }\n\n    const normalizedDisplay = this.norm(display);\n    const segments: NgbSearchHighlightSegment[] = [];\n    let cursor = 0;\n\n    while (cursor < display.length) {\n      const slice = display.slice(cursor);\n      const normalizedSlice = this.norm(slice);\n      const matchIndex = normalizedSlice.indexOf(term);\n      if (matchIndex < 0) {\n        segments.push({ key: `${cursor}:n`, text: display.slice(cursor), match: false });\n        break;\n      }\n\n      const start = cursor + matchIndex;\n      const end = start + term.length;\n      if (start > cursor) {\n        segments.push({ key: `${cursor}:n`, text: display.slice(cursor, start), match: false });\n      }\n      segments.push({ key: `${start}:m`, text: display.slice(start, end), match: true });\n      cursor = end;\n    }\n\n    const resolved = segments.length ? segments : [{ key: '0:n', text: display, match: false }];\n    this.searchHighlightCache.set(cacheKey, resolved);\n    return resolved;\n  }\n\n  rowFilterEmptyOptionLabel(col: ColumnDef<T>): string {\n    return this.getColumnFilterType(col) === 'boolean' ? '(All)' : 'Select';\n  }\n\n  booleanFilterOptionLabel(value: boolean): string {\n    return value ? 'Yes' : 'No';\n  }\n\n  isRowFilterMenuOpen(field: string): boolean {\n    return this.openRowFilterField === field;\n  }\n\n  get openRowFilterColumn(): ColumnDef<T> | null {\n    if (!this.openRowFilterField) return null;\n    return this.resolvedColumns.find((item) => item.field === this.openRowFilterField) ?? null;\n  }\n\n  toggleRowFilterMenu(field: string, anchor?: HTMLElement | null): void {\n    if (this.openRowFilterField === field) {\n      this.openRowFilterField = null;\n      this.openRowFilterOperatorAnchor = null;\n      this.cdr.markForCheck();\n      return;\n    }\n    this.closeFilterMenu();\n    this.openRowFilterField = field;\n    this.openRowFilterOperatorAnchor = this.resolveFilterMenuAnchor(anchor);\n    this.cdr.markForCheck();\n  }\n\n  setRowFilterOperator(col: ColumnDef<T>, operator: NgbFilterOperator): void {\n    const field = col.field as string;\n    this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n    const value = this.filterForm.get(this.valueControlName(field))?.value;\n    if (!this.operatorRequiresValue(operator) || !(value === null || value === undefined || value === '')) {\n      this.applyRowFilter(col);\n    }\n    this.openRowFilterField = null;\n    this.openRowFilterOperatorAnchor = null;\n    this.cdr.markForCheck();\n  }\n\n  operatorRequiresValue(operator: NgbFilterOperator): boolean {\n    return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n  }\n\n  isRowFilterVisible(col: ColumnDef<T>): boolean {\n    if (!col.filterable || !this.isFilteringEnabled()) return false;\n    if (col.showFilterRow != null) return col.showFilterRow;\n    return this.resolvedFilterMode() === 'row';\n  }\n\n  isRowFilterOperatorVisible(col: ColumnDef<T>): boolean {\n    if (!this.isRowFilterVisible(col)) return false;\n    if (this.getColumnFilterType(col) === 'boolean') return false;\n    return col.showFilterOperator !== false;\n  }\n\n  isMenuFilterVisible(col: ColumnDef<T>): boolean {\n    if (!col.filterable || !this.isFilteringEnabled()) return false;\n    if (col.showFilterMenu != null) return col.showFilterMenu;\n    return this.resolvedFilterMode() === 'menu' || this.resolvedFilterMode() === 'multi';\n  }\n\n  getColumnFilter(field: string): NgbFilterDescriptor | null {\n    const descriptor = this.effectiveFilterDescriptor().filters.find(\n      (filter): filter is NgbFilterDescriptor => !ngbIsCompositeFilter(filter) && filter.field === field\n    );\n    return descriptor ?? null;\n  }\n\n  hasActiveColumnFilter(field: string): boolean {\n    return !!this.findFieldFilter(field);\n  }\n\n  private findFieldFilter(field: string): NgbFilterDescriptor | NgbCompositeFilterDescriptor | null {\n    const found = this.effectiveFilterDescriptor().filters.find((filter) => {\n      if (ngbIsCompositeFilter(filter)) {\n        return filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n      }\n      return filter.field === field;\n    });\n    return found ?? null;\n  }\n\n  private withoutFieldFilters(filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>, field: string) {\n    return filters.filter((filter) => {\n      if (ngbIsCompositeFilter(filter)) {\n        return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n      }\n      return filter.field !== field;\n    });\n  }\n\n  private upsertColumnFilter(\n    field: string,\n    operator: NgbFilterOperator,\n    value: unknown,\n    emit = true\n  ): void {\n    const base = this.cloneComposite(this.filter ?? this.localFilter);\n    this.commitFilter(\n      ngbSetFieldFilter(base, field, operator, value, {\n        requiresValue: (op) => this.operatorRequiresValue(op)\n      }),\n      emit\n    );\n  }\n\n  clearColumnFilter(field: string, emit = true): void {\n    const next = this.cloneComposite(this.filter ?? this.localFilter);\n    next.filters = this.withoutFieldFilters(next.filters, field);\n    this.commitFilter(next, emit);\n    this.setFilterFormField(field, this.defaultFilterOperator(this.resolvedColumns.find((col) => col.field === field)!), '');\n    delete this.multiCheckboxDrafts[field];\n    delete this.multiCheckboxSearch[field];\n    if (this.openRowFilterField === field) {\n      this.openRowFilterField = null;\n      this.openRowFilterOperatorAnchor = null;\n    }\n  }\n\n  clearAllFilters(emit = true): void {\n    this.localFilter = { logic: 'and', filters: [] };\n    this.filters = {};\n    this.globalFilter = '';\n    this.globalFilterCtrl.setValue('', { emitEvent: false });\n    this.menuDrafts = {};\n    this.menuDraftJoinLogic = {};\n    this.multiCheckboxDrafts = {};\n    this.multiCheckboxSearch = {};\n    this.closeFilterMenu();\n    this.openRowFilterField = null;\n    this.openRowFilterOperatorAnchor = null;\n    this.syncFilterFormFromState();\n    this.page = 1;\n    this.invalidateFilteredCaches();\n    if (emit) {\n      this.filterChange.emit(this.localFilter);\n      this.filtersChange.emit({ global: '', columns: {} });\n      this.emitDataStateChange();\n    }\n    this.cdr.markForCheck();\n  }\n\n  private commitFilter(filter: NgbCompositeFilterDescriptor, emit = true): void {\n    this.localFilter = filter;\n    this.syncLegacyFilters(filter);\n    this.page = 1;\n    this.invalidateFilteredCaches();\n    this.syncFilterFormFromState();\n    if (emit) {\n      this.filterChange.emit(filter);\n      this.filtersChange.emit({ global: this.currentGlobalFilterValue(), columns: { ...this.filters } });\n      this.emitDataStateChange();\n    }\n    this.cdr.markForCheck();\n  }\n\n  private cloneComposite(filter: NgbCompositeFilterDescriptor | null | undefined): NgbCompositeFilterDescriptor {\n    if (!filter) return { logic: 'and', filters: [] };\n    return {\n      logic: filter.logic,\n      filters: filter.filters.map((item) => (ngbIsCompositeFilter(item) ? this.cloneComposite(item) : ({ ...item })))\n    };\n  }\n\n  private syncLegacyFilters(filter: NgbCompositeFilterDescriptor): void {\n    const next: Record<string, string> = {};\n    filter.filters.forEach((item) => {\n      if (ngbIsCompositeFilter(item)) return;\n      next[item.field] = item.value == null ? '' : String(item.value);\n    });\n    this.filters = next;\n  }\n\n  currentGlobalFilterValue(): string {\n    return this.globalFilter || this.globalFilterCtrl.value || '';\n  }\n\n  operatorControlName(field: string): string {\n    return `${field}__operator`;\n  }\n\n  valueControlName(field: string): string {\n    return `${field}__value`;\n  }\n\n  getFilterControl(field: string): AbstractControl | null {\n    return this.filterForm.get(this.valueControlName(field));\n  }\n\n  applyRowFilter(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    const operator = this.rowFilterOperator(col);\n    const value = this.filterForm.get(this.valueControlName(field))?.value;\n    this.upsertColumnFilter(field, operator, value);\n  }\n\n  private setFilterFormField(field: string, operator: NgbFilterOperator, value: unknown): void {\n    this.syncingFilterForm = true;\n    this.filterForm.get(this.operatorControlName(field))?.setValue(operator, { emitEvent: false });\n    this.filterForm.get(this.valueControlName(field))?.setValue(value, { emitEvent: false });\n    this.syncingFilterForm = false;\n  }\n\n  private syncFilterFormFromState(): void {\n    this.resolvedColumns.filter((col) => col.filterable).forEach((col) => {\n      const field = col.field as string;\n      const descriptor = this.getColumnFilter(col.field as string);\n      const currentOperator = this.filterForm.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n      const preservedOperator = currentOperator || this.defaultFilterOperator(col);\n      this.setFilterFormField(\n        field,\n        descriptor?.operator ?? preservedOperator,\n        descriptor?.value ?? ''\n      );\n    });\n  }\n\n  private static readonly MENU_FILTER_CONDITION_COUNT = 2;\n\n  private defaultMenuOperator(col: ColumnDef<T>): NgbFilterOperator {\n    return this.defaultFilterOperator(col);\n  }\n\n  private defaultMenuCondition(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n    return {\n      operator: this.defaultMenuOperator(col),\n      value: '',\n    };\n  }\n\n  private defaultMenuDraftPair(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n    return [this.defaultMenuCondition(col), this.defaultMenuCondition(col)];\n  }\n\n  private normalizeMenuDraftConditions(\n    col: ColumnDef<T>,\n    conditions: NgbMenuFilterConditionDraft[]\n  ): NgbMenuFilterConditionDraft[] {\n    const count = Datagrid.MENU_FILTER_CONDITION_COUNT;\n    if (!conditions.length) return this.defaultMenuDraftPair(col);\n    const normalized = conditions.slice(0, count).map((item) => ({ ...item }));\n    while (normalized.length < count) {\n      normalized.push(this.defaultMenuCondition(col));\n    }\n    return normalized;\n  }\n\n  private menuConditionsFromFieldFilter(field: string, col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n    const found = this.findFieldFilter(field);\n    if (!found) return this.defaultMenuDraftPair(col);\n    if (!ngbIsCompositeFilter(found)) {\n      return this.normalizeMenuDraftConditions(col, [\n        { operator: found.operator, value: found.value ?? '' },\n      ]);\n    }\n    const direct = found.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n    if (\n      (found.logic === 'and' || found.logic === 'or') &&\n      direct.length &&\n      direct.every((item) => item.field === field)\n    ) {\n      this.menuDraftJoinLogic[field] = found.logic;\n      return this.normalizeMenuDraftConditions(\n        col,\n        direct.map((item) => ({ operator: item.operator, value: item.value ?? '' }))\n      );\n    }\n    return this.defaultMenuDraftPair(col);\n  }\n\n  ensureMenuJoinLogic(col: ColumnDef<T>): 'and' | 'or' {\n    const field = col.field as string;\n    if (!this.menuDraftJoinLogic[field]) {\n      this.menuDraftJoinLogic[field] = 'and';\n    }\n    return this.menuDraftJoinLogic[field];\n  }\n\n  setMenuJoinLogic(col: ColumnDef<T>, logic: 'and' | 'or'): void {\n    this.menuDraftJoinLogic[col.field as string] = logic;\n    this.cdr.markForCheck();\n  }\n\n  menuFilterConditionIsValid(col: ColumnDef<T>, draft: NgbMenuFilterConditionDraft): boolean {\n    if (!this.operatorRequiresValue(draft.operator)) return true;\n    const value = draft.value;\n    return value !== null && value !== undefined && value !== '';\n  }\n\n  canApplyMenuFilter(col: ColumnDef<T>): boolean {\n    return this.ensureMenuDraftConditions(col).some((draft) => this.menuFilterConditionIsValid(col, draft));\n  }\n\n  canClearMenuFilter(col: ColumnDef<T>): boolean {\n    return this.hasActiveColumnFilter(col.field as string);\n  }\n\n  ensureMenuDraftConditions(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n    const field = col.field as string;\n    const existing = this.menuDrafts[field];\n    if (!existing?.length || existing.length !== Datagrid.MENU_FILTER_CONDITION_COUNT) {\n      this.menuDrafts[field] = this.menuConditionsFromFieldFilter(field, col);\n    }\n    return this.menuDrafts[field];\n  }\n\n  /** First menu condition (header filter menus). */\n  ensureMenuDraft(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n    return this.ensureMenuDraftConditions(col)[0];\n  }\n\n  setMenuDraftOperator(col: ColumnDef<T>, operator: NgbFilterOperator, index = 0): void {\n    this.ensureMenuDraftConditions(col)[index].operator = operator;\n    this.openMenuOperatorField = null;\n  }\n\n  menuOperatorKey(field: string, index = 0): string {\n    return `${field}:${index}`;\n  }\n\n  isMenuOperatorOpen(field: string, index = 0): boolean {\n    return this.openMenuOperatorField === this.menuOperatorKey(field, index);\n  }\n\n  toggleMenuOperator(field: string, index = 0): void {\n    const key = this.menuOperatorKey(field, index);\n    this.openMenuOperatorField = this.openMenuOperatorField === key ? null : key;\n  }\n\n  get openFilterMenuColumn(): ColumnDef<T> | null {\n    if (!this.openFilterMenuField) return null;\n    return this.resolvedColumns.find((item) => item.field === this.openFilterMenuField) ?? null;\n  }\n\n  private closeFilterMenu(): void {\n    this.openFilterMenuField = null;\n    this.openFilterMenuAnchor = null;\n    this.openMenuOperatorField = null;\n  }\n\n  private resolveFilterMenuAnchor(anchor?: HTMLElement | null): HTMLElement | null {\n    if (anchor instanceof HTMLElement) return anchor;\n    const native = (anchor as { nativeElement?: unknown } | null)?.nativeElement;\n    return native instanceof HTMLElement ? native : null;\n  }\n\n  toggleFilterMenu(field: string, anchor?: HTMLElement | null): void {\n    this.openFilterMenuField = this.openFilterMenuField === field ? null : field;\n    if (this.openFilterMenuField !== field) {\n      this.openMenuOperatorField = null;\n      this.openFilterMenuAnchor = null;\n    } else {\n      this.openFilterMenuAnchor = this.resolveFilterMenuAnchor(anchor);\n    }\n    const col = this.resolvedColumns.find((item) => item.field === field);\n    if (col && this.openFilterMenuField === field) {\n      if (this.isMultiCheckboxMode(col)) {\n        this.ensureMultiCheckboxDraft(col);\n      } else {\n        if (!this.hasActiveColumnFilter(field)) {\n          delete this.menuDrafts[field];\n          delete this.menuDraftJoinLogic[field];\n        }\n        this.ensureMenuDraftConditions(col);\n      }\n    }\n    this.cdr.markForCheck();\n  }\n\n  applyMenuFilter(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    const conditions = this.ensureMenuDraftConditions(col)\n      .map((draft) => ({ ...draft }))\n      .filter((draft) => {\n        if (!this.operatorRequiresValue(draft.operator)) return true;\n        const normalized = draft.value === undefined ? null : draft.value;\n        return normalized !== null && normalized !== '';\n      });\n\n    const next = this.cloneComposite(this.filter ?? this.localFilter);\n    const filters = this.withoutFieldFilters(next.filters, field);\n\n    if (!conditions.length) {\n      this.commitFilter({ ...next, filters });\n    } else if (conditions.length === 1) {\n      const draft = conditions[0];\n      if (this.operatorRequiresValue(draft.operator)) {\n        filters.push({ field, operator: draft.operator, value: draft.value, ignoreCase: true });\n      } else {\n        filters.push({ field, operator: draft.operator, ignoreCase: true });\n      }\n      this.commitFilter({ ...next, filters });\n    } else {\n      const joinLogic = this.ensureMenuJoinLogic(col);\n      filters.push({\n        logic: joinLogic,\n        filters: conditions.map((draft) =>\n          this.operatorRequiresValue(draft.operator)\n            ? { field, operator: draft.operator, value: draft.value, ignoreCase: true }\n            : { field, operator: draft.operator, ignoreCase: true }\n        ),\n      });\n      this.commitFilter({ ...next, filters });\n    }\n\n    this.closeFilterMenu();\n  }\n\n  clearMenuFilter(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    delete this.menuDrafts[field];\n    delete this.menuDraftJoinLogic[field];\n    this.clearColumnFilter(col.field as string);\n    this.closeFilterMenu();\n  }\n\n  multiCheckboxOptions(col: ColumnDef<T>): MultiCheckboxOption[] {\n    const field = col.field as string;\n    const cached = this.multiCheckboxOptionsCache.get(field);\n    if (cached) return cached;\n\n    const seen = new Map<string, { label: string; value: unknown }>();\n    for (const row of this.data ?? []) {\n      const value = this.readFieldValue(row, col.field);\n      const key = this.multiCheckboxValueKey(value);\n      if (!seen.has(key)) {\n        seen.set(key, { label: this.multiCheckboxValueLabel(col, value), value });\n      }\n    }\n    const options = Array.from(seen.values()).sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base', numeric: true }));\n    this.multiCheckboxOptionsCache.set(field, options);\n    return options;\n  }\n\n  multiCheckboxVisibleOptions(col: ColumnDef<T>): MultiCheckboxOption[] {\n    const field = col.field as string;\n    const query = this.norm(this.multiCheckboxSearch[field]);\n    const cacheKey = JSON.stringify([field, query]);\n    const cached = this.multiCheckboxVisibleOptionsCache.get(cacheKey);\n    if (cached) return cached;\n\n    const options = this.multiCheckboxOptions(col);\n    if (!query) {\n      this.multiCheckboxVisibleOptionsCache.set(cacheKey, options);\n      return options;\n    }\n\n    const visible = options.filter((option) => this.norm(option.label).includes(query));\n    this.multiCheckboxVisibleOptionsCache.set(cacheKey, visible);\n    return visible;\n  }\n\n  multiCheckboxValueLabel(col: ColumnDef<T>, value: unknown): string {\n    if (this.getColumnFilterType(col) === 'boolean') return this.booleanFilterOptionLabel(!!value);\n    if (value === null || value === undefined || value === '') return '(Blank)';\n    const option = col.options?.find((item) => item.value === value);\n    return option?.label ?? String(value);\n  }\n\n  private multiCheckboxValueKey(value: unknown): string {\n    return JSON.stringify(value);\n  }\n\n  ensureMultiCheckboxDraft(col: ColumnDef<T>): unknown[] {\n    const field = col.field as string;\n    if (!this.multiCheckboxDrafts[field]) {\n      const active = this.multiCheckboxSelectedValues(col);\n      this.multiCheckboxDrafts[field] = active ?? this.multiCheckboxOptions(col).map((option) => option.value);\n    }\n    return this.multiCheckboxDrafts[field];\n  }\n\n  multiCheckboxSelectedCount(col: ColumnDef<T>): number {\n    return this.ensureMultiCheckboxDraft(col).length;\n  }\n\n  multiCheckboxTotalCount(col: ColumnDef<T>): number {\n    return this.multiCheckboxOptions(col).length;\n  }\n\n  isMultiCheckboxChecked(col: ColumnDef<T>, value: unknown): boolean {\n    const key = this.multiCheckboxValueKey(value);\n    return this.ensureMultiCheckboxDraft(col).some((item) => this.multiCheckboxValueKey(item) === key);\n  }\n\n  toggleMultiCheckboxValue(col: ColumnDef<T>, value: unknown): void {\n    const field = col.field as string;\n    const selected = this.ensureMultiCheckboxDraft(col);\n    const key = this.multiCheckboxValueKey(value);\n    this.multiCheckboxDrafts[field] = selected.some((item) => this.multiCheckboxValueKey(item) === key)\n      ? selected.filter((item) => this.multiCheckboxValueKey(item) !== key)\n      : [...selected, value];\n  }\n\n  isMultiCheckboxAllSelected(col: ColumnDef<T>): boolean {\n    return this.multiCheckboxSelectedCount(col) === this.multiCheckboxTotalCount(col);\n  }\n\n  toggleMultiCheckboxAll(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    this.multiCheckboxDrafts[field] = this.isMultiCheckboxAllSelected(col)\n      ? []\n      : this.multiCheckboxOptions(col).map((option) => option.value);\n  }\n\n  multiCheckboxToggleLabel(col: ColumnDef<T>): string {\n    return this.isMultiCheckboxAllSelected(col) ? 'Deselect All' : 'Select All';\n  }\n\n  isMultiCheckboxPartiallySelected(col: ColumnDef<T>): boolean {\n    const selected = this.multiCheckboxSelectedCount(col);\n    const total = this.multiCheckboxTotalCount(col);\n    return selected > 0 && selected < total;\n  }\n\n  private multiCheckboxSelectedValues(col: ColumnDef<T>): unknown[] | null {\n    const filter = this.findFieldFilter(col.field as string);\n    if (!filter || !ngbIsCompositeFilter(filter)) return null;\n    const directFilters = filter.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n    if (\n      filter.logic === 'and' &&\n      directFilters.length === 2 &&\n      directFilters.every((item) => item.field === col.field) &&\n      directFilters.some((item) => item.operator === 'isnull') &&\n      directFilters.some((item) => item.operator === 'isnotnull')\n    ) {\n      return [];\n    }\n    if (filter.logic !== 'or' || directFilters.some((item) => item.field !== col.field || item.operator !== 'eq')) {\n      return null;\n    }\n    return directFilters.map((item) => item.value);\n  }\n\n  multiCheckboxFilterApplyLabel(): string {\n    return this.multiCheckboxFilterOptions.applyLabel ?? this.labelTemplate('multiCheckboxApply');\n  }\n\n  multiCheckboxFilterCancelLabel(): string {\n    return this.multiCheckboxFilterOptions.cancelLabel ?? this.labelTemplate('multiCheckboxCancel');\n  }\n\n  multiCheckboxFilterShowCancel(): boolean {\n    return this.multiCheckboxFilterOptions.showCancel !== false;\n  }\n\n  cancelMultiCheckboxFilter(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    delete this.multiCheckboxDrafts[field];\n    delete this.multiCheckboxSearch[field];\n    this.closeFilterMenu();\n    this.cdr.markForCheck();\n  }\n\n  applyMultiCheckboxFilter(col: ColumnDef<T>): void {\n    const field = col.field as string;\n    const selectedValues = this.ensureMultiCheckboxDraft(col);\n    const options = this.multiCheckboxOptions(col);\n    const next = this.cloneComposite(this.filter ?? this.localFilter);\n    const filters = this.withoutFieldFilters(next.filters, field);\n\n    if (selectedValues.length === options.length) {\n      this.commitFilter({ ...next, filters });\n    } else if (selectedValues.length === 0) {\n      filters.push({\n        logic: 'and',\n        filters: [\n          { field, operator: 'isnull' },\n          { field, operator: 'isnotnull' },\n        ],\n      });\n      this.commitFilter({ ...next, filters });\n    } else {\n      filters.push({\n        logic: 'or',\n        filters: selectedValues.map((value) => ({ field, operator: 'eq' as const, value, ignoreCase: true })),\n      });\n      this.commitFilter({ ...next, filters });\n    }\n\n    this.closeFilterMenu();\n  }\n\n  filterContext(col: ColumnDef<T>, source: 'row' | 'menu'): FilterCtx<T> {\n    const field = col.field as string;\n    const descriptor = source === 'menu'\n      ? (() => {\n          const draft = this.ensureMenuDraft(col);\n          return { field, operator: draft.operator, value: draft.value };\n        })()\n      : this.getColumnFilter(field);\n    const currentFilter = () => this.cloneComposite(this.effectiveFilterDescriptor());\n    const commitFromTemplate = (filter: NgbCompositeFilterDescriptor) => {\n      this.commitFilter(this.cloneComposite(filter));\n      if (source === 'menu') this.closeFilterMenu();\n    };\n    return {\n      $implicit: this.getFilterControl(field),\n      control: this.getFilterControl(field),\n      col,\n      field,\n      descriptor,\n      filter: currentFilter(),\n      operators: this.getAllowedOperators(col),\n      setOperator: (operator) => {\n        if (source === 'menu') this.ensureMenuDraft(col).operator = operator;\n        else {\n          this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n          this.applyRowFilter(col);\n        }\n      },\n      setValue: (value) => {\n        if (source === 'menu') this.ensureMenuDraft(col).value = value;\n        else {\n          this.filterForm.get(this.valueControlName(field))?.setValue(value);\n          this.applyRowFilter(col);\n        }\n      },\n      clear: () => source === 'menu' ? this.clearMenuFilter(col) : this.clearColumnFilter(field),\n      filterChange: commitFromTemplate,\n      setFieldFilter: (operator, value) => {\n        commitFromTemplate(\n          ngbSetFieldFilter(currentFilter(), field, operator, value, {\n            requiresValue: (op) => this.operatorRequiresValue(op)\n          })\n        );\n      }\n    };\n  }\n\n  get sorted(): T[] {\n    if (this.sortedDirty) {\n      if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n        this.sort = { active: null, direction: '' };\n      }\n      const base = (!this.enableSorting || !this.sort.active || !this.sort.direction)\n        ? [...this.filtered]\n        : (() => {\n          const copy = [...this.filtered];\n          const { active, direction } = this.sort;\n          copy.sort((a, b) => {\n            const av = this.readFieldValue(a, active);\n            const bv = this.readFieldValue(b, active);\n            const cmp = this.compareSortValues(av, bv);\n            return direction === 'asc' ? cmp : -cmp;\n          });\n          return copy;\n        })();\n      this.sortedCache = this.withStickyRowsFirst(base);\n      this.sortedDirty = false;\n    }\n    return this.sortedCache;\n  }\n  // pagination (filled in next step)\n\n  /** True when `[data]` is a server page and `[total]` is the full result count. */\n  isServerBound(): boolean {\n    const total = this.total;\n    return total != null && Number.isFinite(total) && total >= 0 && total > this.sorted.length;\n  }\n\n  /** Row count for pager, range labels, and `aria-rowcount`. */\n  recordTotal(): number {\n    const total = this.total;\n    if (total != null && Number.isFinite(total) && total >= 0) {\n      return total;\n    }\n    if (this.shouldUseLocalDataOperations()) {\n      return this.localDataOperationsResult(false).total;\n    }\n    return this.sorted.length;\n  }\n\n  /** Collection size passed to the built-in pager. */\n  pagerCollectionSize(): number {\n    return this.recordTotal();\n  }\n\n  get paged(): T[] {\n    if (this.pagedDirty) {\n      if (this.isGroupingActive()) {\n        this.ensureRenderRows();\n        this.pagedDirty = false;\n        return this.pagedCache;\n      }\n      if (this.shouldUseLocalDataOperations()) {\n        this.pagedCache = this.localDataOperationsResult(this.paginationActive).data;\n        this.pagedDirty = false;\n        return this.pagedCache;\n      }\n      if (!this.paginationActive || this.isServerBound()) {\n        this.pagedCache = this.sorted;\n      } else {\n        const start = (this.page - 1) * this.pageSize;\n        this.pagedCache = this.sorted.slice(start, start + this.pageSize);\n      }\n      this.pagedDirty = false;\n    }\n    return this.pagedCache;\n  }\n\n  get renderRows(): NgbDatagridRenderRow<T>[] {\n    this.ensureRenderRows();\n    return this.renderRowsCache;\n  }\n\n  hasRenderableRows(): boolean {\n    return this.renderRows.length > 0;\n  }\n\n  private shouldUseLocalDataOperations(): boolean {\n    if (!this.dataOperations) return false;\n    const total = this.total;\n    return !(total != null && Number.isFinite(total) && total >= 0 && total > (this.data?.length ?? 0));\n  }\n\n  private localDataOperationsResult(page: boolean) {\n    const options = typeof this.dataOperations === 'object' ? this.dataOperations : {};\n    return ngbApplyDataGridOperations(this.data, {\n      ...options,\n      state: this.dataState(),\n      groupedData: options.groupedData ?? this.groupedData,\n      columns: options.columns ?? this.resolvedColumns,\n      globalFilterFields: options.globalFilterFields ?? this.resolvedColumns.map((column) => column.field as string),\n      page,\n    });\n  }\n\n  private usingProvidedGroupedData(): boolean {\n    return (this.groupedData?.length ?? 0) > 0;\n  }\n\n  private groupingResults(rows: T[]): NgbDataGridGroupResult<T>[] {\n    if (this.usingProvidedGroupedData()) {\n      return this.cloneGroupResults(this.groupedData);\n    }\n    if (this.shouldUseLocalDataOperations()) {\n      return this.localDataOperationsResult(false).groupedData ?? [];\n    }\n    return ngbGroupData(rows, this.group);\n  }\n\n  private ensureRenderRows(): void {\n    if (!this.renderRowsDirty) return;\n\n    if (!this.isGroupingActive()) {\n      const leafRows = this.shouldUseLocalDataOperations()\n        ? this.localDataOperationsResult(this.paginationActive).data\n        : (!this.paginationActive || this.isServerBound())\n          ? this.sorted\n          : this.sorted.slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize + this.pageSize);\n      this.pagedCache = leafRows;\n      this.renderRowsCache = leafRows.map((row, pagedIndex) => ({\n        kind: 'data',\n        key: this.trackRow(pagedIndex, row),\n        row,\n        pagedIndex,\n        level: 0,\n      }));\n      this.groupRenderRowLookup.clear();\n      this.groupFooterRenderRowLookup.clear();\n      this.renderRowsDirty = false;\n      this.pagedDirty = false;\n      return;\n    }\n\n    const rows = this.groupingSourceRows();\n    const groups = this.groupingResults(rows);\n    const groupLeafCount = rows.length;\n    const shouldSliceGroups = this.paginationActive && !this.isServerBound() && !this.usingProvidedGroupedData();\n    const pageStart = shouldSliceGroups ? Math.max(0, (this.page - 1) * this.pageSize) : 0;\n    const pageEnd = shouldSliceGroups ? pageStart + this.pageSize : groupLeafCount;\n    let absoluteLeafIndex = 0;\n    let pagedIndex = 0;\n    const leafRows: T[] = [];\n    const buildRows = (items: NgbDataGridGroupResult<T>[], level: number): NgbDatagridRenderRow<T>[] => {\n      const rowsForLevel: NgbDatagridRenderRow<T>[] = [];\n\n      for (const group of items) {\n        const groupStart = absoluteLeafIndex;\n        const collapsed = this.isGroupCollapsed(group, level, groupStart);\n        const childRows: NgbDatagridRenderRow<T>[] = [];\n\n        if (!collapsed) {\n          for (const item of group.items) {\n            if (this.isGroupResult(item)) {\n              childRows.push(...buildRows([item], level + 1));\n              continue;\n            }\n\n            const inPage = absoluteLeafIndex >= pageStart && absoluteLeafIndex < pageEnd;\n            if (inPage) {\n              leafRows.push(item);\n              childRows.push({\n                kind: 'data',\n                key: this.trackRow(pagedIndex, item),\n                row: item,\n                pagedIndex,\n                level: level + 1,\n              });\n              pagedIndex += 1;\n            }\n            absoluteLeafIndex += 1;\n          }\n        } else {\n          absoluteLeafIndex += group.count;\n        }\n\n        const groupEnd = groupStart + group.count;\n        if (groupEnd > pageStart && groupStart < pageEnd) {\n          rowsForLevel.push({\n            kind: 'group',\n            key: this.groupKeyFor(group, level, groupStart),\n            group,\n            collapsed,\n            level,\n            startIndex: groupStart,\n          });\n          if (!collapsed) {\n            rowsForLevel.push(...childRows);\n            if (this.showGroupFooters()) {\n              rowsForLevel.push({\n                kind: 'group-footer',\n                key: `${this.groupKeyFor(group, level, groupStart)}:footer`,\n                group,\n                level,\n                startIndex: groupStart,\n              });\n            }\n          }\n        }\n      }\n\n      return rowsForLevel;\n    };\n\n    const renderedRows = buildRows(groups, 0);\n    this.pagedCache = leafRows;\n    this.renderRowsCache = renderedRows;\n    this.rebuildGroupedRowLookups(renderedRows);\n    this.renderRowsDirty = false;\n    this.pagedDirty = false;\n  }\n\n  private rebuildGroupedRowLookups(rows: NgbDatagridRenderRow<T>[]): void {\n    this.groupRenderRowLookup.clear();\n    this.groupFooterRenderRowLookup.clear();\n    for (const row of rows) {\n      if (row.kind === 'group') {\n        this.groupRenderRowLookup.set(row.key, row);\n      } else if (row.kind === 'group-footer') {\n        this.groupFooterRenderRowLookup.set(row.key, row);\n      }\n    }\n  }\n\n  private groupingSourceRows(): T[] {\n    if (this.shouldUseLocalDataOperations()) {\n      return this.localDataOperationsResult(false).data;\n    }\n    return this.sorted;\n  }\n\n  // getters for template conditions / display\n  get anyFilterable(): boolean {\n    if (this.resolvedFilterMode() !== 'row') return false;\n    return this.isFilteringEnabled() && !!this.visibleColumns?.some(c => c.filterable && this.isRowFilterVisible(c));\n  }\n\n  get startIndex(): number {\n    const total = this.recordTotal();\n    return total ? (this.page - 1) * this.pageSize + 1 : 0;\n  }\n  get endIndex(): number {\n    return Math.min(this.page * this.pageSize, this.recordTotal());\n  }\n\n  get paginationActive(): boolean {\n    return !!ngbResolvePageableSettings(this.pageable, {\n      enablePagination: this.enablePagination,\n      pageSizeOptions: this.pageSizeOptions,\n    });\n  }\n\n  resolvedPageable(): NgbDatagridPageableSettings {\n    return (\n      ngbResolvePageableSettings(this.pageable, {\n        enablePagination: this.enablePagination,\n        pageSizeOptions: this.pageSizeOptions,\n      }) ?? NGB_DATAGRID_DEFAULT_PAGEABLE\n    );\n  }\n\n  pagerShowsAt(placement: NgbDatagridPagerPosition): boolean {\n    if (!this.paginationActive) return false;\n    const position = this.resolvedPageable().position ?? 'bottom';\n    return position === placement || position === 'both';\n  }\n\n  showPagerInfo(): boolean {\n    return this.resolvedPageable().info !== false;\n  }\n\n  showPagerPageSizes(): boolean {\n    const pageSizes = this.resolvedPageable().pageSizes;\n    return Array.isArray(pageSizes) && pageSizes.length > 0;\n  }\n\n  pagerButtonCount(): number {\n    return this.resolvedPageable().buttonCount ?? 10;\n  }\n\n  pagerPreviousNext(): boolean {\n    return this.resolvedPageable().previousNext !== false;\n  }\n\n  pagerType(): NgbDatagridPagerType {\n    return this.resolvedPageable().type ?? 'numeric';\n  }\n\n  hasCustomPagerTemplate(): boolean {\n    return !!this.pagerTpl;\n  }\n\n  pagerResponsive(): boolean {\n    if (this.hasCustomPagerTemplate()) return false;\n    return this.resolvedPageable().responsive !== false;\n  }\n\n  pagerContext(): PagerCtx<Datagrid<T>> & { $implicit: PagerCtx<Datagrid<T>> } {\n    const total = this.recordTotal();\n    const pageCount = Math.max(1, Math.ceil(total / Math.max(1, this.pageSize)));\n    const ctx: PagerCtx<Datagrid<T>> = {\n      grid: this,\n      page: this.page,\n      pageSize: this.pageSize,\n      total,\n      pageCount,\n    };\n    return { ...ctx, $implicit: ctx };\n  }\n\n  dataState(): NgbDataGridState {\n    const sort = this.sort.active && this.sort.direction\n      ? [{ field: this.sort.active, direction: this.sort.direction }]\n      : [];\n    return {\n      page: this.page,\n      pageIndex: Math.max(0, this.page - 1),\n      skip: Math.max(0, (this.page - 1) * this.pageSize),\n      pageSize: this.pageSize,\n      sort,\n      group: [...this.group],\n      filter: this.cloneComposite(this.effectiveFilterDescriptor()),\n      globalFilter: this.currentGlobalFilterValue(),\n    };\n  }\n\n  private emitDataStateChange(): void {\n    this.dataStateChange.emit(this.dataState());\n  }\n\n  private syncFromDataState(state: NgbDataGridState | null | undefined): void {\n    if (!state) return;\n\n    const pageSize = Number(state.pageSize);\n    if (Number.isFinite(pageSize) && pageSize > 0) {\n      this.pageSize = Math.max(1, Math.trunc(pageSize));\n    }\n\n    const page = Number(state.page);\n    const pageIndex = Number(state.pageIndex);\n    const skip = Number(state.skip);\n    if (Number.isFinite(page) && page > 0) {\n      this.page = Math.max(1, Math.trunc(page));\n    } else if (Number.isFinite(pageIndex) && pageIndex >= 0) {\n      this.page = Math.max(1, Math.trunc(pageIndex) + 1);\n    } else if (Number.isFinite(skip) && skip >= 0) {\n      this.page = Math.max(1, Math.floor(skip / Math.max(1, this.pageSize)) + 1);\n    }\n\n    const firstSort = state.sort?.[0];\n    this.sort = firstSort?.field && firstSort.direction\n      ? { active: firstSort.field as Extract<keyof T, string>, direction: firstSort.direction }\n      : { active: null, direction: '' };\n\n    if (state.group !== undefined) {\n      this._group = this.normalizeGroupDescriptors(state.group);\n      this.syncCollapsedGroups();\n    }\n\n    if (state.filter !== undefined) {\n      this.localFilter = this.cloneComposite(state.filter ?? { logic: 'and', filters: [] });\n      this.syncLegacyFilters(this.localFilter);\n    }\n\n    if (state.globalFilter !== undefined) {\n      this.globalFilter = state.globalFilter ?? '';\n      this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n    }\n\n    this.invalidateFilteredCaches();\n    this.syncFilterFormFromState();\n  }\n\n  /** Page-size options for the footer dropdown (includes [pageSize] when not listed in pageSizes). */\n  get resolvedPageSizeOptions(): number[] {\n    return ngbResolvePagerPageSizeOptions(this.resolvedPageable().pageSizes, this.pageSize);\n  }\n\n  get shouldEnableScroll(): boolean {\n    return this.scrollable;\n  }\n\n  onBodyHorizontalScroll(): void {\n    const left = this.bodyScroller?.nativeElement.scrollLeft ?? 0;\n    if (this.headerScroller?.nativeElement) {\n      this.headerScroller.nativeElement.scrollLeft = left;\n    }\n    this.scheduleStickyGroupSync();\n  }\n\n  @HostListener('window:resize')\n  onWindowResize(): void {\n    this.scheduleStickyGroupSync();\n  }\n\n  private scheduleStickyGroupSync(): void {\n    if (!this.showStickyGroupHeaders() && !this.showStickyGroupFooters()) {\n      if (\n        this.stickyGroupHeaderRows.length ||\n        this.stickyGroupFooterRows.length ||\n        this.stickyGroupOverlayColumnWidths.length ||\n        this.stickyGroupHeaderTranslateY !== 0 ||\n        this.stickyGroupFooterTranslateY !== 0\n      ) {\n        this.stickyGroupHeaderRows = [];\n        this.stickyGroupFooterRows = [];\n        this.stickyGroupOverlayColumnWidths = [];\n        this.stickyGroupHeaderTranslateY = 0;\n        this.stickyGroupFooterTranslateY = 0;\n        this.cdr.markForCheck();\n      }\n      return;\n    }\n\n    if (this.stickyGroupSyncQueued) return;\n    this.stickyGroupSyncQueued = true;\n\n    Promise.resolve().then(() => {\n      const raf = typeof requestAnimationFrame === 'function'\n        ? requestAnimationFrame\n        : (callback: FrameRequestCallback) => setTimeout(() => callback(Date.now()), 16);\n\n      raf(() => {\n        this.stickyGroupSyncQueued = false;\n        this.syncStickyGroupOverlays();\n      });\n    });\n  }\n\n  private syncStickyGroupOverlays(): void {\n    this.ensureRenderRows();\n\n    const scroller = this.bodyScroller?.nativeElement;\n    if (!scroller || !this.isGroupingActive()) {\n      this.stickyGroupHeaderRows = [];\n      this.stickyGroupFooterRows = [];\n      this.stickyGroupOverlayColumnWidths = [];\n      this.stickyGroupHeaderTranslateY = 0;\n      this.stickyGroupFooterTranslateY = 0;\n      this.cdr.markForCheck();\n      return;\n    }\n\n    const mainTable = scroller.querySelector<HTMLTableElement>('table.grid-body--main');\n    this.stickyGroupOverlayColumnWidths = Array.from(mainTable?.querySelectorAll<HTMLTableColElement>('colgroup col') ?? []).map((col) => {\n      const explicit = parseFloat(col.style.width || '');\n      if (Number.isFinite(explicit) && explicit > 0) return explicit;\n      const width = col.getBoundingClientRect().width;\n      return Number.isFinite(width) && width > 0 ? width : 0;\n    });\n\n    const scrollerRect = scroller.getBoundingClientRect();\n    const headerMeasurements = this.collectStickyGroupMeasurements(\n      scroller.querySelectorAll<HTMLTableRowElement>('table.grid-body--main tbody > tr.grid-group-row[data-group-key]'),\n      this.groupRenderRowLookup,\n    );\n    const footerMeasurements = this.collectStickyGroupMeasurements(\n      scroller.querySelectorAll<HTMLTableRowElement>('table.grid-body--main tbody > tr.grid-group-footer-row[data-group-key]'),\n      this.groupFooterRenderRowLookup,\n    );\n\n    const stickyHeaders = this.showStickyGroupHeaders()\n      ? this.resolveStickyHeaderRows(headerMeasurements, scrollerRect.top)\n      : [];\n    const stickyFooters = this.showStickyGroupFooters()\n      ? this.resolveStickyFooterRows(stickyHeaders, footerMeasurements, scrollerRect.bottom)\n      : [];\n    const stickyFooterMeasurements = stickyFooters\n      .map((row) => footerMeasurements.find((measurement) => measurement.key === row.key))\n      .filter(Boolean) as Array<NgbDatagridStickyGroupMeasurement<NgbDatagridGroupFooterRenderRow<T>>>;\n\n    this.stickyGroupHeaderRows = stickyHeaders;\n    this.stickyGroupFooterRows = stickyFooters;\n    this.stickyGroupHeaderTranslateY = stickyHeaders.length ? scroller.scrollTop : 0;\n    this.stickyGroupFooterTranslateY = stickyFooters.length\n      ? Math.max(0, scroller.scrollTop + scroller.clientHeight - this.measurementStackHeight(stickyFooterMeasurements))\n      : 0;\n    this.cdr.markForCheck();\n  }\n\n  private collectStickyGroupMeasurements<R extends NgbDatagridGroupRenderRow<T> | NgbDatagridGroupFooterRenderRow<T>>(\n    nodes: NodeListOf<HTMLTableRowElement>,\n    lookup: Map<string, R>,\n  ): Array<NgbDatagridStickyGroupMeasurement<R>> {\n    const measurements: Array<NgbDatagridStickyGroupMeasurement<R>> = [];\n    for (const node of Array.from(nodes)) {\n      const key = node.getAttribute('data-group-key') ?? '';\n      const row = lookup.get(key);\n      if (!row) continue;\n      const rect = node.getBoundingClientRect();\n      measurements.push({\n        key: row.key,\n        level: row.level,\n        startIndex: row.startIndex,\n        endIndex: row.startIndex + row.group.count,\n        top: rect.top,\n        bottom: rect.bottom,\n        height: rect.height,\n        row,\n      });\n    }\n    return measurements;\n  }\n\n  private resolveStickyHeaderRows(\n    measurements: Array<NgbDatagridStickyGroupMeasurement<NgbDatagridGroupRenderRow<T>>>,\n    scrollerTop: number,\n  ): NgbDatagridGroupRenderRow<T>[] {\n    const active: NgbDatagridGroupRenderRow<T>[] = [];\n    let parentRange: { start: number; end: number } | null = null;\n    let threshold = scrollerTop;\n\n    for (let level = 0; level < this.group.length; level++) {\n      const matches = measurements.filter((measurement) =>\n          measurement.level === level &&\n          (!parentRange || (measurement.startIndex >= parentRange.start && measurement.startIndex < parentRange.end)) &&\n          measurement.top < threshold - 0.5,\n        );\n      const match = matches.length ? matches[matches.length - 1] : null;\n\n      if (!match) break;\n\n      active.push(match.row);\n      parentRange = { start: match.startIndex, end: match.endIndex };\n      threshold += match.height;\n    }\n\n    return active;\n  }\n\n  private resolveStickyFooterRows(\n    stickyHeaders: NgbDatagridGroupRenderRow<T>[],\n    measurements: Array<NgbDatagridStickyGroupMeasurement<NgbDatagridGroupFooterRenderRow<T>>>,\n    scrollerBottom: number,\n  ): NgbDatagridGroupFooterRenderRow<T>[] {\n    const active: NgbDatagridGroupFooterRenderRow<T>[] = [];\n\n    for (const stickyHeader of stickyHeaders) {\n      const footerKey = `${stickyHeader.key}:footer`;\n      const match = measurements.find((measurement) => measurement.key === footerKey);\n      if (!match) continue;\n      if (match.top > scrollerBottom + 0.5) {\n        active.push(match.row);\n      }\n    }\n\n    return active;\n  }\n\n  private measurementStackHeight<R>(\n    measurements: Array<NgbDatagridStickyGroupMeasurement<R>>,\n  ): number {\n    return measurements.reduce((total, measurement) => total + measurement.height, 0);\n  }\n\n  get isHeaderSticky(): boolean {\n    return this.stickyHeaderEnabled && this.shouldEnableScroll;\n  }\n\n  get isFooterSticky(): boolean {\n    return this.stickyFooterEnabled && this.shouldEnableScroll;\n  }\n\n  get detailColspan(): number {\n    const actionCols = this.showActionsColumn() ? 1 : 0;\n    const caretCol   = this.rowDetailTpl ? 1 : 0;\n    const stickyCol  = this.stickyRowsEnabled ? 1 : 0;\n    const selectionCol = this.showSelectionColumn() ? 1 : 0;\n    return this.visibleColumns.length + actionCols + caretCol + stickyCol + selectionCol;\n  }\n\n  isColumnPinned(col: ColumnDef<T>): boolean {\n    return this.columnPinnedSide(col) !== null;\n  }\n\n  columnPinnedSide(col: ColumnDef<T>): 'start' | 'end' | null {\n    if (col.locked) return this.isRtl() ? 'end' : 'start';\n    if (col.sticky === true || col.sticky === 'start') return 'start';\n    if (col.sticky === 'end') return 'end';\n    return null;\n  }\n\n  private columnOrderGroup(col: ColumnDef<T>): 'leading' | 'middle' | 'trailing' {\n    if (col.locked) return 'leading';\n    const side = this.columnPinnedSide(col);\n    if (side === 'start') return 'leading';\n    if (side === 'end') return 'trailing';\n    return 'middle';\n  }\n\n  resolvedDir(): 'ltr' | 'rtl' | null {\n    if (this.dir === 'ltr' || this.dir === 'rtl') return this.dir;\n    return null;\n  }\n\n  isRtl(): boolean {\n    const explicit = this.resolvedDir();\n    if (explicit) return explicit === 'rtl';\n    const host = this.hostEl?.nativeElement;\n    if (!host) return false;\n    const inheritedDir = host.closest('[dir]')?.getAttribute('dir') ?? host.getAttribute('dir');\n    if (inheritedDir) return inheritedDir.toLowerCase() === 'rtl';\n    return getComputedStyle(host).direction === 'rtl';\n  }\n\n  hasPinnedColumns(): boolean {\n    return this.visibleColumns.some((col) => this.isColumnPinned(col));\n  }\n\n  shouldPinLeadingUtilityColumns(): boolean {\n    return this.hasPinnedColumns();\n  }\n\n  utilityColumnWidth(kind: UtilityColumnKind): number {\n    switch (kind) {\n      case 'selection': return SELECTION_COL_WIDTH;\n      case 'detail': return DETAIL_COL_WIDTH;\n      case 'sticky-toggle': return STICKY_TOGGLE_COL_WIDTH;\n      case 'actions': return ACTION_COL_WIDTH;\n    }\n  }\n\n  resolvedEditMode(): NgbEditMode {\n    return this.editMode;\n  }\n\n  isIncellEditMode(): boolean {\n    return this.resolvedEditMode() === 'incell';\n  }\n\n  isExternalEditMode(): boolean {\n    return this.resolvedEditMode() === 'external';\n  }\n\n  isToolbarEditMode(): boolean {\n    return this.resolvedEditMode() === 'toolbar';\n  }\n\n  showEditingToolbar(): boolean {\n    return this.isToolbarEditMode() && (this.enableAdd || this.enableEdit || this.enableDelete);\n  }\n\n  showRowEditAction(): boolean {\n    return this.enableEdit && (this.resolvedEditMode() === 'inline' || this.isExternalEditMode());\n  }\n\n  showRowDeleteAction(): boolean {\n    return this.enableDelete && !this.isToolbarEditMode();\n  }\n\n  showActionsColumn(): boolean {\n    if (this.isIncellEditMode()) return false;\n    return (\n      (this.enableAdd && !this.isToolbarEditMode()) ||\n      this.showRowEditAction() ||\n      this.showRowDeleteAction()\n    );\n  }\n\n  get externalEditableColumns(): ColumnDef<T>[] {\n    const row = this.externalEditPagedIndex != null ? (this.paged[this.externalEditPagedIndex] as T) : ({} as T);\n    return this.visibleColumns.filter((col) => this.isCellEditable(col, row, this.externalEditIsNew));\n  }\n\n  isCellInEditMode(pagedIndex: number, col: ColumnDef<T>): boolean {\n    if (!this.enableEdit) return false;\n    const row = this.paged[pagedIndex] as T;\n    if (!this.isCellEditable(col, row, false)) return false;\n    if (this.isIncellEditMode()) {\n      return this.editingCell?.rowIndex === pagedIndex && this.editingCell?.field === col.field;\n    }\n    return this.editingIndex === pagedIndex;\n  }\n\n  onCellClick(ev: MouseEvent, pagedIndex: number, col: ColumnDef<T>): void {\n    this.tryStartIncellEdit(ev, pagedIndex, col);\n  }\n\n  onCellMouseDown(ev: MouseEvent, pagedIndex: number, col: ColumnDef<T>): void {\n    if (ev.button !== 0) return;\n    this.tryStartIncellEdit(ev, pagedIndex, col);\n  }\n\n  private tryStartIncellEdit(ev: MouseEvent, pagedIndex: number, col: ColumnDef<T>): void {\n    if (!this.isIncellEditMode() || !this.enableEdit) return;\n    const row = this.paged[pagedIndex] as T;\n    if (!this.isCellEditable(col, row, false)) return;\n    const target = ev.target;\n    const el = target instanceof Element\n      ? target\n      : target instanceof Node\n        ? target.parentElement\n        : null;\n    if (el?.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n    if (this.isCellInEditMode(pagedIndex, col)) return;\n    if (this.editingCell) this.commitIncellEdit(false);\n    this.startIncellEdit(pagedIndex, col.field as string);\n  }\n\n  onCellKeydown(ev: KeyboardEvent, pagedIndex: number, col: ColumnDef<T>, colIndex: number): void {\n    if (!this.isIncellEditMode() || !this.isCellInEditMode(pagedIndex, col)) return;\n    if (ev.key === 'Enter') {\n      ev.preventDefault();\n      this.commitIncellEdit(true);\n      return;\n    }\n    if (ev.key === 'Escape') {\n      ev.preventDefault();\n      this.cancelIncellEdit();\n      return;\n    }\n    if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(ev.key)) return;\n    ev.preventDefault();\n    const row = this.paged[pagedIndex] as T;\n    const editableCols = this.visibleColumns\n      .map((c, i) => ({ col: c, i }))\n      .filter(({ col: c }) => this.isCellEditable(c, row, false));\n    const currentIdx = editableCols.findIndex(({ col: c }) => c.field === col.field);\n    if (currentIdx < 0) return;\n\n    const currentColField = col.field as string;\n    const currentColIndex = currentIdx;\n\n    let nextPagedIndex = pagedIndex;\n    let nextColField = currentColField;\n\n    if (ev.key === 'ArrowLeft') {\n      nextColField = editableCols[Math.max(0, currentColIndex - 1)]?.col.field as string;\n    } else if (ev.key === 'ArrowRight') {\n      nextColField = editableCols[Math.min(editableCols.length - 1, currentColIndex + 1)]?.col.field as string;\n    } else if (ev.key === 'ArrowUp') {\n      nextPagedIndex = Math.max(0, pagedIndex - 1);\n    } else if (ev.key === 'ArrowDown') {\n      nextPagedIndex = Math.min(this.paged.length - 1, pagedIndex + 1);\n    }\n\n    if (nextPagedIndex === pagedIndex && nextColField === currentColField) return;\n\n    if (!this.commitIncellEdit(false)) return;\n    this.startIncellEdit(nextPagedIndex, nextColField);\n  }\n\n  startIncellEdit(pagedIndex: number, field: string): void {\n    this.addingNew = false;\n    this.editingIndex = pagedIndex;\n    this.editingCell = { rowIndex: pagedIndex, field };\n    const colIndex = this.visibleColumns.findIndex((col) => col.field === field);\n    if (colIndex >= 0) {\n      this.focusedCell = { rowIndex: pagedIndex, colIndex };\n    }\n    this.editForm = this.buildFormFromRow(this.toDraftValues(this.paged[pagedIndex]));\n    this.saveAttemptedEdit = false;\n    this.scheduleViewRefresh(() => this.focusInlineEditor(field));\n  }\n\n  private focusInlineEditor(preferredField?: string): void {\n    const root = this.hostEl?.nativeElement;\n    const body = root?.querySelector('.grid-body') as HTMLElement | null;\n    if (!body) return;\n    if (preferredField) {\n      const control = body.querySelector<HTMLElement>(`td.grid-cell--editing [formcontrolname=\"${CSS.escape(preferredField)}\"]`);\n      if (control) {\n        control.focus?.();\n        return;\n      }\n    }\n    const first = body.querySelector<HTMLElement>('td.grid-cell--editing input, td.grid-cell--editing select, td.grid-cell--editing textarea');\n    first?.focus?.();\n  }\n\n  commitIncellEdit(close = true): boolean {\n    if (!this.editingCell || this.editingIndex == null || !this.editForm) return true;\n    const { field } = this.editingCell;\n    const control = this.editForm.get(field);\n    control?.markAsTouched();\n    control?.updateValueAndValidity();\n    if (control?.invalid) return false;\n\n    const pagedIndex = this.editingIndex;\n    const di = this.dataIndexOf(this.paged[pagedIndex]);\n    const original = this.data[di];\n    const rowId = this.getRowId(di, original);\n    const service = this.getEditService();\n    const updated = service.assignValues(original, this.patchFieldValue(field, control?.value));\n    const next = service.update(this.data ?? [], updated, di, rowId);\n    this.data = service.saveChanges(next, di, rowId, updated);\n    this.invalidateDataCaches();\n    this.rowSave.emit({ original, updated, index: di });\n\n    if (close) {\n      this.editingCell = null;\n      this.editingIndex = null;\n      this.editForm = this.fb.group({});\n      this.saveAttemptedEdit = false;\n    }\n    this.scheduleViewRefresh();\n    return true;\n  }\n\n  cancelIncellEdit(): void {\n    if (this.editingIndex == null) return;\n    const di = this.dataIndexOf(this.paged[this.editingIndex]);\n    const rowId = this.getRowId(di, this.data[di]);\n    this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n    this.rowCancel.emit({ row: this.data[di], index: di });\n    this.editingCell = null;\n    this.editingIndex = null;\n    this.editForm = this.fb.group({});\n    this.saveAttemptedEdit = false;\n    this.scheduleViewRefresh();\n  }\n\n  getSingleSelectedPagedIndex(): number | null {\n    const selected = this.paged\n      .map((row, index) => ({ row, index }))\n      .filter(({ row, index }) => this.isRowSelected(row, index));\n    return selected.length === 1 ? selected[0].index : null;\n  }\n\n  editSelectedRow(): void {\n    const index = this.getSingleSelectedPagedIndex();\n    if (index == null) return;\n    if (this.isExternalEditMode()) {\n      this.openExternalEdit(index);\n      return;\n    }\n    this.startEdit(index);\n  }\n\n  deleteSelectedRows(): void {\n    const indices = this.paged\n      .map((row, index) => (this.isRowSelected(row, index) ? index : -1))\n      .filter((index) => index >= 0)\n      .sort((a, b) => b - a);\n    indices.forEach((index) => this.deleteRow(index));\n  }\n\n  openExternalEdit(pagedIndex: number): void {\n    this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n    this.externalDialogFocusedOnce = false;\n    this.externalEditIsNew = false;\n    this.externalEditPagedIndex = pagedIndex;\n    this.externalForm = this.buildFormFromRow(this.toDraftValues(this.paged[pagedIndex]));\n    this.saveAttemptedExternal = false;\n    this.externalEditOpen = true;\n    this.scheduleViewRefresh(() => this.focusExternalDialogFirstField());\n  }\n\n  openExternalAdd(): void {\n    this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n    this.externalDialogFocusedOnce = false;\n    this.externalEditIsNew = true;\n    this.externalEditPagedIndex = null;\n    this.externalForm = this.buildFormFromRow();\n    this.saveAttemptedExternal = false;\n    this.externalEditOpen = true;\n    const service = this.getEditService();\n    const draft = this.assignDraftValues({} as T, this.formDraftValues(this.externalForm));\n    this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n    service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n    this.scheduleViewRefresh(() => this.focusExternalDialogFirstField());\n  }\n\n  saveExternalEdit(): void {\n    if (!this.externalEditOpen) return;\n    this.saveAttemptedExternal = true;\n    this.externalForm.markAllAsTouched();\n    this.externalForm.updateValueAndValidity();\n    if (this.externalForm.invalid) return;\n\n    const service = this.getEditService();\n    if (this.externalEditIsNew) {\n      const newRow = this.assignDraftValues({} as T, this.formDraftValues(this.externalForm));\n      const rowIndex = this.data.length;\n      const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n      service.create(this.data ?? [], newRow, rowIndex, rowId);\n      service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n      this.rowAdd.emit({ newRow });\n    } else if (this.externalEditPagedIndex != null) {\n      const pagedIndex = this.externalEditPagedIndex;\n      const di = this.dataIndexOf(this.paged[pagedIndex]);\n      const original = this.data[di];\n      const rowId = this.getRowId(di, original);\n      const updated = this.assignDraftValues(original, this.formDraftValues(this.externalForm));\n      const next = service.update(this.data ?? [], updated, di, rowId);\n      this.data = service.saveChanges(next, di, rowId, updated);\n      this.invalidateDataCaches();\n      this.rowSave.emit({ original, updated, index: di });\n    }\n\n    this.closeExternalEdit();\n  }\n\n  cancelExternalEdit(): void {\n    if (!this.externalEditOpen) return;\n    if (this.externalEditIsNew && this.addDraftRowId != null) {\n      this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n    } else if (this.externalEditPagedIndex != null) {\n      const di = this.dataIndexOf(this.paged[this.externalEditPagedIndex]);\n      const rowId = this.getRowId(di, this.data[di]);\n      this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n      this.rowCancel.emit({ row: this.data[di], index: di });\n    }\n    this.closeExternalEdit();\n  }\n\n  private closeExternalEdit(): void {\n    this.externalEditOpen = false;\n    this.externalEditIsNew = false;\n    this.externalEditPagedIndex = null;\n    this.externalForm = this.fb.group({});\n    this.saveAttemptedExternal = false;\n    this.cdr.markForCheck();\n    const opener = this.externalDialogOpener;\n    this.externalDialogOpener = null;\n    this.externalDialogFocusedOnce = false;\n    opener?.focus?.();\n  }\n\n  private focusExternalDialogFirstField(): void {\n    if (!this.externalEditOpen || this.externalDialogFocusedOnce) return;\n    const root = this.hostEl?.nativeElement;\n    const dialog = root?.querySelector('.grid-external-editor__panel') as HTMLElement | null;\n    if (!dialog) return;\n    const focusable = dialog.querySelector<HTMLElement>('input, select, textarea, button:not([disabled])');\n    focusable?.focus?.();\n    this.externalDialogFocusedOnce = true;\n  }\n\n  utilityLeadingWidth(): number {\n    let width = 0;\n    if (!this.shouldPinLeadingUtilityColumns()) return width;\n    if (this.showSelectionColumn()) width += this.utilityColumnWidth('selection');\n    if (this.rowDetailTpl) width += this.utilityColumnWidth('detail');\n    if (this.stickyRowsEnabled) width += this.utilityColumnWidth('sticky-toggle');\n    return width;\n  }\n\n  columnWidth(col: ColumnDef<T>): number {\n    const field = col.field as string;\n    const override = this.columnWidthOverrides[field];\n    if (override != null && override > 0) return override;\n    return col.width ?? 0;\n  }\n\n  isColumnResizable(col: ColumnDef<T>): boolean {\n    if (!this.resizable || this.isStackedLayout() || col.locked || col.resizable === false) return false;\n    return this.columnWidth(col) > 0;\n  }\n\n  startColumnResize(event: MouseEvent, col: ColumnDef<T>): void {\n    if (!this.isColumnResizable(col)) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.resizeSession = {\n      field: col.field as string,\n      startX: event.clientX,\n      startWidth: this.columnWidth(col),\n    };\n    document.body.classList.add('ngb-datagrid-column-resizing');\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onDocumentMouseMove(event: MouseEvent): void {\n    if (!this.resizeSession) return;\n    const col = this.resolvedColumns.find((item) => item.field === this.resizeSession!.field);\n    if (!col) return;\n    const rawDelta = event.clientX - this.resizeSession.startX;\n    const delta = this.isRtl() ? -rawDelta : rawDelta;\n    const next = this.clampColumnWidth(col, this.resizeSession.startWidth + delta);\n    this.columnWidthOverrides[this.resizeSession.field] = next;\n    this.syncResizableColgroups();\n    this.cdr.markForCheck();\n  }\n\n  @HostListener('document:mouseup')\n  onDocumentMouseUp(): void {\n    if (!this.resizeSession) return;\n    this.resizeSession = null;\n    document.body.classList.remove('ngb-datagrid-column-resizing');\n    this.syncResizableColgroups();\n    this.cdr.markForCheck();\n  }\n\n  private syncResizableColgroups(): void {\n    if (!this.resizable || this.isStackedLayout()) return;\n    NgbSyncColgroupDirective.syncExplicitWidths(this.colgroupSyncId);\n  }\n\n  autoFitColumnsToGrid(): void {\n    if (this.isStackedLayout()) return;\n    const cols = this.visibleColumns.filter((col) => this.columnWidth(col) > 0);\n    if (!cols.length) return;\n\n    const available = this.gridViewportWidth() - this.nonDataColumnWidth();\n    if (available <= 0) return;\n\n    const currentWidths = cols.map((col) => this.columnWidth(col));\n    const currentTotal = currentWidths.reduce((sum, width) => sum + width, 0);\n    if (currentTotal <= 0) return;\n\n    const scaled = currentWidths.map((width) => (width / currentTotal) * available);\n    const next = scaled.map((width, index) => this.clampColumnWidth(cols[index], width));\n    let total = next.reduce((sum, width) => sum + width, 0);\n    let remainder = available - total;\n    let pass = 0;\n    while (remainder !== 0 && pass < cols.length * 4) {\n      const index = pass % cols.length;\n      const col = cols[index];\n      const step = remainder > 0 ? 1 : -1;\n      const updated = this.clampColumnWidth(col, next[index] + step);\n      if (updated !== next[index]) {\n        total += updated - next[index];\n        next[index] = updated;\n        remainder = available - total;\n      }\n      pass++;\n    }\n\n    cols.forEach((col, index) => {\n      this.columnWidthOverrides[col.field as string] = next[index];\n    });\n    this.syncResizableColgroups();\n    this.cdr.markForCheck();\n  }\n\n  private clampColumnWidth(col: ColumnDef<T>, width: number): number {\n    const min = col.minResizableWidth ?? 50;\n    const max = col.maxResizableWidth;\n    let next = Math.round(width);\n    if (next < min) next = min;\n    if (max != null && next > max) next = max;\n    return next;\n  }\n\n  private gridViewportWidth(): number {\n    const el =\n      this.bodyScroller?.nativeElement ??\n      (this.hostEl.nativeElement.querySelector('.table-wrapper') as HTMLElement | null);\n    return el?.clientWidth ?? 0;\n  }\n\n  private nonDataColumnWidth(): number {\n    return (\n      this.utilityLeadingWidth() + (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0)\n    );\n  }\n\n  private syncColumnWidthOverrides(resetFromColumns: boolean): void {\n    const next: Record<string, number> = resetFromColumns ? {} : { ...this.columnWidthOverrides };\n    for (const col of this.resolvedColumns) {\n      const field = col.field as string;\n      if (resetFromColumns || !(field in next)) {\n        if (col.width != null && col.width > 0) next[field] = col.width;\n      }\n    }\n    const fields = new Set(this.resolvedColumns.map((col) => col.field as string));\n    for (const field of Object.keys(next)) {\n      if (!fields.has(field)) delete next[field];\n    }\n    this.columnWidthOverrides = next;\n  }\n\n  get tablePixelWidth(): number | null {\n    if (this.isStackedLayout()) return null;\n    const columnWidths = this.visibleColumns.reduce((sum, col) => sum + this.columnWidth(col), 0);\n    const utilityWidths =\n      this.utilityLeadingWidth() +\n      (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0);\n    const total = columnWidths + utilityWidths;\n    return total > 0 ? total : null;\n  }\n\n  utilityStickyOffset(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n    if (!this.shouldPinLeadingUtilityColumns()) return null;\n    if (kind === 'selection') return 0;\n    if (kind === 'detail') return this.showSelectionColumn() ? this.utilityColumnWidth('selection') : 0;\n    let offset = 0;\n    if (this.showSelectionColumn()) offset += this.utilityColumnWidth('selection');\n    if (this.rowDetailTpl) offset += this.utilityColumnWidth('detail');\n    return offset;\n  }\n\n  columnStartOffset(col: ColumnDef<T>): number | null {\n    if (this.columnPinnedSide(col) !== 'start') return null;\n    const preceding = this.visibleColumns\n      .slice(0, this.visibleColumns.indexOf(col))\n      .filter((item) => this.columnPinnedSide(item) === 'start')\n      .reduce((sum, item) => sum + this.columnWidth(item), 0);\n    return this.utilityLeadingWidth() + preceding;\n  }\n\n  columnEndOffset(col: ColumnDef<T>): number | null {\n    if (this.columnPinnedSide(col) !== 'end') return null;\n    const index = this.visibleColumns.indexOf(col);\n    return this.visibleColumns\n      .slice(index + 1)\n      .filter((item) => this.columnPinnedSide(item) === 'end')\n      .reduce((sum, item) => sum + this.columnWidth(item), 0);\n  }\n\n  columnPinnedClass(col: ColumnDef<T>): string | null {\n    const side = this.columnPinnedSide(col);\n    return side ? `column-pinned-${side}${col.locked ? ' column-locked' : ' column-sticky'}` : null;\n  }\n\n  get tableClassList(): string[] {\n    if (this.tableClassListCache) return this.tableClassListCache;\n    const opts = this.tableOptions || {};\n    const cls: string[] = ['table'];\n    if (opts.stripedRows) cls.push('table-striped');\n    if (opts.stripedColumns) cls.push('table-striped-columns');\n    if (opts.hoverRows) cls.push('table-hover');\n    if (opts.bordered) cls.push('table-bordered');\n    if (opts.borderless) cls.push('table-borderless');\n    if (opts.small) cls.push('table-sm');\n    if (opts.groupDividers) cls.push('table-group-divider');\n    if (opts.align === 'middle') cls.push('align-middle');\n    if (opts.align === 'bottom') cls.push('align-bottom');\n    this.tableClassListCache = cls;\n    return cls;\n  }\n\n  get responsiveWrapperClasses(): string[] {\n    if (this.responsiveWrapperClassesCache) return this.responsiveWrapperClassesCache;\n    const r = this.tableOptions?.responsive;\n    const classes =\n      r === false\n        ? []\n        : r === true || r === undefined\n          ? ['table-responsive']\n          : [`table-responsive-${r}`];\n    this.responsiveWrapperClassesCache = classes;\n    return classes;\n  }\n\n  get densityMode(): 'comfortable' | 'compact' {\n    return this.tableOptions?.density ?? 'comfortable';\n  }\n\n  isStackedLayout(): boolean {\n    if (this.dataLayoutMode === 'stacked') return true;\n    if (this.dataLayoutMode === 'tabular') return false;\n    return !!this.tableOptions?.stacked;\n  }\n\n  isStackedCardsLayout(): boolean {\n    return this.isStackedLayout() && (this.tableOptions?.stackedLayout ?? 'list') === 'cards';\n  }\n\n  stackedGroupFor(col: ColumnDef<T>): StackedGroup {\n    return col.stackedGroup ?? 'start';\n  }\n\n  stackedColumnsInGroup(group: StackedGroup): ColumnDef<T>[] {\n    const cached = this.stackedColumnsCache.get(group);\n    if (cached) return cached;\n    const columns = this.visibleColumns.filter((col) => this.stackedGroupFor(col) === group);\n    this.stackedColumnsCache.set(group, columns);\n    return columns;\n  }\n\n  stackedCardGroups(): StackedGroup[] {\n    if (this.stackedCardGroupsCache) return this.stackedCardGroupsCache;\n    const order: StackedGroup[] = ['start', 'center', 'end'];\n    this.stackedCardGroupsCache = order.filter((group) => this.stackedColumnsInGroup(group).length > 0);\n    return this.stackedCardGroupsCache;\n  }\n\n  visibleColumnIndex(col: ColumnDef<T>): number {\n    return this.visibleColumns.findIndex((item) => item.field === col.field);\n  }\n\n  stackedCardColspan(): number {\n    return Math.max(1, this.visibleColumns.length);\n  }\n\n  clearSorting(emit = true): void {\n    this.sort = { active: null, direction: '' };\n    this.page = 1;\n    if (emit) {\n      this.sortChange.emit({ active: null, direction: '' });\n    }\n    this.cdr.markForCheck();\n  }\n\n  setColumnHidden(field: string, hidden: boolean): void {\n    const col = this.resolvedColumns.find((item) => item.field === field);\n    if (!col) return;\n    col.hidden = hidden;\n    if (!this.declarativeColumns.length) {\n      this.columns = [...this.columns];\n    }\n    this.cdr.markForCheck();\n  }\n\n  applyColumnVisibility(visibility: Record<string, boolean>): void {\n    for (const col of this.resolvedColumns) {\n      const field = col.field as string;\n      if (visibility[field] !== undefined) {\n        col.hidden = !visibility[field];\n      }\n    }\n    if (!this.declarativeColumns.length) {\n      this.columns = [...this.columns];\n    }\n    this.cdr.markForCheck();\n  }\n\n  get zebraStripesEnabled(): boolean {\n    return !!this.tableOptions?.zebraStripes;\n  }\n\n  getSelectedCount(): number {\n    return this.selectedRowIds.size;\n  }\n\n  hasSelectedRows(): boolean {\n    return this.getSelectedCount() > 0;\n  }\n\n  hasSingleSelectedRow(): boolean {\n    return this.getSelectedCount() === 1;\n  }\n\n  resolveHeaderClass(col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n    return col.headerClass ?? null;\n  }\n\n  resolveHeaderStyle(col: ColumnDef<T>): Record<string, string | number> | null {\n    return col.headerStyle ?? null;\n  }\n\n  resolveCellClass(row: T, rowIndex: number, col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n    const cellClass = col.cellClass;\n    if (typeof cellClass === 'function') return cellClass(row, rowIndex) ?? null;\n    return cellClass ?? null;\n  }\n\n  resolveCellStyle(row: T, rowIndex: number, col: ColumnDef<T>): Record<string, string | number> | null {\n    const cellStyle = col.cellStyle;\n    if (typeof cellStyle === 'function') return cellStyle(row, rowIndex) ?? null;\n    return cellStyle ?? null;\n  }\n\n  resolveRowClass(row: T, rowIndex: number): string | string[] | Record<string, boolean> | null {\n    if (typeof this.rowClass === 'function') return this.rowClass(row, rowIndex) ?? null;\n    return this.rowClass ?? null;\n  }\n\n  resolveRowStyle(row: T, rowIndex: number): Record<string, string | number> | null {\n    if (typeof this.rowStyle === 'function') return this.rowStyle(row, rowIndex) ?? null;\n    return this.rowStyle ?? null;\n  }\n\n  updateHighlightCache(): void {\n    this.highlightRowMap.clear();\n    (this.highlightedIndex || []).forEach((item) => {\n      const rowKey = item.row;\n      if (!this.highlightRowMap.has(rowKey)) this.highlightRowMap.set(rowKey, []);\n      this.highlightRowMap.get(rowKey)?.push(item);\n    });\n  }\n\n  headerText(col: ColumnDef<T>): string {\n    return (col.header ?? col.field ?? '').toString();\n  }\n\n  headerTitle(col: ColumnDef<T>): string {\n    const t = col.title;\n    return (t ?? this.headerText(col)) ?? '';\n  }\n\n  cellTitle(row: T, col: ColumnDef<T>): string {\n    const def = col.cellTitle;\n    if (typeof def === 'function') return def(row) ?? '';\n    if (typeof def === 'string') return def;\n    const val = this.readFieldValue(row, col.field);\n    return val === undefined || val === null ? '' : String(val);\n  }\n\n  columnFilterAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('columnFilter'), {\n      header: this.headerText(col),\n    });\n  }\n\n  inputAriaLabel(col: ColumnDef<T>): string {\n    return this.headerText(col);\n  }\n\n  reorderColumnAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('reorderColumn'), {\n      header: this.headerText(col),\n    });\n  }\n\n  resizeColumnAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('resizeColumn'), {\n      header: this.headerText(col),\n    });\n  }\n\n  openFilterMenuAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('openFilterMenu'), {\n      header: this.headerText(col),\n    });\n  }\n\n  clearFilterAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('clearFilter'), {\n      header: this.headerText(col),\n    });\n  }\n\n  filterOperatorAriaLabel(col: ColumnDef<T>): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('filterOperator'), {\n      header: this.headerText(col),\n    });\n  }\n\n  editRowAriaLabel(index: number): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('editRow'), { index: index + 1 });\n  }\n\n  deleteRowAriaLabel(index: number): string {\n    return ngbFormatDatagridLabel(this.labelTemplate('deleteRow'), { index: index + 1 });\n  }\n\n  stickyRowToggleAriaLabel(): string {\n    return this.labelTemplate('stickyRowToggle');\n  }\n\n  booleanDisplayLabel(value: boolean): string {\n    return value ? this.labelTemplate('booleanYes') : this.labelTemplate('booleanNo');\n  }\n\n  emptyStateLabel(): string {\n    return this.labelTemplate('emptyState');\n  }\n\n  paginationRangeLabel(): string {\n    const total = this.recordTotal();\n    const start = this.startIndex;\n    const end = this.endIndex;\n    const format = (n: number) => this.formatLocaleNumber(n);\n    return ngbFormatDatagridLabel(this.labelTemplate('paginationRange'), {\n      start: format(start),\n      end: format(end),\n      total: format(total),\n    });\n  }\n\n  rowsPerPageLabel(): string {\n    return this.labelTemplate('rowsPerPage');\n  }\n\n  ariaRowCount(): number {\n    return this.recordTotal();\n  }\n\n  ariaColCount(): number {\n    let count = this.visibleColumns.length;\n    if (this.showSelectionColumn()) count += 1;\n    if (this.rowDetailTpl) count += 1;\n    if (this.stickyRowsEnabled) count += 1;\n    if (this.showActionsColumn()) count += 1;\n    return count;\n  }\n\n  isCellFocused(rowIndex: number, colIndex: number): boolean {\n    return (\n      this.keyboardNavigation &&\n      this.focusedCell?.rowIndex === rowIndex &&\n      this.focusedCell?.colIndex === colIndex\n    );\n  }\n\n  cellTabIndex(rowIndex: number, colIndex: number): number | null {\n    if (!this.keyboardNavigation || this.isStackedLayout()) return null;\n    if (!this.focusedCell) {\n      return rowIndex === 0 && colIndex === 0 ? 0 : -1;\n    }\n    return this.isCellFocused(rowIndex, colIndex) ? 0 : -1;\n  }\n\n  focusCell(rowIndex: number, colIndex: number): void {\n    if (!this.keyboardNavigation) return;\n    const maxRow = Math.max(0, this.paged.length - 1);\n    const maxCol = Math.max(0, this.visibleColumns.length - 1);\n    this.focusedCell = {\n      rowIndex: Math.min(Math.max(0, rowIndex), maxRow),\n      colIndex: Math.min(Math.max(0, colIndex), maxCol),\n    };\n    this.cdr.markForCheck();\n    queueMicrotask(() => this.focusFocusedCellElement());\n  }\n\n  onDataCellFocus(rowIndex: number, colIndex: number): void {\n    if (!this.keyboardNavigation) return;\n    this.focusedCell = { rowIndex, colIndex };\n  }\n\n  onDataCellKeydown(\n    ev: KeyboardEvent,\n    rowIndex: number,\n    colIndex: number,\n    col: ColumnDef<T>\n  ): void {\n    if (!this.keyboardNavigation) return;\n    if (this.isCellInEditMode(rowIndex, col)) {\n      return;\n    }\n\n    const key = ev.key;\n    if (key === ' ' && this.isSelectionEnabled() && !this.isCheckboxOnly()) {\n      ev.preventDefault();\n      this.toggleSelection(rowIndex, ev);\n      return;\n    }\n\n    if (key === 'F3' && this.isRowFilterEnabledForColumn(col)) {\n      ev.preventDefault();\n      this.openRowFilterMenuForColumn(col, ev.target as HTMLElement);\n      return;\n    }\n\n    if (key === 'F2' && this.isIncellEditMode() && this.enableEdit) {\n      const row = this.paged[rowIndex] as T;\n      if (this.isCellEditable(col, row, false)) {\n        ev.preventDefault();\n        this.startIncellEdit(rowIndex, col.field as string);\n      }\n      return;\n    }\n\n    if (key === 'Enter' && this.isIncellEditMode() && this.enableEdit) {\n      const row = this.paged[rowIndex] as T;\n      if (this.isCellEditable(col, row, false)) {\n        ev.preventDefault();\n        this.startIncellEdit(rowIndex, col.field as string);\n      }\n      return;\n    }\n\n    if (this.paginationActive && ev.altKey && (key === 'PageDown' || key === 'PageUp')) {\n      ev.preventDefault();\n      const totalPages = Math.max(1, Math.ceil(this.recordTotal() / this.pageSize));\n      const nextPage = key === 'PageDown' ? Math.min(totalPages, this.page + 1) : Math.max(1, this.page - 1);\n      if (nextPage !== this.page) {\n        this.onPage(nextPage);\n        this.announceStatus(this.paginationRangeLabel());\n        this.focusCell(0, colIndex);\n      }\n      return;\n    }\n\n    let nextRow = rowIndex;\n    let nextCol = colIndex;\n    const colCount = this.visibleColumns.length;\n    const rowCount = this.paged.length;\n\n    if (key === 'ArrowRight') nextCol = Math.min(colCount - 1, colIndex + 1);\n    else if (key === 'ArrowLeft') nextCol = Math.max(0, colIndex - 1);\n    else if (key === 'ArrowDown') nextRow = Math.min(rowCount - 1, rowIndex + 1);\n    else if (key === 'ArrowUp') nextRow = Math.max(0, rowIndex - 1);\n    else if (key === 'Home' && ev.ctrlKey) {\n      ev.preventDefault();\n      nextRow = 0;\n    } else if (key === 'End' && ev.ctrlKey) {\n      ev.preventDefault();\n      nextRow = Math.max(0, rowCount - 1);\n    } else if (key === 'Home') {\n      ev.preventDefault();\n      nextCol = 0;\n    } else if (key === 'End') {\n      ev.preventDefault();\n      nextCol = Math.max(0, colCount - 1);\n    } else {\n      return;\n    }\n\n    ev.preventDefault();\n    this.focusCell(nextRow, nextCol);\n  }\n\n  private openRowFilterMenuForColumn(col: ColumnDef<T>, anchor: HTMLElement): void {\n    if (!col.filterable) return;\n    this.toggleRowFilterMenu(col.field as string, anchor);\n  }\n\n  private isRowFilterEnabledForColumn(col: ColumnDef<T>): boolean {\n    return this.isFilteringEnabled() && !!col.filterable && this.filterMode === 'row';\n  }\n\n  private focusFocusedCellElement(): void {\n    const cell = this.focusedCell;\n    if (!cell) return;\n    const root = this.hostEl?.nativeElement;\n    const rows = root?.querySelectorAll('tbody tr.grid-data-row');\n    const row = rows?.[cell.rowIndex] as HTMLElement | undefined;\n    const el = row?.querySelector(`td[data-col-index=\"${cell.colIndex}\"]`) as HTMLElement | null;\n    el?.focus?.();\n  }\n\n  announceStatus(message: string): void {\n    this.statusMessage = message;\n    this.cdr.markForCheck();\n  }\n\n  private labelTemplate(key: keyof NgbDatagridLabels): string {\n    const bag = this.labels?.[key];\n    if (bag != null && bag !== '') return bag;\n    return NGB_DATAGRID_DEFAULT_LABELS[key];\n  }\n\n  private formatLocaleNumber(value: number): string {\n    try {\n      return new Intl.NumberFormat(this.locale ?? undefined).format(value);\n    } catch {\n      return String(value);\n    }\n  }\n\n  ariaSortFor(field: Extract<keyof T, string>): 'ascending' | 'descending' | 'none' {\n    if (!this.enableSorting || this.sort.active !== field || !this.sort.direction) {\n      return 'none';\n    }\n    return this.sort.direction === 'asc' ? 'ascending' : 'descending';\n  }\n\n  sortButtonAriaLabel(col: ColumnDef<T>): string {\n    const header = this.headerText(col);\n    const state = this.sort.active === col.field\n      ? (this.sort.direction === 'asc'\n        ? 'ascending'\n        : this.sort.direction === 'desc'\n          ? 'descending'\n          : 'unsorted')\n      : 'unsorted';\n    if (this.labels?.sortBy) {\n      return ngbFormatDatagridLabel(this.labelTemplate('sortBy'), { header, state });\n    }\n    return `Sort by ${header}. Current sort ${state}.`;\n  }\n\n  exportAriaLabel(kind: 'pdf'|'excel'): string {\n    if (kind === 'pdf') {\n      return this.exportPdfAriaLabel || this.labelTemplate('exportPdf');\n    }\n    return this.exportExcelAriaLabel || this.labelTemplate('exportExcel');\n  }\n  private withStickyRowsFirst(rows: T[]): T[] {\n    if (!this.stickyRows || this.stickyRowIds.size === 0) return rows;\n    const sticky: T[] = [];\n    const rest: T[] = [];\n\n    rows.forEach(r => {\n      const { id } = this.resolveRowMeta(r, 0);\n      (this.stickyRowIds.has(id) ? sticky : rest).push(r);\n    });\n\n    return [...sticky, ...rest];\n  }\n\n\n  // Helpers to map from paged index → original data index\n  // helper used above\n  private dataIndexFromPaged(i: number): number {\n    const row = this.paged[i];\n    return this.dataIndexOf(row);\n  }\n\n  private rebuildFilterForm() {\n    const group: Record<string, unknown> = {};\n    for (const c of this.resolvedColumns) {\n      if (!c.filterable) continue;\n      const descriptor = this.getColumnFilter(c.field as string);\n      group[this.operatorControlName(c.field as string)] = [descriptor?.operator ?? this.defaultFilterOperator(c)];\n      group[this.valueControlName(c.field as string)] = [descriptor?.value ?? ''];\n    }\n    this.filterForm = this.fb.group(group);\n\n    this.filterForm.valueChanges.subscribe(() => {\n      if (this.syncingFilterForm) return;\n    });\n    this.globalFilterCtrl.valueChanges.subscribe((value) => {\n      this.globalFilter = value;\n      this.page = 1;\n      this.filtersChange.emit({ global: value, columns: { ...this.filters } });\n    });\n  }\n\n  @ContentChildren(NgbCellTemplate)   private cellTplQ!:   QueryList<NgbCellTemplate<T>>;\n  @ContentChildren(NgbEditorTemplate) private editTplQ!:   QueryList<NgbEditorTemplate<T>>;\n  @ContentChildren(NgbFilterTemplate) private filterTplQ!: QueryList<NgbFilterTemplate<T>>;\n  @ContentChildren(NgbFilterMenuTemplate) private filterMenuTplQ!: QueryList<NgbFilterMenuTemplate<T>>;\n  @ContentChildren(NgbGlobalFilterTemplate) private globalTplQ!: QueryList<NgbGlobalFilterTemplate>;\n  @ContentChildren(NgbDataGridGroupHeaderColumnTemplateDirective)\n  private groupHeaderColumnTplQ!: QueryList<NgbDataGridGroupHeaderColumnTemplateDirective<T>>;\n  @ContentChildren(NgbDataGridGroupFooterTemplateDirective)\n  private groupFooterTplQ!: QueryList<NgbDataGridGroupFooterTemplateDirective<T>>;\n  @ContentChildren(NgbGridColumnDirective) private gridColumnQ!: QueryList<NgbGridColumnDirective<T>>;\n\n  /** Internal lookup maps */\n  public cellTpls:   Record<string, NgbCellTemplate<T>> = {};\n  public editTpls:   Record<string, NgbEditorTemplate<T>> = {};\n  public filterTpls: Record<string, NgbFilterTemplate<T>> = {};\n  public filterMenuTpls: Record<string, NgbFilterMenuTemplate<T>> = {};\n  public globalTpl:  NgbGlobalFilterTemplate | null = null;\n  public groupHeaderColumnTpls: Record<string, NgbDataGridGroupHeaderColumnTemplateDirective<T>> = {};\n  public groupFooterTpls: Record<string, NgbDataGridGroupFooterTemplateDirective<T>> = {};\n  private warnedDeclarativeColumns = false;\n\n  private toRecord<T extends { field: string }>(\n    items: readonly T[] | QueryList<T> | null | undefined\n  ): Record<string, T> {\n    const arr = Array.isArray(items)\n      ? items\n      : items instanceof QueryList\n        ? items.toArray()\n        : [];\n    return arr.reduce((acc, t) => (acc[t.field] = t, acc), {} as Record<string, T>);\n  }\n  \n  async export(kind: 'pdf'|'excel') {\n    if (!this.exportOptions?.enabled) return;\n    this.exporting = true;\n    try {\n      const data = await this.resolveDataset();\n      const cols = this.visibleColumns.map(c => ({ key: c.field, title: c.header }));\n      if (kind === 'pdf') {\n        await this.exporter.exportPdf({\n          fileName: this.exportOptions.fileName || 'export',\n          columns: cols.map(c => c.key),\n          rows: data as Array<Record<string, unknown>>,\n          options: this.exportOptions.pdf\n        });\n      } else {\n        await this.exporter.exportExcel({\n          fileName: this.exportOptions.fileName || 'export',\n          sheetName: this.exportOptions.excel?.sheetName || 'Sheet1',\n          columns: cols,\n          rows: data as Array<Record<string, unknown>>\n        });\n      }\n    } finally { this.exporting = false; }\n  }\n\n  private async resolveDataset(): Promise<T[]> {\n    const mode = this.exportOptions?.pages || 'current';\n    if (mode === 'all') {\n      if (!this.dataProviderAll) throw new Error('dataProviderAll required when pages=\"all\"');\n      const d = this.dataProviderAll();\n      return isObservable(d) ? firstValueFrom(d) : (d instanceof Promise ? d : d);\n    }\n    if (mode === 'selection') {\n      if (!this.dataProviderSelection) throw new Error('dataProviderSelection required when pages=\"selection\"');\n      return this.dataProviderSelection();\n    }\n    // current page == your existing `paged` array\n    return this.paged;\n  }\n\n  ngAfterContentInit(): void {\n    const rebuild = () => {\n      this.invalidateColumnCaches();\n      this.cellTpls   = this.toRecord(this.cellTplQ);\n      this.editTpls   = this.toRecord(this.editTplQ);\n      this.filterTpls = this.toRecord(this.filterTplQ);\n      this.filterMenuTpls = this.toRecord(this.filterMenuTplQ);\n      this.globalTpl  = this.globalTplQ?.first ?? null;\n      this.groupHeaderColumnTpls = this.toRecord(this.groupHeaderColumnTplQ);\n      this.groupFooterTpls = this.toRecord(this.groupFooterTplQ);\n      this.syncColumnWidthOverrides(true);\n      this.syncColumnOrder(true);\n      this.validateColumnConfig();\n      this.rebuildFilterForm();\n      if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n        this.sort = { active: null, direction: '' };\n      }\n    };\n    rebuild();\n    this.cellTplQ?.changes.subscribe(rebuild);\n    this.editTplQ?.changes.subscribe(rebuild);\n    this.filterTplQ?.changes.subscribe(rebuild);\n    this.filterMenuTplQ?.changes.subscribe(rebuild);\n    this.globalTplQ?.changes.subscribe(rebuild);\n    this.groupHeaderColumnTplQ?.changes.subscribe(rebuild);\n    this.groupFooterTplQ?.changes.subscribe(rebuild);\n    this.gridColumnQ?.changes.subscribe(rebuild);\n    this.scheduleStickyGroupSync();\n  }\n\n  ngOnChanges(ch: SimpleChanges): void {\n    if (ch['state']) {\n      this.syncFromDataState(this.state);\n    }\n    if (ch['filter']) {\n      this.localFilter = this.cloneComposite(this.filter);\n      this.syncLegacyFilters(this.localFilter);\n      this.invalidateFilteredCaches();\n    }\n    if (ch['columns']) {\n      this.invalidateColumnCaches();\n      this.syncColumnWidthOverrides(true);\n      this.syncColumnOrder(true);\n    }\n    if (ch['data']) {\n      this.invalidateDataCaches();\n    }\n    if (ch['columns'] || ch['filter']) {\n      this.validateColumnConfig();\n      if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n        this.sort = { active: null, direction: '' };\n      }\n      this.rebuildFilterForm();\n      this.syncFilterFormFromState();\n    }\n    if (ch['highlightedIndex']) this.updateHighlightCache();\n    if (ch['editMode']) this.resetEditingState();\n    if (ch['pageSize'] || ch['pageSizeOptions'] || ch['enablePagination'] || ch['pageable'] || ch['state'] || ch['dataOperations']) {\n      const size = Math.max(1, Math.trunc(Number(this.pageSize) || 10));\n      this.pageSize = size;\n      this.invalidatePagedCache();\n    }\n    if (ch['data'] || ch['columns'] || ch['labels'] || ch['locale'] || ch['dir']) {\n      this.cdr.markForCheck();\n    }\n    this.scheduleStickyGroupSync();\n  }\n\n  private resetEditingState(): void {\n    this.editingCell = null;\n    this.editingIndex = null;\n    this.editForm = this.fb.group({});\n    this.saveAttemptedEdit = false;\n    this.closeExternalEdit();\n    this.cdr.markForCheck();\n  }\n\n  private getRowId(rowIndex: number, row: T): NgbDatagridRowId {\n    return this.resolveRowMeta(row, rowIndex).id;\n  }\n\n  private selectedDataRows(): T[] {\n    return (this.data ?? []).filter((row, index) => this.selectedRowIds.has(this.getRowId(index, row)));\n  }\n\n  /** Apply selection ids and refresh checkbox UI (for programmatic / OnPush sync). */\n  setSelectionIds(ids: Iterable<NgbDatagridRowId>, options?: { emit?: boolean }): void {\n    if (!this.isSelectionEnabled()) return;\n    this.selectedRowIds.clear();\n    for (const id of ids) {\n      this.selectedRowIds.add(id);\n    }\n    if (options?.emit !== false) {\n      this.selectionChange.emit({\n        selected: this.selectedDataRows(),\n        lastAction: null,\n      });\n    }\n    this.cdr.markForCheck();\n    Promise.resolve().then(() => {\n      this.cdr.detectChanges();\n    });\n  }\n\n  private getEditService(): NgbDatagridEditService<T> {\n    return this.editService ?? this.defaultEditService;\n  }\n\n  isCellEditable(col: ColumnDef<T>, row: T, isNew: boolean): boolean {\n    if (typeof col.editable === 'function') return col.editable(row, isNew);\n    return col.editable ?? true;\n  }\n\n  isRowReorderEnabled(): boolean {\n    return this.rowReorderable &&\n      !this.isGroupingActive() &&\n      !this.sort.active &&\n      !this.hasActiveFilters() &&\n      !this.addingNew &&\n      this.editingIndex == null &&\n      !this.stickyRowsEnabled;\n  }\n\n  hasActiveFilters(): boolean {\n    return !!(this.currentGlobalFilterValue() || this.localFilter.filters.length > 0);\n  }\n\n  startAdd() {\n    if (!this.enableAdd || this.addingNew) return;\n    if (this.isExternalEditMode()) {\n      this.openExternalAdd();\n      return;\n    }\n    this.page = 1;\n    this.editingIndex = null;\n    this.editingCell = null;\n    this.addingNew = true;\n    this.addForm = this.buildFormFromRow(); // defaults\n    this.saveAttemptedNew = false;\n\n    // Register a draft row with the edit service so implementations can track \"new\" state.\n    const service = this.getEditService();\n    const draft = this.assignDraftValues({} as T, this.formDraftValues(this.addForm));\n    this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n    service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n    this.cdr.markForCheck();\n  }\n\n  saveAdd() {\n    if (!this.addingNew || !this.addForm) return;\n    this.saveAttemptedNew = true;\n    this.addForm.markAllAsTouched();\n    this.addForm.updateValueAndValidity();\n\n    if (this.addForm.invalid) return;\n\n    const service = this.getEditService();\n    const newRow = this.assignDraftValues({} as T, this.formDraftValues(this.addForm));\n    const rowIndex = this.data.length;\n    const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n    service.create(this.data ?? [], newRow, rowIndex, rowId);\n    service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n    this.invalidateDataCaches();\n    this.rowAdd.emit({ newRow });\n\n    this.addingNew = false;\n    this.addForm = this.fb.group({});;\n    this.saveAttemptedNew = false;\n    this.addDraftRowId = null;\n    this.cdr.markForCheck();\n  }\n\n  cancelAdd() {\n    if (this.addDraftRowId != null) {\n      this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n    }\n    this.addingNew = false;\n    this.addForm = this.fb.group({});;\n    this.saveAttemptedNew = false;\n    this.addDraftRowId = null;\n    this.cdr.markForCheck();\n  }\n\n  startEdit(i: number) {\n    if (!this.enableEdit) return;\n    if (this.isExternalEditMode()) {\n      this.openExternalEdit(i);\n      return;\n    }\n    this.addingNew = false;\n    this.editingCell = null;\n    this.editingIndex = i;\n    const row = this.paged[i];\n    this.editForm = this.buildFormFromRow(this.toDraftValues(row));\n    this.saveAttemptedEdit = false;\n    const di = this.dataIndexOf(row);\n    const rowId = this.getRowId(di, this.data[di]);\n    // Start tracking baseline for the row (service can snapshot original state).\n    this.getEditService().update(this.data ?? [], this.data[di], di, rowId);\n    this.rowEdit.emit({ row: this.data[di], index: di });\n    this.scheduleViewRefresh(() => this.focusInlineEditor());\n  }\n\n  saveEdit(i: number) {\n    if (this.editingIndex !== i || !this.editForm) return;\n    this.saveAttemptedEdit = true;\n    this.editForm.markAllAsTouched();\n    this.editForm.updateValueAndValidity();\n\n    if (this.editForm.invalid) return;\n\n    const di = this.dataIndexOf(this.paged[i]);\n    const original = this.data[di];\n    const rowId = this.getRowId(di, original);\n    const service = this.getEditService();\n    const updated = this.assignDraftValues(original, this.formDraftValues(this.editForm));\n    const next = service.update(this.data ?? [], updated, di, rowId);\n    this.data = service.saveChanges(next, di, rowId, updated);\n    this.invalidateDataCaches();\n\n    this.rowSave.emit({ original, updated, index: di });\n\n    this.editingIndex = null;\n    this.editForm = this.fb.group({});\n    this.saveAttemptedEdit = false;\n    this.cdr.markForCheck();\n  }\n\n  cancelEdit(i: number) {\n    const di = this.dataIndexOf(this.paged[i]);\n    const rowId = this.getRowId(di, this.data[di]);\n    this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n    this.rowCancel.emit({ row: this.data[di], index: di });\n    this.editingIndex = null;\n    this.editForm = this.fb.group({});   // empty group\n    this.saveAttemptedEdit = false;\n    this.cdr.markForCheck();\n  }\n\n  // For the \"Add row\" draft\n  onNewDraftChange(col: ColumnDef<T>) {\n    if (this.draftNew) {\n      const key = this.keyOf(col);\n      this.draftNew = { ...this.draftNew, [key]: this.draftNew[key] };\n    }\n    this.validateInto(col, this.draftNew, this.errorsNew);\n  }\n\n  validateInto(col: ColumnDef<T>,\n    targetDraft: DraftValues<T> | null,\n    targetErrors: Partial<Record<KeyOf<T>, string>>\n  ) {\n    if (!targetDraft) return;\n    const key = this.keyOf(col);\n    const val = targetDraft[key];\n    let err = '';\n\n    // required\n    if (col.required) {\n      const empty = val == null || (typeof val === 'string' && val.trim() === '');\n      if (empty) err = 'Required';\n    }\n    // type checks\n    if (!err && col.type === 'email' && val && !isReasonableEmail(val)) err = 'Invalid email';\n    if (!err && col.type === 'number' && val !== '' && val != null && Number.isNaN(Number(val))) err = 'Invalid number';\n    if (!err && col.type === 'date' && val && Number.isNaN(Date.parse(String(val)))) err = 'Invalid date';\n    if (!err && col.type === 'boolean' && col.required && val !== true && val !== false) err = 'Required';\n\n    if (err) targetErrors[key] = err; else delete targetErrors[key];\n  }\n\n  deleteRow(i: number) {\n    if (!this.enableDelete) return;\n    const di = this.dataIndexFromPaged(i);\n    const row = this.data[di];\n    const rowId = this.getRowId(di, row);\n    this.getEditService().remove(this.data ?? [], di, rowId);\n    this.rowDelete.emit({ row, index: di });\n  }\n\n  // Optional stable row identity for efficient rendering.\n  trackRow = (index: number, row: T) => {\n    const di = this.dataIndexOf(row);\n    const rowIndex = di >= 0 ? di : index;\n    return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n  };\n\n  private rowKeyValue(row: T, rowIndex: number): NgbDatagridRowId {\n    const key = this.highlightRowKey;\n    if (typeof key === 'function') return key(row, rowIndex);\n    if (typeof key === 'string') return this.readFieldValue(row, key) as NgbDatagridRowId;\n    return rowIndex;\n  }\n\n  private colKeyValue(column: ColumnDef<T>, colIndex: number): unknown {\n    const key = this.highlightColKey;\n    if (typeof key === 'function') return key(column, colIndex);\n    if (typeof key === 'string') return this.readFieldValue(column, key);\n    return colIndex;\n  }\n\n  isRowHighlighted(row: T, rowIndex: number): boolean {\n    const key = this.rowKeyValue(row, rowIndex);\n    return this.highlightRowMap.has(key) && this.highlightRowMap.get(key)?.some(h => h.columnKey === undefined) === true;\n  }\n\n  isCellHighlighted(row: T, rowIndex: number, column: ColumnDef<T>, colIndex: number): boolean {\n    const key = this.rowKeyValue(row, rowIndex);\n    const colKey = this.colKeyValue(column, colIndex);\n    const items = this.highlightRowMap.get(key);\n    return !!items?.some(h => h.columnKey === colKey);\n  }\n\n  toggleSort(field: Extract<keyof T, string>) {\n    if (!this.enableSorting) return;\n\n    if (this.sort.active !== field) this.sort = { active: field, direction: 'asc' };\n    else this.sort = {\n      active: field,\n      direction: this.sort.direction === 'asc' ? 'desc' : this.sort.direction === 'desc' ? '' : 'asc'\n    };\n\n    this.page = 1;\n    this.invalidateSortedCaches();\n    this.sortChange.emit({ active: this.sort.active, direction: this.sort.direction });\n    this.emitDataStateChange();\n    const col = this.resolvedColumns.find((item) => item.field === field);\n    if (col) {\n      const state = this.sort.direction === 'asc' ? 'ascending' : this.sort.direction === 'desc' ? 'descending' : 'none';\n      this.announceStatus(\n        ngbFormatDatagridLabel(this.labelTemplate('sortBy'), {\n          header: this.headerText(col),\n          state,\n        })\n      );\n    }\n  }\n\n  onGlobalFilterChange() {\n    if (!this.isFilteringEnabled() || !this.enableGlobalFilter) return;\n    this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n    this.page = 1;\n    this.invalidateFilteredCaches();\n    this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n    this.emitDataStateChange();\n  }\n\n  onColumnFilterChange() {\n    if (!this.isFilteringEnabled()) return;\n    this.localFilter = this.legacyFilterDescriptor();\n    this.page = 1;\n    this.invalidateFilteredCaches();\n    this.filterChange.emit(this.localFilter);\n    this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n    this.emitDataStateChange();\n    this.syncFilterFormFromState();\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    const insideMenu = this.isEventInsideSelector(\n      event,\n      '.grid-filter-menu-host, .grid-filter-operator, .grid-filter-operator-menu, .ngb-datagrid-floating-panel, .ngb-grid__filter-menu-overlay',\n    );\n    if (insideMenu) {\n      return;\n    }\n    this.closeFilterMenu();\n    this.openRowFilterField = null;\n    this.openRowFilterOperatorAnchor = null;\n\n    if (this.isIncellEditMode()) {\n      // Clicking outside the grid commits a valid in-cell edit and keeps invalid edits open.\n      if (!this.isEventInsideSelector(event, '.ngb-grid')) {\n        this.commitIncellEdit(true);\n      }\n    }\n  }\n\n  private isEventInsideSelector(event: MouseEvent, selector: string): boolean {\n    const path = typeof event.composedPath === 'function' ? event.composedPath() : [];\n    for (const node of path) {\n      if (node instanceof Element && node.closest(selector)) {\n        return true;\n      }\n    }\n\n    const target = event.target;\n    if (target instanceof Element) {\n      return !!target.closest(selector);\n    }\n    if (target instanceof Node) {\n      return !!target.parentElement?.closest(selector);\n    }\n\n    return false;\n  }\n\n  canCancelToolbarEdit(): boolean {\n    return this.isToolbarEditMode() && (this.editingIndex != null || this.externalEditOpen);\n  }\n\n  isToolbarEditActive(): boolean {\n    return this.isToolbarEditMode() && (this.addingNew || this.editingIndex != null || this.externalEditOpen);\n  }\n\n  isToolbarSaveDisabled(): boolean {\n    if (!this.isToolbarEditActive()) return true;\n    // External dialog validates before save; inline toolbar add/edit validate on save click.\n    if (this.externalEditOpen) return !!this.externalForm?.invalid;\n    return false;\n  }\n\n  saveToolbarEdit(): void {\n    if (!this.isToolbarEditMode()) return;\n    if (this.externalEditOpen) {\n      this.saveExternalEdit();\n      return;\n    }\n    if (this.addingNew) {\n      this.saveAdd();\n      return;\n    }\n    if (this.editingIndex != null) {\n      this.saveEdit(this.editingIndex);\n    }\n  }\n\n  cancelToolbarEdit(): void {\n    if (!this.isToolbarEditMode()) return;\n    if (this.externalEditOpen) {\n      this.cancelExternalEdit();\n      return;\n    }\n    if (this.addingNew) {\n      this.cancelAdd();\n      return;\n    }\n    if (this.editingIndex != null) {\n      this.cancelEdit(this.editingIndex);\n    }\n  }\n\n  private ariaUtilityColumns(): Exclude<UtilityColumnKind, 'actions'>[] {\n    const cols: Exclude<UtilityColumnKind, 'actions'>[] = [];\n    if (this.showSelectionColumn()) cols.push('selection');\n    if (this.rowDetailTpl) cols.push('detail');\n    if (this.stickyRowsEnabled) cols.push('sticky-toggle');\n    return cols;\n  }\n\n  ariaColIndexForUtility(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n    const idx = this.ariaUtilityColumns().indexOf(kind);\n    return idx >= 0 ? idx + 1 : null;\n  }\n\n  ariaColIndexForDataColumn(visibleColumnIndex: number): number {\n    return this.ariaUtilityColumns().length + visibleColumnIndex + 1;\n  }\n\n  ariaColIndexForActions(): number {\n    return this.ariaUtilityColumns().length + this.visibleColumns.length + 1;\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscapeKey(): void {\n    this.closeFilterMenu();\n    this.openRowFilterField = null;\n  }\n\n  onPageChange(p: number) {\n    this.page = p;\n    this.invalidatePagedCache();\n    this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n    this.emitDataStateChange();\n  }\n\n  onPageSizeChange() {\n    this.page = 1;\n    this.invalidatePagedCache();\n    this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n    this.emitDataStateChange();\n  }\n\n  toggleExpand(i: number): void {\n    const isOpen = this.expanded.has(i);\n\n    if (this.singleExpand) {\n      this.expanded.clear();\n      if (!isOpen) this.expanded.add(i); // open the clicked row, or close all if it was open\n    } else {\n      if (isOpen) {\n        this.expanded.delete(i);\n      } else {\n        this.expanded.add(i);\n      }\n    }\n  }\n\n  isExpanded(i: number): boolean {\n    return this.expanded.has(i);\n  }\n\n  onRowClick(ev: MouseEvent, i: number) {\n    if (this.isIncellEditMode() || this.isToolbarEditMode() || this.isExternalEditMode()) return;\n    if (!this.editOnRowClick) return;\n    if (this.addingNew || this.editingIndex === i) return;\n    const el = ev.target as HTMLElement;\n    if (el.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n    this.startEdit(i);\n  }\n\n  onPage(p: number): void {\n    if (p < 1) return;\n    this.page = p;\n    this.invalidatePagedCache();\n    this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n    this.emitDataStateChange();\n  }\n\n  onPageSize(sz: number | string): void {\n    const next = Math.max(1, Math.trunc(Number(sz)));\n    this.pageSize = Number.isFinite(next) && next > 0 ? next : this.pageSize;\n    this.page = 1; // reset to first page when size changes\n    this.invalidatePagedCache();\n    this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n    this.emitDataStateChange();\n  }\n\n  onRowDrop(event: NgbDndDropEvent<T>): void {\n    if (!this.isRowReorderEnabled()) return;\n    if (!event.sameList || event.fromIndex === event.toIndex) return;\n\n    const pageOffset = this.paginationActive ? (this.page - 1) * this.pageSize : 0;\n    const fromIndex = pageOffset + event.fromIndex;\n    const toIndex = pageOffset + event.toIndex;\n\n    if (fromIndex < 0 || toIndex < 0 || fromIndex >= this.data.length || toIndex >= this.data.length) return;\n\n    const next = this.data.slice();\n    const [moved] = next.splice(fromIndex, 1);\n    next.splice(toIndex, 0, moved);\n    this.data = next;\n    this.invalidateDataCaches();\n    this.rowReorder.emit({ row: moved, fromIndex, toIndex, data: next.slice() });\n    this.cdr.markForCheck();\n  }\n\n  asBool(v: unknown): boolean {\n    if (typeof v === 'boolean') return v;\n    return typeof v === 'object' && v !== null && 'enabled' in v ? !!(v as { enabled?: unknown }).enabled : false;\n  }\n\n  triggerExport(kind: 'pdf'|'excel') {\n    this.export(kind);\n  }\n\n  isResponsiveEnabled(): boolean {\n    const r = this.responsive;\n    return r === true || (!!r && (r as NgbDataGridResponsiveOptions).enabled === true);\n  }\n\n  isRowSticky(row: T, pagedIndex: number): boolean {\n    if (!this.stickyRows) return false;\n    const { id } = this.resolveRowMeta(row, pagedIndex);\n    return this.stickyRowIds.has(id);\n  }\n\n  toggleStickyRow(pagedIndex: number): void {\n    if (!this.stickyRows) return;\n    const row = this.paged[pagedIndex];\n    if (!row) return;\n    const { id } = this.resolveRowMeta(row, pagedIndex);\n    if (this.stickyRowIds.has(id)) this.stickyRowIds.delete(id);\n    else this.stickyRowIds.add(id);\n    this.invalidateSortedCaches();\n  }\n\n  stickyIcon(row: T, pagedIndex: number): string {\n    return this.isRowSticky(row, pagedIndex) ? 'pin-angle-fill' : 'pin-fill';\n  }\n\n  stickyTop(row: T, pagedIndex: number): number | null {\n    if (!this.isRowSticky(row, pagedIndex)) return null;\n    let offset = 0;\n    for (let idx = 0; idx < pagedIndex; idx++) {\n      const candidate = this.paged[idx];\n      if (!candidate || !this.isRowSticky(candidate, idx)) continue;\n      offset += this.measuredStickyRowHeight(idx);\n    }\n    return offset;\n  }\n\n  private measuredStickyRowHeight(pagedIndex: number): number {\n    const rows = this.bodyScroller?.nativeElement.querySelectorAll<HTMLTableRowElement>('tbody > tr.grid-data-row');\n    const measured = rows?.[pagedIndex]?.offsetHeight ?? 0;\n    return measured > 0 ? measured : this.stickyRowHeight;\n  }\n\n  // Selection helpers\n  get stickyRowsEnabled(): boolean {\n    return this.tableOptions?.stickyRows ?? this.stickyRows;\n  }\n\n  get stickyHeaderEnabled(): boolean {\n    return this.tableOptions?.stickyHeader ?? this.stickyHeader;\n  }\n\n  get stickyFooterEnabled(): boolean {\n    return this.tableOptions?.stickyFooter ?? this.stickyFooter;\n  }\n\n  isSelectionEnabled(): boolean {\n    return this.selectionMode !== 'none';\n  }\n\n  showSelectionColumn(): boolean {\n    return this.isSelectionEnabled() && this.selectionBehavior !== 'row';\n  }\n\n  isCheckboxOnly(): boolean {\n    return this.selectionBehavior === 'checkbox';\n  }\n\n  isSelectionDisabled(row: T, pagedIndex: number): boolean {\n    if (!this.selectionDisabledFn) return false;\n    const di = this.dataIndexOf(this.paged[pagedIndex]);\n    return this.selectionDisabledFn(row, di >= 0 ? di : pagedIndex);\n  }\n\n  isRowSelected(row: T, pagedIndex: number): boolean {\n    const { id } = this.resolveRowMeta(row, pagedIndex);\n    return this.selectedRowIds.has(id);\n  }\n\n  toggleSelection(pagedIndex: number, event?: Event): void {\n    if (!this.isSelectionEnabled()) return;\n    const row = this.paged[pagedIndex];\n    if (!row || this.isSelectionDisabled(row, pagedIndex)) return;\n\n    const { index: resolvedIndex, id } = this.resolveRowMeta(row, pagedIndex);\n    const di = resolvedIndex >= 0 ? resolvedIndex : pagedIndex;\n    const currentlySelected = this.selectedRowIds.has(id);\n    const isMulti = this.selectionMode === 'multiple';\n    const desktop = this.selectionKeyMode === 'desktop';\n    const { shift, meta } = this.readModifierKeys(event);\n    const fromCheckbox = !!(event?.target instanceof HTMLInputElement && event.target.type === 'checkbox');\n\n    if (!isMulti) {\n      this.selectedRowIds.clear();\n      this.selectedRowIds.add(id);\n      this.selectionAnchor = pagedIndex;\n      this.emitSelection(row, di, true);\n      this.cdr.markForCheck();\n      return;\n    }\n\n    if (shift && this.selectionAnchor != null) {\n      const start = Math.min(this.selectionAnchor, pagedIndex);\n      const end = Math.max(this.selectionAnchor, pagedIndex);\n      this.selectedRowIds.clear();\n      for (let i = start; i <= end; i++) {\n        const r = this.paged[i];\n        if (!r || this.isSelectionDisabled(r, i)) continue;\n        const { id: rid } = this.resolveRowMeta(r, i);\n        this.selectedRowIds.add(rid);\n      }\n      this.emitSelection(row, di, true);\n      this.cdr.markForCheck();\n      return;\n    }\n\n    if (fromCheckbox || meta || !desktop) {\n      if (currentlySelected) this.selectedRowIds.delete(id);\n      else this.selectedRowIds.add(id);\n    } else {\n      this.selectedRowIds.clear();\n      this.selectedRowIds.add(id);\n    }\n\n    this.selectionAnchor = pagedIndex;\n    this.emitSelection(row, di, !currentlySelected || (!meta && desktop));\n    this.cdr.markForCheck();\n  }\n\n  private emitSelection(row: T, dataIndex: number, selected: boolean) {\n    this.selectionChange.emit({\n      selected: this.selectedDataRows(),\n      lastAction: { row, index: dataIndex, selected }\n    });\n  }\n\n  toggleSelectAllCurrentPage(): void {\n    if (this.selectionMode !== 'multiple' || !this.selectAllEnabled) return;\n    const allSelectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n    const allSelected = allSelectable.every((r, i) => this.isRowSelected(r, i));\n    if (allSelected) {\n      allSelectable.forEach((r, i) => {\n        const { id: rid } = this.resolveRowMeta(r, i);\n        this.selectedRowIds.delete(rid);\n      });\n    } else {\n      allSelectable.forEach((r, i) => {\n        const { id: rid } = this.resolveRowMeta(r, i);\n        this.selectedRowIds.add(rid);\n      });\n    }\n    this.selectionChange.emit({\n      selected: this.selectedDataRows(),\n      lastAction: null\n    });\n    this.cdr.markForCheck();\n  }\n\n  isPageAllSelected(): boolean {\n    let selectableCount = 0;\n    for (let index = 0; index < this.paged.length; index++) {\n      const row = this.paged[index];\n      if (!row) continue;\n      if (this.isSelectionDisabled(row, index)) return false;\n      selectableCount++;\n      if (!this.isRowSelected(row, index)) return false;\n    }\n    return selectableCount > 0;\n  }\n\n  isPageIndeterminate(): boolean {\n    let selectableCount = 0;\n    let selectedCount = 0;\n    let hasDisabledRows = false;\n\n    for (let index = 0; index < this.paged.length; index++) {\n      const row = this.paged[index];\n      if (!row) continue;\n      if (this.isSelectionDisabled(row, index)) {\n        hasDisabledRows = true;\n        continue;\n      }\n      selectableCount++;\n      if (this.isRowSelected(row, index)) selectedCount++;\n    }\n\n    if (selectedCount === 0) return false;\n    return selectedCount < selectableCount || hasDisabledRows;\n  }\n\n  selectAllLabel(): string {\n    const labels = this.selectionA11yLabels || {};\n    return this.isPageAllSelected()\n      ? (labels.unselectAll || this.labelTemplate('unselectAll'))\n      : (labels.selectAll || this.labelTemplate('selectAll'));\n  }\n\n  rowSelectionLabel(index: number): string {\n    const labels = this.selectionA11yLabels || {};\n    const selected = this.isRowSelected(this.paged[index], index);\n    if (selected) {\n      return labels.unselectRow\n        ? ngbFormatDatagridLabel(labels.unselectRow, { index: index + 1 })\n        : ngbFormatDatagridLabel(this.labelTemplate('unselectRow'), { index: index + 1 });\n    }\n    return labels.selectRow\n      ? ngbFormatDatagridLabel(labels.selectRow, { index: index + 1 })\n      : ngbFormatDatagridLabel(this.labelTemplate('selectRow'), { index: index + 1 });\n  }\n\n  onRowSelect(ev: MouseEvent, pagedIndex: number) {\n    if (!this.isSelectionEnabled() || this.isCheckboxOnly()) return;\n    const target = ev.target as HTMLElement;\n    if (target.closest('input, button, a, select, textarea,label')) return;\n    this.toggleSelection(pagedIndex, ev);\n  }\n\n}\n","<div\n  class=\"ngb-grid\"\n  [attr.dir]=\"resolvedDir()\"\n  [attr.data-theme]=\"theme\"\n  [class.ngb-grid--rtl]=\"isRtl()\"\n  [class.ngb-responsive]=\"isResponsiveEnabled()\"\n  [class.ngb-grid--compact]=\"densityMode === 'compact'\"\n  [class.ngb-grid--stacked]=\"isStackedLayout()\"\n  [class.ngb-grid--stacked-cards]=\"isStackedCardsLayout()\"\n  [class.ngb-grid--menu-open]=\"!!openFilterMenuField || !!openMenuOperatorField || !!openRowFilterField\"\n  [class.ngb-grid--row-operator-open]=\"!!openRowFilterField\"\n  [class.ngb-grid--zebra]=\"zebraStripesEnabled\"\n  [class.ngb-grid--resizable]=\"resizable && !isStackedLayout()\"\n  [class.ngb-grid--column-reorderable]=\"isColumnReorderEnabled()\"\n  [class.ngb-grid--loading]=\"loading\"\n  [attr.aria-busy]=\"loading ? 'true' : null\"\n  [style.--ngb-render-tick]=\"renderTick\"\n>\n  <div class=\"ngb-grid__layout-toolbar-host\">\n    <ng-content select=\"ngb-datagrid-layout-toolbar\"></ng-content>\n  </div>\n  <ngb-datagrid-toolbar [grid]=\"gridHost\"></ngb-datagrid-toolbar>\n  <ngb-datagrid-editing-toolbar\n    [grid]=\"gridHost\"\n    [selectedCount]=\"getSelectedCount()\"\n    [editActive]=\"isToolbarEditActive()\"\n    [saveDisabled]=\"isToolbarSaveDisabled()\"\n  ></ngb-datagrid-editing-toolbar>\n\n  @if (paginationActive && pagerShowsAt('top')) {\n    <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"top\"></ngb-datagrid-footer>\n  }\n\n  <div\n    class=\"ngb-grid__status visually-hidden-focusable\"\n    role=\"status\"\n    aria-live=\"polite\"\n    aria-atomic=\"true\"\n  >{{ statusMessage }}</div>\n\n  @if (isGroupingEnabled()) {\n    <div\n      class=\"ngb-grid__group-panel\"\n      [class.ngb-grid__group-panel--active]=\"groupPanelDragActive && !groupPanelDragDenied\"\n      [class.ngb-grid__group-panel--denied]=\"groupPanelDragDenied\"\n      (dragover)=\"onGroupPanelDragOver($event)\"\n      (dragleave)=\"onGroupPanelDragLeave($event)\"\n      (drop)=\"onGroupPanelDrop($event)\"\n    >\n      <div class=\"ngb-grid__group-panel-label\">{{ groupPanelLabel() }}</div>\n      @if (groupedColumns().length) {\n        <div class=\"ngb-grid__group-chip-list\">\n          @for (descriptor of groupedColumns(); track descriptor.field) {\n            <div class=\"ngb-grid__group-chip\">\n              <button\n                type=\"button\"\n                class=\"ngb-grid__group-chip-button\"\n                (click)=\"toggleGroupDirection(descriptor.field)\"\n                [attr.aria-label]=\"groupDirectionAriaLabel(descriptor)\"\n              >\n                <span class=\"ngb-grid__group-chip-label\">{{ groupFieldLabel(descriptor) }}</span>\n                <span class=\"ngb-grid__group-chip-dir\">{{ descriptor.dir === 'desc' ? '↓' : '↑' }}</span>\n              </button>\n              <button\n                type=\"button\"\n                class=\"ngb-grid__group-chip-remove\"\n                (click)=\"removeGroupField(descriptor.field)\"\n                [attr.aria-label]=\"groupRemoveAriaLabel(descriptor)\"\n              >\n                <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n              </button>\n            </div>\n          }\n        </div>\n      }\n    </div>\n  }\n\n  <div class=\"table-wrapper\" [ngClass]=\"responsiveWrapperClasses\">\n    @if (loading) {\n    <div class=\"ngb-grid__loading-overlay\" role=\"presentation\">\n      <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\n        <span class=\"visually-hidden\">Loading</span>\n      </div>\n    </div>\n    }\n    <div class=\"grid-header-shell\" #headerScroller>\n    <table class=\"grid-table grid-header mb-0\" [ngClass]=\"tableClassList\" [style.width.px]=\"tablePixelWidth\">\n      @if (tableOptions?.caption) {\n      <caption\n        [class.caption-top]=\"(tableOptions?.captionSide ?? 'top') === 'top'\"\n      >\n        {{ tableOptions?.caption }}\n      </caption>\n      }\n\n      <colgroup\n        ngbDatagridColgroup\n        [grid]=\"gridHost\"\n        [ngbSyncColgroup]=\"colgroupSyncId\"\n        syncRole=\"header\"\n        [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n      ></colgroup>\n\n      <thead\n        class=\"table-light\"\n        ngbDatagridHeader\n        [grid]=\"gridHost\"\n        [renderTick]=\"renderTick\"\n      ></thead>\n    </table>\n    </div>\n\n    <div [class.table-body-scroll]=\"shouldEnableScroll\" #bodyScroller (scroll)=\"onBodyHorizontalScroll()\">\n      @if (hasStickyGroupHeaders()) {\n        <div\n          class=\"ngb-grid__group-sticky-layer ngb-grid__group-sticky-layer--top\"\n          [style.transform]=\"'translateY(' + stickyGroupHeaderTranslateY + 'px)'\"\n        >\n          <table\n            class=\"grid-table grid-group-sticky-table mb-0\"\n            [ngClass]=\"tableClassList\"\n            [style.width.px]=\"tablePixelWidth\"\n            role=\"presentation\"\n          >\n            <colgroup>\n              @for (width of stickyGroupOverlayColumnWidths; track $index) {\n                <col [style.width.px]=\"width || null\" />\n              }\n            </colgroup>\n            <tbody>\n              @for (item of stickyGroupHeaderRows; track item.key) {\n                <tr class=\"grid-group-row grid-group-row--overlay\">\n                  @if (showSelectionColumn()) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @if (rowDetailTpl) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @if (stickyRowsEnabled) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @for (col of visibleColumns; track col.field) {\n                    @if (shouldRenderGroupCell(col, item.group)) {\n                    <td\n                      class=\"grid-group-row__cell\"\n                      [class.grid-group-row__cell--lead]=\"isGroupLeadColumn(col, item.group)\"\n                      [attr.colspan]=\"groupCellColspan(col, item.group)\"\n                    >\n                      @if (isGroupLeadColumn(col, item.group)) {\n                        <button\n                          type=\"button\"\n                          class=\"grid-group-row__toggle\"\n                          (click)=\"toggleGroupCollapsed(item.group, item.level, item.startIndex)\"\n                          [attr.aria-expanded]=\"!item.collapsed\"\n                        >\n                          <span\n                            class=\"bi\"\n                            [ngClass]=\"item.collapsed ? 'bi-chevron-right' : 'bi-chevron-down'\"\n                            aria-hidden=\"true\"\n                          ></span>\n                          <span class=\"grid-group-row__content\" [style.padding-inline-start.rem]=\"groupRowIndent(item.level)\">\n                            @if (groupHeaderTpl) {\n                              <ng-container\n                                [ngTemplateOutlet]=\"groupHeaderTpl.template\"\n                                [ngTemplateOutletContext]=\"groupHeaderContext(item.group)\"\n                              ></ng-container>\n                            } @else {\n                              <span class=\"grid-group-row__label\">{{ groupRowLabel(item.group) }}</span>\n                              <span class=\"grid-group-row__count\">{{ groupRowCountLabel(item.group) }}</span>\n                            }\n                          </span>\n                        </button>\n                        @if (groupHeaderColumnTemplate(groupColumnField(col)); as tpl) {\n                          <div class=\"grid-group-row__column-slot\">\n                            <ng-container\n                              [ngTemplateOutlet]=\"tpl.template\"\n                              [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                            ></ng-container>\n                          </div>\n                        }\n                      } @else if (groupHeaderColumnTemplate(groupColumnField(col)); as tpl) {\n                        <div class=\"grid-group-row__column-slot\">\n                          <ng-container\n                            [ngTemplateOutlet]=\"tpl.template\"\n                            [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                          ></ng-container>\n                        </div>\n                      }\n                    </td>\n                    }\n                  }\n                  @if (showActionsColumn()) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                </tr>\n              }\n            </tbody>\n          </table>\n        </div>\n      }\n\n      <table\n        class=\"grid-table grid-body grid-body--main mb-0\"\n        [ngClass]=\"tableClassList\"\n        [style.width.px]=\"tablePixelWidth\"\n        role=\"grid\"\n        [attr.aria-rowcount]=\"ariaRowCount()\"\n        [attr.aria-colcount]=\"ariaColCount()\"\n        [attr.aria-readonly]=\"enableEdit || enableAdd ? 'false' : 'true'\"\n        [attr.aria-label]=\"tableOptions?.caption || null\"\n      >\n        <colgroup\n          ngbDatagridColgroup\n          [grid]=\"gridHost\"\n          [ngbSyncColgroup]=\"colgroupSyncId\"\n          syncRole=\"body\"\n          [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n        ></colgroup>\n\n        <tbody\n          [ngbDndList]=\"paged\"\n          [dndDisabled]=\"!isRowReorderEnabled()\"\n          (dndDropped)=\"onRowDrop($event)\"\n        >\n          @if (!hasRenderableRows()) {\n          <tr class=\"ngb-grid__empty-row\">\n            <td [attr.colspan]=\"ariaColCount()\" class=\"ngb-grid__empty text-center text-muted py-4\">\n              {{ emptyStateLabel() }}\n            </td>\n          </tr>\n          }\n\n          @if (addingNew) {\n          <tr\n            ngbDatagridAddRow\n            [grid]=\"gridHost\"\n            [formGroup]=\"addForm\"\n          ></tr>\n          }\n\n          @for (item of renderRows; track item.key) {\n            @if (item.kind === 'group') {\n              <tr\n                class=\"grid-group-row\"\n                [attr.data-group-key]=\"item.key\"\n                [attr.data-group-level]=\"item.level\"\n              >\n                @if (showSelectionColumn()) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @if (rowDetailTpl) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @if (stickyRowsEnabled) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @for (col of visibleColumns; track col.field) {\n                  @if (shouldRenderGroupCell(col, item.group)) {\n                  <td\n                    class=\"grid-group-row__cell\"\n                    [class.grid-group-row__cell--lead]=\"isGroupLeadColumn(col, item.group)\"\n                    [attr.colspan]=\"groupCellColspan(col, item.group)\"\n                  >\n                    @if (isGroupLeadColumn(col, item.group)) {\n                      <button\n                        type=\"button\"\n                        class=\"grid-group-row__toggle\"\n                        (click)=\"toggleGroupCollapsed(item.group, item.level, item.startIndex)\"\n                        [attr.aria-expanded]=\"!item.collapsed\"\n                      >\n                        <span\n                          class=\"bi\"\n                          [ngClass]=\"item.collapsed ? 'bi-chevron-right' : 'bi-chevron-down'\"\n                          aria-hidden=\"true\"\n                        ></span>\n                        <span class=\"grid-group-row__content\" [style.padding-inline-start.rem]=\"groupRowIndent(item.level)\">\n                          @if (groupHeaderTpl) {\n                            <ng-container\n                              [ngTemplateOutlet]=\"groupHeaderTpl.template\"\n                              [ngTemplateOutletContext]=\"groupHeaderContext(item.group)\"\n                            ></ng-container>\n                          } @else {\n                            <span class=\"grid-group-row__label\">{{ groupRowLabel(item.group) }}</span>\n                            <span class=\"grid-group-row__count\">{{ groupRowCountLabel(item.group) }}</span>\n                          }\n                        </span>\n                      </button>\n                      @if (groupHeaderColumnTemplate(groupColumnField(col)); as tpl) {\n                        <div class=\"grid-group-row__column-slot\">\n                          <ng-container\n                            [ngTemplateOutlet]=\"tpl.template\"\n                            [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                          ></ng-container>\n                        </div>\n                      }\n                    } @else if (groupHeaderColumnTemplate(groupColumnField(col)); as tpl) {\n                      <div class=\"grid-group-row__column-slot\">\n                        <ng-container\n                          [ngTemplateOutlet]=\"tpl.template\"\n                          [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                        ></ng-container>\n                      </div>\n                    }\n                  </td>\n                  }\n                }\n                @if (showActionsColumn()) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n              </tr>\n            } @else if (item.kind === 'group-footer') {\n              <tr\n                class=\"grid-group-footer-row\"\n                [attr.data-group-key]=\"item.key\"\n                [attr.data-group-level]=\"item.level\"\n              >\n                @if (showSelectionColumn()) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @if (rowDetailTpl) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @if (stickyRowsEnabled) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n                @for (col of visibleColumns; track col.field) {\n                  <td class=\"grid-group-footer-row__cell\">\n                    @if (groupFooterTemplate(groupColumnField(col)); as tpl) {\n                      <div class=\"grid-group-row__column-slot\">\n                        <ng-container\n                          [ngTemplateOutlet]=\"tpl.template\"\n                          [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                        ></ng-container>\n                      </div>\n                    }\n                  </td>\n                }\n                @if (showActionsColumn()) {\n                  <td class=\"grid-group-row__utility-cell\"></td>\n                }\n              </tr>\n            } @else {\n              <tr\n                class=\"grid-data-row\"\n                ngbDatagridDataRow\n                [grid]=\"gridHost\"\n                [renderTick]=\"renderTick\"\n                [row]=\"item.row\"\n                [index]=\"item.pagedIndex\"\n                [selected]=\"isRowSelected(item.row, item.pagedIndex)\"\n                [ngbDndItem]=\"item.row\"\n                [dndIndex]=\"item.pagedIndex\"\n                [dndDisabled]=\"!isRowReorderEnabled()\"\n                (click)=\"onRowSelect($event, item.pagedIndex); onRowClick($event, item.pagedIndex)\"\n                [formGroup]=\"editForm\"\n                [class.sticky-row]=\"isRowSticky(item.row, item.pagedIndex)\"\n                [class.row-selected]=\"isRowSelected(item.row, item.pagedIndex)\"\n                [class.row-highlight]=\"isRowHighlighted(item.row, item.pagedIndex)\"\n                [class.grid-row--reorderable]=\"isRowReorderEnabled()\"\n                [ngClass]=\"resolveRowClass(item.row, item.pagedIndex)\"\n                [ngStyle]=\"resolveRowStyle(item.row, item.pagedIndex)\"\n                [attr.aria-selected]=\"isRowSelected(item.row, item.pagedIndex) ? 'true' : null\"\n                [style.top.px]=\"stickyTop(item.row, item.pagedIndex)\"\n                [style.z-index]=\"isRowSticky(item.row, item.pagedIndex) ? 3 : null\"\n              ></tr>\n\n              @if (rowDetailTpl && isExpanded(item.pagedIndex)) {\n              <tr\n                ngbDatagridDetailRow\n                [grid]=\"gridHost\"\n                [row]=\"item.row\"\n                [index]=\"item.pagedIndex\"\n                [attr.id]=\"'dg-row-detail-' + item.pagedIndex\"\n              ></tr>\n              }\n            }\n          }\n        </tbody>\n      </table>\n\n      @if (hasStickyGroupFooters()) {\n        <div\n          class=\"ngb-grid__group-sticky-layer ngb-grid__group-sticky-layer--bottom\"\n          [style.transform]=\"'translateY(' + stickyGroupFooterTranslateY + 'px)'\"\n        >\n          <table\n            class=\"grid-table grid-group-sticky-table mb-0\"\n            [ngClass]=\"tableClassList\"\n            [style.width.px]=\"tablePixelWidth\"\n            role=\"presentation\"\n          >\n            <colgroup>\n              @for (width of stickyGroupOverlayColumnWidths; track $index) {\n                <col [style.width.px]=\"width || null\" />\n              }\n            </colgroup>\n            <tbody>\n              @for (item of stickyGroupFooterRows; track item.key) {\n                <tr class=\"grid-group-footer-row grid-group-footer-row--overlay\">\n                  @if (showSelectionColumn()) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @if (rowDetailTpl) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @if (stickyRowsEnabled) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                  @for (col of visibleColumns; track col.field) {\n                    <td class=\"grid-group-footer-row__cell\">\n                      @if (groupFooterTemplate(groupColumnField(col)); as tpl) {\n                        <div class=\"grid-group-row__column-slot\">\n                          <ng-container\n                            [ngTemplateOutlet]=\"tpl.template\"\n                            [ngTemplateOutletContext]=\"groupColumnContext(item.group, col)\"\n                          ></ng-container>\n                        </div>\n                      }\n                    </td>\n                  }\n                  @if (showActionsColumn()) {\n                    <td class=\"grid-group-row__utility-cell\"></td>\n                  }\n                </tr>\n              }\n            </tbody>\n          </table>\n        </div>\n      }\n    </div>\n\n    <table class=\"table grid-table grid-foot mb-0\" [style.width.px]=\"tablePixelWidth\">\n      <colgroup>\n        @for (col of visibleColumns; track col.field) {\n          <col [style.width.px]=\"col?.width\" />\n        }\n      </colgroup>\n      <tbody>\n        <tr>\n          <td [attr.colspan]=\"visibleColumns.length\" width=\"100%\">\n            @if (paginationActive && pagerShowsAt('bottom')) {\n              <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"bottom\"></ngb-datagrid-footer>\n            }\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n\n  @if (externalEditOpen) {\n    <ngb-datagrid-external-editor [grid]=\"gridHost\"></ngb-datagrid-external-editor>\n  }\n\n  @if (openFilterMenuField && openFilterMenuColumn && openFilterMenuAnchor) {\n  <ngb-datagrid-filter-menu-panel\n    [grid]=\"gridHost\"\n    [col]=\"openFilterMenuColumn\"\n    [anchor]=\"openFilterMenuAnchor\"\n  />\n  }\n\n  @if (openRowFilterField && openRowFilterColumn && openRowFilterOperatorAnchor) {\n  <ngb-datagrid-row-filter-operator-panel\n    [grid]=\"gridHost\"\n    [col]=\"openRowFilterColumn\"\n    [anchor]=\"openRowFilterOperatorAnchor\"\n  />\n  }\n</div>\n","import type { Datagrid } from '../datagrid/datagrid.component';\n\n/** Layout-toolbar tools receive the grid from the toolbar host. */\nexport interface NgbDatagridToolHost {\n  bindHostGrid(grid: Datagrid<any>): void;\n}\n\nexport function resolveDatagridToolGrid(\n  gridInput: Datagrid<any> | undefined,\n  hostGrid: Datagrid<any> | undefined,\n  toolName: string\n): Datagrid<any> {\n  const resolved = gridInput ?? hostGrid;\n  if (!resolved) {\n    throw new Error(\n      `${toolName}: place inside ngb-datagrid-layout-toolbar with [grid], or pass [grid] on the tool.`\n    );\n  }\n  return resolved;\n}\n","import { Injectable } from '@angular/core';\n\nexport type NgbDatagridLayoutToolbarPanelId = 'filter' | 'sort' | 'columns';\n\n/** Ensures only one layout-toolbar panel is open at a time. */\n@Injectable()\nexport class NgbDatagridLayoutToolbarCoordinator {\n  private readonly closers = new Map<NgbDatagridLayoutToolbarPanelId, () => void>();\n\n  register(id: NgbDatagridLayoutToolbarPanelId, close: () => void): void {\n    this.closers.set(id, close);\n  }\n\n  unregister(id: NgbDatagridLayoutToolbarPanelId): void {\n    this.closers.delete(id);\n  }\n\n  openExclusive(id: NgbDatagridLayoutToolbarPanelId): void {\n    for (const [panelId, close] of this.closers) {\n      if (panelId !== id) close();\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  inject,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n  selector: 'ngb-datagrid-column-chooser-tool',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  template: `\n    @if (chooserColumns.length) {\n    <div class=\"ngb-layout-tool\">\n      <button\n        type=\"button\"\n        class=\"ngb-layout-tool__trigger\"\n        [class.ngb-layout-tool__trigger--open]=\"open\"\n        (click)=\"togglePanel($event)\"\n        [attr.aria-expanded]=\"open\"\n        aria-haspopup=\"dialog\"\n      >\n        <span class=\"bi bi-layout-three-columns\" aria-hidden=\"true\"></span>\n        <span>{{ label }}</span>\n      </button>\n\n      @if (open) {\n      <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--end ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n        <div class=\"ngb-column-chooser__search\">\n          <input\n            ngbDatagridControl\n            type=\"search\"\n            [(ngModel)]=\"searchTerm\"\n            placeholder=\"Search...\"\n            aria-label=\"Search columns\"\n          />\n        </div>\n\n        <div class=\"ngb-column-chooser__list\">\n          <label class=\"ngb-column-chooser__option\">\n            <input type=\"checkbox\" [checked]=\"allVisible\" [indeterminate]=\"partiallyVisible\" (change)=\"toggleAll()\" />\n            <span>Select all</span>\n          </label>\n\n          @for (col of filteredColumns; track col.field) {\n            <label class=\"ngb-column-chooser__option\">\n              <input type=\"checkbox\" [checked]=\"draftVisibility[col.field]\" (change)=\"toggleColumn(col.field)\" />\n              <span>{{ col.header }}</span>\n            </label>\n          }\n        </div>\n\n        <div class=\"ngb-column-chooser__summary\">{{ selectedCount }} Selected items</div>\n\n        <div class=\"ngb-column-chooser__actions\">\n          <button type=\"button\" ngbDatagridButton=\"primary\" (click)=\"apply()\">\n            <span class=\"bi bi-check-lg\" aria-hidden=\"true\"></span>\n            <span>Apply</span>\n          </button>\n          <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"resetDraft()\">\n            <span class=\"bi bi-arrow-counterclockwise\" aria-hidden=\"true\"></span>\n            <span>Reset</span>\n          </button>\n        </div>\n      </div>\n      }\n    </div>\n    }\n  `,\n  styleUrls: ['./datagrid-layout-toolbar.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridColumnChooserToolComponent implements OnChanges, OnInit, OnDestroy, NgbDatagridToolHost {\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n  @Input() grid?: Datagrid<any>;\n  @Input() label = 'Columns';\n\n  private toolbarGrid?: Datagrid<any>;\n\n  open = false;\n  searchTerm = '';\n  draftVisibility: Record<string, boolean> = {};\n\n  bindHostGrid(grid: Datagrid<any>): void {\n    this.toolbarGrid = grid;\n    this.resetDraft(false);\n    this.cdr.markForCheck();\n  }\n\n  private resolvedGrid(): Datagrid<any> | null {\n    return this.grid ?? this.toolbarGrid ?? null;\n  }\n\n  get activeGrid(): Datagrid<any> {\n    return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-column-chooser-tool');\n  }\n\n  get chooserColumns() {\n    const grid = this.resolvedGrid();\n    return grid?.resolvedColumns ?? [];\n  }\n\n  get filteredColumns() {\n    const query = this.searchTerm.trim().toLowerCase();\n    if (!query) return this.chooserColumns;\n    return this.chooserColumns.filter((col) =>\n      col.header.toLowerCase().includes(query) || (col.field as string).toLowerCase().includes(query)\n    );\n  }\n\n  get selectedCount(): number {\n    return Object.values(this.draftVisibility).filter(Boolean).length;\n  }\n\n  get allVisible(): boolean {\n    return this.chooserColumns.every((col) => this.draftVisibility[col.field as string]);\n  }\n\n  get partiallyVisible(): boolean {\n    const count = this.selectedCount;\n    return count > 0 && count < this.chooserColumns.length;\n  }\n\n  ngOnInit(): void {\n    this.coordinator?.register('columns', () => this.closePanel());\n    if (this.resolvedGrid()) {\n      this.resetDraft(false);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.coordinator?.unregister('columns');\n  }\n\n  ngOnChanges(): void {\n    this.resetDraft(false);\n  }\n\n  togglePanel(event: MouseEvent): void {\n    event.stopPropagation();\n    const willOpen = !this.open;\n    if (willOpen) this.coordinator?.openExclusive('columns');\n    this.open = willOpen;\n    if (this.open) this.resetDraft(false);\n    this.cdr.markForCheck();\n  }\n\n  private closePanel(): void {\n    if (!this.open) return;\n    this.open = false;\n    this.cdr.markForCheck();\n  }\n\n  toggleColumn(field: string): void {\n    this.draftVisibility[field] = !this.draftVisibility[field];\n    this.cdr.markForCheck();\n  }\n\n  toggleAll(): void {\n    const next = !this.allVisible;\n    for (const col of this.chooserColumns) {\n      this.draftVisibility[col.field as string] = next;\n    }\n    this.cdr.markForCheck();\n  }\n\n  apply(): void {\n    this.activeGrid.applyColumnVisibility(this.draftVisibility);\n    this.open = false;\n    this.cdr.markForCheck();\n  }\n\n  resetDraft(mark = true): void {\n    const next: Record<string, boolean> = {};\n    for (const col of this.chooserColumns) {\n      next[col.field as string] = !col.hidden;\n    }\n    this.draftVisibility = next;\n    if (mark) this.cdr.markForCheck();\n  }\n\n  @HostListener('document:click', ['$event'])\n  closeOnOutsideClick(event: MouseEvent): void {\n    if (!this.open) return;\n    if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-column-chooser-tool')) return;\n    this.closePanel();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ColumnDef } from '../models/column-def';\nimport type { NgbMenuFilterConditionDraft } from '../models/filtering';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbFilterOperator } from '../models/filtering';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n  selector: 'ngb-datagrid-filter-tool',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  template: `\n    @if (filterableColumns.length) {\n    <div class=\"ngb-layout-tool\">\n      <button\n        type=\"button\"\n        class=\"ngb-layout-tool__trigger\"\n        [class.ngb-layout-tool__trigger--open]=\"open\"\n        (click)=\"togglePanel($event)\"\n        [attr.aria-expanded]=\"open\"\n        aria-haspopup=\"dialog\"\n      >\n        <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n        <span>{{ label }}</span>\n      </button>\n\n      @if (open) {\n      <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n        <div class=\"ngb-filter-accordion\">\n          @for (col of filterableColumns; track col.field) {\n          <section class=\"ngb-filter-accordion__section\">\n            <button\n              type=\"button\"\n              class=\"ngb-filter-accordion__header\"\n              (click)=\"toggleSection(col.field)\"\n              [attr.aria-expanded]=\"expandedField === col.field\"\n            >\n              <span>{{ col.header }}</span>\n              <span class=\"bi\" [ngClass]=\"expandedField === col.field ? 'bi-chevron-up' : 'bi-chevron-down'\" aria-hidden=\"true\"></span>\n            </button>\n\n            @if (expandedField === col.field) {\n            <div class=\"ngb-filter-accordion__body grid-filter-multi-panel\">\n              @for (condition of menuConditions(col); track $index; let conditionIndex = $index) {\n                @if (conditionIndex > 0) {\n                <div class=\"grid-filter-join-select\">\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-join-select__control\"\n                    [ngModel]=\"activeGrid.ensureMenuJoinLogic(col)\"\n                    (ngModelChange)=\"activeGrid.setMenuJoinLogic(col, $event)\"\n                    aria-label=\"Combine conditions with\"\n                  >\n                    <option [ngValue]=\"'and'\">And</option>\n                    <option [ngValue]=\"'or'\">Or</option>\n                  </select>\n                </div>\n                }\n\n                <select\n                  ngbDatagridControl\n                  class=\"grid-filter-operator-select\"\n                  [(ngModel)]=\"condition.operator\"\n                  [attr.aria-label]=\"'Filter operator for ' + col.header\"\n                >\n                  @for (op of operatorsFor(col); track op) {\n                    <option [ngValue]=\"op\">{{ activeGrid.rowFilterOperatorLabel(col, op) }}</option>\n                  }\n                </select>\n\n                @switch (activeGrid.getColumnFilterType(col)) {\n                  @case ('date') {\n                  <input\n                    ngbDatagridControl\n                    class=\"grid-filter-value-input\"\n                    type=\"date\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n                    [attr.aria-label]=\"'Filter value for ' + col.header\"\n                  />\n                  }\n                  @case ('boolean') {\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-value-select\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n                  >\n                    <option [ngValue]=\"''\">Select</option>\n                    <option [ngValue]=\"true\">True</option>\n                    <option [ngValue]=\"false\">False</option>\n                  </select>\n                  }\n                  @case ('select') {\n                  <select\n                    ngbDatagridControl\n                    class=\"grid-filter-value-select\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n                  >\n                    <option [ngValue]=\"''\">Select</option>\n                    @for (option of col.options ?? []; track option.value) {\n                      <option [ngValue]=\"option.value\">{{ option.label }}</option>\n                    }\n                  </select>\n                  }\n                  @default {\n                  <input\n                    ngbDatagridControl\n                    class=\"grid-filter-value-input\"\n                    [type]=\"activeGrid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n                    [(ngModel)]=\"condition.value\"\n                    [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n                    [attr.aria-label]=\"'Filter value for ' + col.header\"\n                  />\n                  }\n                }\n              }\n\n              <div class=\"ngb-filter-accordion__actions grid-filter-menu-surface__actions--split\">\n                <button\n                  type=\"button\"\n                  class=\"grid-filter-apply grid-filter-apply--secondary\"\n                  ngbDatagridButton=\"secondary\"\n                  [disabled]=\"!activeGrid.canApplyMenuFilter(col)\"\n                  (click)=\"applyColumn(col)\"\n                >\n                  Filter\n                </button>\n                <button\n                  type=\"button\"\n                  class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n                  ngbDatagridButton=\"secondary\"\n                  [disabled]=\"!activeGrid.canClearMenuFilter(col)\"\n                  (click)=\"clearColumn(col)\"\n                >\n                  Clear\n                </button>\n              </div>\n            </div>\n            }\n          </section>\n          }\n        </div>\n\n        <div class=\"ngb-layout-tool__footer\">\n          <button type=\"button\" class=\"w-100\" ngbDatagridButton=\"secondary\" (click)=\"clearAll()\">\n            <span class=\"bi bi-funnel-fill\" aria-hidden=\"true\"></span>\n            <span>Clear all filters</span>\n          </button>\n        </div>\n      </div>\n      }\n    </div>\n    }\n  `,\n  styleUrls: ['./datagrid-layout-toolbar.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridFilterToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n  /** Optional override when the tool is not inside `ngb-datagrid-layout-toolbar`. */\n  @Input() grid?: Datagrid<any>;\n  @Input() label = 'Filter';\n\n  private toolbarGrid?: Datagrid<any>;\n\n  open = false;\n  expandedField: string | null = null;\n\n  ngOnInit(): void {\n    this.coordinator?.register('filter', () => this.closePanel());\n  }\n\n  ngOnDestroy(): void {\n    this.coordinator?.unregister('filter');\n  }\n\n  bindHostGrid(grid: Datagrid<any>): void {\n    this.toolbarGrid = grid;\n  }\n\n  private resolvedGrid(): Datagrid<any> | null {\n    return this.grid ?? this.toolbarGrid ?? null;\n  }\n\n  get activeGrid(): Datagrid<any> {\n    return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-filter-tool');\n  }\n\n  get filterableColumns(): ColumnDef<any>[] {\n    const grid = this.resolvedGrid();\n    if (!grid) return [];\n    return grid.visibleColumns.filter((col) => col.filterable && grid.isFilteringEnabled());\n  }\n\n  menuConditions(col: ColumnDef<any>): NgbMenuFilterConditionDraft[] {\n    return this.activeGrid.ensureMenuDraftConditions(col);\n  }\n\n  togglePanel(event: MouseEvent): void {\n    event.stopPropagation();\n    const willOpen = !this.open;\n    if (willOpen) this.coordinator?.openExclusive('filter');\n    this.open = willOpen;\n    if (this.open && !this.expandedField && this.filterableColumns.length) {\n      this.expandedField = this.filterableColumns[0].field as string;\n    }\n    this.cdr.markForCheck();\n  }\n\n  private closePanel(): void {\n    if (!this.open) return;\n    this.open = false;\n    this.cdr.markForCheck();\n  }\n\n  toggleSection(field: string): void {\n    this.expandedField = this.expandedField === field ? null : field;\n    this.cdr.markForCheck();\n  }\n\n  operatorsFor(col: ColumnDef<any>): NgbFilterOperator[] {\n    return this.activeGrid.getAllowedOperators(col);\n  }\n\n  applyColumn(col: ColumnDef<any>): void {\n    this.activeGrid.applyMenuFilter(col);\n    this.cdr.markForCheck();\n  }\n\n  clearColumn(col: ColumnDef<any>): void {\n    this.activeGrid.clearMenuFilter(col);\n    this.cdr.markForCheck();\n  }\n\n  clearAll(): void {\n    this.activeGrid.clearAllFilters();\n    this.cdr.markForCheck();\n  }\n\n  @HostListener('document:click', ['$event'])\n  closeOnOutsideClick(event: MouseEvent): void {\n    if (!this.open) return;\n    if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-filter-tool')) return;\n    this.closePanel();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  ViewEncapsulation,\n} from '@angular/core';\nimport type { ColumnDef } from '../models/column-def';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n  selector: 'ngb-datagrid-sort-tool',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    @if (sortableColumns.length) {\n    <div class=\"ngb-layout-tool\">\n      <button\n        type=\"button\"\n        class=\"ngb-layout-tool__trigger\"\n        [class.ngb-layout-tool__trigger--open]=\"open\"\n        (click)=\"togglePanel($event)\"\n        [attr.aria-expanded]=\"open\"\n        aria-haspopup=\"menu\"\n      >\n        <span class=\"bi bi-arrow-down-up\" aria-hidden=\"true\"></span>\n        <span>{{ label }}</span>\n      </button>\n\n      @if (open) {\n      <div class=\"ngb-layout-tool__panel\" (click)=\"$event.stopPropagation()\">\n        @for (col of sortableColumns; track col.field) {\n        <button\n          type=\"button\"\n          class=\"ngb-sort-list__item\"\n          [class.ngb-sort-list__item--active]=\"activeGrid.sort.active === col.field\"\n          (click)=\"toggleSort(col)\"\n        >\n          <span>{{ col.header }}</span>\n          @if (activeGrid.sort.active === col.field) {\n          <span>\n            {{ activeGrid.sort.direction === 'asc' ? '▲' : activeGrid.sort.direction === 'desc' ? '▼' : '' }}\n          </span>\n          }\n        </button>\n        }\n\n        <div class=\"ngb-layout-tool__footer\">\n          <button type=\"button\" class=\"w-100 btn btn-link text-decoration-none\" (click)=\"clearSorting()\">\n            <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n            <span>Clear sorting</span>\n          </button>\n        </div>\n      </div>\n      }\n    </div>\n    }\n  `,\n  styleUrls: ['./datagrid-layout-toolbar.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridSortToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n  @Input() grid?: Datagrid<any>;\n  @Input() label = 'Sort';\n\n  private toolbarGrid?: Datagrid<any>;\n\n  open = false;\n\n  ngOnInit(): void {\n    this.coordinator?.register('sort', () => this.closePanel());\n  }\n\n  ngOnDestroy(): void {\n    this.coordinator?.unregister('sort');\n  }\n\n  bindHostGrid(grid: Datagrid<any>): void {\n    this.toolbarGrid = grid;\n  }\n\n  private resolvedGrid(): Datagrid<any> | null {\n    return this.grid ?? this.toolbarGrid ?? null;\n  }\n\n  get activeGrid(): Datagrid<any> {\n    return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-sort-tool');\n  }\n\n  get sortableColumns(): ColumnDef<any>[] {\n    const grid = this.resolvedGrid();\n    if (!grid) return [];\n    return grid.visibleColumns.filter((col) => grid.enableSorting && col.sortable !== false);\n  }\n\n  togglePanel(event: MouseEvent): void {\n    event.stopPropagation();\n    const willOpen = !this.open;\n    if (willOpen) this.coordinator?.openExclusive('sort');\n    this.open = willOpen;\n    this.cdr.markForCheck();\n  }\n\n  private closePanel(): void {\n    if (!this.open) return;\n    this.open = false;\n    this.cdr.markForCheck();\n  }\n\n  toggleSort(col: ColumnDef<any>): void {\n    this.activeGrid.toggleSort(col.field as string);\n    this.cdr.markForCheck();\n  }\n\n  clearSorting(): void {\n    this.activeGrid.clearSorting();\n    this.cdr.markForCheck();\n  }\n\n  @HostListener('document:click', ['$event'])\n  closeOnOutsideClick(event: MouseEvent): void {\n    if (!this.open) return;\n    if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-sort-tool')) return;\n    this.closePanel();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  Input,\n  OnChanges,\n  QueryList,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbDatagridColumnChooserToolComponent } from './datagrid-column-chooser-tool.component';\nimport { NgbDatagridFilterToolComponent } from './datagrid-filter-tool.component';\nimport { NgbDatagridSortToolComponent } from './datagrid-sort-tool.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n  selector: 'ngb-datagrid-layout-toolbar',\n  standalone: true,\n  imports: [CommonModule],\n  providers: [NgbDatagridLayoutToolbarCoordinator],\n  template: `\n    <div class=\"ngb-layout-toolbar\" role=\"toolbar\" [attr.aria-label]=\"ariaLabel\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  styleUrls: ['./datagrid-layout-toolbar.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarComponent implements AfterContentInit, OnChanges {\n  /**\n   * Grid instance for toolbar tools. Child tools inherit this via `bindHostGrid`\n   * and do not need their own `[grid]` binding.\n   */\n  @Input({ required: true }) grid!: Datagrid<any>;\n  @Input() ariaLabel = 'Grid layout toolbar';\n\n  @ContentChildren(NgbDatagridFilterToolComponent) private filterTools?: QueryList<NgbDatagridFilterToolComponent>;\n  @ContentChildren(NgbDatagridSortToolComponent) private sortTools?: QueryList<NgbDatagridSortToolComponent>;\n  @ContentChildren(NgbDatagridColumnChooserToolComponent) private columnTools?: QueryList<NgbDatagridColumnChooserToolComponent>;\n\n  ngAfterContentInit(): void {\n    this.syncToolHosts();\n    this.filterTools?.changes.subscribe(() => this.syncToolHosts());\n    this.sortTools?.changes.subscribe(() => this.syncToolHosts());\n    this.columnTools?.changes.subscribe(() => this.syncToolHosts());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['grid']) this.syncToolHosts();\n  }\n\n  private syncToolHosts(): void {\n    if (!this.grid) return;\n    const tools: NgbDatagridToolHost[] = [\n      ...(this.filterTools ?? []),\n      ...(this.sortTools ?? []),\n      ...(this.columnTools ?? []),\n    ];\n    tools.forEach((tool) => tool.bindHostGrid(this.grid));\n  }\n}\n\n@Component({\n  selector: 'ngb-datagrid-layout-toolbar-spacer',\n  standalone: true,\n  template: `<div class=\"ngb-layout-toolbar__spacer\" aria-hidden=\"true\"></div>`,\n  styleUrls: ['./datagrid-layout-toolbar.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarSpacerComponent {}\n","import type { ChartConfiguration, ChartType, TooltipItem } from 'chart.js';\nimport {\n  NgbColumnSelectionChartOptions,\n  NgbDataAggregate,\n  NgbDataChartConfig,\n  NgbDataChartSeries,\n  NgbDataChartType,\n  NgbDataMetricDef,\n  NgbFullGridChartOptions,\n  NgbRowSelectionChartOptions,\n  NgbSparklinePoint,\n} from './data-chart.types';\n\nconst DEFAULT_PALETTE = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n\nconst clampNumber = (value: unknown): number => {\n  const parsed = typeof value === 'number' ? value : Number(value);\n  return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst defaultFormatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 });\n\nexport const ngbChartPalette = (index: number): string => DEFAULT_PALETTE[index % DEFAULT_PALETTE.length];\n\nconst sum = (values: number[]): number => values.reduce((acc, value) => acc + value, 0);\n\nexport const ngbAggregateValues = (values: number[], aggregate: NgbDataAggregate = 'sum'): number => {\n  if (!values.length) return 0;\n  switch (aggregate) {\n    case 'avg':\n      return sum(values) / values.length;\n    case 'min':\n      return Math.min(...values);\n    case 'max':\n      return Math.max(...values);\n    case 'count':\n      return values.length;\n    case 'sum':\n    default:\n      return sum(values);\n  }\n};\n\nexport const ngbBuildRowSelectionChartData = <T>(\n  rows: T[],\n  options: NgbRowSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n  type: options.chartType ?? 'bar',\n  title: options.title,\n  labels: options.metrics.map((metric) => metric.label),\n  valueFormatter: options.valueFormatter,\n  series: rows.map((row, index) => ({\n    key: `row-${index}`,\n    label: options.seriesLabel?.(row, index) ?? `Row ${index + 1}`,\n    color: ngbChartPalette(index),\n    data: options.metrics.map((metric) => clampNumber(metric.accessor(row))),\n  })),\n});\n\nexport const ngbBuildColumnSelectionChartData = <T>(\n  rows: T[],\n  options: NgbColumnSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n  type: options.chartType ?? 'bar',\n  title: options.title,\n  labels: rows.map((row) => options.dimension.accessor(row)),\n  valueFormatter: options.valueFormatter,\n  series: options.metrics.map((metric, index) => ({\n    key: metric.key,\n    label: metric.label,\n    color: metric.color ?? ngbChartPalette(index),\n    data: rows.map((row) => clampNumber(metric.accessor(row))),\n  })),\n});\n\nexport const ngbBuildFullGridChartData = <T>(\n  rows: T[],\n  options: NgbFullGridChartOptions<T>,\n): NgbDataChartConfig => {\n  const grouped = new Map<string, number[]>();\n  rows.forEach((row) => {\n    const key = options.dimension.accessor(row);\n    const bucket = grouped.get(key) ?? [];\n    bucket.push(clampNumber(options.metric.accessor(row)));\n    grouped.set(key, bucket);\n  });\n\n  const entries = Array.from(grouped.entries()).map(([label, values]) => ({\n    label,\n    value: ngbAggregateValues(values, options.aggregate ?? 'sum'),\n  }));\n\n  if (options.sort) {\n    entries.sort((left, right) =>\n      options.sort === 'asc' ? left.value - right.value : right.value - left.value,\n    );\n  }\n\n  const limited = options.limit ? entries.slice(0, options.limit) : entries;\n\n  return {\n    type: options.chartType ?? 'bar',\n    title: options.title,\n    labels: limited.map((entry) => entry.label),\n    valueFormatter: options.valueFormatter,\n    series: [\n      {\n        key: options.metric.key,\n        label: options.metric.label,\n        color: options.metric.color ?? ngbChartPalette(0),\n        data: limited.map((entry) => entry.value),\n      },\n    ],\n  };\n};\n\nexport const ngbBuildSparklinePoints = (values: number[], width = 112, height = 28, padding = 2): NgbSparklinePoint[] => {\n  if (!values.length) return [];\n  if (values.length === 1) {\n    return [{ x: width / 2, y: height / 2 }];\n  }\n\n  const min = Math.min(...values);\n  const max = Math.max(...values);\n  const xStep = (width - padding * 2) / (values.length - 1);\n  const yRange = max - min || 1;\n\n  return values.map((value, index) => ({\n    x: padding + index * xStep,\n    y: height - padding - ((value - min) / yRange) * (height - padding * 2),\n  }));\n};\n\nconst tooltipFormatter = (value: number, formatter?: (value: number) => string): string =>\n  formatter ? formatter(value) : defaultFormatter.format(value);\n\nconst chartLayoutOptions = (_height: number) => ({\n  animation: false as const,\n  responsive: true,\n  maintainAspectRatio: false,\n  resizeDelay: 50,\n  layout: { padding: { top: 4, right: 8, bottom: 4, left: 4 } },\n});\n\nexport const ngbBuildChartJsConfig = (\n  config: NgbDataChartConfig,\n  height = config.height ?? 320,\n): ChartConfiguration => {\n  const type = config.type === 'area' ? 'line' : (config.type as ChartType);\n  const legendPosition = config.legendPosition ?? 'top';\n  const showLegend = config.showLegend ?? true;\n  const layout = chartLayoutOptions(height);\n\n  if (config.type === 'pie' || config.type === 'doughnut') {\n    if (config.series.length === 1 && config.labels.length > 1) {\n      const series = config.series[0];\n      const colors = config.labels.map((_, index) => ngbChartPalette(index));\n      return {\n        type,\n        data: {\n          labels: config.labels,\n          datasets: [{\n            label: series.label,\n            data: series.data.map((value) => clampNumber(value)),\n            backgroundColor: colors,\n            borderColor: colors,\n            borderWidth: 1,\n          }],\n        },\n        options: {\n          ...layout,\n          plugins: {\n            legend: { display: showLegend, position: legendPosition },\n            title: { display: !!config.title, text: config.title },\n            tooltip: {\n              callbacks: {\n                label: (ctx: TooltipItem<any>) => {\n                  const label = ctx.label ? `${ctx.label}: ` : '';\n                  return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n                },\n              },\n            },\n          },\n        },\n      };\n    }\n\n    const series = config.series.map((item, index) => ({\n      label: item.label,\n      value: sum(item.data),\n      color: item.color ?? ngbChartPalette(index),\n    }));\n    return {\n      type,\n      data: {\n        labels: series.map((item) => item.label),\n        datasets: [{\n          label: config.title ?? '',\n          data: series.map((item) => item.value),\n          backgroundColor: series.map((item) => item.color),\n          borderColor: series.map((item) => item.color),\n          borderWidth: 1,\n        }],\n      },\n      options: {\n        ...layout,\n        plugins: {\n          legend: { display: showLegend, position: legendPosition },\n          title: { display: !!config.title, text: config.title },\n          tooltip: {\n            callbacks: {\n              label: (ctx: TooltipItem<any>) => {\n                const label = ctx.label ? `${ctx.label}: ` : '';\n                return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n              },\n            },\n          },\n        },\n      },\n    };\n  }\n\n  const series = config.series.map((item, index) => {\n    const color = item.color ?? ngbChartPalette(index);\n    return {\n      label: item.label,\n      data: item.data.map((value) => clampNumber(value)),\n      borderColor: color,\n      backgroundColor: config.type === 'area' ? `${color}66` : `${color}cc`,\n      fill: config.type === 'area',\n      tension: config.type === 'line' || config.type === 'area' ? 0.3 : 0,\n      pointRadius: config.type === 'bar' ? 0 : 3,\n      borderWidth: 2,\n    };\n  });\n\n  return {\n    type,\n    data: {\n      labels: config.labels,\n      datasets: series,\n    },\n    options: {\n      ...layout,\n      interaction: { mode: 'index', intersect: false },\n      scales: {\n        x: {\n          stacked: !!config.stacked,\n          grid: { color: '#eef2f7' },\n          ticks: { color: '#5b6578' },\n        },\n        y: {\n          stacked: !!config.stacked,\n          beginAtZero: true,\n          grid: { color: '#eef2f7' },\n          ticks: {\n            color: '#5b6578',\n            callback: (value) => tooltipFormatter(clampNumber(value), config.valueFormatter),\n          },\n        },\n      },\n      plugins: {\n        legend: { display: showLegend, position: legendPosition },\n        title: { display: !!config.title, text: config.title },\n        tooltip: {\n          callbacks: {\n            label: (ctx: TooltipItem<any>) => {\n              const label = ctx.dataset.label ? `${ctx.dataset.label}: ` : '';\n              return `${label}${tooltipFormatter(clampNumber(ctx.parsed?.y ?? ctx.parsed), config.valueFormatter)}`;\n            },\n          },\n        },\n      },\n    },\n  };\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild } from '@angular/core';\nimport { NgbDataChartConfig } from './data-chart.types';\nimport { ngbBuildChartJsConfig } from './data-chart.helpers';\n\ntype ChartInstance = { destroy(): void };\ntype ChartConstructor = new (context: CanvasRenderingContext2D, config: unknown) => ChartInstance;\n\n@Component({\n  selector: 'ngb-data-chart',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"ngb-data-chart\" [style.height.px]=\"chartHeight\">\n      @if (hasData()) {\n        <canvas #canvas [attr.aria-label]=\"ariaLabel\" role=\"img\"></canvas>\n      } @else {\n        <div class=\"ngb-data-chart__empty\">{{ config?.emptyState || emptyState }}</div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngb-data-chart {\n      position: relative;\n      width: 100%;\n      height: 320px;\n      overflow: hidden;\n    }\n    .ngb-data-chart canvas {\n      display: block;\n      width: 100% !important;\n      height: 100% !important;\n    }\n    .ngb-data-chart__empty {\n      min-height: inherit;\n      display: grid;\n      place-items: center;\n      color: #6b7280;\n      font-size: .95rem;\n      border: 1px dashed #d7deea;\n      border-radius: .75rem;\n      background: #f8fafc;\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataChartComponent implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() config: NgbDataChartConfig | null = null;\n  @Input() ariaLabel = 'Data chart';\n  @Input() emptyState = 'No chart data available.';\n\n  @ViewChild('canvas') private canvas?: ElementRef<HTMLCanvasElement>;\n\n  private chart?: ChartInstance;\n  private chartConstructor?: ChartConstructor;\n  private viewReady = false;\n  private configSignature = '';\n  private rendering = false;\n\n  get chartHeight(): number {\n    return this.config?.height ?? 320;\n  }\n\n  ngAfterViewInit(): void {\n    this.viewReady = true;\n    this.renderChart();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.viewReady) return;\n    if (changes['config']) {\n      this.renderChart();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroyChart();\n  }\n\n  hasData(): boolean {\n    return !!this.config?.series?.some((series) => series.data.some((value) => Number.isFinite(value)));\n  }\n\n  private async renderChart(): Promise<void> {\n    if (this.rendering) return;\n    if (!this.canvas || typeof window === 'undefined') {\n      this.destroyChart();\n      return;\n    }\n\n    if (!this.hasData() || !this.config) {\n      this.destroyChart();\n      this.configSignature = '';\n      return;\n    }\n\n    const signature = this.buildConfigSignature(this.config);\n    const context = this.canvas.nativeElement.getContext('2d');\n    if (!context) return;\n\n    if (this.chart && signature === this.configSignature) {\n      return;\n    }\n\n    this.rendering = true;\n    try {\n      const Chart = await this.loadChartConstructor();\n      if (!Chart) {\n        this.destroyChart();\n        return;\n      }\n      this.destroyChart();\n      this.chart = new Chart(context, ngbBuildChartJsConfig(this.config, this.chartHeight));\n      this.configSignature = signature;\n    } finally {\n      this.rendering = false;\n    }\n  }\n\n  private async loadChartConstructor(): Promise<ChartConstructor | null> {\n    if (this.chartConstructor) return this.chartConstructor;\n    try {\n      const chartModule = await import('chart.js');\n      chartModule.Chart.register(...chartModule.registerables);\n      this.chartConstructor = chartModule.Chart as ChartConstructor;\n      return this.chartConstructor;\n    } catch {\n      return null;\n    }\n  }\n\n  private buildConfigSignature(config: NgbDataChartConfig): string {\n    return JSON.stringify({\n      type: config.type,\n      title: config.title,\n      labels: config.labels,\n      series: config.series,\n      stacked: config.stacked,\n      showLegend: config.showLegend,\n      legendPosition: config.legendPosition,\n    });\n  }\n\n  private destroyChart(): void {\n    this.chart?.destroy();\n    this.chart = undefined;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgbSparklinePoint } from './data-chart.types';\nimport { ngbBuildSparklinePoints } from './data-chart.helpers';\n\n@Component({\n  selector: 'ngb-data-sparkline',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <svg\n      class=\"ngb-data-sparkline\"\n      [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\n      [attr.width]=\"width\"\n      [attr.height]=\"height\"\n      [attr.aria-label]=\"ariaLabel\"\n      role=\"img\"\n      preserveAspectRatio=\"none\"\n    >\n      @if (points.length > 1) {\n        <path [attr.d]=\"path\" fill=\"none\" [attr.stroke]=\"strokeColor\" [attr.stroke-width]=\"strokeWidth\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n        @if (showEndDot) {\n          <circle [attr.cx]=\"points[points.length - 1].x\" [attr.cy]=\"points[points.length - 1].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n        }\n      } @else if (points.length === 1) {\n        <circle [attr.cx]=\"points[0].x\" [attr.cy]=\"points[0].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n      }\n    </svg>\n  `,\n  styles: [`\n    :host { display: inline-flex; align-items: center; }\n    .ngb-data-sparkline { display: block; overflow: visible; }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataSparklineComponent implements OnChanges {\n  @Input() values: number[] = [];\n  /** Cached series used by getters so template bindings stay stable between checks. */\n  series: number[] = [];\n  @Input() width = 112;\n  @Input() height = 28;\n  @Input() strokeWidth = 2;\n  @Input() positiveColor = '#58c46a';\n  @Input() negativeColor = '#ef5350';\n  @Input() neutralColor = '#9aa5b5';\n  @Input() color: string | null = null;\n  @Input() showEndDot = true;\n  @Input() endDotRadius = 2.5;\n  @Input() ariaLabel = 'Sparkline chart';\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['values']) {\n      this.series = [...(this.values ?? [])];\n    }\n  }\n\n  get points(): NgbSparklinePoint[] {\n    return ngbBuildSparklinePoints(this.series, this.width, this.height);\n  }\n\n  get path(): string {\n    if (this.points.length < 2) return '';\n    return this.points.map((point, index) => `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`).join(' ');\n  }\n\n  get strokeColor(): string {\n    if (this.color) return this.color;\n    if (this.series.length < 2) return this.neutralColor;\n    const delta = this.series[this.series.length - 1] - this.series[0];\n    if (delta > 0) return this.positiveColor;\n    if (delta < 0) return this.negativeColor;\n    return this.neutralColor;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  inject,\n} from '@angular/core';\nimport { ColumnDef } from '../models/column-def';\nimport { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbCellTemplate } from '../directives/datagrid-templates.directive';\nimport { NgbDataChartComponent } from './data-chart.component';\nimport { NgbDataSparklineComponent } from './data-sparkline.component';\nimport {\n  ngbBuildColumnSelectionChartData,\n  ngbBuildFullGridChartData,\n  ngbBuildRowSelectionChartData,\n} from './data-chart.helpers';\nimport { NgbDataChartConfig, NgbDataMetricDef } from './data-chart.types';\nimport { NgbGridChartConfig } from './grid-chart.types';\n\nexport interface NgbGridChartSelectionChange<T> {\n  selected: T[];\n  selectedRowIds: Array<string | number>;\n}\n\n@Component({\n  selector: 'ngb-grid-chart',\n  standalone: true,\n  imports: [CommonModule, Datagrid, NgbCellTemplate, NgbDataChartComponent, NgbDataSparklineComponent],\n  template: `\n    <div class=\"ngb-grid-chart\" [class.ngb-grid-chart--full]=\"config?.mode === 'full-grid'\">\n      @if (config?.mode === 'sparklines') {\n        <ngb-datagrid\n          [columns]=\"sparklineColumns\"\n          [data]=\"config?.rows ?? []\"\n          [theme]=\"'bootstrap'\"\n          [enableSorting]=\"false\"\n          [enableFiltering]=\"false\"\n          [enableGlobalFilter]=\"false\"\n          [enablePagination]=\"false\"\n          [tableOptions]=\"tableOptions\"\n        >\n          @if (dimensionTemplate) {\n            <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n              <div class=\"ngb-grid-chart__dimension\">\n                <strong>{{ config!.dimension.accessor(row) }}</strong>\n                @if (config?.subDimension) {\n                  <span class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</span>\n                }\n              </div>\n            </ng-template>\n          }\n          @if (sparklineField) {\n            <ng-template [ngbCell]=\"sparklineField\" let-row=\"row\">\n              <ngb-data-sparkline\n                [values]=\"sparklineValues(row)\"\n                [width]=\"config?.sparkline?.width ?? 112\"\n                [height]=\"config?.sparkline?.height ?? 30\"\n                [color]=\"sparklineColor(row)\"\n                ariaLabel=\"Trend sparkline\"\n              ></ngb-data-sparkline>\n            </ng-template>\n          }\n          <ng-template ngbCell=\"growthPct\" let-value>\n            <span class=\"ngb-grid-chart__growth\" [class.ngb-grid-chart__growth--up]=\"value >= 0\" [class.ngb-grid-chart__growth--down]=\"value < 0\">\n              {{ value > 0 ? '+' : '' }}{{ value | number:'1.1-1' }}%\n            </span>\n          </ng-template>\n        </ngb-datagrid>\n      } @else if (config?.mode === 'full-grid') {\n        <div class=\"ngb-grid-chart__full-layout\">\n          <div class=\"ngb-grid-chart__chart-pane\">\n            <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n          </div>\n          <div class=\"ngb-grid-chart__summary-pane\">\n            <ng-content select=\"[gridChartSummary]\"></ng-content>\n          </div>\n        </div>\n      } @else {\n        <div class=\"ngb-grid-chart__split-layout\">\n          <div class=\"ngb-grid-chart__grid-pane\">\n            <ngb-datagrid\n              [columns]=\"gridColumns\"\n              [data]=\"config?.rows ?? []\"\n              [theme]=\"'bootstrap'\"\n              [enableSorting]=\"false\"\n              [enableFiltering]=\"false\"\n              [enableGlobalFilter]=\"false\"\n              [enablePagination]=\"false\"\n              [selectionMode]=\"config?.mode === 'row-selection' ? 'multiple' : 'none'\"\n              [selectionBehavior]=\"config?.mode === 'row-selection' ? 'checkbox' : 'row'\"\n              [trackBy]=\"rowTrackBy\"\n              [tableOptions]=\"tableOptions\"\n              (selectionChange)=\"onGridSelectionChange($event)\"\n            >\n              @if (dimensionTemplate) {\n                <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n                  <div class=\"ngb-grid-chart__dimension\">\n                    @if (config?.mode === 'row-selection' && isRowSelected(row)) {\n                      <span class=\"ngb-grid-chart__series-dot\" [style.background]=\"seriesColor(row)\"></span>\n                    }\n                    <div>\n                      <strong>{{ config!.dimension.accessor(row) }}</strong>\n                      @if (config?.subDimension) {\n                        <div class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</div>\n                      }\n                    </div>\n                  </div>\n                </ng-template>\n              }\n            </ngb-datagrid>\n          </div>\n          <div class=\"ngb-grid-chart__chart-pane\">\n            <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n            <ng-content select=\"[gridChartFooter]\"></ng-content>\n          </div>\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngb-grid-chart__split-layout,\n    .ngb-grid-chart__full-layout {\n      display: grid;\n      gap: 1rem;\n      align-items: stretch;\n    }\n    .ngb-grid-chart__split-layout {\n      grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);\n    }\n    .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n      grid-template-columns: minmax(0, 1.2fr) minmax(260px, 0.8fr);\n    }\n    .ngb-grid-chart__grid-pane,\n    .ngb-grid-chart__chart-pane,\n    .ngb-grid-chart__summary-pane {\n      min-width: 0;\n    }\n    .ngb-grid-chart__chart-pane {\n      display: flex;\n      flex-direction: column;\n      gap: .5rem;\n    }\n    .ngb-grid-chart__dimension {\n      display: inline-flex;\n      align-items: flex-start;\n      gap: .55rem;\n      min-width: 0;\n    }\n    .ngb-grid-chart__subdimension {\n      display: block;\n      font-size: .82rem;\n      color: #6b7280;\n      font-weight: 500;\n    }\n    .ngb-grid-chart__series-dot {\n      width: .55rem;\n      height: .55rem;\n      border-radius: 999px;\n      margin-top: .35rem;\n      flex: 0 0 auto;\n    }\n    .ngb-grid-chart__growth {\n      font-weight: 700;\n    }\n    .ngb-grid-chart__growth--up { color: #16a34a; }\n    .ngb-grid-chart__growth--down { color: #ef4444; }\n    @media (max-width: 960px) {\n      .ngb-grid-chart__split-layout,\n      .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n        grid-template-columns: 1fr;\n      }\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbGridChartComponent<T = any> implements OnChanges, AfterViewInit, AfterViewChecked {\n  @Input({ required: true }) config!: NgbGridChartConfig<T>;\n  @Input() ariaLabel = 'Grid chart';\n\n  @Output() selectionChange = new EventEmitter<NgbGridChartSelectionChange<T>>();\n\n  @ViewChild(Datagrid) private grid?: Datagrid<T>;\n\n  gridColumns: ColumnDef<T>[] = [];\n  chartConfig: NgbDataChartConfig | null = null;\n  dimensionTemplate = true;\n  sparklineField: string | null = null;\n  sparklineColumns: ColumnDef<T>[] = [];\n\n  readonly tableOptions = { responsive: true, hoverRows: true, zebraStripes: true };\n  readonly rowTrackBy = (index: number, row: T) => this.resolveRowId(row, index);\n\n  private readonly cdr = inject(ChangeDetectorRef);\n  private selectedIds = new Set<string | number>();\n  private activeMetricKeys = new Set<string>();\n  private lastMode: NgbGridChartConfig<T>['mode'] | null = null;\n  private lastMetricKeys = '';\n  private lastChartType = '';\n  private lastRowIds = '';\n  private lastSparklineKey = '';\n  private lastFullGridKey = '';\n  private selectionSeedPending = false;\n  private sparklineSeriesByRowId = new Map<string | number, number[]>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!changes['config'] || !this.config) return;\n    this.syncSelectionFromConfig();\n    this.applyConfigChanges();\n  }\n\n  ngAfterViewInit(): void {\n    if (this.config?.mode === 'row-selection') {\n      this.scheduleSeedSelection();\n    }\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.selectionSeedPending) {\n      this.seedGridSelection();\n    }\n  }\n\n  get chartAriaLabel(): string {\n    return this.config?.chartTitle ?? this.ariaLabel;\n  }\n\n  sparklineValues(row: T): number[] {\n    const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n    const cached = this.sparklineSeriesByRowId.get(id);\n    if (cached) return cached;\n    return this.config?.sparkline?.values(row) ?? [];\n  }\n\n  sparklineColor(row: T): string | null {\n    if (!this.config?.sparkline?.trendColor) return null;\n    const values = this.sparklineValues(row);\n    if (values.length < 2) return null;\n    const delta = values[values.length - 1] - values[0];\n    if (delta > 0) return '#58c46a';\n    if (delta < 0) return '#ef5350';\n    return '#9aa5b5';\n  }\n\n  isRowSelected(row: T): boolean {\n    const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n    return this.selectedIds.has(id);\n  }\n\n  seriesColor(row: T): string {\n    const selected = this.selectedRows();\n    const index = selected.indexOf(row);\n    const palette = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n    return palette[Math.max(0, index) % palette.length];\n  }\n\n  onGridSelectionChange(event: { selected: T[] }): void {\n    this.selectedIds = new Set(event.selected.map((row) => this.resolveRowId(row, this.config.rows.indexOf(row))));\n    this.rebuildChartOnly();\n    this.selectionChange.emit({\n      selected: event.selected,\n      selectedRowIds: Array.from(this.selectedIds),\n    });\n    this.cdr.markForCheck();\n  }\n\n  private applyConfigChanges(): void {\n    const mode = this.config.mode;\n    const metricKeys = [...this.activeMetricKeys].sort().join('|');\n    const rowIds = [...this.selectedIds].sort().join('|');\n    const chartType = this.config.chartType ?? 'bar';\n    const sparklineValuesKey = mode === 'sparklines' && this.config.sparkline?.values\n      ? this.config.rows\n        .map((row) => this.config.sparkline!.values(row).join(','))\n        .join(';')\n      : '';\n    const sparklineKey = `${this.config.sparkline?.field ?? ''}:${this.config.sparkline?.trendColor ? 1 : 0}:${sparklineValuesKey}`;\n    const fullGridDimension = this.config.fullGrid?.dimension ?? this.config.dimension;\n    const fullGridMetricKey = this.config.fullGrid?.metric?.key ?? '';\n    const fullGridKey = mode === 'full-grid'\n      ? `${fullGridMetricKey}|${fullGridDimension.key}|${chartType}`\n      : '';\n\n    const modeChanged = mode !== this.lastMode;\n    const metricsChanged = metricKeys !== this.lastMetricKeys;\n    const rowIdsChanged = rowIds !== this.lastRowIds;\n    const chartTypeChanged = chartType !== this.lastChartType;\n    const sparklineChanged = sparklineKey !== this.lastSparklineKey;\n    const fullGridChanged = fullGridKey !== this.lastFullGridKey;\n\n    this.lastMode = mode;\n    this.lastMetricKeys = metricKeys;\n    this.lastRowIds = rowIds;\n    this.lastChartType = chartType;\n    this.lastSparklineKey = sparklineKey;\n    this.lastFullGridKey = fullGridKey;\n\n    if (mode === 'sparklines') {\n      if (modeChanged || sparklineChanged || metricsChanged) {\n        this.sparklineField = this.config.sparkline?.field ?? null;\n        this.sparklineColumns = this.buildSparklineColumns();\n        this.rebuildSparklineCache();\n      }\n      this.chartConfig = null;\n      this.cdr.markForCheck();\n      return;\n    }\n\n    if (mode === 'full-grid') {\n      if (modeChanged || fullGridChanged || chartTypeChanged) {\n        this.rebuildChartOnly();\n      }\n      this.cdr.markForCheck();\n      return;\n    }\n\n    if (modeChanged || metricsChanged) {\n      this.gridColumns = mode === 'column-selection'\n        ? this.buildColumnSelectionColumns()\n        : this.buildRowSelectionColumns();\n    }\n\n    if (modeChanged || metricsChanged || rowIdsChanged || chartTypeChanged) {\n      this.rebuildChartOnly();\n    }\n\n    if (mode === 'row-selection' && (modeChanged || rowIdsChanged)) {\n      this.scheduleSeedSelection();\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  private rebuildSparklineCache(): void {\n    this.sparklineSeriesByRowId.clear();\n    if (!this.config?.sparkline?.values) return;\n    this.config.rows.forEach((row, index) => {\n      const id = this.resolveRowId(row, index);\n      this.sparklineSeriesByRowId.set(id, this.config.sparkline!.values(row));\n    });\n  }\n\n  private syncSelectionFromConfig(): void {\n    const keys = this.config.selectedMetricKeys ?? this.config.metrics.map((metric) => metric.key);\n    this.activeMetricKeys = new Set(keys);\n    const rowIds = this.config.selectedRowIds ?? [];\n    this.selectedIds = new Set(rowIds);\n  }\n\n  private rebuildChartOnly(): void {\n    if (!this.config || this.config.mode === 'sparklines') return;\n\n    if (this.config.mode === 'row-selection') {\n      this.chartConfig = ngbBuildRowSelectionChartData(this.selectedRows(), {\n        metrics: this.rowMetrics(),\n        seriesLabel: (row) => this.config.dimension.accessor(row),\n        chartType: this.config.chartType,\n        title: this.config.chartTitle,\n        valueFormatter: this.config.valueFormatter,\n      });\n      return;\n    }\n\n    if (this.config.mode === 'column-selection') {\n      this.chartConfig = ngbBuildColumnSelectionChartData(this.config.rows, {\n        dimension: this.config.dimension,\n        metrics: this.activeMetrics(),\n        chartType: this.config.chartType,\n        title: this.config.chartTitle,\n        valueFormatter: this.config.valueFormatter,\n      });\n      return;\n    }\n\n    if (this.config.mode === 'full-grid' && this.config.fullGrid) {\n      this.chartConfig = ngbBuildFullGridChartData(this.config.rows, {\n        dimension: this.config.fullGrid.dimension ?? this.config.dimension,\n        metric: this.config.fullGrid.metric ?? this.config.metrics[0],\n        aggregate: this.config.fullGrid.aggregate,\n        chartType: this.config.chartType ?? this.config.fullGrid.chartType,\n        title: this.config.chartTitle ?? this.config.fullGrid.title,\n        sort: this.config.fullGrid.sort,\n        limit: this.config.fullGrid.limit,\n        valueFormatter: this.config.valueFormatter ?? this.config.fullGrid.valueFormatter,\n      });\n    }\n  }\n\n  private selectedRows(): T[] {\n    return this.config.rows.filter((row, index) => this.selectedIds.has(this.resolveRowId(row, index)));\n  }\n\n  private activeMetrics(): NgbDataMetricDef<T>[] {\n    return this.config.metrics.filter((metric) => this.activeMetricKeys.has(metric.key));\n  }\n\n  private rowMetrics(): NgbDataMetricDef<T>[] {\n    return this.config.rowSelectionMetrics ?? this.config.metrics;\n  }\n\n  private resolveRowId(row: T, index: number): string | number {\n    const candidate = (row as { id?: string | number }).id;\n    return candidate ?? index;\n  }\n\n  private scheduleSeedSelection(): void {\n    this.selectionSeedPending = true;\n    Promise.resolve().then(() => this.seedGridSelection());\n    setTimeout(() => this.seedGridSelection());\n    requestAnimationFrame(() => this.seedGridSelection());\n  }\n\n  private seedGridSelection(): void {\n    if (this.config?.mode !== 'row-selection' || !this.grid) return;\n    const ids = this.config.rows\n      .map((row, index) => this.resolveRowId(row, index))\n      .filter((id) => this.selectedIds.has(id));\n    this.grid.setSelectionIds(ids, { emit: false });\n    this.selectionSeedPending = false;\n    this.cdr.markForCheck();\n  }\n\n  private buildRowSelectionColumns(): ColumnDef<T>[] {\n    return [\n      {\n        field: this.config.dimension.key as Extract<keyof T, string>,\n        header: this.config.dimension.label,\n        width: 280,\n      },\n      ...this.rowMetrics().map((metric) => ({\n        field: metric.key as Extract<keyof T, string>,\n        header: metric.label,\n        type: 'number' as const,\n        width: 140,\n      })),\n    ];\n  }\n\n  private buildColumnSelectionColumns(): ColumnDef<T>[] {\n    const productCol: ColumnDef<T> = {\n      field: this.config.dimension.key as Extract<keyof T, string>,\n      header: this.config.dimension.label.toUpperCase(),\n      width: 210,\n    };\n    const metricCols = this.config.metrics.map((metric) => {\n      const active = this.activeMetricKeys.has(metric.key);\n      const tint = metric.color ?? '#94a3b8';\n      return {\n        field: metric.key as Extract<keyof T, string>,\n        header: metric.label.toUpperCase(),\n        type: 'number' as const,\n        width: 150,\n        headerStyle: active\n          ? { background: `${tint}18`, color: '#334155', fontWeight: 700 }\n          : { color: '#94a3b8', fontWeight: 700 },\n        cellStyle: active\n          ? { background: `${tint}10`, color: '#111827' }\n          : { color: '#cbd5e1' },\n      } as ColumnDef<T>;\n    });\n    const trailing = (this.config.trailingColumns ?? []).map((col) => ({\n      field: col.field as Extract<keyof T, string>,\n      header: col.header.toUpperCase(),\n      type: col.type ?? 'number',\n      width: col.width ?? 130,\n    })) as ColumnDef<T>[];\n    return [productCol, ...metricCols, ...trailing];\n  }\n\n  private buildSparklineColumns(): ColumnDef<T>[] {\n    const cols: ColumnDef<T>[] = [\n      {\n        field: this.config.dimension.key as Extract<keyof T, string>,\n        header: this.config.dimension.label.toUpperCase(),\n        width: 220,\n      },\n    ];\n    if (this.config.subDimension) {\n      cols.push({\n        field: this.config.subDimension.key as Extract<keyof T, string>,\n        header: this.config.subDimension.label.toUpperCase(),\n        width: 180,\n      });\n    }\n    const quarterMetrics = this.config.metrics.filter((metric) => metric.key.startsWith('q'));\n    cols.push(\n      ...quarterMetrics.map((metric) => ({\n        field: metric.key as Extract<keyof T, string>,\n        header: metric.label.toUpperCase(),\n        type: 'number' as const,\n        width: 150,\n      })),\n    );\n    if (this.config.sparkline?.field) {\n      cols.push({\n        field: this.config.sparkline.field as Extract<keyof T, string>,\n        header: 'Trend',\n        width: 170,\n      });\n    }\n    cols.push(\n      ...(this.config.trailingColumns ?? []).map((col) => ({\n        field: col.field as Extract<keyof T, string>,\n        header: col.header.toUpperCase(),\n        type: col.type ?? 'number',\n        width: col.width ?? 130,\n      })) as ColumnDef<T>[],\n    );\n    return cols;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport { ColumnType } from '../models/column-def';\nimport {\n  NgbColumnFilterType,\n  NgbCompositeFilterDescriptor,\n  NgbFilterOperator,\n  ngbAllowedFilterOperators,\n  ngbColumnTypeToFilterType,\n  ngbDefaultFilterOperator,\n  ngbFilterOperatorLabel,\n  ngbOperatorRequiresFilterValue,\n} from '../models/filtering';\n\nexport interface NgbAdvancedSearchField {\n  field: string;\n  label: string;\n  type?: ColumnType;\n  filterType?: NgbColumnFilterType;\n  defaultFilterOperator?: NgbFilterOperator | '';\n  allowedFilterOperators?: NgbFilterOperator[];\n}\n\nexport interface NgbAdvancedSearchOperator {\n  value: NgbFilterOperator;\n  label: string;\n}\n\nexport interface NgbAdvancedSearchRule {\n  field: string;\n  operator: NgbFilterOperator;\n  value: unknown;\n}\n\n@Component({\n  selector: 'ngb-advanced-search',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  template: `\n    <div class=\"ngb-advanced-search\">\n      <div class=\"ngb-advanced-search__logic\">\n        <span>{{ matchLabel }}</span>\n        <button\n          type=\"button\"\n          [ngbDatagridButton]=\"logic === 'and' ? 'primary' : 'secondary'\"\n          (click)=\"setLogic('and')\"\n        >\n          AND\n        </button>\n        <button\n          type=\"button\"\n          [ngbDatagridButton]=\"logic === 'or' ? 'primary' : 'secondary'\"\n          (click)=\"setLogic('or')\"\n        >\n          OR\n        </button>\n        <span>{{ rulesLabel }}</span>\n      </div>\n\n      <div class=\"ngb-advanced-search__rules\">\n        @for (rule of rules; track $index; let i = $index) {\n        <div class=\"ngb-advanced-search__rule\">\n          <span class=\"ngb-advanced-search__join\">{{ i === 0 ? whenLabel : logic.toUpperCase() }}</span>\n          <select\n            ngbDatagridControl\n            [ngModel]=\"rule.field\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"setRuleField(rule, $event)\"\n            [attr.aria-label]=\"fieldAriaLabel\"\n          >\n            @for (field of fields; track field.field) {\n              <option [value]=\"field.field\">{{ field.label }}</option>\n            }\n          </select>\n          <select\n            ngbDatagridControl\n            [ngModel]=\"rule.operator\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"setRuleOperator(rule, $event)\"\n            [attr.aria-label]=\"operatorAriaLabel\"\n          >\n            @for (operator of operatorOptionsFor(rule); track operator.value) {\n              <option [ngValue]=\"operator.value\">{{ operator.label }}</option>\n            }\n          </select>\n          <input\n            ngbDatagridControl\n            [attr.type]=\"inputType(rule)\"\n            [(ngModel)]=\"rule.value\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"emitRules()\"\n            [placeholder]=\"valuePlaceholder\"\n            [disabled]=\"!operatorRequiresValue(rule.operator)\"\n            [attr.aria-label]=\"valueAriaLabel\"\n          />\n          <button\n            type=\"button\"\n            ngbDatagridButton=\"danger\"\n            (click)=\"removeRule(i)\"\n            [disabled]=\"rules.length <= minRules\"\n            [attr.aria-label]=\"removeRuleAriaLabel\"\n          >\n            {{ removeRuleLabel }}\n          </button>\n        </div>\n        }\n      </div>\n\n      <div class=\"ngb-advanced-search__actions\">\n        <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"addRule()\">\n          {{ addRuleLabel }}\n        </button>\n        <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"apply()\">\n          {{ applyLabel }}\n        </button>\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      .ngb-advanced-search {\n        display: grid;\n        gap: 1rem;\n        color: var(--dg-text, #1f2937);\n      }\n\n      .ngb-advanced-search__logic,\n      .ngb-advanced-search__actions {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: 0.625rem;\n      }\n\n      .ngb-advanced-search__logic {\n        font-weight: 700;\n      }\n\n      .ngb-advanced-search__rules {\n        display: grid;\n        gap: 0.75rem;\n      }\n\n      .ngb-advanced-search__rule {\n        display: grid;\n        grid-template-columns: auto minmax(9rem, 1fr) minmax(10rem, 1fr) minmax(10rem, 1fr) auto;\n        align-items: center;\n        gap: 0.625rem;\n      }\n\n      .ngb-advanced-search__join {\n        min-width: 3.5rem;\n        font-size: 0.8125rem;\n        font-weight: 800;\n        letter-spacing: 0.04em;\n        text-transform: uppercase;\n        color: var(--dg-text-muted, #64748b);\n      }\n\n      .ngb-advanced-search .grid-filter-control {\n        min-height: var(--dg-control-height, 2.5rem);\n        border: 1px solid var(--dg-border, #d5dbe5);\n        border-radius: var(--dg-radius-md, 0.5rem);\n        background: var(--dg-surface, #fff);\n        color: var(--dg-text, #1f2937);\n        padding: 0 0.75rem;\n      }\n\n      .ngb-advanced-search .datagrid-toolbar__button,\n      .ngb-advanced-search .grid-row-action {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 0.45rem;\n        min-height: var(--dg-control-height, 2.5rem);\n        padding: 0 0.9rem;\n        border: 1px solid var(--dg-border, #d5dbe5);\n        border-radius: var(--dg-radius-md, 0.5rem);\n        background: var(--dg-surface, #fff);\n        color: var(--dg-text, #1f2937);\n        font: inherit;\n        font-weight: 700;\n      }\n\n      .ngb-advanced-search .datagrid-toolbar__button--primary {\n        border-color: var(--dg-accent, #2563eb);\n        background: var(--dg-accent, #2563eb);\n        color: #fff;\n      }\n\n      .ngb-advanced-search .grid-row-action--success {\n        border-color: #16a34a;\n        background: #16a34a;\n        color: #fff;\n      }\n\n      .ngb-advanced-search .grid-row-action--danger {\n        border-color: #dc2626;\n        background: #dc2626;\n        color: #fff;\n      }\n\n      .ngb-advanced-search button:disabled {\n        cursor: not-allowed;\n        opacity: 0.55;\n      }\n\n      @media (max-width: 768px) {\n        .ngb-advanced-search__rule {\n          grid-template-columns: 1fr;\n        }\n\n        .ngb-advanced-search__join {\n          min-width: 0;\n        }\n      }\n    `,\n  ],\n})\nexport class NgbAdvancedSearchComponent {\n  private _fields: NgbAdvancedSearchField[] = [];\n  private _operators: NgbAdvancedSearchOperator[] | null = null;\n  private fieldConfigCache = new Map<string, NgbAdvancedSearchField>();\n  private filterTypeCache = new Map<string, NgbColumnFilterType>();\n  private inputTypeCache = new Map<string, string>();\n  private operatorOptionsCache = new Map<string, NgbAdvancedSearchOperator[]>();\n\n  @Input() set fields(value: NgbAdvancedSearchField[] | null | undefined) {\n    this._fields = value ?? [];\n    this.rebuildFieldCaches();\n  }\n  get fields(): NgbAdvancedSearchField[] {\n    return this._fields;\n  }\n\n  @Input() set operators(value: NgbAdvancedSearchOperator[] | null | undefined) {\n    this._operators = value ?? null;\n    this.operatorOptionsCache.clear();\n  }\n  get operators(): NgbAdvancedSearchOperator[] | null {\n    return this._operators;\n  }\n  @Input() rules: NgbAdvancedSearchRule[] = [];\n  @Input() logic: 'and' | 'or' = 'and';\n  @Input() minRules = 1;\n  @Input() matchLabel = 'Match';\n  @Input() rulesLabel = 'of the following rules';\n  @Input() whenLabel = 'When';\n  @Input() addRuleLabel = '+ Add Rule';\n  @Input() applyLabel = 'Search';\n  @Input() removeRuleLabel = 'Remove';\n  @Input() removeRuleAriaLabel = 'Remove rule';\n  @Input() fieldAriaLabel = 'Search field';\n  @Input() operatorAriaLabel = 'Search operator';\n  @Input() valueAriaLabel = 'Search value';\n  @Input() valuePlaceholder = 'Value...';\n\n  @Output() rulesChange = new EventEmitter<NgbAdvancedSearchRule[]>();\n  @Output() logicChange = new EventEmitter<'and' | 'or'>();\n  @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n\n  setLogic(logic: 'and' | 'or'): void {\n    this.logic = logic;\n    this.logicChange.emit(logic);\n  }\n\n  addRule(): void {\n    const field = this.fields[0]?.field ?? '';\n    this.rules = [\n      ...this.rules,\n      {\n        field,\n        operator: this.defaultOperatorForField(field),\n        value: '',\n      },\n    ];\n    this.emitRules();\n  }\n\n  removeRule(index: number): void {\n    if (this.rules.length <= this.minRules) return;\n    this.rules = this.rules.filter((_, i) => i !== index);\n    this.emitRules();\n  }\n\n  apply(): void {\n    this.filterChange.emit(this.toFilterDescriptor());\n  }\n\n  emitRules(): void {\n    this.rulesChange.emit([...this.rules]);\n  }\n\n  setRuleField(rule: NgbAdvancedSearchRule, field: string): void {\n    rule.field = field;\n    const operators = this.operatorOptionsFor(rule).map((operator) => operator.value);\n    if (!operators.includes(rule.operator)) {\n      rule.operator = this.defaultOperatorForField(field);\n      rule.value = '';\n    }\n    this.emitRules();\n  }\n\n  setRuleOperator(rule: NgbAdvancedSearchRule, operator: NgbFilterOperator): void {\n    rule.operator = operator;\n    if (!this.operatorRequiresValue(operator)) {\n      rule.value = '';\n    }\n    this.emitRules();\n  }\n\n  inputType(rule: NgbAdvancedSearchRule): string {\n    const cached = this.inputTypeCache.get(rule.field);\n    if (cached) return cached;\n    const field = this.fieldConfig(rule.field);\n    if (field?.type === 'number') return 'number';\n    if (field?.type === 'date') return 'date';\n    return 'text';\n  }\n\n  operatorRequiresValue(operator: NgbFilterOperator): boolean {\n    return ngbOperatorRequiresFilterValue(operator);\n  }\n\n  operatorOptionsFor(rule: NgbAdvancedSearchRule): NgbAdvancedSearchOperator[] {\n    if (this.operators?.length) return this.operators;\n    const type = this.filterTypeForField(rule.field);\n    const cacheKey = `${rule.field}:${type}`;\n    const cached = this.operatorOptionsCache.get(cacheKey);\n    if (cached) return cached;\n    const options = this.allowedOperatorsForField(rule.field).map((operator) => ({\n      value: operator,\n      label: ngbFilterOperatorLabel(operator, type),\n    }));\n    this.operatorOptionsCache.set(cacheKey, options);\n    return options;\n  }\n\n  toFilterDescriptor(): NgbCompositeFilterDescriptor {\n    const filters: NgbCompositeFilterDescriptor['filters'] = [];\n    for (const rule of this.rules) {\n      const requiresValue = ngbOperatorRequiresFilterValue(rule.operator);\n      if (requiresValue && (rule.value === '' || rule.value == null)) continue;\n\n      const inputType = this.inputTypeCache.get(rule.field) ?? this.inputType(rule);\n      filters.push({\n        field: rule.field,\n        operator: rule.operator,\n        value: requiresValue ? (inputType === 'number' ? Number(rule.value) : rule.value) : undefined,\n        ignoreCase: inputType !== 'number',\n      });\n    }\n\n    return {\n      logic: this.logic,\n      filters,\n    };\n  }\n\n  private fieldConfig(field: string): NgbAdvancedSearchField | undefined {\n    return this.fieldConfigCache.get(field);\n  }\n\n  private filterTypeForField(field: string): NgbColumnFilterType {\n    const cached = this.filterTypeCache.get(field);\n    if (cached) return cached;\n    const config = this.fieldConfig(field);\n    return config?.filterType ?? ngbColumnTypeToFilterType(config?.type);\n  }\n\n  private allowedOperatorsForField(field: string): NgbFilterOperator[] {\n    const config = this.fieldConfig(field);\n    if (config?.allowedFilterOperators?.length) return [...config.allowedFilterOperators];\n    return ngbAllowedFilterOperators(this.filterTypeForField(field));\n  }\n\n  private defaultOperatorForField(field: string): NgbFilterOperator {\n    const config = this.fieldConfig(field);\n    const allowed = this.allowedOperatorsForField(field);\n    if (config?.defaultFilterOperator === '') {\n      return allowed[0] ?? ngbDefaultFilterOperator(this.filterTypeForField(field));\n    }\n    if (config?.defaultFilterOperator) return config.defaultFilterOperator;\n    return ngbDefaultFilterOperator(this.filterTypeForField(field));\n  }\n\n  private rebuildFieldCaches(): void {\n    this.fieldConfigCache = new Map(this._fields.map((field) => [field.field, field]));\n    this.filterTypeCache.clear();\n    this.inputTypeCache.clear();\n    this.operatorOptionsCache.clear();\n\n    for (const field of this._fields) {\n      const filterType = field.filterType ?? ngbColumnTypeToFilterType(field.type);\n      this.filterTypeCache.set(field.field, filterType);\n      this.inputTypeCache.set(\n        field.field,\n        field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text',\n      );\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\n\nexport interface NgbSearchHighlightField {\n  field: string;\n  label: string;\n  disabled?: boolean;\n}\n\nexport interface NgbSearchHighlightSelectionChange {\n  term: string;\n  selectedFields: string[];\n}\n\n@Component({\n  selector: 'ngb-search-highlight',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n  template: `\n    <div class=\"ngb-search-highlight\">\n      <label class=\"ngb-search-highlight__search\">\n        <span class=\"ngb-search-highlight__icon\" aria-hidden=\"true\">{{ searchIcon }}</span>\n        <input\n          type=\"search\"\n          ngbDatagridControl\n          [ngModel]=\"term\"\n          [ngModelOptions]=\"{ standalone: true }\"\n          (ngModelChange)=\"setTerm($event)\"\n          [placeholder]=\"placeholder\"\n          [attr.aria-label]=\"searchAriaLabel\"\n        />\n      </label>\n\n      @if (fields.length) {\n      <div class=\"ngb-search-highlight__fields\">\n        <span class=\"ngb-search-highlight__label\">{{ fieldsLabel }}</span>\n        <div class=\"ngb-search-highlight__chips\" role=\"group\" [attr.aria-label]=\"fieldsAriaLabel\">\n          @for (field of fields; track field.field) {\n            <button\n              type=\"button\"\n              [ngbDatagridButton]=\"isFieldSelected(field.field) ? 'primary' : 'secondary'\"\n              [disabled]=\"field.disabled || (!allowEmptySelection && isFieldSelected(field.field) && selectedFields.length <= 1)\"\n              [attr.aria-pressed]=\"isFieldSelected(field.field)\"\n              (click)=\"toggleField(field.field)\"\n            >\n              {{ field.label }}\n            </button>\n          }\n        </div>\n      </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      .ngb-search-highlight {\n        display: grid;\n        gap: 1rem;\n        color: var(--dg-text, #1f2937);\n      }\n\n      .ngb-search-highlight__search {\n        display: flex;\n        align-items: center;\n        gap: 0.625rem;\n        min-width: min(100%, 18rem);\n      }\n\n      .ngb-search-highlight__search .grid-filter-control {\n        width: 100%;\n        min-height: var(--dg-control-height, 2.5rem);\n        border: 1px solid var(--dg-border, #d5dbe5);\n        border-radius: var(--dg-radius-md, 0.5rem);\n        background: var(--dg-surface, #fff);\n        color: var(--dg-text, #1f2937);\n        padding: 0 0.75rem;\n      }\n\n      .ngb-search-highlight__icon {\n        color: var(--dg-text-muted, #64748b);\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: 2rem;\n        font-size: 1.9rem;\n        line-height: 1;\n        font-weight: 700;\n      }\n\n      .ngb-search-highlight__fields {\n        display: grid;\n        gap: 0.5rem;\n      }\n\n      .ngb-search-highlight__label {\n        font-size: 0.875rem;\n        font-weight: 700;\n        color: var(--dg-text, #1f2937);\n      }\n\n      .ngb-search-highlight__chips {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.5rem;\n      }\n\n      .ngb-search-highlight .datagrid-toolbar__button {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-height: var(--dg-control-height, 2.5rem);\n        padding: 0 0.9rem;\n        border: 1px solid var(--dg-border, #d5dbe5);\n        border-radius: var(--dg-radius-md, 0.5rem);\n        background: var(--dg-surface, #fff);\n        color: var(--dg-text, #1f2937);\n        font: inherit;\n        font-weight: 700;\n      }\n\n      .ngb-search-highlight .datagrid-toolbar__button--primary {\n        border-color: var(--dg-accent, #2563eb);\n        background: var(--dg-accent, #2563eb);\n        color: #fff;\n      }\n\n      .ngb-search-highlight button:disabled {\n        cursor: not-allowed;\n        opacity: 0.55;\n      }\n    `,\n  ],\n})\nexport class NgbSearchHighlightComponent {\n  @Input() fields: NgbSearchHighlightField[] = [];\n  @Input() selectedFields: string[] = [];\n  @Input() term = '';\n  @Input() placeholder = 'Type to highlight matches...';\n  @Input() searchAriaLabel = 'Type to highlight matches';\n  @Input() fieldsLabel = 'Search in:';\n  @Input() fieldsAriaLabel = 'Highlight fields';\n  @Input() searchIcon = '🔍';\n  @Input() allowEmptySelection = false;\n\n  @Output() termChange = new EventEmitter<string>();\n  @Output() selectedFieldsChange = new EventEmitter<string[]>();\n  @Output() selectionChange = new EventEmitter<NgbSearchHighlightSelectionChange>();\n\n  setTerm(term: string): void {\n    this.term = term;\n    this.termChange.emit(term);\n    this.emitSelectionChange();\n  }\n\n  isFieldSelected(field: string): boolean {\n    return this.selectedFields.includes(field);\n  }\n\n  toggleField(field: string): void {\n    const selected = this.isFieldSelected(field);\n    if (selected && !this.allowEmptySelection && this.selectedFields.length <= 1) return;\n    this.selectedFields = selected\n      ? this.selectedFields.filter((item) => item !== field)\n      : [...this.selectedFields, field];\n    this.selectedFieldsChange.emit([...this.selectedFields]);\n    this.emitSelectionChange();\n  }\n\n  private emitSelectionChange(): void {\n    this.selectionChange.emit({\n      term: this.term,\n      selectedFields: [...this.selectedFields],\n    });\n  }\n}\n","import type { NgbCompositeFilterDescriptor } from './models/filtering';\n\nexport type NgbDataGridSortDirection = 'asc' | 'desc';\n\nexport interface NgbDataGridSortDescriptor {\n  field: string;\n  direction: NgbDataGridSortDirection;\n}\n\nexport interface NgbDataGridGroupDescriptor {\n  field: string;\n  dir?: NgbDataGridSortDirection;\n  aggregates?: NgbDataGridAggregateDescriptor[];\n}\n\nexport interface NgbDataGridGroupChange {\n  group: NgbDataGridGroupDescriptor[];\n}\n\nexport interface NgbDataGridState {\n  /** 1-based page number used by the DataGrid pager. */\n  page?: number;\n  /** 0-based page index for API integrations that use page indexes. */\n  pageIndex?: number;\n  /** Number of records skipped before the current page. */\n  skip?: number;\n  pageSize?: number;\n  sort?: NgbDataGridSortDescriptor[];\n  group?: NgbDataGridGroupDescriptor[];\n  filter?: NgbCompositeFilterDescriptor;\n  globalFilter?: string;\n}\n\nexport type NgbDataGridAggregateFunction = 'count' | 'sum' | 'average' | 'avg' | 'min' | 'max';\nexport type NgbDataGridAggregateType = NgbDataGridAggregateFunction;\n\nexport interface NgbDataGridAggregateDescriptor {\n  field: string;\n  aggregate: NgbDataGridAggregateFunction;\n}\n\nexport type NgbDataGridAggregateResults = Record<\n  string,\n  Partial<Record<NgbDataGridAggregateFunction, number | string | Date | null>>\n>;\n\nexport interface NgbDataGridGroupingSettings {\n  showFooter?: boolean;\n  stickyHeaders?: boolean;\n  stickyFooters?: boolean;\n}\n\nexport interface NgbDataGridProcessOptions<T = unknown> {\n  state?: NgbDataGridState | null;\n  aggregates?: NgbDataGridAggregateDescriptor[];\n  groupedData?: NgbDataGridGroupResult<T>[] | null;\n  globalFilterFields?: string[];\n  columns?: Array<{ field: Extract<keyof T, string> | string; type?: string; filterType?: string }>;\n  /**\n   * When false, returns the filtered/sorted full result without page slicing.\n   * Aggregates are always calculated before page slicing.\n   */\n  page?: boolean;\n}\n\nexport interface NgbDataGridDataResult<T = unknown> {\n  data: T[];\n  total: number;\n  aggregates?: NgbDataGridAggregateResults;\n  groupedData?: NgbDataGridGroupResult<T>[];\n}\n\nexport interface NgbDataGridGroupResult<T = unknown> {\n  field: string;\n  value: unknown;\n  dir: NgbDataGridSortDirection;\n  level: number;\n  count: number;\n  aggregates?: NgbDataGridAggregateResults;\n  items: Array<NgbDataGridGroupResult<T> | T>;\n}\n\n// datagrid.types.ts\nexport type NgbDataGridExportType = 'pdf' | 'excel' | 'both';\nexport type NgbDataGridExportPages = 'all' | 'current' | 'selection';\nexport type NgbDataGridTheme =\n  | 'bootstrap'\n  | 'bootstrap-main'\n  | 'bootstrap-main-dark'\n  | 'bootstrap-nordic'\n  | 'bootstrap-urban'\n  | 'bootstrap-vintage'\n  | 'material'\n  | 'material-main'\n  | 'material-indigo'\n  | 'material-deep-purple'\n  | 'tailwind'\n  | 'tailwind-main'\n  | 'tailwind-slate'\n  | 'tailwind-emerald';\n\nexport interface NgbDataGridThemeOption {\n  value: NgbDataGridTheme;\n  label: string;\n  group: 'Bootstrap' | 'Material' | 'Tailwind';\n  swatches: [string, string, string];\n  dark?: boolean;\n}\n\nexport const NGB_DATAGRID_THEME_OPTIONS: NgbDataGridThemeOption[] = [\n  { value: 'bootstrap', label: 'Classic', group: 'Bootstrap', swatches: ['#ffffff', '#0d6efd', '#6c757d'] },\n  { value: 'bootstrap-main', label: 'Ocean', group: 'Bootstrap', swatches: ['#f8fbff', '#1769e0', '#172554'] },\n  { value: 'bootstrap-main-dark', label: 'Midnight', group: 'Bootstrap', swatches: ['#111827', '#38bdf8', '#e5e7eb'], dark: true },\n  { value: 'bootstrap-nordic', label: 'Aqua Rose', group: 'Bootstrap', swatches: ['#f8ffff', '#0891b2', '#fb7185'] },\n  { value: 'bootstrap-urban', label: 'Clay', group: 'Bootstrap', swatches: ['#fffaf7', '#c05621', '#256d85'] },\n  { value: 'bootstrap-vintage', label: 'Sage', group: 'Bootstrap', swatches: ['#fffdf7', '#6b705c', '#b08968'] },\n  { value: 'material-main', label: 'Orchid', group: 'Material', swatches: ['#fffbfe', '#9c27b0', '#2d1b33'] },\n  { value: 'material-indigo', label: 'Indigo', group: 'Material', swatches: ['#f7f8ff', '#3f51b5', '#263238'] },\n  { value: 'material-deep-purple', label: 'Plum', group: 'Material', swatches: ['#fdf8ff', '#7e57c2', '#4a148c'] },\n  { value: 'tailwind-main', label: 'Sky', group: 'Tailwind', swatches: ['#ffffff', '#0284c7', '#0f172a'] },\n  { value: 'tailwind-slate', label: 'Graphite', group: 'Tailwind', swatches: ['#f8fafc', '#334155', '#020617'] },\n  { value: 'tailwind-emerald', label: 'Mint', group: 'Tailwind', swatches: ['#f0fdfa', '#0f766e', '#064e3b'] },\n];\n\nexport interface NgbDataGridExportOptions {\n  enabled: boolean;\n  type: NgbDataGridExportType;\n  pages: NgbDataGridExportPages;\n  fileName?: string;\n  pdf?: { pageSize?: 'A4'|'Letter'|string; landscape?: boolean; margins?: [number,number,number,number] };\n  excel?: { sheetName?: string };\n}\n\nexport interface NgbDataGridResponsiveOptions {\n  enabled: boolean;\n  breakpoints?: { mobile?: number; tablet?: number; desktop?: number };\n}\n\n/** Built-in row editing interaction mode. */\nexport type NgbEditMode = 'inline' | 'incell' | 'external' | 'toolbar';\n\n/** Labels and visibility for the built-in multi-checkbox filter menu footer. */\n/** Segment returned by {@link Datagrid.getSearchHighlightSegments} for match highlighting. */\nexport interface NgbSearchHighlightSegment {\n  key: string;\n  text: string;\n  match: boolean;\n}\n\n/** Placement when calling {@link Datagrid.reorderColumn}. */\nexport interface NgbColumnReorderOptions {\n  /** When true (default), inserts before the column at the destination index. When false, inserts after it. */\n  before?: boolean;\n}\n\nexport interface NgbColumnReorderEvent<T = unknown> {\n  /** Visible columns in their new order. */\n  columns: Array<{ field: string; header: string } & Record<string, unknown>>;\n  /** Column that was moved. */\n  column: T;\n  fromIndex: number;\n  toIndex: number;\n  /** Ordered field names after the move. */\n  fields: string[];\n}\n\nexport interface NgbMultiCheckboxFilterOptions {\n  /** Primary action label. Default: `OK` */\n  applyLabel?: string;\n  /** Secondary action label. Default: `Cancel` */\n  cancelLabel?: string;\n  /** Whether the secondary action is shown. Default: `true` */\n  showCancel?: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { NgbDataGridTheme, NgbDataGridThemeOption, NGB_DATAGRID_THEME_OPTIONS } from '../datagrid.types';\n\n@Component({\n  selector: 'ngb-datagrid-theme-picker',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"ngb-datagrid-theme-picker\">\n      @if (label) {\n        <span class=\"ngb-datagrid-theme-picker__label\">{{ label }}</span>\n      }\n      <div class=\"ngb-datagrid-theme-picker__control\">\n        <button\n          type=\"button\"\n          class=\"ngb-datagrid-theme-picker__trigger\"\n          [class.ngb-datagrid-theme-picker__trigger--open]=\"open\"\n          [attr.aria-expanded]=\"open\"\n          aria-haspopup=\"listbox\"\n          (click)=\"toggle()\"\n        >\n          <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n            @for (color of selectedTheme.swatches; track color) {\n            <span\n              class=\"ngb-datagrid-theme-picker__swatch\"\n              [style.background]=\"color\"\n            ></span>\n            }\n          </span>\n          <span class=\"ngb-datagrid-theme-picker__selected\">{{ selectedTheme.label }}</span>\n          <span class=\"ngb-datagrid-theme-picker__chevron\" aria-hidden=\"true\"></span>\n        </button>\n\n        @if (open) {\n        <div class=\"ngb-datagrid-theme-picker__menu\" role=\"listbox\">\n          @for (group of groupedThemes; track group.label) {\n            <div class=\"ngb-datagrid-theme-picker__group\">{{ group.label }}</div>\n            @for (theme of group.items; track theme.value) {\n            <button\n              type=\"button\"\n              class=\"ngb-datagrid-theme-picker__option\"\n              role=\"option\"\n              [attr.aria-selected]=\"theme.value === value\"\n              [class.ngb-datagrid-theme-picker__option--active]=\"theme.value === value\"\n              (click)=\"select(theme)\"\n            >\n              <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n                @for (color of theme.swatches; track color) {\n                <span\n                  class=\"ngb-datagrid-theme-picker__swatch\"\n                  [style.background]=\"color\"\n                ></span>\n                }\n              </span>\n              <span class=\"ngb-datagrid-theme-picker__option-label\">{{ theme.label }}</span>\n              @if (theme.dark) {\n                <span class=\"ngb-datagrid-theme-picker__moon\" aria-hidden=\"true\"></span>\n              }\n            </button>\n            }\n          }\n        </div>\n        }\n      </div>\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: inline-block;\n      color: #344054;\n      font: inherit;\n    }\n\n    .ngb-datagrid-theme-picker {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.6rem;\n      position: relative;\n    }\n\n    .ngb-datagrid-theme-picker__label {\n      color: #667085;\n      font-size: 0.86rem;\n      line-height: 1.4;\n    }\n\n    .ngb-datagrid-theme-picker__control {\n      position: relative;\n      min-width: 12.5rem;\n    }\n\n    .ngb-datagrid-theme-picker__trigger,\n    .ngb-datagrid-theme-picker__option {\n      display: flex;\n      align-items: center;\n      width: 100%;\n      border: 1px solid #d0d5dd;\n      background: #fff;\n      color: #101828;\n      font: inherit;\n      text-align: left;\n      cursor: pointer;\n    }\n\n    .ngb-datagrid-theme-picker__trigger {\n      min-height: 2.25rem;\n      gap: 0.55rem;\n      padding: 0.35rem 0.65rem;\n      border-radius: 0.5rem;\n      box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05);\n    }\n\n    .ngb-datagrid-theme-picker__trigger:focus-visible,\n    .ngb-datagrid-theme-picker__trigger--open {\n      outline: none;\n      border-color: #315efb;\n      box-shadow: 0 0 0 0.2rem rgba(49, 94, 251, 0.14);\n    }\n\n    .ngb-datagrid-theme-picker__selected {\n      flex: 1 1 auto;\n      min-width: 0;\n      font-weight: 600;\n    }\n\n    .ngb-datagrid-theme-picker__chevron {\n      width: 0.75rem;\n      height: 0.75rem;\n      border-right: 2px solid #315efb;\n      border-bottom: 2px solid #315efb;\n      transform: rotate(45deg);\n      transition: transform 150ms ease;\n      margin-top: -0.25rem;\n    }\n\n    .ngb-datagrid-theme-picker__trigger--open .ngb-datagrid-theme-picker__chevron {\n      transform: rotate(225deg);\n      margin-top: 0.25rem;\n    }\n\n    .ngb-datagrid-theme-picker__menu {\n      position: absolute;\n      z-index: 1100;\n      top: calc(100% + 0.25rem);\n      right: 0;\n      width: min(19rem, 90vw);\n      max-height: 24rem;\n      overflow: auto;\n      padding: 0.65rem;\n      border: 1px solid #d7deea;\n      border-radius: 0.5rem;\n      background: #fff;\n      box-shadow: 0 1rem 2.25rem rgba(16, 24, 40, 0.18);\n    }\n\n    .ngb-datagrid-theme-picker__group {\n      padding: 0.55rem 0.65rem 0.45rem;\n      color: #344054;\n      font-size: 0.72rem;\n      font-weight: 700;\n      letter-spacing: 0.04em;\n      text-transform: uppercase;\n      border-top: 1px solid #e4e7ec;\n    }\n\n    .ngb-datagrid-theme-picker__group:first-child {\n      border-top: 0;\n      padding-top: 0.35rem;\n    }\n\n    .ngb-datagrid-theme-picker__option {\n      gap: 0.65rem;\n      min-height: 2.55rem;\n      padding: 0.45rem 0.65rem;\n      border: 0;\n      border-radius: 0.45rem;\n    }\n\n    .ngb-datagrid-theme-picker__option:hover,\n    .ngb-datagrid-theme-picker__option--active {\n      background: #f2f4f7;\n    }\n\n    .ngb-datagrid-theme-picker__option-label {\n      flex: 1 1 auto;\n      font-weight: 600;\n      color: #344054;\n    }\n\n    .ngb-datagrid-theme-picker__swatches {\n      display: inline-flex;\n      align-items: center;\n      min-width: 3.2rem;\n    }\n\n    .ngb-datagrid-theme-picker__swatch {\n      width: 1.25rem;\n      height: 1.25rem;\n      border: 2px solid #fff;\n      border-radius: 50%;\n      box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.08);\n    }\n\n    .ngb-datagrid-theme-picker__swatch + .ngb-datagrid-theme-picker__swatch {\n      margin-left: -0.42rem;\n    }\n\n    .ngb-datagrid-theme-picker__moon {\n      width: 0.95rem;\n      height: 0.95rem;\n      border-radius: 50%;\n      box-shadow: -0.28rem 0 0 #344054;\n      transform: translateX(0.28rem);\n    }\n\n    @media (max-width: 640px) {\n      .ngb-datagrid-theme-picker {\n        align-items: stretch;\n        flex-direction: column;\n        gap: 0.45rem;\n        width: 100%;\n      }\n\n      .ngb-datagrid-theme-picker__control {\n        min-width: 0;\n        width: 100%;\n      }\n\n      .ngb-datagrid-theme-picker__menu {\n        left: 0;\n        right: auto;\n        width: 100%;\n      }\n    }\n  `],\n})\nexport class NgbDatagridThemePickerComponent {\n  private readonly host = inject(ElementRef<HTMLElement>);\n  private _value: NgbDataGridTheme = 'bootstrap';\n  private _themes: NgbDataGridThemeOption[] = NGB_DATAGRID_THEME_OPTIONS;\n\n  @Input() label = 'Change Theme';\n  @Input()\n  get value(): NgbDataGridTheme {\n    return this._value;\n  }\n  set value(value: NgbDataGridTheme) {\n    this._value = value;\n    this.updateSelectedTheme();\n  }\n\n  @Input()\n  get themes(): NgbDataGridThemeOption[] {\n    return this._themes;\n  }\n  set themes(themes: NgbDataGridThemeOption[] | null | undefined) {\n    this._themes = themes?.length ? themes : NGB_DATAGRID_THEME_OPTIONS;\n    this.groupedThemes = this.buildGroupedThemes(this._themes);\n    this.updateSelectedTheme();\n  }\n\n  @Output() valueChange = new EventEmitter<NgbDataGridTheme>();\n\n  open = false;\n  selectedTheme: NgbDataGridThemeOption = NGB_DATAGRID_THEME_OPTIONS[0];\n  groupedThemes: Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> =\n    this.buildGroupedThemes(NGB_DATAGRID_THEME_OPTIONS);\n\n  toggle(): void {\n    this.open = !this.open;\n  }\n\n  select(theme: NgbDataGridThemeOption): void {\n    this._value = theme.value;\n    this.selectedTheme = theme;\n    this.valueChange.emit(theme.value);\n    this.open = false;\n  }\n\n  @HostListener('document:click', ['$event'])\n  closeOnOutsideClick(event: MouseEvent): void {\n    if (!this.host.nativeElement.contains(event.target as Node)) {\n      this.open = false;\n    }\n  }\n\n  @HostListener('keydown.escape')\n  closeOnEscape(): void {\n    this.open = false;\n  }\n\n  private updateSelectedTheme(): void {\n    this.selectedTheme =\n      this._themes.find((theme) => theme.value === this._value) ?? this._themes[0] ?? NGB_DATAGRID_THEME_OPTIONS[0];\n  }\n\n  private buildGroupedThemes(\n    themes: NgbDataGridThemeOption[],\n  ): Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> {\n    const groups: Array<NgbDataGridThemeOption['group']> = ['Bootstrap', 'Material', 'Tailwind'];\n    return groups\n      .map((label) => ({ label, items: themes.filter((theme) => theme.group === label) }))\n      .filter((group) => group.items.length > 0);\n  }\n}\n","import { Directive, Input, OnChanges, OnInit, Optional, SimpleChanges } from '@angular/core';\nimport { NgbDatagridRowId } from '../../services/editing.service';\nimport { Datagrid } from '../datagrid.component';\n\nexport interface HighlightItem {\n  row: NgbDatagridRowId;\n  columnKey?: unknown;\n}\n\ntype RowKeyFn = (row: unknown, rowIndex: number) => NgbDatagridRowId;\ntype ColKeyFn = (column: unknown, columnIndex: number) => unknown;\n\n@Directive({\n  selector: '[ngbGridHighlight]',\n  standalone: true\n})\nexport class NgbGridHighlightDirective implements OnInit, OnChanges {\n  @Input('ngbGridHighlight') rowKey?: string | RowKeyFn;\n  @Input() highlightColumnIndex?: string | ColKeyFn;\n  @Input() highlightedIndex: HighlightItem[] = [];\n\n  constructor(@Optional() private grid: Datagrid<unknown>) {}\n\n  ngOnInit(): void {\n    this.apply();\n  }\n\n  ngOnChanges(_ch: SimpleChanges): void {\n    this.apply();\n  }\n\n  private apply() {\n    if (!this.grid) return;\n    this.grid.highlightRowKey = this.rowKey ?? null;\n    this.grid.highlightColKey = this.highlightColumnIndex ?? null;\n    this.grid.highlightedIndex = this.highlightedIndex ?? [];\n    this.grid.updateHighlightCache();\n  }\n}\n","import { Directive, HostBinding, HostListener, Optional, SkipSelf } from '@angular/core';\nimport { NgbDndItemDirective } from './dnd-item.directive';\n\n@Directive({\n  selector: '[ngbDndHandle]',\n  standalone: true\n})\nexport class NgbDndHandleDirective {\n  constructor(@Optional() @SkipSelf() private item?: NgbDndItemDirective) {}\n\n  @HostBinding('attr.draggable') draggable = 'true';\n  @HostBinding('class.ngb-dnd-handle') hostClass = true;\n\n  @HostListener('dragstart', ['$event'])\n  onDragStart(ev: DragEvent): void {\n    this.item?.onDragStart(ev);\n  }\n\n  @HostListener('dragend')\n  onDragEnd(): void {\n    this.item?.onDragEnd();\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'ngb-json-preview',\n  standalone: true,\n  template: `\n    <pre class=\"ngb-json-preview\" [style.max-height.px]=\"maxHeight\"><code>{{ formattedJson }}</code></pre>\n  `,\n  styles: [`\n    :host {\n      display: block;\n    }\n\n    .ngb-json-preview {\n      margin: 0;\n      overflow: auto;\n      padding: 0.75rem 1rem;\n      border: 0;\n      background: var(--bs-body-bg, #fff);\n      color: var(--bs-body-color, #212529);\n      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n      font-size: 0.875rem;\n      line-height: 1.4;\n      white-space: pre;\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbJsonPreviewComponent {\n  @Input() value: unknown = null;\n  @Input() indent = 2;\n  @Input() fallback = 'null';\n  @Input() maxHeight = 320;\n\n  get formattedJson(): string {\n    if (typeof this.value === 'string') {\n      return this.value;\n    }\n\n    try {\n      return JSON.stringify(this.value, null, this.indent) ?? this.fallback;\n    } catch {\n      return this.fallback;\n    }\n  }\n}\n","import { Directive, TemplateRef, Input } from '@angular/core';\n\n@Directive({\n  selector: '[ngbStepLabel]',\n  standalone: true,\n})\nexport class NgbStepLabelDirective {\n  @Input('ngbStepLabel') for?: string | number;\n\n  constructor(public template: TemplateRef<unknown>) {}\n}\n\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  NgbStepperContentPosition,\n  NgbStepperLabelPosition,\n  NgbStepperOrientation,\n  NgbStepperState,\n  NgbStepperStep,\n  NgbStepperTheme,\n} from './stepper.types';\nimport { NgbStepLabelDirective } from './step-label.directive';\n\nexport interface NgbStepperSelectionChangeEvent {\n  previousIndex: number;\n  currentIndex: number;\n  step: NgbStepperStep | undefined;\n}\n\n@Component({\n  selector: 'ngb-stepper',\n  standalone: true,\n  imports: [CommonModule, NgbStepLabelDirective],\n  templateUrl: './stepper.component.html',\n  styleUrls: ['./stepper.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbStepperComponent implements AfterContentInit {\n  /** Steps definition */\n  @Input() steps: NgbStepperStep[] = [];\n\n  /** Orientation of the stepper */\n  @Input() orientation: NgbStepperOrientation = 'horizontal';\n\n  /** Position of labels around the indicator */\n  @Input() labelPosition: NgbStepperLabelPosition = 'right';\n\n  /** Position of content relative to header (horizontal only) */\n  @Input() contentPosition: NgbStepperContentPosition = 'bottom';\n\n  /** Allow navigating back to previous steps by clicking header */\n  @Input() allowRevisit = true;\n\n  /** Enable lazy loading of step content (default true) */\n  @Input() lazy = true;\n\n  /** Theme keyword (only CSS classes, no external deps) */\n  @Input() theme: NgbStepperTheme = 'bootstrap';\n\n  /** Whether to apply responsive helper class */\n  @Input() responsive = true;\n\n  /** Disable transition / animation helpers */\n  @Input() disableAnimation = false;\n\n  /** Animation duration (ms) for step transitions when enabled */\n  @Input() animationDuration = 150;\n\n  /** Label strings (for i18n) */\n  @Input() nextLabel = 'Next';\n  @Input() previousLabel = 'Previous';\n  @Input() resetLabel = 'Reset';\n  @Input() cancelLabel = 'Cancel';\n  @Input() optionalLabel = 'Optional';\n\n  /** Custom mapping from state -> icon text */\n  @Input() stateIcons: Record<string, string> = {\n    number: '#',\n    done: '✓',\n    active: '•',\n    error: '!',\n    disabled: '×',\n  };\n\n  /** Current selected index */\n  @Input() selectedIndex = 0;\n\n  /** Emits when selectedIndex changes (programmatically or by user) */\n  @Output() selectedIndexChange = new EventEmitter<number>();\n\n  /** Emits when selection changes with rich event */\n  @Output() selectionChange = new EventEmitter<NgbStepperSelectionChangeEvent>();\n\n  /** Navigation events */\n  @Output() nextClicked = new EventEmitter<number>();\n  @Output() prevClicked = new EventEmitter<number>();\n  @Output() resetClicked = new EventEmitter<void>();\n  @Output() cancelClicked = new EventEmitter<void>();\n\n  /** Custom label template (applied for all steps) */\n  @ContentChild(NgbStepLabelDirective) stepLabelTplDir?: NgbStepLabelDirective;\n\n  /** Custom icon template for step indicator */\n  @ContentChild('ngbStepperIcon', { read: TemplateRef }) customIconTpl?: TemplateRef<any>;\n\n  /** Content template; user will typically use <ng-template #stepContent ...> */\n  @ContentChild('stepContent', { read: TemplateRef }) stepContentTpl?: TemplateRef<any>;\n\n  /** Track which steps have been visited */\n  private visited = new Set<number>();\n\n  /** Used when allowRevisit=false to block earlier steps */\n  visitedFrom = 0;\n\n  ngAfterContentInit(): void {\n    if (this.selectedIndex < 0) this.selectedIndex = 0;\n    if (this.selectedIndex > this.steps.length - 1 && this.steps.length > 0) {\n      this.selectedIndex = this.steps.length - 1;\n    }\n    this.markVisited(this.selectedIndex);\n  }\n\n  get stepLabelTpl(): TemplateRef<any> | null {\n    return this.stepLabelTplDir?.template ?? null;\n  }\n\n  get labelPositionClass(): string {\n    switch (this.labelPosition) {\n      case 'top':\n        return 'ngb-stepper-label-top';\n      case 'bottom':\n        return 'ngb-stepper-label-bottom';\n      case 'left':\n        return 'ngb-stepper-label-left';\n      default:\n        return 'ngb-stepper-label-right';\n    }\n  }\n\n  get currentErrorMessage(): string | null {\n    const step = this.steps[this.selectedIndex];\n    return step?.errorMessage ?? null;\n  }\n\n  stepId(i: number): string {\n    const s = this.steps[i];\n    const base = s?.id || `ngb-step-${i}`;\n    return `${base}-label`;\n  }\n\n  contentId(i: number): string {\n    const s = this.steps[i];\n    const base = s?.id || `ngb-step-${i}`;\n    return `${base}-content`;\n  }\n\n  private markVisited(i: number): void {\n    this.visited.add(i);\n    this.visitedFrom = Math.max(this.visitedFrom, i);\n  }\n\n  stepState(i: number): NgbStepperState {\n    const s = this.steps[i];\n    if (!s) return 'number';\n    if (s.state) return s.state;\n    if (this.isStepInError(i)) return 'error';\n    if (i === this.selectedIndex) return 'active';\n    if (i < this.selectedIndex) return 'done';\n    if (s.disabled) return 'disabled';\n    return 'number';\n  }\n\n  isStepInError(i: number): boolean {\n    const s = this.steps[i];\n    return !!s?.errorMessage && this.visited.has(i);\n  }\n\n  indicatorClass(i: number): string {\n    const state = this.stepState(i);\n    return state;\n  }\n\n  defaultIconForState(state: NgbStepperState, index: number): string {\n    if (state === 'number') {\n      return String(index + 1);\n    }\n    return this.stateIcons[state] ?? this.stateIcons['number'] ?? String(index + 1);\n  }\n\n  onHeaderClick(i: number): void {\n    if (i === this.selectedIndex) return;\n    const step = this.steps[i];\n    if (!step || step.disabled) return;\n    if (!this.allowRevisit && i < this.visitedFrom) return;\n    this.changeIndex(i);\n  }\n\n  onHeaderKeydown(event: KeyboardEvent | Event, i: number): void {\n    event.preventDefault();\n    this.onHeaderClick(i);\n  }\n\n  next(): void {\n    const target = Math.min(this.steps.length - 1, this.selectedIndex + 1);\n    if (target === this.selectedIndex) return;\n    this.nextClicked.emit(target);\n    this.changeIndex(target);\n  }\n\n  prev(): void {\n    if (!this.allowRevisit) return;\n    const target = Math.max(0, this.selectedIndex - 1);\n    if (target === this.selectedIndex) return;\n    this.prevClicked.emit(target);\n    this.changeIndex(target);\n  }\n\n  onReset(): void {\n    this.resetClicked.emit();\n    this.selectedIndex = 0;\n    this.selectedIndexChange.emit(this.selectedIndex);\n    this.selectionChange.emit({\n      previousIndex: 0,\n      currentIndex: 0,\n      step: this.steps[0],\n    });\n    this.visited.clear();\n    this.visitedFrom = 0;\n    this.markVisited(0);\n  }\n\n  onCancel(): void {\n    this.cancelClicked.emit();\n  }\n\n  private changeIndex(nextIndex: number): void {\n    const prev = this.selectedIndex;\n    this.selectedIndex = nextIndex;\n    this.markVisited(nextIndex);\n    this.selectedIndexChange.emit(this.selectedIndex);\n    this.selectionChange.emit({\n      previousIndex: prev,\n      currentIndex: nextIndex,\n      step: this.steps[nextIndex],\n    });\n  }\n}\n","<div\n  class=\"ngb-stepper\"\n  [class.horizontal]=\"orientation === 'horizontal'\"\n  [class.vertical]=\"orientation === 'vertical'\"\n  [class.ngb-responsive]=\"responsive\"\n  [class.bootstrap]=\"theme === 'bootstrap'\"\n  [class.material]=\"theme === 'material'\"\n  [class.tailwind]=\"theme === 'tailwind'\"\n  role=\"tablist\"\n  [attr.aria-orientation]=\"orientation\"\n>\n  <!-- HEADER / LABELS -->\n  <div class=\"ngb-stepper-header\">\n    <ol class=\"ngb-stepper-steps\" role=\"presentation\">\n      @for (step of steps; track step; let i = $index) {\n      <li\n        class=\"ngb-stepper-step\"\n        [class.active]=\"i === selectedIndex\"\n        [class.done]=\"i < selectedIndex && !isStepInError(i)\"\n        [class.error]=\"isStepInError(i)\"\n        [class.disabled]=\"step.disabled\"\n        role=\"tab\"\n        [attr.id]=\"stepId(i)\"\n        [attr.aria-controls]=\"contentId(i)\"\n        [attr.aria-selected]=\"i === selectedIndex\"\n        [attr.aria-disabled]=\"step.disabled || (!allowRevisit && i < visitedFrom && i !== selectedIndex)\"\n        tabindex=\"{{ i === selectedIndex ? 0 : -1 }}\"\n        (click)=\"onHeaderClick(i)\"\n        (keydown.enter)=\"onHeaderKeydown($event, i)\"\n        (keydown.space)=\"onHeaderKeydown($event, i)\"\n      >\n        <div\n          class=\"ngb-stepper-indicator\"\n          [ngClass]=\"indicatorClass(i)\"\n          aria-hidden=\"true\"\n        >\n          @if (customIconTpl) {\n            <ng-container\n              [ngTemplateOutlet]=\"customIconTpl\"\n              [ngTemplateOutletContext]=\"{ index: i, state: stepState(i) }\"\n            ></ng-container>\n          } @else {\n            {{ defaultIconForState(stepState(i), i) }}\n          }\n        </div>\n\n        <div\n          class=\"ngb-stepper-label-container\"\n          [ngClass]=\"labelPositionClass\"\n        >\n          @if (stepLabelTpl) {\n          <div class=\"ngb-stepper-label\">\n            <ng-container\n              [ngTemplateOutlet]=\"stepLabelTpl\"\n              [ngTemplateOutletContext]=\"{ index: i, step: step }\"\n            ></ng-container>\n          </div>\n          } @else {\n            <div class=\"ngb-stepper-label-text\">\n              {{ step.label || ('Step ' + (i + 1)) }}\n            </div>\n          }\n          @if (step.optional) {\n          <div class=\"ngb-stepper-optional\">\n            {{ optionalLabel }}\n          </div>\n          }\n        </div>\n      </li>\n      }\n    </ol>\n  </div>\n\n  <!-- CONTENT -->\n  <div class=\"ngb-stepper-content\" [class.ngb-stepper-content-top]=\"contentPosition === 'top'\">\n    @if (lazy) {\n      <div\n        class=\"fade-step\"\n        [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n        role=\"tabpanel\"\n        [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n        [attr.id]=\"contentId(selectedIndex)\"\n      >\n        <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n        @if (currentErrorMessage) {\n          <div class=\"ngb-stepper-error\" role=\"alert\">\n            {{ currentErrorMessage }}\n          </div>\n        }\n      </div>\n    } @else {\n      <div\n        class=\"fade-step\"\n        [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n        role=\"tabpanel\"\n        [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n        [attr.id]=\"contentId(selectedIndex)\"\n      >\n        <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n        @if (currentErrorMessage) {\n          <div class=\"ngb-stepper-error\" role=\"alert\">\n            {{ currentErrorMessage }}\n          </div>\n        }\n      </div>\n    }\n  </div>\n\n  <!-- ACTIONS -->\n  <div class=\"ngb-stepper-buttons\">\n    <button\n      type=\"button\"\n      class=\"btn btn-sm btn-outline-secondary\"\n      (click)=\"onCancel()\"\n    >\n      {{ cancelLabel }}\n    </button>\n\n    <button\n      type=\"button\"\n      class=\"btn btn-sm btn-outline-secondary\"\n      (click)=\"onReset()\"\n    >\n      {{ resetLabel }}\n    </button>\n\n    <button\n      type=\"button\"\n      class=\"btn btn-sm btn-outline-secondary\"\n      (click)=\"prev()\"\n      [disabled]=\"selectedIndex <= 0 || !allowRevisit\"\n    >\n      {{ previousLabel }}\n    </button>\n\n    <button\n      type=\"button\"\n      class=\"btn btn-sm btn-primary\"\n      (click)=\"next()\"\n      [disabled]=\"selectedIndex >= steps.length - 1 || steps[selectedIndex]?.disabled\"\n    >\n      {{ nextLabel }}\n    </button>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n  selector: 'ngb-splitter-pane',\n  standalone: true,\ntemplate: `<ng-template #content>\n      <div [style.overflow]=\"scrollable ? 'auto' : 'hidden'\" style=\"height: 100%; width: 100%;\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>`,\n  styles: [`:host { display: block; position: relative; }`]\n})\nexport class NgbSplitterPaneComponent {\n  @Input() size: string = ''; // e.g., '30%' or '200px'\n  @Input() min: string = '0px';\n  @Input() max: string = '100%';\n  @Input() scrollable: boolean = true;\n  @Input() collapsible: boolean = false;\n  @Input() collapsed: boolean = false;\n  @Output() collapsedChange = new EventEmitter<boolean>();\n\n  @ViewChild('content', { static: true }) template!: TemplateRef<any>;\n\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  HostListener,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbSplitterPaneComponent } from './splitter-pane.component';\nimport { NgbSplitterOrientation } from './splitter.types';\n\ntype PaneState = {\n  sizePx?: number;\n  minPx?: number;\n  maxPx?: number;\n  id: string;\n};\n\n@Component({\n  selector: 'ngb-splitter',\n  standalone: true,\n  imports: [CommonModule, NgbSplitterPaneComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [\n    `\n    :host { display: block; width: 100%; }\n    .splitter-container { display: flex; height: 100%; width: 100%; }\n    .splitter-container.vertical { flex-direction: column; }\n    .splitbar { background: #ccc; width: 5px; position: relative;\n    align-items: center;\n    justify-content: center; \n    flex: 0 0 auto; z-index: 10;\n      &.resizable {\n        cursor: col-resize;\n      } \n      &:hover {\n        filter: brightness(90%); /* Feedback when hovering bar */\n      }\n    }\n    .handle-line {\n      /* Thin white line in the middle */\n      border-radius: 2px;\n      opacity: 0.8;\n      left: 45%;\n      position: absolute;\n      top: 45%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n    /* Horizontal Handle: Vertical Line */\n    .splitter-container:not(.vertical) .handle-line {\n      width: 2px;\n      height: 10px; /* Adjust height as needed */\n    }\n    .pane-wrapper {\n      position: relative;\n      /* CRITICAL: Allow the pane to shrink beyond its content size */\n      min-width: 0; \n      min-height: 0;\n      \n      /* CRITICAL: Hide content that overflows during small sizes */\n      overflow: hidden; \n      \n      flex-shrink: 1;\n    }\n    /* Vertical Handle: Horizontal Line */\n    .vertical .handle-line {\n      height: 2px;\n      width: 10px; /* Adjust width as needed */\n    }\n    .vertical .splitbar.resizable {\n      cursor: row-resize;\n    }\n    .splitter-container.vertical .splitter-container .splitbar.resizable {\n      cursor: col-resize;\n    }\n    .vertical .splitbar { width: 100%; }\n    .collapse-btn { cursor: pointer; background: #666; width: 10px; height: 10px; position: absolute; top: 50%; }\n    .collapse-arrow {\n      font-size: 0.95rem;\n      user-select: none;\n      cursor: pointer;\n      line-height: 1;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 1.25rem;\n      height: 1.25rem;\n      position:absolute;\n      top:100%;\n    }\n    `,\n  ],\n  template: `\n    <div class=\"splitter-container\" [class.vertical]=\"orientation === 'vertical'\"\n      [style.min-height]=\"orientation === 'vertical' ? verticalMinHeight : null\"\n      [style.height]=\"orientation === 'vertical' ? verticalMinHeight : null\">\n      <!-- Iterate through the QueryList of panes -->\n      @for (pane of panes; track pane; let i = $index) {\n        <div class=\"pane-wrapper\" [style.flex]=\"getPaneFlex(pane)\"\n        [style.min-width]=\"orientation === 'horizontal' ? (pane.min || '0px') : null\"\n        [style.max-width]=\"orientation === 'horizontal' ? pane.max : null\"\n        [style.min-height]=\"orientation === 'vertical' ? (pane.min || '0px') : null\"\n        [style.max-height]=\"orientation === 'vertical' ? pane.max : null\"\n        >\n          <!-- Access the 'template' property we defined in the Pane component -->\n          <ng-container [ngTemplateOutlet]=\"pane.template\"></ng-container>\n        </div>\n\n        @if (i < panes.length - 1) {\n        <div class=\"splitbar\"\n        [class.resizable]=\"resizable\"\n        [style.background-color]=\"barColor\"\n        [style.width.px]=\"orientation === 'horizontal' ? handleThickness : '100%'\" \n        [style.height.px]=\"orientation === 'vertical' ? handleThickness : '100%'\" \n        role=\"separator\"\n        tabindex=\"0\"\n        [attr.aria-orientation]=\"getSeparatorAriaOrientation()\"\n        [attr.aria-valuenow]=\"getHandleValueNow(i)\"\n        [attr.aria-valuemin]=\"getHandleValueMin(i)\"\n        [attr.aria-valuemax]=\"getHandleValueMax(i)\"\n        (keydown)=\"onHandleKeyDown($event, i)\"\n        (mousedown)=\"onMouseDown($event, i)\">\n          <div class=\"handle-line\" [style.background-color]=\"lineColor\">\n            @if (pane.collapsible) {\n            <span\n              class=\"collapse-arrow bi\"\n              [ngClass]=\"getCollapseIcon(pane)\"\n              [style.color]=\"handleIconColor\"\n              (click)=\"onHandleToggle($event, i)\"\n              aria-hidden=\"true\"\n            ></span>\n            }\n          </div>\n        </div>\n        }\n      }\n    </div>\n  `,\n})\nexport class NgbSplitterComponent {\n  @ContentChildren(NgbSplitterPaneComponent) panes!: QueryList<NgbSplitterPaneComponent>;\n  @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n  @Input() handleThickness:number = 12;\n  @Input() handleIconColor: string = '#000';\n  @Input() verticalMinHeight: string = '280px';\n\n  @Input() resizable: boolean = true; // New Resize Input\n  @Input() barColor: string = '#ccc'; // Custom Bar Color\n  @Input() lineColor: string = '#000'; // Custom Line Color\n\n  private isDragging = false;\n  private currentHandleIndex = -1;\n\n  constructor(private el: ElementRef){\n\n  }\n\n// Listeners for global mouse movement\n  @HostListener('window:mousemove', ['$event'])\n  onMouseMove(event: MouseEvent) {\n    if (!this.isDragging || !this.resizable) return;\n    this.resize(event);\n  }\n\n  @HostListener('window:mouseup')\n  onMouseUp() {\n    this.isDragging = false;\n    document.body.style.cursor = 'default';\n  }\n\n  onMouseDown(event: MouseEvent, index: number) {\n    if (!this.resizable) return;\n    event.preventDefault();\n    this.isDragging = true;\n    this.currentHandleIndex = index;\n    document.body.style.cursor = this.orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n  }\n\n  private resize(event: MouseEvent) {\n    const container = this.el.nativeElement.querySelector('.splitter-container');\n    const rect = container.getBoundingClientRect();\n    const paneArr = this.panes.toArray();\n    const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n    const targetPane = paneArr[this.currentHandleIndex];\n    if (!targetPane || !paneWrappers.length) {\n      return;\n    }\n\n    const isHorizontal = this.orientation === 'horizontal';\n    const totalPixels = isHorizontal ? rect.width : rect.height;\n    if (totalPixels <= 0) {\n      return;\n    }\n\n    const mousePos = isHorizontal ? event.clientX - rect.left : event.clientY - rect.top;\n\n    let consumed = 0;\n    for (let i = 0; i < this.currentHandleIndex; i++) {\n      const prevPaneElement = paneWrappers[i];\n      if (!prevPaneElement) {\n        continue;\n      }\n      const prevRect = prevPaneElement.getBoundingClientRect();\n      consumed += isHorizontal ? prevRect.width : prevRect.height;\n      consumed += this.handleThickness;\n    }\n\n    let newSizeValue = ((mousePos - consumed) / totalPixels) * 100;\n\n    const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n    const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n\n    if (minPercent !== null) {\n      newSizeValue = Math.max(newSizeValue, minPercent);\n    }\n    if (maxPercent !== null) {\n      newSizeValue = Math.min(newSizeValue, maxPercent);\n    }\n\n    newSizeValue = Math.max(0, Math.min(100, newSizeValue));\n    targetPane.size = `${newSizeValue}%`;\n  }\n\n  onHandleToggle(event: Event, index: number) {\n    event.stopPropagation();\n    event.preventDefault();\n    this.togglePane(index);\n  }\n\n  getCollapseIcon(pane: NgbSplitterPaneComponent): string {\n    if (!pane.collapsible) {\n      return '';\n    }\n    if (this.orientation === 'horizontal') {\n      return pane.collapsed ? 'bi-caret-right-fill' : 'bi-caret-left-fill';\n    }\n    return pane.collapsed ? 'bi-caret-down-fill' : 'bi-caret-up-fill';\n  }\n\n  getPaneFlex(pane: NgbSplitterPaneComponent) {\n    if (pane.collapsed) {\n      return '0 0 0px';\n    }\n    if (pane.size) {\n      return `0 0 ${pane.size}`;\n    }\n    return '1 1 0px';\n  }\n\n  private sizeToPercent(value: string | undefined, totalPixels: number): number | null {\n    if (!value) {\n      return null;\n    }\n\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return null;\n    }\n\n    if (trimmed.endsWith('%')) {\n      const percent = parseFloat(trimmed);\n      return Number.isFinite(percent) ? percent : null;\n    }\n\n    const numeric = parseFloat(trimmed);\n    if (!Number.isFinite(numeric)) {\n      return null;\n    }\n\n    if (trimmed.endsWith('px')) {\n      return totalPixels > 0 ? (numeric / totalPixels) * 100 : null;\n    }\n\n    return numeric;\n  }\n\n  togglePane(index: number) {\n    const pane = this.panes.toArray()[index];\n    pane.collapsed = !pane.collapsed;\n    pane.collapsedChange.emit(pane.collapsed);\n  }\n\n  getSeparatorAriaOrientation(): 'horizontal' | 'vertical' {\n    // For left/right panes, the separator is vertical. For top/bottom panes, it is horizontal.\n    return this.orientation === 'horizontal' ? 'vertical' : 'horizontal';\n  }\n\n  getHandleValueNow(index: number): number | null {\n    const container = this.el.nativeElement.querySelector('.splitter-container');\n    const rect = container.getBoundingClientRect();\n    const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n    const target = paneWrappers[index];\n\n    const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n    if (!target || totalPixels <= 0) {\n      return null;\n    }\n\n    const paneRect = target.getBoundingClientRect();\n    const panePixels = this.orientation === 'horizontal' ? paneRect.width : paneRect.height;\n    return Math.round((panePixels / totalPixels) * 100);\n  }\n\n  getHandleValueMin(index: number): number | null {\n    const pane = this.panes?.toArray?.()[index];\n    const container = this.el.nativeElement.querySelector('.splitter-container');\n    const rect = container.getBoundingClientRect();\n    const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n    if (!pane || totalPixels <= 0) {\n      return null;\n    }\n    return this.sizeToPercent(pane.min, totalPixels);\n  }\n\n  getHandleValueMax(index: number): number | null {\n    const pane = this.panes?.toArray?.()[index];\n    const container = this.el.nativeElement.querySelector('.splitter-container');\n    const rect = container.getBoundingClientRect();\n    const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n    if (!pane || totalPixels <= 0) {\n      return null;\n    }\n    return this.sizeToPercent(pane.max, totalPixels);\n  }\n\n  onHandleKeyDown(event: KeyboardEvent, index: number) {\n    if (event.key === 'Enter') {\n      const pane = this.panes.toArray()[index];\n      if (pane?.collapsible) {\n        event.preventDefault();\n        this.togglePane(index);\n      }\n      return;\n    }\n\n    const isHorizontal = this.orientation === 'horizontal';\n    const negativeKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n    const positiveKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n    if (event.key !== negativeKey && event.key !== positiveKey) {\n      return;\n    }\n\n    if (!this.resizable) {\n      return;\n    }\n\n    event.preventDefault();\n    const delta = (event.shiftKey ? 5 : 2) * (event.key === positiveKey ? 1 : -1);\n    this.resizeByPercent(index, delta);\n  }\n\n  private resizeByPercent(index: number, deltaPercent: number) {\n    const container = this.el.nativeElement.querySelector('.splitter-container');\n    const rect = container.getBoundingClientRect();\n    const paneArr = this.panes.toArray();\n    const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n    const targetPane = paneArr[index];\n    const targetWrapper = paneWrappers[index];\n    if (!targetPane || !targetWrapper) {\n      return;\n    }\n\n    const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n    if (totalPixels <= 0) {\n      return;\n    }\n\n    const wrapperRect = targetWrapper.getBoundingClientRect();\n    const currentPixels = this.orientation === 'horizontal' ? wrapperRect.width : wrapperRect.height;\n    let nextPercent = (currentPixels / totalPixels) * 100 + deltaPercent;\n\n    const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n    const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n    if (minPercent !== null) {\n      nextPercent = Math.max(nextPercent, minPercent);\n    }\n    if (maxPercent !== null) {\n      nextPercent = Math.min(nextPercent, maxPercent);\n    }\n\n    nextPercent = Math.max(0, Math.min(100, nextPercent));\n    targetPane.size = `${nextPercent}%`;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type NgbChip = {\n  id: string | number;\n  label: string;\n  disabled?: boolean;\n};\n\n@Component({\n  selector: 'ngb-chips',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      .ngb-chips {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.35rem;\n        align-items: center;\n      }\n\n      .ngb-chip {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.25rem;\n        max-width: 100%;\n      }\n\n      .ngb-chip-label {\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .ngb-chip-remove {\n        border: 0;\n        background: transparent;\n        padding: 0;\n        line-height: 1;\n        cursor: pointer;\n        font-size: 1rem;\n        opacity: 0.85;\n      }\n\n      .ngb-chip-remove:disabled {\n        cursor: default;\n        opacity: 0.4;\n      }\n    `,\n  ],\n  template: `\n    <div class=\"ngb-chips\" [attr.aria-label]=\"ariaLabel\">\n      @for (item of items; track trackById($index, item)) {\n        <span class=\"badge rounded-pill bg-secondary ngb-chip\" [class.opacity-50]=\"!!item.disabled\">\n          <span class=\"ngb-chip-label\">{{ item.label }}</span>\n          @if (removable) {\n            <button\n              type=\"button\"\n              class=\"ngb-chip-remove\"\n              [disabled]=\"!!item.disabled\"\n              (click)=\"remove.emit(item)\"\n              [attr.aria-label]=\"removeLabel || 'Remove'\"\n            >\n              &times;\n            </button>\n          }\n        </span>\n      }\n    </div>\n  `,\n})\nexport class NgbChipsComponent {\n  @Input() items: NgbChip[] = [];\n  @Input() removable = true;\n  @Input() ariaLabel?: string;\n  @Input() removeLabel?: string;\n\n  @Output() remove = new EventEmitter<NgbChip>();\n\n  trackById = (_: number, item: NgbChip) => item.id;\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgbTypeaheadItem, NgbTypeaheadI18n } from './typeahead.types';\nimport { NgbChipsComponent } from '../../../chips/src/chips/chips.component';\n\n@Component({\n  selector: 'ngb-typeahead',\n  standalone: true,\n  imports: [CommonModule, NgbChipsComponent],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NgbTypeaheadComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      .typeahead-root {\n        position: relative;\n      }\n\n      .typeahead-chips-control {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: 0.35rem;\n        min-height: calc(1.5em + 0.75rem + 2px);\n        padding: 0.375rem 0.75rem;\n      }\n\n      .typeahead-chips-control input {\n        border: 0;\n        outline: 0;\n        flex: 1 1 9rem;\n        min-width: 6rem;\n        padding: 0;\n        margin: 0;\n        background: transparent;\n      }\n\n      .typeahead-chips-control input:focus {\n        outline: 0;\n        box-shadow: none;\n      }\n\n      .typeahead-panel {\n        position: absolute;\n        top: calc(100% + 0.25rem);\n        left: 0;\n        right: 0;\n        z-index: 1050;\n        max-height: 240px;\n        overflow: auto;\n\n        opacity: 0;\n        transform: translateY(-0.25rem);\n        pointer-events: none;\n        transition:\n          opacity 120ms ease,\n          transform 120ms ease;\n      }\n\n      .typeahead-panel.show {\n        opacity: 1;\n        transform: translateY(0);\n        pointer-events: auto;\n      }\n\n      .typeahead-item {\n        display: flex;\n        align-items: center;\n        gap: 0.5rem;\n      }\n      .typeahead-item-checkbox {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: 1.15rem;\n        height: 1.15rem;\n      }\n    `,\n  ],\n  template: `\n    <div class=\"typeahead-root\">\n      <div class=\"input-group mb-2\">\n        @if (chips && multiSelect) {\n          <div class=\"form-control typeahead-chips-control\" (click)=\"disabled ? null : focusInput()\">\n            <ngb-chips\n              [items]=\"selected\"\n              [removable]=\"true\"\n              (remove)=\"removeSelected($event)\"\n              ariaLabel=\"Selected items\"\n            ></ngb-chips>\n            <input\n              #inputEl\n              type=\"text\"\n              [disabled]=\"disabled\"\n              [attr.placeholder]=\"selected.length ? '' : (i18n?.placeholder || 'Type to search')\"\n              [value]=\"query\"\n              (input)=\"onNativeInput($event)\"\n              (focus)=\"onInputFocus($event)\"\n              (blur)=\"onInputBlur($event)\"\n              (keydown)=\"onKeydown($event)\"\n              (keyup)=\"onKeyup($event)\"\n              aria-autocomplete=\"list\"\n              role=\"combobox\"\n              [attr.aria-expanded]=\"overlayVisible\"\n              [attr.aria-controls]=\"overlayId\"\n              [attr.aria-activedescendant]=\"activeDescendantId\"\n            />\n          </div>\n        } @else {\n          <input\n            #inputEl\n            type=\"text\"\n            class=\"form-control\"\n            [disabled]=\"disabled\"\n            [attr.placeholder]=\"i18n?.placeholder || 'Type to search'\"\n            [value]=\"displayQuery\"\n            (input)=\"onNativeInput($event)\"\n            (focus)=\"onInputFocus($event)\"\n            (blur)=\"onInputBlur($event)\"\n            (keydown)=\"onKeydown($event)\"\n            (keyup)=\"onKeyup($event)\"\n            aria-autocomplete=\"list\"\n            role=\"combobox\"\n            [attr.aria-expanded]=\"overlayVisible\"\n            [attr.aria-controls]=\"overlayId\"\n            [attr.aria-activedescendant]=\"activeDescendantId\"\n          />\n        }\n\n        @if (showClearButton && (query || (!multiSelect && selected.length))) {\n          <button\n            type=\"button\"\n            class=\"btn btn-outline-secondary\"\n            (click)=\"onClearClick($event)\"\n            [disabled]=\"disabled\"\n            [attr.aria-label]=\"i18n?.clear || 'Clear'\"\n          >\n            &times;\n          </button>\n        }\n\n        @if (showDropdownButton) {\n          <button\n            type=\"button\"\n            class=\"btn btn-outline-secondary\"\n            (click)=\"onDropdownButtonClick($event)\"\n            [disabled]=\"disabled\"\n            [attr.aria-label]=\"i18n?.dropdownButtonLabel || 'Toggle suggestions'\"\n          >\n            &#9662;\n          </button>\n        }\n      </div>\n\n      <div\n        #scroller\n        class=\"dropdown-menu w-100 p-0 typeahead-panel\"\n        [class.show]=\"overlayVisible\"\n        [id]=\"overlayId\"\n        role=\"listbox\"\n        (scroll)=\"onScroll($event)\"\n      >\n        @if (vScroll) {\n          <div [style.height.px]=\"beforePadding\"></div>\n        }\n\n        @for (item of visible; track trackById($index, item); let idx = $index) {\n        <button\n          type=\"button\"\n          class=\"dropdown-item\"\n          [class.active]=\"idx === activeIndex\"\n          [class.fw-semibold]=\"isSelected(item)\"\n          [attr.aria-selected]=\"isSelected(item)\"\n          [attr.id]=\"getOptionId(idx)\"\n          (click)=\"selectItem(item)\"\n          [disabled]=\"item.disabled\"\n        >\n          <div class=\"typeahead-item\">\n            @if (multiSelect) {\n            <span class=\"typeahead-item-checkbox\">\n              <input\n                type=\"checkbox\"\n                class=\"form-check-input m-0\"\n                [checked]=\"isSelected(item)\"\n                [disabled]=\"item.disabled\"\n                tabindex=\"-1\"\n                aria-hidden=\"true\"\n              />\n            </span>\n            }\n            @if (resolvedItemTemplate; as tpl) {\n              <ng-container\n                [ngTemplateOutlet]=\"tpl\"\n                [ngTemplateOutletContext]=\"{\n                  $implicit: item,\n                  item: item,\n                  query: query,\n                  selected: isSelected(item),\n                  index: idx\n                }\"\n              ></ng-container>\n            } @else {\n              <span>{{ item.label }}</span>\n            }\n          </div>\n        </button>\n        }\n\n        @if (vScroll) {\n          <div [style.height.px]=\"afterPadding\"></div>\n        }\n\n        @if (showNoResults) {\n        <div class=\"dropdown-item text-muted text-center\">\n          {{ i18n?.noResults || 'No results' }}\n        </div>\n        }\n      </div>\n\n      @if (multiSelect && selected.length) {\n      <div class=\"mt-2 small text-muted\">\n        {{ selectionSummary }}\n        <button type=\"button\" class=\"btn btn-link btn-sm ps-1\" (click)=\"clearSelection()\">\n          {{ i18n?.clearSelection || 'Clear' }}\n        </button>\n      </div>\n      }\n    </div>\n  `,\n})\nexport class NgbTypeaheadComponent implements AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor {\n  @Input() data: NgbTypeaheadItem[] = [];\n  @Input() debounceTime = 200;\n  @Input() characterTyped = 1;\n  @Input() limit = 10;\n  @Input() selectExact = false;\n  @Input() multiSelect = false;\n  @Input() matchSelection = false;\n  @Input() showDropdownButton = false;\n  @Input() showClearButton = false;\n  @Input() updateOnBlur = false;\n  @Input() updateOnTab = true;\n  @Input() separator: string | string[] = ',';\n  @Input() chips = false;\n  @Input() vScroll = false;\n  @Input() vItemSize = 40;\n  // `TemplateRef` types can become non-assignable in monorepo setups with multiple Angular installations.\n  // Using `any` keeps the API flexible while still supporting Angular templates at runtime.\n  @Input() itemTemplate?: any;\n  @Input() i18n?: NgbTypeaheadI18n;\n\n  @ContentChild(TemplateRef) projectedItemTemplate?: any;\n\n  @Output() completeMethod = new EventEmitter<string>();\n  @Output() onSelect = new EventEmitter<NgbTypeaheadItem>();\n  @Output() onUnselect = new EventEmitter<NgbTypeaheadItem>();\n  @Output() onAdd = new EventEmitter<NgbTypeaheadItem>();\n  @Output() onFocus = new EventEmitter<FocusEvent>();\n  @Output() onBlur = new EventEmitter<FocusEvent>();\n  @Output() onDropdownClick = new EventEmitter<MouseEvent>();\n  @Output() onClear = new EventEmitter<Event>();\n  @Output() onInputKeydown = new EventEmitter<KeyboardEvent>();\n  @Output() onKeyUp = new EventEmitter<KeyboardEvent>();\n  @Output() onShow = new EventEmitter<Event>();\n  @Output() onHide = new EventEmitter<Event>();\n  @Output() onLazyLoad = new EventEmitter<void>();\n\n  @Output() selectedItems = new EventEmitter<NgbTypeaheadItem[]>();\n  @Output() selectionChange = new EventEmitter<NgbTypeaheadItem[]>();\n  @Output() onChange = new EventEmitter<string>();\n  @Output() onScrollEvent = new EventEmitter<void>(); // legacy, kept for compatibility\n\n  @ViewChild('scroller', { static: true }) scroller!: ElementRef<HTMLElement>;\n  @ViewChild('inputEl') inputEl?: ElementRef<HTMLInputElement>;\n  @ViewChildren('itemButton') itemButtons?: QueryList<ElementRef<HTMLButtonElement>>;\n\n  disabled = false;\n  query = '';\n  filtered: NgbTypeaheadItem[] = [];\n  visible: NgbTypeaheadItem[] = [];\n  selected: NgbTypeaheadItem[] = [];\n  overlayVisible = false;\n  private openedByDropdown = false;\n  private hasSearched = false;\n  activeIndex = -1;\n  private inputFocused = false;\n  private pointerDownInside = false;\n  private lastFilterTerm = '';\n  private keepOpenOnEmpty = false;\n  readonly overlayId = `ngb-typeahead-overlay-${Math.random().toString(36).slice(2)}`;\n\n  viewportHeight = 240;\n  itemHeight = 40;\n  beforePadding = 0;\n  afterPadding = 0;\n  private viewportStartIndex = 0;\n  private debounceId?: ReturnType<typeof setTimeout>;\n\n  private onControlChange: (value: any) => void = () => {};\n  private onControlTouched: () => void = () => {};\n  private controlValue: any = null;\n\n  ngAfterViewInit(): void {\n    // do not open overlay on init; just ensure viewport state is consistent\n    this.applyFilter('');\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['vScroll'] || changes['vItemSize']) {\n      const nextSize = Number(this.vItemSize);\n      this.itemHeight = Number.isFinite(nextSize) && nextSize > 0 ? nextSize : 40;\n      this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n    }\n    if (changes['data'] && !changes['data'].firstChange) {\n      this.applyFilter(this.query);\n    }\n    if (changes['data'] && this.controlValue != null && !this.inputFocused && !this.overlayVisible) {\n      this.applyControlValue(this.controlValue);\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.debounceId) {\n      clearTimeout(this.debounceId);\n    }\n  }\n\n  constructor(\n    private host: ElementRef<HTMLElement>,\n    private cdr: ChangeDetectorRef,\n  ) {}\n\n  @HostListener('document:mousedown', ['$event'])\n  onDocumentMouseDown(event: MouseEvent) {\n    const target = event.target as Node | null;\n    if (!target) return;\n\n    const inside = this.host.nativeElement.contains(target);\n    this.pointerDownInside = inside;\n    if (inside) return;\n    if (!this.overlayVisible) return;\n\n    this.commitInputOnClose();\n    this.hideOverlay(event);\n  }\n\n  @HostListener('document:focusin', ['$event'])\n  onDocumentFocusIn(event: FocusEvent) {\n    if (!this.overlayVisible) return;\n    const target = event.target as Node | null;\n    if (!target) return;\n    if (this.host.nativeElement.contains(target)) return;\n\n    this.commitInputOnClose();\n    this.hideOverlay(event);\n  }\n\n  get activeDescendantId(): string | null {\n    if (!this.overlayVisible) return null;\n    if (this.activeIndex < 0 || this.activeIndex >= this.visible.length) return null;\n    return this.getOptionId(this.activeIndex);\n  }\n\n  get showNoResults(): boolean {\n    return this.overlayVisible && this.hasSearched && this.filtered.length === 0;\n  }\n\n  get displayQuery(): string {\n    if (!this.multiSelect) {\n      return this.query;\n    }\n    if (this.chips) {\n      return this.query;\n    }\n    const term = (this.query || '').trim();\n    const prefix = this.selected.map((s) => s.label).join(', ');\n    if (!prefix) {\n      return this.query;\n    }\n    if (term) {\n      return `${prefix}, ${term}`;\n    }\n    return prefix;\n  }\n\n  get selectionSummary() {\n    if (!this.selected.length) return '';\n    if (this.selected.length <= 2) {\n      return this.selected.map((s) => s.label).join(', ');\n    }\n    const firstTwo = this.selected.slice(0, 2).map((s) => s.label).join(', ');\n    return `${firstTwo} (+${this.selected.length - 2})`;\n  }\n\n  get resolvedItemTemplate(): any {\n    return this.itemTemplate ?? this.projectedItemTemplate;\n  }\n\n  writeValue(value: any): void {\n    this.controlValue = value;\n    this.applyControlValue(value);\n  }\n\n  private applyControlValue(value: any): void {\n    if (this.multiSelect) {\n      const asArray = Array.isArray(value) ? value : value == null ? [] : [value];\n      const next = asArray.map((v) => this.coerceToItem(v)).filter(Boolean) as NgbTypeaheadItem[];\n      const seen = new Set<string | number>();\n      this.selected = next.filter((i) => (seen.has(i.id) ? false : (seen.add(i.id), true)));\n      this.query = '';\n      this.keepOpenOnEmpty = false;\n      this.applyFilter('');\n      this.cdr.markForCheck();\n      return;\n    }\n\n    if (value == null) {\n      this.selected = [];\n      this.query = '';\n      this.keepOpenOnEmpty = false;\n      this.applyFilter('');\n      this.cdr.markForCheck();\n      return;\n    }\n\n    const item = this.coerceToItem(value);\n    if (!item) return;\n    this.selected = [item];\n    this.query = item.label;\n    if (this.inputEl?.nativeElement) {\n      this.inputEl.nativeElement.value = item.label;\n    }\n    this.keepOpenOnEmpty = false;\n    this.applyFilter(this.query);\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onControlChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onControlTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    if (isDisabled) {\n      this.hideOverlay();\n    }\n    this.cdr.markForCheck();\n  }\n\n  onInput(value: string) {\n    if (this.disabled) return;\n    this.keepOpenOnEmpty = false;\n    const trimmed = (value ?? '').trim();\n    if (!this.multiSelect && this.selected.length) {\n      const selectedLabel = (this.selected[0]?.label ?? '').trim();\n      if (trimmed.toLowerCase() !== selectedLabel.toLowerCase()) {\n        const previous = this.selected[0];\n        this.selected = [];\n        this.selectedItems.emit(this.selected);\n        this.selectionChange.emit(this.selected);\n        if (previous) {\n          this.onUnselect.emit(previous);\n        }\n        this.propagateControlValue();\n      }\n    }\n\n    if (this.chips && this.multiSelect) {\n      const tokens = this.splitBySeparators(value);\n      if (tokens.tokensToAdd.length) {\n        for (const token of tokens.tokensToAdd) {\n          this.addToken(token);\n        }\n      }\n      this.query = tokens.remaining;\n    } else {\n      this.query = value;\n    }\n    this.onChange.emit(value);\n    // Input events imply the user is interacting with the field; treat as focused so the overlay can open immediately.\n    this.inputFocused = true;\n    if (this.debounceId) clearTimeout(this.debounceId);\n    if (this.debounceTime <= 0) {\n      this.applyFilter(value);\n      this.completeMethod.emit(value);\n    } else {\n      this.debounceId = setTimeout(() => {\n        this.applyFilter(value);\n        this.completeMethod.emit(value);\n        this.cdr.markForCheck();\n      }, this.debounceTime);\n    }\n  }\n\n  onNativeInput(event: Event) {\n    const target = event.target as HTMLInputElement | null;\n    const value = target?.value ?? '';\n    if (this.multiSelect && !this.chips && this.selected.length) {\n      const prefix = this.selected.map((s) => s.label).join(', ');\n      const normalizedPrefix = prefix.trim();\n      if (normalizedPrefix && value.toLowerCase().startsWith(normalizedPrefix.toLowerCase())) {\n        let rest = value.slice(normalizedPrefix.length);\n        rest = rest.replace(/^[\\s,]+/, '');\n        this.onInput(rest);\n        return;\n      }\n    }\n    this.onInput(value);\n  }\n\n  onKeydown(event: KeyboardEvent) {\n    if (this.disabled) return;\n    this.onInputKeydown.emit(event);\n    if (this.chips && this.multiSelect && event.key === 'Tab' && this.updateOnTab) {\n      event.preventDefault();\n      this.addToken((this.query || '').trim());\n      this.focusInput();\n      return;\n    }\n    if (event.key === 'Tab' && this.overlayVisible) {\n      const active = this.visible[this.activeIndex];\n      if (active) {\n        this.selectItem(active);\n        this.hideOverlay(event);\n      }\n      return;\n    }\n    if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n      event.preventDefault();\n      this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\n    } else if (event.key === 'Home') {\n      if (this.overlayVisible) {\n        event.preventDefault();\n        this.setActiveGlobalIndex(0);\n      }\n    } else if (event.key === 'End') {\n      if (this.overlayVisible) {\n        event.preventDefault();\n        this.setActiveGlobalIndex(this.filtered.length - 1);\n      }\n    } else if (event.key === 'Enter') {\n      event.preventDefault();\n      const active = this.visible[this.activeIndex] || this.visible[0];\n      if (active) {\n        this.selectItem(active);\n        this.hideOverlay(event);\n      }\n    } else if (event.key === 'Escape') {\n      if (this.overlayVisible) {\n        event.preventDefault();\n        this.hideOverlay(event);\n      }\n    }\n  }\n\n  onKeyup(event: KeyboardEvent) {\n    this.onKeyUp.emit(event);\n  }\n\n  onInputFocus(event: FocusEvent) {\n    if (this.disabled) return;\n    this.onFocus.emit(event);\n    this.inputFocused = true;\n    if (this.multiSelect && !this.overlayVisible) {\n      // When multi-select is displaying the selection summary, start searching with a clean query.\n      this.query = '';\n      // After a multi-select session, re-opening the field should show the list again even with an empty query.\n      if (!this.chips && this.selected.length) {\n        this.keepOpenOnEmpty = true;\n        this.applyFilter('');\n        this.activatePreferredOption();\n        return;\n      }\n    }\n    // Opening behavior: only show overlay when threshold met, or dropdown button explicitly used.\n    if (this.query.length >= this.characterTyped) {\n      this.showOverlay(event);\n    }\n  }\n\n  onInputBlur(event: FocusEvent) {\n    this.onBlur.emit(event);\n    this.onControlTouched();\n    this.inputFocused = false;\n    // Do not close on blur directly: scrolling/clicking within the overlay can blur the input.\n    // Closing/commit is handled by outside click (document:mousedown) and focus moving outside (document:focusin).\n\n    if (this.chips && this.multiSelect && this.updateOnBlur) {\n      this.addToken((this.query || '').trim());\n    }\n  }\n\n  onScroll(event: Event) {\n    const target = event.target as HTMLElement;\n    const scrollTop = target.scrollTop;\n    this.onScrollEvent.emit();\n    this.updateViewport(scrollTop);\n\n    const remaining = target.scrollHeight - (target.scrollTop + target.clientHeight);\n    if (remaining < 48) {\n      this.onLazyLoad.emit();\n    }\n  }\n\n  selectItem(item: NgbTypeaheadItem) {\n    if (this.disabled) return;\n    if (!item || item.disabled) return;\n    this.validateItem(item);\n    if (this.multiSelect) {\n      const exists = this.selected.find((s) => s.id === item.id);\n      if (exists) {\n        this.selected = this.selected.filter((s) => s.id !== item.id);\n        this.onUnselect.emit(item);\n      } else {\n        this.selected = [...this.selected, item];\n        this.onSelect.emit(item);\n      }\n      this.propagateControlValue();\n      // After selecting/unselecting, show the chosen values in the input and keep the panel open.\n      this.keepOpenOnEmpty = true;\n      if (this.chips) {\n        this.query = '';\n      } else {\n        this.query = '';\n      }\n      this.applyFilter('');\n    } else {\n      if (this.selected.length && this.selected[0]?.id !== item.id) {\n        this.onUnselect.emit(this.selected[0]);\n      }\n      this.selected = [item];\n      this.query = item.label;\n      if (this.inputEl?.nativeElement) {\n        this.inputEl.nativeElement.value = item.label;\n      }\n      this.onSelect.emit(item);\n      this.propagateControlValue();\n      this.hideOverlay();\n    }\n    this.selectedItems.emit(this.selected);\n    this.selectionChange.emit(this.selected);\n    this.cdr.markForCheck();\n  }\n\n  focusInput() {\n    this.inputEl?.nativeElement?.focus();\n  }\n\n  removeSelected(item: NgbTypeaheadItem) {\n    if (this.disabled) return;\n    if (!item) return;\n    const exists = this.selected.find((s) => s.id === item.id);\n    if (!exists) return;\n    this.selected = this.selected.filter((s) => s.id !== item.id);\n    this.onUnselect.emit(item);\n    this.propagateControlValue();\n    this.selectedItems.emit(this.selected);\n    this.selectionChange.emit(this.selected);\n    this.cdr.markForCheck();\n  }\n\n  clearSelection() {\n    const previous = [...this.selected];\n    this.selected = [];\n    this.selectedItems.emit(this.selected);\n    this.selectionChange.emit(this.selected);\n    if (!this.multiSelect && previous[0]) {\n      this.onUnselect.emit(previous[0]);\n    }\n    this.propagateControlValue();\n    this.cdr.markForCheck();\n  }\n\n  isSelected(item: NgbTypeaheadItem) {\n    return this.selected.some((s) => s.id === item.id);\n  }\n\n  trackById = (_: number, item: NgbTypeaheadItem) => item.id;\n\n  getOptionId(index: number): string {\n    return `${this.overlayId}-opt-${index}`;\n  }\n\n  onDropdownButtonClick(event: MouseEvent) {\n    if (this.disabled) return;\n    this.onDropdownClick.emit(event);\n    if (this.overlayVisible) {\n      this.hideOverlay(event);\n      this.openedByDropdown = false;\n    } else {\n      this.openedByDropdown = true;\n      if (this.scroller?.nativeElement) {\n        this.scroller.nativeElement.scrollTop = 0;\n      }\n      this.showOverlay(event, true);\n      // Show all items when the dropdown button is used, regardless of current query.\n      this.applyFilter('');\n      this.activatePreferredOption();\n    }\n    this.inputEl?.nativeElement.focus();\n    this.cdr.markForCheck();\n  }\n\n  onClearClick(event: Event) {\n    if (this.disabled) return;\n    this.onClear.emit(event);\n    this.query = '';\n    this.clearSelection();\n    this.applyFilter('');\n    this.hideOverlay(event);\n    this.inputEl?.nativeElement.focus();\n    this.cdr.markForCheck();\n  }\n\n  private applyFilter(value: string) {\n    const term = (value || '').toLowerCase();\n    if (term !== this.lastFilterTerm) {\n      this.lastFilterTerm = term;\n      if (this.scroller?.nativeElement) {\n        this.scroller.nativeElement.scrollTop = 0;\n      }\n    }\n    const meetsThreshold = term.length >= this.characterTyped || this.openedByDropdown || (this.multiSelect && this.keepOpenOnEmpty);\n    this.hasSearched = term.length >= this.characterTyped || this.openedByDropdown;\n\n    const base = meetsThreshold ? this.data.filter((d) => (d.label || '').toLowerCase().includes(term)) : [];\n    const limited = this.limit ? base.slice(0, this.limit) : base;\n    this.filtered = limited;\n    if (this.selectExact && limited.length === 1) {\n      this.selectItem(limited[0]);\n    }\n    this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n\n    if (meetsThreshold && !this.overlayVisible && (this.inputFocused || this.openedByDropdown)) {\n      this.showOverlay();\n    }\n    if (!meetsThreshold && this.overlayVisible && !this.openedByDropdown) {\n      this.hideOverlay();\n    }\n    this.cdr.markForCheck();\n  }\n\n  private updateViewport(scrollTop: number) {\n    if (!this.vScroll) {\n      this.beforePadding = 0;\n      this.afterPadding = 0;\n      this.visible = this.filtered;\n      this.viewportStartIndex = 0;\n      this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n      return;\n    }\n    const total = this.filtered.length;\n    const visibleCount = Math.ceil(this.viewportHeight / this.itemHeight) + 2;\n    const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n    const end = Math.min(start + visibleCount, total);\n    this.beforePadding = start * this.itemHeight;\n    this.afterPadding = Math.max(total - end, 0) * this.itemHeight;\n    this.visible = this.filtered.slice(start, end);\n    this.viewportStartIndex = start;\n    this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n  }\n\n  private activatePreferredOption() {\n    if (!this.filtered.length || !this.scroller?.nativeElement) {\n      this.activeIndex = -1;\n      return;\n    }\n\n    const trimmed = (this.query || '').trim().toLowerCase();\n    let preferredIndex = -1;\n    if (trimmed) {\n      preferredIndex = this.filtered.findIndex((d) => (d.label || '').trim().toLowerCase() === trimmed);\n    }\n    if (preferredIndex === -1 && this.selected.length) {\n      const firstSelected = this.selected[0];\n      preferredIndex = this.filtered.findIndex((d) => d.id === firstSelected.id);\n    }\n\n    if (preferredIndex === -1) {\n      preferredIndex = 0;\n    }\n\n    const scrollTop = Math.max(0, preferredIndex * this.itemHeight - this.itemHeight);\n    this.scroller.nativeElement.scrollTop = scrollTop;\n    this.updateViewport(scrollTop);\n\n    const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n    this.activeIndex = Math.max(0, Math.min(preferredIndex - start, this.visible.length - 1));\n  }\n\n  private moveActive(direction: 1 | -1) {\n    if (!this.overlayVisible) {\n      this.showOverlay();\n    }\n    if (!this.filtered.length) return;\n    const currentGlobal = this.activeGlobalIndex();\n    const total = this.filtered.length;\n    const nextGlobal = currentGlobal < 0 ? 0 : (currentGlobal + direction + total) % total;\n    this.setActiveGlobalIndex(nextGlobal);\n  }\n\n  private activeGlobalIndex(): number {\n    if (this.activeIndex < 0) return -1;\n    return this.viewportStartIndex + this.activeIndex;\n  }\n\n  private setActiveGlobalIndex(globalIndex: number) {\n    if (!this.filtered.length) {\n      this.activeIndex = -1;\n      return;\n    }\n    const clamped = Math.max(0, Math.min(globalIndex, this.filtered.length - 1));\n    const scroller = this.scroller?.nativeElement;\n    if (!scroller) {\n      this.activeIndex = 0;\n      return;\n    }\n\n    const itemTop = clamped * this.itemHeight;\n    const itemBottom = itemTop + this.itemHeight;\n    const viewTop = scroller.scrollTop;\n    const viewBottom = viewTop + (scroller.clientHeight || this.viewportHeight);\n\n    let nextScrollTop = viewTop;\n    if (itemTop < viewTop) {\n      nextScrollTop = itemTop;\n    } else if (itemBottom > viewBottom) {\n      nextScrollTop = Math.max(0, itemBottom - (scroller.clientHeight || this.viewportHeight));\n    }\n\n    if (nextScrollTop !== viewTop) {\n      scroller.scrollTop = nextScrollTop;\n    }\n\n    this.updateViewport(scroller.scrollTop);\n    this.activeIndex = Math.max(0, Math.min(clamped - this.viewportStartIndex, this.visible.length - 1));\n    this.cdr.markForCheck();\n  }\n\n  private validateItem(item: NgbTypeaheadItem) {\n    if (item.id == null) {\n      throw new Error('Typeahead items must include an id.');\n    }\n  }\n\n  private showOverlay(event?: Event, openedByDropdown = false) {\n    this.openedByDropdown = openedByDropdown;\n    if (this.overlayVisible) return;\n    this.overlayVisible = true;\n    this.activeIndex = this.visible.length ? 0 : -1;\n    this.onShow.emit(event ?? new Event('show'));\n    this.cdr.markForCheck();\n  }\n\n  private hideOverlay(event?: Event) {\n    if (!this.overlayVisible) return;\n    this.overlayVisible = false;\n    this.openedByDropdown = false;\n    this.activeIndex = -1;\n    this.onHide.emit(event ?? new Event('hide'));\n    this.cdr.markForCheck();\n  }\n\n  private commitInputOnClose() {\n    const trimmed = (this.query || '').trim();\n    if (!trimmed) {\n      return;\n    }\n\n    if (this.matchSelection) {\n      const exact = this.data.find((d) => (d.label || '').toLowerCase() === trimmed.toLowerCase());\n      if (!exact) {\n        this.query = '';\n        if (!this.multiSelect) {\n          this.clearSelection();\n        }\n      } else if (!this.multiSelect) {\n        this.selected = [exact];\n        this.selectionChange.emit(this.selected);\n        this.selectedItems.emit(this.selected);\n        this.propagateControlValue();\n      }\n      return;\n    }\n\n    if (this.updateOnBlur && !this.multiSelect && this.selected.length === 0) {\n      const added: NgbTypeaheadItem = { id: trimmed, label: trimmed, value: trimmed };\n      this.selected = [added];\n      this.onAdd.emit(added);\n      this.selectionChange.emit(this.selected);\n      this.selectedItems.emit(this.selected);\n      this.propagateControlValue();\n    }\n  }\n\n  private splitBySeparators(value: string): { tokensToAdd: string[]; remaining: string } {\n    const separators = Array.isArray(this.separator) ? this.separator : [this.separator];\n    const safe = separators.filter((s) => s != null && `${s}`.length > 0).map((s) => `${s}`.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n    if (!safe.length) {\n      return { tokensToAdd: [], remaining: value };\n    }\n    const regex = new RegExp(`(?:${safe.join('|')})`);\n    if (!regex.test(value)) {\n      return { tokensToAdd: [], remaining: value };\n    }\n    const parts = value.split(new RegExp(`(?:${safe.join('|')})`, 'g')).map((p) => p.trim());\n    const endsWithSeparator = separators.some((sep) => value.endsWith(sep));\n    const tokensToAdd = (endsWithSeparator ? parts : parts.slice(0, -1)).filter(Boolean);\n    const remaining = endsWithSeparator ? '' : (parts[parts.length - 1] || '');\n    return { tokensToAdd, remaining };\n  }\n\n  private addToken(raw: string) {\n    const token = (raw || '').trim();\n    if (!this.chips || !this.multiSelect) return;\n    if (!token) return;\n\n    const match = this.data.find((d) => (d.label || '').trim().toLowerCase() === token.toLowerCase());\n    const item: NgbTypeaheadItem = match ?? { id: token, label: token, value: token };\n\n    if (this.matchSelection && !match) {\n      this.query = '';\n      return;\n    }\n\n    if (this.selected.some((s) => s.id === item.id)) {\n      this.query = '';\n      return;\n    }\n\n    this.selected = [...this.selected, item];\n    this.onAdd.emit(item);\n    this.propagateControlValue();\n    this.selectedItems.emit(this.selected);\n    this.selectionChange.emit(this.selected);\n    this.query = '';\n    this.keepOpenOnEmpty = true;\n    this.applyFilter('');\n  }\n\n  private propagateControlValue() {\n    if (this.multiSelect) {\n      const next = this.selected.map((item) => (item.value !== undefined ? item.value : item));\n      this.controlValue = next;\n      this.onControlChange(next);\n      return;\n    }\n    const first = this.selected[0];\n    const next = first ? (first.value !== undefined ? first.value : first) : null;\n    this.controlValue = next;\n    this.onControlChange(next);\n  }\n\n  private coerceToItem(value: any): NgbTypeaheadItem | null {\n    if (value == null) return null;\n    if (typeof value === 'object' && (value as NgbTypeaheadItem).id != null && (value as NgbTypeaheadItem).label != null) {\n      return value as NgbTypeaheadItem;\n    }\n    const match = this.data.find((d) => d.value === value || d.id === value || (d.label || '').toLowerCase() === `${value}`.toLowerCase());\n    if (match) return match;\n    return { id: `${value}`, label: `${value}`, value };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  QueryList,\n  ViewChildren,\n  ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbTreeNode, NgbTreeType, NgbTreeI18n } from './tree.types';\n\n@Component({\n  selector: 'ngb-tree',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"d-flex gap-2 mb-2\">\n      <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"expandAllNodes()\" [attr.aria-label]=\"i18n?.expandAll || 'Expand all'\">\n        {{ i18n?.expandAll || 'Expand all' }}\n      </button>\n      <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"collapseAllNodes()\" [attr.aria-label]=\"i18n?.collapseAll || 'Collapse all'\">\n        {{ i18n?.collapseAll || 'Collapse all' }}\n      </button>\n    </div>\n\n    <ul class=\"list-unstyled mb-0\" role=\"tree\" [attr.aria-label]=\"i18n?.treeLabel || 'Tree'\">\n      @for (node of nodes; track trackById($index, node); let i = $index) {\n        <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: node, level: 1, index: i }\"></ng-container>\n      }\n    </ul>\n\n    <ng-template #renderNode let-node let-level=\"level\" let-index=\"index\">\n      <li\n        class=\"d-flex align-items-start\"\n        role=\"treeitem\"\n        [attr.aria-expanded]=\"hasChildren(node) ? !!node.expanded : null\"\n        [attr.aria-level]=\"level\"\n      >\n        @if (hasChildren(node)) {\n          <button\n            #nodeBtn\n            type=\"button\"\n            class=\"btn btn-sm px-1\"\n            (click)=\"toggleNode(node)\"\n            (keydown)=\"onNodeKeydown($event, node)\"\n            [attr.aria-label]=\"(node.expanded ? i18n?.collapse || 'Collapse' : i18n?.expand || 'Expand') + ' ' + node.label\"\n          >\n            @if (type === 'json') {\n              <span class=\"bi\" [ngClass]=\"node.expanded ? minusIcon : plusIcon\" aria-hidden=\"true\"></span>\n            } @else {\n              <span class=\"bi\" [ngClass]=\"node.expanded ? collapseIcon : expandIcon\" aria-hidden=\"true\"></span>\n            }\n          </button>\n        } @else {\n          <span class=\"d-inline-block px-1\" style=\"width: 1.5rem;\"></span>\n        }\n\n        <label class=\"form-check d-inline-flex align-items-center gap-2 flex-grow-1 mb-0\">\n          @if (showCheckbox) {\n          <input\n            type=\"checkbox\"\n            class=\"form-check-input\"\n            [checked]=\"!!node.selected\"\n            [disabled]=\"node.disabled\"\n            (change)=\"toggleSelection(node, $event.target.checked)\"\n            [attr.aria-label]=\"(i18n?.select || 'Select') + ' ' + node.label\"\n          />\n          }\n          <span class=\"form-check-label\">{{ node.label }}</span>\n        </label>\n      </li>\n\n      @if (node.expanded && hasChildren(node)) {\n      <ul\n        class=\"list-unstyled ms-4\"\n        role=\"group\"\n      >\n        @for (child of node.children; track trackById($index, child); let ci = $index) {\n          <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: child, level: level + 1, index: ci }\"></ng-container>\n        }\n      </ul>\n      }\n    </ng-template>\n  `,\n})\nexport class NgbTreeComponent {\n  @Input() nodes: NgbTreeNode[] = [];\n  @Input() type: NgbTreeType = 'text';\n  @Input() showCheckbox = false;\n  @Input() i18n?: NgbTreeI18n;\n  @Input() expandIcon = 'bi-caret-right-fill';\n  @Input() collapseIcon = 'bi-caret-down-fill';\n  @Input() plusIcon = 'bi-file-plus-fill';\n  @Input() minusIcon = 'bi-file-minus-fill';\n\n  @Output() expand = new EventEmitter<NgbTreeNode>();\n  @Output() collapse = new EventEmitter<NgbTreeNode>();\n  @Output() expandAll = new EventEmitter<void>();\n  @Output() collapseAll = new EventEmitter<void>();\n  @Output() selectionChange = new EventEmitter<NgbTreeNode[]>();\n\n  @ViewChildren('nodeBtn', { read: ElementRef }) nodeButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n  trackById = (_: number, node: NgbTreeNode) => node.id;\n\n  hasChildren(node: NgbTreeNode) {\n    return Array.isArray(node.children) && node.children.length > 0;\n  }\n\n  toggleNode(node: NgbTreeNode) {\n    if (!this.hasChildren(node)) return;\n    node.expanded = !node.expanded;\n    node.expanded ? this.expand.emit(node) : this.collapse.emit(node);\n  }\n\n  toggleSelection(node: NgbTreeNode, value: boolean) {\n    node.selected = value;\n    this.selectionChange.emit(this.collectSelection(this.nodes));\n  }\n\n  expandAllNodes() {\n    this.setExpanded(this.nodes, true);\n    this.expandAll.emit();\n  }\n\n  collapseAllNodes() {\n    this.setExpanded(this.nodes, false);\n    this.collapseAll.emit();\n  }\n\n  onNodeKeydown(event: KeyboardEvent, node: NgbTreeNode) {\n    const key = event.key;\n    const target = event.target as HTMLElement;\n    if (key === 'Enter' || key === ' ') {\n      event.preventDefault();\n      this.toggleNode(node);\n    } else if (key === 'ArrowRight') {\n      if (this.hasChildren(node) && !node.expanded) {\n        event.preventDefault();\n        node.expanded = true;\n        this.expand.emit(node);\n      }\n    } else if (key === 'ArrowLeft') {\n      if (this.hasChildren(node) && node.expanded) {\n        event.preventDefault();\n        node.expanded = false;\n        this.collapse.emit(node);\n      }\n    } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n      event.preventDefault();\n      this.focusSibling(target, key === 'ArrowDown' ? 1 : -1);\n    }\n  }\n\n  private focusSibling(current: HTMLElement, direction: 1 | -1) {\n    const buttons = this.nodeButtons?.toArray().map((b) => b.nativeElement) || [];\n    const idx = buttons.indexOf(current as HTMLButtonElement);\n    if (idx === -1) return;\n    const next = buttons[idx + direction];\n    next?.focus();\n  }\n\n  private setExpanded(nodes: NgbTreeNode[], expanded: boolean) {\n    for (const n of nodes) {\n      if (this.hasChildren(n)) {\n        n.expanded = expanded;\n        this.setExpanded(n.children || [], expanded);\n      }\n    }\n  }\n\n  private collectSelection(nodes: NgbTreeNode[], acc: NgbTreeNode[] = []): NgbTreeNode[] {\n    for (const n of nodes) {\n      if (n.selected) acc.push(n);\n      if (this.hasChildren(n)) this.collectSelection(n.children!, acc);\n    }\n    return acc;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.NgbDndListDirective","i1.Datagrid","i1.NgbDndItemDirective"],"mappings":";;;;;;;;MA+Ka,sBAAsB,CAAA;IACxB,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,EAAE;IACb,cAAc,GAAG,CAAC;;IAElB,OAAO,GAAG,CAAC;AACX,IAAA,WAAW;IACX,YAAY,GAAG,IAAI;IACnB,SAAS,GAAwB,SAAS;IAC1C,UAAU,GAAG,IAAI;AAChB,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AAEjD,IAAA,IAAI,oBAAoB,GAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB;QACrC,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AAChC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzC,QAAA,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,KAAK,EAAE;YACf,GAAG,GAAG,KAAK;AACX,YAAA,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACvB;QAEA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAI,GAAa,GAAG,CAAC,CAAC,GAAG,EAAE;AACjE,QAAA,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,GAAI,GAAa,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QACrF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACpC;AAEA,IAAA,EAAE,CAAC,CAAkB,EAAA;AACnB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE;AAC9D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;uGA9CW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjKvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+mDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlGS,YAAY,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkKxB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArKlC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGT,EAAA,eAAA,EA8DgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+mDAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AC/KH;AACO,MAAM,qBAAqB,GAAG;AACnC,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,eAAe,EAAE,GAAG;;AAyBf,MAAM,0BAA0B,GAED;AACpC,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,UAAU,EAAE,IAAI;;AAGZ,SAAU,uBAAuB,CACrC,QAAuD,EAAA;AAEvD,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;AAC1B,IAAA,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,EAAE;AAC9D,IAAA,OAAO,EAAE,GAAG,0BAA0B,EAAE,GAAG,SAAS,EAAE;AACxD;AAEM,SAAU,sBAAsB,CAAC,KAAa,EAAA;AAClD,IAAA,IAAI,KAAK,IAAI,qBAAqB,CAAC,YAAY;AAAE,QAAA,OAAO,MAAM;AAC9D,IAAA,IAAI,KAAK,IAAI,qBAAqB,CAAC,eAAe;AAAE,QAAA,OAAO,SAAS;AACpE,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,8BAA8B,CAC5C,SAAuC,EACvC,QAAgB,EAAA;IAEhB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,EAAE;IAC7E,MAAM,OAAO,GAAG;SACb,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAC5B,SAAA,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AACzD,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC7B,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChE,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACpB;AACA,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC;SAEgB,6BAA6B,CAC3C,IAAY,EACZ,OAAwB,EACxB,UAAmB,EAAA;AAEnB,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,IAAI;IAC5B,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,wBAAwB,CACtC,KAAa,EACb,GAAW,EACX,KAAa,EACb,QAAQ,GAAG,0BAA0B,EAAA;AAErC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;AACnC,SAAA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC;SAC/B,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC;;MCgFa,iBAAiB,CAAA;AA2BC,IAAA,GAAA;AA1BrB,IAAA,OAAO,MAAM,GAAG,CAAC;AAER,IAAA,GAAG,GAAG,iBAAiB,CAAC,MAAM,EAAE;AAExC,IAAA,gBAAgB,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAC,GAAG,EAAE;IAE7D,YAAY,GAAoB,MAAM;AAE9B,IAAA,cAAc;AAEE,IAAA,SAAS;IAExB,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,EAAE;IACb,cAAc,GAAG,CAAC;IAClB,QAAQ,GAAsC,IAAI;;AAElD,IAAA,SAAS;IACT,kBAAkB,GAAG,0BAA0B;IAC/C,gBAAgB,GAAG,eAAe;;AAElC,IAAA,UAAU;AAET,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAErD,IAAA,WAAA,CAA6B,GAAsB,EAAA;QAAtB,IAAA,CAAA,GAAG,GAAH,GAAG;IAAsB;AAEtD,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAE;IACjF;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,KAAK;IAC9D;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK;IACrC;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS;AACzC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;IACzD;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,MAAM;IACrC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS;IACxC;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,KAAK,KAAK;IAC7C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS;IACxC;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;AAC5C,QAAA,OAAO,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACvF;AAEA,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC/E;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE;YACnD,OAAO,IAAI,CAAC,SAAS;QACvB;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc;QACjC,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;AAC7D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AACtD,QAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC7E;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;IACnC;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;YAC1B;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC5C,QAAA,MAAM,KAAK,GAAG,CAAC,KAAa,KAAI;AAC9B,YAAA,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE;AAC9B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB;AACF,QAAA,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AAE5C,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACzC;QACF;QAEA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AACnD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK;YACpF,KAAK,CAAC,KAAK,CAAC;AACd,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC;uGA3HW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtJlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9DS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuJhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1J7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DT,EAAA,eAAA,EAuFgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,m8CAAA,CAAA,EAAA;;sBAa9C,SAAS;uBAAC,WAAW;;sBAErB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBACA;;;AC7LH;AACO,MAAM,8BAA8B,GAAG;AAQvC,MAAM,6BAA6B,GAEJ;AACpC,IAAA,GAAG,0BAA0B;AAC7B,IAAA,QAAQ,EAAE,QAAQ;;AAKd,SAAU,0BAA0B,CACxC,QAAkE,EAClE,MAAmE,EAAA;IAEnE,IAAI,QAAQ,EAAE;AACZ,QAAA,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,EAAE;AAC9D,QAAA,OAAO,EAAE,GAAG,6BAA6B,EAAE,GAAG,SAAS,EAAE;IAC3D;AACA,IAAA,IAAI,MAAM,EAAE,gBAAgB,EAAE;QAC5B,OAAO;AACL,YAAA,GAAG,6BAA6B;YAChC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACrF;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AACM,SAAU,wBAAwB,CACtC,QAAqC,EAAA;IAErC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ;AACrD,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,+BAA+B,CAC7C,QAAkE,EAClE,MAAmE,EAAA;IAEnE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC7D,IAAA,OAAO,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,IAAI;AAC7D;;MCZa,eAAe,CAAA;AAEE,IAAA,QAAA;AADV,IAAA,KAAK;AACvB,IAAA,WAAA,CAA4B,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA4B;uGAFrD,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAE9D,KAAK;uBAAC,SAAS;;MAKL,iBAAiB,CAAA;AAEA,IAAA,QAAA;AADR,IAAA,KAAK;AACzB,IAAA,WAAA,CAA4B,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA4B;uGAFrD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAEhE,KAAK;uBAAC,WAAW;;MAKP,iBAAiB,CAAA;AAEA,IAAA,QAAA;AADR,IAAA,KAAK;AACzB,IAAA,WAAA,CAA4B,QAAmC,EAAA;QAAnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA8B;uGAFvD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAEhE,KAAK;uBAAC,WAAW;;MAKP,qBAAqB,CAAA;AAEJ,IAAA,QAAA;AADJ,IAAA,KAAK;AAC7B,IAAA,WAAA,CAA4B,QAAmC,EAAA;QAAnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA8B;uGAFvD,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,eAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,4BAA4B,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAEpE,KAAK;uBAAC,eAAe;;MAKX,uBAAuB,CAAA;AACN,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAsC,EAAA;QAAtC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAiC;uGAD1D,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,8BAA8B,EAAE,UAAU,EAAE,IAAI,EAAE;;MAO5D,oBAAoB,CAAA;AACH,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAsD,EAAA;QAAtD,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAiD;uGAD1E,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,2BAA2B,EAAE,UAAU,EAAE,IAAI,EAAE;;MAMzD,gBAAgB,CAAA;AACC,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAkC,EAAA;QAAlC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA6B;uGADtD,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,EAAE;;MAMrD,uCAAuC,CAAA;AACtB,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAwC,EAAA;QAAxC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAmC;uGAD5D,uCAAuC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvC,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,0EAA0E,EAAE,UAAU,EAAE,IAAI,EAAE;;MAMxG,6CAA6C,CAAA;AAQ5B,IAAA,QAAA;;AANmB,IAAA,KAAK;;IAEpD,IAAmC,WAAW,CAAC,KAAa,EAAA;AAC1D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,WAAA,CAA4B,QAAwC,EAAA;QAAxC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAmC;uGAR5D,6CAA6C,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7C,6CAA6C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,sCAAA,EAAA,OAAA,CAAA,EAAA,WAAA,EAAA,CAAA,sBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7C,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBADzD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,sFAAsF,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAG9H,KAAK;uBAAC,sCAAsC;;sBAE5C,KAAK;uBAAC,sBAAsB;;MAQlB,uCAAuC,CAAA;AAQtB,IAAA,QAAA;;AANa,IAAA,KAAK;;IAE9C,IAA6B,WAAW,CAAC,KAAa,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,WAAA,CAA4B,QAAwC,EAAA;QAAxC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAmC;uGAR5D,uCAAuC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvC,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,gCAAA,EAAA,OAAA,CAAA,EAAA,WAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,0EAA0E,EAAE,UAAU,EAAE,IAAI,EAAE;;sBAGlH,KAAK;uBAAC,gCAAgC;;sBAEtC,KAAK;uBAAC,gBAAgB;;AAOzB;AACO,MAAM,4BAA4B,GAAG;IAC1C,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;IACrB,uBAAuB;IACvB,oBAAoB;IACpB,gBAAgB;IAChB,uCAAuC;IACvC,6CAA6C;IAC7C,uCAAuC;;;ACrFlC,MAAM,yBAAyB,GAAwB;IAC5D,IAAI;IACJ,KAAK;IACL,UAAU;IACV,gBAAgB;IAChB,YAAY;IACZ;;AAGK,MAAM,4BAA4B,GAAwB;IAC/D,IAAI;IACJ,KAAK;IACL,KAAK;IACL,IAAI;IACJ,KAAK;IACL;;AAGK,MAAM,4BAA4B,GAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW;AAE7F,MAAM,yBAAyB,GAAwB;IAC5D,IAAI;IACJ,KAAK;IACL,KAAK;IACL,IAAI;IACJ,KAAK;IACL;;AAGK,MAAM,2BAA2B,GAAwB;IAC9D,UAAU;IACV,gBAAgB;IAChB,IAAI;IACJ,KAAK;IACL,SAAS;IACT,YAAY;IACZ,QAAQ;IACR;;AAGI,SAAU,yBAAyB,CAAC,IAAiB,EAAA;IACzD,QAAQ,IAAI;AACV,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,MAAM;AACf,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,QAAQ;AACjB,QAAA;AACE,YAAA,OAAO,MAAM;;AAEnB;AAEM,SAAU,wBAAwB,CAAC,IAAyB,EAAA;IAChE,QAAQ,IAAI;AACV,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,KAAK;AACd,QAAA;AACE,YAAA,OAAO,UAAU;;AAEvB;AAEM,SAAU,yBAAyB,CAAC,IAAyB,EAAA;IACjE,QAAQ,IAAI;AACV,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,CAAC,GAAG,4BAA4B,CAAC;AAC1C,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,CAAC,GAAG,4BAA4B,CAAC;AAC1C,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,CAAC,GAAG,yBAAyB,CAAC;AACvC,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,CAAC,GAAG,2BAA2B,CAAC;AACzC,QAAA;AACE,YAAA,OAAO,CAAC,GAAG,yBAAyB,CAAC;;AAE3C;SAEgB,sBAAsB,CAAC,QAA2B,EAAE,OAA4B,MAAM,EAAA;AACpG,IAAA,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,QAAQ,QAAQ;AACd,YAAA,KAAK,IAAI,EAAE,OAAO,aAAa;AAC/B,YAAA,KAAK,KAAK,EAAE,OAAO,iBAAiB;AACpC,YAAA,KAAK,KAAK,EAAE,OAAO,sBAAsB;AACzC,YAAA,KAAK,IAAI,EAAE,OAAO,UAAU;AAC5B,YAAA,KAAK,KAAK,EAAE,OAAO,uBAAuB;AAC1C,YAAA,KAAK,IAAI,EAAE,OAAO,WAAW;YAC7B,SAAS;;IAEb;AACA,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,QAAQ,QAAQ;AACd,YAAA,KAAK,IAAI,EAAE,OAAO,aAAa;AAC/B,YAAA,KAAK,KAAK,EAAE,OAAO,iBAAiB;AACpC,YAAA,KAAK,KAAK,EAAE,OAAO,6BAA6B;AAChD,YAAA,KAAK,IAAI,EAAE,OAAO,iBAAiB;AACnC,YAAA,KAAK,KAAK,EAAE,OAAO,0BAA0B;AAC7C,YAAA,KAAK,IAAI,EAAE,OAAO,cAAc;YAChC,SAAS;;IAEb;IACA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;QACxC,QAAQ,QAAQ;AACd,YAAA,KAAK,IAAI,EAAE,OAAO,aAAa;AAC/B,YAAA,KAAK,KAAK,EAAE,OAAO,iBAAiB;AACpC,YAAA,KAAK,UAAU,EAAE,OAAO,UAAU;AAClC,YAAA,KAAK,gBAAgB,EAAE,OAAO,kBAAkB;AAChD,YAAA,KAAK,YAAY,EAAE,OAAO,aAAa;AACvC,YAAA,KAAK,UAAU,EAAE,OAAO,WAAW;YACnC,SAAS;;IAEb;AACA,IAAA,MAAM,MAAM,GAAsC;AAChD,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,EAAE,EAAE,QAAQ;AACZ,QAAA,GAAG,EAAE,gBAAgB;AACrB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,GAAG,EAAE,uBAAuB;AAC5B,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,GAAG,EAAE,oBAAoB;AACzB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,UAAU,EAAE;KACb;AACD,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB;AAEM,SAAU,oBAAoB,CAClC,MAA0D,EAAA;IAE1D,OAAO,KAAK,CAAC,OAAO,CAAE,MAAuC,CAAC,OAAO,CAAC;AACxE;AAEA;AACM,SAAU,2BAA2B,CACzC,SAA0D,EAAA;AAE1D,IAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM;AAAE,QAAA,OAAO,EAAE;IAC1C,MAAM,WAAW,GAA0B,EAAE;AAC7C,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;AACpC,QAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE;YAC9B,WAAW,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACxD;aAAO;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB;IACF;AACA,IAAA,OAAO,WAAW;AACpB;AAEA;AACM,SAAU,4BAA4B,CAC1C,SAA0D,EAC1D,KAAa,EAAA;IAEb,OAAO,2BAA2B,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI;AACxG;AAEA,SAAS,sBAAsB,CAC7B,OAAkE,EAClE,KAAa,EAAA;AAEb,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC/B,QAAA,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QAC7F;AACA,QAAA,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK;AAC/B,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,8BAA8B,CAAC,QAA2B,EAAA;AACxE,IAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC7E;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAC/B,SAAuC,EACvC,KAAa,EACb,QAA2B,EAC3B,KAAe,EACf,OAAsE,EAAA;AAEtE,IAAA,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,8BAA8B;AAC9E,IAAA,MAAM,OAAO,GAAG,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;AACrE,IAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC3B,QAAA,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;QACrD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE,EAAE;YAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;QAC5C;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACxE;SAAO;AACL,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACrD;IACA,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;AAC5C;;ACpOA,MAAM,YAAY,GAAiC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;SAEhE,0BAA0B,CACxC,IAAqC,EACrC,UAAwC,EAAE,EAAA;AAE1C,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;IACjC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC9B,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACrC,IAAA,MAAM,QAAQ,GAAG,iBAAiB,CAChC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY,EAAE,OAAO,CAAC,EACjE,KAAK,CAAC,YAAY,EAClB,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC5E;AACD,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AACpD,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;AAC3B,IAAA,MAAM,UAAU,GAAG,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IACnF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;AACvE,IAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI;AAC/C,WAAG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;UAC7G,SAAS;IAEb,OAAO;AACL,QAAA,IAAI,EAAE,IAAI;QACV,KAAK;AACL,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACzD,QAAA,IAAI,WAAW,EAAE,MAAM,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;KAChD;AACH;AAEM,SAAU,YAAY,CAC1B,IAAqC,EACrC,WAAqE,EAAA;IAErE,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC9B,IAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IACjD,OAAO,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACvC;AAEM,SAAU,8BAA8B,CAC5C,IAAqC,EACrC,WAAyE,EAAA;IAEzE,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAgC,EAAE;AAE/C,IAAA,KAAK,MAAM,UAAU,IAAI,WAAW,IAAI,EAAE,EAAE;AAC1C,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG;aACZ,GAAG,CAAC,CAAC,GAAG,KAAM,GAA+B,GAAG,KAAK,CAAC;AACtD,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3E,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC;QAE1D,QAAQ,SAAS;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;gBAC5B;AACF,YAAA,KAAK,KAAK;gBACR,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;gBACzE;YACF,KAAK,KAAK,EAAE;AACV,gBAAA,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC;AACrC,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI;AACvG,gBAAA,MAAM,CAAC,GAAG,GAAG,OAAO;AACpB,gBAAA,MAAM,CAAC,OAAO,GAAG,OAAO;gBACxB;YACF;AACA,YAAA,KAAK,KAAK;gBACR,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBAClC;AACF,YAAA,KAAK,KAAK;gBACR,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBAClC;AACF,YAAA;gBACE;;AAGJ,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM;IACzB;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA,SAAS,oBAAoB,CAC3B,IAAS,EACT,MAAoC,EACpC,OAAiC,EAAA;AAEjC,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AACvC,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACrE;AAEA,SAAS,gBAAgB,CACvB,GAAM,EACN,MAAoC,EACpC,OAAiC,EAAA;AAEjC,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AACvC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KACtC,oBAAoB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAC1G;IACD,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;AAC/E;AAEA,SAAS,iBAAiB,CACxB,GAAM,EACN,UAA+B,EAC/B,OAAiC,EAAA;IAEjC,MAAM,GAAG,GAAI,GAA+B,GAAG,UAAU,CAAC,KAAK,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC;AAC9E,IAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC;IACnE,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,UAAU,CAAC;IACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;AACvE,IAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,CAAC;AAE9F,IAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,GAAG,IAAI,IAAI;AACxD,IAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,GAAG,IAAI,IAAI;AAC3D,IAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,GAAG,KAAK,EAAE;AACxD,IAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY;AAAE,QAAA,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI;IAC1E,IAAI,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK,EAAE,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE;AAChH,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,EAAE;QACrD,MAAM,IAAI,GAAG,SAA0B;QACvC,MAAM,KAAK,GAAG,YAA6B;AAC3C,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK;QAC/C,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC5D;AAEA,IAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,QAAA,QAAQ,UAAU,CAAC,QAAQ;AACzB,YAAA,KAAK,IAAI;gBACP,OAAO,SAAS,KAAK,YAAY;AACnC,YAAA,KAAK,KAAK;gBACR,OAAO,SAAS,KAAK,YAAY;AACnC,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;IAEA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AACxC,IAAA,MAAM,cAAc,GAAG,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI;AAC7D,IAAA,MAAM,eAAe,GAAG,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK;AAChE,IAAA,QAAQ,UAAU,CAAC,QAAQ;AACzB,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;AACjD,QAAA,KAAK,gBAAgB;AACnB,YAAA,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;AAClD,QAAA,KAAK,IAAI;YACP,OAAO,cAAc,KAAK,eAAe;AAC3C,QAAA,KAAK,KAAK;YACR,OAAO,cAAc,KAAK,eAAe;AAC3C,QAAA,KAAK,YAAY;AACf,YAAA,OAAO,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC;AACnD,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;AACjD,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;AAEA,SAAS,iBAAiB,CAAI,IAAS,EAAE,SAAoC,EAAE,MAAyB,EAAA;AACtG,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3D,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AACxB,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;QACzB,MAAM,MAAM,GAAG,GAA8B;AAC7C,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACjE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjG,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,SAAS,CAAI,IAAS,EAAE,WAAiD,EAAA;AAChF,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC;IACzF,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACpC,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,aAAa,CACzB,IAAgC,GAAG,UAAU,CAAC,KAAK,CAAC,EACpD,KAAiC,GAAG,UAAU,CAAC,KAAK,CAAC,CACvD;YACD,IAAI,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,UAAU,CAAC,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM;QAC5E;AACA,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,SAAS,CAAI,IAAS,EAAE,KAAuB,EAAA;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AAC5D,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7C,UAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5C,UAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;IAClF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;AAC1C;AAEA,SAAS,SAAS,CAChB,IAAS,EACT,WAA4D,EAC5D,KAAa,EAAA;AAEb,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;AACrC,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,EAAE;AAE1B,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyC;AAChE,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,KAAK,GAAI,GAA+B,GAAG,UAAU,CAAC,KAAK,CAAC;AAClE,QAAA,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB;aAAO;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC/D,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACrD,QAAA,OAAO,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM;AACrD,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAC3B,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAClE,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,UAAU,CAAC,GAAG;YACnB,KAAK;AACL,YAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YACzB,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE,UAAU,EAAE,8BAA8B,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AAC5H,YAAA,KAAK,EAAE,WAAW,CAAC,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,IAAI;SACtD;AACH,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,yBAAyB,CAChC,WAAqE,EAAA;AAErE,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;IAC9B,MAAM,UAAU,GAAgD,EAAE;AAElE,IAAA,KAAK,MAAM,UAAU,IAAI,WAAW,IAAI,EAAE,EAAE;AAC1C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACpD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACf,UAAU,CAAC,IAAI,CAAC;YACd,KAAK;AACL,YAAA,GAAG,EAAE,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;YAC/C,UAAU,EAAE,CAAC,IAAI,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEF,IAAA,OAAO,UAAU;AACnB;AAEA,SAAS,kBAAkB,CAAC,SAAsD,EAAA;IAChF,OAAO,SAAS,KAAK,SAAS,GAAG,KAAK,GAAG,SAAS;AACpD;AAEA,SAAS,iBAAiB,CAAI,MAA4C,EAAA;IACxE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC5B,QAAA,GAAG,KAAK;QACR,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,UAAU,EAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AACpF,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9F,KAAA,CAAC,CAAC;AACL;AAEA,SAAS,qBAAqB,CAC5B,OAAuD,EAAA;IAEvD,MAAM,MAAM,GAAgC,EAAE;AAC9C,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QAC9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAI,OAAuC,CAAC,KAAK,CAAC,EAAE;IACxE;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,aAAa,CAAI,IAAmC,EAAA;AAC3D,IAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,IAAkC,CAAC,KAAK,CAAC;AAC9G;AAEA,SAAS,aAAa,CAAC,KAAc,EAAA;IACnC,IAAI,KAAK,YAAY,IAAI;AAAE,QAAA,OAAO,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE;IAC/D,OAAO,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE;AAC3C;AAEA,SAAS,iBAAiB,CACxB,MAAiC,EACjC,GAAY,EACZ,KAAc,EAAA;IAEd,IAAI,MAAM,EAAE,UAAU;QAAE,OAAO,MAAM,CAAC,UAAiC;IACvE,IAAI,MAAM,EAAE,IAAI;AAAE,QAAA,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAW,CAAC;IACtE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,SAAS;IAC1E,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAC5E,IAAA,IAAI,GAAG,YAAY,IAAI,IAAI,KAAK,YAAY,IAAI;AAAE,QAAA,OAAO,MAAM;AAC/D,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,oBAAoB,CAAC,KAAc,EAAE,IAAyB,EAAA;IACrE,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;IACtE,QAAQ,IAAI;QACV,KAAK,SAAS,EAAE;AACd,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;QAC7C;QACA,KAAK,MAAM,EAAE;YACX,MAAM,MAAM,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClF,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;QAC7C;AACA,QAAA,KAAK,SAAS;YACZ,IAAI,KAAK,KAAK,MAAM;AAAE,gBAAA,OAAO,IAAI;YACjC,IAAI,KAAK,KAAK,OAAO;AAAE,gBAAA,OAAO,KAAK;YACnC,OAAO,CAAC,CAAC,KAAK;AAChB,QAAA;AACE,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;AAE1B;AAEA,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,QAA2B,EAAA;IACjF,QAAQ,QAAQ;AACd,QAAA,KAAK,IAAI;YACP,OAAO,IAAI,KAAK,KAAK;AACvB,QAAA,KAAK,KAAK;YACR,OAAO,IAAI,KAAK,KAAK;AACvB,QAAA,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,KAAK;AACrB,QAAA,KAAK,KAAK;YACR,OAAO,IAAI,IAAI,KAAK;AACtB,QAAA,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,KAAK;AACrB,QAAA,KAAK,KAAK;YACR,OAAO,IAAI,IAAI,KAAK;AACtB,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;AAEA,SAAS,aAAa,CAAC,IAAa,EAAE,KAAc,EAAA;AAClD,IAAA,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;IAC3C,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;AAC3B,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;AAC/B,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QAC3D,OAAO,UAAU,GAAG,WAAW;IACjC;IACA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACrG;AAEA,SAAS,aAAa,CAAC,MAAiB,EAAA;AACtC,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvF;AAEA,SAAS,MAAM,CAAC,MAAiB,EAAE,IAAmB,EAAA;IACpD,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,KAAI;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC;AAC/C,QAAA,OAAO,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,KAAK,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;AAC/F,IAAA,CAAC,CAAkC;AACrC;;MC5WsB,gBAAgB,CAAA;AAAyD;MACzE,kBAAkB,CAAA;AAA2D;MAGtF,gBAAgB,CAAA;;IAEnB,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,KAAK,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9D,IAAA,SAAS,CAAC,CAAmB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,CAAqB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B;uGAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC4BlC,MAAM,kBAAkB,GAAG,CACzB,KAAwB,KACiD,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU;AAEtH,MAAM,KAAK,GAAG,CAAI,KAAQ,KAAO;AAC/B,IAAA,IAAI;AACF,QAAA,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAClC,YAAA,OAAO,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC;QAC1C;QAEA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM;IAC/C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAAc,KAClC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,GAAI,KAAoB,GAAG,IAAI;AAE5E,MAAM,YAAY,GAAG,CAAC,CAAoB,EAAE,CAAoB,KAAa;IAC3E,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AACxB,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAC/C,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;IACrC;AACA,IAAA,OAAO,IAAI;AACb,CAAC;MAEY,6BAA6B,CAAA;IAChC,SAAS,GAAG,MAAM,CAA0C,EAAE;kFAAC;IAC/D,OAAO,GAAG,MAAM,CAAqB,EAAE;gFAAC;AAEhD,IAAA,MAAM,CAAC,IAAkB,EAAE,MAAS,EAAE,SAAiB,EAAE,KAAuB,EAAA;QAC9E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;;QAE9F,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAC9B,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC7D,YAAA,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACtD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC;IAC1B;AAEA,IAAA,MAAM,CAAC,IAAkB,EAAE,UAAa,EAAE,QAAgB,EAAE,KAAuB,EAAA;;QAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClF;QACF;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC;IACpD;AAEA,IAAA,MAAM,CAAC,IAAkB,EAAE,QAAgB,EAAE,KAAuB,EAAA;AAClE,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IACvC;IAEA,YAAY,CAAC,GAAM,EAAE,MAAkB,EAAA;AACrC,QAAA,OAAO,EAAE,GAAI,GAAc,EAAE,GAAI,MAAiB,EAAO;IAC3D;AAEA,IAAA,KAAK,CAAC,KAAuB,EAAA;QAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D;IAEA,UAAU,CAAC,KAAuB,EAAE,UAAa,EAAA;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG;AAC5E,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AAC3B,QAAA,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACxE;AAEA,IAAA,WAAW,CAAC,IAAkB,EAAE,SAAiB,EAAE,KAAuB,EAAE,WAAc,EAAA;AACxF,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;;AAEvE,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;;AAEhF,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE;IACrB;AAEA,IAAA,aAAa,CAAC,IAAkB,EAAE,QAAgB,EAAE,KAAuB,EAAA;QACzE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAChF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;QACvC;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAClD;AAEQ,IAAA,UAAU,CAAC,IAAkB,EAAE,UAAa,EAAE,QAAgB,EAAA;QACpE,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AAChE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAS;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU;AAC3B,QAAA,OAAO,IAAI;IACb;IAEQ,SAAS,CAAC,IAAkB,EAAE,QAAgB,EAAA;QACpD,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AAChE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC;IAC9C;AACD;;AC/JD,MAAM,UAAU,GAAqC;AACnD,IAAA,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACpB,IAAA,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;MAEY,YAAY,CAAA;IACvB,MAAM,MAAM,CAAC,OAAyB,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,QAAQ,MAAM;QACzC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IAC1B;IAEQ,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAoB,EAAA;QACtE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;QACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,EAAE;QAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAC7C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD,MAAM,UAAU,GAAG,EAAE;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC;QACrG,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC9C,MAAM,OAAO,GAAa,EAAE;QAC5B,MAAM,OAAO,GAAa,EAAE;AAE5B,QAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAEhB,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AAC5C,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AACvC,YAAA,MAAM,eAAe,GAAG,YAAY,GAAG,CAAC;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1B,YAAA,OAAO,CAAC,IAAI,CACV,+CAA+C,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,6BAAA,EAAgC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,wBAAwB,eAAe,CAAA,OAAA,CAAS,CAC3K;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5G;QAEA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,uBAAA,EAA0B,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA,EAAG,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,MAAM,CAAA,GAAA,CAAK;AAC9G,QAAA,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC;AAEtE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC;AAEQ,IAAA,aAAa,CAAC,OAA0C,EAAA;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,YAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACrD;AACA,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IACrC;IAEQ,YAAY,CAAC,OAAiB,EAAE,IAAW,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KACvC,IAAI,CAAC,GAAG,CACN,EAAE,EACF,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,MAAM,EACb,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAClD,CACF,CACF;AACD,QAAA,MAAM,MAAM,GAAG,CAAC,MAAgB,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjI,OAAO;YACL,MAAM,CAAC,OAAO,CAAC;AACf,YAAA,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,YAAA,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;SACpB;IACH;AAEQ,IAAA,aAAa,CACnB,QAAgB,EAChB,KAAe,EACf,IAAY,EACZ,UAAkB,EAClB,UAAkB,EAClB,MAAqC,EACrC,UAAkB,EAAA;AAElB,QAAA,MAAM,QAAQ,GAAG;YACf,IAAI;AACJ,YAAA,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,IAAA,CAAM;YACvF,CAAA,mBAAA,EAAsB,IAAI,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,CAAC,CAAA,IAAA,CAAM;AACzE,YAAA,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA,GAAA,EAAM,UAAU,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACtE,IAAI;AACL,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,QAAA,OAAO,cAAc,QAAQ,CAAC,MAAM,CAAA,aAAA,EAAgB,QAAQ,aAAa;IAC3E;IAEQ,KAAK,CAAI,KAAU,EAAE,IAAY,EAAA;QACvC,MAAM,KAAK,GAAU,EAAE;AACvB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE;AACvD,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QAC9C;AACA,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;IACpC;AAEQ,IAAA,SAAS,CAAC,KAAc,EAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,EAAE;QACX;QACA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;IAChF;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;IACjF;AAEQ,IAAA,YAAY,CAAC,OAAiB,EAAA;QACpC,IAAI,GAAG,GAAG,YAAY;AACtB,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM;YAC/B,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAA,QAAA,EAAW,MAAM,YAAY;QAClD;AACA,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM;QAC7B,GAAG,IAAI,WAAW,OAAO,CAAC,MAAM,GAAG,CAAC,yBAAyB;AAC7D,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACpD,YAAA,GAAG,IAAI,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,aAAa;QACjE;QACA,GAAG,IAAI,CAAA,kBAAA,EAAqB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,4BAAA,EAA+B,UAAU,CAAA,OAAA,CAAS;AAChG,QAAA,OAAO,GAAG;IACZ;AACD;;MClIY,yBAAyB,CAAA;IACpC,MAAM,MAAM,CAAC,OAA2B,EAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,CAAC,IAAI,GAAG,GAAG;AACjB,QAAA,MAAM,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;AAC9D,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAE7B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,KAAK,EAAE;QACd,MAAM,CAAC,MAAM,EAAE;AACf,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IAC1B;AAEQ,IAAA,oBAAoB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAsB,EAAA;AAC3E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAE7F,OAAO,CAAA;;;;;;wBAMa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;AACxD,WAAA,EAAA,MAAM,GAAG,IAAI,CAAA;;YAEd;IACV;AAEQ,IAAA,SAAS,CAAC,MAAiB,EAAA;QACjC,OAAO,CAAA,KAAA,EAAQ,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,MAAA,CAAQ;IAC7E;AAEQ,IAAA,UAAU,CAAC,KAAc,EAAA;QAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,6CAA6C;QACtD;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACvD,OAAO,CAAA,6BAAA,EAAgC,KAAK,CAAA,cAAA,CAAgB;QAC9D;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC9B,OAAO,CAAA,8BAAA,EAAiC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA,cAAA,CAAgB;QACvE;AAEA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,kCAAkC,KAAK,CAAC,WAAW,EAAE,gBAAgB;QAC9E;QAEA,OAAO,CAAA,6BAAA,EAAgC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA,cAAA,CAAgB;IACtF;AAEQ,IAAA,aAAa,CAAC,SAAiB,EAAA;QACrC,OAAO,CAAC,SAAS,IAAI,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ;IACrF;AAEQ,IAAA,YAAY,CAAC,QAAgB,EAAA;AACnC,QAAA,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IACxD;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC5B;AACD;;MCnEY,qBAAqB,CAAA;;AAEvB,IAAA,WAAW,GAAG,MAAM,CAAmC,WAAkB,CAAC;uGAFxE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE;;;MCE/B,sBAAsB,CAAA;AACxB,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,KAAK;AACL,IAAA,SAAS;AACT,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,qBAAqB;AACrB,IAAA,sBAAsB;AACtB,IAAA,cAAc;AACd,IAAA,aAAa;AACb,IAAA,kBAAkB;AAClB,IAAA,QAAQ;AACR,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,KAAK;AACL,IAAA,YAAY;AACZ,IAAA,QAAQ;AACR,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,iBAAiB;AACjB,IAAA,iBAAiB;IAE1B,WAAW,GAAA;QACT,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,iBAAiB,EAAE,IAAI,CAAC;SACzB;IACH;uGAvDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;AAiCI,MAAM,0BAA0B,GAAG,CAAC,sBAAsB;;MCpDpD,0BAA0B,CAAA;IACT,OAAO,GAA6B,WAAW;AAE3E,IAAA,IAAmD,kBAAkB,GAAA;QACnE,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW;IACnE;AAEA,IAAA,IAA4D,cAAc,GAAA;AACxE,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;IACnC;AAEA,IAAA,IAA8D,gBAAgB,GAAA;AAC5E,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,WAAW;IACrC;AAEA,IAAA,IAA0C,cAAc,GAAA;AACtD,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;IAC9F;AAEA,IAAA,IAAmD,UAAU,GAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;IACnC;AAEA,IAAA,IAAkD,SAAS,GAAA;AACzD,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;IAClC;AAEA,IAAA,IAAmD,UAAU,GAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;IACnC;AAEA,IAAA,IAAmD,eAAe,GAAA;AAChE,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM;IAChC;uGAjCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gCAAA,EAAA,yBAAA,EAAA,yCAAA,EAAA,qBAAA,EAAA,2CAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,gBAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iDAAiD;AAC3D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE,KAAK;uBAAC,mBAAmB;;sBAEzB,WAAW;uBAAC,gCAAgC;;sBAI5C,WAAW;uBAAC,yCAAyC;;sBAIrD,WAAW;uBAAC,2CAA2C;;sBAIvD,WAAW;uBAAC,uBAAuB;;sBAInC,WAAW;uBAAC,gCAAgC;;sBAI5C,WAAW;uBAAC,+BAA+B;;sBAI3C,WAAW;uBAAC,gCAAgC;;sBAI5C,WAAW;uBAAC,gCAAgC;;;MCvClC,2BAA2B,CAAA;IAC7B,sBAAsB,GAAsB,QAAQ;AAE7D,IAAA,IAA8C,WAAW,GAAA;AACvD,QAAA,OAAO,IAAI,CAAC,sBAAsB,KAAK,QAAQ;IACjD;AAEA,IAAA,IAA4C,SAAS,GAAA;AACnD,QAAA,OAAO,IAAI,CAAC,sBAAsB,KAAK,MAAM;IAC/C;uGATW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qFAAqF;AAC/F,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;sBAEA,WAAW;uBAAC,2BAA2B;;sBAIvC,WAAW;uBAAC,yBAAyB;;;MCuJ3B,0BAA0B,CAAA;AACV,IAAA,IAAI;uGADpB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,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,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvJ3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqJT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAxJS,YAAY,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,oJAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAClG,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyJpE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA7JtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,2BAA2B,CAAC;oBAClH,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;oBAC/E,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJT,EAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCxId,4BAA4B,CAAA;AACZ,IAAA,IAAI;uGADpB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArB7B;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApBS,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAsBX,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAzBxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;AAmBT,EAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MC0Ud,2BAA2B,CAAA;AACX,IAAA,IAAI;IACtB,UAAU,GAAG,CAAC;AACI,IAAA,GAAG;AACH,IAAA,KAAK;IACvB,QAAQ,GAAG,KAAK;IAEzB,QAAQ,CAAC,GAAM,EAAE,GAAc,EAAA;AAC7B,QAAA,OAAQ,GAA+B,CAAC,GAAG,CAAC,KAAK,CAAC;IACpD;uGATW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,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,wBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,GAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1V5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwVT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3VS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,uzCAAE,0BAA0B,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EACrF,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA4VpE,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhWvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,2BAA2B,CAAC;oBACrG,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;oBAC/E,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwVT,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;sBACA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;;MCzVU,6BAA6B,CAAA;AACb,IAAA,IAAI;AACJ,IAAA,GAAG;AACH,IAAA,KAAK;uGAHrB,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZ9B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaX,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAhBzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCuBd,0BAA0B,CAAA;IAC5B,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAiB;IACtC,SAAS,GAAG,KAAK,CAA2B,QAAQ;kFAAC;IACrD,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK;8EAAC;IAClD,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ;iFAAC;AAEjE,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACjE;uGARW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,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,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnCS,YAAY,wMAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAqC9B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAxCtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA;AACF,iBAAA;;;MC7BY,8BAA8B,CAAA;AAChC,IAAA,IAAI;uGADF,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT/B;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAUX,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAb1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA;AACF,iBAAA;;sBAEE;;;MC0RU,0BAA0B,CAAA;AACV,IAAA,IAAI;IACtB,UAAU,GAAG,CAAC;uGAFZ,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,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,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvR3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqRT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7RC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,gVACnB,0BAA0B,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA0RrB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnStC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,0BAA0B;wBAC1B,2BAA2B;wBAC3B,8BAA8B;AAC/B,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqRT,EAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;;MChSU,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANhC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EALS,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAOX,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAV3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA;AACF,iBAAA;;;ACKD;;;AAGG;MAKU,iCAAiC,CAAA;AAC3B,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,8BAA8B;IAC9B,iCAAiC,GAAsC,MAAM;IAE9C,YAAY,GAAG,OAAO;IACvB,UAAU,GAAG,IAAI;IAClB,UAAU,GAAG,GAAG;IACb,aAAa,GAAG,MAAM;IAClC,QAAQ,GAAG,CAAC;IACX,SAAS,GAAG,CAAC;IAEnC,MAAM,GAAG,KAAK;IACd,QAAQ,GAAG,KAAK;IAChB,cAAc,GAAuB,IAAI;IACzC,mBAAmB,GAAgB,IAAI;IAEvC,eAAe,GAAwD,EAAE;IACzE,cAAc,GAA0B,IAAI;IAC5C,KAAK,GAAkB,IAAI;IAElB,cAAc,GAAG,MAAK;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,gCAAgC,IAAI,OAAO,EAAE;YAC/C,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,WAAW,GAAA;QACjB,IAAI,EAAE,IAAI,CAAC,8BAA8B,YAAY,WAAW,CAAC,EAAE;YACjE;QACF;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QACA,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE;IACnB;;IAGA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,cAAc,EAAE;IACxC;IAEQ,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,MAAM;YAAE;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;AACtB,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;QACA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,6BAA6B,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB;QACF;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW;QAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,KAAK,IAAI,CAAC,cAAc,EAAE;AAC3F,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC;YACjF;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;YACtD;QACF;aAAO,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACrD;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;IACjC;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,CAAC,cAAc,EAAE;QACrB,qBAAqB,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAClD,qBAAqB,CAAC,MAAK;YACzB,qBAAqB,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,SAAS,GAAG,CAAC,MAAmB,KAAI;AACxC,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AACrE,QAAA,CAAC;QAED,SAAS,CAAC,MAAM,CAAC;AACjB,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAExB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,MAAM,GAAuB,MAAM,EAAE,aAAa,IAAI,IAAI;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe;QACnC,OAAO,MAAM,EAAE;AACb,YAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,EAAE;gBACzE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;oBAChB,SAAS,CAAC,MAAM,CAAC;gBACnB;YACF;AACA,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa;QAC/B;AAEA,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzF,QAAA,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEzF,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACzC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AACrE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,YAAA,IAAI,QAAQ;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACpD;IACF;IAEQ,eAAe,GAAA;QACrB,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;YACtD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;QACrD;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QACzD,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QACzE,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;AACzE,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,8BAA8B,YAAY,WAAW,EAAE;YAC9D,OAAO,IAAI,CAAC,8BAA8B;QAC5C;AACA,QAAA,OAAO,IAAI;IACb;;AAGQ,IAAA,iBAAiB,CAAC,KAAkB,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,IAAI,GACR,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC;QAC9C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC;QACxD;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC;QACpD;IACF;AAEQ,IAAA,UAAU,CAAC,MAAmB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAC3C,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAuB;AAC/E,QAAA,OAAO,IAAI,EAAE,qBAAqB,EAAE,IAAI,IAAI;IAC9C;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAEjC,MAAM,MAAM,GAAG,CAAC;QAChB,MAAM,eAAe,GAAG,CAAC;AACzB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU;AACvC,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;QAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AAChG,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;AAE5E,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM;AAC9B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU;QAElC,IAAI,IAAI,GAAG,eAAe;YAAE,IAAI,GAAG,eAAe;QAClD,IAAI,IAAI,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,EAAE;AACvD,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,GAAG,UAAU,GAAG,eAAe,CAAC;QAChF;QAEA,IAAI,WAAW,IAAI,GAAG,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,EAAE;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,WAAW;YAC7C,IAAI,KAAK,IAAI,eAAe;gBAAE,GAAG,GAAG,KAAK;QAC3C;QAEA,IAAI,GAAG,GAAG,eAAe;YAAE,GAAG,GAAG,eAAe;AAChD,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,eAAe;QAC7D,IAAI,GAAG,GAAG,MAAM;YAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC;AAEzD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QAErD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;IACrC;AAEQ,IAAA,aAAa,CAAC,IAAiB,EAAE,GAAW,EAAE,IAAY,EAAA;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,EAAE,WAAW,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,EAAE,WAAW,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,cAAc,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,iCAAiC,KAAK,UAAU,GAAG,GAAG,GAAG,GAAG;IAC1E;AAEQ,IAAA,mBAAmB,CAAC,IAAiB,EAAA;QAC3C,KAAK,MAAM,IAAI,IAAI;YACjB,UAAU;YACV,KAAK;YACL,MAAM;YACN,OAAO;YACP,QAAQ;YACR,OAAO;YACP,WAAW;YACX,QAAQ;YACR,SAAS;AACD,SAAA,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;QACjC;IACF;uGArRW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAJ7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAOE;;sBACA;;sBAEA,WAAW;uBAAC,gBAAgB;;sBAC5B,WAAW;uBAAC,eAAe;;sBAC3B,WAAW;uBAAC,cAAc;;sBAC1B,WAAW;uBAAC,iBAAiB;;sBAC7B,WAAW;uBAAC,cAAc;;sBAC1B,WAAW;uBAAC,eAAe;;;MC0KjB,mCAAmC,CAAA;AACnB,IAAA,IAAI;AACJ,IAAA,GAAG;AACH,IAAA,MAAM;AAGzB,IAAA,aAAa;AAErB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7C,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEQ,kBAAkB,GAAA;QACxB,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE;YAChC,qBAAqB,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AAC/D,QAAA,CAAC,CAAC;IACJ;uGAvBW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKnC,iCAAiC,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9LlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuLT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhMC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEX,2BAA2B,oKAC3B,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,iCAAiC,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,EAAA,mCAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA4LxB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAtM/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,0BAA0B;wBAC1B,2BAA2B;wBAC3B,8BAA8B;wBAC9B,+BAA+B;wBAC/B,iCAAiC;AAClC,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuLT,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAExB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iCAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MClLnD,0CAA0C,CAAA;AAC1B,IAAA,IAAI;AACJ,IAAA,GAAG;AACH,IAAA,MAAM;AAGzB,IAAA,aAAa;IAErB,eAAe,GAAA;QACb,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE;YAChC,qBAAqB,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AAC/D,QAAA,CAAC,CAAC;IACJ;uGAbW,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1C,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAK1C,iCAAiC,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9BlC;;;;;;;;;;;;;;;;;;;;;;;GAuBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzBS,YAAY,+BAAE,iCAAiC,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,EAAA,mCAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA2B9C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBA9BtD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,iCAAiC,CAAC;oBAC1D,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAExB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iCAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCyDnD,2BAA2B,CAAA;AACX,IAAA,IAAI;uGADpB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,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,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvF5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtFS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwF5F,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3FvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,8BAA8B,CAAC;AACxG,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCZd,kCAAkC,CAAA;AAClB,IAAA,IAAI;IAEtB,aAAa,GAAG,CAAC;IAEjB,UAAU,GAAG,KAAK;IAElB,YAAY,GAAG,IAAI;uGAPjB,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7EnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2ET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7ES,YAAY,+BAAE,0BAA0B,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA+EvC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAlF9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2ET,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAExB;;sBAEA;;sBAEA;;;MCtBU,kCAAkC,CAAA;AAClB,IAAA,IAAI;uGADpB,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5DnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5DS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,oJAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8DzF,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAjE9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,2BAA2B,CAAC;oBACrG,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCtEd,gBAAgB,CAAA;IACnB,IAAI,GAAuB,IAAI;AACvC,IAAA,QAAQ,CAAC,OAAe,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;YAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,uBAAuB;YACnF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO;IACjC;uGAdW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;MAkBrB,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;;MCVhC,QAAQ,GAAG,IAAI,cAAc,CAAU,UAAU;AAEvD,MAAM,cAAc,GAAY;IACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM;AAC7B,IAAA,QAAQ,EAAE,MAAM,qEAAqE;AACrF,IAAA,OAAO,EAAE,MAAM,UAAU;AACzB,IAAA,QAAQ,EAAE,MAAM,WAAW;AAC3B,IAAA,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,kBAAA,EAAqB,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,CAAG;AACxD,IAAA,QAAQ,EAAE,MAAM,WAAW;AAC3B,IAAA,cAAc,EAAE,MAAM;;;ACrBxB;MAea,WAAW,CAAA;IACb,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AACvB,IAAA,KAAK,GAAG,IAAI,GAAG,EAAsB;AACrC,IAAA,SAAS,GAAkB,IAAI,CAAC;IAChC,cAAc,GAAmB,IAAI;;IAItC,IAAI,GAAY,cAAc;AAC9B,IAAA,QAAQ;IAEf,WAAA,CACyC,UAAwC,EACjD,IAAoB,EAAA;AAElD,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC1B,QAAA,IAAI,UAAU;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5C;AAGA,IAAA,aAAa,CAAI,OAAsB,EAAA;QACrC,MAAM,EAAE,GAAG,UAAU,IAAI,MAAM,EAAE,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAqB,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,GAAG,CAAC,EAAiB,EAAA;AACnB,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;IACnC;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI;IACzE;AAEA,IAAA,iBAAiB,CAAC,IAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA,IAAA,mBAAmB,CAAC,IAAc,EAAA;QAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA,IAAA,KAAK,CAAC,EAAkB,EAAA;AACtB,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QAChD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;uGA1DW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAYA,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EACjB,QAAQ,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAbnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAa7B;;0BAAY,MAAM;2BAAC,iBAAiB;;0BACpC;;0BAAY,MAAM;2BAAC,QAAQ;;;ACzBhC,MAAM,SAAS,GAAG,EAAE;AACpB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,eAAe,GAAG,EAAE;AAC1B,MAAM,iBAAiB,GAAG,GAAG;AAC7B,MAAM,gBAAgB,GAAG,EAAE,CAAC;MAef,wBAAwB,CAAA;AAYf,IAAA,EAAA;AAXM,IAAA,MAAM;IACvB,QAAQ,GAAa,QAAQ;;IAE7B,QAAQ,GAAwB,MAAM;AAEvC,IAAA,OAAO,QAAQ,GAAG,IAAI,GAAG,EAAqB;AAC9C,IAAA,gBAAgB;AAChB,IAAA,cAAc;IACd,KAAK,GAAkB,IAAI;IAC3B,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE1D,IAAA,WAAA,CAAoB,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;IAA4B;IAElD,OAAO,kBAAkB,CAAC,MAAc,EAAA;QACtC,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3D,QAAA,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACrC;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9B,gBAAA,KAAK,CAAC,MAAM,GAAG,IAAI;gBACnB,IAAI,CAAC,kBAAkB,EAAE;YAC3B;iBAAO;AACL,gBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE;YACpC;YACA;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9B,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI;YACnB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;aAAO;AACL,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,KAAK,CAAC,MAAM;AAAE,gBAAA,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;AACrD,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;AACnC,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;AAAE,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;AACnD,QAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;YAC5C,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvD;IACF;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAAE,IAAI,CAAC,kBAAkB,EAAE;YACzD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE,IAAI,CAAC,oBAAoB,EAAE;IAC7D;IAEA,kBAAkB,GAAA;AAChB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE;AAC/D,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClB,QAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD;IAEQ,kBAAkB,GAAA;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACpC,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,SAAS;AACzE,QAAA,CAAC,CAAC;IACJ;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;YAChC,IAAI,CAAC,kBAAkB,EAAE;YACzB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;QAC7B,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE;AAC/D,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClB,QAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,EAA4B,EAAE;YACvD,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QAC3D;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;QAChC,MAAM,KAAK,GAAG,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC;AAC/C,QAAA,IAAI,KAAK,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACjG,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC/F;AACA,QAAA,IAAI,SAAS,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACtD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AACtE,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;YAAE;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChE,YAAA,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE;AACvC,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;AACjB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClE;IAEQ,OAAO,GAAA;QACb,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/C;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK;AAChC,cAAE;cACA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAC5D,QAAA,OAAO,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI;IACnC;IAEQ,OAAO,GAAA;AACb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAE3B,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE;QAC5B;AAEA,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAsB,UAAU,CAAC;AACpF,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACvE,aAAA,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI;AACtE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE9E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;AAChC,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,MAAM;YAClF,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,SAAS;AAC/D,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC;YAC3D;;YAGA,IAAI,kBAAkB,GAAG,CAAC;AAC1B,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAClC,MAAM,EAAE,GAAG,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAA4B;AAChF,gBAAA,IAAI,CAAC,EAAE;oBAAE;AACT,gBAAA,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAChF;;YAGA,IAAI,UAAU,GAAG,CAAC;AAClB,YAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;gBACzB,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAA4B;AACzE,gBAAA,IAAI,CAAC,EAAE;oBAAE;AACT,gBAAA,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC9D,IAAI,UAAU,IAAI,SAAS;oBAAE;YAC/B;;YAGA,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC;YAC3D,IAAI,YAAY,KAAK,CAAC;gBAAE,YAAY,GAAG,SAAS;AAEhD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC;YAClE,MAAM,IAAI,GAAG,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;AACtC,YAAA,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE;;;AAGxB,gBAAA,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI;gBAC1B,IAAI,KAAK,IAAI,gBAAgB;oBAAE,KAAK,GAAG,IAAI;YAC7C;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,KAAK,CAAC,MAAgB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,GAAG,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,kBAAkB,CAAC,IAAiB,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACpC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC7C,MAAM,MAAM,GACV,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;aAClC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACpC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACvC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAE3C,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,iCAAiC,CAAC,CAAC;QACxG,IAAI,gBAAgB,GAAkB,IAAI;AAC1C,QAAA,IAAI,cAAc,CAAC,MAAM,EAAE;YACzB,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,KAAI;AACrD,gBAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;gBAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC/C,MAAM,gBAAgB,GACpB,CAAC,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC;qBAC9E,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtF,gBAAA,MAAM,SAAS,GAAG,gBAAgB,IAAI,gBAAgB;gBACtD,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7F,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;oBAC/E,MAAM,aAAa,GACjB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;yBACpC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;yBACtC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;yBACzC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7C,oBAAA,OAAO,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;gBAC9D;AACA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,iBAAiB,CAAC,CAAC;AACzJ,gBAAA,OAAO,KAAK,GAAG,SAAS,GAAG,MAAM;YACnC,CAAC,EAAE,CAAC,CAAC;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,IAAI,MAAM,CAAC;QAChE;AAEA,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;AACxE,QAAA,IAAI,gBAAgB,IAAI,IAAI,EAAE;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC;QAC9C;AACA,QAAA,OAAO,SAAS;IAClB;IAEQ,cAAc,CAAC,IAAc,EAAE,IAAc,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAC7C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C;IAEQ,gBAAgB,CAAC,IAAY,EAAE,KAA0B,EAAA;QAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;AACjD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAA,EAAG,KAAK,CAAC,SAAS,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,CAAA,EAAI,KAAK,CAAC,UAAU,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA,GAAA,EAAM,KAAK,CAAC,UAAU,CAAA,CAAA,EAAI,KAAK,CAAC,UAAU,EAAE;QAEpJ,IAAI,YAAY,GAAG,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACtF,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;QACpG,IAAI,GAAG,GAAoC,IAAI;AAC/C,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,IAAI;AACF,gBAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B;AAAE,YAAA,MAAM;gBACN,GAAG,GAAG,IAAI;YACZ;QACF;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,GAAG,CAAC,IAAI,GAAG,IAAI;YACf,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,YAAA,YAAY,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC;QACpC;QAEA,IAAI,CAAC,YAAY,EAAE;YACjB,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,iBAAiB,CAAC;QAC7D;AACA,QAAA,OAAO,YAAY;IACrB;uGAhSW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAEE,KAAK;uBAAC,iBAAiB;;sBACvB;;sBAEA;;sBAqDA,YAAY;uBAAC,eAAe;;;MC/ClB,mBAAmB,CAAA;AACpB,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IAE1B,cAAc,GAAkB,UAAU;;AAG9B,IAAA,IAAI;;AAEhB,IAAA,QAAQ;;IAER,WAAW,GAAG,KAAK;;IAGnB,cAAc,GAAG,KAAK;;AAEtB,IAAA,UAAU;IAEV,YAAY,GAAG,KAAK;IAEpB,UAAU,GAA8B,IAAI;;IAG7C,OAAO,GAAG,KAAK;IACvB,IAAyC,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhE,IAAA,YAAY;IACrB,IAAoC,SAAS,GAAA,EAAK,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;;AAE1E,IAAA,UAAU,GAAG,IAAI,YAAY,EAAsB;IAEnC,IAAI,GAAG,MAAM;IAEJ,SAAS,GAAG,IAAI;;IAG3C,KAAK,GAAG,KAAK;IACrB,IAAuC,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;;IAG7D,OAAO,GAAmB,IAAI;AACtC,IAAA,IAAyC,aAAa,GAAA;;QAElD,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO,GAAG,IAAI;IACnF;AACQ,IAAA,WAAW;IACX,SAAS,GAAG,CAAC,CAAC;AAGtB,IAAA,WAAW,CAAC,EAAa,EAAA;QACrB,IAAI,IAAI,CAAC,WAAW;YAAE;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;QAE7B,IAAI,CAAC,EAAE;YACH,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB;aAAO;;AAEH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACxB;IACJ;AAGA,IAAA,UAAU,CAAC,EAAa,EAAA;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE;;AAEJ,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB;QACJ;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAkB,EAAE,GAAG,CAAC;AAChE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;AACtC,eAAA,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAiB,CAAC;AAEtE,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW;AAE3B,QAAA,IAAI;AACF,YAAA,IAAI,EAAE,CAAC,YAAY,EAAE;gBACnB,EAAE,CAAC,YAAY,CAAC,UAAU,GAAG,WAAW,IAAI,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM;YAC7F;QACF;QAAE,MAAM,EAAE;QAEV,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACpC;QACF;QAEA,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AACpB,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;QACnC;IACJ;AAGA,IAAA,WAAW,CAAC,EAAa,EAAA;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAqB,CAAC,EAAE;YAC3D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACxC;IACJ;AAGA,IAAA,cAAc,CAAC,EAAa,EAAA;QACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACrD,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAwB;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC;AACrD,QAAA,MAAM,mBAAmB,GAAG,UAAU,KAAK,IAAI;QAE/C,IAAI,cAAc,IAAI,cAAc,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACnE,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAc,CAAC,IAAI,cAAc,KAAK,IAAI,EAAE;YAC9D,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;QACA,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE;gBACnC,IAAI,CAAC,gBAAgB,EAAE;gBACvB;YACJ;QACJ;QAEA,MAAM,YAAY,GAAG,EAAyB;QAC9C,IAAI,YAAY,CAAC,YAAY;YAAE;AAC/B,QAAA,YAAY,CAAC,YAAY,GAAG,IAAI;QAEhC,EAAE,CAAC,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAGA,IAAA,MAAM,CAAC,EAAa,EAAA;QAChB,IAAI,IAAI,CAAC,WAAW;YAAE;QACtB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACrD,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAwB;QAC1C,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC;QACrD,MAAM,mBAAmB,GAAG,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa;QAChE,IAAI,cAAc,IAAI,cAAc,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACnE,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;QAEA,MAAM,YAAY,GAAG,EAAyB;QAC9C,IAAI,YAAY,CAAC,YAAY;YAAE;AAC/B,QAAA,YAAY,CAAC,YAAY,GAAG,IAAI;QAEhC,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;AAEpB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;IAIA,sBAAsB,GAAA;QAClB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;;AAGQ,IAAA,UAAU,CAAC,EAAa,EAAA;;AAE5B,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI;AAC5D,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,CAAC;YAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AACtE,QAAA,OAAO,CAAC;IACZ;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO;AAC7C,YAAA,IAAI,OAAO,KAAK,OAAO,EAAE;gBACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACxC,gBAAA,GAAG,CAAC,SAAS,GAAG,qBAAqB;AACrC,gBAAA,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;gBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACzC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,8BAA8B,CAAC;gBACrF,MAAM,OAAO,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAChD,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;AACvB,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;gBACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,gBAAA,GAAG,CAAC,SAAS,GAAG,0BAA0B;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACrB,gBAAA,IAAI,CAAC,WAAW,GAAG,GAAG;YAC1B;iBAAO;gBACH,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,qBAAqB;gBAClD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;YACxD;YACA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QACvD;IACJ;IACQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa;YAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACjG,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAChC;IACQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC;IACxC;AACQ,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAY,CAAC;;YAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAY,EAAE,MAAM,CAAC;IACrD;AACQ,IAAA,gBAAgB,CAAC,EAAa,EAAA;AAClC,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC;QACzB;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;aACjC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAK,CAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAkB;QAClH,IAAI,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAkB;IACzF;AAEQ,IAAA,SAAS,CAAC,CAAI,EAAA;QAClB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;AAE9C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAQ,CAAC,CAAC,KAAK,EAAmB;AACxD,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,GAAI,CAA6B,EAAO;QACjF,OAAO,CAAC,CAAC;IACb;IAEQ,2BAA2B,CAAC,IAAa,EAAE,UAAqB,EAAA;AACpE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;QAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;QAE3D,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,MAAM,YAAY,GAAI,IAAgC,CAAC,GAAG,CAAC;AAC3D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AAEzD,QAAA,OAAO,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG;YACxB,IAAI,GAAG,KAAK,UAAU;AAAE,gBAAA,OAAO,IAAI;AACnC,YAAA,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE;AACzC,gBAAA,MAAM,IAAI,GAAI,KAAiC,CAAC,GAAG,CAAC;AACpD,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AACA;;;AAGG;IACK,kBAAkB,CAAC,OAAsB,EAAE,QAAgB,EAAA;AAC/D,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;AAC/E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;QAE/B,OAAO;YACH,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,OAAO;YACP,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO;SACpE;IACL;AAEA;;;AAGG;AACK,IAAA,iBAAiB,CAAC,EAAa,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;AAExC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACvC,IAAI,CAAC,GAAG,IAAI;AAAE,gBAAA,OAAO,CAAC;QAC1B;QACA,OAAO,QAAQ,CAAC,MAAM;IACxB;;AAEQ,IAAA,UAAU,CAAC,OAA6B,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;QAC7B,IAAI,OAAO,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;AAC5C,QAAA,IAAI;AAAE,YAAA,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;QAAE;AAAE,QAAA,MAAM;AAAE,YAAA,OAAO,KAAK;QAAE;IAC1E;AAEA,IAAA,aAAa,CAAC,KAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACpD;;AAGQ,IAAA,WAAW,CAAC,EAAa,EAAA;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAyB;AAC3D,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;QAG3C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC3B,EAAE,CAAC,cAAc,EAAE;YACnB,EAAE,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,OAAO;QACX;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;AAGpB,QAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;;AAE3D,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB;QACJ;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;AAC1E,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACjC,MAAM,SAAS,GAAI,OAAO,CAAC,SAAoB,IAAI,CAAC,CAAC;AACrD,QAAA,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI;AACvC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC;;;QAIlF,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;QAE/E,MAAM,YAAY,GACd;cACM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAS,CAAC;eAChC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAS,CAAC,GAAI,OAAO,CAAC,IAAU,CAAC;;QAG7F,IAAI,CAAC,UAAU,IAAI,CAAC,uBAAuB,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AAC3D,YAAA,QAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClC;;QAGA,MAAM,QAAQ,GAAG,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,WAAW,GAAG;cACvD,WAAW,GAAG;cACd,WAAW;QAEjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC;QAE3C,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC,aAAa,CAAC;AACf,YAAA,IAAI,EAAE,YAAY;YAClB,SAAS;AACT,YAAA,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB;AACH,SAAA,CAAC;IAEN;uGAvZS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAKI;;sBAGA,KAAK;uBAAC,YAAY;;sBAElB;;sBAEA;;sBAGA;;sBAEA;;sBAEA;;sBAEA;;sBAIA,WAAW;uBAAC,sBAAsB;;sBAElC;;sBACA,WAAW;uBAAC,iBAAiB;;sBAE7B;;sBAEA,WAAW;uBAAC,WAAW;;sBAEvB,WAAW;uBAAC,oBAAoB;;sBAIhC,WAAW;uBAAC,oBAAoB;;sBAIhC,WAAW;uBAAC,sBAAsB;;sBAOlC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAgBpC,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBA4CnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAYpC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;sBAkCxC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;sBAwB/B,YAAY;uBAAC,kBAAkB;;sBAC/B,YAAY;uBAAC,qBAAqB;;;MCnM1B,mBAAmB,CAAA;AAGE,IAAA,UAAA;AAFxB,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACnC,IAAA,WAAA,CAAgC,UAAmC,EAAA;QAAnC,IAAA,CAAA,UAAU,GAAV,UAAU;IAA4B;;AAGjD,IAAA,IAAI;;AAEhB,IAAA,QAAQ;;AAER,IAAA,QAAQ;;AAER,IAAA,aAAa;IACb,WAAW,GAAG,KAAK;AAElB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAK;AACpC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;IAE/C,IAAmC,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,GAAG,IAAI;IACZ,QAAQ,GAAG,KAAK;AACvD,IAAA,IAAsC,WAAW,GAAA,EAAK,OAAO,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACrE,IAAI,GAAG,UAAU;AACb,IAAA,QAAQ,GAAG,CAAC,CAAC;IAEnC,SAAS,GAAkB,IAAI;IAC/B,iBAAiB,GAAmC,IAAI;IAExD,UAAU,GAAA;QAChB,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI;IACpD;AAEQ,IAAA,YAAY,CAAC,IAAqB,EAAA;AACxC,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ;AAC3D,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C;AAEQ,IAAA,gBAAgB,CAAC,YAAkC,EAAA;QACzD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ;AACjD,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/C,WAAW,EAAE,IAAI,CAAC,UAAU;AAC5B,YAAA,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,KAAK;AAClD,SAAA,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACpD,YAAA,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AACzC,YAAA,YAAY,CAAC,aAAa,GAAG,UAAU;AACvC,YAAA,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;QAC1D;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjD,QAAA,OAAO,IAAI;IACb;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;AAGA,IAAA,WAAW,CAAC,EAAa,EAAA;QACvB,MAAM,aAAa,GAAG,EAAmD;QACzE,IAAI,aAAa,CAAC,mBAAmB;YAAE;AACvC,QAAA,aAAa,CAAC,mBAAmB,GAAG,IAAI;QAExC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE;YAC3C,EAAE,CAAC,cAAc,EAAE;QACrB;IACF;IAGA,SAAS,GAAA;QACP,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,sBAAsB,CAAC,MAAc,EAAA;AAC3C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAChD,QAAA,IAAI,CAAC,iBAAiB;YAAE;AAExB,QAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI;AACnC,QAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY;AAC3C,QAAA,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM;QACtB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,KAAK,IAAI;YAAE;AAEjB,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC;AAC7B,QAAA,iBAAiB,CAAC,YAAY,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAChD,QAAA,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAE5C,QAAA,MAAM,KAAK,GAAuB;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,iBAAiB,CAAC,aAAa;YAC1C,OAAO,EAAE,iBAAiB,CAAC,YAAY;YACvC,QAAQ,EAAE,iBAAiB,CAAC,IAAI;YAChC,MAAM,EAAE,iBAAiB,CAAC,IAAI;AAC9B,YAAA,QAAQ,EAAE,IAAI;SACf;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;IACtC;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAChD,QAAA,IAAI,CAAC,iBAAiB;YAAE;QAExB,IAAI,iBAAiB,CAAC,YAAY,KAAK,iBAAiB,CAAC,aAAa,EAAE;AACtE,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;AACpF,YAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,EAAE,SAAS,CAAC;AAC5E,YAAA,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,aAAa;QACjD;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,WAAW,CAAC;IACpE;AAGA,IAAA,SAAS,CAAC,EAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW;YAAE;;QAGtB,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;gBAAE;YACxB,IAAI,CAAC,iBAAiB,GAAG;gBACvB,IAAI;AACJ,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,YAAY,EAAE,KAAK;aACpB;YACD,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;YACpD,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D;QACF;AAEA,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxB,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;uGA7KW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAIc;;sBAGZ,KAAK;uBAAC,YAAY;;sBAElB;;sBAEA;;sBAEA;;sBACA;;sBAEA;;sBACA;;sBAEA,WAAW;uBAAC,gBAAgB;;sBAC5B,WAAW;uBAAC,oBAAoB;;sBAChC,WAAW;uBAAC,wBAAwB;;sBACpC,WAAW;uBAAC,mBAAmB;;sBAC/B,WAAW;uBAAC,WAAW;;sBACvB,WAAW;uBAAC,eAAe;;sBAiD3B,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAWpC,YAAY;uBAAC,SAAS;;sBAmDtB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;ACpJrC;MACa,iBAAiB,GAAG,IAAI,cAAc,CAAC,iBAAiB;;ACoC9D,MAAM,2BAA2B,GAAgC;AACtE,IAAA,eAAe,EAAE,0BAA0B;AAC3C,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,UAAU,EAAE,wBAAwB;AACpC,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,WAAW,EAAE,mBAAmB;AAChC,IAAA,SAAS,EAAE,oBAAoB;AAC/B,IAAA,WAAW,EAAE,sBAAsB;AACnC,IAAA,YAAY,EAAE,oBAAoB;AAClC,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,SAAS,EAAE,eAAe;AAC1B,IAAA,WAAW,EAAE,iBAAiB;AAC9B,IAAA,eAAe,EAAE,mBAAmB;AACpC,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,SAAS,EAAE,oBAAoB;AAC/B,IAAA,aAAa,EAAE,kBAAkB;AACjC,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,cAAc,EAAE,+BAA+B;AAC/C,IAAA,WAAW,EAAE,2BAA2B;AACxC,IAAA,cAAc,EAAE,8BAA8B;AAC9C,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,MAAM,EAAE,yCAAyC;AACjD,IAAA,WAAW,EAAE,QAAQ;AACrB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,mBAAmB,EAAE,QAAQ;AAC7B,IAAA,iBAAiB,EAAE,yBAAyB;AAC5C,IAAA,kBAAkB,EAAE,4BAA4B;;AAGlD;AACO,MAAM,+BAA+B,GAAG;AAC7C,IAAA,QAAQ,EAAE,4CAA4C;AACtD,IAAA,eAAe,EAAE,8CAA8C;AAC/D,IAAA,YAAY,EAAE,sDAAsD;AACpE,IAAA,UAAU,EAAE,+CAA+C;AAC3D,IAAA,eAAe,EAAE,8DAA8D;AAC/E,IAAA,YAAY,EAAE,sEAAsE;AACpF,IAAA,UAAU,EAAE,0EAA0E;AACtF,IAAA,aAAa,EAAE,qDAAqD;AACpE,IAAA,YAAY,EAAE,mFAAmF;;AAK7F,SAAU,sBAAsB,CACpC,QAAgB,EAChB,MAAuC,EAAA;IAEvC,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAW,KAAI;AACvD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,QAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AACnE,IAAA,CAAC,CAAC;AACJ;;ACSA,MAAM,gBAAgB,GAAG,GAAG;AAC5B,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,gBAAgB,GAAG,EAAE;AAC3B,MAAM,uBAAuB,GAAG,EAAE;AAClC,MAAM,gBAAgB,GAAG,GAAG;AAsF5B,MAAM,iBAAiB,GAAG,CAAC,KAAc,KAAa;IACpD,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,KAAK;AAC/B,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,IAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB;AAAE,QAAA,OAAO,KAAK;;IAEvD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,KAAK;AACzB,IAAA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;AACjD,IAAA,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;AACvC,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;AAChC,IAAA,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;AAC/B,IAAA,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;AACxC,IAAA,OAAO,IAAI;AACb,CAAC;MAiCY,QAAQ,CAAA;;IAEX,QAAQ,GAAmB,EAAE;IACrC,UAAU,GAAG,CAAC;AACd,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;IACA,IAAI,OAAO,CAAC,KAAwC,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5B;;IAGQ,KAAK,GAAQ,EAAE;AACvB,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IACA,IAAI,IAAI,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AACA;;;AAGG;IACM,OAAO,GAAG,KAAK;AACxB;;;;AAIG;IACK,MAAM,GAAkB,IAAI;AACpC,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAAgC,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI;QAC3B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IACQ,cAAc,GAAG,KAAK;AAC9B,IAAA,IACI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;IACA,IAAI,aAAa,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,gBAAgB,GAAG,KAAK;AAChC,IAAA,IACI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IACA,IAAI,eAAe,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC7B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,WAAW,GAAkB,KAAK;AAC1C,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IACA,IAAI,UAAU,CAAC,KAAuC,EAAA;AACpD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,KAAK;QACjC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,mBAAmB,GAAG,KAAK;AACnC,IAAA,IACI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB;IACjC;IACA,IAAI,kBAAkB,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAChC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,WAAW,GAAkB,KAAK;AAC1C,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IACA,IAAI,UAAU,CAAC,KAAuC,EAAA;AACpD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,KAAK;QACjC,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,OAAO,GAAwC,IAAI;AAC3D,IAAA,IACI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IACA,IAAI,MAAM,CAAC,KAAsD,EAAA;AAC/D,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,wBAAwB,EAAE;IACjC;AACQ,IAAA,gBAAgB;AACxB,IAAA,IACI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IACA,IAAI,eAAe,CAAC,KAAmE,EAAA;AACrF,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACS,YAAY,GAAG,KAAK;IACpB,iBAAiB,GAAG,KAAK;;IAE1B,eAAe,GAA2C,KAAK;AACvE,IAAA,IACI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;IACA,IAAI,cAAc,CAAC,KAAgE,EAAA;AACjF,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,IAAI,KAAK;QACrC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IACQ,UAAU,GAA0C,KAAK;AACjE,IAAA,IACI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;IACA,IAAI,SAAS,CAAC,KAA+D,EAAA;AAC3E,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,KAAK;QAChC,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,MAAM,GAAiC,EAAE;AACjD,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAAsD,EAAA;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;QACnD,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,YAAY,GAAuC,IAAI;AAC/D,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IACA,IAAI,WAAW,CAAC,KAAqD,EAAA;AACnE,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI;QAChE,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,gBAAgB,EAAE;IACzB;AACA;;;AAGG;IACK,MAAM,GAA4B,IAAI;AAC9C,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAA0C,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;IACrC;;IAES,0BAA0B,GAAkC,EAAE;IAC/D,iBAAiB,GAAG,KAAK;AACjC,IAAA,IACI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IACA,IAAI,gBAAgB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC9B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AACA;;;AAGG;IACK,SAAS,GAA0C,KAAK;AAChE,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAA+D,EAAA;AAC1E,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,KAAK;QAC/B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IACS,UAAU,GAAG,KAAK;IAClB,YAAY,GAAG,KAAK;;IAEpB,eAAe,GAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE5C,UAAU,GAAG,KAAK;AAC1B,IAAA,IACI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;IACA,IAAI,SAAS,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,gBAAgB,EAAE;IACzB;;IAES,kBAAkB,GAAkB,SAAS;;IAE7C,aAAa,GAAG,OAAO;;IAEvB,UAAU,GAAG,KAAK;;IAElB,YAAY,GAAG,KAAK;;IAEpB,YAAY,GAAG,KAAK;;IAEpB,UAAU,GAAG,IAAI;;IAEjB,eAAe,GAAG,EAAE;;IAEpB,kBAAkB,GAAG,EAAE;;IAEvB,kBAAkB,GAAG,EAAE;;IAExB,aAAa,GAAoB,EAAE;AAC3C,IAAA,IACI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;IACA,IAAI,YAAY,CAAC,KAAyC,EAAA;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI;QACzC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AACA;;;AAGG;IACM,cAAc,GAA6B,IAAI;;IAE/C,aAAa,GAAqB,MAAM;;IAExC,iBAAiB,GAAyB,KAAK;;IAE/C,gBAAgB,GAAwB,SAAS;;IAEjD,gBAAgB,GAAG,IAAI;;IAEvB,mBAAmB,GAAuB,EAAE;;AAE5C,IAAA,mBAAmB;;IAEpB,iBAAiB,GAAoB,EAAE;AAC/C,IAAA,IACI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IACA,IAAI,gBAAgB,CAAC,KAAyC,EAAA;AAC5D,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAES,eAAe,GAAqB,IAAI;;IAExC,eAAe,GAAqB,IAAI;;IAExC,qBAAqB,GAAG,oBAAoB;;IAE5C,uBAAuB,GAAG,oBAAoB;IAC/C,oBAAoB,GAAG,EAAE;;AAEjC,IAAA,IACI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB;IAClC;IACA,IAAI,mBAAmB,CAAC,KAAgC,EAAA;AACtD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,sBAAsB,GAAoB,IAAI;;AAEtD,IAAA,IACI,qBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB;IACpC;IACA,IAAI,qBAAqB,CAAC,KAAkC,EAAA;AAC1D,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,IAAI,IAAI;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,gBAAgB,EAAE;IACzB;;IAES,kBAAkB,GAAG,YAAY;;IAEjC,oBAAoB,GAAG,cAAc;;IAErC,kBAAkB,GAAG,eAAe;;IAEpC,oBAAoB,GAAG,iBAAiB;;IAExC,cAAc,GAAmD,IAAI;AACrE,IAAA,WAAW,GAAG,KAAK,CAAC;IACpB,cAAc,GAAG,KAAK;;IAEtB,QAAQ,GAAgB,QAAQ;;IAEhC,eAAe,GAAG,yDAAyD;AAC3E,IAAA,YAAY,GAAG,KAAK,CAAC;AACtB,IAAA,cAAc,GAA6B;AACjD,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,QAAQ,EAAE;KACX;AACD,IAAA,IACI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;IACA,IAAI,aAAa,CAAC,KAAkD,EAAA;AAClE,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI;AAC7B,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,QAAQ,EAAE;SACX;QACD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAES,KAAK,GAAqB,WAAW;IACrC,UAAU,GAA2C,KAAK;AAC3D,IAAA,QAAQ;AAChB,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;IACA,IAAI,OAAO,CAAC,KAA0C,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,gBAAgB,EAAE;IACzB;AACS,IAAA,QAAQ;AACR,IAAA,QAAQ;IACR,cAAc,GAAG,KAAK;IACvB,kBAAkB,GAAG,KAAK;AAClC,IAAA,IACI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;IAChC;IACA,IAAI,iBAAiB,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,IAAI,CAAC,gBAAgB,EAAE;IACzB;;IAEQ,UAAU,GAAG,KAAK;AAC1B,IAAA,IACI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;IACA,IAAI,SAAS,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,gBAAgB,EAAE;IACzB;;IAES,aAAa,GAAqB,MAAM;;IAExC,kBAAkB,GAAG,KAAK;IAC1B,mBAAmB,GAAkB,IAAI;IACzC,mBAAmB,GAAG,QAAQ;;IAE9B,MAAM,GAAsB,EAAE;;IAE9B,MAAM,GAAkB,IAAI;;IAE5B,GAAG,GAA6B,MAAM;;IAEtC,kBAAkB,GAAG,IAAI;AACzB,IAAA,WAAW;;IAGX,eAAe,CAA8C;IAC7D,qBAAqB,CAAa;;AAGN,IAAA,eAAe;AACzB,IAAA,YAAY;AACV,IAAA,cAAc;AACnC,IAAA,MAAM,GAAG,MAAM,EAAC,UAAuB,EAAC;AAChD,IAAA,cAAc,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAC3D,oBAAoB,GAA2B,EAAE;IACjD,aAAa,GAAiE,IAAI;IAClF,WAAW,GAAa,EAAE;IAClC,eAAe,GAAkB,IAAI;IACrC,mBAAmB,GAAkB,IAAI;IAEzC,SAAS,GAAG,KAAK;AAEP,IAAA,MAAM,GAAG,IAAI,YAAY,EAAiB;;AAG1C,IAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AACvD,IAAA,OAAO,GAAG,IAAI,YAAY,EAA8C;AACxE,IAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AACzD,IAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AAEzD,IAAA,WAAW,GAAG,IAAI,YAAY,EAA0B;AACxD,IAAA,UAAU,GAAG,IAAI,YAAY,EAA6D;AAC1F,IAAA,YAAY,GAAG,IAAI,YAAY,EAAgC;AAC/D,IAAA,aAAa,GAAG,IAAI,YAAY,EAAuD;AACvF,IAAA,UAAU,GAAG,IAAI,YAAY,EAAsC;AACnE,IAAA,eAAe,GAAG,IAAI,YAAY,EAAoB;AACtD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAsF;AACxH,IAAA,UAAU,GAAG,IAAI,YAAY,EAA6D;AAC1F,IAAA,aAAa,GAAG,IAAI,YAAY,EAAuC;AAE7C,IAAA,YAAY;AAChB,IAAA,QAAQ;AACe,IAAA,cAAc;AAC7D,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5C,IAAA,QAAQ,GAAgB,IAAI,GAAG,EAAU;AAEjC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IAEzB,UAAU,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACzC,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE5E,SAAS,GAAG,KAAK;IACjB,QAAQ,GAA0B,IAAI;IACtC,SAAS,GAAsC,EAAE;;IAEzC,KAAK,GAAoE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;AAChH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IACA,IAAI,IAAI,CAAC,KAAyF,EAAA;AAChG,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AACA,IAAA,YAAY,GAA0B,IAAI,GAAG,EAAoB;AACjE,IAAA,cAAc,GAA0B,IAAI,GAAG,EAAoB;IAC3D,eAAe,GAAkB,IAAI;AACrC,IAAA,eAAe,GAA2C,IAAI,GAAG,EAAE;;IAEnE,aAAa,GAAG,EAAE;AAC1B,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;IACA,IAAI,YAAY,CAAC,KAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,wBAAwB,EAAE;IACjC;IACQ,QAAQ,GAA2B,EAAE;AAC7C,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;IACA,IAAI,OAAO,CAAC,KAAgD,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC,wBAAwB,EAAE;IACjC;IACQ,YAAY,GAAiC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;AAClF,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IACA,IAAI,WAAW,CAAC,KAAsD,EAAA;AACpE,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1D,IAAI,CAAC,wBAAwB,EAAE;IACjC;IACA,mBAAmB,GAAkB,IAAI;IACzC,oBAAoB,GAAuB,IAAI;IAC/C,kBAAkB,GAAkB,IAAI;IACxC,2BAA2B,GAAuB,IAAI;IACtD,qBAAqB,GAAkB,IAAI;IAC3C,UAAU,GAAkD,EAAE;;IAE9D,kBAAkB,GAAiC,EAAE;IACrD,mBAAmB,GAA8B,EAAE;IACnD,mBAAmB,GAA2B,EAAE;IACxC,iBAAiB,GAAG,KAAK;IACzB,KAAK,GAAG,CAAC;AACjB,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IACA,IAAI,IAAI,CAAC,KAAgC,EAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IACQ,SAAS,GAAG,EAAE;AACtB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAgC,EAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;AAGA,IAAA,YAAY,GAAkB,IAAI,CAAC;IACnC,WAAW,GAA+C,IAAI;;IAE9D,WAAW,GAAkD,IAAI;;IAEjE,aAAa,GAAG,EAAE;IAClB,QAAQ,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,iBAAiB,GAAG,KAAK;;IAGzB,gBAAgB,GAAG,KAAK;IACxB,iBAAiB,GAAG,KAAK;IACzB,sBAAsB,GAAkB,IAAI;IAC5C,YAAY,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3C,qBAAqB,GAAG,KAAK;IACrB,oBAAoB,GAAuB,IAAI;IAC/C,yBAAyB,GAAG,KAAK;IAEzC,OAAO,GAAe,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,gBAAgB,GAAG,KAAK;IAChB,aAAa,GAA4B,IAAI;AAEpC,IAAA,kBAAkB,GAAG,IAAI,6BAA6B,EAAK;AACpE,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,oBAAoB,GAAmB,EAAE;IACzC,mBAAmB,GAAmB,EAAE;IACxC,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAQ,EAAE;IACrB,UAAU,GAAQ,EAAE;IACpB,eAAe,GAA8B,EAAE;IACvD,qBAAqB,GAAmC,EAAE;IAC1D,qBAAqB,GAAyC,EAAE;IAChE,8BAA8B,GAAa,EAAE;IAC7C,2BAA2B,GAAG,CAAC;IAC/B,2BAA2B,GAAG,CAAC;IACvB,oBAAoB,GAAG,IAAI;IAC3B,mBAAmB,GAAG,IAAI;IAC1B,aAAa,GAAG,IAAI;IACpB,WAAW,GAAG,IAAI;IAClB,UAAU,GAAG,IAAI;IACjB,eAAe,GAAG,IAAI;IACtB,qBAAqB,GAAG,KAAK;AAC7B,IAAA,UAAU,GAAG,IAAI,GAAG,EAA8C;IAClE,aAAa,GAAe,IAAI;AAChC,IAAA,cAAc;AACd,IAAA,oBAAoB,GAAG,IAAI,GAAG,EAA+B;AAC7D,IAAA,oBAAoB,GAAG,IAAI,GAAG,EAAuC;AACrE,IAAA,yBAAyB,GAAG,IAAI,GAAG,EAAiC;AACpE,IAAA,gCAAgC,GAAG,IAAI,GAAG,EAAiC;AAC3E,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAAgC;IAC7D,sBAAsB,GAA0B,IAAI;IACpD,mBAAmB,GAAoB,IAAI;IAC3C,6BAA6B,GAAoB,IAAI;AACrD,IAAA,kBAAkB,GAAG,IAAI,GAAG,EAAU;AACtC,IAAA,oBAAoB,GAAG,IAAI,GAAG,EAAwC;AACtE,IAAA,0BAA0B,GAAG,IAAI,GAAG,EAA8C;IAC1F,cAAc,GAAkB,IAAI;IACpC,oBAAoB,GAAG,KAAK;IAC5B,oBAAoB,GAAG,KAAK;AAEpB,IAAA,IAAI,CAAC,CAAU,EAAA;AACrB,QAAA,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;IAClD;AAEQ,IAAA,KAAK,CAAC,GAAiB,EAAA;QAC7B,OAAO,GAAG,CAAC,KAAiB;IAC9B;IAEQ,cAAc,CACpB,GAAY,EACZ,KAAa,EAAA;AAEb,QAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAI,GAA+B,CAAC,KAAK,CAAC,GAAG,SAAS;IACtG;IAEQ,WAAW,GAAA;AACjB,QAAA,OAAO,OAAO,IAAI,CAAC,cAAc,KAAK;AACpC,cAAE,IAAI,CAAC,cAAc,EAAE,IAAI;AAC3B,cAAE,IAAI,CAAC,cAAc,IAAI,EAAE;IAC/B;AAEQ,IAAA,aAAa,CACnB,GAA0C,EAAA;AAE1C,QAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAI,GAAsB,GAAG,EAAE;IAC/E;AAEQ,IAAA,eAAe,CAAC,IAAe,EAAA;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/C;IAEQ,iBAAiB,CAAC,GAAM,EAAE,MAAsB,EAAA;QACtD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAoB,CAAC;IACtE;IAEQ,eAAe,CAAC,KAAa,EAAE,KAAc,EAAA;AACnD,QAAA,OAAO,EAAE,CAAC,KAAK,GAAG,KAAK,EAAgB;IACzC;IAEQ,iBAAiB,CAAC,IAAa,EAAE,KAAc,EAAA;QACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACzD,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACrF;QACA,IAAI,IAAI,KAAK,KAAK;AAAE,YAAA,OAAO,CAAC;QAC5B,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IAC/D;AAEQ,IAAA,gBAAgB,CAAC,KAAa,EAAA;QACpC,MAAM,aAAa,GAAG,KAAqC;QAC3D,OAAO;AACL,YAAA,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ;YAChC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,OAAO,CAAC;SAC3D;IACH;AAEQ,IAAA,UAAU,CAAC,GAAiB,EAAA;AAClC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAiB;QACjC,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAA,QAAQ,GAAG,CAAC,IAAI;AACd,YAAA,KAAK,SAAS,EAAE,OAAO,KAAK;AAC5B,YAAA,KAAK,QAAQ,EAAE,OAAO,EAAE;AACxB,YAAA,KAAK,MAAM,EAAE,OAAO,EAAE;AACtB,YAAA,SAAS,OAAO,EAAE;;IAEtB;IACQ,eAAe,GAAA;QACrB,MAAM,EAAE,GAAG,iBAAiB;AAC5B,QAAA,OAAO,CAAC,CAAkB,KACxB,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACpF,cAAE;AACF,cAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACxB;IAEQ,aAAa,GAAA;QACnB,OAAO,CAAC,CAAkB,KAAI;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;YACjB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,IAAI;YAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;AAC7D,QAAA,CAAC;IACH;AAEQ,IAAA,gBAAgB,CAAC,GAAoB,EAAA;QAC3C,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,MAAM,SAAS,IAAI,GAAG,IAAI,EAAE,CAAM;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;AAC9C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC;gBAAE;AACjD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe;YAC/B,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAe,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC/E,MAAM,CAAC,GAAc,EAAE;YAEvB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;AAAE,gBAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACvE,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;gBACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;YAC3E;AACA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACzD,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;;YAGrD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3B;QACA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B;IAEQ,oBAAoB,GAAA;;QAE1B,MAAM,EAAE,GAAG,kDAAkD;QAC7D,OAAO,CAAC,CAAkB,KAAI;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;YACjB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC;AAC3D,YAAA,IAAI,GAAG,CAAC,CAAA,CAAE,CAAC,MAAM,GAAG,gBAAgB;AAAE,gBAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;YAC5D,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AACpD,QAAA,CAAC;IACH;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,WAAW,IAAI,IAAI;IAClD;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;IAC1E;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB;AAC3C,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE;gBACtB,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC1D,oBAAA,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC;AACzF,oBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;gBACtC;AACA,gBAAA,IAAI,CAAC,oBAAoB,GAAG,WAAW;YACzC;iBAAO;gBACL,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;YAChD;AACA,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;QACnC;QACA,OAAO,IAAI,CAAC,oBAAoB;IAClC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AAC7B,kBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,kBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAe,CAAC;AAC7C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACpB,oBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACjB;YACF;YACA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACpF,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAClC;QACA,OAAO,IAAI,CAAC,mBAAmB;IACjC;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC3B,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACjC;IAEQ,oBAAoB,GAAA;QAC1B,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE;IAC1B;;;AAIQ,IAAA,mBAAmB,CAAC,YAAyB,EAAA;QACnD,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBACxB,YAAY,IAAI;YAClB;AAAE,YAAA,MAAM;;YAER;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,OAAO;YAAE;AAC9E,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;gBACvB,KAAK;AACL,gBAAA,EAAE,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;AACpD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO;IACpC;AAEQ,IAAA,cAAc,CAAC,GAAM,EAAE,aAAa,GAAG,CAAC,CAAC,EAAA;QAC/C,IAAI,CAAC,gBAAgB,EAAE;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AACvC,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QAEzB,OAAO;AACL,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,EAAE,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,aAAa;SACpE;IACH;AAEQ,IAAA,WAAW,CAAC,GAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAA;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK;IACjD;AAEQ,IAAA,eAAe,CAAC,gBAAyB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAe,CAAC,CAAC;QACjE,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAe,CAAC;YAC5D;QACF;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK;IACjC;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC1D;AAEA,IAAA,iBAAiB,CAAC,GAAiB,EAAA;QACjC,OAAO,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;IAChD;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC;IACpE;IAEA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,gBAAgB,GAAA;QACd,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;IAC5F;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,KAAK,IAAI;IAC/E;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI;IAClF;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI;IAClF;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC;IAC/E;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC;IAC/E;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AACxE,QAAA,OAAO,MAAM,EAAE,MAAM,IAAI,KAAK;IAChC;AAEA,IAAA,oBAAoB,CAAC,GAAiB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAe,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAe;cAC1C,CAAA,WAAA,EAAc,MAAM,CAAA,yCAAA;AACtB,cAAE,CAAA,IAAA,EAAO,MAAM,CAAA,uDAAA,CAAyD;IAC5E;AAEA,IAAA,uBAAuB,CAAC,UAAsC,EAAA;QAC5D,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,YAAY,GAAG,WAAW,CAAA,CAAA,CAAG;IACnJ;AAEA,IAAA,oBAAoB,CAAC,UAAsC,EAAA;QACzD,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,SAAA,CAAW;IACtE;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC;AAChB,cAAE;cACA,wCAAwC;IAC9C;AAEA,IAAA,eAAe,CAAC,UAAsC,EAAA;QACpD,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC;IACjD;AAEA,IAAA,mBAAmB,CAAC,UAAsC,EAAA;AACxD,QAAA,OAAO,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,YAAY,GAAG,WAAW;IAC/D;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3B;IAEA,aAAa,CAAC,KAAa,EAAE,GAAA,GAAoB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAA;QACjE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE;AAC1C,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;IACjE;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAE,IAAI,GAAG,IAAI,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC;IAC/F;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,KACxB,UAAU,CAAC,KAAK,KAAK;cACjB,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM;AAClE,cAAE,UAAU,CACf,EACD,IAAI,CACL;IACH;AAEQ,IAAA,mBAAmB,CACzB,WAA4D,EAC5D,IAAI,GAAG,IAAI,EAAA;QAEX,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;QAC9D,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AACvC,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,KAChC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAC3F;QACH,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,mBAAmB,EAAE;QAC5B;QACA,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,yBAAyB,CAC/B,WAA4D,EAAA;AAE5D,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;QAC9B,MAAM,UAAU,GAAiC,EAAE;AAEnD,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,IAAI,EAAE,EAAE;AAC1C,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACpD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACf,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK;AACL,gBAAA,GAAG,EAAE,UAAU,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;gBAC/C,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AAChH,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,UAAU;IACnB;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI;YAAE;QACnC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAK,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,UAAU,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;QACvG,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAC7C,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACrE,CACF;IACH;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACnC;AAEQ,IAAA,qBAAqB,CAAC,KAAgC,EAAA;AAC5D,QAAA,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC3E;IAEA,sBAAsB,CAAC,KAAgB,EAAE,KAAa,EAAA;QACpD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;YACzC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,+BAA+B,EAAE,KAAK,CAAC;YAClE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;QACjD;IACF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,oBAAoB,CAAC,KAAgB,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,+BAA+B,CAAC,IAAI,IAAI;QACzG,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,KAAK;QACnC,IAAI,IAAI,CAAC,oBAAoB;YAAE;QAC/B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACxC;IACF;AAEA,IAAA,qBAAqB,CAAC,KAAgB,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;AACzD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;QAClD,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,KAAgB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,+BAA+B,CAAC,IAAI,IAAI;QACzG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;YACtC,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QACA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAM,CAAC;IAC5B;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,eAAe,EAAE;AAAE,YAAA,OAAO,KAAK;QACnE,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AAC3F,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAAE,YAAA,OAAO,KAAK;QAChD,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AACzD,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AAC1C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,iBAAiB,CAAC,KAAgB,EAAE,GAAiB,EAAE,SAAiB,EAAA;QACtE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,KAAe;AAC1C,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACpC,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;YACzC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;QAChE;IACF;IAEA,gBAAgB,CAAC,KAAgB,EAAE,OAAe,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;QACtD,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,KAAK,CAAC,YAAY;AAAE,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;AAC9D,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,iBAAiB,CAAC,KAAgB,EAAE,KAAa,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE;AACtC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;AAClD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;YACzD,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE;AACrD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEA,YAAY,CAAC,KAAgB,EAAE,OAAe,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;QACtD,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC;AAC5F,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;AAGG;IACH,aAAa,CACX,MAA+C,EAC/C,gBAAwB,EACxB,OAAiC,EACjC,IAAI,GAAG,IAAI,EAAA;AAEX,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAAE;AACpC,QAAA,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAI,MAAM,CAAC,KAAgB;AAC5E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;AAC9D,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM;YAAE;AAE9E,QAAA,MAAM,WAAW,GAAG,OAAO,EAAE,MAAM,KAAK,KAAK;AAC7C,QAAA,IAAI,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,CAAC,GAAG,gBAAgB;QACnE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,OAAO;YAAE;QAE3B,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;IAC3C;AAEA,IAAA,UAAU,CAAC,SAAiB,EAAE,OAAe,EAAE,IAAI,GAAG,IAAI,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAAE;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc;AAChC,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE;QACxF,IAAI,SAAS,KAAK,OAAO;YAAE;AAE3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAAE;AAEpD,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAe;QAC3C,MAAM,iBAAiB,GAAG;AACvB,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;aAC7C,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAe,CAAC;QACpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/D,IAAI,gBAAgB,GAAG,CAAC;YAAE;QAE1B,IAAI,cAAc,GAAG,CAAC;QACtB,IAAI,eAAe,GAAG,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,OAAO,EAAE;gBACjB,cAAc,GAAG,eAAe;gBAChC;YACF;YACA,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAE,gBAAA,eAAe,EAAE;QAC1D;AAEA,QAAA,MAAM,eAAe,GAAG,CAAC,GAAG,iBAAiB,CAAC;AAC9C,QAAA,eAAe,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3C,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,WAAW,CAAC;QAEtD,MAAM,KAAK,GAAa,EAAE;QAC1B,IAAI,aAAa,GAAG,CAAC;AACrB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAe,CAAC;YACjC;iBAAO;gBACL,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC;YAC9C;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC;QAC5E,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAClD,QAAA,IAAI,IAAI,IAAI,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;gBACvD,MAAM;gBACN,SAAS;AACT,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC;AACnB,aAAA,CAAC;QACJ;QACA,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/D;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU;AACpC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACtB,MAAM,KAAK,GAAG,CAAA,EAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAA,CAAE;AAClC,YAAA,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,YAAA,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAClG;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc;AACnC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;QAC/F;AAEA,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClG,QAAA,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,CAAA,sGAAA,EAAyG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC7K;QAEA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC7C,YAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3G,YAAA,IAAI,qBAAqB,CAAC,MAAM,EAAE;gBAChC,MAAM,IAAI,KAAK,CACb,CAAA,kGAAA,EAAqG,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAChK;YACH;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC5E,YAAA,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC;QACjH;QAEA,IAAI,KAAK,GAAsC,SAAS;AACxD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACvC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC;gBACnG;gBACA;YACF;AACA,YAAA,IAAI,IAAI,KAAK,UAAU,EAAE;gBACvB,KAAK,GAAG,UAAU;gBAClB;YACF;AACA,YAAA,IAAI,KAAK,KAAK,UAAU,EAAE;AACxB,gBAAA,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;YACzF;YACA,KAAK,GAAG,QAAQ;AAClB,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;AAChB,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe;IAC3F;IAEA,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;YACxH,OAAO,IAAI,CAAC,UAAU;QACxB;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;QAC1C,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACzC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS;AAExD,YAAA,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG;YAC1B;iBAAO,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACtD,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG;YAC1B;iBAAO;gBACL,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAc,EAAE,OAAO,EAAE,EAAE,EAAE;AACxG,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe;gBAC5C,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACtC,oBAAA,MAAM,gBAAgB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC;AAC7F,oBAAA,IAAI,CAAC,gBAAgB;AAAE,wBAAA,OAAO,KAAK;AACnC,oBAAA,IAAI,CAAC,MAAM;AAAE,wBAAA,OAAO,IAAI;AACxB,oBAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7G,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;QACA,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEQ,yBAAyB,GAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;AAC5C,QAAA,IAAI,IAAI,EAAE,OAAO,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;AACtC,QAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE;IACtC;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;aAClB,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;AAC9E,aAAA,GAAG,CAAC,CAAC,GAAG,MAAM;YACb,KAAK,EAAE,GAAG,CAAC,KAAe;AAC1B,YAAA,QAAQ,EAAE,UAA+B;YACzC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC;AACxC,YAAA,UAAU,EAAE;AACb,SAAA,CAAC,CAAC;AACL,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC;IAEQ,mBAAmB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IACpE;IAEQ,gBAAgB,CAAC,GAAM,EAAE,UAAwC,EAAA;AACvE,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAC3C,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAC5C,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CACxG;QACD,OAAO,UAAU,CAAC,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IACnF;IAEQ,iBAAiB,CAAC,GAAM,EAAE,UAA+B,EAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AACnG,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;AAC5E,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,CAAC;AAE9F,QAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,SAAS,IAAI,IAAI;AAC9D,QAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,WAAW;YAAE,OAAO,SAAS,IAAI,IAAI;AACjE,QAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,KAAK,EAAE;AAC9D,QAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY;AAAE,YAAA,OAAO,SAAS,KAAK,EAAE,IAAI,SAAS,IAAI,IAAI;QAEtF,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,EAAE;YACrD,MAAM,IAAI,GAAG,SAA0B;YACvC,MAAM,KAAK,GAAG,YAA6B;AAC3C,YAAA,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAAE,gBAAA,OAAO,KAAK;AAC/C,YAAA,QAAQ,UAAU,CAAC,QAAQ;AACzB,gBAAA,KAAK,IAAI,EAAE,OAAO,IAAI,KAAK,KAAK;AAChC,gBAAA,KAAK,KAAK,EAAE,OAAO,IAAI,KAAK,KAAK;AACjC,gBAAA,KAAK,IAAI,EAAE,OAAO,IAAI,GAAG,KAAK;AAC9B,gBAAA,KAAK,KAAK,EAAE,OAAO,IAAI,IAAI,KAAK;AAChC,gBAAA,KAAK,IAAI,EAAE,OAAO,IAAI,GAAG,KAAK;AAC9B,gBAAA,KAAK,KAAK,EAAE,OAAO,IAAI,IAAI,KAAK;AAChC,gBAAA,SAAS,OAAO,KAAK;;QAEzB;AAEA,QAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,YAAA,QAAQ,UAAU,CAAC,QAAQ;AACzB,gBAAA,KAAK,IAAI,EAAE,OAAO,SAAS,KAAK,YAAY;AAC5C,gBAAA,KAAK,KAAK,EAAE,OAAO,SAAS,KAAK,YAAY;AAC7C,gBAAA,SAAS,OAAO,KAAK;;QAEzB;AAEA,QAAA,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AACvD,QAAA,MAAM,KAAK,GAAG,YAAY,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAC9D,QAAA,MAAM,cAAc,GAAG,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI;AAC7D,QAAA,MAAM,eAAe,GAAG,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK;AAEhE,QAAA,QAAQ,UAAU,CAAC,QAAQ;YACzB,KAAK,UAAU,EAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;YAChE,KAAK,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;AACvE,YAAA,KAAK,IAAI,EAAE,OAAO,cAAc,KAAK,eAAe;AACpD,YAAA,KAAK,KAAK,EAAE,OAAO,cAAc,KAAK,eAAe;YACrD,KAAK,YAAY,EAAE,OAAO,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC;YACpE,KAAK,UAAU,EAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;AAChE,YAAA,SAAS,OAAO,KAAK;;IAEzB;IAEQ,oBAAoB,CAC1B,KAAc,EACd,UAA0D,EAAA;AAE1D,QAAA,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QACpD,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC/B,QAAQ,UAAU;YAChB,KAAK,SAAS,EAAE;AACd,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;YAC7C;YACA,KAAK,MAAM,EAAE;gBACX,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;YAC7C;AACA,YAAA,KAAK,SAAS;gBACZ,IAAI,KAAK,KAAK,MAAM;AAAE,oBAAA,OAAO,IAAI;gBACjC,IAAI,KAAK,KAAK,OAAO;AAAE,oBAAA,OAAO,KAAK;gBACnC,OAAO,CAAC,CAAC,KAAK;AAChB,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;IAE1B;AAEA,IAAA,mBAAmB,CAAC,GAAkB,EAAA;QACpC,OAAO,GAAG,EAAE,UAAU,IAAI,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC;IAChE;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU;IAC/F;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEzB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,sBAAsB,EAAE;cACzC,GAAG,CAAC;AACN,cAAE,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE;kBAC1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM;kBACvC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC9C,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,qBAAqB,CAAC,GAAiB,EAAA;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB;AAC1C,QAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;AACnB,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC9E;AACA,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAC7B,OAAO,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAChE;AAEA,IAAA,iBAAiB,CAAC,GAAiB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAkD;QACrH,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;QACxC;AACA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,aAAa,CAAC,QAA2B,EAAA;AACvC,QAAA,MAAM,MAAM,GAAsC;AAChD,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,cAAc,EAAE,kBAAkB;AAClC,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,GAAG,EAAE,gBAAgB;AACrB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,EAAE,EAAE,cAAc;AAClB,YAAA,GAAG,EAAE,uBAAuB;AAC5B,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,GAAG,EAAE,oBAAoB;AACzB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,SAAS,EAAE,aAAa;AACxB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,UAAU,EAAE;SACb;AACD,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB;IAEA,sBAAsB,CAAC,GAAiB,EAAE,QAA2B,EAAA;QACnE,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxE;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;QAChD,QAAQ,UAAU;AAChB,YAAA,KAAK,SAAS,EAAE,OAAO,eAAe;AACtC,YAAA,KAAK,MAAM,EAAE,OAAO,aAAa;AACjC,YAAA,KAAK,SAAS,EAAE,OAAO,gBAAgB;AACvC,YAAA,KAAK,QAAQ,EAAE,OAAO,eAAe;AACrC,YAAA,SAAS,OAAO,eAAe;;IAEnC;AAEA,IAAA,oBAAoB,CAAC,GAAiB,EAAA;QACpC,IAAI,GAAG,CAAC,iBAAiB;YAAE,OAAO,GAAG,CAAC,iBAAiB;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5D,IAAI,UAAU,KAAK,MAAM;AAAE,YAAA,OAAO,YAAY;QAC9C,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,CAAA,UAAA,EAAa,MAAM,CAAA,GAAA,CAAK;AAC7D,QAAA,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,CAAA,UAAA,EAAa,MAAM,CAAA,GAAA,CAAK;AACrF,QAAA,OAAO,EAAE;IACX;IAEA,wBAAwB,GAAA;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC9C;AAEA,IAAA,6BAA6B,CAAC,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAAE,YAAA,OAAO,KAAK;AAClD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB;QACzC,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,sBAAsB,CAAC,KAAc,EAAA;QACnC,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;QAC5B,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,GAAG,KAAK,GAAG,IAAI;AAC3D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;IACtE;AAEA,IAAA,gBAAgB,CAAC,GAAiB,EAAA;AAChC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEQ,gBAAgB,CAAC,KAAa,EAAE,KAAc,EAAA;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,SAAS;AAC3E,QAAA,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AACnE,YAAA,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC,KAAK;QACjC;AACA,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IAC3C;AAEA,IAAA,aAAa,CAAC,KAAgC,EAAA;QAC5C,OAAO,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA,CAAE;IACrG;AAEA,IAAA,kBAAkB,CAAC,KAAgC,EAAA;AACjD,QAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;IAC7D;AAEA,IAAA,oBAAoB,CAAC,KAAgC,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACpC,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IAC3C;IAEA,iBAAiB,CAAC,GAAiB,EAAE,KAAgC,EAAA;AACnE,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;IAC/D;IAEA,qBAAqB,CAAC,GAAiB,EAAE,KAAgC,EAAA;AACvE,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QACnD,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;IACnD;IAEA,gBAAgB,CAAC,GAAiB,EAAE,KAAgC,EAAA;QAClE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AACpD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,4BAA4B,CAAC,KAAa,EAAA;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;IAC5C;AAEA,IAAA,sBAAsB,CAAC,KAAa,EAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACtC;AAEA,IAAA,yBAAyB,CAAC,KAAa,EAAA;QACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,IAAI;IAClD;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI;IAC5C;AAEA,IAAA,kBAAkB,CAAC,KAAgC,EAAA;AACjD,QAAA,MAAM,GAAG,GAAsB;AAC7B,YAAA,SAAS,EAAE,KAAK;YAChB,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC;SACzD;AACD,QAAA,OAAO,GAAG;IACZ;IAEA,kBAAkB,CAAC,KAAgC,EAAE,GAAiB,EAAA;QACpE,OAAO;AACL,YAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjC,GAAG;SACJ;IACH;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,OAAO,KAAK,GAAG,GAAG;IACpB;AAEQ,IAAA,mBAAmB,CAAC,KAAgC,EAAA;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC;AAE9B,QAAA,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;AAC9E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/D,YAAA,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;gBAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC;YACvC;QACF;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC;IAC5D;IAEQ,wBAAwB,CAAC,GAAiB,EAAE,KAAgC,EAAA;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,SAAS;AAAE,YAAA,OAAO,KAAK;QACxE,OAAO,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC5D;AAEQ,IAAA,oBAAoB,CAAC,KAAgC,EAAA;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAC9C,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/F;AAEQ,IAAA,gBAAgB,CAAC,GAAiB,EAAA;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IAClF;AAEQ,IAAA,WAAW,CAAC,KAAgC,EAAE,KAAa,EAAE,UAAkB,EAAA;AACrF,QAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,UAAU,EAAE;IACvE;AAEA,IAAA,gBAAgB,CAAC,KAAgC,EAAE,KAAa,EAAE,UAAkB,EAAA;AAClF,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAChF;AAEA,IAAA,oBAAoB,CAAC,KAAgC,EAAE,KAAa,EAAE,UAAkB,EAAA;AACtF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;QACtD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;QACrC;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC;QACA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,aAAa,CAAC,IAAmC,EAAA;AACvD,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,IAAkC,CAAC,KAAK,CAAC;IAC9G;AAEQ,IAAA,yBAAyB,CAC/B,WAAyE,EAAA;QAEzE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;IACrE;AAEQ,IAAA,qBAAqB,CAC3B,OAAuD,EAAA;QAEvD,MAAM,MAAM,GAAgC,EAAE;AAC9C,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAC9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAI,OAAuC,CAAC,KAAK,CAAC,EAAE;QACxE;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,iBAAiB,CACvB,MAA+D,EAAA;AAE/D,QAAA,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM;AACpC,YAAA,GAAG,KAAK;YACR,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC;AACxD,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxG,SAAA,CAAC,CAAC;IACL;IAEA,0BAA0B,CAAC,KAAc,EAAE,KAAa,EAAA;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;AAClE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QAEzB,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5C,MAAM,QAAQ,GAAgC,EAAE;QAChD,IAAI,MAAM,GAAG,CAAC;AAEd,QAAA,OAAO,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,UAAU,GAAG,CAAC,EAAE;gBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAChF;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU;AACjC,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM;AAC/B,YAAA,IAAI,KAAK,GAAG,MAAM,EAAE;gBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACzF;YACA,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClF,MAAM,GAAG,GAAG;QACd;QAEA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC3F,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,yBAAyB,CAAC,GAAiB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ;IACzE;AAEA,IAAA,wBAAwB,CAAC,KAAc,EAAA;QACrC,OAAO,KAAK,GAAG,KAAK,GAAG,IAAI;IAC7B;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,kBAAkB,KAAK,KAAK;IAC1C;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB;AAAE,YAAA,OAAO,IAAI;QACzC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI;IAC5F;IAEA,mBAAmB,CAAC,KAAa,EAAE,MAA2B,EAAA;AAC5D,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QACA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACvE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,oBAAoB,CAAC,GAAiB,EAAE,QAA2B,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACxE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK;QACtE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE;AACrG,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAC1B;AACA,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,qBAAqB,CAAC,QAA2B,EAAA;AAC/C,QAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7E;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;QAClC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAAE,YAAA,OAAO,KAAK;AAC/D,QAAA,IAAI,GAAG,CAAC,aAAa,IAAI,IAAI;YAAE,OAAO,GAAG,CAAC,aAAa;AACvD,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK;IAC5C;AAEA,IAAA,0BAA0B,CAAC,GAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AAC/C,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;AAC7D,QAAA,OAAO,GAAG,CAAC,kBAAkB,KAAK,KAAK;IACzC;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;QACnC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAAE,YAAA,OAAO,KAAK;AAC/D,QAAA,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI;YAAE,OAAO,GAAG,CAAC,cAAc;AACzD,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,OAAO;IACtF;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC,OAAO,CAAC,IAAI,CAC9D,CAAC,MAAM,KAAoC,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CACnG;QACD,OAAO,UAAU,IAAI,IAAI;IAC3B;AAEA,IAAA,qBAAqB,CAAC,KAAa,EAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACtC;AAEQ,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrE,YAAA,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;gBAChC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;YAC5F;AACA,YAAA,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK;AAC/B,QAAA,CAAC,CAAC;QACF,OAAO,KAAK,IAAI,IAAI;IACtB;IAEQ,mBAAmB,CAAC,OAAkE,EAAE,KAAa,EAAA;AAC3G,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC/B,YAAA,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;gBAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;YAC7F;AACA,YAAA,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK;AAC/B,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,CACxB,KAAa,EACb,QAA2B,EAC3B,KAAc,EACd,IAAI,GAAG,IAAI,EAAA;AAEX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,CACf,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC9C,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE;SACrD,CAAC,EACF,IAAI,CACL;IACH;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAE,IAAI,GAAG,IAAI,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAE,CAAC,EAAE,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;QACzC;IACF;IAEA,eAAe,CAAC,IAAI,GAAG,IAAI,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAC7B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;QACvC,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,YAAY,CAAC,MAAoC,EAAE,IAAI,GAAG,IAAI,EAAA;AACpE,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAClG,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,cAAc,CAAC,MAAuD,EAAA;AAC5E,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACjD,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;SAC/G;IACH;AAEQ,IAAA,iBAAiB,CAAC,MAAoC,EAAA;QAC5D,MAAM,IAAI,GAA2B,EAAE;QACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC9B,IAAI,oBAAoB,CAAC,IAAI,CAAC;gBAAE;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACjE,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;IAEA,wBAAwB,GAAA;QACtB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;IAC/D;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,OAAO,CAAA,EAAG,KAAK,CAAA,UAAA,CAAY;IAC7B;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,OAAO,CAAA,EAAG,KAAK,CAAA,OAAA,CAAS;IAC1B;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1D;AAEA,IAAA,cAAc,CAAC,GAAiB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK;QACtE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;IACjD;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAE,QAA2B,EAAE,KAAc,EAAA;AACnF,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9F,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAe,CAAC;AAC5D,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAkD;YAChI,MAAM,iBAAiB,GAAG,eAAe,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC5E,YAAA,IAAI,CAAC,kBAAkB,CACrB,KAAK,EACL,UAAU,EAAE,QAAQ,IAAI,iBAAiB,EACzC,UAAU,EAAE,KAAK,IAAI,EAAE,CACxB;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAgB,2BAA2B,GAAG,CAAC;AAE/C,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;IACxC;AAEQ,IAAA,oBAAoB,CAAC,GAAiB,EAAA;QAC5C,OAAO;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AACvC,YAAA,KAAK,EAAE,EAAE;SACV;IACH;AAEQ,IAAA,oBAAoB,CAAC,GAAiB,EAAA;AAC5C,QAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzE;IAEQ,4BAA4B,CAClC,GAAiB,EACjB,UAAyC,EAAA;AAEzC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,2BAA2B;QAClD,IAAI,CAAC,UAAU,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC1E,QAAA,OAAO,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE;YAChC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD;AACA,QAAA,OAAO,UAAU;IACnB;IAEQ,6BAA6B,CAAC,KAAa,EAAE,GAAiB,EAAA;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACjD,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE;AAC5C,gBAAA,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;AACvD,aAAA,CAAC;QACJ;AACA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAkC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACvG,QAAA,IACE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;AAC9C,YAAA,MAAM,CAAC,MAAM;AACb,YAAA,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAC5C;YACA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK;AAC5C,YAAA,OAAO,IAAI,CAAC,4BAA4B,CACtC,GAAG,EACH,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAC7E;QACH;AACA,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;IACvC;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK;QACxC;AACA,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IACvC;IAEA,gBAAgB,CAAC,GAAiB,EAAE,KAAmB,EAAA;QACrD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,KAAK;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,0BAA0B,CAAC,GAAiB,EAAE,KAAkC,EAAA;QAC9E,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI;AAC5D,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACzB,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;IAC9D;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;QAClC,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzG;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;QAClC,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAe,CAAC;IACxD;AAEA,IAAA,yBAAyB,CAAC,GAAiB,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,2BAA2B,EAAE;AACjF,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,GAAG,CAAC;QACzE;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B;;AAGA,IAAA,eAAe,CAAC,GAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C;AAEA,IAAA,oBAAoB,CAAC,GAAiB,EAAE,QAA2B,EAAE,KAAK,GAAG,CAAC,EAAA;AAC5E,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ;AAC9D,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACnC;AAEA,IAAA,eAAe,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAA;AACtC,QAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,EAAE;IAC5B;AAEA,IAAA,kBAAkB,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;IAC1E;AAEA,IAAA,kBAAkB,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;AAC9C,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG;IAC9E;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB;AAAE,YAAA,OAAO,IAAI;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI;IAC7F;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACnC;AAEQ,IAAA,uBAAuB,CAAC,MAA2B,EAAA;QACzD,IAAI,MAAM,YAAY,WAAW;AAAE,YAAA,OAAO,MAAM;AAChD,QAAA,MAAM,MAAM,GAAI,MAA6C,EAAE,aAAa;QAC5E,OAAO,MAAM,YAAY,WAAW,GAAG,MAAM,GAAG,IAAI;IACtD;IAEA,gBAAgB,CAAC,KAAa,EAAE,MAA2B,EAAA;AACzD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AAC5E,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE;AACtC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAClC;aAAO;YACL,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAClE;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QACrE,IAAI,GAAG,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE;AAC7C,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;YACpC;iBAAO;gBACL,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;AACtC,oBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7B,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACvC;AACA,gBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YACrC;QACF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,eAAe,CAAC,GAAiB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG;AAClD,aAAA,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AAC7B,aAAA,MAAM,CAAC,CAAC,KAAK,KAAI;YAChB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC5D,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK;AACjE,YAAA,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE;AACjD,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AACjE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AAE7D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;AAAO,aAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACzF;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACrE;YACA,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;aAAO;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,KAC5B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ;AACvC,sBAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI;AACzE,sBAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAC1D;AACF,aAAA,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;QAEA,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,eAAe,CAAC,GAAiB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAe,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,oBAAoB,CAAC,GAAiB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;AACxD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEzB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6C;QACjE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3E;QACF;QACA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3I,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAClD,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,2BAA2B,CAAC,GAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClE,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5D,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5D,QAAA,OAAO,OAAO;IAChB;IAEA,uBAAuB,CAAC,GAAiB,EAAE,KAAc,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9F,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,SAAS;AAC3E,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QAChE,OAAO,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IACvC;AAEQ,IAAA,qBAAqB,CAAC,KAAc,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,wBAAwB,CAAC,GAAiB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;YACpD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;QAC1G;AACA,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,0BAA0B,CAAC,GAAiB,EAAA;QAC1C,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,MAAM;IAClD;AAEA,IAAA,uBAAuB,CAAC,GAAiB,EAAA;QACvC,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM;IAC9C;IAEA,sBAAsB,CAAC,GAAiB,EAAE,KAAc,EAAA;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC7C,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;IACpG;IAEA,wBAAwB,CAAC,GAAiB,EAAE,KAAc,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,GAAG;AAChG,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,GAAG;AACpE,cAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC;IAC1B;AAEA,IAAA,0BAA0B,CAAC,GAAiB,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;IACnF;AAEA,IAAA,sBAAsB,CAAC,GAAiB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG;AACnE,cAAE;AACF,cAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;IAClE;AAEA,IAAA,wBAAwB,CAAC,GAAiB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,YAAY;IAC7E;AAEA,IAAA,gCAAgC,CAAC,GAAiB,EAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;AAC/C,QAAA,OAAO,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,KAAK;IACzC;AAEQ,IAAA,2BAA2B,CAAC,GAAiB,EAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAe,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;AACzD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAkC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC/G,QAAA,IACE,MAAM,CAAC,KAAK,KAAK,KAAK;YACtB,aAAa,CAAC,MAAM,KAAK,CAAC;AAC1B,YAAA,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;AACvD,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACxD,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,EAC3D;AACA,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;AAC7G,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;IAChD;IAEA,6BAA6B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;IAC/F;IAEA,8BAA8B,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;IACjG;IAEA,6BAA6B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,UAAU,KAAK,KAAK;IAC7D;AAEA,IAAA,yBAAyB,CAAC,GAAiB,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,wBAAwB,CAAC,GAAiB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AACjE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAE7D,IAAI,cAAc,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;YAC5C,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;AAAO,aAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7B,oBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE;AACjC,iBAAA;AACF,aAAA,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;aAAO;YACL,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACtG,aAAA,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC;QAEA,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,aAAa,CAAC,GAAiB,EAAE,MAAsB,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,QAAA,MAAM,UAAU,GAAG,MAAM,KAAK;cAC1B,CAAC,MAAK;gBACJ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACvC,gBAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;AAChE,YAAA,CAAC;AACH,cAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC/B,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACjF,QAAA,MAAM,kBAAkB,GAAG,CAAC,MAAoC,KAAI;YAClE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,eAAe,EAAE;AAC/C,QAAA,CAAC;QACD,OAAO;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACvC,YAAA,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACrC,GAAG;YACH,KAAK;YACL,UAAU;YACV,MAAM,EAAE,aAAa,EAAE;AACvB,YAAA,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AACxC,YAAA,WAAW,EAAE,CAAC,QAAQ,KAAI;gBACxB,IAAI,MAAM,KAAK,MAAM;oBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,QAAQ;qBAC/D;AACH,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACxE,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC1B;YACF,CAAC;AACD,YAAA,QAAQ,EAAE,CAAC,KAAK,KAAI;gBAClB,IAAI,MAAM,KAAK,MAAM;oBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK;qBACzD;AACH,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAClE,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC1B;YACF,CAAC;YACD,KAAK,EAAE,MAAM,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC1F,YAAA,YAAY,EAAE,kBAAkB;AAChC,YAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;gBAClC,kBAAkB,CAChB,iBAAiB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACzD,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE;AACrD,iBAAA,CAAC,CACH;YACH;SACD;IACH;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;YAC7C;YACA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;AAC5E,kBAAE,CAAC,GAAG,IAAI,CAAC,QAAQ;kBACjB,CAAC,MAAK;oBACN,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI;oBACvC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;wBACjB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC;wBACzC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC;wBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1C,wBAAA,OAAO,SAAS,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG;AACzC,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,IAAI;gBACb,CAAC,GAAG;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;QACA,OAAO,IAAI,CAAC,WAAW;IACzB;;;IAIA,aAAa,GAAA;AACX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;IAC5F;;IAGA,WAAW,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AACzD,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACvC,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,KAAK;QACpD;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;IAC3B;;IAGA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,OAAO,IAAI,CAAC,UAAU;YACxB;AACA,YAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI;AAC5E,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,OAAO,IAAI,CAAC,UAAU;YACxB;YACA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AAClD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;YAC/B;iBAAO;AACL,gBAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;AAC7C,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YACnE;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;QACA,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,CAAC,gBAAgB,EAAE;QACvB,OAAO,IAAI,CAAC,eAAe;IAC7B;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;IACnC;IAEQ,4BAA4B,GAAA;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,KAAK;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IACrG;AAEQ,IAAA,yBAAyB,CAAC,IAAa,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE;AAClF,QAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;AACvB,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;AACpD,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe;AAChD,YAAA,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAe,CAAC;YAC9G,IAAI;AACL,SAAA,CAAC;IACJ;IAEQ,wBAAwB,GAAA;QAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;IAC5C;AAEQ,IAAA,eAAe,CAAC,IAAS,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;YACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACvC,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE;QAChE;QACA,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IACvC;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B;kBAC9C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;kBACtD,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,EAAE;sBAC7C,IAAI,CAAC;AACP,sBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzG,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,UAAU,MAAM;AACxD,gBAAA,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;gBACnC,GAAG;gBACH,UAAU;AACV,gBAAA,KAAK,EAAE,CAAC;AACT,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE;AACvC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC5G,QAAA,MAAM,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtF,QAAA,MAAM,OAAO,GAAG,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc;QAC9E,IAAI,iBAAiB,GAAG,CAAC;QACzB,IAAI,UAAU,GAAG,CAAC;QAClB,MAAM,QAAQ,GAAQ,EAAE;AACxB,QAAA,MAAM,SAAS,GAAG,CAAC,KAAkC,EAAE,KAAa,KAA+B;YACjG,MAAM,YAAY,GAA8B,EAAE;AAElD,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;gBACzB,MAAM,UAAU,GAAG,iBAAiB;AACpC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;gBACjE,MAAM,SAAS,GAA8B,EAAE;gBAE/C,IAAI,CAAC,SAAS,EAAE;AACd,oBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC5B,4BAAA,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;4BAC/C;wBACF;wBAEA,MAAM,MAAM,GAAG,iBAAiB,IAAI,SAAS,IAAI,iBAAiB,GAAG,OAAO;wBAC5E,IAAI,MAAM,EAAE;AACV,4BAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;4BACnB,SAAS,CAAC,IAAI,CAAC;AACb,gCAAA,IAAI,EAAE,MAAM;gCACZ,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;AACpC,gCAAA,GAAG,EAAE,IAAI;gCACT,UAAU;gCACV,KAAK,EAAE,KAAK,GAAG,CAAC;AACjB,6BAAA,CAAC;4BACF,UAAU,IAAI,CAAC;wBACjB;wBACA,iBAAiB,IAAI,CAAC;oBACxB;gBACF;qBAAO;AACL,oBAAA,iBAAiB,IAAI,KAAK,CAAC,KAAK;gBAClC;AAEA,gBAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC,KAAK;gBACzC,IAAI,QAAQ,GAAG,SAAS,IAAI,UAAU,GAAG,OAAO,EAAE;oBAChD,YAAY,CAAC,IAAI,CAAC;AAChB,wBAAA,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;wBAC/C,KAAK;wBACL,SAAS;wBACT,KAAK;AACL,wBAAA,UAAU,EAAE,UAAU;AACvB,qBAAA,CAAC;oBACF,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC/B,wBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;4BAC3B,YAAY,CAAC,IAAI,CAAC;AAChB,gCAAA,IAAI,EAAE,cAAc;AACpB,gCAAA,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA,OAAA,CAAS;gCAC3D,KAAK;gCACL,KAAK;AACL,gCAAA,UAAU,EAAE,UAAU;AACvB,6BAAA,CAAC;wBACJ;oBACF;gBACF;YACF;AAEA,YAAA,OAAO,YAAY;AACrB,QAAA,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,YAAY;AACnC,QAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IACzB;AAEQ,IAAA,wBAAwB,CAAC,IAA+B,EAAA;AAC9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE;AACvC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAC7C;AAAO,iBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE;gBACtC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YACnD;QACF;IACF;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACvC,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,IAAI;QACnD;QACA,OAAO,IAAI,CAAC,MAAM;IACpB;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;AACrD,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAClH;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;IACxD;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAChE;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,SAAA,CAAC;IACJ;IAEA,gBAAgB,GAAA;AACd,QAAA,QACE,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,IAAI,6BAA6B;IAEvC;AAEA,IAAA,YAAY,CAAC,SAAmC,EAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,IAAI,QAAQ;AAC7D,QAAA,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM;IACtD;IAEA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,KAAK,KAAK;IAC/C;IAEA,kBAAkB,GAAA;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS;AACnD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;IACzD;IAEA,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,EAAE;IAClD;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,KAAK,KAAK;IACvD;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,IAAI,SAAS;IAClD;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ;IACxB;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAAE,YAAA,OAAO,KAAK;QAC/C,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,KAAK,KAAK;IACrD;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,GAAG,GAA0B;AACjC,YAAA,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK;YACL,SAAS;SACV;QACD,OAAO,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE;IACnC;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC;AACzC,cAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;cAC5D,EAAE;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;YAClD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI;AACJ,YAAA,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAC7D,YAAA,YAAY,EAAE,IAAI,CAAC,wBAAwB,EAAE;SAC9C;IACH;IAEQ,mBAAmB,GAAA;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC7C;AAEQ,IAAA,iBAAiB,CAAC,KAA0C,EAAA;AAClE,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD;QAEA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C;aAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpD;aAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5E;QAEA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,IAAI,SAAS,CAAC;AACxC,cAAE,EAAE,MAAM,EAAE,SAAS,CAAC,KAAiC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS;cACrF,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;AAEnC,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC;YACzD,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AAEA,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE;AAC5C,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACzE;QAEA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,uBAAuB,EAAE;IAChC;;AAGA,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,8BAA8B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzF;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,sBAAsB,GAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,UAAU,IAAI,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE;YACtC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI;QACrD;QACA,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE;AACpE,YAAA,IACE,IAAI,CAAC,qBAAqB,CAAC,MAAM;gBACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM;gBACjC,IAAI,CAAC,8BAA8B,CAAC,MAAM;gBAC1C,IAAI,CAAC,2BAA2B,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,2BAA2B,KAAK,CAAC,EACtC;AACA,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC;AACpC,gBAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC;AACpC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB;YACA;QACF;QAEA,IAAI,IAAI,CAAC,qBAAqB;YAAE;AAChC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAEjC,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,MAAM,GAAG,GAAG,OAAO,qBAAqB,KAAK;AAC3C,kBAAE;kBACA,CAAC,QAA8B,KAAK,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAElF,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;gBAClC,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;QACjD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAmB,uBAAuB,CAAC;QACnF,IAAI,CAAC,8BAA8B,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAsB,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACnI,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;AAAE,gBAAA,OAAO,QAAQ;YAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAC/C,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;AACxD,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACrD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAC5D,QAAQ,CAAC,gBAAgB,CAAsB,iEAAiE,CAAC,EACjH,IAAI,CAAC,oBAAoB,CAC1B;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAC5D,QAAQ,CAAC,gBAAgB,CAAsB,wEAAwE,CAAC,EACxH,IAAI,CAAC,0BAA0B,CAChC;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB;cAC7C,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,YAAY,CAAC,GAAG;cACjE,EAAE;AACN,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB;AAC/C,cAAE,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,kBAAkB,EAAE,YAAY,CAAC,MAAM;cACnF,EAAE;QACN,MAAM,wBAAwB,GAAG;aAC9B,GAAG,CAAC,CAAC,GAAG,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;aAClF,MAAM,CAAC,OAAO,CAAiF;AAElG,QAAA,IAAI,CAAC,qBAAqB,GAAG,aAAa;AAC1C,QAAA,IAAI,CAAC,qBAAqB,GAAG,aAAa;AAC1C,QAAA,IAAI,CAAC,2BAA2B,GAAG,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC;AAChF,QAAA,IAAI,CAAC,2BAA2B,GAAG,aAAa,CAAC;cAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC;cAC9G,CAAC;AACL,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,8BAA8B,CACpC,KAAsC,EACtC,MAAsB,EAAA;QAEtB,MAAM,YAAY,GAAgD,EAAE;QACpE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACrD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACzC,YAAY,CAAC,IAAI,CAAC;gBAChB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK;gBAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG;AACJ,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,YAAY;IACrB;IAEQ,uBAAuB,CAC7B,YAAoF,EACpF,WAAmB,EAAA;QAEnB,MAAM,MAAM,GAAmC,EAAE;QACjD,IAAI,WAAW,GAA0C,IAAI;QAC7D,IAAI,SAAS,GAAG,WAAW;AAE3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACtD,YAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,KAC5C,WAAW,CAAC,KAAK,KAAK,KAAK;iBAC1B,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAC3G,gBAAA,WAAW,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAClC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAEjE,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACtB,YAAA,WAAW,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE;AAC9D,YAAA,SAAS,IAAI,KAAK,CAAC,MAAM;QAC3B;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,uBAAuB,CAC7B,aAA6C,EAC7C,YAA0F,EAC1F,cAAsB,EAAA;QAEtB,MAAM,MAAM,GAAyC,EAAE;AAEvD,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AACxC,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,YAAY,CAAC,GAAG,SAAS;AAC9C,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK,SAAS,CAAC;AAC/E,YAAA,IAAI,CAAC,KAAK;gBAAE;YACZ,IAAI,KAAK,CAAC,GAAG,GAAG,cAAc,GAAG,GAAG,EAAE;AACpC,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxB;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,sBAAsB,CAC5B,YAAyD,EAAA;AAEzD,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB;IAC5D;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB;IAC5D;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC;AACnD,QAAA,MAAM,QAAQ,GAAK,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,SAAS,GAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC;AACvD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY;IACtF;AAEA,IAAA,cAAc,CAAC,GAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI;IAC5C;AAEA,IAAA,gBAAgB,CAAC,GAAiB,EAAA;QAChC,IAAI,GAAG,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,OAAO;QACrD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;AAAE,YAAA,OAAO,OAAO;AACjE,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;AACtC,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,gBAAgB,CAAC,GAAiB,EAAA;QACxC,IAAI,GAAG,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACvC,IAAI,IAAI,KAAK,OAAO;AAAE,YAAA,OAAO,SAAS;QACtC,IAAI,IAAI,KAAK,KAAK;AAAE,YAAA,OAAO,UAAU;AACrC,QAAA,OAAO,QAAQ;IACjB;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,GAAG;AAC7D,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,IAAI,QAAQ;YAAE,OAAO,QAAQ,KAAK,KAAK;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3F,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,YAAY,CAAC,WAAW,EAAE,KAAK,KAAK;QAC7D,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK;IACnD;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACpE;IAEA,8BAA8B,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;IAChC;AAEA,IAAA,kBAAkB,CAAC,IAAuB,EAAA;QACxC,QAAQ,IAAI;AACV,YAAA,KAAK,WAAW,EAAE,OAAO,mBAAmB;AAC5C,YAAA,KAAK,QAAQ,EAAE,OAAO,gBAAgB;AACtC,YAAA,KAAK,eAAe,EAAE,OAAO,uBAAuB;AACpD,YAAA,KAAK,SAAS,EAAE,OAAO,gBAAgB;;IAE3C;IAEA,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ;IAC7C;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,UAAU;IAC/C;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS;IAC9C;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC;IAC7F;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC/F;IAEA,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;IACvD;IAEA,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAAE,YAAA,OAAO,KAAK;QACzC,QACE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC5C,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,EAAE;IAE9B;AAEA,IAAA,IAAI,uBAAuB,GAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,IAAI,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAO,GAAI,EAAQ;QAC5G,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnG;IAEA,gBAAgB,CAAC,UAAkB,EAAE,GAAiB,EAAA;QACpD,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACvD,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK;QAC3F;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU;IACzC;AAEA,IAAA,WAAW,CAAC,EAAc,EAAE,UAAkB,EAAE,GAAiB,EAAA;QAC/D,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;IAC9C;AAEA,IAAA,eAAe,CAAC,EAAc,EAAE,UAAkB,EAAE,GAAiB,EAAA;AACnE,QAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE;QACrB,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;IAC9C;AAEQ,IAAA,kBAAkB,CAAC,EAAc,EAAE,UAAkB,EAAE,GAAiB,EAAA;QAC9E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;YAAE;AAC3C,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;AACxB,QAAA,MAAM,EAAE,GAAG,MAAM,YAAY;AAC3B,cAAE;cACA,MAAM,YAAY;kBAChB,MAAM,CAAC;kBACP,IAAI;AACV,QAAA,IAAI,EAAE,EAAE,OAAO,CAAC,6DAA6D,CAAC;YAAE;AAChF,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC;YAAE;QAC5C,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,KAAe,CAAC;IACvD;AAEA,IAAA,aAAa,CAAC,EAAiB,EAAE,UAAkB,EAAE,GAAiB,EAAE,QAAgB,EAAA;AACtF,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC;YAAE;AACzE,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE;YACtB,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC3B;QACF;AACA,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE;YACvB,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;YAAE;QAC3E,EAAE,CAAC,cAAc,EAAE;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM;AACvC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aAC7B,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;QAChF,IAAI,UAAU,GAAG,CAAC;YAAE;AAEpB,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC,KAAe;QAC3C,MAAM,eAAe,GAAG,UAAU;QAElC,IAAI,cAAc,GAAG,UAAU;QAC/B,IAAI,YAAY,GAAG,eAAe;AAElC,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,WAAW,EAAE;AAC1B,YAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAe;QACpF;AAAO,aAAA,IAAI,EAAE,CAAC,GAAG,KAAK,YAAY,EAAE;YAClC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAe;QAC1G;AAAO,aAAA,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE;YAC/B,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;QAC9C;AAAO,aAAA,IAAI,EAAE,CAAC,GAAG,KAAK,WAAW,EAAE;AACjC,YAAA,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;QAClE;AAEA,QAAA,IAAI,cAAc,KAAK,UAAU,IAAI,YAAY,KAAK,eAAe;YAAE;AAEvE,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAAE;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC;IACpD;IAEA,eAAe,CAAC,UAAkB,EAAE,KAAa,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;AAC5E,QAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,WAAW,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;QACvD;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/D;AAEQ,IAAA,iBAAiB,CAAC,cAAuB,EAAA;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;QACvC,MAAM,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC,YAAY,CAAuB;AACpE,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,wCAAA,EAA2C,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA,EAAA,CAAI,CAAC;YAC1H,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,IAAI;gBACjB;YACF;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,2FAA2F,CAAC;AAC1I,QAAA,KAAK,EAAE,KAAK,IAAI;IAClB;IAEA,gBAAgB,CAAC,KAAK,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AACjF,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACxC,OAAO,EAAE,aAAa,EAAE;QACxB,OAAO,EAAE,sBAAsB,EAAE;QACjC,IAAI,OAAO,EAAE,OAAO;AAAE,YAAA,OAAO,KAAK;AAElC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3F,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAEnD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAChC;QACA,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YAAE;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC9B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,2BAA2B,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACpC,aAAA,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7D,QAAA,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;IACzD;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,EAAE;QAChD,IAAI,KAAK,IAAI,IAAI;YAAE;AACnB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACvB;IAEA,kBAAkB,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;aAClB,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;aACjE,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC;AAC5B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnD;AAEA,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACjC,IAAI,CAAC,oBAAoB,GAAI,QAAQ,CAAC,aAA6B,IAAI,IAAI;AAC3E,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACtE;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,oBAAoB,GAAI,QAAQ,CAAC,aAA6B,IAAI,IAAI;AAC3E,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC3C,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5E,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACtE;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;AAC5B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;AAC1C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAE/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnE,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;AACxD,YAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B;AAAO,aAAA,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;AAC9C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB;AAC9C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzF,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC;AAChE,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;YACzD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QAC5B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YACxD,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5F;AAAO,aAAA,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;AAC9C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACpE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACxD;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,QAAA,MAAM,EAAE,KAAK,IAAI;IACnB;IAEQ,6BAA6B,GAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,yBAAyB;YAAE;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;QACvC,MAAM,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC,8BAA8B,CAAuB;AACxF,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAc,iDAAiD,CAAC;AACtG,QAAA,SAAS,EAAE,KAAK,IAAI;AACpB,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;IACvC;IAEA,mBAAmB,GAAA;QACjB,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE;AAAE,YAAA,OAAO,KAAK;QACxD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAC7E,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACjE,IAAI,IAAI,CAAC,iBAAiB;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAC7E,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,WAAW,CAAC,GAAiB,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,GAAG,CAAC;AAAE,YAAA,OAAO,QAAQ;AACrD,QAAA,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;IACvB;AAEA,IAAA,iBAAiB,CAAC,GAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QACpG,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC;IAEA,iBAAiB,CAAC,KAAiB,EAAE,GAAiB,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;YAAE;QAClC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG;YACnB,KAAK,EAAE,GAAG,CAAC,KAAe;YAC1B,MAAM,EAAE,KAAK,CAAC,OAAO;AACrB,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;SAClC;QACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC7D;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,aAAc,CAAC,KAAK,CAAC;AACzF,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ;AACjD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,KAAK,CAAC;QAC9E,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI;QAC1D,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAGA,iBAAiB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC;QAC9D,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAAE;AAC/C,QAAA,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC;IAClE;IAEA,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE;YAAE;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACtE,IAAI,SAAS,IAAI,CAAC;YAAE;AAEpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,YAAY,IAAI,CAAC;YAAE;AAEvB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,YAAY,IAAI,SAAS,CAAC;QAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACpF,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,SAAS,GAAG,SAAS,GAAG,KAAK;QACjC,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,OAAO,SAAS,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,YAAA,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM;AAChC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC9D,YAAA,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO;AACrB,gBAAA,SAAS,GAAG,SAAS,GAAG,KAAK;YAC/B;AACA,YAAA,IAAI,EAAE;QACR;QAEA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC1B,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,gBAAgB,CAAC,GAAiB,EAAE,KAAa,EAAA;AACvD,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,IAAI,EAAE;AACvC,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,GAAG;YAAE,IAAI,GAAG,GAAG;AAC1B,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG;YAAE,IAAI,GAAG,GAAG;AACzC,QAAA,OAAO,IAAI;IACb;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,EAAE,GACN,IAAI,CAAC,YAAY,EAAE,aAAa;YAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAwB;AACnF,QAAA,OAAO,EAAE,EAAE,WAAW,IAAI,CAAC;IAC7B;IAEQ,kBAAkB,GAAA;QACxB,QACE,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEpG;AAEQ,IAAA,wBAAwB,CAAC,gBAAyB,EAAA;AACxD,QAAA,MAAM,IAAI,GAA2B,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC7F,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;YACjC,IAAI,gBAAgB,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE;gBACxC,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK;YACjE;QACF;QACA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAe,CAAC,CAAC;QAC9E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE;AAAE,YAAA,OAAO,IAAI;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7F,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,aAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACrE,QAAA,MAAM,KAAK,GAAG,YAAY,GAAG,aAAa;QAC1C,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;IACjC;AAEA,IAAA,mBAAmB,CAAC,IAA2C,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE;AAAE,YAAA,OAAO,IAAI;QACvD,IAAI,IAAI,KAAK,WAAW;AAAE,YAAA,OAAO,CAAC;QAClC,IAAI,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC;QACnG,IAAI,MAAM,GAAG,CAAC;QACd,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAC9E,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAClE,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,iBAAiB,CAAC,GAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;AACvD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;aACpB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;AACzC,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,OAAO;AACxD,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,SAAS;IAC/C;AAEA,IAAA,eAAe,CAAC,GAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,KAAK;AAAE,YAAA,OAAO,IAAI;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9C,OAAO,IAAI,CAAC;AACT,aAAA,KAAK,CAAC,KAAK,GAAG,CAAC;AACf,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,KAAK;AACtD,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D;AAEA,IAAA,iBAAiB,CAAC,GAAiB,EAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACvC,OAAO,IAAI,GAAG,iBAAiB,IAAI,CAAA,EAAG,GAAG,CAAC,MAAM,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,IAAI;IACjG;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO,IAAI,CAAC,mBAAmB;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;AACpC,QAAA,MAAM,GAAG,GAAa,CAAC,OAAO,CAAC;QAC/B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QAC/C,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC7C,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AACrD,QAAA,IAAI,CAAC,mBAAmB,GAAG,GAAG;AAC9B,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,wBAAwB,GAAA;QAC1B,IAAI,IAAI,CAAC,6BAA6B;YAAE,OAAO,IAAI,CAAC,6BAA6B;AACjF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU;AACvC,QAAA,MAAM,OAAO,GACX,CAAC,KAAK;AACJ,cAAE;AACF,cAAE,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;kBAClB,CAAC,kBAAkB;AACrB,kBAAE,CAAC,CAAA,iBAAA,EAAoB,CAAC,CAAA,CAAE,CAAC;AACjC,QAAA,IAAI,CAAC,6BAA6B,GAAG,OAAO;AAC5C,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,aAAa;IACpD;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAClD,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;AACnD,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO;IACrC;IAEA,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,IAAI,MAAM,MAAM,OAAO;IAC3F;AAEA,IAAA,eAAe,CAAC,GAAiB,EAAA;AAC/B,QAAA,OAAO,GAAG,CAAC,YAAY,IAAI,OAAO;IACpC;AAEA,IAAA,qBAAqB,CAAC,KAAmB,EAAA;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;QACxF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAC5C,QAAA,OAAO,OAAO;IAChB;IAEA,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,sBAAsB;YAAE,OAAO,IAAI,CAAC,sBAAsB;QACnE,MAAM,KAAK,GAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;QACxD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,sBAAsB;IACpC;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IAC1E;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAChD;IAEA,YAAY,CAAC,IAAI,GAAG,IAAI,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,eAAe,CAAC,KAAa,EAAE,MAAe,EAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,qBAAqB,CAAC,UAAmC,EAAA;AACvD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe;AACjC,YAAA,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;gBACnC,GAAG,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;YACjC;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY;IAC1C;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;IACjC;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACpC;IAEA,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;IACtC;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;AAClC,QAAA,OAAO,GAAG,CAAC,WAAW,IAAI,IAAI;IAChC;AAEA,IAAA,kBAAkB,CAAC,GAAiB,EAAA;AAClC,QAAA,OAAO,GAAG,CAAC,WAAW,IAAI,IAAI;IAChC;AAEA,IAAA,gBAAgB,CAAC,GAAM,EAAE,QAAgB,EAAE,GAAiB,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS;QAC/B,IAAI,OAAO,SAAS,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI;QAC5E,OAAO,SAAS,IAAI,IAAI;IAC1B;AAEA,IAAA,gBAAgB,CAAC,GAAM,EAAE,QAAgB,EAAE,GAAiB,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS;QAC/B,IAAI,OAAO,SAAS,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI;QAC5E,OAAO,SAAS,IAAI,IAAI;IAC1B;IAEA,eAAe,CAAC,GAAM,EAAE,QAAgB,EAAA;AACtC,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI;AACpF,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI;IAC9B;IAEA,eAAe,CAAC,GAAM,EAAE,QAAgB,EAAA;AACtC,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI;AACpF,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI;IAC9B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;YACvB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,GAAiB,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE;IACnD;AAEA,IAAA,WAAW,CAAC,GAAiB,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK;AACnB,QAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE;IAC1C;IAEA,SAAS,CAAC,GAAM,EAAE,GAAiB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS;QACzB,IAAI,OAAO,GAAG,KAAK,UAAU;AAAE,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;QACpD,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,GAAG;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;AAC/C,QAAA,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;IAC7D;AAEA,IAAA,qBAAqB,CAAC,GAAiB,EAAA;QACrC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;AAChE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,GAAiB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IAC7B;AAEA,IAAA,sBAAsB,CAAC,GAAiB,EAAA;QACtC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE;AACjE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,qBAAqB,CAAC,GAAiB,EAAA;QACrC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;AAChE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,uBAAuB,CAAC,GAAiB,EAAA;QACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;AAClE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAAC,GAAiB,EAAA;QACpC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;AAC/D,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,uBAAuB,CAAC,GAAiB,EAAA;QACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;AAClE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IACpF;AAEA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IACtF;IAEA,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC9C;AAEA,IAAA,mBAAmB,CAAC,KAAc,EAAA;AAChC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;IACnF;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACzC;IAEA,oBAAoB,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;AACzB,QAAA,MAAM,MAAM,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACxD,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;AACnE,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACpB,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;AAChB,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACrB,SAAA,CAAC;IACJ;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;IAC1C;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;QACtC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE,KAAK,IAAI,CAAC;QAC1C,IAAI,IAAI,CAAC,YAAY;YAAE,KAAK,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,iBAAiB;YAAE,KAAK,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAAE,KAAK,IAAI,CAAC;AACxC,QAAA,OAAO,KAAK;IACd;IAEA,aAAa,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC9C,QACE,IAAI,CAAC,kBAAkB;AACvB,YAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,KAAK,QAAQ;AACvC,YAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,KAAK,QAAQ;IAE3C;IAEA,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE;AAAE,YAAA,OAAO,IAAI;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxD;IAEA,SAAS,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;AACjD,YAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,cAAc,CAAC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACtD;IAEA,eAAe,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;QAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC3C;AAEA,IAAA,iBAAiB,CACf,EAAiB,EACjB,QAAgB,EAChB,QAAgB,EAChB,GAAiB,EAAA;QAEjB,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;QAC9B,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;YACxC;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG;AAClB,QAAA,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACtE,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClC;QACF;QAEA,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE;YACzD,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,EAAE,CAAC,MAAqB,CAAC;YAC9D;QACF;AAEA,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;YACrC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE;gBACxC,EAAE,CAAC,cAAc,EAAE;gBACnB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAe,CAAC;YACrD;YACA;QACF;AAEA,QAAA,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;YACrC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE;gBACxC,EAAE,CAAC,cAAc,EAAE;gBACnB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAe,CAAC;YACrD;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,MAAM,KAAK,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,CAAC,EAAE;YAClF,EAAE,CAAC,cAAc,EAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7E,YAAA,MAAM,QAAQ,GAAG,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACtG,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC7B;YACA;QACF;QAEA,IAAI,OAAO,GAAG,QAAQ;QACtB,IAAI,OAAO,GAAG,QAAQ;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QAElC,IAAI,GAAG,KAAK,YAAY;AAAE,YAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;aACnE,IAAI,GAAG,KAAK,WAAW;YAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;aAC5D,IAAI,GAAG,KAAK,WAAW;AAAE,YAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;aACvE,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;aAC1D,IAAI,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;YACrC,EAAE,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,CAAC;QACb;aAAO,IAAI,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,OAAO,EAAE;YACtC,EAAE,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QACrC;AAAO,aAAA,IAAI,GAAG,KAAK,MAAM,EAAE;YACzB,EAAE,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,CAAC;QACb;AAAO,aAAA,IAAI,GAAG,KAAK,KAAK,EAAE;YACxB,EAAE,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QACrC;aAAO;YACL;QACF;QAEA,EAAE,CAAC,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAClC;IAEQ,0BAA0B,CAAC,GAAiB,EAAE,MAAmB,EAAA;QACvE,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE;QACrB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAe,EAAE,MAAM,CAAC;IACvD;AAEQ,IAAA,2BAA2B,CAAC,GAAiB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;IACnF;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;QACvC,MAAM,IAAI,GAAG,IAAI,EAAE,gBAAgB,CAAC,wBAAwB,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAA4B;AAC5D,QAAA,MAAM,EAAE,GAAG,GAAG,EAAE,aAAa,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAA,EAAA,CAAI,CAAuB;AAC5F,QAAA,EAAE,EAAE,KAAK,IAAI;IACf;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,aAAa,CAAC,GAA4B,EAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AAC9B,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,YAAA,OAAO,GAAG;AACzC,QAAA,OAAO,2BAA2B,CAAC,GAAG,CAAC;IACzC;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACtE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;IACF;AAEA,IAAA,WAAW,CAAC,KAA+B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7E,YAAA,OAAO,MAAM;QACf;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;IACnE;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;eAClC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK;AACzB,kBAAE;AACF,kBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK;AACxB,sBAAE;sBACA,UAAU;cACd,UAAU;AACd,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACvB,YAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAChF;AACA,QAAA,OAAO,CAAA,QAAA,EAAW,MAAM,CAAA,eAAA,EAAkB,KAAK,GAAG;IACpD;AAEA,IAAA,eAAe,CAAC,IAAmB,EAAA;AACjC,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACnE;QACA,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;IACvE;AACQ,IAAA,mBAAmB,CAAC,IAAS,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QACjE,MAAM,MAAM,GAAQ,EAAE;QACtB,MAAM,IAAI,GAAQ,EAAE;AAEpB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,YAAA,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B;;;AAKQ,IAAA,kBAAkB,CAAC,CAAS,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B;IAEQ,iBAAiB,GAAA;QACvB,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;YACpC,IAAI,CAAC,CAAC,CAAC,UAAU;gBAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAe,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC5G,YAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;QAC7E;QACA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QAEtC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YAC1C,IAAI,IAAI,CAAC,iBAAiB;gBAAE;AAC9B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACrD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;AAE4C,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,UAAU;AACN,IAAA,cAAc;AACZ,IAAA,UAAU;AAEpD,IAAA,qBAAqB;AAErB,IAAA,eAAe;AAC0B,IAAA,WAAW;;IAGrD,QAAQ,GAAyC,EAAE;IACnD,QAAQ,GAA2C,EAAE;IACrD,UAAU,GAAyC,EAAE;IACrD,cAAc,GAA6C,EAAE;IAC7D,SAAS,GAAoC,IAAI;IACjD,qBAAqB,GAAqE,EAAE;IAC5F,eAAe,GAA+D,EAAE;IAC/E,wBAAwB,GAAG,KAAK;AAEhC,IAAA,QAAQ,CACd,KAAqD,EAAA;AAErD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AAC7B,cAAE;cACA,KAAK,YAAY;AACjB,kBAAE,KAAK,CAAC,OAAO;kBACb,EAAE;QACR,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAuB,CAAC;IACjF;IAEA,MAAM,MAAM,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO;YAAE;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5B,oBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,QAAQ;AACjD,oBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC7B,oBAAA,IAAI,EAAE,IAAsC;AAC5C,oBAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;AAC7B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC9B,oBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,QAAQ;oBACjD,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,IAAI,QAAQ;AAC1D,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;QACF;gBAAU;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAAE;IACtC;AAEQ,IAAA,MAAM,cAAc,GAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,SAAS;AACnD,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AACvF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;YAChC,OAAO,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E;AACA,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,qBAAqB;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACzG,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;QACrC;;QAEA,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,kBAAkB,GAAA;QAChB,MAAM,OAAO,GAAG,MAAK;YACnB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,QAAQ,GAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAChD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YACxD,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI;YAChD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACtE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAC1D,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;YAC7C;AACF,QAAA,CAAC;AACD,QAAA,OAAO,EAAE;QACT,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC5C,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEA,IAAA,WAAW,CAAC,EAAiB,EAAA;AAC3B,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;AACA,QAAA,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;AACnD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,wBAAwB,EAAE;QACjC;AACA,QAAA,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;YACjB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;AACA,QAAA,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;YACd,IAAI,CAAC,oBAAoB,EAAE;QAC7B;QACA,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;YACjC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;YAC7C;YACA,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,uBAAuB,EAAE;QAChC;QACA,IAAI,EAAE,CAAC,kBAAkB,CAAC;YAAE,IAAI,CAAC,oBAAoB,EAAE;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,iBAAiB,EAAE;AAC5C,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE;YAC9H,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;QACA,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;AAC5E,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;QACA,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC9B,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,QAAQ,CAAC,QAAgB,EAAE,GAAM,EAAA;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE;IAC9C;IAEQ,gBAAgB,GAAA;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrG;;IAGA,eAAe,CAAC,GAA+B,EAAE,OAA4B,EAAA;AAC3E,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B;AACA,QAAA,IAAI,OAAO,EAAE,IAAI,KAAK,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACjC,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB;IACpD;AAEA,IAAA,cAAc,CAAC,GAAiB,EAAE,GAAM,EAAE,KAAc,EAAA;AACtD,QAAA,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;AACvE,QAAA,OAAO,GAAG,CAAC,QAAQ,IAAI,IAAI;IAC7B;IAEA,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YACjB,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,CAAC,IAAI,CAAC,SAAS;YACf,IAAI,CAAC,YAAY,IAAI,IAAI;YACzB,CAAC,IAAI,CAAC,iBAAiB;IAC3B;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAAE;AACvC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;AAG7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;AAC5E,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;AAErC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE;AAE1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnE,QAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;AACxD,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;QAC7D,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5F;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACxB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;QAE9C,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1D;AAEA,IAAA,QAAQ,CAAC,CAAS,EAAA;QAChB,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAC/C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;AAEtC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;AAE3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEnD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;AAClB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGA,IAAA,gBAAgB,CAAC,GAAiB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACjE;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;IACvD;AAEA,IAAA,YAAY,CAAC,GAAiB,EAC5B,WAAkC,EAClC,YAA+C,EAAA;AAE/C,QAAA,IAAI,CAAC,WAAW;YAAE;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;QAC5B,IAAI,GAAG,GAAG,EAAE;;AAGZ,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,YAAA,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3E,YAAA,IAAI,KAAK;gBAAE,GAAG,GAAG,UAAU;QAC7B;;AAEA,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,eAAe;QACzF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,GAAG,gBAAgB;QACnH,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,GAAG,cAAc;AACrG,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK;YAAE,GAAG,GAAG,UAAU;AAErG,QAAA,IAAI,GAAG;AAAE,YAAA,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG;;AAAO,YAAA,OAAO,YAAY,CAAC,GAAG,CAAC;IACjE;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC;;AAGA,IAAA,QAAQ,GAAG,CAAC,KAAa,EAAE,GAAM,KAAI;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;AACrC,QAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,QAAQ;AAC9D,IAAA,CAAC;IAEO,WAAW,CAAC,GAAM,EAAE,QAAgB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;QAChC,IAAI,OAAO,GAAG,KAAK,UAAU;AAAE,YAAA,OAAO,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;QACxD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAqB;AACrF,QAAA,OAAO,QAAQ;IACjB;IAEQ,WAAW,CAAC,MAAoB,EAAE,QAAgB,EAAA;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;QAChC,IAAI,OAAO,GAAG,KAAK,UAAU;AAAE,YAAA,OAAO,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC;AACpE,QAAA,OAAO,QAAQ;IACjB;IAEA,gBAAgB,CAAC,GAAM,EAAE,QAAgB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,IAAI;IACtH;AAEA,IAAA,iBAAiB,CAAC,GAAM,EAAE,QAAgB,EAAE,MAAoB,EAAE,QAAgB,EAAA;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC;IACnD;AAEA,IAAA,UAAU,CAAC,KAA+B,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;AAEzB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;;YAC1E,IAAI,CAAC,IAAI,GAAG;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,GAAG;aAC3F;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClF,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QACrE,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,YAAY,GAAG,MAAM;YAClH,IAAI,CAAC,cAAc,CACjB,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACnD,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC5B,KAAK;AACN,aAAA,CAAC,CACH;QACH;IACF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;AAC5D,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvE,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACpF,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAAE;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACpF,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAGA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAC3C,KAAK,EACL,yIAAyI,CAC1I;QACD,IAAI,UAAU,EAAE;YACd;QACF;QACA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AAEvC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;;YAE3B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC7B;QACF;IACF;IAEQ,qBAAqB,CAAC,KAAiB,EAAE,QAAgB,EAAA;AAC/D,QAAA,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE;AACjF,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrD,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,IAAI,MAAM,YAAY,OAAO,EAAE;YAC7B,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;AACA,QAAA,IAAI,MAAM,YAAY,IAAI,EAAE;YAC1B,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC;QAClD;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC;IACzF;IAEA,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC3G;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,OAAO,IAAI;;QAE5C,IAAI,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO;AAC9D,QAAA,OAAO,KAAK;IACd;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE;YACd;QACF;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAClC;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,kBAAkB,EAAE;YACzB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QACpC;IACF;IAEQ,kBAAkB,GAAA;QACxB,MAAM,IAAI,GAA4C,EAAE;QACxD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1C,IAAI,IAAI,CAAC,iBAAiB;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACtD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,sBAAsB,CAAC,IAA2C,EAAA;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;AACnD,QAAA,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;IAClC;AAEA,IAAA,yBAAyB,CAAC,kBAA0B,EAAA;QAClD,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC;IAClE;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IAC1E;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;IAChC;AAEA,IAAA,YAAY,CAAC,CAAS,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,YAAY,CAAC,CAAS,EAAA;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC;aAAO;YACL,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACzB;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB;QACF;IACF;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B;IAEA,UAAU,CAAC,EAAc,EAAE,CAAS,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAAE;QACtF,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAC1B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;YAAE;AAC/C,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,MAAqB;AACnC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC;YAAE;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnB;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,IAAI,CAAC,GAAG,CAAC;YAAE;AACX,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,UAAU,CAAC,EAAmB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ;AACxE,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,SAAS,CAAC,KAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAAE;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO;YAAE;QAE1D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;AAC9E,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,SAAS;AAC9C,QAAA,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC,OAAO;QAE1C,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAElG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9B,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,MAAM,CAAC,CAAU,EAAA;QACf,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,CAAE,CAA2B,CAAC,OAAO,GAAG,KAAK;IAC/G;AAEA,IAAA,aAAa,CAAC,IAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACnB;IAEA,mBAAmB,GAAA;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU;AACzB,QAAA,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAK,CAAkC,CAAC,OAAO,KAAK,IAAI,CAAC;IACpF;IAEA,WAAW,CAAC,GAAM,EAAE,UAAkB,EAAA;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;QACnD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC;AAEA,IAAA,eAAe,CAAC,UAAkB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;;AACtD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEA,UAAU,CAAC,GAAM,EAAE,UAAkB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,gBAAgB,GAAG,UAAU;IAC1E;IAEA,SAAS,CAAC,GAAM,EAAE,UAAkB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI;QACnD,IAAI,MAAM,GAAG,CAAC;AACd,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,EAAE,GAAG,EAAE,EAAE;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACjC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC;gBAAE;AACrD,YAAA,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAC7C;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,uBAAuB,CAAC,UAAkB,EAAA;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAsB,0BAA0B,CAAC;QAC/G,MAAM,QAAQ,GAAG,IAAI,GAAG,UAAU,CAAC,EAAE,YAAY,IAAI,CAAC;AACtD,QAAA,OAAO,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe;IACvD;;AAGA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,YAAY,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU;IACzD;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,YAAY,IAAI,IAAI,CAAC,YAAY;IAC7D;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,YAAY,IAAI,IAAI,CAAC,YAAY;IAC7D;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,MAAM;IACtC;IAEA,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK;IACtE;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,iBAAiB,KAAK,UAAU;IAC9C;IAEA,mBAAmB,CAAC,GAAM,EAAE,UAAkB,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,mBAAmB;AAAE,YAAA,OAAO,KAAK;AAC3C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IACjE;IAEA,aAAa,CAAC,GAAM,EAAE,UAAkB,EAAA;AACtC,QAAA,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;QACnD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACpC;IAEA,eAAe,CAAC,UAAkB,EAAE,KAAa,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAAE;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC;YAAE;AAEvD,QAAA,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;AACzE,QAAA,MAAM,EAAE,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,GAAG,UAAU;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,UAAU;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,KAAK,SAAS;AACnD,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACpD,QAAA,MAAM,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;QAEtG,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU;YACjC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;AACzC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;AACxD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;gBACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE;AAC1C,gBAAA,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9B;YACA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,iBAAiB;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;;AAChD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,aAAa,CAAC,GAAM,EAAE,SAAiB,EAAE,QAAiB,EAAA;AAChE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;YACjC,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ;AAC9C,SAAA,CAAC;IACJ;IAEA,0BAA0B,GAAA;QACxB,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,WAAW,EAAE;YACf,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7B,gBAAA,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AACjC,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7B,gBAAA,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACjC,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,iBAAiB,GAAA;QACf,IAAI,eAAe,GAAG,CAAC;AACvB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AACtD,YAAA,eAAe,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;QACnD;QACA,OAAO,eAAe,GAAG,CAAC;IAC5B;IAEA,mBAAmB,GAAA;QACjB,IAAI,eAAe,GAAG,CAAC;QACvB,IAAI,aAAa,GAAG,CAAC;QACrB,IAAI,eAAe,GAAG,KAAK;AAE3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;gBACxC,eAAe,GAAG,IAAI;gBACtB;YACF;AACA,YAAA,eAAe,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,gBAAA,aAAa,EAAE;QACrD;QAEA,IAAI,aAAa,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACrC,QAAA,OAAO,aAAa,GAAG,eAAe,IAAI,eAAe;IAC3D;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,IAAI,EAAE;QAC7C,OAAO,IAAI,CAAC,iBAAiB;AAC3B,eAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC1D,eAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3D;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,IAAI,EAAE;AAC7C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAC7D,IAAI,QAAQ,EAAE;YACZ,OAAO,MAAM,CAAC;AACZ,kBAAE,sBAAsB,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE;AACjE,kBAAE,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;QACrF;QACA,OAAO,MAAM,CAAC;AACZ,cAAE,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE;AAC/D,cAAE,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IACnF;IAEA,WAAW,CAAC,EAAc,EAAE,UAAkB,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE;AACzD,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB;AACvC,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC;YAAE;AAChE,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;IACtC;uGAhrJW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,GAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAPR;AACT,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACpE,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC,EAAE;SACxE,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuYa,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+BrB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACpB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAChB,uCAAuC,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAi8GpC,eAAe,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EACjB,qBAAqB,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EACrB,uBAAuB,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,SAAA,EACvB,6CAA6C,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAE7C,uCAAuC,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAEvC,sBAAsB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrmIzC,g1nBAsdA,EAAA,MAAA,EAAA,CAAA,gzgFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1PI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,sMACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,kCAAkC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,kCAAkC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,4BAA4B,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,mCAAmC,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,0CAA0C,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1C,0BAA0B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,2BAA2B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,6BAA6B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUV,QAAQ,EAAA,UAAA,EAAA,CAAA;kBA/BpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,aAAA,EAET,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,wBAAwB;wBACxB,2BAA2B;wBAC3B,kCAAkC;wBAClC,kCAAkC;wBAClC,4BAA4B;wBAC5B,0BAA0B;wBAC1B,mCAAmC;wBACnC,0CAA0C;wBAC1C,0BAA0B;wBAC1B,2BAA2B;wBAC3B,6BAA6B;wBAC7B,0BAA0B;wBAC1B,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EAEU;AACT,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACpE,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,QAAS,CAAC,EAAE;AACxE,qBAAA,EAAA,UAAA,EACU,IAAI,EAAA,QAAA,EAAA,g1nBAAA,EAAA,MAAA,EAAA,CAAA,gzgFAAA,CAAA,EAAA;;sBAMd;;sBAaA;;sBAYA;;sBAOA;;sBASA;;sBAUA;;sBAUA;;sBAUA;;sBAUA;;sBASA;;sBAWA;;sBASA;;sBACA;;sBAGA;;sBASA;;sBAUA;;sBAWA;;sBAcA;;sBASA;;sBAEA;;sBAaA;;sBAQA;;sBACA;;sBAEA;;sBAGA;;sBASA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;sBAcA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;sBASA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;sBAWA;;sBAUA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBACA;;sBAOA;;sBAcA;;sBACA;;sBAEA;;sBAUA;;sBACA;;sBACA;;sBAEA;;sBAUA;;sBASA;;sBAEA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBACA;;sBAGA;;sBACA;;sBAGA,YAAY;uBAAC,qBAAqB;;sBAClC,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,gBAAgB;;sBAW1B;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,YAAY;uBAAC,oBAAoB;;sBACjC,YAAY;uBAAC,gBAAgB;;sBAC7B,YAAY;uBAAC,uCAAuC;;sBAwEpD;;sBAssEA,YAAY;uBAAC,eAAe;;sBA4jB5B,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAa7C,YAAY;uBAAC,kBAAkB;;sBA0mB/B,eAAe;uBAAC,eAAe;;sBAC/B,eAAe;uBAAC,iBAAiB;;sBACjC,eAAe;uBAAC,iBAAiB;;sBACjC,eAAe;uBAAC,qBAAqB;;sBACrC,eAAe;uBAAC,uBAAuB;;sBACvC,eAAe;uBAAC,6CAA6C;;sBAE7D,eAAe;uBAAC,uCAAuC;;sBAEvD,eAAe;uBAAC,sBAAsB;;sBAoatC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBA0GzC,YAAY;uBAAC,yBAAyB;;;SE5mJzB,uBAAuB,CACrC,SAAoC,EACpC,QAAmC,EACnC,QAAgB,EAAA;AAEhB,IAAA,MAAM,QAAQ,GAAG,SAAS,IAAI,QAAQ;IACtC,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,CAAA,mFAAA,CAAqF,CACjG;IACH;AACA,IAAA,OAAO,QAAQ;AACjB;;ACfA;MAEa,mCAAmC,CAAA;AAC7B,IAAA,OAAO,GAAG,IAAI,GAAG,EAA+C;IAEjF,QAAQ,CAAC,EAAmC,EAAE,KAAiB,EAAA;QAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,EAAmC,EAAA;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB;AAEA,IAAA,aAAa,CAAC,EAAmC,EAAA;QAC/C,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAC3C,IAAI,OAAO,KAAK,EAAE;AAAE,gBAAA,KAAK,EAAE;QAC7B;IACF;uGAfW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAnC,mCAAmC,EAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;;MCgFY,qCAAqC,CAAA;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,WAAW,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAErF,IAAA,IAAI;IACJ,KAAK,GAAG,SAAS;AAElB,IAAA,WAAW;IAEnB,IAAI,GAAG,KAAK;IACZ,UAAU,GAAG,EAAE;IACf,eAAe,GAA4B,EAAE;AAE7C,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,kCAAkC,CAAC;IACjG;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,OAAO,IAAI,EAAE,eAAe,IAAI,EAAE;IACpC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAClD,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,cAAc;AACtC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KACpC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAK,GAAG,CAAC,KAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAChG;IACH;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;IACnE;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;IACtF;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa;QAChC,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;IACxD;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC;IACzC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,QAAQ;AAAE,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;QACpB,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU;AAC7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,IAAI;QAClD;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,UAAU,CAAC,IAAI,GAAG,IAAI,EAAA;QACpB,MAAM,IAAI,GAA4B,EAAE;AACxC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;QACzC;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACnC;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAK,KAAK,CAAC,MAA6B,EAAE,OAAO,CAAC,kCAAkC,CAAC;YAAE;QACvF,IAAI,CAAC,UAAU,EAAE;IACnB;uGApHW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7DtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1DS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA8DjF,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAjEjD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAAA,UAAA,EAChC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,EAAA,QAAA,EACnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;sBAMpC;;sBACA;;sBA0GA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MCtB/B,8BAA8B,CAAA;AACxB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,WAAW,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGrF,IAAA,IAAI;IACJ,KAAK,GAAG,QAAQ;AAEjB,IAAA,WAAW;IAEnB,IAAI,GAAG,KAAK;IACZ,aAAa,GAAkB,IAAI;IAEnC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC/D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;IACxC;AAEA,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;IAEQ,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACzF;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACzF;AAEA,IAAA,cAAc,CAAC,GAAmB,EAAA;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,GAAG,CAAC;IACvD;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,QAAQ;AAAE,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YACrE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAe;QAChE;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AAChE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,GAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC;IACjD;AAEA,IAAA,WAAW,CAAC,GAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,GAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAK,KAAK,CAAC,MAA6B,EAAE,OAAO,CAAC,0BAA0B,CAAC;YAAE;QAC/E,IAAI,CAAC,UAAU,EAAE;IACnB;uGAzFW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApJ/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjJS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqJjF,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAxJ1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,EAAA,QAAA,EACnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgJT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;sBAOpC;;sBACA;;sBA8EA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MC9L/B,4BAA4B,CAAA;AACtB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,WAAW,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAErF,IAAA,IAAI;IACJ,KAAK,GAAG,MAAM;AAEf,IAAA,WAAW;IAEnB,IAAI,GAAG,KAAK;IAEZ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC;IACtC;AAEA,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;IAEQ,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC;IACvF;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC;IAC1F;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,QAAQ;AAAE,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,UAAU,CAAC,GAAmB,EAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAe,CAAC;AAC/C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAK,KAAK,CAAC,MAA6B,EAAE,OAAO,CAAC,wBAAwB,CAAC;YAAE;QAC7E,IAAI,CAAC,UAAU,EAAE;IACnB;uGAlEW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/C7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5CS,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgDX,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAnDxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;sBAMpC;;sBACA;;sBAwDA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MClG/B,iCAAiC,CAAA;AAC5C;;;AAGG;AACwB,IAAA,IAAI;IACtB,SAAS,GAAG,qBAAqB;AAEe,IAAA,WAAW;AACb,IAAA,SAAS;AACA,IAAA,WAAW;IAE3E,kBAAkB,GAAA;QAChB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACjE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,aAAa,EAAE;IAC3C;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,MAAM,KAAK,GAA0B;AACnC,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAC5B;AACD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD;uGA/BW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EATjC,CAAC,mCAAmC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAiB/B,8BAA8B,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAC9B,4BAA4B,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAC5B,qCAAqC,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlB5C;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EANS,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUX,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAb7C,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ,CAAC,mCAAmC,CAAC,EAAA,QAAA,EACtC;;;;GAIT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;sBAOpC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;sBAEA,eAAe;uBAAC,8BAA8B;;sBAC9C,eAAe;uBAAC,4BAA4B;;sBAC5C,eAAe;uBAAC,qCAAqC;;MA+B3C,uCAAuC,CAAA;uGAAvC,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,8FAJxC,CAAA,iEAAA,CAAmE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAIlE,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBAPnD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,cAClC,IAAI,EAAA,QAAA,EACN,mEAAmE,EAAA,aAAA,EAE9D,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;;ACzDvC,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAEhH,MAAM,WAAW,GAAG,CAAC,KAAc,KAAY;AAC7C,IAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAChE,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;AAE9E,MAAM,eAAe,GAAG,CAAC,KAAa,KAAa,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM;AAExG,MAAM,GAAG,GAAG,CAAC,MAAgB,KAAa,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;AAEhF,MAAM,kBAAkB,GAAG,CAAC,MAAgB,EAAE,SAAA,GAA8B,KAAK,KAAY;IAClG,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC;IAC5B,QAAQ,SAAS;AACf,QAAA,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM;AACpC,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC5B,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC5B,QAAA,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM;AACtB,QAAA,KAAK,KAAK;AACV,QAAA;AACE,YAAA,OAAO,GAAG,CAAC,MAAM,CAAC;;AAExB;AAEO,MAAM,6BAA6B,GAAG,CAC3C,IAAS,EACT,OAAuC,MACf;AACxB,IAAA,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,IAAA,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;IACrD,cAAc,EAAE,OAAO,CAAC,cAAc;AACtC,IAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM;QAChC,GAAG,EAAE,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE;AACnB,QAAA,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,CAAA,IAAA,EAAO,KAAK,GAAG,CAAC,CAAA,CAAE;AAC9D,QAAA,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,KAAA,CAAC,CAAC;AACJ,CAAA;AAEM,MAAM,gCAAgC,GAAG,CAC9C,IAAS,EACT,OAA0C,MAClB;AACxB,IAAA,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,IAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1D,cAAc,EAAE,OAAO,CAAC,cAAc;AACtC,IAAA,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAAM;QAC9C,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,KAAA,CAAC,CAAC;AACJ,CAAA;MAEY,yBAAyB,GAAG,CACvC,IAAS,EACT,OAAmC,KACb;AACtB,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB;AAC3C,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;QACnB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AACrC,QAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AAC1B,IAAA,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM;QACtE,KAAK;QACL,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;AAC9D,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KACvB,OAAO,CAAC,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAC7E;IACH;IAEA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO;IAEzE,OAAO;AACL,QAAA,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,QAAA,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;QAC3C,cAAc,EAAE,OAAO,CAAC,cAAc;AACtC,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;AACvB,gBAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC,CAAC;AACjD,gBAAA,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC1C,aAAA;AACF,SAAA;KACF;AACH;AAEO,MAAM,uBAAuB,GAAG,CAAC,MAAgB,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,KAAyB;IACtH,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;AAC7B,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IAC1C;IAEA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC/B,IAAA,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,IAAA,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;IAE7B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM;AACnC,QAAA,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK;QAC1B,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,MAAM,KAAK,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;AACxE,KAAA,CAAC,CAAC;AACL;AAEA,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,SAAqC,KAC5E,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;AAE/D,MAAM,kBAAkB,GAAG,CAAC,OAAe,MAAM;AAC/C,IAAA,SAAS,EAAE,KAAc;AACzB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9D,CAAA,CAAC;AAEK,MAAM,qBAAqB,GAAG,CACnC,MAA0B,EAC1B,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,KACP;AACtB,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAI,MAAM,CAAC,IAAkB;AACzE,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,KAAK;AACrD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI;AAC5C,IAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC;AAEzC,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACvD,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;gBACL,IAAI;AACJ,gBAAA,IAAI,EAAE;oBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,oBAAA,QAAQ,EAAE,CAAC;4BACT,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,4BAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;AACpD,4BAAA,eAAe,EAAE,MAAM;AACvB,4BAAA,WAAW,EAAE,MAAM;AACnB,4BAAA,WAAW,EAAE,CAAC;yBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,MAAM;AACT,oBAAA,OAAO,EAAE;wBACP,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE;AACzD,wBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;AACtD,wBAAA,OAAO,EAAE;AACP,4BAAA,SAAS,EAAE;AACT,gCAAA,KAAK,EAAE,CAAC,GAAqB,KAAI;AAC/B,oCAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,EAAA,CAAI,GAAG,EAAE;AAC/C,oCAAA,OAAO,GAAG,KAAK,CAAA,EAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE;gCACtF,CAAC;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF;QACH;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YACjD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC;AAC5C,SAAA,CAAC,CAAC;QACH,OAAO;YACL,IAAI;AACJ,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AACxC,gBAAA,QAAQ,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;AACzB,wBAAA,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AACtC,wBAAA,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AACjD,wBAAA,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AAC7C,wBAAA,WAAW,EAAE,CAAC;qBACf,CAAC;AACH,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,GAAG,MAAM;AACT,gBAAA,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE;AACzD,oBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;AACtD,oBAAA,OAAO,EAAE;AACP,wBAAA,SAAS,EAAE;AACT,4BAAA,KAAK,EAAE,CAAC,GAAqB,KAAI;AAC/B,gCAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,EAAA,CAAI,GAAG,EAAE;AAC/C,gCAAA,OAAO,GAAG,KAAK,CAAA,EAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE;4BACtF,CAAC;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;IACH;AAEA,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC;QAClD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,eAAe,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACrE,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM;AAC5B,YAAA,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,CAAC;AACnE,YAAA,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;AAC1C,YAAA,WAAW,EAAE,CAAC;SACf;AACH,IAAA,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;AACJ,QAAA,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,GAAG,MAAM;YACT,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;AAChD,YAAA,MAAM,EAAE;AACN,gBAAA,CAAC,EAAE;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;AACzB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1B,oBAAA,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC5B,iBAAA;AACD,gBAAA,CAAC,EAAE;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;AACzB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1B,oBAAA,KAAK,EAAE;AACL,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,QAAQ,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;AACjF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE;AACzD,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;AACtD,gBAAA,OAAO,EAAE;AACP,oBAAA,SAAS,EAAE;AACT,wBAAA,KAAK,EAAE,CAAC,GAAqB,KAAI;4BAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE;4BAC/D,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA,CAAE;wBACvG,CAAC;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACH;;MCpOa,qBAAqB,CAAA;IACvB,MAAM,GAA8B,IAAI;IACxC,SAAS,GAAG,YAAY;IACxB,UAAU,GAAG,0BAA0B;AAEnB,IAAA,MAAM;AAE3B,IAAA,KAAK;AACL,IAAA,gBAAgB;IAChB,SAAS,GAAG,KAAK;IACjB,eAAe,GAAG,EAAE;IACpB,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG;IACnC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACrG;AAEQ,IAAA,MAAM,WAAW,GAAA;QACvB,IAAI,IAAI,CAAC,SAAS;YAAE;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjD,IAAI,CAAC,YAAY,EAAE;YACnB;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YACzB;QACF;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;YACpD;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE;YAC/C,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,YAAY,EAAE;gBACnB;YACF;YACA,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACrF,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;IACF;AAEQ,IAAA,MAAM,oBAAoB,GAAA;QAChC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,gBAAgB;AACvD,QAAA,IAAI;AACF,YAAA,MAAM,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC;YAC5C,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AACxD,YAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAyB;YAC7D,OAAO,IAAI,CAAC,gBAAgB;QAC9B;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,oBAAoB,CAAC,MAA0B,EAAA;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;AACtC,SAAA,CAAC;IACJ;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;IACxB;uGApGW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnCtB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EATS,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAoCX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvCjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;GAQT,EAAA,eAAA,EAyBgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,QAAQ;;;MCjBR,yBAAyB,CAAA;IAC3B,MAAM,GAAa,EAAE;;IAE9B,MAAM,GAAa,EAAE;IACZ,KAAK,GAAG,GAAG;IACX,MAAM,GAAG,EAAE;IACX,WAAW,GAAG,CAAC;IACf,aAAa,GAAG,SAAS;IACzB,aAAa,GAAG,SAAS;IACzB,YAAY,GAAG,SAAS;IACxB,KAAK,GAAkB,IAAI;IAC3B,UAAU,GAAG,IAAI;IACjB,YAAY,GAAG,GAAG;IAClB,SAAS,GAAG,iBAAiB;AAEtC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACxC;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IACtE;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE;AACrC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAA,EAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxG;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,YAAY;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa;QACxC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa;QACxC,OAAO,IAAI,CAAC,YAAY;IAC1B;uGArCW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1B1B;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApBS,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA2BX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9BrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;GAmBT,EAAA,eAAA,EAKgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,oGAAA,CAAA,EAAA;;sBAG9C;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCyIU,qBAAqB,CAAA;AACL,IAAA,MAAM;IACxB,SAAS,GAAG,YAAY;AAEvB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;AAEjD,IAAA,IAAI;IAEjC,WAAW,GAAmB,EAAE;IAChC,WAAW,GAA8B,IAAI;IAC7C,iBAAiB,GAAG,IAAI;IACxB,cAAc,GAAkB,IAAI;IACpC,gBAAgB,GAAmB,EAAE;AAE5B,IAAA,YAAY,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;AACxE,IAAA,UAAU,GAAG,CAAC,KAAa,EAAE,GAAM,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AAE7D,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,IAAA,WAAW,GAAG,IAAI,GAAG,EAAmB;AACxC,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAU;IACpC,QAAQ,GAAyC,IAAI;IACrD,cAAc,GAAG,EAAE;IACnB,aAAa,GAAG,EAAE;IAClB,UAAU,GAAG,EAAE;IACf,gBAAgB,GAAG,EAAE;IACrB,eAAe,GAAG,EAAE;IACpB,oBAAoB,GAAG,KAAK;AAC5B,IAAA,sBAAsB,GAAG,IAAI,GAAG,EAA6B;AAErE,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QACxC,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,eAAe,EAAE;YACzC,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS;IAClD;AAEA,IAAA,eAAe,CAAC,GAAM,EAAA;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;AAClD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;IAClD;AAEA,IAAA,cAAc,CAAC,GAAM,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU;AAAE,YAAA,OAAO,IAAI;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS;QAC/B,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,aAAa,CAAC,GAAM,EAAA;AAClB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACjC;AAEA,IAAA,WAAW,CAAC,GAAM,EAAA;AAChB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACxG,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACrD;AAEA,IAAA,qBAAqB,CAAC,KAAwB,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK;AAChD,QAAA,MAAM,kBAAkB,GAAG,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACzE,cAAE,IAAI,CAAC,MAAM,CAAC;iBACX,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,SAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBACzD,IAAI,CAAC,GAAG;cACT,EAAE;AACN,QAAA,MAAM,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAkB,EAAE;AAC/H,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;AAClF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;AACjE,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK;cACzB,GAAG,iBAAiB,CAAA,CAAA,EAAI,iBAAiB,CAAC,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA;cAC1D,EAAE;AAEN,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ;AAC1C,QAAA,MAAM,cAAc,GAAG,UAAU,KAAK,IAAI,CAAC,cAAc;AACzD,QAAA,MAAM,aAAa,GAAG,MAAM,KAAK,IAAI,CAAC,UAAU;AAChD,QAAA,MAAM,gBAAgB,GAAG,SAAS,KAAK,IAAI,CAAC,aAAa;AACzD,QAAA,MAAM,gBAAgB,GAAG,YAAY,KAAK,IAAI,CAAC,gBAAgB;AAC/D,QAAA,MAAM,eAAe,GAAG,WAAW,KAAK,IAAI,CAAC,eAAe;AAE5D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW;AAElC,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,YAAA,IAAI,WAAW,IAAI,gBAAgB,IAAI,cAAc,EAAE;AACrD,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI;AAC1D,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,EAAE;gBACpD,IAAI,CAAC,qBAAqB,EAAE;YAC9B;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,YAAA,IAAI,WAAW,IAAI,eAAe,IAAI,gBAAgB,EAAE;gBACtD,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,WAAW,IAAI,cAAc,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,KAAK;AAC1B,kBAAE,IAAI,CAAC,2BAA2B;AAClC,kBAAE,IAAI,CAAC,wBAAwB,EAAE;QACrC;QAEA,IAAI,WAAW,IAAI,cAAc,IAAI,aAAa,IAAI,gBAAgB,EAAE;YACtE,IAAI,CAAC,gBAAgB,EAAE;QACzB;QAEA,IAAI,IAAI,KAAK,eAAe,KAAK,WAAW,IAAI,aAAa,CAAC,EAAE;YAC9D,IAAI,CAAC,qBAAqB,EAAE;QAC9B;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM;YAAE;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YACtC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,SAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzE,QAAA,CAAC,CAAC;IACJ;IAEQ,uBAAuB,GAAA;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC;QAC9F,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;IACpC;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE;QAEvD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;YACxC,IAAI,CAAC,WAAW,GAAG,6BAA6B,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACpE,gBAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,gBAAA,WAAW,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;AACzD,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;AAChC,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;AAC3C,aAAA,CAAC;YACF;QACF;QAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;YAC3C,IAAI,CAAC,WAAW,GAAG,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpE,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;AAChC,gBAAA,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE;AAC7B,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;AAChC,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;AAC3C,aAAA,CAAC;YACF;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC5D,IAAI,CAAC,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7D,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;AAClE,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS;AAClE,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;AAC3D,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC/B,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;AACjC,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc;AAClF,aAAA,CAAC;QACJ;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACrG;IAEQ,aAAa,GAAA;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtF;IAEQ,UAAU,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;IAC/D;IAEQ,YAAY,CAAC,GAAM,EAAE,KAAa,EAAA;AACxC,QAAA,MAAM,SAAS,GAAI,GAAgC,CAAC,EAAE;QACtD,OAAO,SAAS,IAAI,KAAK;IAC3B;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,UAAU,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,qBAAqB,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvD;IAEQ,iBAAiB,GAAA;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AACzD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACrB,aAAA,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACjD,aAAA,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,wBAAwB,GAAA;QAC9B,OAAO;AACL,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAA+B;AAC5D,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK;AACnC,gBAAA,KAAK,EAAE,GAAG;AACX,aAAA;AACD,YAAA,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;gBACpC,KAAK,EAAE,MAAM,CAAC,GAA+B;gBAC7C,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,gBAAA,IAAI,EAAE,QAAiB;AACvB,gBAAA,KAAK,EAAE,GAAG;AACX,aAAA,CAAC,CAAC;SACJ;IACH;IAEQ,2BAA2B,GAAA;AACjC,QAAA,MAAM,UAAU,GAAiB;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAA+B;YAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE;AACjD,YAAA,KAAK,EAAE,GAAG;SACX;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACpD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS;YACtC,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,GAA+B;AAC7C,gBAAA,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,EAAE,QAAiB;AACvB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,WAAW,EAAE;AACX,sBAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA,EAAA,CAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG;sBAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE;AACzC,gBAAA,SAAS,EAAE;sBACP,EAAE,UAAU,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,EAAE,KAAK,EAAE,SAAS;AAC7C,sBAAE,EAAE,KAAK,EAAE,SAAS,EAAE;aACT;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM;YACjE,KAAK,EAAE,GAAG,CAAC,KAAiC;AAC5C,YAAA,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;AAChC,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,QAAQ;AAC1B,YAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG;AACxB,SAAA,CAAC,CAAmB;QACrB,OAAO,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;IACjD;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,IAAI,GAAmB;AAC3B,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAA+B;gBAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE;AACjD,gBAAA,KAAK,EAAE,GAAG;AACX,aAAA;SACF;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC;AACR,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAA+B;gBAC/D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE;AACpD,gBAAA,KAAK,EAAE,GAAG;AACX,aAAA,CAAC;QACJ;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,IAAI,CACP,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YACjC,KAAK,EAAE,MAAM,CAAC,GAA+B;AAC7C,YAAA,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,EAAE,QAAiB;AACvB,YAAA,KAAK,EAAE,GAAG;SACX,CAAC,CAAC,CACJ;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC;AACR,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAiC;AAC9D,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,KAAK,EAAE,GAAG;AACX,aAAA,CAAC;QACJ;QACA,IAAI,CAAC,IAAI,CACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM;YACnD,KAAK,EAAE,GAAG,CAAC,KAAiC;AAC5C,YAAA,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;AAChC,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,QAAQ;AAC1B,YAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG;SACxB,CAAC,CAAmB,CACtB;AACD,QAAA,OAAO,IAAI;IACb;uGA7UW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMrB,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1JT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ihCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3FS,YAAY,+BAAE,QAAQ,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,0GAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,cAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqJxF,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxJjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,CAAC,EAAA,QAAA,EAC1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FT,EAAA,eAAA,EAwDgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,ihCAAA,CAAA,EAAA;;sBAG9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;sBAEA;;sBAEA,SAAS;uBAAC,QAAQ;;;MCmCR,0BAA0B,CAAA;IAC7B,OAAO,GAA6B,EAAE;IACtC,UAAU,GAAuC,IAAI;AACrD,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAkC;AAC5D,IAAA,eAAe,GAAG,IAAI,GAAG,EAA+B;AACxD,IAAA,cAAc,GAAG,IAAI,GAAG,EAAkB;AAC1C,IAAA,oBAAoB,GAAG,IAAI,GAAG,EAAuC;IAE7E,IAAa,MAAM,CAAC,KAAkD,EAAA;AACpE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,IAAa,SAAS,CAAC,KAAqD,EAAA;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,IAAI;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;IACnC;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;IACS,KAAK,GAA4B,EAAE;IACnC,KAAK,GAAiB,KAAK;IAC3B,QAAQ,GAAG,CAAC;IACZ,UAAU,GAAG,OAAO;IACpB,UAAU,GAAG,wBAAwB;IACrC,SAAS,GAAG,MAAM;IAClB,YAAY,GAAG,YAAY;IAC3B,UAAU,GAAG,QAAQ;IACrB,eAAe,GAAG,QAAQ;IAC1B,mBAAmB,GAAG,aAAa;IACnC,cAAc,GAAG,cAAc;IAC/B,iBAAiB,GAAG,iBAAiB;IACrC,cAAc,GAAG,cAAc;IAC/B,gBAAgB,GAAG,UAAU;AAE5B,IAAA,WAAW,GAAG,IAAI,YAAY,EAA2B;AACzD,IAAA,WAAW,GAAG,IAAI,YAAY,EAAgB;AAC9C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAgC;AAEzE,IAAA,QAAQ,CAAC,KAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI,CAAC,KAAK;AACb,YAAA;gBACE,KAAK;AACL,gBAAA,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC7C,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA;SACF;QACD,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnD;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC;IAEA,YAAY,CAAC,IAA2B,EAAE,KAAa,EAAA;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC;QACjF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACnD,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACjB;QACA,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,eAAe,CAAC,IAA2B,EAAE,QAA2B,EAAA;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACjB;QACA,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,SAAS,CAAC,IAA2B,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;AAC7C,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AACzC,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,qBAAqB,CAAC,QAA2B,EAAA;AAC/C,QAAA,OAAO,8BAA8B,CAAC,QAAQ,CAAC;IACjD;AAEA,IAAA,kBAAkB,CAAC,IAA2B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC,SAAS;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAChD,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;AAC3E,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,KAAK,EAAE,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC9C,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD,QAAA,OAAO,OAAO;IAChB;IAEA,kBAAkB,GAAA;QAChB,MAAM,OAAO,GAA4C,EAAE;AAC3D,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,aAAa,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnE,YAAA,IAAI,aAAa,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;gBAAE;AAEhE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,KAAK,EAAE,aAAa,IAAI,SAAS,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS;gBAC7F,UAAU,EAAE,SAAS,KAAK,QAAQ;AACnC,aAAA,CAAC;QACJ;QAEA,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO;SACR;IACH;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9C,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACtC,OAAO,MAAM,EAAE,UAAU,IAAI,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC;IACtE;AAEQ,IAAA,wBAAwB,CAAC,KAAa,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,MAAM,EAAE,sBAAsB,EAAE,MAAM;AAAE,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACrF,OAAO,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClE;AAEQ,IAAA,uBAAuB,CAAC,KAAa,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,MAAM,EAAE,qBAAqB,KAAK,EAAE,EAAE;AACxC,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC/E;QACA,IAAI,MAAM,EAAE,qBAAqB;YAAE,OAAO,MAAM,CAAC,qBAAqB;QACtE,OAAO,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjE;IAEQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AAEjC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAC7E;QACH;IACF;uGArLW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,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,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzL3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,swDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhFS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA0LjF,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA7LtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,EAAA,QAAA,EACnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+ET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,swDAAA,CAAA,EAAA;;sBAkHA;;sBAQA;;sBAOA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MC9HU,2BAA2B,CAAA;IAC7B,MAAM,GAA8B,EAAE;IACtC,cAAc,GAAa,EAAE;IAC7B,IAAI,GAAG,EAAE;IACT,WAAW,GAAG,8BAA8B;IAC5C,eAAe,GAAG,2BAA2B;IAC7C,WAAW,GAAG,YAAY;IAC1B,eAAe,GAAG,kBAAkB;IACpC,UAAU,GAAG,IAAI;IACjB,mBAAmB,GAAG,KAAK;AAE1B,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,oBAAoB,GAAG,IAAI,YAAY,EAAY;AACnD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAqC;AAEjF,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5C;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;YAAE;QAC9E,IAAI,CAAC,cAAc,GAAG;AACpB,cAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK;cACnD,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;AACzC,SAAA,CAAC;IACJ;uGAxCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,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,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvH5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,w5CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnCS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,2HAAE,2BAA2B,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwHjF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3HvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,EAAA,QAAA,EACnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,w5CAAA,CAAA,EAAA;;sBAsFA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;AC5CI,MAAM,0BAA0B,GAA6B;IAClE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IACzG,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC5G,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAChI,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAClH,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC5G,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9G,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC3G,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7G,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAChH,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IACxG,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9G,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;;;MCoHjG,+BAA+B,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC;IAC/C,MAAM,GAAqB,WAAW;IACtC,OAAO,GAA6B,0BAA0B;IAE7D,KAAK,GAAG,cAAc;AAC/B,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAAuB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,IACI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IACA,IAAI,MAAM,CAAC,MAAmD,EAAA;AAC5D,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,0BAA0B;QACnE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1D,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEU,IAAA,WAAW,GAAG,IAAI,YAAY,EAAoB;IAE5D,IAAI,GAAG,KAAK;AACZ,IAAA,aAAa,GAA2B,0BAA0B,CAAC,CAAC,CAAC;AACrE,IAAA,aAAa,GACX,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC;IAErD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;IACxB;AAEA,IAAA,MAAM,CAAC,KAA6B,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;IACnB;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACnB;IACF;IAGA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;IACnB;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC;IACjH;AAEQ,IAAA,kBAAkB,CACxB,MAAgC,EAAA;QAEhC,MAAM,MAAM,GAA2C,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;AAC5F,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;AAClF,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;uGAnEW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArOhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+qFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3DS,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAsOX,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAzO3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,cACzB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+qFAAA,CAAA,EAAA;;sBAgLA;;sBACA;;sBASA;;sBAUA;;sBAkBA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBAOzC,YAAY;uBAAC,gBAAgB;;;MC/QnB,yBAAyB,CAAA;AAKJ,IAAA,IAAA;AAJL,IAAA,MAAM;AACxB,IAAA,oBAAoB;IACpB,gBAAgB,GAAoB,EAAE;AAE/C,IAAA,WAAA,CAAgC,IAAuB,EAAA;QAAvB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAsB;IAE1D,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,EAAE;IACd;AAEA,IAAA,WAAW,CAAC,GAAkB,EAAA;QAC5B,IAAI,CAAC,KAAK,EAAE;IACd;IAEQ,KAAK,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI;QAC/C,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI;QAC7D,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;IAClC;uGArBW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,CAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAMc;;sBAJZ,KAAK;uBAAC,kBAAkB;;sBACxB;;sBACA;;;MCZU,qBAAqB,CAAA;AACY,IAAA,IAAA;AAA5C,IAAA,WAAA,CAA4C,IAA0B,EAAA;QAA1B,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAyB;IAE1C,SAAS,GAAG,MAAM;IACZ,SAAS,GAAG,IAAI;AAGrD,IAAA,WAAW,CAAC,EAAa,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;IAC5B;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE;IACxB;uGAdW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAEc;;0BAAY;;sBAExB,WAAW;uBAAC,gBAAgB;;sBAC5B,WAAW;uBAAC,sBAAsB;;sBAElC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAKpC,YAAY;uBAAC,SAAS;;;MCUZ,uBAAuB,CAAA;IACzB,KAAK,GAAY,IAAI;IACrB,MAAM,GAAG,CAAC;IACV,QAAQ,GAAG,MAAM;IACjB,SAAS,GAAG,GAAG;AAExB,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAClC,OAAO,IAAI,CAAC,KAAK;QACnB;AAEA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;QACvE;AAAE,QAAA,MAAM;YACN,OAAO,IAAI,CAAC,QAAQ;QACtB;IACF;uGAhBW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,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,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvBxB;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+SAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqBU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1BnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,QAAA,EACN;;GAET,EAAA,eAAA,EAmBgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+SAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;;MC1BU,qBAAqB,CAAA;AAGb,IAAA,QAAA;AAFI,IAAA,GAAG;AAE1B,IAAA,WAAA,CAAmB,QAA8B,EAAA;QAA9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAyB;uGAHzC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,CAAA,cAAA,EAAA,KAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE,KAAK;uBAAC,cAAc;;;MC8BV,mBAAmB,CAAA;;IAErB,KAAK,GAAqB,EAAE;;IAG5B,WAAW,GAA0B,YAAY;;IAGjD,aAAa,GAA4B,OAAO;;IAGhD,eAAe,GAA8B,QAAQ;;IAGrD,YAAY,GAAG,IAAI;;IAGnB,IAAI,GAAG,IAAI;;IAGX,KAAK,GAAoB,WAAW;;IAGpC,UAAU,GAAG,IAAI;;IAGjB,gBAAgB,GAAG,KAAK;;IAGxB,iBAAiB,GAAG,GAAG;;IAGvB,SAAS,GAAG,MAAM;IAClB,aAAa,GAAG,UAAU;IAC1B,UAAU,GAAG,OAAO;IACpB,WAAW,GAAG,QAAQ;IACtB,aAAa,GAAG,UAAU;;AAG1B,IAAA,UAAU,GAA2B;AAC5C,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE,GAAG;KACd;;IAGQ,aAAa,GAAG,CAAC;;AAGhB,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;;AAGhD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;;AAGpE,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;;AAGb,IAAA,eAAe;;AAGG,IAAA,aAAa;;AAGhB,IAAA,cAAc;;AAG1D,IAAA,OAAO,GAAG,IAAI,GAAG,EAAU;;IAGnC,WAAW,GAAG,CAAC;IAEf,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAClD,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,uBAAuB;AAChC,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,0BAA0B;AACnC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,wBAAwB;AACjC,YAAA;AACE,gBAAA,OAAO,yBAAyB;;IAEtC;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,QAAA,OAAO,IAAI,EAAE,YAAY,IAAI,IAAI;IACnC;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE;QACrC,OAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ;IACxB;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE;QACrC,OAAO,CAAA,EAAG,IAAI,CAAA,QAAA,CAAU;IAC1B;AAEQ,IAAA,WAAW,CAAC,CAAS,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,QAAQ;QACvB,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK;AAC3B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,OAAO;AACzC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,QAAQ;AAC7C,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,MAAM;QACzC,IAAI,CAAC,CAAC,QAAQ;AAAE,YAAA,OAAO,UAAU;AACjC,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,aAAa,CAAC,CAAS,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD;AAEA,IAAA,cAAc,CAAC,CAAS,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK;IACd;IAEA,mBAAmB,CAAC,KAAsB,EAAE,KAAa,EAAA;AACvD,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1B;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjF;AAEA,IAAA,aAAa,CAAC,CAAS,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;YAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW;YAAE;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrB;IAEA,eAAe,CAAC,KAA4B,EAAE,CAAS,EAAA;QACrD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvB;IAEA,IAAI,GAAA;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACtE,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa;YAAE;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1B;IAEA,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAClD,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa;YAAE;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEQ,IAAA,WAAW,CAAC,SAAiB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5B,SAAA,CAAC;IACJ;uGAhNW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+DhB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGK,WAAW,wGAGd,WAAW,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1GlD,4mJAiJA,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAA,eAAA,EAG7B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4mJAAA,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA;;sBAI9C;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBASA;;sBAGA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAGA,YAAY;uBAAC,qBAAqB;;sBAGlC,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAGpD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;;ME9FvC,wBAAwB,CAAA;AAC1B,IAAA,IAAI,GAAW,EAAE,CAAC;IAClB,GAAG,GAAW,KAAK;IACnB,GAAG,GAAW,MAAM;IACpB,UAAU,GAAY,IAAI;IAC1B,WAAW,GAAY,KAAK;IAC5B,SAAS,GAAY,KAAK;AACzB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW;AAEf,IAAA,QAAQ;uGATrC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,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,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAP3B,CAAA;;;;AAIS,kBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA,CAAA;;2FAGN,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,QAAA,EACR,CAAA;;;;AAIS,kBAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCiI3B,oBAAoB,CAAA;AAcX,IAAA,EAAA;AAbuB,IAAA,KAAK;IACvC,WAAW,GAA8B,YAAY;IACrD,eAAe,GAAU,EAAE;IAC3B,eAAe,GAAW,MAAM;IAChC,iBAAiB,GAAW,OAAO;AAEnC,IAAA,SAAS,GAAY,IAAI,CAAC;AAC1B,IAAA,QAAQ,GAAW,MAAM,CAAC;AAC1B,IAAA,SAAS,GAAW,MAAM,CAAC;IAE5B,UAAU,GAAG,KAAK;IAClB,kBAAkB,GAAG,CAAC,CAAC;AAE/B,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAEtB;;AAIA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;IACxC;IAEA,WAAW,CAAC,KAAiB,EAAE,KAAa,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY;IAC9F;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;QAEzG,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY;AACtD,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3D,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;QAEA,MAAM,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QAEpF,IAAI,QAAQ,GAAG,CAAC;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,EAAE;gBACpB;YACF;AACA,YAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,qBAAqB,EAAE;AACxD,YAAA,QAAQ,IAAI,YAAY,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AAC3D,YAAA,QAAQ,IAAI,IAAI,CAAC,eAAe;QAClC;AAEA,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,GAAG,QAAQ,IAAI,WAAW,IAAI,GAAG;AAE9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAElE,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;QACnD;AACA,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;QACnD;AAEA,QAAA,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACvD,QAAA,UAAU,CAAC,IAAI,GAAG,CAAA,EAAG,YAAY,GAAG;IACtC;IAEA,cAAc,CAAC,KAAY,EAAE,KAAa,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,eAAe,CAAC,IAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,OAAO,IAAI,CAAC,SAAS,GAAG,qBAAqB,GAAG,oBAAoB;QACtE;QACA,OAAO,IAAI,CAAC,SAAS,GAAG,oBAAoB,GAAG,kBAAkB;IACnE;AAEA,IAAA,WAAW,CAAC,IAA8B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,EAAE;QAC3B;AACA,QAAA,OAAO,SAAS;IAClB;IAEQ,aAAa,CAAC,KAAyB,EAAE,WAAmB,EAAA;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AACnC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;QAClD;AAEA,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,WAAW,IAAI,GAAG,GAAG,IAAI;QAC/D;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C;IAEA,2BAA2B,GAAA;;AAEzB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,UAAU,GAAG,YAAY;IACtE;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;AACzG,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AAElC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AACvF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAW,IAAI,GAAG,CAAC;IACrD;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;IAClD;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;IAClD;IAEA,eAAe,CAAC,KAAoB,EAAE,KAAa,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,IAAI,EAAE,WAAW,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACxB;YACA;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY;QACtD,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS;QAC1D,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW;AAC7D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC1D;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;IACpC;IAEQ,eAAe,CAAC,KAAa,EAAE,YAAoB,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;AAEzG,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;AACjC,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE;YACjC;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,EAAE;AACzD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM;QAChG,IAAI,WAAW,GAAG,CAAC,aAAa,GAAG,WAAW,IAAI,GAAG,GAAG,YAAY;AAEpE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC;QACjD;AACA,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC;QACjD;AAEA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACrD,QAAA,UAAU,CAAC,IAAI,GAAG,CAAA,EAAG,WAAW,GAAG;IACrC;uGArPW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EACd,wBAAwB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhD/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ooCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtHS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAwHX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA3HhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAChC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAwErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ooCAAA,CAAA,EAAA;;sBAGA,eAAe;uBAAC,wBAAwB;;sBACxC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAUA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAM3C,YAAY;uBAAC,gBAAgB;;;MClGnB,iBAAiB,CAAA;IACnB,KAAK,GAAc,EAAE;IACrB,SAAS,GAAG,IAAI;AAChB,IAAA,SAAS;AACT,IAAA,WAAW;AAEV,IAAA,MAAM,GAAG,IAAI,YAAY,EAAW;IAE9C,SAAS,GAAG,CAAC,CAAS,EAAE,IAAa,KAAK,IAAI,CAAC,EAAE;uGARtC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBlB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA/DS,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiEX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApE7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EA2CrC;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MCgLU,qBAAqB,CAAA;AAkGtB,IAAA,IAAA;AACA,IAAA,GAAA;IAlGD,IAAI,GAAuB,EAAE;IAC7B,YAAY,GAAG,GAAG;IAClB,cAAc,GAAG,CAAC;IAClB,KAAK,GAAG,EAAE;IACV,WAAW,GAAG,KAAK;IACnB,WAAW,GAAG,KAAK;IACnB,cAAc,GAAG,KAAK;IACtB,kBAAkB,GAAG,KAAK;IAC1B,eAAe,GAAG,KAAK;IACvB,YAAY,GAAG,KAAK;IACpB,WAAW,GAAG,IAAI;IAClB,SAAS,GAAsB,GAAG;IAClC,KAAK,GAAG,KAAK;IACb,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,EAAE;;;AAGd,IAAA,YAAY;AACZ,IAAA,IAAI;AAEc,IAAA,qBAAqB;AAEtC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAoB;AAC/C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAoB;AACjD,IAAA,KAAK,GAAG,IAAI,YAAY,EAAoB;AAC5C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AACxC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAc;AACvC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAc;AAChD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAS;AACnC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAiB;AAC3C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAS;AAClC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAS;AAClC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AAErC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAsB;AACtD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAsB;AACxD,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEV,IAAA,QAAQ;AAC3B,IAAA,OAAO;AACD,IAAA,WAAW;IAEvC,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;IACV,QAAQ,GAAuB,EAAE;IACjC,OAAO,GAAuB,EAAE;IAChC,QAAQ,GAAuB,EAAE;IACjC,cAAc,GAAG,KAAK;IACd,gBAAgB,GAAG,KAAK;IACxB,WAAW,GAAG,KAAK;IAC3B,WAAW,GAAG,CAAC,CAAC;IACR,YAAY,GAAG,KAAK;IACpB,iBAAiB,GAAG,KAAK;IACzB,cAAc,GAAG,EAAE;IACnB,eAAe,GAAG,KAAK;AACtB,IAAA,SAAS,GAAG,CAAA,sBAAA,EAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAEnF,cAAc,GAAG,GAAG;IACpB,UAAU,GAAG,EAAE;IACf,aAAa,GAAG,CAAC;IACjB,YAAY,GAAG,CAAC;IACR,kBAAkB,GAAG,CAAC;AACtB,IAAA,UAAU;AAEV,IAAA,eAAe,GAAyB,MAAK,EAAE,CAAC;AAChD,IAAA,gBAAgB,GAAe,MAAK,EAAE,CAAC;IACvC,YAAY,GAAQ,IAAI;IAEhC,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACtB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,EAAE;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;QAClE;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;QACA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9F,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B;IACF;IAEA,WAAA,CACU,IAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,GAAG,GAAH,GAAG;IACV;AAGH,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,IAAI,MAAM;YAAE;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAE1B,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AAGA,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE;QAE9C,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAChF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IAC9E;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,KAAK;QACnB;QACA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,EAAE;QAC7B;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzE,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG;IACrD;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB;IACxD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEQ,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAuB;AAC3F,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC/C;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;QAC1B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;YAC5D,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE;gBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChC;gBACA,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;QAEA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;AAC7B,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtB;YACF;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACpB;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEzB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QACvB;IACF;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;AACtD,QAAA,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D,YAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE;AACtC,YAAA,IAAI,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE;gBACtF,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAClC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAClB;YACF;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7E,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,EAAE;YACjB;QACF;QACA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;YACA;QACF;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACxD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9B;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;QACF;IACF;AAEA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;AAE5C,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;YAEf,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACvC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,uBAAuB,EAAE;gBAC9B;YACF;QACF;;QAEA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACzB;IACF;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;;AAIzB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;QAC1C;IACF;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE9B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAChF,QAAA,IAAI,SAAS,GAAG,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACxB;IACF;AAEA,IAAA,UAAU,CAAC,IAAsB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7D,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B;iBAAO;gBACL,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;YACA,IAAI,CAAC,qBAAqB,EAAE;;AAE5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACjB;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACjB;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxC;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC/C;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,WAAW,EAAE;QACpB;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE;IACtC;AAEA,IAAA,cAAc,CAAC,IAAsB,EAAA;QACnC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,cAAc,GAAA;QACZ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC;QACA,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,UAAU,CAAC,IAAsB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IACpD;IAEA,SAAS,GAAG,CAAC,CAAS,EAAE,IAAsB,KAAK,IAAI,CAAC,EAAE;AAE1D,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAA,KAAA,EAAQ,KAAK,EAAE;IACzC;AAEA,IAAA,qBAAqB,CAAC,KAAiB,EAAA;QACrC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAC3C;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE7B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,uBAAuB,EAAE;QAChC;AACA,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAC3C;QACF;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC;AAChI,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB;AAE9E,QAAA,MAAM,IAAI,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACxG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACvB,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;AAEhE,QAAA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1F,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACpE,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,cAAc,CAAC,SAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjG;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACzE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAClE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,KAAK,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU;AAC9D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnG;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;AAC1D,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AACvD,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QACnG;QACA,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;QAC5E;AAEA,QAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;YACzB,cAAc,GAAG,CAAC;QACpB;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3F;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;AAC3B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;QAClC,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,GAAG,SAAS,GAAG,KAAK,IAAI,KAAK;AACtF,QAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;IACvC;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW;IACnD;AAEQ,IAAA,oBAAoB,CAAC,WAAmB,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa;QAC7C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC;YACpB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU;AACzC,QAAA,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU;AAC5C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAClC,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC;QAE3E,IAAI,aAAa,GAAG,OAAO;AAC3B,QAAA,IAAI,OAAO,GAAG,OAAO,EAAE;YACrB,aAAa,GAAG,OAAO;QACzB;AAAO,aAAA,IAAI,UAAU,GAAG,UAAU,EAAE;AAClC,YAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1F;AAEA,QAAA,IAAI,aAAa,KAAK,OAAO,EAAE;AAC7B,YAAA,QAAQ,CAAC,SAAS,GAAG,aAAa;QACpC;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpG,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,YAAY,CAAC,IAAsB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QACxD;IACF;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAE,gBAAgB,GAAG,KAAK,EAAA;AACzD,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;QACxC,IAAI,IAAI,CAAC,cAAc;YAAE;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACzC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5F,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,IAAI,CAAC,cAAc,EAAE;gBACvB;YACF;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,qBAAqB,EAAE;YAC9B;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,YAAA,MAAM,KAAK,GAAqB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC/E,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACpF,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAA,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAC/H,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9C;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9C;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACxF,QAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,CAAC,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;QACpF,MAAM,SAAS,GAAG,iBAAiB,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE;IACnC;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QAC1B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE;QAChC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;AACjG,QAAA,MAAM,IAAI,GAAqB,KAAK,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAEjF,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;QAEA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACtB;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AACxF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;AAC7E,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5B;AAEQ,IAAA,YAAY,CAAC,KAAU,EAAA;QAC7B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA0B,CAAC,EAAE,IAAI,IAAI,IAAK,KAA0B,CAAC,KAAK,IAAI,IAAI,EAAE;AACpH,YAAA,OAAO,KAAyB;QAClC;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,GAAG,KAAK,CAAA,CAAE,CAAC,WAAW,EAAE,CAAC;AACtI,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,OAAO,EAAE,EAAE,EAAE,CAAA,EAAG,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE;IACrD;uGA/tBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,SAAA,EAtOrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqPa,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5Kf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqJT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EArOS,YAAY,wMAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuO9B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1OjC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,SAAA,EAC/B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAwErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+1BAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBAEA,YAAY;uBAAC,WAAW;;sBAExB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBACtC,SAAS;uBAAC,SAAS;;sBACnB,YAAY;uBAAC,YAAY;;sBA0DzB,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAc7C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MC/RjC,gBAAgB,CAAA;IAClB,KAAK,GAAkB,EAAE;IACzB,IAAI,GAAgB,MAAM;IAC1B,YAAY,GAAG,KAAK;AACpB,IAAA,IAAI;IACJ,UAAU,GAAG,qBAAqB;IAClC,YAAY,GAAG,oBAAoB;IACnC,QAAQ,GAAG,mBAAmB;IAC9B,SAAS,GAAG,oBAAoB;AAE/B,IAAA,MAAM,GAAG,IAAI,YAAY,EAAe;AACxC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAe;AAC1C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AACtC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAiB;AAEd,IAAA,WAAW;IAE1D,SAAS,GAAG,CAAC,CAAS,EAAE,IAAiB,KAAK,IAAI,CAAC,EAAE;AAErD,IAAA,WAAW,CAAC,IAAiB,EAAA;AAC3B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACjE;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACnE;IAEA,eAAe,CAAC,IAAiB,EAAE,KAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEA,aAAa,CAAC,KAAoB,EAAE,IAAiB,EAAA;AACnD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB;AAAO,aAAA,IAAI,GAAG,KAAK,YAAY,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC5C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,WAAW,EAAE;YAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC3C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;QACF;aAAO,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;YACnD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD;IACF;IAEQ,YAAY,CAAC,OAAoB,EAAE,SAAiB,EAAA;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE;QAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAA4B,CAAC;QACzD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;QACrC,IAAI,EAAE,KAAK,EAAE;IACf;IAEQ,WAAW,CAAC,KAAoB,EAAE,QAAiB,EAAA;AACzD,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACvB,gBAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;gBACrB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,CAAC;YAC9C;QACF;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAoB,EAAE,GAAA,GAAqB,EAAE,EAAA;AACpE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,CAAC,CAAC,QAAQ;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAS,EAAE,GAAG,CAAC;QAClE;AACA,QAAA,OAAO,GAAG;IACZ;uGA5FW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAgBM,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtFjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtES,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAwEX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA3E5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoET,EAAA,CAAA;AACF,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;ACxG/C;;AAEG;;;;"}