{"version":3,"file":"ag-virtual-scroll.mjs","sources":["../../../projects/library/src/lib/classes/ag-vs-render-event.class.ts","../../../projects/library/src/lib/pipes/math-abs.pipe.ts","../../../projects/library/src/lib/pipes/sticked-classes.pipe.ts","../../../projects/library/src/lib/_ag-virtual-scroll.module.ts","../../../projects/library/src/lib/ag-vs-item/ag-vs-item.component.ts","../../../projects/library/src/lib/ag-vs-item/ag-vs-item.component.html","../../../projects/library/src/lib/ag-virtual-scroll.component.ts","../../../projects/library/src/lib/ag-virtual-scroll.component.html","../../../projects/library/src/ag-virtual-scroll.ts"],"sourcesContent":["export class AgVsRenderEvent<T> {\n    public items: T[];\n    public startIndex: number;\n    public endIndex: number;\n    public length: number;\n\n    constructor(obj: Partial<AgVsRenderEvent<T>>) {\n        Object.assign(this, obj);\n    }\n}","import { Pipe, PipeTransform } from '@angular/core';\n@Pipe({\n    name: 'mathAbs',\n    standalone: false\n})\nexport class MathAbsPipe implements PipeTransform {\n\n   constructor() {}\n\n   transform(value: number) {\n      if (value)\n         return Math.abs(value);\n      return value;\n   }\n}","import { Pipe, PipeTransform } from '@angular/core';\n@Pipe({\n    name: 'stickedClasses',\n    standalone: false\n})\nexport class StickedClassesPipe implements PipeTransform {\n\n   private exceptionClasses: string[] = [\n      'ag-virtual-scroll-odd',\n      'ag-virtual-scroll-even',\n   ];\n\n   constructor() {}\n\n   transform(classes: string) {\n      if (classes) {\n         let splitted = classes.includes(' ') ? classes.split(' ') : [classes];\n         return splitted.filter(className => !this.exceptionClasses.some(exc => exc === className)).join(' ');\n      }\n      return '';\n   }\n}","import { NgModule, } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MathAbsPipe } from './pipes/math-abs.pipe';\nimport { StickedClassesPipe } from './pipes/sticked-classes.pipe';\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    declarations: [\n        // AgVirtualSrollComponent,\n\n        // Pipes\n        MathAbsPipe,\n        StickedClassesPipe\n    ],\n    exports: [\n        MathAbsPipe,\n        StickedClassesPipe\n        // AgVirtualSrollComponent,\n        // AgVsItemComponent\n    ],\n})\nexport class AgVirtualScrollModule { }\n","import { Component, Input, ElementRef, OnChanges, SimpleChanges, OnInit, ApplicationRef, ViewChild, TemplateRef, EventEmitter, AfterContentInit, forwardRef, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { AgVirtualScrollComponent } from '../ag-virtual-scroll.component';\nimport { CommonModule } from '@angular/common';\nimport { AgVirtualScrollModule } from '../_ag-virtual-scroll.module';\n\n@Component({\n    selector: 'ag-vs-item',\n    templateUrl: './ag-vs-item.component.html',\n    styles: [\n        `:host {\n            display: block;\n        }\n\n        :host > ng-template {\n            display: inherit;\n            width: inherit;\n            height: inherit;\n        }`\n    ],\n    host: {\n        '[class.ag-vs-item]': 'true',\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n      CommonModule,\n      AgVirtualScrollModule,\n    ],\n})\nexport class AgVsItemComponent implements OnInit, AfterContentInit, OnChanges {\n\n\t@ViewChild('temp', { static: false }) public temp: TemplateRef<any>;\n\n\t@Input('sticky') public sticky: boolean;\n\n\tpublic get el() { return this.elRef && this.elRef.nativeElement; }\n\n\tpublic viewOk: boolean = false;\n\n\tpublic onStickyChange = new EventEmitter<boolean>(false);\n\n\tpublic isSticked: boolean = false;\n\n\tpublic virtualIndex: number;\n\tpublic get index() { return this.parent.startIndex + (this.virtualIndex ?? 0); }\n\n\tconstructor(\n\t\t@Inject(forwardRef(() => AgVirtualScrollComponent))\n\t\tpublic parent: AgVirtualScrollComponent,\n\t\tpublic elRef: ElementRef<HTMLElement>,\n\t\tpublic appRef: ApplicationRef,\n\t) {\n\t}\n\n\tngOnInit() {\n\t}\n\n\tpublic ngAfterContentInit() {\n\t\tthis.updateIndex();\n\t}\n\n\tpublic ngOnChanges(changes: SimpleChanges) {\n\t\tif ('sticky' in changes)\n\t\t\tthis.onStickyChange.next(this.sticky);\n\t}\n\n\tpublic updateIndex() {\n\t\tthis.virtualIndex = Array.from(this.parent.itemsContainerEl?.children).indexOf(this.el);\n\t\tthis.manipuleRenderedItems();\n\t}\n\n\tpublic forceUpdateInputs() {\n\t\tthis.viewOk = false;\n\t\tthis.appRef.tick();\n\t\tthis.viewOk = true;\n\t}\n\n\tpublic getHtml() {\n\t\treturn this.el.outerHTML;\n\t}\n\n\tprivate manipuleRenderedItems() {\n\t\tif (this.el?.style.display !== 'none') {\n\t\t\tconst realIndex = this.index;\n\n\t\t\tconst className = (realIndex + 1) % 2 === 0 ? 'even' : 'odd';\n\t\t\tconst unclassName = className == 'even' ? 'odd' : 'even';\n\t\t\tconst getClassName = (classname: string) => `ag-virtual-scroll-${classname}`;\n\t\t\tthis.el.style.minHeight = `${this.parent.minRowHeight}px`;\n\t\t\tif (!this.el.classList.contains(getClassName(className))) this.el.classList.add(getClassName(className));\n\t\t\tif (this.el.classList.contains(getClassName(unclassName))) this.el.classList.remove(getClassName(unclassName));\n\t\t}\n\t}\n}\n","<ng-template #temp>\n  <ng-content></ng-content>\n</ng-template>\n\n@if (!isSticked) {\n  <ng-container [ngTemplateOutlet]=\"temp\"></ng-container>\n}","import {\n  Component,\n  Input,\n  ElementRef,\n  ViewChild,\n  AfterViewInit,\n  OnChanges,\n  SimpleChanges,\n  Renderer2,\n  OnInit,\n  Output,\n  EventEmitter,\n  QueryList,\n  ContentChildren,\n  OnDestroy,\n  AfterContentInit,\n  inject,\n  ChangeDetectionStrategy\n} from '@angular/core';\nimport {\n  fromEvent,\n  Observable,\n  Subject,\n  Subscription,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport { AgVsRenderEvent } from './classes/ag-vs-render-event.class';\nimport { AgVsItemComponent } from './ag-vs-item/ag-vs-item.component';\nimport { AgVirtualScrollModule } from './_ag-virtual-scroll.module';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'ag-virtual-scroll',\n  templateUrl: './ag-virtual-scroll.component.html',\n  styles: [\n    `\n      :host {\n        display: block;\n        position: relative;\n        width: 100%;\n        overflow-y: auto;\n      }\n\n      :host .content-height {\n        width: 1px;\n        opacity: 0;\n      }\n\n      :host .items-container {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n      }\n\n      :host::ng-deep {\n        table {\n          thead,\n          thead * {\n            position: relative;\n            z-index: 9;\n          }\n        }\n      }\n\n      :host::ng-deep .items-container.sticked-outside > .ag-vs-item:last-child {\n        position: absolute;\n        top: 0;\n        left: -100%;\n      }\n\n      :host::ng-deep > .ag-vs-item {\n        position: absolute;\n        top: 0;\n        left: 0;\n        box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);\n        background: #fff;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [CommonModule, AgVirtualScrollModule, AgVsItemComponent],\n})\nexport class AgVirtualScrollComponent\n  implements OnInit, AfterViewInit, AfterContentInit, OnChanges, OnDestroy\n{\n  @ViewChild('itemsContainer', { static: true })\n  private itemsContainerElRef: ElementRef<HTMLElement>;\n\n  @ContentChildren(AgVsItemComponent)\n  private queryVsItems: QueryList<AgVsItemComponent>;\n\n  @Input('min-row-height') public minRowHeight: number = 40;\n  @Input('height') public height: string = 'auto';\n  @Input('items') public originalItems: any[] = [];\n\n  @Output() private onItemsRender = new EventEmitter<AgVsRenderEvent<any>>();\n\n  public prevOriginalItems: any[] = [];\n  public items: any[] = [];\n  private subscripAllVsItem: {\n    comp: AgVsItemComponent;\n    subscrip: Subscription;\n  }[] = [];\n\n  private isInitialized = false;\n\n  private _indexCurrentSticky: number = -1;\n  private get indexCurrentSticky() {\n    return this._indexCurrentSticky;\n  }\n  private set indexCurrentSticky(value: number) {\n    this._indexCurrentSticky = value;\n\n    let currentIsPrev = value === this.indexPrevSticky;\n\n    if (!currentIsPrev && value >= 0) {\n      this.findCurrentStickyByIndex();\n    } else {\n      if (!currentIsPrev) this.indexNextSticky = -1;\n\n      if (this.currentStickyItem) this.currentStickyItem.comp.isSticked = false;\n\n      this.currentStickyItem = null;\n    }\n\n    this.prepareDataItems();\n  }\n\n  private get indexPrevSticky() {\n    return this.indexesPrevStick.length ? this.indexesPrevStick[0] : -1;\n  }\n  private set indexPrevSticky(value: number) {\n    if (value < 0) {\n      if (this.indexesPrevStick.length > 0)\n        this.indexesPrevStick = this.indexesPrevStick.slice(1);\n    } else if (!this.indexesPrevStick.some((index) => index === value))\n      this.indexesPrevStick.push(value);\n\n    if (this.indexesPrevStick.length)\n      this.indexesPrevStick = this.indexesPrevStick.sort((a, b) => b - a);\n  }\n\n  protected tBodyEl: HTMLHeadElement;\n  protected tableEl: HTMLHeadElement;\n  private indexNextSticky: number = -1;\n  private indexesPrevStick: number[] = [];\n  public currentStickyItem: StickyItem;\n  public currentScroll: number = 0;\n  public contentHeight: number = 0;\n  public paddingTop: number = 0;\n  public startIndex: number = 0;\n  public endIndex: number = 0;\n  protected isTable: boolean = false;\n  private scrollIsUp: boolean = false;\n  private previousItemsHeight: number[] = [];\n  private get itemsNoSticky() {\n    return this.currentStickyItem\n      ? this.items.filter(\n          (item) => this.originalItems[this.currentStickyItem.index] !== item,\n        )\n      : this.items;\n  }\n  public get vsItems() {\n    return (this.queryVsItems && this.queryVsItems.toArray()) || [];\n  }\n  public get numberItemsRendered(): number {\n    return this.endIndex - this.startIndex;\n  }\n  public get el() {\n    return this.elRef && this.elRef.nativeElement;\n  }\n  public get itemsContainerEl() {\n    return this.itemsContainerElRef && this.itemsContainerElRef.nativeElement;\n  }\n  private get heightIsInPixels() {\n    return this.height?.endsWith('px') || /^([\\s\\d]+)$/g.test(this.height);\n  }\n  private get heightValue() {\n    if (this.heightIsInPixels) {\n      const onlyNumber = (() => {\n        const matched = this.height?.match(\n          /[-]{0,1}[\\d]*[,]?[\\d]*[.]{0,1}[\\d]+/g,\n        );\n        return matched?.length > 0 ? matched[0] : '0';\n      })();\n      return parseFloat(onlyNumber);\n    }\n    return this.el?.clientHeight ?? 0;\n  }\n\n  private destroy$ = new Subject<void>();\n  private elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  ngAfterViewInit() {\n    this.queryVsItems.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      for (const item of this.vsItems) {\n        item.updateIndex();\n      }\n      if (this.vsItems.some((item) => item.sticky != null)) {\n        this.checkStickItem(this.scrollIsUp);\n      }\n    });\n    this.refreshData();\n  }\n\n  ngAfterContentInit(): void {\n  }\n\n  ngOnInit() {\n    fromEvent(this.el, 'scroll')\n      .pipe(\n        takeUntil(this.destroy$),\n        tap(() => this.onScroll()),\n      )\n      .subscribe();\n    this.isInitialized = true;\n    this.refreshData();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    let heightWasChanged = false;\n    const rerenderData = () => {\n      this.prepareDataItems();\n      this.checkIsTable();\n      this.queryVsItems.notifyOnChanges();\n      this.prevOriginalItems = this.originalItems;\n    };\n\n    if ('height' in changes) {\n      this.setHeight();\n      heightWasChanged = true;\n    }\n\n    if ('minRowHeight' in changes) {\n      if (typeof this.minRowHeight === 'string') {\n        if (parseFloat(this.minRowHeight))\n          this.minRowHeight = parseInt(this.minRowHeight);\n        else {\n          console.warn(\n            'The [min-row-height] @Input is invalid, the value must be of type \"number\".',\n          );\n          this.minRowHeight = 40;\n        }\n      }\n    }\n\n    if (this.isInitialized && 'originalItems' in changes) {\n      if (!this.originalItems) this.originalItems = [];\n\n      if (this.currentAndPrevItemsAreDiff()) {\n        this.previousItemsHeight = new Array(this.originalItems.length).fill(\n          null,\n        );\n\n        if (this.el.scrollTop !== 0) this.el.scrollTop = 0;\n        else {\n          this.currentScroll = 0;\n        }\n      } else {\n        if (this.originalItems.length > this.prevOriginalItems.length)\n          this.previousItemsHeight = this.previousItemsHeight.concat(\n            new Array(\n              this.originalItems.length - this.prevOriginalItems.length,\n            ).fill(null),\n          );\n      }\n    }\n\n    if (this.isInitialized) {\n      if (heightWasChanged) {\n        setTimeout(() => rerenderData());\n      } else {\n        rerenderData();\n      }\n    }\n  }\n\n  private currentAndPrevItemsAreDiff() {\n    if (this.originalItems.length >= this.prevOriginalItems.length) {\n      let begin = 0;\n      let end = this.prevOriginalItems.length - 1;\n      for (let i = begin; i <= end; i++) {\n        if (this.originalItems[i] !== this.prevOriginalItems[i]) return true;\n      }\n\n      return false;\n    }\n\n    return true;\n  }\n\n  public onScroll() {\n    this.refreshData();\n  }\n\n  public refreshData() {\n    let up = this.el.scrollTop < this.currentScroll;\n    this.currentScroll = this.el.scrollTop;\n\n    this.prepareDataItems();\n    this.isTable = this.checkIsTable();\n    this.scrollIsUp = up;\n  }\n\n  private prepareDataItems() {\n    this.registerCurrentItemsHeight();\n    this.prepareDataVirtualScroll();\n  }\n\n  private setHeight() {\n    this.height = this.height ?? '0';\n    this.height = this.height + (/^([\\s\\d]+)$/g.test(this.height) ? 'px' : '');\n    this.el.style.height = this.heightIsInPixels ? null : this.height;\n    this.el.style.maxHeight = this.height;\n  }\n\n  private registerCurrentItemsHeight() {\n    let children = this.getInsideChildrens();\n    for (let i = 0; i < children.length; i++) {\n      let child = children[i];\n      let realIndex = this.startIndex + i;\n      this.previousItemsHeight[realIndex] =\n        child.getBoundingClientRect().height;\n    }\n  }\n\n  private getDimensions() {\n    let dimensions = {\n      contentHeight: 0,\n      paddingTop: 0,\n      itemsThatAreGone: 0,\n    };\n\n    dimensions.contentHeight = this.originalItems.reduce((prev, curr, i) => {\n      let height = this.previousItemsHeight[i];\n      return prev + (height ? height : this.minRowHeight);\n    }, 0);\n\n    if (this.currentScroll >= this.minRowHeight) {\n      let newPaddingTop = 0;\n      let itemsThatAreGone = 0;\n      let initialScroll = this.currentScroll;\n\n      for (let h of this.previousItemsHeight) {\n        let height = h ? h : this.minRowHeight;\n        if (initialScroll >= height) {\n          newPaddingTop += height;\n          initialScroll -= height;\n          itemsThatAreGone++;\n        } else break;\n      }\n\n      dimensions.paddingTop = newPaddingTop;\n      dimensions.itemsThatAreGone = itemsThatAreGone;\n    }\n\n    return dimensions;\n  }\n\n  private prepareDataVirtualScroll() {\n    if (!this.el.style.maxHeight && this.height) {\n      this.setHeight();\n    }\n    if (!this.el.style.maxHeight) {\n      console.warn(\n        `The [height] @Input is invalid or wasn't defined. This @Input must be like this: height=\"500px\".`,\n      );\n      return;\n    }\n    if (!this.heightValue) {\n      return;\n    }\n    let dimensions = this.getDimensions();\n\n    const qnttyCanRender = this.numberItemsCanRender();\n    this.contentHeight = dimensions.contentHeight;\n    this.paddingTop = dimensions.paddingTop;\n    this.startIndex = dimensions.itemsThatAreGone;\n    this.endIndex =\n      Math.min(this.startIndex + qnttyCanRender, this.originalItems.length) - 1;\n\n    if (\n      this.indexCurrentSticky >= 0 &&\n      (this.startIndex > this.indexCurrentSticky ||\n        this.endIndex < this.indexCurrentSticky)\n    ) {\n      if (this.currentStickyItem) this.currentStickyItem.outside = true;\n      this.items = [\n        ...this.originalItems.slice(this.startIndex, this.endIndex + 1),\n        this.originalItems[this.indexCurrentSticky],\n      ];\n    } else {\n      if (this.currentStickyItem) this.currentStickyItem.outside = false;\n      this.items = this.originalItems.slice(this.startIndex, this.endIndex + 1);\n    }\n\n    this.onItemsRender.emit(\n      new AgVsRenderEvent<any>({\n        items: this.itemsNoSticky,\n        startIndex: this.startIndex,\n        endIndex: this.endIndex,\n        length: this.itemsNoSticky.length,\n      }),\n    );\n  }\n\n  private numberItemsCanRender() {\n    const division = this.heightValue / this.minRowHeight;\n    const remaining = division - Math.floor(division);\n    return Math.floor(division) + (remaining > 0 ? 1 : 0) + 1;\n  }\n\n  private getInsideChildrens(): HTMLCollection {\n    let childrens = this.itemsContainerEl.children;\n    if (childrens.length > 0) {\n      if (childrens[0].tagName.toUpperCase() === 'TABLE') {\n        childrens = childrens[0].children;\n        if (childrens.length > 0) {\n          if (childrens[0].tagName.toUpperCase() === 'TBODY')\n            childrens = childrens[0].children;\n          else childrens = childrens[1].children;\n        }\n      }\n    }\n\n    return childrens;\n  }\n\n  private checkIsTable() {\n    let children = this.itemsContainerEl.children;\n    if (children.length > 0) {\n      const el = children[0] as HTMLElement;\n      if (el.tagName.toUpperCase() === 'TABLE') {\n        el.style.transform = `translateY(${Math.abs(this.paddingTop)}px)`;\n        const thead = el.children[0] as HTMLElement;\n        if (thead) {\n          const top = Math.max(this.currentScroll - Math.abs(this.paddingTop), 0);\n          thead.style.transform = `translateY(${top}px)`;\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private checkStickItem(up: boolean) {\n    if (!this.isTable && this.vsItems.length > 0) {\n      this.updateVsItems()\n        .pipe(takeUntil(this.destroy$))\n        .subscribe(() => {\n          if (this.indexCurrentSticky >= 0) {\n            if (!this.currentStickyItem) {\n              this.findCurrentStickyByIndex(true);\n              return;\n            }\n\n            if (this.indexNextSticky === -1)\n              this.indexNextSticky = this.getIndexNextSticky(up);\n\n            if (this.currentStickIsEnded(up)) {\n              if (!up) {\n                this.indexPrevSticky = this.indexCurrentSticky;\n                this.indexCurrentSticky = this.getIndexCurrentSticky(up);\n                this.indexNextSticky = this.getIndexNextSticky(up);\n              } else {\n                if (this.indexPrevSticky >= 0) {\n                  this.setPrevAsCurrentSticky();\n                } else {\n                  this.indexCurrentSticky = this.getIndexCurrentSticky(up);\n\n                  if (this.indexCurrentSticky >= 0)\n                    this.indexNextSticky = this.getIndexNextSticky(up);\n                  else this.indexNextSticky = null;\n                }\n              }\n            }\n          } else {\n            this.indexCurrentSticky = this.getIndexCurrentSticky(up);\n            this.indexNextSticky = this.getIndexNextSticky(up);\n          }\n        });\n    } else {\n      this.indexCurrentSticky = -1;\n      this.indexNextSticky = -1;\n    }\n  }\n\n  private findCurrentStickyByIndex(afterPrev: boolean = false): void {\n    let vsIndex = 0;\n    let lastVsIndex = this.vsItems.length - 1;\n    let diffMaxItemsRender = this.vsItems.length - this.numberItemsCanRender();\n\n    if (\n      diffMaxItemsRender > 0 &&\n      !this.vsItems.some(\n        (vsItem, vsIndex) =>\n          this.indexCurrentSticky === this.startIndex + vsIndex,\n      )\n    ) {\n      vsIndex = lastVsIndex;\n      let vsItem = this.vsItems[lastVsIndex];\n      let index = this.indexCurrentSticky;\n      let offsetTop = this.previousItemsHeight\n        .slice(0, index)\n        .reduce((prev, curr) => prev + (curr ? curr : this.minRowHeight), 0);\n      vsItem.isSticked = true;\n      this.currentStickyItem = new StickyItem({\n        comp: vsItem,\n        index: index,\n        vsIndex: vsIndex,\n        offsetTop: offsetTop,\n        height: vsItem.el.offsetHeight,\n        outside: true,\n      });\n    } else {\n      for (let vsItem of this.vsItems) {\n        let index = this.startIndex + vsIndex;\n\n        if (this.indexCurrentSticky === index) {\n          let offsetTop = this.previousItemsHeight\n            .slice(0, index)\n            .reduce(\n              (prev, curr) => prev + (curr ? curr : this.minRowHeight),\n              0,\n            );\n          vsItem.isSticked = true;\n          this.currentStickyItem = new StickyItem({\n            comp: vsItem,\n            index: index,\n            vsIndex: vsIndex,\n            offsetTop: offsetTop,\n            height: vsItem.el.offsetHeight,\n          });\n          break;\n        }\n\n        vsIndex++;\n      }\n    }\n\n    if (afterPrev && this.currentStickyItem) {\n      let currentHeight = this.currentStickyItem.height;\n      let offsetBottom =\n        this.paddingTop +\n        currentHeight +\n        Math.abs(this.el.scrollTop - this.paddingTop);\n      let offsetTopNext =\n        this.indexNextSticky >= 0\n          ? this.previousItemsHeight\n              .slice(0, this.indexNextSticky)\n              .reduce(\n                (prev, curr) => prev + (curr ? curr : this.minRowHeight),\n                0,\n              )\n          : null;\n\n      if (offsetTopNext !== null && offsetBottom >= offsetTopNext) {\n        let newDiffTop = offsetBottom - offsetTopNext;\n        if (newDiffTop >= currentHeight) {\n          this.currentStickyItem.diffTop = currentHeight;\n        } else this.currentStickyItem.diffTop = newDiffTop;\n      } else this.currentStickyItem.diffTop = 0;\n    }\n  }\n\n  private setPrevAsCurrentSticky() {\n    let currentSticked =\n      this.currentStickyItem && this.currentStickyItem.comp.sticky;\n\n    if (currentSticked) this.indexNextSticky = this.indexCurrentSticky;\n\n    this.indexCurrentSticky = this.indexPrevSticky;\n    this.indexPrevSticky = -1;\n  }\n\n  private getIndexCurrentSticky(up: boolean) {\n    let vsIndex = 0;\n    for (let vsItem of this.vsItems) {\n      let index = vsIndex + this.startIndex;\n\n      let offsetTop = this.previousItemsHeight\n        .slice(0, index)\n        .reduce((prev, curr) => prev + (curr ? curr : this.minRowHeight), 0);\n\n      if (\n        vsItem &&\n        vsItem.sticky &&\n        this.el.scrollTop >= offsetTop &&\n        (this.indexCurrentSticky === -1 || index !== this.indexCurrentSticky)\n      )\n        return index;\n\n      vsIndex++;\n    }\n\n    return -1;\n  }\n\n  private getIndexNextSticky(up: boolean) {\n    if (this.indexCurrentSticky >= 0) {\n      let vsIndex = 0;\n\n      for (let vsItem of this.vsItems.slice(0, this.numberItemsCanRender())) {\n        let index = vsIndex + this.startIndex;\n\n        if (vsItem.sticky && index > this.indexCurrentSticky) return index;\n\n        vsIndex++;\n      }\n    }\n\n    return -1;\n  }\n\n  private currentStickIsEnded(up: boolean) {\n    let currentHeight = this.currentStickyItem.height;\n\n    if (!up || this.currentStickyItem.diffTop > 0) {\n      let offsetBottom =\n        this.paddingTop +\n        currentHeight +\n        Math.abs(this.el.scrollTop - this.paddingTop);\n      let offsetTopNext =\n        this.indexNextSticky >= 0\n          ? this.previousItemsHeight\n              .slice(0, this.indexNextSticky)\n              .reduce(\n                (prev, curr) => prev + (curr ? curr : this.minRowHeight),\n                0,\n              )\n          : null;\n\n      if (offsetTopNext !== null && offsetBottom >= offsetTopNext) {\n        let newDiffTop = offsetBottom - offsetTopNext;\n        if (newDiffTop >= currentHeight) {\n          this.currentStickyItem.diffTop = currentHeight;\n          return true;\n        } else this.currentStickyItem.diffTop = newDiffTop;\n      } else this.currentStickyItem.diffTop = 0;\n    } else {\n      let offsetBottom =\n        this.paddingTop + Math.abs(this.el.scrollTop - this.paddingTop);\n      if (offsetBottom <= this.currentStickyItem.offsetTop) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  private updateVsItems() {\n    return new Observable<void>((subscriber) => {\n      if (this.subscripAllVsItem.length) {\n        this.subscripAllVsItem.forEach((item) => item.subscrip.unsubscribe());\n        this.subscripAllVsItem = [];\n      }\n\n      let interval = setInterval(() => {\n        let diffMaxItemsRender =\n          this.vsItems.length - this.numberItemsCanRender();\n        let lastIndex = this.vsItems.length - 1;\n        let ok = this.vsItems.every((vsItem, vsIndex) => {\n          let index = this.startIndex + vsIndex;\n\n          if (diffMaxItemsRender > 0 && vsIndex === lastIndex)\n            index = this.indexCurrentSticky;\n\n          if (!this.currentStickyItem || vsItem !== this.currentStickyItem.comp)\n            vsItem.isSticked = false;\n\n          if (!this.subscripAllVsItem.some((item) => item.comp === vsItem))\n            this.subscripAllVsItem.push({\n              comp: vsItem,\n              subscrip: vsItem.onStickyChange.subscribe((sticky) => {\n                this.onStickyComponentChanged(vsItem, index);\n              }),\n            });\n\n          try {\n            vsItem.forceUpdateInputs();\n          } catch {\n            return false;\n          }\n\n          return true;\n        });\n\n        if (ok) {\n          clearInterval(interval);\n          subscriber.next();\n        }\n      });\n    });\n  }\n\n  private onStickyComponentChanged(vsItem: AgVsItemComponent, index: number) {\n    if (index === this.indexCurrentSticky) {\n      if (!vsItem.sticky) {\n        if (this.indexPrevSticky >= 0) {\n          this.setPrevAsCurrentSticky();\n        } else {\n          this.indexCurrentSticky = this.getIndexCurrentSticky(false);\n\n          if (this.indexCurrentSticky >= 0)\n            this.indexNextSticky = this.getIndexNextSticky(false);\n          else this.indexNextSticky = null;\n        }\n      }\n    } else if (\n      (this.indexCurrentSticky !== -1 && index < this.indexCurrentSticky) ||\n      index === this.indexPrevSticky\n    ) {\n      if (vsItem.sticky) this.indexPrevSticky = index;\n      else\n        this.indexesPrevStick = this.indexesPrevStick.filter(\n          (indexPrev) => indexPrev !== index,\n        );\n    } else if (\n      (this.indexCurrentSticky !== -1 && index > this.indexCurrentSticky) ||\n      index === this.indexNextSticky\n    ) {\n      if (\n        vsItem.sticky &&\n        (this.indexNextSticky === -1 || index < this.indexNextSticky)\n      )\n        this.indexNextSticky = index;\n      else if (!vsItem.sticky) this.indexNextSticky = -1;\n    } else return;\n\n    this.queryVsItems.notifyOnChanges();\n  }\n\n  ngOnDestroy() {\n    this.destroy$?.next();\n    this.destroy$?.complete();\n  }\n}\n\nexport class StickyItem {\n  comp: AgVsItemComponent;\n  index: number;\n  offsetTop: number = 0;\n  vsIndex: number;\n  diffTop: number = 0;\n  isUp: boolean = false;\n  height: number = 0;\n  outside: boolean = false;\n\n  constructor(obj?: Partial<StickyItem>) {\n    if (obj) Object.assign(this, obj);\n  }\n}\n","<div class=\"content-height\" [style.height.px]=\"contentHeight\"></div>\n<div\n  #itemsContainer\n  class=\"items-container\"\n  [style.transform]=\"!isTable && 'translateY(' + paddingTop + 'px)'\"\n  [class]=\"{ 'sticked-outside': $safeNavigationMigration(currentStickyItem?.outside) }\"\n>\n  <ng-content></ng-content>\n</div>\n@if (currentStickyItem?.comp && currentStickyItem.comp.isSticked) {\n  <ag-vs-item\n    [class]=\"currentStickyItem.comp.el.classList.value | stickedClasses\"\n    [style.top.px]=\"currentScroll - (currentStickyItem.diffTop ? currentStickyItem.diffTop : 0)\"\n    [style.height.px]=\"currentStickyItem.height\"\n    [style.minHeight.px]=\"currentStickyItem.height\"\n    >\n    <ng-container [ngTemplateOutlet]=\"currentStickyItem.comp.temp\"></ng-container>\n  </ag-vs-item>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.StickedClassesPipe"],"mappings":";;;;;;MAAa,eAAe,CAAA;AAMxB,IAAA,WAAA,CAAY,GAAgC,EAAA;AACxC,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5B;AACH;;MCJY,WAAW,CAAA;AAErB,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,SAAS,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,KAAK;AACN,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,OAAO,KAAK;IACf;8GARU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,kBAAkB,CAAA;AAO5B,IAAA,WAAA,GAAA;AALQ,QAAA,IAAA,CAAA,gBAAgB,GAAa;YAClC,uBAAuB;YACvB,wBAAwB;SAC1B;IAEc;AAEf,IAAA,SAAS,CAAC,OAAe,EAAA;QACtB,IAAI,OAAO,EAAE;YACV,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACrE,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvG;AACA,QAAA,OAAO,EAAE;IACZ;8GAfU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCoBY,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA;;;YAV1B,WAAW;YACX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAPlB,YAAY,CAAA,EAAA,OAAA,EAAA,CAUZ,WAAW;YACX;;;;AAKK,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAhB1B,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAgBP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlBjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;;;wBAIV,WAAW;wBACX;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,WAAW;wBACX;;;AAGH,qBAAA;AACJ,iBAAA;;;MCKY,iBAAiB,CAAA;AAM7B,IAAA,IAAW,EAAE,GAAA,EAAK,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AASjE,IAAA,IAAW,KAAK,GAAA,EAAK,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;AAE/E,IAAA,WAAA,CAEQ,MAAgC,EAChC,KAA8B,EAC9B,MAAsB,EAAA;QAFtB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,MAAM,GAAN,MAAM;QAbP,IAAA,CAAA,MAAM,GAAY,KAAK;AAEvB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,CAAU,KAAK,CAAC;QAEjD,IAAA,CAAA,SAAS,GAAY,KAAK;IAWjC;IAEA,QAAQ,GAAA;IACR;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,WAAW,EAAE;IACnB;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;QACxC,IAAI,QAAQ,IAAI,OAAO;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,IAAI,CAAC,qBAAqB,EAAE;IAC7B;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACnB;IAEO,OAAO,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS;IACzB;IAEQ,qBAAqB,GAAA;QAC5B,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;AACtC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;AAE5B,YAAA,MAAM,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK;AAC5D,YAAA,MAAM,WAAW,GAAG,SAAS,IAAI,MAAM,GAAG,KAAK,GAAG,MAAM;YACxD,MAAM,YAAY,GAAG,CAAC,SAAiB,KAAK,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE;AAC5E,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACxG,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/G;IACD;AA/DY,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBAkBpB,UAAU,CAAC,MAAM,wBAAwB,CAAC,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlBvC,IAAA,SAAA,IAAA,CAAA,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,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B9B,wJAMC,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDkBK,YAAY,qMACZ,qBAAqB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FAGd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAvB7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,IAAA,EAahB;AACF,wBAAA,oBAAoB,EAAE,MAAM;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,OAAA,EACrC;wBACP,YAAY;wBACZ,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,wJAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA;;0BAoBF,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,wBAAwB,CAAC;;sBAhBlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAEnC,KAAK;uBAAC,QAAQ;;;MEoDH,wBAAwB,CAAA;AApDrC,IAAA,WAAA,GAAA;QA6DkC,IAAA,CAAA,YAAY,GAAW,EAAE;QACjC,IAAA,CAAA,MAAM,GAAW,MAAM;QACxB,IAAA,CAAA,aAAa,GAAU,EAAE;AAE9B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAwB;QAEnE,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,KAAK,GAAU,EAAE;QAChB,IAAA,CAAA,iBAAiB,GAGnB,EAAE;QAEA,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,mBAAmB,GAAW,CAAC,CAAC;QAsChC,IAAA,CAAA,eAAe,GAAW,CAAC,CAAC;QAC5B,IAAA,CAAA,gBAAgB,GAAa,EAAE;QAEhC,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,UAAU,GAAW,CAAC;QACtB,IAAA,CAAA,UAAU,GAAW,CAAC;QACtB,IAAA,CAAA,QAAQ,GAAW,CAAC;QACjB,IAAA,CAAA,OAAO,GAAY,KAAK;QAC1B,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,mBAAmB,GAAa,EAAE;AAoClC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AAiiB5D,IAAA;AArnBC,IAAA,IAAY,kBAAkB,GAAA;QAC5B,OAAO,IAAI,CAAC,mBAAmB;IACjC;IACA,IAAY,kBAAkB,CAAC,KAAa,EAAA;AAC1C,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAEhC,QAAA,IAAI,aAAa,GAAG,KAAK,KAAK,IAAI,CAAC,eAAe;AAElD,QAAA,IAAI,CAAC,aAAa,IAAI,KAAK,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,wBAAwB,EAAE;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,aAAa;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,iBAAiB;gBAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK;AAEzE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B;QAEA,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,IAAY,eAAe,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE;IACA,IAAY,eAAe,CAAC,KAAa,EAAA;AACvC,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAChE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvE;AAeA,IAAA,IAAY,aAAa,GAAA;QACvB,OAAO,IAAI,CAAC;cACR,IAAI,CAAC,KAAK,CAAC,MAAM,CACf,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,IAAI;AAEvE,cAAE,IAAI,CAAC,KAAK;IAChB;AACA,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;IACjE;AACA,IAAA,IAAW,mBAAmB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;IACxC;AACA,IAAA,IAAW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;IAC/C;AACA,IAAA,IAAW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa;IAC3E;AACA,IAAA,IAAY,gBAAgB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxE;AACA,IAAA,IAAY,WAAW,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,MAAM,UAAU,GAAG,CAAC,MAAK;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAChC,sCAAsC,CACvC;AACD,gBAAA,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;YAC/C,CAAC,GAAG;AACJ,YAAA,OAAO,UAAU,CAAC,UAAU,CAAC;QAC/B;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE,YAAY,IAAI,CAAC;IACnC;IAKA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtE,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC/B,IAAI,CAAC,WAAW,EAAE;YACpB;AACA,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,kBAAkB,GAAA;IAClB;IAEA,QAAQ,GAAA;AACN,QAAA,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ;AACxB,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE3B,aAAA,SAAS,EAAE;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,gBAAgB,GAAG,KAAK;QAC5B,MAAM,YAAY,GAAG,MAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;AAC7C,QAAA,CAAC;AAED,QAAA,IAAI,QAAQ,IAAI,OAAO,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE;YAChB,gBAAgB,GAAG,IAAI;QACzB;AAEA,QAAA,IAAI,cAAc,IAAI,OAAO,EAAE;AAC7B,YAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;AACzC,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;oBAC/B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;qBAC5C;AACH,oBAAA,OAAO,CAAC,IAAI,CACV,6EAA6E,CAC9E;AACD,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;gBACxB;YACF;QACF;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,eAAe,IAAI,OAAO,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AAEhD,YAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;AACrC,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAClE,IAAI,CACL;AAED,gBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC;qBAC7C;AACH,oBAAA,IAAI,CAAC,aAAa,GAAG,CAAC;gBACxB;YACF;iBAAO;gBACL,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC3D,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CACxD,IAAI,KAAK,CACP,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;YACL;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,gBAAgB,EAAE;AACpB,gBAAA,UAAU,CAAC,MAAM,YAAY,EAAE,CAAC;YAClC;iBAAO;AACL,gBAAA,YAAY,EAAE;YAChB;QACF;IACF;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAC9D,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;AAC3C,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,IAAI;YACtE;AAEA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;IACpB;IAEO,WAAW,GAAA;QAChB,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS;QAEtC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEQ,SAAS,GAAA;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM;QACjE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;IACvC;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;AACjC,gBAAA,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM;QACxC;IACF;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,UAAU,GAAG;AACf,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,gBAAgB,EAAE,CAAC;SACpB;AAED,QAAA,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAI;YACrE,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACxC,YAAA,OAAO,IAAI,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACrD,CAAC,EAAE,CAAC,CAAC;QAEL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE;YAC3C,IAAI,aAAa,GAAG,CAAC;YACrB,IAAI,gBAAgB,GAAG,CAAC;AACxB,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa;AAEtC,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,gBAAA,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY;AACtC,gBAAA,IAAI,aAAa,IAAI,MAAM,EAAE;oBAC3B,aAAa,IAAI,MAAM;oBACvB,aAAa,IAAI,MAAM;AACvB,oBAAA,gBAAgB,EAAE;gBACpB;;oBAAO;YACT;AAEA,YAAA,UAAU,CAAC,UAAU,GAAG,aAAa;AACrC,YAAA,UAAU,CAAC,gBAAgB,GAAG,gBAAgB;QAChD;AAEA,QAAA,OAAO,UAAU;IACnB;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE;QAClB;QACA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,gGAAA,CAAkG,CACnG;YACD;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB;QACF;AACA,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AAErC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAClD,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,gBAAgB;AAC7C,QAAA,IAAI,CAAC,QAAQ;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;AAE3E,QAAA,IACE,IAAI,CAAC,kBAAkB,IAAI,CAAC;AAC5B,aAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB;gBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAC1C;YACA,IAAI,IAAI,CAAC,iBAAiB;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI;YACjE,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/D,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAC5C;QACH;aAAO;YACL,IAAI,IAAI,CAAC,iBAAiB;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK;AAClE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3E;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,eAAe,CAAM;YACvB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;AAClC,SAAA,CAAC,CACH;IACH;IAEQ,oBAAoB,GAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;QACrD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAC3D;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AAC9C,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAClD,gBAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ;AACjC,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;AAChD,wBAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ;;AAC9B,wBAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACxC;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AAC7C,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAgB;YACrC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AACxC,gBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;gBACjE,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAgB;gBAC3C,IAAI,KAAK,EAAE;oBACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACvE,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,WAAA,EAAc,GAAG,KAAK;gBAChD;AACA,gBAAA,OAAO,IAAI;YACb;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,cAAc,CAAC,EAAW,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa;AACf,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC7B,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE;AAChC,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,wBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;wBACnC;oBACF;AAEA,oBAAA,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC;wBAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;AAEpD,oBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE;wBAChC,IAAI,CAAC,EAAE,EAAE;AACP,4BAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB;4BAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;4BACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBACpD;6BAAO;AACL,4BAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE;gCAC7B,IAAI,CAAC,sBAAsB,EAAE;4BAC/B;iCAAO;gCACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAExD,gCAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC;oCAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;;AAC/C,oCAAA,IAAI,CAAC,eAAe,GAAG,IAAI;4BAClC;wBACF;oBACF;gBACF;qBAAO;oBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACpD;AACF,YAAA,CAAC,CAAC;QACN;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3B;IACF;IAEQ,wBAAwB,CAAC,YAAqB,KAAK,EAAA;QACzD,IAAI,OAAO,GAAG,CAAC;QACf,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAE1E,IACE,kBAAkB,GAAG,CAAC;YACtB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAChB,CAAC,MAAM,EAAE,OAAO,KACd,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,UAAU,GAAG,OAAO,CACxD,EACD;YACA,OAAO,GAAG,WAAW;YACrB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACtC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB;AACnC,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AAClB,iBAAA,KAAK,CAAC,CAAC,EAAE,KAAK;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACtE,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,UAAU,CAAC;AACtC,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY;AAC9B,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO;AAErC,gBAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;AACrC,oBAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AAClB,yBAAA,KAAK,CAAC,CAAC,EAAE,KAAK;yBACd,MAAM,CACL,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EACxD,CAAC,CACF;AACH,oBAAA,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,UAAU,CAAC;AACtC,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,OAAO,EAAE,OAAO;AAChB,wBAAA,SAAS,EAAE,SAAS;AACpB,wBAAA,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY;AAC/B,qBAAA,CAAC;oBACF;gBACF;AAEA,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACvC,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;AACjD,YAAA,IAAI,YAAY,GACd,IAAI,CAAC,UAAU;gBACf,aAAa;AACb,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAA,IAAI,aAAa,GACf,IAAI,CAAC,eAAe,IAAI;kBACpB,IAAI,CAAC;AACF,qBAAA,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe;qBAC7B,MAAM,CACL,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EACxD,CAAC;kBAEL,IAAI;YAEV,IAAI,aAAa,KAAK,IAAI,IAAI,YAAY,IAAI,aAAa,EAAE;AAC3D,gBAAA,IAAI,UAAU,GAAG,YAAY,GAAG,aAAa;AAC7C,gBAAA,IAAI,UAAU,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,aAAa;gBAChD;;AAAO,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,UAAU;YACpD;;AAAO,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,CAAC;QAC3C;IACF;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,cAAc,GAChB,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM;AAE9D,QAAA,IAAI,cAAc;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB;AAElE,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC3B;AAEQ,IAAA,qBAAqB,CAAC,EAAW,EAAA;QACvC,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC/B,YAAA,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU;AAErC,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AAClB,iBAAA,KAAK,CAAC,CAAC,EAAE,KAAK;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAEtE,YAAA,IACE,MAAM;AACN,gBAAA,MAAM,CAAC,MAAM;AACb,gBAAA,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,SAAS;AAC9B,iBAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC;AAErE,gBAAA,OAAO,KAAK;AAEd,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,kBAAkB,CAAC,EAAW,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE;YAChC,IAAI,OAAO,GAAG,CAAC;AAEf,YAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE;AACrE,gBAAA,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU;gBAErC,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB;AAAE,oBAAA,OAAO,KAAK;AAElE,gBAAA,OAAO,EAAE;YACX;QACF;QAEA,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,mBAAmB,CAAC,EAAW,EAAA;AACrC,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;QAEjD,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,CAAC,EAAE;AAC7C,YAAA,IAAI,YAAY,GACd,IAAI,CAAC,UAAU;gBACf,aAAa;AACb,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAA,IAAI,aAAa,GACf,IAAI,CAAC,eAAe,IAAI;kBACpB,IAAI,CAAC;AACF,qBAAA,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe;qBAC7B,MAAM,CACL,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EACxD,CAAC;kBAEL,IAAI;YAEV,IAAI,aAAa,KAAK,IAAI,IAAI,YAAY,IAAI,aAAa,EAAE;AAC3D,gBAAA,IAAI,UAAU,GAAG,YAAY,GAAG,aAAa;AAC7C,gBAAA,IAAI,UAAU,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,aAAa;AAC9C,oBAAA,OAAO,IAAI;gBACb;;AAAO,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,UAAU;YACpD;;AAAO,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,CAAC;QAC3C;aAAO;YACL,IAAI,YAAY,GACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YACjE,IAAI,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AACpD,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,UAAU,KAAI;AACzC,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACrE,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;YAC7B;AAEA,YAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC9B,gBAAA,IAAI,kBAAkB,GACpB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;gBACnD,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AACvC,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,KAAI;AAC9C,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO;AAErC,oBAAA,IAAI,kBAAkB,GAAG,CAAC,IAAI,OAAO,KAAK,SAAS;AACjD,wBAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB;oBAEjC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI;AACnE,wBAAA,MAAM,CAAC,SAAS,GAAG,KAAK;AAE1B,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9D,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,4BAAA,IAAI,EAAE,MAAM;4BACZ,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACnD,gCAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC;AAC9C,4BAAA,CAAC,CAAC;AACH,yBAAA,CAAC;AAEJ,oBAAA,IAAI;wBACF,MAAM,CAAC,iBAAiB,EAAE;oBAC5B;AAAE,oBAAA,MAAM;AACN,wBAAA,OAAO,KAAK;oBACd;AAEA,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;gBAEF,IAAI,EAAE,EAAE;oBACN,aAAa,CAAC,QAAQ,CAAC;oBACvB,UAAU,CAAC,IAAI,EAAE;gBACnB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,wBAAwB,CAAC,MAAyB,EAAE,KAAa,EAAA;AACvE,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE;oBAC7B,IAAI,CAAC,sBAAsB,EAAE;gBAC/B;qBAAO;oBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAE3D,oBAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC;wBAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;AAClD,wBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;gBAClC;YACF;QACF;AAAO,aAAA,IACL,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB;AAClE,YAAA,KAAK,KAAK,IAAI,CAAC,eAAe,EAC9B;YACA,IAAI,MAAM,CAAC,MAAM;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;AAE7C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAClD,CAAC,SAAS,KAAK,SAAS,KAAK,KAAK,CACnC;QACL;AAAO,aAAA,IACL,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB;AAClE,YAAA,KAAK,KAAK,IAAI,CAAC,eAAe,EAC9B;YACA,IACE,MAAM,CAAC,MAAM;AACb,iBAAC,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;AAE7D,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;iBACzB,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACpD;;YAAO;AAEP,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;IACrC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAC3B;8GA7oBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAMlB,iBAAiB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1FpC,6yBAmBA,0bD+DY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FAErD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApDpC,SAAS;+BACE,mBAAmB,EAAA,eAAA,EAgDZ,uBAAuB,CAAC,KAAK,EAAA,OAAA,EACrC,CAAC,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,6yBAAA,EAAA,MAAA,EAAA,CAAA,mYAAA,CAAA,EAAA;;sBAKhE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAG5C,eAAe;uBAAC,iBAAiB;;sBAGjC,KAAK;uBAAC,gBAAgB;;sBACtB,KAAK;uBAAC,QAAQ;;sBACd,KAAK;uBAAC,OAAO;;sBAEb;;MAmoBU,UAAU,CAAA;AAUrB,IAAA,WAAA,CAAY,GAAyB,EAAA;QAPrC,IAAA,CAAA,SAAS,GAAW,CAAC;QAErB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,IAAI,GAAY,KAAK;QACrB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,OAAO,GAAY,KAAK;AAGtB,QAAA,IAAI,GAAG;AAAE,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;IACnC;AACD;;AEjvBD;;AAEG;;;;"}