{"version":3,"file":"ngx-realtime-chart.mjs","sources":["../../../projects/ngx-realtime-chart/src/lib/shared/color.ts","../../../projects/ngx-realtime-chart/src/lib/ngx-realtime-chart.interface.ts","../../../projects/ngx-realtime-chart/src/lib/shared/chart.interface.ts","../../../projects/ngx-realtime-chart/src/lib/shared/resize.service.ts","../../../projects/ngx-realtime-chart/src/lib/ngx-realtime-chart.component.ts","../../../projects/ngx-realtime-chart/src/lib/ngx-realtime-chart.module.ts","../../../projects/ngx-realtime-chart/src/public-api.ts","../../../projects/ngx-realtime-chart/src/ngx-realtime-chart.ts"],"sourcesContent":["const colors: Record<string, string> = {\n  blue: '#32A8E4',\n  green: '#34AA44',\n  yellow: '#FACF55',\n  red: '#E6492D',\n  gray: '#6B6C6F',\n  violet: '#6758F3',\n  orange: '#F6AB2F'\n};\n\nexport const Colors = Object.keys(colors).map(key => colors[key]);\n\nexport function hexToRgb(hex: string): string {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)!;\n  return `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`;\n}\n","import { CurveType } from './shared/chart.interface';\nimport { Colors } from './shared/color';\n\nexport interface RealtimeChartData {\n  date: Date;\n  value: number;\n}\n\nexport interface RealtimeChartLineOptions {\n  color?: string;\n  opacity?: number;\n  lineWidth?: number;\n  area?: boolean;\n  areaColor?: string;\n  areaOpacity?: number;\n  curve?: CurveType;\n}\n\ninterface RealtimeChartGridOptions {\n  enable?: boolean;\n  color?: string;\n  size?: number;\n  dashed?: boolean;\n  opacity?: number;\n  ticks?: boolean;\n  tickNumber?: number;\n  tickPadding?: number;\n  tickFontSize?: number;\n  tickFontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number;\n  tickFontColor?: string;\n  tickFontFamily?: string;\n  tickFontAnchor?: 'start' | 'middle' | 'end';\n}\n\nexport interface RealtimeChartXGridOptions extends RealtimeChartGridOptions {\n  tickFormat?: string;\n}\n\nexport interface RealtimeChartYGridOptions extends RealtimeChartGridOptions {\n  min?: number | 'auto';\n  max?: number | 'auto';\n  tickValues?: string[];\n  tickFormat?: string | ((v: string | number) => string);\n}\n\nexport interface RealtimeChartOptions {\n  width?: number;\n  height?: number;\n  margin?: { top?: number; right?: number; bottom?: number; left?: number };\n  fps?: number;\n  timeSlots?: number;\n  lines?: RealtimeChartLineOptions[];\n  xGrid?: RealtimeChartXGridOptions;\n  yGrid?: RealtimeChartYGridOptions;\n  colors?: string[];\n}\n\nexport const defaultRealtimeChartOptions: RealtimeChartOptions = {\n  margin: { top: 25, right: 25, bottom: 25, left: 25 },\n  fps: 24,\n  timeSlots: 60,\n  xGrid: {\n    enable: true,\n    color: '#e9e9e9',\n    size: 2,\n    dashed: true,\n    opacity: 0.5,\n    ticks: true,\n    tickFormat: '%H:%M:%S',\n    tickPadding: 10,\n    tickFontColor: '#6B6C6F',\n    tickFontWeight: 'normal',\n    tickFontSize: 10,\n    tickFontFamily: 'sans-serif',\n    tickFontAnchor: 'middle'\n  },\n  yGrid: {\n    enable: true,\n    color: '#e9e9e9',\n    size: 2,\n    dashed: true,\n    opacity: 0.5,\n    min: 'auto',\n    max: 'auto',\n    ticks: true,\n    tickFormat: '~s',\n    tickPadding: 10,\n    tickFontColor: '#6B6C6F',\n    tickFontWeight: 'normal',\n    tickFontSize: 10,\n    tickFontFamily: 'sans-serif',\n    tickFontAnchor: 'middle'\n  },\n  colors: Colors\n};\n","import {\n  CurveFactory,\n  curveBasis,\n  curveBasisClosed,\n  curveBasisOpen,\n  curveCardinal,\n  curveCardinalClosed,\n  curveCardinalOpen,\n  curveCatmullRom,\n  curveCatmullRomClosed,\n  curveCatmullRomOpen,\n  curveLinear,\n  curveLinearClosed,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore\n} from 'd3-shape';\n\nexport type CurveType =\n  | 'basis'\n  | 'basisClosed'\n  | 'basisOpen'\n  | 'cardinal'\n  | 'cardinalClosed'\n  | 'cardinalOpen'\n  | 'catmullRom'\n  | 'catmullRomClosed'\n  | 'catmullRomOpen'\n  | 'linear'\n  | 'linearClosed'\n  | 'monotoneX'\n  | 'monotoneY'\n  | 'natural'\n  | 'step'\n  | 'stepAfter'\n  | 'stepBefore';\n\nexport const curveTypeMapping: { [name: string]: CurveFactory } = {\n  basis: curveBasis,\n  basisClosed: curveBasisClosed,\n  basisOpen: curveBasisOpen,\n  cardinal: curveCardinal,\n  cardinalClosed: curveCardinalClosed,\n  cardinalOpen: curveCardinalOpen,\n  catmullRom: curveCatmullRom,\n  catmullRomClosed: curveCatmullRomClosed,\n  catmullRomOpen: curveCatmullRomOpen,\n  linear: curveLinear,\n  linearClosed: curveLinearClosed,\n  monotoneX: curveMonotoneX,\n  monotoneY: curveMonotoneY,\n  natural: curveNatural,\n  step: curveStep,\n  stepAfter: curveStepAfter,\n  stepBefore: curveStepBefore\n};\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, EventEmitter, Injectable, inject } from '@angular/core';\nimport { Observable, fromEvent, share } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ResizeService {\n  private readonly window = inject(DOCUMENT).defaultView as Window;\n  private readonly events = new EventEmitter<Window>();\n  private readonly resize: Observable<Window>;\n\n  get onResize$(): Observable<Window> {\n    return this.resize;\n  }\n\n  constructor() {\n    this.resize = this.events.asObservable().pipe(share());\n    const sub = fromEvent(this.window, 'resize').subscribe(event => this.events.emit(event.target as Window));\n    inject(DestroyRef).onDestroy(() => sub.unsubscribe());\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  SimpleChanges,\n  inject\n} from '@angular/core';\nimport { max, min } from 'd3-array';\nimport { Axis, axisBottom, axisLeft } from 'd3-axis';\nimport { ScaleLinear, ScaleTime, scaleLinear, scaleTime } from 'd3-scale';\nimport { Selection, select } from 'd3-selection';\nimport { Area, Line, area, line } from 'd3-shape';\nimport { subSeconds } from 'date-fns';\nimport { Subscription } from 'rxjs';\nimport { RealtimeChartData, RealtimeChartOptions, defaultRealtimeChartOptions } from './ngx-realtime-chart.interface';\nimport { curveTypeMapping } from './shared/chart.interface';\nimport { hexToRgb } from './shared/color';\nimport { ResizeService } from './shared/resize.service';\n\n@Component({\n  selector: 'ngx-realtime-chart',\n  standalone: true,\n  template: `\n    <div class=\"realtime-chart-container\">\n      <canvas class=\"canvas\"></canvas>\n    </div>\n  `,\n  styles: `\n    .realtime-chart-container {\n      width: 100%;\n      height: 100%;\n      display: inline-block;\n      position: relative;\n    }\n\n    .realtime-chart-container .canvas {\n      position: absolute;\n      top: 0;\n      left: 0;\n    }\n  `\n})\nexport class NgxRealtimeChartComponent implements OnInit, OnDestroy, OnChanges {\n  private readonly elementRef = inject(ElementRef);\n  private readonly resizeService = inject(ResizeService);\n  private readonly renderer = inject(Renderer2);\n\n  @Input() data: RealtimeChartData[][] = [];\n  @Input() options: RealtimeChartOptions = { ...defaultRealtimeChartOptions };\n\n  id = Math.random().toString(36).slice(-5);\n  el!: HTMLElement;\n  canvas!: HTMLCanvasElement;\n  context!: CanvasRenderingContext2D;\n  width!: number;\n  height!: number;\n  x!: ScaleTime<number, number>;\n  y!: ScaleLinear<number, number>;\n  line!: Line<[number, number]>;\n  area!: Area<[number, number]>;\n  svg!: Selection<SVGSVGElement, unknown, null, undefined>;\n  g!: Selection<SVGGElement, unknown, null, undefined>;\n  xAxis!: Selection<SVGGElement, unknown, null, undefined>;\n  yAxis!: Selection<SVGGElement, unknown, null, undefined>;\n  interval!: ReturnType<typeof setInterval>;\n  subs: Subscription = new Subscription();\n\n  ngOnInit(): void {\n    this.initChart();\n    this.subs.add(this.resizeService.onResize$.subscribe(() => this.redrawChart()));\n  }\n\n  ngOnDestroy(): void {\n    clearInterval(this.interval);\n    this.subs.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.svg) {\n      return;\n    }\n\n    if ('options' in changes) {\n      this.redrawChart();\n    }\n  }\n\n  private initChart(): void {\n    this.el = this.elementRef.nativeElement.querySelector('.realtime-chart-container');\n    this.svg = select(this.el).append('svg');\n    this.g = this.svg.append('g');\n    this.canvas = this.el.querySelector('canvas') as HTMLCanvasElement;\n    this.context = this.canvas.getContext('2d') as CanvasRenderingContext2D;\n\n    this.initOptions();\n    this.setDimensions();\n\n    const canvas = select(this.canvas);\n    canvas.attr('width', this.width).attr('height', this.height);\n\n    this.x = scaleTime().range([0, this.width]);\n    this.y = scaleLinear().range([this.height, 0]);\n\n    this.line = line()\n      .x((d: any) => this.x(d.date))\n      .y((d: any) => this.y(d.value))\n      .context(this.context);\n\n    this.area = area()\n      .x((d: any) => this.x(d.date))\n      .y1((d: any) => this.y(d.value))\n      .y0(this.height)\n      .context(this.context);\n\n    this.drawAxes();\n    this.drawChart();\n\n    this.interval = setInterval(() => this.drawChart(), 1000 / this.options.fps!);\n  }\n\n  private redrawChart(): void {\n    clearInterval(this.interval);\n    this.svg.remove();\n    this.initChart();\n  }\n\n  private drawChart(): void {\n    this.updateAxes();\n\n    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n    this.data.forEach((d, i) => {\n      this.data[i] = this.updateData(d);\n\n      this.context.beginPath();\n      this.line.curve(curveTypeMapping[this.options.lines![i].curve!]);\n      this.line(d as any);\n      this.context.lineWidth = this.options.lines![i].lineWidth!;\n      this.context.strokeStyle = `rgba(${hexToRgb(this.options.lines![i].color!)}, ${this.options.lines![i].opacity})`;\n      this.context.lineCap = 'round';\n      this.context.lineJoin = 'round';\n      this.context.stroke();\n      this.context.closePath();\n\n      if (this.options.lines![i].area) {\n        this.context.beginPath();\n        this.area.curve(curveTypeMapping[this.options.lines![i].curve!]);\n        this.area(d as any);\n        this.context.fillStyle = `rgba(${hexToRgb(this.options.lines![i].areaColor!)}, ${\n          this.options.lines![i].areaOpacity\n        })`;\n        this.context.fill();\n        this.context.closePath();\n      }\n    });\n  }\n\n  private updateData(data: RealtimeChartData[]): RealtimeChartData[] {\n    const now = new Date();\n    const validTime = subSeconds(now, this.options.timeSlots!);\n    data = data.filter(Boolean).sort((a, b) => (a.date > b.date ? 1 : -1));\n    let count = 0;\n    while (data.length - count + 1 >= this.options.timeSlots! && data[count + 1].date < validTime) {\n      count++;\n    }\n    if (count > 0) {\n      data.splice(0, count);\n    }\n\n    const last = (data && data.length && data[data.length - 1]) || { date: now, value: 0 };\n    if (last.date === now || data.length < this.options.timeSlots!) {\n      data.push({ date: now, value: last.value });\n    }\n\n    return data;\n  }\n\n  private setDomains(): void {\n    this.x = scaleTime().range([0, this.width]);\n    this.y = scaleLinear().range([this.height, 0]);\n\n    this.x.domain([subSeconds(new Date(), this.options.timeSlots! - 2), subSeconds(new Date(), 2)]);\n\n    const values = this.data.reduce((acc, curr) => acc.concat(curr.map((d: any) => d.value)), []);\n    const [minv, maxv] = [Number(min(values as any)), Number(max(values as any))];\n    const factor = (maxv - minv) * 0.05;\n    const [ymin, ymax] = [\n      this.options.yGrid!.min === 'auto' ? Number(minv) - factor : this.options.yGrid!.min,\n      this.options.yGrid!.max === 'auto' ? Number(maxv) + factor : this.options.yGrid!.max\n    ];\n    this.y.domain([ymin!, ymax!]);\n  }\n\n  private drawAxes(): void {\n    this.setDomains();\n\n    const { y, x } = this.getAxesData();\n\n    if (this.options.xGrid!.enable) {\n      this.xAxis = this.g.append('g').attr('class', 'x axis').call(x).attr('transform', `translate(0, ${this.height})`);\n    }\n\n    if (this.options.yGrid!.enable) {\n      this.yAxis = this.g.append('g').attr('class', 'y axis').call(y);\n    }\n\n    this.styleAxes();\n  }\n\n  private updateAxes(): void {\n    this.setDomains();\n    const { y, x } = this.getAxesData();\n    if (this.options.xGrid!.enable) {\n      this.xAxis.call(x).attr('transform', `translate(0, ${this.height})`);\n    }\n    if (this.options.yGrid!.enable) {\n      this.yAxis.call(y);\n    }\n    this.styleAxes();\n  }\n\n  private getAxesData(): {\n    y: Axis<number | { valueOf(): number }>;\n    x: Axis<number | Date | { valueOf(): number }>;\n  } {\n    return {\n      y: axisLeft(this.y)\n        .tickSize(-this.width)\n        .tickPadding(this.options.yGrid!.tickPadding!)\n        .ticks(\n          this.options.yGrid!.tickNumber,\n          typeof this.options.yGrid!.tickFormat !== 'function' ? this.options.yGrid!.tickFormat : null\n        )\n        .tickFormat(\n          typeof this.options.yGrid!.tickFormat === 'function' ? (this.options.yGrid!.tickFormat as any) : null\n        ),\n      x: axisBottom(this.x)\n        .tickSizeInner(-this.height)\n        .tickSizeOuter(0)\n        .tickPadding(this.options.xGrid!.tickPadding!)\n        .ticks(this.options.xGrid!.tickNumber, this.options.xGrid!.tickFormat)\n    };\n  }\n\n  private styleAxes(): void {\n    if (this.options.xGrid!.enable) {\n      this.xAxis\n        .selectAll('g.tick')\n        .select('line')\n        .style('shape-rendering', 'crispEdges')\n        .style('fill', 'none')\n        .style('stroke', this.options.xGrid!.color!)\n        .style('stroke-width', this.options.xGrid!.size!)\n        .style('stroke-dasharray', this.options.xGrid!.dashed ? '3 3' : '0')\n        .style('opacity', this.options.xGrid!.opacity!);\n\n      this.xAxis\n        .selectAll('g.tick')\n        .selectAll('text')\n        .attr('text-anchor', this.options.xGrid!.tickFontAnchor!)\n        .style('fill', this.options.xGrid!.tickFontColor!)\n        .style('font-size', this.options.xGrid!.tickFontSize!)\n        .style('font-family', this.options.xGrid!.tickFontFamily!)\n        .style('font-weight', this.options.xGrid!.tickFontWeight!);\n    }\n\n    if (this.options.yGrid!.enable) {\n      this.yAxis\n        .selectAll('g.tick')\n        .select('line')\n        .style('shape-rendering', 'crispEdges')\n        .style('fill', 'none')\n        .style('stroke', this.options.yGrid!.color!)\n        .style('stroke-width', this.options.yGrid!.size!)\n        .style('stroke-dasharray', this.options.yGrid!.dashed ? '3 3' : '0')\n        .style('opacity', this.options.yGrid!.opacity!);\n\n      this.yAxis\n        .selectAll('g.tick')\n        .selectAll('text')\n        .attr('text-anchor', this.options.yGrid!.tickFontAnchor!)\n        .style('fill', this.options.yGrid!.tickFontColor!)\n        .style('font-size', this.options.yGrid!.tickFontSize!)\n        .style('font-family', this.options.yGrid!.tickFontFamily!)\n        .style('font-weight', this.options.yGrid!.tickFontWeight!);\n    }\n\n    this.svg.selectAll('.axis').select('path').style('display', 'none');\n  }\n\n  private setDimensions(): void {\n    const w = this.options.width || this.el.clientWidth;\n    const h = this.options.height || this.el.clientHeight;\n    this.width = w - this.options.margin!.left! - this.options.margin!.right!;\n    this.height = h - this.options.margin!.top! - this.options.margin!.bottom!;\n\n    this.svg\n      .attr('width', this.width + this.options.margin!.left! + this.options.margin!.right!)\n      .attr('height', this.height + this.options.margin!.top! + this.options.margin!.bottom!);\n\n    this.g.attr('transform', `translate(${this.options.margin!.left}, ${this.options.margin!.top})`);\n\n    this.renderer.setStyle(this.canvas, 'width', this.width + 'px');\n    this.renderer.setStyle(this.canvas, 'height', this.height + 'px');\n    this.renderer.setStyle(this.canvas, 'top', this.options.margin!.top + 'px');\n    this.renderer.setStyle(this.canvas, 'left', this.options.margin!.left + 'px');\n  }\n\n  private initOptions(): void {\n    this.options = {\n      ...defaultRealtimeChartOptions,\n      ...this.options,\n      margin: { ...defaultRealtimeChartOptions.margin, ...(this.options.margin || {}) }\n    };\n    this.options.xGrid = { ...defaultRealtimeChartOptions.xGrid, ...(this.options.xGrid || {}) };\n    this.options.yGrid = { ...defaultRealtimeChartOptions.yGrid, ...(this.options.yGrid || {}) };\n    this.options.lines = this.options.lines || [];\n    (this.data || []).forEach((d: any, i: number) => {\n      this.options.lines![i] = {\n        ...{\n          color: this.options.colors![i],\n          opacity: 1,\n          lineWidth: 2,\n          area: true,\n          areaColor: this.options.colors![i],\n          areaOpacity: 0.1,\n          curve: 'basis'\n        },\n        ...this.options.lines![i]\n      };\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxRealtimeChartComponent } from './ngx-realtime-chart.component';\n\n@NgModule({\n  imports: [NgxRealtimeChartComponent],\n  exports: [NgxRealtimeChartComponent]\n})\nexport class NgxRealtimeChartModule {}\n","/*\n * Public API Surface of ngx-realtime-chart\n */\n\nexport * from './lib/ngx-realtime-chart.component';\nexport * from './lib/ngx-realtime-chart.interface';\nexport * from './lib/ngx-realtime-chart.module';\nexport * from './lib/shared/chart.interface';\nexport * from './lib/shared/color';\nexport * from './lib/shared/resize.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;AAAA,MAAM,MAAM,GAA2B;AACrC,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,MAAM,EAAE,SAAS;CAClB,CAAC;MAEW,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;AAE5D,SAAU,QAAQ,CAAC,GAAW,EAAA;IAClC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;AACtE,IAAA,OAAO,CAAG,EAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAK,EAAA,EAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC9F;;AC0Ca,MAAA,2BAA2B,GAAyB;AAC/D,IAAA,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACpD,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE,YAAY;AAC5B,QAAA,cAAc,EAAE,QAAQ;AACzB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE,YAAY;AAC5B,QAAA,cAAc,EAAE,QAAQ;AACzB,KAAA;AACD,IAAA,MAAM,EAAE,MAAM;;;ACrDH,MAAA,gBAAgB,GAAqC;AAChE,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,QAAQ,EAAE,aAAa;AACvB,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,gBAAgB,EAAE,qBAAqB;AACvC,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,UAAU,EAAE,eAAe;;;MClDhB,aAAa,CAAA;AAKxB,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,WAAA,GAAA;AARiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAqB,CAAC;AAChD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;AAQnD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAgB,CAAC,CAAC,CAAC;AAC1G,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;KACvD;8GAbU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCwCY,yBAAyB,CAAA;AAvBtC,IAAA,WAAA,GAAA;AAwBmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,CAAA,IAAA,GAA0B,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAyB,EAAE,GAAG,2BAA2B,EAAE,CAAC;AAE5E,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAe1C,QAAA,IAAA,CAAA,IAAI,GAAiB,IAAI,YAAY,EAAE,CAAC;AA2QzC,KAAA;IAzQC,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;KACjF;IAED,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;KACzB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,OAAO;AACR,SAAA;QAED,IAAI,SAAS,IAAI,OAAO,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;QAExE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;AACf,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;AACf,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA,EAAE,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAA,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACf,aAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC;KAC/E;IAEO,WAAW,GAAA;AACjB,QAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,SAAS,GAAA;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAElC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAQ,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,CAAK,EAAA,EAAA,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;AACjH,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC;AACjE,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAQ,CAAC,CAAC;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,CAC1E,EAAA,EAAA,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,WACzB,GAAG,CAAC;AACJ,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,UAAU,CAAC,IAAyB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACvB,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC;AAC3D,QAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAU,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE;AAC7F,YAAA,KAAK,EAAE,CAAC;AACT,SAAA;QACD,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACvF,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAU,EAAE;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/C,QAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAU,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAa,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAa,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;AACpC,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;YACnB,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG;YACpF,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG;SACrF,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAK,EAAE,IAAK,CAAC,CAAC,CAAC;KAC/B;IAEO,QAAQ,GAAA;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC;AACnH,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,SAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,UAAU,GAAA;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAgB,aAAA,EAAA,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC;AACtE,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,SAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,WAAW,GAAA;QAIjB,OAAO;AACL,YAAA,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,iBAAA,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,WAAY,CAAC;AAC7C,iBAAA,KAAK,CACJ,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,EAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,KAAK,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,GAAG,IAAI,CAC7F;iBACA,UAAU,CACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,KAAK,UAAU,GAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAkB,GAAG,IAAI,CACtG;AACH,YAAA,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAClB,iBAAA,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;iBAC3B,aAAa,CAAC,CAAC,CAAC;iBAChB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,WAAY,CAAC;AAC7C,iBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,UAAU,CAAC;SACzE,CAAC;KACH;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK;iBACP,SAAS,CAAC,QAAQ,CAAC;iBACnB,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC;AACtC,iBAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;iBACrB,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,KAAM,CAAC;iBAC3C,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,IAAK,CAAC;AAChD,iBAAA,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;iBACnE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,OAAQ,CAAC,CAAC;AAElD,YAAA,IAAI,CAAC,KAAK;iBACP,SAAS,CAAC,QAAQ,CAAC;iBACnB,SAAS,CAAC,MAAM,CAAC;iBACjB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC;iBACxD,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,aAAc,CAAC;iBACjD,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,YAAa,CAAC;iBACrD,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC;iBACzD,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK;iBACP,SAAS,CAAC,QAAQ,CAAC;iBACnB,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC;AACtC,iBAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;iBACrB,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,KAAM,CAAC;iBAC3C,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,IAAK,CAAC;AAChD,iBAAA,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;iBACnE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,OAAQ,CAAC,CAAC;AAElD,YAAA,IAAI,CAAC,KAAK;iBACP,SAAS,CAAC,QAAQ,CAAC;iBACnB,SAAS,CAAC,MAAM,CAAC;iBACjB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC;iBACxD,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,aAAc,CAAC;iBACjD,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,YAAa,CAAC;iBACrD,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC;iBACzD,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,cAAe,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KACrE;IAEO,aAAa,GAAA;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AACpD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,IAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,KAAM,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,GAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,MAAO,CAAC;AAE3E,QAAA,IAAI,CAAC,GAAG;aACL,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,IAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,KAAM,CAAC;aACpF,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,GAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,MAAO,CAAC,CAAC;QAE1F,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,GAAG,CAAG,CAAA,CAAA,CAAC,CAAC;AAEjG,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;KAC/E;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,GAAG,2BAA2B;YAC9B,GAAG,IAAI,CAAC,OAAO;AACf,YAAA,MAAM,EAAE,EAAE,GAAG,2BAA2B,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG;SAClF,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC;QAC7F,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC;AAC7F,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AAC9C,QAAA,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAM,EAAE,CAAS,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,GAAG;gBACvB,GAAG;oBACD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,IAAI,EAAE,IAAI;oBACV,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC,CAAC;AAClC,oBAAA,WAAW,EAAE,GAAG;AAChB,oBAAA,KAAK,EAAE,OAAO;AACf,iBAAA;AACD,gBAAA,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC;aAC1B,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;8GAjSU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EApB1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6JAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAgBU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAvBrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EACN,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6JAAA,CAAA,EAAA,CAAA;8BAqBQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;MC7CK,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAtB,sBAAsB,EAAA,OAAA,EAAA,CAHvB,yBAAyB,CAAA,EAAA,OAAA,EAAA,CACzB,yBAAyB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAExB,sBAAsB,EAAA,CAAA,CAAA,EAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,yBAAyB,CAAC;oBACpC,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACrC,iBAAA,CAAA;;;ACND;;AAEG;;ACFH;;AAEG;;;;"}