{"version":3,"file":"acrodata-gradient-picker.mjs","sources":["../../../projects/gradient-picker/src/lib/form-controls/gradient-form-group.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-input-field.ts","../../../projects/gradient-picker/src/lib/parser/utils.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-unit-input.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-checkbox.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-radio.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-icon-button.ts","../../../projects/gradient-picker/src/lib/gradient-colorpicker.ts","../../../projects/gradient-picker/src/lib/gradient-colorpicker.html","../../../projects/gradient-picker/src/lib/parser/linear.ts","../../../projects/gradient-picker/src/lib/parser/radial.ts","../../../projects/gradient-picker/src/lib/parser/conic.ts","../../../projects/gradient-picker/src/lib/utils.ts","../../../projects/gradient-picker/src/lib/gradient-stops.ts","../../../projects/gradient-picker/src/lib/gradient-stops.html","../../../projects/gradient-picker/src/lib/conic-gradient-picker.ts","../../../projects/gradient-picker/src/lib/conic-gradient-picker.html","../../../projects/gradient-picker/src/lib/linear-gradient-picker.ts","../../../projects/gradient-picker/src/lib/linear-gradient-picker.html","../../../projects/gradient-picker/src/lib/radial-gradient-picker.ts","../../../projects/gradient-picker/src/lib/radial-gradient-picker.html","../../../projects/gradient-picker/src/lib/gradient-picker.ts","../../../projects/gradient-picker/src/lib/gradient-picker.html","../../../projects/gradient-picker/src/public-api.ts","../../../projects/gradient-picker/src/acrodata-gradient-picker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'gradient-form-group',\n  standalone: true,\n  imports: [],\n  template: `\n    @if (label) {\n      <label class=\"gradient-form-label\" for=\"\" [title]=\"label\">{{ label }}</label>\n    }\n    <ng-content />\n  `,\n  styleUrl: './gradient-form-group.scss',\n  host: {\n    class: 'gradient-form-group',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientFormGroup {\n  @Input() label = '';\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'gradient-input-field',\n  standalone: true,\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-input-field.scss',\n  host: {\n    class: 'gradient-input-field',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientInputField {}\n","import {\n  Color,\n  ColorStop,\n  HueInterpolationMethod,\n  PositionKeyword,\n  PositionPropertyValue,\n} from './type';\n\nexport function split(input: string, separator: string | RegExp = ','): string[] {\n  const result = [];\n  let l = 0;\n  let parentCount = 0;\n  separator = new RegExp(separator);\n\n  for (let i = 0; i < input.length; i++) {\n    if (input[i] === '(') {\n      parentCount++;\n    } else if (input[i] === ')') {\n      parentCount--;\n    }\n\n    if (parentCount === 0 && separator.test(input[i])) {\n      result.push(input.slice(l, i).trim());\n      l = i + 1;\n    }\n  }\n\n  result.push(input.slice(l).trim());\n\n  return result;\n}\n\nexport function resolveStops(v: string[]): ColorStop[] {\n  const stops: ColorStop[] = [];\n\n  for (let i = 0, n = v.length; i < n; i++) {\n    const [color, offset, offset2] = split(v[i], /\\s+/);\n\n    if (isHint(v[i])) {\n      stops.push({\n        color: '',\n        offset: resolveLength(v[i]),\n        hint: resolveLength(v[i]),\n      });\n    } else {\n      stops.push({\n        color,\n        offset: resolveLength(offset),\n      });\n\n      if (offset2) {\n        stops.push({\n          color,\n          offset: resolveLength(offset2),\n        });\n      }\n    }\n  }\n\n  return stops;\n}\n\nconst REGEX = /^(-?\\d*\\.?\\d*)(%|vw|vh|px|em|rem|deg|rad|grad|turn|ch|vmin|vmax)?$/;\n\nfunction isHint(v: string) {\n  return REGEX.test(v);\n}\n\nexport function resolveLength(v?: string) {\n  if (!v) return undefined;\n\n  const [, value, unit] = v.trim().match(REGEX) || [];\n\n  return { value: Number(value), unit: unit ?? 'px' };\n}\n\nconst positionKeyword = new Set<PositionKeyword>(['center', 'left', 'top', 'right', 'bottom']);\n\nfunction isPositionKeyword(v: any): v is PositionKeyword {\n  return positionKeyword.has(v) || isNaN(parseFloat(v));\n}\n\nfunction extendPosition(v: string[]) {\n  const res: string[] = Array(2).fill('');\n  for (let i = 0; i < 2; i++) {\n    // If the x position is the length, the y position should also be the length\n    // at 100% => at 100% 50%\n    if (!v[i]) res[i] = i == 0 || isPositionKeyword(v[i - 1]) ? 'center' : '50%';\n    else res[i] = v[i];\n  }\n\n  return res;\n}\n\nexport function resolvePosition(v = '') {\n  let posArr = extendPosition(v.split(' ').filter(v => v));\n  // Correct the positions of x and y\n  // top center => center top\n  // center left => left center\n  if (['top', 'bottom'].includes(posArr[0]) || ['left', 'right'].includes(posArr[1])) {\n    posArr = posArr.reverse();\n  }\n\n  const position: {\n    x: PositionPropertyValue;\n    y: PositionPropertyValue;\n  } = {\n    x: { type: 'keyword', value: 'center' },\n    y: { type: 'keyword', value: 'center' },\n  };\n\n  position.x = isPositionKeyword(posArr[0])\n    ? { type: 'keyword', value: posArr[0] }\n    : { type: 'length', value: posArr[0] };\n\n  position.y = isPositionKeyword(posArr[1])\n    ? { type: 'keyword', value: posArr[1] }\n    : { type: 'length', value: posArr[1] };\n\n  return position;\n}\n\nexport function splitByColorInterp(input: string) {\n  const regex = /\\bin\\s+([a-z0-9-]+(?:\\s+(?:shorter|longer|increasing|decreasing)\\s+hue)?)\\b/i;\n\n  const match = input.match(regex);\n\n  if (!match) {\n    return [input];\n  }\n\n  // match[0]: in color interpolation method\n  const matchedStr = match[0];\n  // match[1]: color interpolation method\n  const colorInterpMethod = match[1];\n\n  const parts = input.split(matchedStr);\n  const remainingStr = (parts[0] + parts[1]).trim();\n\n  return [remainingStr, colorInterpMethod];\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/color-interpolation-method\nexport function resolveColorInterp(input: string): Color {\n  const [space, ...method] = input.split(' ');\n  return {\n    space: space as Color['space'],\n    method: method.length > 0 ? (method.join(' ') as HueInterpolationMethod) : undefined,\n  };\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { resolveLength } from '../parser/utils';\n\n@Component({\n  selector: 'gradient-unit-input',\n  standalone: true,\n  imports: [FormsModule],\n  template: `\n    <input type=\"number\" [(ngModel)]=\"value\" (change)=\"onValueChange()\" />\n    <select [(ngModel)]=\"unit\" (change)=\"onValueChange()\">\n      @for (unit of units; track $index) {\n        <option [value]=\"unit\">{{ unit }}</option>\n      }\n    </select>\n  `,\n  styleUrl: './gradient-unit-input.scss',\n  host: {\n    class: 'gradient-unit-input',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientUnitInput),\n      multi: true,\n    },\n  ],\n})\nexport class GradientUnitInput implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() units: string[] = [];\n\n  value: number | null = null;\n\n  unit = '';\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    const vu = resolveLength(value);\n    if (vu) {\n      this.value = vu.value;\n      this.unit = vu.unit;\n    }\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onValueChange() {\n    const value = this.value != null ? this.value + this.unit : '';\n    this.onChange(value);\n  }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: '[gradientCheckbox]',\n  standalone: true,\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-checkbox.scss',\n  host: {\n    class: 'gradient-checkbox',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientCheckbox {}\n","/* eslint-disable @angular-eslint/no-output-native */\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  Directive,\n  EventEmitter,\n  forwardRef,\n  inject,\n  InjectionToken,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nlet nextUniqueId = 0;\n\nexport class GradientRadioChange {\n  constructor(\n    public source: GradientRadioButton,\n    public value: any\n  ) {}\n}\n\nexport const GRADIENT_RADIO_GROUP = new InjectionToken<GradientRadioGroup>('GradientRadioGroup');\n\n@Directive({\n  selector: 'gradient-radio-group',\n  standalone: true,\n  host: {\n    class: 'gradient-radio-group',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientRadioGroup),\n      multi: true,\n    },\n    {\n      provide: GRADIENT_RADIO_GROUP,\n      useExisting: GradientRadioGroup,\n    },\n  ],\n})\nexport class GradientRadioGroup implements AfterContentInit, OnDestroy, ControlValueAccessor {\n  private _changeDetector = inject(ChangeDetectorRef);\n\n  private _isInitialized = false;\n\n  @ContentChildren(forwardRef(() => GradientRadioButton), { descendants: true })\n  _radios!: QueryList<GradientRadioButton>;\n\n  @Input()\n  get name() {\n    return this._name;\n  }\n  set name(value: string) {\n    this._name = value;\n    this._updateRadioButtonNames();\n  }\n  private _name = `gradient-radio-group-${nextUniqueId++}`;\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newValue: any) {\n    if (this._value !== newValue) {\n      // Set this before proceeding to ensure no circular loop occurs with selection.\n      this._value = newValue;\n\n      this._updateSelectedRadioFromValue();\n      this._checkSelectedRadioButton();\n    }\n  }\n  private _value: any = null;\n\n  @Input()\n  get selected() {\n    return this._selected;\n  }\n  set selected(selected: GradientRadioButton | null) {\n    this._selected = selected;\n    this.value = selected ? selected.value : null;\n    this._checkSelectedRadioButton();\n  }\n  private _selected: GradientRadioButton | null = null;\n\n  @Input({ transform: booleanAttribute })\n  get required() {\n    return this._required;\n  }\n  set required(value: boolean) {\n    this._required = value;\n    this._markRadiosForCheck();\n  }\n  private _required = false;\n\n  @Input({ transform: booleanAttribute })\n  get disabled() {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n    this._markRadiosForCheck();\n  }\n  private _disabled = false;\n\n  @Output() readonly change = new EventEmitter<GradientRadioChange>();\n\n  private _buttonChanges = Subscription.EMPTY;\n\n  _onChange: (value: any) => void = () => {};\n  _onTouched: () => void = () => {};\n\n  ngAfterContentInit() {\n    this._isInitialized = true;\n\n    this._buttonChanges = this._radios.changes.subscribe(() => {\n      if (this.selected && !this._radios.find(radio => radio === this.selected)) {\n        this._selected = null;\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._buttonChanges.unsubscribe();\n  }\n\n  _checkSelectedRadioButton() {\n    if (this._selected && !this._selected.checked) {\n      this._selected.checked = true;\n    }\n  }\n\n  _emitChangeEvent(): void {\n    if (this._isInitialized) {\n      this.change.emit(new GradientRadioChange(this._selected!, this.value));\n    }\n  }\n\n  _markRadiosForCheck() {\n    if (this._radios) {\n      this._radios.forEach(radio => radio._markForCheck());\n    }\n  }\n\n  writeValue(value: any): void {\n    this.value = value;\n    this._changeDetector.markForCheck();\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  private _updateRadioButtonNames(): void {\n    if (this._radios) {\n      this._radios.forEach(radio => {\n        radio.name = this.name;\n        radio._markForCheck();\n      });\n    }\n  }\n\n  private _updateSelectedRadioFromValue(): void {\n    // If the value already matches the selected radio, do nothing.\n    const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n\n    if (this._radios && !isAlreadySelected) {\n      this._selected = null;\n      this._radios.forEach(radio => {\n        radio.checked = this.value === radio.value;\n        if (radio.checked) {\n          this._selected = radio;\n        }\n      });\n    }\n  }\n}\n\n@Component({\n  selector: 'gradient-radio-button',\n  standalone: true,\n  template: `\n    <input\n      type=\"radio\"\n      [id]=\"inputId\"\n      [name]=\"name\"\n      [attr.name]=\"name\"\n      [attr.value]=\"value\"\n      [checked]=\"checked\"\n      [disabled]=\"disabled\"\n      [required]=\"required\"\n      (change)=\"_onInputChange($event)\"\n    />\n    <label [for]=\"inputId\">\n      <ng-content />\n    </label>\n  `,\n  styleUrl: './gradient-radio.scss',\n  host: {\n    class: 'gradient-radio-button',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientRadioButton implements OnInit, OnDestroy {\n  private _changeDetector = inject(ChangeDetectorRef);\n  private _radioDispatcher = inject(UniqueSelectionDispatcher);\n\n  private _uniqueId = `gradient-radio-${++nextUniqueId}`;\n\n  @Input() id = this._uniqueId;\n\n  @Input() name = '';\n\n  @Input({ transform: booleanAttribute })\n  get checked() {\n    return this._checked;\n  }\n  set checked(value: boolean) {\n    if (this._checked !== value) {\n      this._checked = value;\n      if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n        this.radioGroup.selected = this;\n      } else if (!value && this.radioGroup && this.radioGroup.value === this.value) {\n        // When unchecking the selected radio button, update the selected radio\n        // property on the group.\n        this.radioGroup.selected = null;\n      }\n\n      if (value) {\n        // Notify all radio buttons with the same name to un-check.\n        this._radioDispatcher.notify(this.id, this.name);\n      }\n      this._changeDetector.markForCheck();\n    }\n  }\n  private _checked = false;\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(value: any) {\n    if (this._value !== value) {\n      this._value = value;\n      if (this.radioGroup !== null) {\n        if (!this.checked) {\n          // Update checked when the value changed to match the radio group's value\n          this.checked = this.radioGroup.value === value;\n        }\n        if (this.checked) {\n          this.radioGroup.selected = this;\n        }\n      }\n    }\n  }\n  private _value: any = null;\n\n  @Input({ transform: booleanAttribute })\n  get required() {\n    return this._required || (this.radioGroup !== null && this.radioGroup.required);\n  }\n  set required(value: boolean) {\n    if (value !== this._required) {\n      this._changeDetector.markForCheck();\n    }\n    this._required = value;\n  }\n  private _required = false;\n\n  @Input({ transform: booleanAttribute })\n  get disabled() {\n    return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n  }\n  set disabled(value: boolean) {\n    this._setDisabled(value);\n  }\n  private _disabled = false;\n\n  @Output() readonly change = new EventEmitter<GradientRadioChange>();\n\n  radioGroup = inject(GRADIENT_RADIO_GROUP, { optional: true });\n\n  get inputId() {\n    return `${this.id || this._uniqueId}-input`;\n  }\n\n  private _removeUniqueSelectionListener: () => void = () => {};\n\n  ngOnInit(): void {\n    if (this.radioGroup) {\n      // If the radio is inside a radio group, determine if it should be checked\n      this.checked = this.radioGroup.value === this._value;\n\n      if (this.checked) {\n        this.radioGroup.selected = this;\n      }\n\n      // Copy name from parent radio group\n      this.name = this.radioGroup.name;\n    }\n\n    this._removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {\n      if (id !== this.id && name === this.name) {\n        this.checked = false;\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._removeUniqueSelectionListener();\n  }\n\n  private _emitChangeEvent(): void {\n    this.change.emit(new GradientRadioChange(this, this.value));\n  }\n\n  _onInputChange(event: Event) {\n    event.stopPropagation();\n\n    if (!this.checked && !this.disabled) {\n      const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n      this.checked = true;\n      this._emitChangeEvent();\n\n      if (this.radioGroup) {\n        this.radioGroup._onChange(this.value);\n        if (groupValueChanged) {\n          this.radioGroup._emitChangeEvent();\n        }\n      }\n    }\n  }\n\n  _markForCheck() {\n    this._changeDetector.markForCheck();\n  }\n\n  protected _setDisabled(value: boolean) {\n    if (this._disabled !== value) {\n      this._disabled = value;\n      this._changeDetector.markForCheck();\n    }\n  }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n  selector: 'gradient-icon-button',\n  standalone: true,\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-icon-button.scss',\n  host: {\n    class: 'gradient-icon-button',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientIconButton {}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  forwardRef,\n  inject,\n  Input,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport { ColorEvent } from 'ngx-color';\nimport { ColorChromeModule } from 'ngx-color/chrome';\n\n@Component({\n  selector: 'gradient-colorpicker-toggle',\n  standalone: true,\n  imports: [],\n  template: `\n    <button\n      type=\"button\"\n      [class.gradient-colorpicker-empty-color]=\"!color\"\n      [style.background-color]=\"color\"\n      (click)=\"onClick($event)\"\n      (dblclick)=\"onDblClick($event)\"\n    >\n      toggle\n    </button>\n  `,\n  host: {\n    class: 'gradient-colorpicker-toggle',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientColorpickerToggle implements OnInit {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject(ElementRef);\n\n  @Input('for') colorpicker: GradientColorpicker | null = null;\n\n  @Input() triggerEvent: 'click' | 'dblclick' = 'click';\n\n  @Input() overlayOrigin: CdkOverlayOrigin | ElementRef | HTMLElement = this.elementRef;\n\n  @Input() color = '';\n\n  ngOnInit(): void {\n    if (this.colorpicker) {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n    }\n  }\n\n  onClick(e: MouseEvent) {\n    if (this.colorpicker && this.triggerEvent === 'click') {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n      this.colorpicker.toggle();\n    }\n  }\n\n  onDblClick(e: MouseEvent) {\n    if (this.colorpicker && this.triggerEvent === 'dblclick') {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n      this.colorpicker.toggle();\n    }\n  }\n}\n\n@Component({\n  selector: 'gradient-colorpicker',\n  standalone: true,\n  imports: [FormsModule, ColorChromeModule, CdkConnectedOverlay],\n  templateUrl: './gradient-colorpicker.html',\n  styleUrl: './gradient-colorpicker.scss',\n  host: {\n    class: 'gradient-colorpicker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientColorpicker),\n      multi: true,\n    },\n  ],\n})\nexport class GradientColorpicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject(ElementRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() overlayOrigin: CdkOverlayOrigin | ElementRef | HTMLElement = this.elementRef;\n\n  isOpen = false;\n\n  color = '';\n\n  format: 'hex' | 'rgb' | 'hsl' | 'hsv' = 'hex';\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    if (value) {\n      this.color = value;\n      this.getFormat();\n    }\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onColorChange(e: ColorEvent) {\n    this.color = {\n      hex: e.color.rgb.a === 1 ? e.color.hex : new TinyColor(e.color.rgb).toHex8String(),\n      rgb: new TinyColor(e.color.rgb).toRgbString(),\n      hsl: new TinyColor(e.color.hsl).toHslString(),\n      hsv: new TinyColor(e.color.hsv).toHsvString(),\n    }[this.format];\n    this.cdr.markForCheck();\n    this.onChange(this.color);\n  }\n\n  getFormat() {\n    const color = new TinyColor(this.color);\n    if (color.format === 'rgb' || color.format === 'hsl' || color.format === 'hsv') {\n      this.format = color.format;\n    } else {\n      this.format = 'hex';\n    }\n    this.cdr.markForCheck();\n  }\n\n  open() {\n    this.isOpen = true;\n    this.cdr.markForCheck();\n  }\n\n  close() {\n    this.isOpen = false;\n    this.cdr.markForCheck();\n  }\n\n  toggle() {\n    this.isOpen = !this.isOpen;\n    this.cdr.markForCheck();\n  }\n}\n","<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  (overlayOutsideClick)=\"close()\"\n  (detach)=\"close()\"\n>\n  <color-chrome\n    class=\"gradient-colorpicker-panel\"\n    [color]=\"color\"\n    (onChangeComplete)=\"onColorChange($event)\"\n  />\n</ng-template>\n","import { LinearGradientResult, LinearOrientation } from './type';\nimport { resolveColorInterp, resolveStops, split, splitByColorInterp } from './utils';\n\nfunction normalizeDirectionalValue(v: string) {\n  v = v.trim().replace(/\\s+/g, ' ');\n  const map: Record<string, string> = {\n    'left top': 'top left',\n    'right top': 'top right',\n    'left bottom': 'bottom left',\n    'right bottom': 'bottom right',\n  };\n  return map[v] || v;\n}\n\nfunction resolveLinearOrientation(angle: string): LinearOrientation | null {\n  if (angle.startsWith('to ')) {\n    return {\n      type: 'directional',\n      value: normalizeDirectionalValue(angle.replace('to ', '')),\n    };\n  }\n\n  if (['turn', 'deg', 'grad', 'rad'].some(unit => angle.endsWith(unit))) {\n    return {\n      type: 'angular',\n      value: angle,\n    };\n  }\n\n  return null;\n}\n\nexport function parseLinearGradient(input: string): LinearGradientResult {\n  if (!/^(repeating-)?linear-gradient/.test(input))\n    throw new SyntaxError(`could not find syntax for this item: ${input}`);\n\n  const [, repeating, props] = input\n    .replace(/[\\n\\t]/g, '')\n    .match(/(repeating-)?linear-gradient\\((.+)\\)/)!;\n  const result: LinearGradientResult = {\n    repeating: Boolean(repeating),\n    orientation: { type: 'directional', value: 'bottom' },\n    stops: [],\n  };\n\n  const properties = split(props);\n\n  const [prefixStr, colorInterpStr] = splitByColorInterp(properties[0]);\n\n  const orientation = resolveLinearOrientation(prefixStr);\n  if (orientation) {\n    result.orientation = orientation;\n  }\n\n  if (colorInterpStr) {\n    result.color = resolveColorInterp(colorInterpStr);\n  }\n\n  if (orientation || colorInterpStr) {\n    properties.shift();\n  }\n\n  return { ...result, stops: resolveStops(properties) };\n}\n\nexport function stringifyLinearGradient(input: LinearGradientResult) {\n  const { repeating, orientation, color, stops } = input;\n\n  const type = repeating ? 'repeating-linear-gradient' : 'linear-gradient';\n\n  const prefixArr: string[] = [];\n\n  const orientationVal = orientation.value.trim()\n    ? orientation.type === 'angular'\n      ? orientation.value\n      : 'to ' + orientation.value\n    : '';\n\n  if (orientationVal) {\n    prefixArr.push(orientationVal);\n  }\n\n  if (color && color.space) {\n    prefixArr.push(`in ${color.space} ${color.method || ''}`.trim());\n  }\n\n  const props: string[] = [];\n\n  if (prefixArr.length > 0) {\n    props.push(prefixArr.join(' '));\n  }\n\n  const stopsStr = stops\n    .map(s => `${s.color} ${s.offset?.value ?? ''}${s.offset?.unit ?? ''}`.trim())\n    .join(', ');\n\n  props.push(stopsStr);\n\n  return `${type}(${props.join(', ')})`;\n}\n","import { RadialGradientResult, RgExtentKeyword } from './type';\nimport {\n  resolveColorInterp,\n  resolvePosition,\n  resolveStops,\n  split,\n  splitByColorInterp,\n} from './utils';\n\nconst rgExtentKeywords = new Set<RgExtentKeyword>([\n  'closest-corner',\n  'closest-side',\n  'farthest-corner',\n  'farthest-side',\n]);\n\nfunction isRgExtentKeyword(v: any): v is RgExtentKeyword {\n  return rgExtentKeywords.has(v);\n}\n\nfunction isColor(v: string) {\n  if (/(circle|ellipse|at|in)/.test(v) || rgExtentKeywords.has(v as RgExtentKeyword)) return false;\n  return /^(rgba?|hwb|hsl|lab|lch|oklab|color|#|[a-zA-Z]+)/.test(v);\n}\n\nexport function parseRadialGradient(input: string): RadialGradientResult {\n  if (!/(repeating-)?radial-gradient/.test(input))\n    throw new SyntaxError(`could not find syntax for this item: ${input}`);\n\n  const [, repeating, props] = input\n    .replace(/[\\n\\t]/g, '')\n    .match(/(repeating-)?radial-gradient\\((.+)\\)/)!;\n  const result: RadialGradientResult = {\n    repeating: Boolean(repeating),\n    shape: 'ellipse',\n    size: [\n      {\n        type: 'keyword',\n        value: 'farthest-corner',\n      },\n    ],\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [],\n  };\n\n  const properties = split(props);\n  // handle like radial-gradient(rgba(0,0,0,0), #ee7621)\n  if (isColor(properties[0])) {\n    return { ...result, stops: resolveStops(properties) };\n  }\n\n  const [prefixStr, colorInterpStr] = splitByColorInterp(properties[0]);\n\n  const prefix = prefixStr.split('at').map(v => v.trim());\n\n  const shape = ((prefix[0] || '').match(/(circle|ellipse)/) || [])[1];\n  const unitKeywordReg =\n    // eslint-disable-next-line max-len\n    /(-?\\d+\\.?\\d*(vw|vh|px|em|rem|%|rad|grad|turn|deg)?|closest-corner|closest-side|farthest-corner|farthest-side)/g;\n  const size: string[] = (prefix[0] || '').match(unitKeywordReg) || [];\n\n  if (!shape) {\n    if (size.length === 1 && !isRgExtentKeyword(size[0])) {\n      result.shape = 'circle';\n    } else {\n      result.shape = 'ellipse';\n    }\n  } else {\n    result.shape = shape as RadialGradientResult['shape'];\n  }\n\n  if (size.length === 0) {\n    size.push('farthest-corner');\n  }\n\n  result.size = size.map(v => {\n    if (isRgExtentKeyword(v)) {\n      return { type: 'keyword', value: v };\n    } else {\n      return { type: 'length', value: v };\n    }\n  });\n\n  result.position = resolvePosition(prefix[1]);\n\n  if (colorInterpStr) {\n    result.color = resolveColorInterp(colorInterpStr);\n  }\n\n  if (shape || size.length > 0 || prefix[1]) properties.shift();\n\n  return {\n    ...result,\n    stops: resolveStops(properties),\n  };\n}\n\nexport function stringifyRadialGradient(input: RadialGradientResult) {\n  const { repeating, shape, size, position, color, stops } = input;\n\n  const type = repeating ? 'repeating-radial-gradient' : 'radial-gradient';\n\n  const sizes = size.map(s => s.value);\n\n  const posX = position.x.value;\n  const posY = position.y.value;\n  const pos = posX.trim() || posY.trim() ? 'at ' + `${posX} ${posY}`.trim() : '';\n\n  const prefixArr = [`${shape} ${sizes.join(' ')} ${pos}`];\n\n  if (color && color.space) {\n    prefixArr.push(`in ${color.space} ${color.method || ''}`.trim());\n  }\n\n  const stopsStr = stops\n    .map(s => `${s.color} ${s.offset?.value ?? ''}${s.offset?.unit ?? ''}`.trim())\n    .join(', ');\n\n  return `${type}(${prefixArr.join(' ')}, ${stopsStr})`;\n}\n","import { ConicGradientResult } from './type';\nimport { resolveColorInterp, resolvePosition, resolveStops, split } from './utils';\n\nconst set = new Set(['from', 'in', 'at']);\n\nfunction resolvePrefix(k: string, props: string[], start: number, end: number) {\n  switch (k) {\n    case 'from':\n      return { angle: props.slice(start, end).join(' ') };\n    case 'at':\n      return { position: resolvePosition(props.slice(start, end).join(' ')) };\n    case 'in': {\n      const arr = props.slice(start, end);\n      return {\n        color: resolveColorInterp(arr.join(' ')),\n      };\n    }\n    default:\n      return null;\n  }\n}\n\nexport function parseConicGradient(input: string): ConicGradientResult {\n  if (!/(repeating-)?conic-gradient/.test(input))\n    throw new SyntaxError(`could not find syntax for this item: ${input}`);\n\n  const [, repeating, props] = input\n    .replace(/[\\n\\t]/g, '')\n    .match(/(repeating-)?conic-gradient\\((.+)\\)/)!;\n  const result: ConicGradientResult = {\n    repeating: Boolean(repeating),\n    angle: '0deg',\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [],\n  };\n\n  const properties = split(props).map(v => v.trim());\n\n  const prefix = split(properties[0], /\\s+/);\n\n  let k = '';\n  let j = 0;\n  for (let i = 0, n = prefix.length; i < n; i++) {\n    if (set.has(prefix[i])) {\n      if (i > 0) {\n        Object.assign(result, resolvePrefix(k, prefix, j, i));\n      }\n      k = prefix[i];\n      j = i + 1;\n    }\n  }\n\n  if (k) {\n    Object.assign(result, resolvePrefix(k, prefix, j, prefix.length));\n    properties.shift();\n  }\n\n  return { ...result, stops: resolveStops(properties) };\n}\n\nexport function stringifyConicGradient(input: ConicGradientResult) {\n  const { repeating, angle, position, color, stops } = input;\n\n  const type = repeating ? 'repeating-conic-gradient' : 'conic-gradient';\n\n  const prefixArr: string[] = [];\n\n  if (angle.trim()) {\n    prefixArr.push(`from ${angle}`);\n  }\n\n  const posX = position.x.value;\n  const posY = position.y.value;\n  const pos = posX.trim() || posY.trim() ? 'at ' + `${posX} ${posY}`.trim() : '';\n  if (pos) {\n    prefixArr.push(pos);\n  }\n\n  if (color && color.space) {\n    prefixArr.push(`in ${color.space} ${color.method || ''}`.trim());\n  }\n\n  const props: string[] = [];\n\n  if (prefixArr.length > 0) {\n    props.push(prefixArr.join(' '));\n  }\n\n  const stopsStr = stops\n    .map(s => `${s.color} ${s.offset?.value ?? ''}${s.offset?.unit ?? ''}`.trim())\n    .join(', ');\n\n  props.push(stopsStr);\n\n  return `${type}(${props.join(', ')})`;\n}\n","import { TinyColor } from '@ctrl/tinycolor';\nimport {\n  ColorStop,\n  GradientResult,\n  parseConicGradient,\n  parseLinearGradient,\n  parseRadialGradient,\n  stringifyConicGradient,\n  stringifyLinearGradient,\n  stringifyRadialGradient,\n} from './parser';\n\n/**\n * Reorder an element at a specified index by condition\n *\n * @param array The original array\n * @param index The element at this index will be checked and moved to its correct sorted location.\n * @param compareWith1 The comparison function used to determine if the element needs to move left.\n * @param compareWith2 The comparison function used to determine if the element needs to move right.\n * @param callback The callback function after the elements have been swapped.\n * @returns\n */\nexport function reorderElementByCondition<T = any>(\n  array: T[] = [],\n  index = 0,\n  compareWith1: (a: T, b: T) => boolean = (a, b) => a < b,\n  compareWith2: (a: T, b: T) => boolean = (a, b) => a > b,\n  callback?: (newIndex: number) => void\n): T[] {\n  // Make a copy to avoid modifying the original array reference\n  const newArr = [...array];\n\n  if (index < 0 || index >= newArr.length) {\n    return array;\n  }\n\n  // Now, we need to move this potentially out-of-place element\n  // to its correct sorted position.\n  // This is essentially an insertion sort pass for a single element.\n\n  let i = index;\n\n  while (i > 0 && compareWith1(newArr[i], newArr[i - 1])) {\n    // Swap elements\n    [newArr[i], newArr[i - 1]] = [newArr[i - 1], newArr[i]];\n    i--;\n    callback?.(i);\n  }\n\n  while (i < newArr.length - 1 && compareWith2(newArr[i], newArr[i + 1])) {\n    // Swap elements\n    [newArr[i], newArr[i + 1]] = [newArr[i + 1], newArr[i]];\n    i++;\n    callback?.(i);\n  }\n\n  return newArr;\n}\n\n/**\n * Linearly interpolate between two colors.\n *\n * @param fromColor The starting color in any format supported by TinyColor.\n * @param toColor The ending color in any format supported by TinyColor.\n * @param percentage The interpolation percentage between 0 (`fromColor`) and 1 (`toColor`)\n * @returns\n */\nexport function interpolateColor(fromColor: string, toColor: string, percentage = 0.5) {\n  const c1 = new TinyColor(fromColor);\n  const c2 = new TinyColor(toColor);\n\n  // Convert to premultiplied alpha\n  const c1_pre = {\n    r: c1.r * c1.a,\n    g: c1.g * c1.a,\n    b: c1.b * c1.a,\n    a: c1.a,\n  };\n  const c2_pre = {\n    r: c2.r * c2.a,\n    g: c2.g * c2.a,\n    b: c2.b * c2.a,\n    a: c2.a,\n  };\n\n  // Linearly interpolate the premultiplied RGBA components\n  const interpolatedR_pre = c1_pre.r * (1 - percentage) + c2_pre.r * percentage;\n  const interpolatedG_pre = c1_pre.g * (1 - percentage) + c2_pre.g * percentage;\n  const interpolatedB_pre = c1_pre.b * (1 - percentage) + c2_pre.b * percentage;\n  const interpolatedA = c1_pre.a * (1 - percentage) + c2_pre.a * percentage;\n\n  // Convert back to non-premultiplied alpha format (if alpha is not 0)\n  const finalR = interpolatedA > 0 ? interpolatedR_pre / interpolatedA : 0;\n  const finalG = interpolatedA > 0 ? interpolatedG_pre / interpolatedA : 0;\n  const finalB = interpolatedA > 0 ? interpolatedB_pre / interpolatedA : 0;\n\n  const finalColor = new TinyColor({\n    r: Math.round(finalR),\n    g: Math.round(finalG),\n    b: Math.round(finalB),\n    a: interpolatedA,\n  });\n\n  return interpolatedA === 1 ? finalColor.toHexString() : finalColor.toRgbString();\n}\n\n/**\n * Fill undefined offset in stops.\n *\n * @param stops\n * @returns\n */\nexport function fillUndefinedOffsets(stops: ColorStop[]): ColorStop[] {\n  if (stops.length === 0) return stops;\n\n  // Ensure the start and end positions are defined.\n  if (!stops[0] || stops[0].offset == null) {\n    stops[0].offset = { value: 0, unit: '%' };\n  }\n  const lastIndex = stops.length - 1;\n  if (!stops[lastIndex] || stops[lastIndex].offset == null) {\n    stops[lastIndex].offset = { value: 100, unit: '%' };\n  }\n\n  stops.forEach((item, index) => {\n    if (item.offset != null) return;\n\n    // Find the nearest defined offset to the left of the current item by using\n    // findIndex to search backward from the current index.\n    const startIndex = stops\n      .slice(0, index)\n      .reverse()\n      .findIndex(x => x.offset != null);\n    const prevDefinedIndex = index - 1 - startIndex;\n    const startOffsetValue = stops[prevDefinedIndex].offset!.value;\n\n    // Find the nearest defined offset to the right of the current item by using\n    // findIndex to search forward from the current index.\n    const endIndex = stops.slice(index + 1).findIndex(x => x.offset != null);\n    const nextDefinedIndex = index + 1 + endIndex;\n    const endOffsetValue = stops[nextDefinedIndex].offset!.value;\n\n    // Calculate the number of gaps between two defined values.\n    const totalGaps = nextDefinedIndex - prevDefinedIndex;\n    const totalDifference = endOffsetValue - startOffsetValue;\n\n    // Calculate the index of the current undefined value within the entire gaps.\n    const gapIndex = index - prevDefinedIndex;\n    const newOffsetValue = startOffsetValue + (gapIndex / totalGaps) * totalDifference;\n\n    item.offset = { value: newOffsetValue, unit: '%' };\n  });\n\n  return stops;\n}\n\n/**\n * Reverse the color stops array.\n *\n * @param stops\n * @returns\n */\nexport function reverseColorStops(stops: ColorStop[]) {\n  return stops.reverse().map(stop => {\n    if (stop.offset?.value != null) {\n      stop.offset.value = 100 - stop.offset.value;\n    }\n    return stop;\n  });\n}\n\n/**\n * Convert angle to percentage (e.g. `45deg`, `0.25turn`, `3.14rad`, `100grad`).\n *\n * @param value\n * @param unit\n * @returns\n */\nexport function angleToPercentage(value: number, unit: string) {\n  let degrees;\n  switch (unit) {\n    case 'deg':\n      degrees = value;\n      break;\n    case 'rad':\n      degrees = value * (180 / Math.PI);\n      break;\n    case 'turn':\n      degrees = value * 360;\n      break;\n    case 'grad':\n      degrees = value * 0.9;\n      break;\n    default:\n      return value;\n  }\n\n  // Calculate the percentage within 360 degrees and ensure the\n  // percentage value is between 0 and 100.\n  let percentage = (degrees / 360) * 100;\n\n  // Handle negative values or values exceeding 360 degrees by using\n  // the modulo operator to constrain the angle within [0, 360).\n  if (percentage < 0) {\n    percentage = (percentage % 100) + 100;\n  } else if (percentage >= 100) {\n    percentage = percentage % 100;\n  }\n\n  return percentage;\n}\n\n/**\n * Convert angle values in the gradient stops array to percentages.\n *\n * @param stops\n * @returns\n */\nexport function convertAngleToPercentage(stops: ColorStop[]) {\n  return stops.map(stop => {\n    if (stop.offset && angleUnits.includes(stop.offset.unit)) {\n      const { value, unit } = stop.offset;\n      stop.offset.value = angleToPercentage(value, unit);\n      stop.offset.unit = '%';\n    }\n    return stop;\n  });\n}\n\n/**\n * A unified function for parsing all gradient types.\n *\n * @param input\n */\nexport function parseGradient(input: string) {\n  if (input.includes('linear')) {\n    return parseLinearGradient(input);\n  } else if (input.includes('radial')) {\n    return parseRadialGradient(input);\n  } else if (input.includes('conic')) {\n    return parseConicGradient(input);\n  } else {\n    return null;\n  }\n}\n\n/**\n * A unified function for stringify all gradient types.\n *\n * @param input\n */\nexport function stringifyGradient(input: GradientResult) {\n  if ('orientation' in input) {\n    return stringifyLinearGradient(input);\n  } else if ('shape' in input) {\n    return stringifyRadialGradient(input);\n  } else if ('angle' in input) {\n    return stringifyConicGradient(input);\n  } else {\n    return '';\n  }\n}\n\nexport const angleUnits = ['deg', 'rad', 'turn', 'grad'];\nexport const lengthUnits = ['%', 'px', 'em', 'rem', 'vw', 'vh', 'ch'];\n\nexport const positionXKeywords = ['left', 'center', 'right'];\nexport const positionYKeywords = ['top', 'center', 'bottom'];\n\nexport const rectangularColorSpaces = [\n  'srgb',\n  'srgb-linear',\n  'display-p3',\n  'a98-rgb',\n  'prophoto-rgb',\n  'rec2020',\n  'lab',\n  'oklab',\n  'xyz',\n  'xyz-d50',\n  'xyz-d65',\n];\nexport const polarColorSpaces = ['hsl', 'hwb', 'lch', 'oklch'];\nexport const hueInterpolationMethods = [\n  'shorter hue',\n  'longer hue',\n  'increasing hue',\n  'decreasing hue',\n];\n","import { CdkDrag, CdkDragEnd, CdkDragMove } from '@angular/cdk/drag-drop';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GradientIconButton, GradientInputField } from './form-controls';\nimport { GradientColorpicker, GradientColorpickerToggle } from './gradient-colorpicker';\nimport { ColorStop } from './parser';\nimport {\n  convertAngleToPercentage,\n  fillUndefinedOffsets,\n  interpolateColor,\n  reorderElementByCondition,\n} from './utils';\n\nexport interface SliderColorStop extends ColorStop {\n  id: number;\n  offset: { value: number; unit: string };\n  position: { x: number; y: number };\n}\n\nlet uniqueIdCounter = 0;\n\n@Component({\n  selector: 'gradient-stops',\n  standalone: true,\n  imports: [\n    FormsModule,\n    CdkDrag,\n    CdkOverlayOrigin,\n    GradientColorpicker,\n    GradientColorpickerToggle,\n    GradientInputField,\n    GradientIconButton,\n  ],\n  templateUrl: './gradient-stops.html',\n  styleUrl: './gradient-stops.scss',\n  host: {\n    class: 'gradient-stops',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientStops),\n      multi: true,\n    },\n  ],\n})\nexport class GradientStops implements ControlValueAccessor, AfterViewInit, OnChanges {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  @ViewChild('sliderTrack') track?: ElementRef<HTMLElement>;\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() colorStops: ColorStop[] = [];\n\n  @Output() colorStopsChange = new EventEmitter<ColorStop[]>();\n\n  sliderColorStops: SliderColorStop[] = [];\n\n  trackWidth = 0;\n\n  gradientColor = '';\n\n  isDragging = false;\n\n  selectedStop?: SliderColorStop;\n\n  private onChange: (value: ColorStop[]) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['colorStops']) {\n      this.getStops();\n      this.getGradientColor();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.getStops();\n    this.getGradientColor();\n  }\n\n  writeValue(value: any): void {\n    if (Array.isArray(value)) {\n      this.colorStops = value;\n      this.getStops();\n      this.getGradientColor();\n    }\n  }\n\n  registerOnChange(fn: (value: ColorStop[]) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  getStops() {\n    if (!this.track) return;\n\n    this.trackWidth = this.track.nativeElement.offsetWidth;\n\n    this.sliderColorStops = fillUndefinedOffsets(convertAngleToPercentage(this.colorStops)).map(\n      stop => {\n        const offset = stop.offset || { value: 0, unit: '%' };\n        const posX = Math.min(\n          offset.unit === '%' ? (offset.value / 100) * this.trackWidth : offset.value,\n          this.trackWidth\n        );\n        return {\n          ...stop,\n          id: uniqueIdCounter++,\n          offset,\n          position: { x: posX, y: 0 },\n        };\n      }\n    );\n\n    this.selectedStop = undefined;\n\n    this.cdr.markForCheck();\n  }\n\n  getGradientColor(stops = this.sliderColorStops) {\n    const colors = stops.map(({ color, offset }) => `${color} ${offset.value}${offset.unit}`);\n    this.gradientColor = `linear-gradient(to right, ${colors.join(',')})`;\n    this.cdr.markForCheck();\n  }\n\n  getInsertStopColor(offsetX: number) {\n    const prevStop = this.sliderColorStops.filter(s => s.position.x < offsetX).pop();\n    const nextStop = this.sliderColorStops.filter(s => s.position.x > offsetX).shift();\n    if (prevStop && nextStop) {\n      const percentage =\n        (offsetX - prevStop.position.x) / (nextStop.position.x - prevStop.position.x);\n      return interpolateColor(prevStop.color, nextStop.color, percentage);\n    } else if (prevStop) {\n      return prevStop.color;\n    } else if (nextStop) {\n      return nextStop.color;\n    } else {\n      return '#000000';\n    }\n  }\n\n  getNewStopOffsetX(stops = this.sliderColorStops) {\n    if (stops.length === 0) return 0;\n\n    if (stops.length === 1) {\n      const newOffset = stops[0].offset.value < 50 ? 100 : 0;\n      return (newOffset / 100) * this.trackWidth;\n    }\n\n    const currentIndex = this.selectedStop\n      ? stops.findIndex(stop => stop === this.selectedStop)\n      : 0;\n    const neighborIndex = currentIndex === stops.length - 1 ? currentIndex - 1 : currentIndex + 1;\n    const newOffset = (stops[currentIndex].offset.value + stops[neighborIndex].offset.value) / 2;\n    return (newOffset / 100) * this.trackWidth;\n  }\n\n  addStop(e?: MouseEvent) {\n    const offsetX = e ? e.offsetX : this.getNewStopOffsetX();\n    const newStop = {\n      id: uniqueIdCounter++,\n      color: this.getInsertStopColor(offsetX),\n      offset: { value: Math.round((offsetX / this.trackWidth) * 100), unit: '%' },\n      position: { x: Math.round(offsetX), y: 0 },\n    };\n\n    this.selectedStop = newStop;\n    this.sliderColorStops.push(newStop);\n    this.sliderColorStops.sort(this.sortFn);\n\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onDragMove(e: CdkDragMove, stop: SliderColorStop, index: number) {\n    const position = e.source.getFreeDragPosition();\n    const xPercent = Math.round((position.x / this.trackWidth) * 100);\n    stop.offset.value = stop.offset.unit === '%' ? xPercent : position.x;\n    stop.position.x = position.x;\n\n    const stops = reorderElementByCondition<SliderColorStop>(\n      this.sliderColorStops,\n      index,\n      (a, b) => a.position.x < b.position.x,\n      (a, b) => a.position.x > b.position.x\n    );\n    this.getGradientColor(stops);\n    this.onStopsChange();\n  }\n\n  onDragEnd(e: CdkDragEnd, stop: SliderColorStop) {\n    this.sliderColorStops.sort(this.sortFn);\n    this.restoreFocus(`#gradient-colorpicker-toggle-${stop.id} button`);\n    this.onStopsChange();\n\n    this.isDragging = false;\n    this.cdr.markForCheck();\n  }\n\n  onDragHandleDown(e: MouseEvent, stop: SliderColorStop) {\n    e.stopPropagation();\n    this.selectedStop = stop;\n    this.isDragging = true;\n    this.cdr.markForCheck();\n  }\n\n  onDragHandleUp(e: MouseEvent) {\n    e.stopPropagation();\n    this.isDragging = false;\n    this.cdr.markForCheck();\n  }\n\n  onStopItemClick(stop: SliderColorStop) {\n    this.selectedStop = stop;\n  }\n\n  onStopColorChange(stop: SliderColorStop) {\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopOffsetChange(stop: SliderColorStop) {\n    stop.offset.value = Math.min(\n      stop.offset.unit === '%' ? 100 : this.trackWidth,\n      Math.max(0, stop.offset.value)\n    );\n    stop.position = {\n      x: stop.offset.unit === '%' ? (stop.offset.value / 100) * this.trackWidth : stop.offset.value,\n      y: 0,\n    };\n\n    this.sliderColorStops.sort(this.sortFn);\n    this.restoreFocus(`#gradient-stop-item-offset-${stop.id}`);\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopRemove(stop: SliderColorStop) {\n    if (this.sliderColorStops.length === 1) return;\n\n    this.sliderColorStops = this.sliderColorStops.filter(s => s !== stop);\n    this.selectedStop = undefined;\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopsChange() {\n    this.colorStops.forEach(() => this.colorStops.pop());\n    this.sliderColorStops.forEach((stop, i) => {\n      this.colorStops[i] = { color: stop.color, offset: stop.offset };\n    });\n    this.colorStops.sort(this.sortFn);\n    this.onChange(this.colorStops);\n    this.colorStopsChange.next(this.colorStops);\n  }\n\n  /** Move selected stop by arrow keys. */\n  moveStop(e: Event, stop: SliderColorStop, index: number, step: number) {\n    e.preventDefault();\n\n    stop.offset.value = Math.min(\n      stop.offset.unit === '%' ? 100 : this.trackWidth,\n      Math.max(0, stop.offset.value + step)\n    );\n    stop.position = {\n      x: stop.offset.unit === '%' ? (stop.offset.value / 100) * this.trackWidth : stop.offset.value,\n      y: 0,\n    };\n\n    const stops = reorderElementByCondition<SliderColorStop>(\n      this.sliderColorStops,\n      index,\n      (a, b) => a.position.x < b.position.x,\n      (a, b) => a.position.x > b.position.x,\n      () => {\n        this.sliderColorStops.sort(this.sortFn);\n        this.restoreFocus(`#gradient-colorpicker-toggle-${stop.id} button`);\n      }\n    );\n    this.getGradientColor(stops);\n    this.onStopsChange();\n  }\n\n  /** Restoring focus to the selected stop after sorting. */\n  restoreFocus(selector: string) {\n    setTimeout(() => {\n      const el = this.elementRef.nativeElement.querySelector(selector) as HTMLElement;\n      el.focus();\n    });\n  }\n\n  /** Comparison function to sort color stops by their offset values. */\n  sortFn = (a: ColorStop, b: ColorStop) => {\n    const aOffset = a.offset!;\n    const bOffset = b.offset!;\n    if (aOffset.unit === bOffset.unit) {\n      return aOffset.value - bOffset.value;\n    } else {\n      const aVal = aOffset.unit === '%' ? (aOffset.value / 100) * this.trackWidth : aOffset.value;\n      const bVal = bOffset.unit === '%' ? (bOffset.value / 100) * this.trackWidth : bOffset.value;\n      return aVal - bVal;\n    }\n  };\n}\n","<div class=\"gradient-stops-slider\" [class.is-dragging]=\"isDragging\">\n  <div class=\"gradient-stops-slider-bar\" (pointerdown)=\"addStop($event)\">\n    <div class=\"gradient-stops-slider-bar-bg\" [style.background-image]=\"gradientColor\"></div>\n  </div>\n\n  <div #sliderTrack class=\"gradient-stops-slider-track\">\n    @for (stop of sliderColorStops; track stop.id) {\n      <div\n        class=\"gradient-stops-slider-pointer\"\n        cdkDrag\n        cdkDragLockAxis=\"x\"\n        [cdkDragBoundary]=\"sliderTrack\"\n        [cdkDragFreeDragPosition]=\"stop.position\"\n        (cdkDragMoved)=\"onDragMove($event, stop, $index)\"\n        (cdkDragEnded)=\"onDragEnd($event, stop)\"\n      >\n        <div\n          #sliderThumb\n          class=\"gradient-stops-slider-thumb\"\n          [class.gradient-stops-slider-thumb-active]=\"stop === selectedStop\"\n          (pointerdown)=\"onDragHandleDown($event, stop)\"\n          (pointerup)=\"onDragHandleUp($event)\"\n        >\n          <gradient-colorpicker-toggle\n            [id]=\"'gradient-colorpicker-toggle-' + stop.id\"\n            [for]=\"gc\"\n            [color]=\"stop.color\"\n            [overlayOrigin]=\"sliderThumb\"\n            triggerEvent=\"dblclick\"\n            (keydown.backspace)=\"onStopRemove(stop)\"\n            (keydown.delete)=\"onStopRemove(stop)\"\n            (keydown.arrowup)=\"moveStop($event, stop, $index, 1)\"\n            (keydown.arrowright)=\"moveStop($event, stop, $index, 1)\"\n            (keydown.arrowdown)=\"moveStop($event, stop, $index, -1)\"\n            (keydown.arrowleft)=\"moveStop($event, stop, $index, -1)\"\n          />\n          <gradient-colorpicker\n            #gc\n            [(ngModel)]=\"stop.color\"\n            (ngModelChange)=\"onStopColorChange(stop)\"\n          />\n        </div>\n      </div>\n    }\n  </div>\n</div>\n\n<div class=\"gradient-stop-list-wrapper\">\n  <div class=\"gradient-stop-list-header\">\n    <span>Stops</span>\n    <gradient-icon-button>\n      <button type=\"button\" (click)=\"addStop()\" title=\"Add stop\" aria-label=\"Add stop\">\n        <svg viewBox=\"0 0 24 24\">\n          <path\n            fill=\"currentColor\"\n            d=\"M12 6a.5.5 0 0 1 .5.5v5h5a.5.5 0 0 1 0 1h-5v5a.5.5 0 0 1-1 0v-5h-5a.5.5 0 0 1 0-1h5v-5A.5.5 0 0 1 12 6\"\n            clip-rule=\"evenodd\"\n          />\n        </svg>\n      </button>\n    </gradient-icon-button>\n  </div>\n  <div class=\"gradient-stop-list-body\">\n    <ul class=\"gradient-stop-list\">\n      @for (stop of sliderColorStops; track stop.id) {\n        <li\n          class=\"gradient-stop-item\"\n          [class.gradient-stop-item-active]=\"stop === selectedStop\"\n          (pointerdown)=\"onStopItemClick(stop)\"\n        >\n          <gradient-input-field\n            class=\"gradient-stop-item-color\"\n            cdkOverlayOrigin\n            #colorField=\"cdkOverlayOrigin\"\n          >\n            <gradient-colorpicker-toggle\n              [for]=\"gc\"\n              [color]=\"stop.color\"\n              [overlayOrigin]=\"colorField\"\n            />\n            <gradient-colorpicker\n              #gc\n              [(ngModel)]=\"stop.color\"\n              (ngModelChange)=\"onStopColorChange(stop)\"\n            />\n            <input type=\"text\" [(ngModel)]=\"stop.color\" (change)=\"onStopColorChange(stop)\" />\n          </gradient-input-field>\n          <gradient-input-field class=\"gradient-stop-item-offset\">\n            <input\n              [id]=\"'gradient-stop-item-offset-' + stop.id\"\n              type=\"number\"\n              [min]=\"0\"\n              [max]=\"stop.offset.unit === '%' ? 100 : null\"\n              [(ngModel)]=\"stop.offset.value\"\n              (change)=\"onStopOffsetChange(stop)\"\n            />\n            <select [(ngModel)]=\"stop.offset.unit\" (change)=\"onStopOffsetChange(stop)\">\n              <option value=\"%\">%</option>\n              <option value=\"px\">px</option>\n            </select>\n          </gradient-input-field>\n          <gradient-icon-button>\n            @if (sliderColorStops.length > 1) {\n              <button\n                type=\"button\"\n                (click)=\"onStopRemove(stop)\"\n                title=\"Remove stop\"\n                aria-label=\"Remove stop\"\n              >\n                <svg viewBox=\"0 0 24 24\">\n                  <path\n                    fill=\"currentColor\"\n                    d=\"M6 12a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11A.5.5 0 0 1 6 12\"\n                  />\n                </svg>\n              </button>\n            }\n          </gradient-icon-button>\n        </li>\n      }\n    </ul>\n  </div>\n</div>\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport { ConicGradientResult, parseConicGradient, stringifyConicGradient } from './parser';\nimport {\n  angleUnits,\n  hueInterpolationMethods,\n  lengthUnits,\n  polarColorSpaces,\n  positionXKeywords,\n  positionYKeywords,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'conic-gradient-picker',\n  standalone: true,\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientIconButton,\n  ],\n  templateUrl: './conic-gradient-picker.html',\n  styleUrl: './conic-gradient-picker.scss',\n  host: {\n    class: 'conic-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ConicGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class ConicGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  conicGradient: ConicGradientResult = {\n    repeating: false,\n    angle: '',\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [{ color: '#000000' }],\n  };\n\n  value = '';\n\n  angleUnits = angleUnits;\n\n  lengthUnits = lengthUnits;\n\n  posXOptions = positionXKeywords;\n\n  posYOptions = positionYKeywords;\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.conicGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value || 'conic-gradient(transparent, #000000)';\n    this.conicGradient = parseConicGradient(this.value);\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this.value = stringifyConicGradient(this.conicGradient);\n    this.onChange(this.value);\n  }\n\n  reverseStops() {\n    this.conicGradient.stops = reverseColorStops(this.conicGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.conicGradient.color) {\n      this.conicGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  switchPositionType() {\n    const hasKeywordPosition =\n      this.conicGradient.position.x.type === 'keyword' ||\n      this.conicGradient.position.y.type === 'keyword';\n    if (hasKeywordPosition) {\n      this.conicGradient.position = {\n        x: { type: 'length', value: '50%' },\n        y: { type: 'length', value: '50%' },\n      };\n    } else {\n      this.conicGradient.position = {\n        x: { type: 'keyword', value: 'center' },\n        y: { type: 'keyword', value: 'center' },\n      };\n    }\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Angle\">\n  <gradient-unit-input\n    [units]=\"angleUnits\"\n    [(ngModel)]=\"conicGradient.angle\"\n    (ngModelChange)=\"onGradientChange()\"\n  />\n</gradient-form-group>\n\n<gradient-form-group label=\"Position\">\n  @if (conicGradient.position.x.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.position.x.value\" (change)=\"onGradientChange()\">\n        @for (posX of posXOptions; track $index) {\n          <option [value]=\"posX\">{{ posX }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"conicGradient.position.x.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n  @if (conicGradient.position.y.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.position.y.value\" (change)=\"onGradientChange()\">\n        @for (posY of posYOptions; track $index) {\n          <option [value]=\"posY\">{{ posY }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"conicGradient.position.y.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchPositionType()\"\n      title=\"Switch position type\"\n      aria-label=\"Switch position type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (conicGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"conicGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"conicGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"conicGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport { LinearGradientResult, parseLinearGradient, stringifyLinearGradient } from './parser';\nimport {\n  angleUnits,\n  hueInterpolationMethods,\n  polarColorSpaces,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'linear-gradient-picker',\n  standalone: true,\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientIconButton,\n  ],\n  templateUrl: './linear-gradient-picker.html',\n  styleUrl: './linear-gradient-picker.scss',\n  host: {\n    class: 'linear-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => LinearGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class LinearGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  linearGradient: LinearGradientResult = {\n    repeating: false,\n    orientation: { type: 'directional', value: '' },\n    stops: [{ color: '#000000' }],\n  };\n\n  value = '';\n\n  angleUnits = angleUnits;\n\n  directionOptions = [\n    { label: '↑ top', value: 'top' },\n    { label: '↗ top right', value: 'top right' },\n    { label: '→ right', value: 'right' },\n    { label: '↘ bottom right', value: 'bottom right' },\n    { label: '↓ bottom', value: 'bottom' },\n    { label: '↙ bottom left', value: 'bottom left' },\n    { label: '← left', value: 'left' },\n    { label: '↖ top left', value: 'top left' },\n  ];\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.linearGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value || 'linear-gradient(transparent, #000000)';\n    this.linearGradient = parseLinearGradient(this.value);\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this.value = stringifyLinearGradient(this.linearGradient);\n    this.onChange(this.value);\n  }\n\n  reverseStops() {\n    this.linearGradient.stops = reverseColorStops(this.linearGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.linearGradient.color) {\n      this.linearGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  switchOrientationType() {\n    const isAngularOrientation = this.linearGradient.orientation.type === 'angular';\n    this.linearGradient.orientation.type = isAngularOrientation ? 'directional' : 'angular';\n    this.linearGradient.orientation.value = isAngularOrientation ? 'bottom' : '180deg';\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Angle\">\n  @if (linearGradient.orientation.type === 'angular') {\n    <gradient-unit-input\n      [units]=\"angleUnits\"\n      [(ngModel)]=\"linearGradient.orientation.value\"\n      (ngModelChange)=\"onGradientChange()\"\n    />\n  } @else {\n    <gradient-input-field>\n      <select [(ngModel)]=\"linearGradient.orientation.value\" (change)=\"onGradientChange()\">\n        @for (direction of directionOptions; track $index) {\n          <option [value]=\"direction.value\">{{ direction.label }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchOrientationType()\"\n      title=\"Switch orientation type\"\n      aria-label=\"Switch orientation type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (linearGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"linearGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"linearGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"linearGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"linearGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientRadioButton,\n  GradientRadioGroup,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport { parseRadialGradient, RadialGradientResult, stringifyRadialGradient } from './parser';\nimport {\n  hueInterpolationMethods,\n  lengthUnits,\n  polarColorSpaces,\n  positionXKeywords,\n  positionYKeywords,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'radial-gradient-picker',\n  standalone: true,\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientRadioGroup,\n    GradientRadioButton,\n    GradientIconButton,\n  ],\n  templateUrl: './radial-gradient-picker.html',\n  styleUrl: './radial-gradient-picker.scss',\n  host: {\n    class: 'radial-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RadialGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class RadialGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  radialGradient: RadialGradientResult = {\n    repeating: false,\n    shape: 'ellipse',\n    size: [],\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [{ color: '#000000' }],\n  };\n\n  value = '';\n\n  sizeKeywords = ['farthest-corner', 'farthest-side', 'closest-corner', 'closest-side'];\n\n  lengthUnits = lengthUnits;\n\n  posXOptions = positionXKeywords;\n\n  posYOptions = positionYKeywords;\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.radialGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value || 'radial-gradient(transparent, #000000)';\n    this.radialGradient = parseRadialGradient(this.value);\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this.value = stringifyRadialGradient(this.radialGradient);\n    this.onChange(this.value);\n  }\n\n  reverseStops() {\n    this.radialGradient.stops = reverseColorStops(this.radialGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.radialGradient.color) {\n      this.radialGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  switchSizeType() {\n    const hasKeywordSize = this.radialGradient.size.some(size => size.type === 'keyword');\n    if (hasKeywordSize) {\n      this.radialGradient.size = [\n        { type: 'length', value: '50%' },\n        { type: 'length', value: '50%' },\n      ];\n    } else {\n      this.radialGradient.size = [{ type: 'keyword', value: 'farthest-corner' }];\n    }\n    this.onGradientChange();\n  }\n\n  switchPositionType() {\n    const hasKeywordPosition =\n      this.radialGradient.position.x.type === 'keyword' ||\n      this.radialGradient.position.y.type === 'keyword';\n    if (hasKeywordPosition) {\n      this.radialGradient.position = {\n        x: { type: 'length', value: '50%' },\n        y: { type: 'length', value: '50%' },\n      };\n    } else {\n      this.radialGradient.position = {\n        x: { type: 'keyword', value: 'center' },\n        y: { type: 'keyword', value: 'center' },\n      };\n    }\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Shape\">\n  <gradient-radio-group [(ngModel)]=\"radialGradient.shape\" (change)=\"onGradientChange()\">\n    <gradient-radio-button value=\"ellipse\">Ellipse</gradient-radio-button>\n    <gradient-radio-button value=\"circle\">Circle</gradient-radio-button>\n  </gradient-radio-group>\n</gradient-form-group>\n\n<gradient-form-group label=\"Size\">\n  @for (size of radialGradient.size; track $index) {\n    @if (size.type === 'keyword') {\n      <gradient-input-field>\n        <select [(ngModel)]=\"size.value\" (change)=\"onGradientChange()\">\n          @for (sk of sizeKeywords; track $index) {\n            <option [value]=\"sk\">{{ sk }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    } @else {\n      <gradient-unit-input\n        [units]=\"lengthUnits\"\n        [(ngModel)]=\"size.value\"\n        (change)=\"onGradientChange()\"\n      />\n    }\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchSizeType()\"\n      title=\"Switch size type\"\n      aria-label=\"Switch size type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-form-group label=\"Position\">\n  @if (radialGradient.position.x.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.position.x.value\" (change)=\"onGradientChange()\">\n        @for (posX of posXOptions; track $index) {\n          <option [value]=\"posX\">{{ posX }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"radialGradient.position.x.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n  @if (radialGradient.position.y.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.position.y.value\" (change)=\"onGradientChange()\">\n        @for (posY of posYOptions; track $index) {\n          <option [value]=\"posY\">{{ posY }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"radialGradient.position.y.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchPositionType()\"\n      title=\"Switch position type\"\n      aria-label=\"Switch position type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (radialGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"radialGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"radialGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"radialGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ConicGradientPicker } from './conic-gradient-picker';\nimport { GradientFormGroup, GradientRadioButton, GradientRadioGroup } from './form-controls';\nimport { LinearGradientPicker } from './linear-gradient-picker';\nimport { GradientType } from './parser';\nimport { RadialGradientPicker } from './radial-gradient-picker';\nimport { parseGradient, stringifyGradient } from './utils';\n\n@Component({\n  selector: 'gradient-picker',\n  standalone: true,\n  imports: [\n    FormsModule,\n    LinearGradientPicker,\n    RadialGradientPicker,\n    ConicGradientPicker,\n    GradientFormGroup,\n    GradientRadioGroup,\n    GradientRadioButton,\n  ],\n  templateUrl: './gradient-picker.html',\n  styleUrl: './gradient-picker.scss',\n  host: {\n    class: 'gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class GradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  types = [\n    { label: 'Linear', value: 'linear' },\n    { label: 'Radial', value: 'radial' },\n    { label: 'Conic', value: 'conic' },\n  ];\n\n  type: GradientType = 'linear';\n\n  gradient = {\n    linear: 'linear-gradient(transparent, #000000)',\n    radial: 'radial-gradient(transparent, #000000)',\n    conic: 'conic-gradient(transparent, #000000)',\n  };\n\n  value = this.gradient[this.type];\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    if (!value) {\n      this.type = 'linear';\n    } else if (value.includes('linear')) {\n      this.type = 'linear';\n    } else if (value.includes('radial')) {\n      this.type = 'radial';\n    } else if (value.includes('conic')) {\n      this.type = 'conic';\n    }\n    if (value) {\n      this.value = this.gradient[this.type] = value;\n    }\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onValueChange() {\n    this.value = this.gradient[this.type];\n    this.onChange(this.value);\n  }\n\n  onTypeChange() {\n    // Preserve the color stops when switching types\n    const { repeating, color, stops } = parseGradient(this.value)!;\n\n    const result = parseGradient(this.gradient[this.type])!;\n    result.repeating = repeating;\n    result.color = color;\n    result.stops = stops;\n    this.gradient[this.type] = stringifyGradient(result);\n\n    this.onValueChange();\n  }\n}\n","<gradient-form-group label=\"Type\">\n  <gradient-radio-group [(ngModel)]=\"type\" (ngModelChange)=\"onTypeChange()\">\n    @for (t of types; track $index) {\n      <gradient-radio-button [value]=\"t.value\">{{ t.label }}</gradient-radio-button>\n    }\n  </gradient-radio-group>\n</gradient-form-group>\n\n@if (type === 'linear') {\n  <linear-gradient-picker [(ngModel)]=\"gradient.linear\" (ngModelChange)=\"onValueChange()\" />\n} @else if (type === 'radial') {\n  <radial-gradient-picker [(ngModel)]=\"gradient.radial\" (ngModelChange)=\"onValueChange()\" />\n} @else if (type === 'conic') {\n  <conic-gradient-picker [(ngModel)]=\"gradient.conic\" (ngModelChange)=\"onValueChange()\" />\n}\n","/*\n * Public API Surface of gradient-picker\n */\n\nexport * from './lib/gradient-picker';\nexport * from './lib/gradient-stops';\nexport * from './lib/gradient-colorpicker';\nexport * from './lib/linear-gradient-picker';\nexport * from './lib/radial-gradient-picker';\nexport * from './lib/conic-gradient-picker';\nexport * from './lib/form-controls';\nexport * from './lib/parser';\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAmBa,iBAAiB,CAAA;IACnB,KAAK,GAAG,EAAE,CAAC;uGADT,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAblB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACnB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;;;;GAKT,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,qBAAqB;AAC7B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,CAAA;8BAGtC,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MCJK,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAVnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,guCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACpB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;GAET,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC9B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,guCAAA,CAAA,EAAA,CAAA;;;SCNjC,KAAK,CAAC,KAAa,EAAE,YAA6B,GAAG,EAAA;IACnE,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,IAAA,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AAElC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACpB,YAAA,WAAW,EAAE,CAAC;SACf;AAAM,aAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC3B,YAAA,WAAW,EAAE,CAAC;SACf;AAED,QAAA,IAAI,WAAW,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACX;KACF;AAED,IAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnC,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAEK,SAAU,YAAY,CAAC,CAAW,EAAA;IACtC,MAAM,KAAK,GAAgB,EAAE,CAAC;AAE9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,aAAA,CAAC,CAAC;SACJ;aAAM;YACL,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;AACL,gBAAA,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;AAC9B,aAAA,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE;gBACX,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK;AACL,oBAAA,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;AAC/B,iBAAA,CAAC,CAAC;aACJ;SACF;KACF;AAED,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,KAAK,GAAG,oEAAoE,CAAC;AAEnF,SAAS,MAAM,CAAC,CAAS,EAAA;AACvB,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAEK,SAAU,aAAa,CAAC,CAAU,EAAA;AACtC,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS,CAAC;AAEzB,IAAA,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAEpD,IAAA,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE/F,SAAS,iBAAiB,CAAC,CAAM,EAAA;AAC/B,IAAA,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,CAAW,EAAA;IACjC,MAAM,GAAG,GAAa,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;;;AAG1B,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;;YACxE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB;AAED,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAEe,SAAA,eAAe,CAAC,CAAC,GAAG,EAAE,EAAA;IACpC,IAAI,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;AAIzD,IAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AAClF,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;KAC3B;AAED,IAAA,MAAM,QAAQ,GAGV;QACF,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;QACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;KACxC,CAAC;IAEF,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,UAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AACvC,UAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,UAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AACvC,UAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAEzC,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEK,SAAU,kBAAkB,CAAC,KAAa,EAAA;IAC9C,MAAM,KAAK,GAAG,8EAA8E,CAAC;IAE7F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC;KAChB;;AAGD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;AAE5B,IAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACtC,IAAA,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAElD,IAAA,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED;AACM,SAAU,kBAAkB,CAAC,KAAa,EAAA;AAC9C,IAAA,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO;AACL,QAAA,KAAK,EAAE,KAAuB;AAC9B,QAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAA4B,GAAG,SAAS;KACrF,CAAC;AACJ;;MC9Ga,iBAAiB,CAAA;AACpB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;IAEhD,KAAK,GAAa,EAAE,CAAC;IAE9B,KAAK,GAAkB,IAAI,CAAC;IAE5B,IAAI,GAAG,EAAE,CAAC;AAEF,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;SACrB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,aAAa,GAAA;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtB;uGAvCU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAGR,gBAAgB,CAXzB,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EApBS,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,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,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAuBV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EACZ,QAAA,EAAA,CAAA;;;;;;;GAOT,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,qBAAqB;AAC7B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,m2CAAA,CAAA,EAAA,CAAA;8BAKuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAE7B,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MC5BK,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAVjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mQAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAClB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;GAET,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC3B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,mQAAA,CAAA,EAAA,CAAA;;;ACdjD;AAwBA,IAAI,YAAY,GAAG,CAAC,CAAC;MAER,mBAAmB,CAAA;AAErB,IAAA,MAAA,CAAA;AACA,IAAA,KAAA,CAAA;IAFT,WACS,CAAA,MAA2B,EAC3B,KAAU,EAAA;QADV,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;QAC3B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;KACf;AACL,CAAA;MAEY,oBAAoB,GAAG,IAAI,cAAc,CAAqB,oBAAoB,EAAE;MAoBpF,kBAAkB,CAAA;AACrB,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5C,cAAc,GAAG,KAAK,CAAC;AAG/B,IAAA,OAAO,CAAkC;AAEzC,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;AACO,IAAA,KAAK,GAAG,CAAA,qBAAA,EAAwB,YAAY,EAAE,EAAE,CAAC;AAEzD,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,QAAa,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;;AAE5B,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YAEvB,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACrC,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC;KACF;IACO,MAAM,GAAQ,IAAI,CAAC;AAE3B,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,QAAoC,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;IACO,SAAS,GAA+B,IAAI,CAAC;AAErD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IACO,SAAS,GAAG,KAAK,CAAC;AAE1B,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IACO,SAAS,GAAG,KAAK,CAAC;AAEP,IAAA,MAAM,GAAG,IAAI,YAAY,EAAuB,CAAC;AAE5D,IAAA,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC;AAE5C,IAAA,SAAS,GAAyB,MAAK,GAAG,CAAC;AAC3C,IAAA,UAAU,GAAe,MAAK,GAAG,CAAC;IAElC,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAE3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YACxD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE;AACzE,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;AACH,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACnC;IAED,yBAAyB,GAAA;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;SAC/B;KACF;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACxE;KACF;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;SACtD;KACF;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KACrC;AAED,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KACrC;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,gBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,KAAK,CAAC,aAAa,EAAE,CAAC;AACxB,aAAC,CAAC,CAAC;SACJ;KACF;IAEO,6BAA6B,GAAA;;AAEnC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;AAE1F,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC3B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC3C,gBAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;iBACxB;AACH,aAAC,CAAC,CAAC;SACJ;KACF;uGA/IU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EA4CT,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAUhB,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAlEzB,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,WAAW,EAAE,kBAAkB;AAChC,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAOiC,mBAAmB,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAL1C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC9B,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAoB,kBAAA;AAChC,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;8BAOC,OAAO,EAAA,CAAA;sBADN,eAAe;uBAAC,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;gBAIzE,IAAI,EAAA,CAAA;sBADP,KAAK;gBAWF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAgBF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAYF,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAWlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAUnB,MAAM,EAAA,CAAA;sBAAxB,MAAM;;MA4GI,mBAAmB,CAAA;AACtB,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC5C,IAAA,gBAAgB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAErD,IAAA,SAAS,GAAG,CAAA,eAAA,EAAkB,EAAE,YAAY,EAAE,CAAC;AAE9C,IAAA,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;IAEpB,IAAI,GAAG,EAAE,CAAC;AAEnB,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IACD,IAAI,OAAO,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACpE,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;aACjC;AAAM,iBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;;;AAG5E,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;aACjC;YAED,IAAI,KAAK,EAAE;;AAET,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAClD;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;SACrC;KACF;IACO,QAAQ,GAAG,KAAK,CAAC;AAEzB,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;oBAEjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC;iBAChD;AACD,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACjC;aACF;SACF;KACF;IACO,MAAM,GAAQ,IAAI,CAAC;AAE3B,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACjF;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;SACrC;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IACO,SAAS,GAAG,KAAK,CAAC;AAE1B,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACjF;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC1B;IACO,SAAS,GAAG,KAAK,CAAC;AAEP,IAAA,MAAM,GAAG,IAAI,YAAY,EAAuB,CAAC;IAEpE,UAAU,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9D,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAC;KAC7C;AAEO,IAAA,8BAA8B,GAAe,MAAK,GAAG,CAAC;IAE9D,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;AAErD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;aACjC;;YAGD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;SAClC;AAED,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,KAAI;AAC9E,YAAA,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACH,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;QACT,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACvC;IAEO,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7D;AAED,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAClF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAExB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,iBAAiB,EAAE;AACrB,oBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;iBACpC;aACF;SACF;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KACrC;AAES,IAAA,YAAY,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;SACrC;KACF;uGA3IU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2HAUV,gBAAgB,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EA4ChB,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAYhB,gBAAgB,CAzF1B,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+qCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1B/B,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EACN,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;GAeT,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,uBAAuB;AAC/B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+qCAAA,CAAA,EAAA,CAAA;8BAQtC,EAAE,EAAA,CAAA;sBAAV,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGF,OAAO,EAAA,CAAA;sBADV,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAyBlC,KAAK,EAAA,CAAA;sBADR,KAAK;gBAqBF,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAalC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBASnB,MAAM,EAAA,CAAA;sBAAxB,MAAM;;;MC5RI,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAVnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+uBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACpB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;GAET,EAEK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC9B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+uBAAA,CAAA,EAAA,CAAA;;;MCyBpC,yBAAyB,CAAA;AAC5B,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAE1B,WAAW,GAA+B,IAAI,CAAC;IAEpD,YAAY,GAAyB,OAAO,CAAC;AAE7C,IAAA,aAAa,GAAgD,IAAI,CAAC,UAAU,CAAC;IAE7E,KAAK,GAAG,EAAE,CAAC;IAEpB,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;SACrD;KACF;AAED,IAAA,OAAO,CAAC,CAAa,EAAA;QACnB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YACrD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;SAC3B;KACF;AAED,IAAA,UAAU,CAAC,CAAa,EAAA;QACtB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;YACxD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;SAC3B;KACF;uGA9BU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAjB1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,KAAA,EAAA,aAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,6BAA6B;AACrC,qBAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA,CAAA;8BAKe,WAAW,EAAA,CAAA;sBAAxB,KAAK;uBAAC,KAAK,CAAA;gBAEH,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;;MA0CK,mBAAmB,CAAA;AACtB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;AAEhD,IAAA,aAAa,GAAgD,IAAI,CAAC,UAAU,CAAC;IAEtF,MAAM,GAAG,KAAK,CAAC;IAEf,KAAK,GAAG,EAAE,CAAC;IAEX,MAAM,GAAkC,KAAK,CAAC;AAEtC,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,aAAa,CAAC,CAAa,EAAA;QACzB,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE;AAClF,YAAA,GAAG,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;AAC7C,YAAA,GAAG,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;AAC7C,YAAA,GAAG,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;AAC9C,SAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,SAAS,GAAA;QACP,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE;AAC9E,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;SAC5B;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;uGAxEU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAIV,gBAAgB,CAZzB,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzFH,0VAaA,ED8DY,MAAA,EAAA,CAAA,kyBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,sIAAE,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAgBlD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAGxD,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC9B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,0VAAA,EAAA,MAAA,EAAA,CAAA,kyBAAA,CAAA,EAAA,CAAA;8BAMuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAE7B,aAAa,EAAA,CAAA;sBAArB,KAAK;;;AE9FR,SAAS,yBAAyB,CAAC,CAAS,EAAA;AAC1C,IAAA,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClC,IAAA,MAAM,GAAG,GAA2B;AAClC,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,aAAa,EAAE,aAAa;AAC5B,QAAA,cAAc,EAAE,cAAc;KAC/B,CAAC;AACF,IAAA,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa,EAAA;AAC7C,IAAA,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QAC3B,OAAO;AACL,YAAA,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SAC3D,CAAC;KACH;IAED,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACrE,OAAO;AACL,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;KACH;AAED,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAEK,SAAU,mBAAmB,CAAC,KAAa,EAAA;AAC/C,IAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9C,QAAA,MAAM,IAAI,WAAW,CAAC,wCAAwC,KAAK,CAAA,CAAE,CAAC,CAAC;AAEzE,IAAA,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK;AAC/B,SAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,KAAK,CAAC,sCAAsC,CAAE,CAAC;AAClD,IAAA,MAAM,MAAM,GAAyB;AACnC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;QAC7B,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrD,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhC,IAAA,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtE,IAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,WAAW,EAAE;AACf,QAAA,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;KAClC;IAED,IAAI,cAAc,EAAE;AAClB,QAAA,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;KACnD;AAED,IAAA,IAAI,WAAW,IAAI,cAAc,EAAE;QACjC,UAAU,CAAC,KAAK,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;AACxD,CAAC;AAEK,SAAU,uBAAuB,CAAC,KAA2B,EAAA;IACjE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEvD,MAAM,IAAI,GAAG,SAAS,GAAG,2BAA2B,GAAG,iBAAiB,CAAC;IAEzE,MAAM,SAAS,GAAa,EAAE,CAAC;AAE/B,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,UAAE,WAAW,CAAC,IAAI,KAAK,SAAS;cAC5B,WAAW,CAAC,KAAK;AACnB,cAAE,KAAK,GAAG,WAAW,CAAC,KAAK;UAC3B,EAAE,CAAC;IAEP,IAAI,cAAc,EAAE;AAClB,QAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAChC;AAED,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;AACxB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAI,CAAA,EAAA,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;AAE3B,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACjC;IAED,MAAM,QAAQ,GAAG,KAAK;AACnB,SAAA,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,IAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;AACxC;;AC1FA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAkB;IAChD,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,eAAe;AAChB,CAAA,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,CAAM,EAAA;AAC/B,IAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAA;AACxB,IAAA,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAoB,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AACjG,IAAA,OAAO,kDAAkD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAEK,SAAU,mBAAmB,CAAC,KAAa,EAAA;AAC/C,IAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,QAAA,MAAM,IAAI,WAAW,CAAC,wCAAwC,KAAK,CAAA,CAAE,CAAC,CAAC;AAEzE,IAAA,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK;AAC/B,SAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,KAAK,CAAC,sCAAsC,CAAE,CAAC;AAClD,IAAA,MAAM,MAAM,GAAyB;AACnC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7B,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACJ,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,iBAAiB;AACzB,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxC,SAAA;AACD,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;;IAEhC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1B,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;KACvD;AAED,IAAA,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,IAAA,MAAM,cAAc;;AAElB,IAAA,gHAAgH,CAAC;AACnH,IAAA,MAAM,IAAI,GAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAErE,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACpD,YAAA,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;SACzB;aAAM;AACL,YAAA,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;SAC1B;KACF;SAAM;AACL,QAAA,MAAM,CAAC,KAAK,GAAG,KAAsC,CAAC;KACvD;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC9B;IAED,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;AACzB,QAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACtC;aAAM;YACL,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACrC;AACH,KAAC,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,cAAc,EAAE;AAClB,QAAA,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;KACnD;IAED,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAE9D,OAAO;AACL,QAAA,GAAG,MAAM;AACT,QAAA,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;KAChC,CAAC;AACJ,CAAC;AAEK,SAAU,uBAAuB,CAAC,KAA2B,EAAA;AACjE,IAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,GAAG,2BAA2B,GAAG,iBAAiB,CAAC;AAEzE,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAErC,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAE,CAAA,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AAE/E,IAAA,MAAM,SAAS,GAAG,CAAC,CAAG,EAAA,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC,CAAC;AAEzD,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;AACxB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAI,CAAA,EAAA,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;IAED,MAAM,QAAQ,GAAG,KAAK;AACnB,SAAA,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,IAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAC;AACxD;;ACvHA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE1C,SAAS,aAAa,CAAC,CAAS,EAAE,KAAe,EAAE,KAAa,EAAE,GAAW,EAAA;IAC3E,QAAQ,CAAC;AACP,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACtD,QAAA,KAAK,IAAI;YACP,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1E,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACpC,OAAO;gBACL,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACzC,CAAC;SACH;AACD,QAAA;AACE,YAAA,OAAO,IAAI,CAAC;KACf;AACH,CAAC;AAEK,SAAU,kBAAkB,CAAC,KAAa,EAAA;AAC9C,IAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAA,MAAM,IAAI,WAAW,CAAC,wCAAwC,KAAK,CAAA,CAAE,CAAC,CAAC;AAEzE,IAAA,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK;AAC/B,SAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,KAAK,CAAC,qCAAqC,CAAE,CAAC;AACjD,IAAA,MAAM,MAAM,GAAwB;AAClC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7B,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxC,SAAA;AACD,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAE3C,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACvD;AACD,YAAA,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACd,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACX;KACF;IAED,IAAI,CAAC,EAAE;AACL,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,UAAU,CAAC,KAAK,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;AACxD,CAAC;AAEK,SAAU,sBAAsB,CAAC,KAA0B,EAAA;AAC/D,IAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAE3D,MAAM,IAAI,GAAG,SAAS,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;IAEvE,MAAM,SAAS,GAAa,EAAE,CAAC;AAE/B,IAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAChB,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,CAAE,CAAC,CAAC;KACjC;AAED,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAE,CAAA,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/E,IAAI,GAAG,EAAE;AACP,QAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;AACxB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAI,CAAA,EAAA,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;AAE3B,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACjC;IAED,MAAM,QAAQ,GAAG,KAAK;AACnB,SAAA,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,IAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;AACxC;;ACtFA;;;;;;;;;AASG;AACa,SAAA,yBAAyB,CACvC,KAAA,GAAa,EAAE,EACf,KAAK,GAAG,CAAC,EACT,YAAwC,GAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EACvD,YAAA,GAAwC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EACvD,QAAqC,EAAA;;AAGrC,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAE1B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;AACvC,QAAA,OAAO,KAAK,CAAC;KACd;;;;IAMD,IAAI,CAAC,GAAG,KAAK,CAAC;AAEd,IAAA,OAAO,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;QAEtD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,QAAQ,GAAG,CAAC,CAAC,CAAC;KACf;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;QAEtE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,QAAQ,GAAG,CAAC,CAAC,CAAC;KACf;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;AAOG;AACG,SAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAe,EAAE,UAAU,GAAG,GAAG,EAAA;AACnF,IAAA,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AACpC,IAAA,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGlC,IAAA,MAAM,MAAM,GAAG;AACb,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACd,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACd,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACd,CAAC,EAAE,EAAE,CAAC,CAAC;KACR,CAAC;AACF,IAAA,MAAM,MAAM,GAAG;AACb,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACd,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACd,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACd,CAAC,EAAE,EAAE,CAAC,CAAC;KACR,CAAC;;AAGF,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC;AAC9E,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC;AAC9E,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC;AAC9E,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC;;AAG1E,IAAA,MAAM,MAAM,GAAG,aAAa,GAAG,CAAC,GAAG,iBAAiB,GAAG,aAAa,GAAG,CAAC,CAAC;AACzE,IAAA,MAAM,MAAM,GAAG,aAAa,GAAG,CAAC,GAAG,iBAAiB,GAAG,aAAa,GAAG,CAAC,CAAC;AACzE,IAAA,MAAM,MAAM,GAAG,aAAa,GAAG,CAAC,GAAG,iBAAiB,GAAG,aAAa,GAAG,CAAC,CAAC;AAEzE,IAAA,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC;AAC/B,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrB,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrB,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrB,QAAA,CAAC,EAAE,aAAa;AACjB,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,aAAa,KAAK,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;AACnF,CAAC;AAED;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,KAAkB,EAAA;AACrD,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;;AAGrC,IAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;AACxC,QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;KAC3C;AACD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnC,IAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;AACxD,QAAA,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;KACrD;IAED,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC5B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,OAAO;;;QAIhC,MAAM,UAAU,GAAG,KAAK;AACrB,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACf,aAAA,OAAO,EAAE;aACT,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AACpC,QAAA,MAAM,gBAAgB,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC;QAChD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAO,CAAC,KAAK,CAAC;;;QAI/D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AACzE,QAAA,MAAM,gBAAgB,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAO,CAAC,KAAK,CAAC;;AAG7D,QAAA,MAAM,SAAS,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AACtD,QAAA,MAAM,eAAe,GAAG,cAAc,GAAG,gBAAgB,CAAC;;AAG1D,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,gBAAgB,CAAC;QAC1C,MAAM,cAAc,GAAG,gBAAgB,GAAG,CAAC,QAAQ,GAAG,SAAS,IAAI,eAAe,CAAC;AAEnF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACrD,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,KAAkB,EAAA;IAClD,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,IAAG;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7C;AACD,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;AAMG;AACa,SAAA,iBAAiB,CAAC,KAAa,EAAE,IAAY,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC;IACZ,QAAQ,IAAI;AACV,QAAA,KAAK,KAAK;YACR,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;AACR,QAAA,KAAK,KAAK;YACR,OAAO,GAAG,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM;AACR,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC;YACtB,MAAM;AACR,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC;YACtB,MAAM;AACR,QAAA;AACE,YAAA,OAAO,KAAK,CAAC;KAChB;;;IAID,IAAI,UAAU,GAAG,CAAC,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC;;;AAIvC,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,UAAU,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC;KACvC;AAAM,SAAA,IAAI,UAAU,IAAI,GAAG,EAAE;AAC5B,QAAA,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC;KAC/B;AAED,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;AAKG;AACG,SAAU,wBAAwB,CAAC,KAAkB,EAAA;AACzD,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACxD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;SACxB;AACD,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;AAIG;AACG,SAAU,aAAa,CAAC,KAAa,EAAA;AACzC,IAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;AAAM,SAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACnC,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;AAAM,SAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAClC,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;SAAM;AACL,QAAA,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,KAAqB,EAAA;AACrD,IAAA,IAAI,aAAa,IAAI,KAAK,EAAE;AAC1B,QAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AAC3B,QAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AAC3B,QAAA,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACtC;SAAM;AACL,QAAA,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;AAC5C,MAAA,WAAW,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAEzD,MAAA,iBAAiB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AAChD,MAAA,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAEhD,MAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,aAAa;IACb,YAAY;IACZ,SAAS;IACT,cAAc;IACd,SAAS;IACT,KAAK;IACL,OAAO;IACP,KAAK;IACL,SAAS;IACT,SAAS;EACT;AACK,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;AAClD,MAAA,uBAAuB,GAAG;IACrC,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;;;AC3PlB,IAAI,eAAe,GAAG,CAAC,CAAC;MA6BX,aAAa,CAAA;AAChB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAEvC,IAAA,KAAK,CAA2B;IAElB,QAAQ,GAAG,KAAK,CAAC;IAEhD,UAAU,GAAgB,EAAE,CAAC;AAE5B,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAe,CAAC;IAE7D,gBAAgB,GAAsB,EAAE,CAAC;IAEzC,UAAU,GAAG,CAAC,CAAC;IAEf,aAAa,GAAG,EAAE,CAAC;IAEnB,UAAU,GAAG,KAAK,CAAC;AAEnB,IAAA,YAAY,CAAmB;AAEvB,IAAA,QAAQ,GAAiC,MAAK,GAAG,CAAC;AAClD,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;IAED,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;AAED,IAAA,gBAAgB,CAAC,EAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAExB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC;AAEvD,QAAA,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CACzF,IAAI,IAAG;AACL,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACtD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,EAC3E,IAAI,CAAC,UAAU,CAChB,CAAC;YACF,OAAO;AACL,gBAAA,GAAG,IAAI;gBACP,EAAE,EAAE,eAAe,EAAE;gBACrB,MAAM;gBACN,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;aAC5B,CAAC;AACJ,SAAC,CACF,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAE9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAA;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,MAAM,CAAC,KAAK,CAAG,EAAA,MAAM,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;QAC1F,IAAI,CAAC,aAAa,GAAG,CAA6B,0BAAA,EAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;AACtE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,kBAAkB,CAAC,OAAe,EAAA;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AACnF,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;YACxB,MAAM,UAAU,GACd,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChF,YAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SACrE;aAAM,IAAI,QAAQ,EAAE;YACnB,OAAO,QAAQ,CAAC,KAAK,CAAC;SACvB;aAAM,IAAI,QAAQ,EAAE;YACnB,OAAO,QAAQ,CAAC,KAAK,CAAC;SACvB;aAAM;AACL,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;AAED,IAAA,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;AAEjC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;SAC5C;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACpC,cAAE,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;cACnD,CAAC,CAAC;QACN,MAAM,aAAa,GAAG,YAAY,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;QAC9F,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7F,OAAO,CAAC,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;KAC5C;AAED,IAAA,OAAO,CAAC,CAAc,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,eAAe,EAAE;AACrB,YAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACvC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;AAC3E,YAAA,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC3C,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED,IAAA,UAAU,CAAC,CAAc,EAAE,IAAqB,EAAE,KAAa,EAAA;QAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAG,yBAAyB,CACrC,IAAI,CAAC,gBAAgB,EACrB,KAAK,EACL,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EACrC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CACtC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,SAAS,CAAC,CAAa,EAAE,IAAqB,EAAA;QAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAC,EAAE,CAAS,OAAA,CAAA,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE,CAAC;AAErB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,gBAAgB,CAAC,CAAa,EAAE,IAAqB,EAAA;QACnD,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,cAAc,CAAC,CAAa,EAAA;QAC1B,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,eAAe,CAAC,IAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;AAED,IAAA,iBAAiB,CAAC,IAAqB,EAAA;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED,IAAA,kBAAkB,CAAC,IAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAChD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAC/B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7F,YAAA,CAAC,EAAE,CAAC;SACL,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,EAAE,CAAE,CAAA,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;AAE/C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAClE,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7C;;AAGD,IAAA,QAAQ,CAAC,CAAQ,EAAE,IAAqB,EAAE,KAAa,EAAE,IAAY,EAAA;QACnE,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAChD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CACtC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7F,YAAA,CAAC,EAAE,CAAC;SACL,CAAC;QAEF,MAAM,KAAK,GAAG,yBAAyB,CACrC,IAAI,CAAC,gBAAgB,EACrB,KAAK,EACL,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EACrC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EACrC,MAAK;YACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAC,EAAE,CAAS,OAAA,CAAA,CAAC,CAAC;AACtE,SAAC,CACF,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;AAGD,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAgB,CAAC;YAChF,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,SAAC,CAAC,CAAC;KACJ;;AAGD,IAAA,MAAM,GAAG,CAAC,CAAY,EAAE,CAAY,KAAI;AACtC,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAO,CAAC;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAO,CAAC;QAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AACjC,YAAA,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;SACtC;aAAM;YACL,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5F,OAAO,IAAI,GAAG,IAAI,CAAC;SACpB;AACH,KAAC,CAAC;uGA3QS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAMJ,gBAAgB,CAdzB,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/DH,smJA2HA,EAAA,MAAA,EAAA,CAAA,ohFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjFI,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,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,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,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,cAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,iEAClB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAiBT,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3BzB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX,OAAO;wBACP,gBAAgB;wBAChB,mBAAmB;wBACnB,yBAAyB;wBACzB,kBAAkB;wBAClB,kBAAkB;qBACnB,EAGK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACxB,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,smJAAA,EAAA,MAAA,EAAA,CAAA,ohFAAA,CAAA,EAAA,CAAA;8BAMyB,KAAK,EAAA,CAAA;sBAA9B,SAAS;uBAAC,aAAa,CAAA;gBAEgB,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAE7B,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;;;MEjBI,mBAAmB,CAAA;AACtB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;AAEzD,IAAA,aAAa,GAAwB;AACnC,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxC,SAAA;AACD,QAAA,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC9B,CAAC;IAEF,KAAK,GAAG,EAAE,CAAC;IAEX,UAAU,GAAG,UAAU,CAAC;IAExB,WAAW,GAAG,WAAW,CAAC;IAE1B,WAAW,GAAG,iBAAiB,CAAC;IAEhC,WAAW,GAAG,iBAAiB,CAAC;AAEhC,IAAA,mBAAmB,GAAG;AACpB,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE;AACzD,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE;KAC9C,CAAC;IAEF,6BAA6B,GAAG,uBAAuB,CAAC;AAExD,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;KACzE;AAEO,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,sCAAsC,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,gBAAgB,GAAA;QACd,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;SAC7C;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;AAChB,QAAA,MAAM,kBAAkB,GACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;YAChD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QACnD,IAAI,kBAAkB,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG;gBAC5B,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;gBACnC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;aACpC,CAAC;SACH;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG;gBAC5B,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;aACxC,CAAC;SACH;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;uGA3FU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAGV,gBAAgB,CAXzB,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxDH,uyHAqGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlEI,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,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,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,EACX,aAAa,EACb,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+DAChB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAiBT,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA3B/B,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX,aAAa;wBACb,kBAAkB;wBAClB,iBAAiB;wBACjB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;qBACnB,EAGK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,uBAAuB;AAC/B,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,uyHAAA,EAAA,CAAA;8BAKuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;MEN3B,oBAAoB,CAAA;AACvB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;AAEzD,IAAA,cAAc,GAAyB;AACrC,QAAA,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;AAC/C,QAAA,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC9B,CAAC;IAEF,KAAK,GAAG,EAAE,CAAC;IAEX,UAAU,GAAG,UAAU,CAAC;AAExB,IAAA,gBAAgB,GAAG;AACjB,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;AAChC,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE;AAC5C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE;AAClD,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;AACtC,QAAA,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE;AAChD,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAClC,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE;KAC3C,CAAC;AAEF,IAAA,mBAAmB,GAAG;AACpB,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE;AACzD,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE;KAC9C,CAAC;IAEF,6BAA6B,GAAG,uBAAuB,CAAC;AAExD,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;KAC1E;AAEO,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,uCAAuC,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,gBAAgB,GAAA;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YACxD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;SAC9C;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,qBAAqB,GAAA;QACnB,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC;AAChF,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,GAAG,oBAAoB,GAAG,aAAa,GAAG,SAAS,CAAC;AACxF,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,GAAG,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACnF,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;uGAjFU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAGX,gBAAgB,CAXzB,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDH,uoGA8EA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9CI,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,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,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,EACX,aAAa,EACb,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+DAChB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAiBT,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA3BhC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX,aAAa;wBACb,kBAAkB;wBAClB,iBAAiB;wBACjB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;qBACnB,EAGK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,wBAAwB;AAChC,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,uoGAAA,EAAA,CAAA;8BAKuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;MEG3B,oBAAoB,CAAA;AACvB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;AAEzD,IAAA,cAAc,GAAyB;AACrC,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxC,SAAA;AACD,QAAA,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC9B,CAAC;IAEF,KAAK,GAAG,EAAE,CAAC;IAEX,YAAY,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAEtF,WAAW,GAAG,WAAW,CAAC;IAE1B,WAAW,GAAG,iBAAiB,CAAC;IAEhC,WAAW,GAAG,iBAAiB,CAAC;AAEhC,IAAA,mBAAmB,GAAG;AACpB,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE;AACzD,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE;KAC9C,CAAC;IAEF,6BAA6B,GAAG,uBAAuB,CAAC;AAExD,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;KAC1E;AAEO,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,uCAAuC,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,gBAAgB,GAAA;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YACxD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;SAC9C;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,cAAc,GAAA;QACZ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACtF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG;AACzB,gBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;AAChC,gBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;aACjC,CAAC;SACH;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;AAChB,QAAA,MAAM,kBAAkB,GACtB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;YACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QACpD,IAAI,kBAAkB,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG;gBAC7B,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;gBACnC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;aACpC,CAAC;SACH;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG;gBAC7B,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACvC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;aACxC,CAAC;SACH;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;uGAzGU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAGX,gBAAgB,CAXzB,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3DH,guKAwIA,EDpGI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,26BACX,aAAa,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,kBAAkB,EAClB,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,+FACjB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAClB,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,2JACnB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAiBT,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7BhC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX,aAAa;wBACb,kBAAkB;wBAClB,iBAAiB;wBACjB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;qBACnB,EAGK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,wBAAwB;AAChC,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,guKAAA,EAAA,CAAA;8BAKuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;MEnB3B,cAAc,CAAA;AACjB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEA,QAAQ,GAAG,KAAK,CAAC;AAEzD,IAAA,KAAK,GAAG;AACN,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;KACnC,CAAC;IAEF,IAAI,GAAiB,QAAQ,CAAC;AAE9B,IAAA,QAAQ,GAAG;AACT,QAAA,MAAM,EAAE,uCAAuC;AAC/C,QAAA,MAAM,EAAE,uCAAuC;AAC/C,QAAA,KAAK,EAAE,sCAAsC;KAC9C,CAAC;IAEF,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzB,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAG,CAAC;AAEzC,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;SACtB;AAAM,aAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;SACtB;AAAM,aAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;SACtB;AAAM,aAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;SACrB;QACD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SAC/C;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,aAAa,GAAA;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,YAAY,GAAA;;AAEV,QAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;AAE/D,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;AACxD,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;uGArEU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAGL,gBAAgB,CAXzB,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CH,0rBAeA,EAAA,MAAA,EAAA,CAAA,k9CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOI,WAAW,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,EACX,oBAAoB,EACpB,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,qJAClB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAiBV,cAAc,EAAA,UAAA,EAAA,CAAA;kBA3B1B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX,oBAAoB;wBACpB,oBAAoB;wBACpB,mBAAmB;wBACnB,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;qBACpB,EAGK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACzB,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,0rBAAA,EAAA,MAAA,EAAA,CAAA,k9CAAA,CAAA,EAAA,CAAA;8BAKuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;AEhDxC;;AAEG;;ACFH;;AAEG;;;;"}