{"version":3,"file":"c8y-ngx-components-widgets-implementations-datapoints-graph.mjs","sources":["../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.html","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.html","../../widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.ts"],"sourcesContent":["import { Component, inject, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport { Observable } from 'rxjs/internal/Observable';\nimport {\n  CommonModule,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  FormsModule,\n  gettext,\n  OnBeforeSave,\n  WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport {\n  DatapointAttributesFormConfig,\n  DatapointSelectorModalOptions,\n  DatapointSelectorModule,\n  KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { omit } from 'lodash-es';\nimport { aggregationType } from '@c8y/client';\nimport {\n  ContextDashboardComponent,\n  WidgetConfigComponent\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n  AlarmDetails,\n  AlarmEventSelectorModule,\n  EventDetails\n} from '@c8y/ngx-components/alarm-event-selector';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport {\n  ChartAlarmsService,\n  ChartEventsService,\n  ChartsComponent,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  DatapointsGraphWidgetTimeProps,\n  DATE_SELECTION_EXTENDED,\n  TimeContextProps\n} from '@c8y/ngx-components/echart';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\n@Component({\n  selector: 'c8y-datapoints-graph-widget-config',\n  host: { class: 'd-contents' },\n  templateUrl: './datapoints-graph-widget-config.component.html',\n  standalone: true,\n  imports: [\n    CommonModule,\n    CoreModule,\n    FormsModule,\n    TooltipModule,\n    PopoverModule,\n    ChartsComponent,\n    DatapointSelectorModule,\n    AlarmEventSelectorModule,\n    TimeContextComponent\n  ],\n  providers: [ChartEventsService, ChartAlarmsService]\n})\nexport class DatapointsGraphWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n  @Input() config: DatapointsGraphWidgetConfig | undefined;\n\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly form = inject(NgForm);\n  private readonly translate = inject(TranslateService);\n  private readonly widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);\n\n  alerts: DynamicComponentAlertAggregator | undefined;\n  formGroup: ReturnType<DatapointsGraphWidgetConfigComponent['initForm']>;\n  DATE_SELECTION = DATE_SELECTION_EXTENDED;\n  dateSelection: DATE_SELECTION_EXTENDED | undefined;\n  dateSelectionHelp = this.translate.instant(\n    gettext(`Choose how to select a date range, the available options are:\n  <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n    <li>\n      <b>Widget configuration:</b>\n      restricts the date selection only to the widget configuration\n    </li>\n    <li>\n      <b>Widget and widget configuration:</b>\n      restricts the date selection to the widget view and widget configuration only\n    </li>\n    <li>\n      <b>Dashboard time range:</b>\n      restricts date selection to the global dashboard configuration only\n    </li>\n  </ul>`)\n  );\n  datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n    showRange: true,\n    showChart: true\n  };\n  datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n  activeDatapointsExists = false;\n  alarmsOrEventsHaveNoMatchingDps = false;\n  timeProps: DatapointsGraphWidgetTimeProps | undefined;\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    @Optional() private widgetConfig: WidgetConfigComponent,\n    @Optional() private dashboardContextComponent: ContextDashboardComponent\n  ) {\n    this.formGroup = this.initForm();\n  }\n\n  ngOnInit() {\n    this.config?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n    this.form.form.addControl('config', this.formGroup);\n    this.formGroup.patchValue(this.config || {});\n    this.formGroup.controls.alarms.setValue(\n      this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'ALARM') as AlarmDetails[]\n    );\n    this.formGroup.controls.events.setValue(\n      this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'EVENT') as EventDetails[]\n    );\n\n    this.initDateSelection();\n    this.setActiveDatapointsExists();\n    this.checkForMatchingDatapoints();\n    this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n      this.config = {\n        ...value,\n        alarmsEventsConfigs: [\n          ...(this.formGroup.value.alarms || []),\n          ...(this.formGroup.value.events || [])\n        ]\n      };\n      this.setActiveDatapointsExists();\n      this.checkForMatchingDatapoints();\n    });\n\n    if (this.config?.widgetInstanceGlobalTimeContext) {\n      this.updateDashboardTimeContext(this.widgetTimeContextDateRangeService.initialTimeRange());\n    }\n\n    if (this.config.dateFrom && this.config.dateTo) {\n      this.timeProps = {\n        dateFrom: new Date(this.config?.dateFrom),\n        dateTo: new Date(this.config?.dateTo),\n        interval: this.config?.interval,\n        realtime: this.config?.realtime,\n        aggregation: this.config?.realtime ? null : this.config?.aggregation\n      };\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  onBeforeSave(\n    config?: DatapointsGraphWidgetConfig\n  ): boolean | Promise<boolean> | Observable<boolean> {\n    if (this.formGroup.valid && config) {\n      Object.assign(config, omit(this.formGroup.value, ['alarms', 'events']), {\n        alarmsEventsConfigs: [\n          ...(this.formGroup.value.alarms || []),\n          ...(this.formGroup.value.events || [])\n        ]\n      });\n\n      return true;\n    }\n    return false;\n  }\n\n  timePropsChanged(timeProps: TimeContextProps): void {\n    if (timeProps.realtime !== this.config.realtime) {\n      this.formGroup.patchValue({ realtime: timeProps.realtime });\n    }\n    if (timeProps.realtime) {\n      if (timeProps.currentDateContextInterval !== this.formGroup.value.interval) {\n        this.formGroup.patchValue({ interval: timeProps.currentDateContextInterval });\n      }\n      return;\n    }\n    const patchValues = {\n      dateFrom: new Date(timeProps.currentDateContextFromDate),\n      dateTo: new Date(timeProps.currentDateContextToDate),\n      interval: timeProps.currentDateContextInterval,\n      ...(timeProps.aggregation && { aggregation: timeProps.aggregation }),\n      ...(timeProps.realtime && { realtime: timeProps.realtime })\n    };\n\n    this.formGroup.patchValue(patchValues);\n  }\n\n  updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n    const initialTimeRange = {\n      dateFrom: timeProps.dateFrom,\n      dateTo: timeProps.dateTo,\n      interval: timeProps.interval || 'custom'\n    };\n    if (!this.widgetTimeContextDateRangeService.initialTimeRange()) {\n      this.widgetTimeContextDateRangeService.updateInitialTimeRange(initialTimeRange);\n    }\n    this.formGroup.patchValue({ ...timeProps, ...initialTimeRange });\n  }\n\n  updateTimeRangeOnRealtime(\n    timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n  ): void {\n    this.formGroup.patchValue(timeRange, { emitEvent: false });\n  }\n\n  dateSelectionChange(dateSelection: DATE_SELECTION_EXTENDED): void {\n    this.dateSelection = dateSelection;\n\n    if (dateSelection === DATE_SELECTION_EXTENDED.CONFIG) {\n      this.formGroup.controls.displayDateSelection.enable();\n      this.formGroup.patchValue({ widgetInstanceGlobalTimeContext: false });\n      return;\n    }\n\n    // displayDateSelection should be false and disabled when dateSelection is not CONFIG\n    this.formGroup.controls.displayDateSelection.disable();\n    this.formGroup.patchValue({\n      widgetInstanceGlobalTimeContext: true,\n      realtime: false,\n      displayDateSelection: false\n    });\n  }\n\n  private assignContextFromContextDashboard(datapoint: KPIDetails) {\n    if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n      return;\n    }\n    const context = this.widgetConfig?.context;\n    if (context?.id) {\n      const { name, id } = context;\n      datapoint.__target = { name, id };\n      this.datapointSelectionConfig.contextAsset = { id };\n    }\n  }\n\n  private checkForMatchingDatapoints(): void {\n    const allMatch = this.config?.alarmsEventsConfigs?.every(ae =>\n      this.formGroup.value.datapoints?.some(dp => dp.__target?.id === ae.__target?.id)\n    );\n\n    queueMicrotask(() => {\n      if (allMatch) {\n        this.alarmsOrEventsHaveNoMatchingDps = false;\n      } else {\n        this.alarmsOrEventsHaveNoMatchingDps = true;\n      }\n    });\n  }\n\n  private initForm() {\n    const form = this.formBuilder.group({\n      datapoints: [\n        [] as DatapointsGraphKPIDetails[],\n        [Validators.required, Validators.minLength(1)]\n      ],\n      alarms: [[] as AlarmDetails[]],\n      events: [[] as EventDetails[]],\n      displayMarkedLine: [true, []],\n      displayMarkedPoint: [true, []],\n      mergeMatchingDatapoints: [true, []],\n      showLabelAndUnit: [true, []],\n      displayDateSelection: [false, []],\n      displayAggregationSelection: [false, []],\n      widgetInstanceGlobalTimeContext: [false, []],\n      canDecoupleGlobalTimeContext: [false, []],\n      dateFrom: [null as unknown as Date, []],\n      dateTo: [null as unknown as Date, []],\n      interval: ['days' as Interval['id'], [Validators.required]],\n      aggregation: [null as aggregationType | null, []],\n      realtime: [false, [Validators.required]],\n      showSlider: [true, [Validators.required]],\n      yAxisSplitLines: [false, [Validators.required]],\n      xAxisSplitLines: [false, [Validators.required]]\n    });\n    return form;\n  }\n\n  private initDateSelection(): void {\n    if (!this.config?.widgetInstanceGlobalTimeContext) {\n      this.dateSelection = DATE_SELECTION_EXTENDED.CONFIG;\n      return;\n    }\n\n    this.dateSelection = DATE_SELECTION_EXTENDED.DASHBOARD_CONTEXT;\n    this.formGroup.controls.displayDateSelection.disable();\n  }\n\n  private setActiveDatapointsExists() {\n    this.activeDatapointsExists =\n      (this.config?.datapoints?.filter(dp => dp.__active)?.length || 0) > 0;\n  }\n}\n","<div class=\"no-card-context d-flex-md fit-h--md\">\n  <div class=\"col-md-5 bg-level-1 conf-col inner-scroll p-l-0\">\n    <div class=\"p-l-24\">\n      <form [formGroup]=\"formGroup\">\n        <c8y-datapoint-selection-list\n          class=\"bg-level-1 separator-bottom d-block\"\n          name=\"datapoints\"\n          [minActiveCount]=\"1\"\n          [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n          [config]=\"datapointSelectionConfig\"\n          formControlName=\"datapoints\"\n        ></c8y-datapoint-selection-list>\n\n        <c8y-alarm-event-selection-list\n          class=\"bg-level-1 separator-bottom d-block\"\n          name=\"alarms\"\n          formControlName=\"alarms\"\n          [timelineType]=\"'ALARM'\"\n          [datapoints]=\"config?.datapoints\"\n        ></c8y-alarm-event-selection-list>\n\n        <c8y-alarm-event-selection-list\n          class=\"bg-inherit\"\n          name=\"events\"\n          formControlName=\"events\"\n          [timelineType]=\"'EVENT'\"\n          [datapoints]=\"config?.datapoints\"\n        ></c8y-alarm-event-selection-list>\n      </form>\n    </div>\n  </div>\n\n  <div class=\"col-md-7 sticky-top p-t-8 inner-scroll widget-preview\">\n    <div class=\"p-r-24 d-col fit-h\">\n      <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n        <div class=\"d-flex a-i-center m-r-4\">\n          <label\n            class=\"m-b-0\"\n            translate\n          >\n            Date selection\n          </label>\n          <button\n            class=\"btn-help btn-help--sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"dateSelectionHelpTemplate\"\n            placement=\"bottom\"\n            triggers=\"focus\"\n            container=\"body\"\n            [adaptivePosition]=\"false\"\n          ></button>\n        </div>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            class=\"form-control input-sm\"\n            [ngModel]=\"dateSelection\"\n            (ngModelChange)=\"dateSelectionChange($event)\"\n            [ngModelOptions]=\"{ standalone: true }\"\n          >\n            <option\n              title=\"{{ 'Dashboard time range' | translate }}\"\n              [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n            >\n              {{ 'Dashboard time range' | translate }}\n            </option>\n            <option\n              title=\"{{ 'Widget configuration' | translate }}\"\n              [value]=\"DATE_SELECTION.CONFIG\"\n            >\n              {{ 'Widget configuration' | translate }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n      </div>\n      <label class=\"text-12\">{{ 'Options' | translate }}</label>\n      <c8y-time-context\n        *ngIf=\"\n          dateSelection === DATE_SELECTION.CONFIG &&\n          formGroup.get('displayDateSelection').value === true\n        \"\n        [changedDateContext]=\"timeProps\"\n        [controlsAvailable]=\"{\n          realtime: true,\n          timeRange: config?.displayDateSelection,\n          interval: config?.displayDateSelection,\n          aggregation: config?.displayAggregationSelection\n        }\"\n        (contextChange)=\"timePropsChanged($event)\"\n      ></c8y-time-context>\n      <c8y-charts\n        class=\"d-block p-relative\"\n        *ngIf=\"activeDatapointsExists\"\n        [config]=\"config\"\n        [alerts]=\"alerts\"\n        (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n        (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n      ></c8y-charts>\n\n      <c8y-ui-empty-state\n        class=\"d-block m-t-24\"\n        [icon]=\"'search'\"\n        [title]=\"'No data points selected' | translate\"\n        [subtitle]=\"'Select data point to render chart' | translate\"\n        *ngIf=\"!activeDatapointsExists\"\n      ></c8y-ui-empty-state>\n\n      <form\n        class=\"d-block p-t-8\"\n        [formGroup]=\"formGroup\"\n      >\n        <label>{{ 'Display options' | translate }}</label>\n        <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n          <legend>{{ 'Axis' | translate }}</legend>\n          <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Y axis helper lines' | translate\"\n            >\n              <input\n                name=\"yAxisSplitLines\"\n                type=\"checkbox\"\n                formControlName=\"yAxisSplitLines\"\n              />\n              <span></span>\n              <span translate>Y axis helper lines</span>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'X axis helper lines' | translate\"\n            >\n              <input\n                name=\"xAxisSplitLines\"\n                type=\"checkbox\"\n                formControlName=\"xAxisSplitLines\"\n              />\n              <span></span>\n              <span translate>X axis helper lines</span>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Merge axis' | translate\"\n            >\n              <input\n                name=\"mergeMatchingDatapoints\"\n                type=\"checkbox\"\n                formControlName=\"mergeMatchingDatapoints\"\n              />\n              <span></span>\n              <span translate>Merge matching datapoints into single axis.</span>\n            </label>\n          </c8y-form-group>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n          <legend>{{ 'Alarms & Events' | translate }}</legend>\n          <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Show vertical line on every occurrence' | translate\"\n            >\n              <input\n                name=\"displayMarkedLine\"\n                type=\"checkbox\"\n                formControlName=\"displayMarkedLine\"\n              />\n              <span></span>\n              <span translate>Show vertical line on every occurrence</span>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Show icon when triggered' | translate\"\n            >\n              <input\n                name=\"displayMarkedPoint\"\n                type=\"checkbox\"\n                formControlName=\"displayMarkedPoint\"\n              />\n              <span></span>\n              <span translate>Show icon when triggered</span>\n              <button\n                class=\"btn-clean m-l-8\"\n                [attr.aria-label]=\"\n                  'Some alarms or events have no matching data points. No icons will be shown for them.'\n                    | translate\n                \"\n                [tooltip]=\"\n                  'Some alarms or events have no matching data points. No icons will be shown for them.'\n                    | translate\n                \"\n                container=\"body\"\n                type=\"button\"\n                *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n                (click)=\"$event.stopPropagation()\"\n                [adaptivePosition]=\"false\"\n              >\n                <i\n                  class=\"text-warning\"\n                  c8yIcon=\"exclamation-triangle\"\n                ></i>\n              </button>\n            </label>\n          </c8y-form-group>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n          <legend>{{ 'Chart' | translate }}</legend>\n          <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Enable date selection in the widget view.' | translate\"\n            >\n              <input\n                name=\"displayDateSelection\"\n                type=\"checkbox\"\n                formControlName=\"displayDateSelection\"\n              />\n              <span></span>\n              <span translate>Date selection in the widget view.</span>\n              <button\n                class=\"btn-clean m-l-8\"\n                [attr.aria-label]=\"\n                  'Date selection in widget view is not possible when using dashboard time range.'\n                    | translate\n                \"\n                [tooltip]=\"\n                  'Date selection in widget view is not possible when using dashboard time range.'\n                    | translate\n                \"\n                container=\"body\"\n                type=\"button\"\n                *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n                (click)=\"$event.stopPropagation()\"\n                [adaptivePosition]=\"false\"\n              >\n                <i\n                  class=\"text-info\"\n                  c8yIcon=\"info\"\n                ></i>\n              </button>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Aggregation selection' | translate\"\n            >\n              <input\n                name=\"displayAggregationSelection\"\n                type=\"checkbox\"\n                formControlName=\"displayAggregationSelection\"\n              />\n              <span></span>\n              <span translate>Aggregation selection</span>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Show labels and units' | translate\"\n            >\n              <input\n                name=\"showLabelAndUnit\"\n                type=\"checkbox\"\n                formControlName=\"showLabelAndUnit\"\n              />\n              <span></span>\n              <span translate>Display labels and units on y-axis</span>\n            </label>\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Show slider' | translate\"\n            >\n              <input\n                name=\"showSlider\"\n                type=\"checkbox\"\n                formControlName=\"showSlider\"\n              />\n              <span></span>\n              <span translate>Show slider</span>\n            </label>\n          </c8y-form-group>\n        </fieldset>\n      </form>\n    </div>\n  </div>\n</div>\n<ng-template #dateSelectionHelpTemplate>\n  <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n","import {\n  Component,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  AGGREGATION_ICONS,\n  AGGREGATION_TEXTS,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  gettext,\n  WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmStatusType,\n  SeveritySettings,\n  aggregationType\n} from '@c8y/client';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChartsComponent,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  DatapointsGraphWidgetTimeProps,\n  SeverityType,\n  AlarmDetailsExtended,\n  AlarmOrEventExtended,\n  EventDetailsExtended,\n  ChartEventsService,\n  ChartAlarmsService,\n  TimeContextProps\n} from '@c8y/ngx-components/echart';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { Subject } from 'rxjs';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\n@Component({\n  selector: 'c8y-datapoints-graph-widget-view',\n  templateUrl: './datapoints-graph-widget-view.component.html',\n  standalone: true,\n  imports: [\n    A11yModule,\n    CommonModule,\n    ChartsComponent,\n    CoreModule,\n    TooltipModule,\n    BsDropdownModule,\n    PopoverModule,\n    AlarmsModule,\n    TimeContextComponent\n  ],\n  providers: [ChartEventsService, ChartAlarmsService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnChanges, OnDestroy {\n  events: EventDetailsExtended[] = [];\n  alarms: AlarmDetailsExtended[] = [];\n  AGGREGATION_ICONS = AGGREGATION_ICONS;\n  AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n  alerts: DynamicComponentAlertAggregator | undefined;\n  datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n  timeProps: DatapointsGraphWidgetTimeProps | undefined;\n  hasAtLeastOneDatapointActive = true;\n  hasAtLeastOneAlarmActive = true;\n  timeControlsFormGroup: ReturnType<DatapointsGraphWidgetViewComponent['initForm']>;\n  isMarkedAreaEnabled = false;\n  /*\n   * @description: The type of alarm that has marked area enabled.\n   */\n  enabledMarkedAreaAlarmType: string | undefined;\n\n  @Input() set config(value: DatapointsGraphWidgetConfig) {\n    this.displayConfig = cloneDeep(value);\n  }\n  get config(): never {\n    throw Error(\n      '\"config\" property should not be referenced in view component to avoid mutating data.'\n    );\n  }\n  @ViewChild(ChartsComponent) chartComponent!: ChartsComponent;\n  displayConfig: DatapointsGraphWidgetConfig | undefined;\n  legendHelp = this.translate.instant(\n    gettext(`<ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n    <li>\n      <b>Visibility:</b>\n      use visibility icon to toggle datapoint, alarm or event visibility on chart. At least one datapoint is required to display chart.\n    </li>\n    <li>\n      <b>Alarm details</b>\n      Click alarm legend item to highlight area between alarm raised timestamp and alarm cleared timestamp.\n      You can also click alarm markline on chart to highlight alarm and to pause tooltip. Click on highlighted area or legend item to cancel highlighting.\n    </li>\n  </ul>`)\n  );\n  readonly disableZoomInLabel = gettext('Disable zoom in');\n  readonly enableZoomInLabel = gettext(\n    'Click to enable zoom, then click and drag on the desired area in the chart.'\n  );\n  readonly hideDatapointLabel = gettext('Hide data point');\n  readonly showDatapointLabel = gettext('Show data point');\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private translate: TranslateService,\n    private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n    @Optional() private dashboardContextComponent: ContextDashboardComponent\n  ) {\n    this.timeControlsFormGroup = this.initForm();\n    this.timeControlsFormGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n      this.displayConfig = { ...this.displayConfig, ...value };\n    });\n  }\n\n  ngOnInit() {\n    this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n    if (this.displayConfig.dateFrom && this.displayConfig.dateTo) {\n      this.timeProps = {\n        dateFrom: new Date(this.displayConfig?.dateFrom),\n        dateTo: new Date(this.displayConfig?.dateTo),\n        interval: this.displayConfig?.interval,\n        realtime: this.displayConfig?.realtime,\n        aggregation: this.displayConfig?.realtime ? null : this.displayConfig?.aggregation\n      };\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.timeControlsFormGroup.patchValue(this.displayConfig || {});\n    const config: DatapointsGraphWidgetConfig = changes['config']?.currentValue;\n    if (config?.date && config?.widgetInstanceGlobalTimeContext && this.displayConfig?.date) {\n      if (!this.displayConfig.sliderChange) {\n        this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n      }\n      this.timePropsChanged({\n        currentDateContextFromDate: this.displayConfig?.date[0].toISOString(),\n        currentDateContextToDate: this.displayConfig?.date[1].toISOString(),\n        currentDateContextInterval: this.displayConfig?.interval,\n        realtime: this.displayConfig?.realtime,\n        aggregation: this.displayConfig?.aggregation\n      });\n    }\n  }\n\n  timePropsChanged(timeProps: TimeContextProps): void {\n    const patchValues = {\n      dateFrom: new Date(timeProps.currentDateContextFromDate),\n      dateTo: new Date(timeProps.currentDateContextToDate),\n      interval: timeProps.currentDateContextInterval,\n      ...(timeProps.aggregation && { aggregation: timeProps.aggregation }),\n      ...(timeProps.realtime && { realtime: timeProps.realtime })\n    };\n    this.timeControlsFormGroup.patchValue(patchValues);\n  }\n\n  updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n    if (this.displayConfig?.widgetInstanceGlobalTimeContext) {\n      this.widgetTimeContextDateRangeService.emitPropertyUpdate(timeProps);\n    }\n    this.timeControlsFormGroup.patchValue(timeProps);\n    this.timeProps = { ...timeProps, realtime: false };\n  }\n\n  updateTimeRangeOnRealtime(\n    timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n  ): void {\n    this.timeControlsFormGroup.patchValue(timeRange, { emitEvent: false });\n  }\n\n  toggleChart(datapoint: DatapointsGraphKPIDetails): void {\n    if (\n      this.displayConfig?.datapoints?.filter(dp => dp.__active).length === 1 &&\n      datapoint.__active\n    ) {\n      // at least 1 datapoint should be active\n      this.hasAtLeastOneDatapointActive = false;\n      return;\n    }\n    datapoint.__active = !datapoint.__active;\n    this.hasAtLeastOneDatapointActive = true;\n    this.displayConfig = { ...this.displayConfig };\n  }\n\n  handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n    const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n    const dpMatch = this.displayConfig?.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n    if (!dpMatch) {\n      return;\n    }\n    this.datapointsOutOfSync.set(dpMatch, true);\n  }\n\n  toggleMarkedArea(alarm: AlarmDetailsExtended): void {\n    this.enabledMarkedAreaAlarmType = alarm.filters.type;\n    const params = {\n      data: {\n        itemType: alarm.filters.type\n      }\n    };\n    this.chartComponent.onChartClick(params);\n  }\n\n  toggleAlarmEventType(alarmOrEvent: AlarmOrEventExtended): void {\n    if (alarmOrEvent.timelineType === 'ALARM') {\n      this.alarms = this.alarms.map(alarm => {\n        if (alarm.filters.type === alarmOrEvent.filters.type) {\n          alarm.__hidden = !alarm.__hidden;\n        }\n        return alarm;\n      });\n    } else {\n      this.events = this.events.map(event => {\n        if (event.filters.type === alarmOrEvent.filters.type) {\n          event.__hidden = !event.__hidden;\n        }\n        return event;\n      });\n    }\n    this.displayConfig = { ...this.displayConfig };\n  }\n\n  updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n    this.alarms = alarmsEventsConfigs.filter(\n      alarm => alarm.timelineType === 'ALARM'\n    ) as AlarmDetailsExtended[];\n    this.events = alarmsEventsConfigs.filter(\n      event => event.timelineType === 'EVENT'\n    ) as EventDetailsExtended[];\n    if (this.alarms.length === 0 || !this.alarms.find(alarm => alarm.__active)) {\n      this.hasAtLeastOneAlarmActive = false;\n    }\n  }\n\n  filterSeverity(eventTarget: any): void {\n    this.alarms = this.alarms.map(alarm => {\n      if (!alarm.__severity) {\n        alarm.__severity = [];\n      }\n      alarm.__severity = Object.keys(eventTarget.severityOptions).filter(\n        (severity): severity is keyof SeveritySettings =>\n          eventTarget.severityOptions[severity as keyof SeveritySettings]\n      ) as SeverityType[];\n\n      if (!alarm.__status) {\n        alarm.__status = [];\n      }\n      const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n      const filteredStatuses = eventTarget.showCleared\n        ? statuses\n        : statuses.filter(status => status !== 'CLEARED');\n      alarm.__status = filteredStatuses;\n      return alarm;\n    });\n    this.displayConfig = { ...this.displayConfig };\n  }\n\n  private assignContextFromContextDashboard(datapoint: KPIDetails) {\n    if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n      return;\n    }\n    const context = this.dashboardContextComponent?.context;\n    if (context?.id) {\n      const { name, id } = context;\n      datapoint.__target = { name, id };\n    }\n  }\n\n  private initForm() {\n    const form = this.formBuilder.group({\n      dateFrom: [undefined as unknown as Date, [Validators.required]],\n      dateTo: [undefined as unknown as Date, [Validators.required]],\n      interval: [\n        this.displayConfig?.interval || ('hours' as Interval['id']),\n        [Validators.required]\n      ],\n      aggregation: [null as aggregationType | null, []],\n      realtime: [false, [Validators.required]],\n      widgetInstanceGlobalTimeContext: [false, []]\n    });\n    form.patchValue(this.displayConfig || {});\n    return form;\n  }\n}\n","<div class=\"p-l-16 p-r-16\">\n  <div class=\"d-flex gap-16 a-i-start\">\n    <div\n      class=\"btn-group btn-group-sm flex-no-shrink\"\n      *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n    >\n      <button\n        class=\"btn btn-default\"\n        [attr.aria-label]=\"'Aggregation' | translate\"\n        tooltip=\"{{\n          (displayConfig?.aggregation\n            ? AGGREGATION_TEXTS[displayConfig.aggregation]\n            : AGGREGATION_TEXTS.undefined\n          ) | translate\n        }}\"\n        placement=\"top\"\n        container=\"body\"\n        type=\"button\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n      >\n        <i\n          class=\"icon-14\"\n          [c8yIcon]=\"\n            displayConfig?.aggregation\n              ? AGGREGATION_ICONS[displayConfig.aggregation]\n              : AGGREGATION_ICONS.undefined\n          \"\n        ></i>\n      </button>\n\n      <c8y-time-context\n        class=\"d-contents\"\n        (contextChange)=\"timePropsChanged($event)\"\n        [changedDateContext]=\"timeProps\"\n        [controlsAvailable]=\"{\n          realtime: true,\n          timeRange: displayConfig?.displayDateSelection,\n          interval: displayConfig?.displayDateSelection,\n          aggregation: displayConfig?.displayAggregationSelection\n        }\"\n      ></c8y-time-context>\n    </div>\n    <c8y-alarms-filter\n      class=\"d-contents form-group-sm\"\n      *ngIf=\"hasAtLeastOneAlarmActive\"\n      (filterApplied)=\"filterSeverity($event)\"\n    ></c8y-alarms-filter>\n\n    <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n      <button\n        class=\"btn btn-default\"\n        [attr.aria-label]=\"'Save as image' | translate\"\n        tooltip=\"{{ 'Save as image' | translate }}\"\n        container=\"body\"\n        type=\"button\"\n        (click)=\"chart.saveAsImage()\"\n        [adaptivePosition]=\"false\"\n      >\n        <i\n          class=\"icon-14\"\n          c8yIcon=\"image-file-checked\"\n        ></i>\n      </button>\n    </div>\n  </div>\n  <div\n    class=\"d-flex\"\n    style=\"align-items: center\"\n  >\n    <button\n      class=\"btn-help btn-help--sm m-r-8\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"legendHelpTemplate\"\n      placement=\"bottom\"\n      triggers=\"focus\"\n      container=\"body\"\n      [adaptivePosition]=\"false\"\n    ></button>\n    <div class=\"inner-scroll\">\n      <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n        <div\n          class=\"c8y-datapoint-pill flex-no-shrink\"\n          title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n          *ngFor=\"let datapoint of displayConfig.datapoints\"\n          [ngClass]=\"{ active: datapoint.__active }\"\n        >\n          <i\n            class=\"text-warning m-l-4\"\n            c8yIcon=\"exclamation-triangle\"\n            [tooltip]=\"'At least 1 active data points must be active.' | translate\"\n            container=\"body\"\n            *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n            [adaptivePosition]=\"false\"\n          ></i>\n          <button\n            class=\"c8y-datapoint-pill__btn\"\n            title=\"{{\n              (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n            }} \"\n            type=\"button\"\n            (click)=\"toggleChart(datapoint)\"\n          >\n            <i\n              class=\"icon-14\"\n              [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n            ></i>\n          </button>\n          <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n            <i\n              class=\"m-r-4 icon-14\"\n              c8yIcon=\"circle\"\n              [ngStyle]=\"{\n                color: datapoint.color\n              }\"\n            ></i>\n            <span\n              class=\"text-truncate\"\n              [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n            >\n              <span class=\"text-truncate\">\n                {{ datapoint.label }}\n              </span>\n              <small class=\"text-muted text-10\">\n                {{ datapoint.__target.name }}\n              </small>\n            </span>\n            <i\n              class=\"text-warning m-l-4\"\n              c8yIcon=\"exclamation-triangle\"\n              [tooltip]=\"\n                'Measurements received for this data point may be out of sync.' | translate\n              \"\n              container=\"body\"\n              *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n              [adaptivePosition]=\"false\"\n            ></i>\n          </div>\n        </div>\n        <!-- Alarms  -->\n\n        <ng-container *ngFor=\"let alarm of alarms\">\n          <div\n            class=\"c8y-alarm-pill flex-no-shrink\"\n            title=\"{{ alarm.filters.type }} \"\n            *ngIf=\"alarm.__active\"\n          >\n            <i\n              class=\"text-warning m-l-4\"\n              c8yIcon=\"exclamation-triangle\"\n              [tooltip]=\"\n                'Alarm of this type is currently active and outside of the selected time range'\n                  | translate\n              \"\n              container=\"body\"\n              *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n              [adaptivePosition]=\"false\"\n            ></i>\n            <button\n              class=\"c8y-alarm-pill__btn\"\n              title=\"{{ alarm.filters.type }} \"\n              type=\"button\"\n              (click)=\"toggleAlarmEventType(alarm)\"\n            >\n              <i\n                class=\"icon-14\"\n                [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n              ></i>\n            </button>\n            <button\n              class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n              (click)=\"toggleMarkedArea(alarm)\"\n              [ngClass]=\"{\n                active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n              }\"\n            >\n              <span\n                class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n                [style.background-color]=\"alarm.color\"\n              >\n                <i\n                  class=\"stroked-icon\"\n                  c8yIcon=\"bell\"\n                ></i>\n              </span>\n              <span\n                class=\"text-truncate\"\n                [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n              >\n                <span class=\"text-truncate\">\n                  {{ alarm.filters.type }}\n                </span>\n                <small class=\"text-muted text-10\">\n                  {{ alarm.__target.name }}\n                </small>\n              </span>\n            </button>\n          </div>\n        </ng-container>\n\n        <!-- Events -->\n        <ng-container *ngFor=\"let event of events\">\n          <div\n            class=\"c8y-event-pill flex-no-shrink\"\n            title=\"{{ event.filters.type }}\"\n            *ngIf=\"event.__active\"\n          >\n            <button\n              class=\"c8y-event-pill__btn\"\n              title=\"{{ event.filters.type }} \"\n              type=\"button\"\n              (click)=\"toggleAlarmEventType(event)\"\n            >\n              <i\n                class=\"icon-14\"\n                [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n              ></i>\n            </button>\n            <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n              <span\n                class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n                [ngStyle]=\"{ 'background-color': event.color }\"\n              >\n                <i\n                  class=\"stroked-icon\"\n                  c8yIcon=\"c8y-events\"\n                ></i>\n              </span>\n              <span\n                class=\"text-truncate\"\n                [ngClass]=\"{ 'text-muted': event.__hidden }\"\n              >\n                <span class=\"text-truncate\">\n                  {{ event.filters.type }}\n                </span>\n                <small class=\"text-muted text-10\">\n                  {{ event.__target.name }}\n                </small>\n              </span>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n</div>\n\n<c8y-charts\n  #chart\n  [config]=\"displayConfig\"\n  [alerts]=\"alerts\"\n  (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n  (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n  (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n  (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n  (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n  <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i5","i1","i2","i4","CommonModule","i6","i7","i8"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiEa,oCAAoC,CAAA;IAuC/C,WACsB,CAAA,YAAmC,EACnC,yBAAoD,EAAA;QADpD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;QACnC,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;AAtCzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAI/F,IAAc,CAAA,cAAA,GAAG,uBAAuB,CAAC;QAEzC,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CACxC,OAAO,CAAC,CAAA;;;;;;;;;;;;;;AAcJ,OAAA,CAAA,CAAC,CACN,CAAC;AACF,QAAA,IAAA,CAAA,iCAAiC,GAA2C;AAC1E,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,IAAwB,CAAA,wBAAA,GAA2C,EAAE,CAAC;QACtE,IAAsB,CAAA,sBAAA,GAAG,KAAK,CAAC;QAC/B,IAA+B,CAAA,+BAAA,GAAG,KAAK,CAAC;AAEhC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAMrC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;KAClC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CACrC,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,KAAK,OAAO,CAAmB,CAC9F,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CACrC,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,KAAK,OAAO,CAAmB,CAC9F,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3E,IAAI,CAAC,MAAM,GAAG;AACZ,gBAAA,GAAG,KAAK;AACR,gBAAA,mBAAmB,EAAE;oBACnB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;AACvC,iBAAA;aACF,CAAC;YACF,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACpC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,+BAA+B,EAAE;YAChD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,EAAE,CAAC,CAAC;SAC5F;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC9C,IAAI,CAAC,SAAS,GAAG;gBACf,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;gBACzC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACrC,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ;AAC/B,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ;AAC/B,gBAAA,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW;aACrE,CAAC;SACH;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,YAAY,CACV,MAAoC,EAAA;QAEpC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,EAAE;AAClC,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtE,gBAAA,mBAAmB,EAAE;oBACnB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;AACvC,iBAAA;AACF,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,gBAAgB,CAAC,SAA2B,EAAA;QAC1C,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC7D;AACD,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,SAAS,CAAC,0BAA0B,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC1E,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC;aAC/E;YACD,OAAO;SACR;AACD,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC;AACxD,YAAA,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC;YACpD,QAAQ,EAAE,SAAS,CAAC,0BAA0B;AAC9C,YAAA,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;AACpE,YAAA,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC5D,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;KACxC;AAED,IAAA,0BAA0B,CAAC,SAAyC,EAAA;AAClE,QAAA,MAAM,gBAAgB,GAAG;YACvB,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;AACxB,YAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,QAAQ;SACzC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,EAAE,EAAE;AAC9D,YAAA,IAAI,CAAC,iCAAiC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;SACjF;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;KAClE;AAED,IAAA,yBAAyB,CACvB,SAAmE,EAAA;AAEnE,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KAC5D;AAED,IAAA,mBAAmB,CAAC,aAAsC,EAAA;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,aAAa,KAAK,uBAAuB,CAAC,MAAM,EAAE;YACpD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO;SACR;;QAGD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,YAAA,+BAA+B,EAAE,IAAI;AACrC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,oBAAoB,EAAE,KAAK;AAC5B,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,iCAAiC,CAAC,SAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,qBAAqB,EAAE;YAC1D,OAAO;SACR;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;AAC3C,QAAA,IAAI,OAAO,EAAE,EAAE,EAAE;AACf,YAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC;SACrD;KACF;IAEO,0BAA0B,GAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,IACzD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CACjF,CAAC;QAEF,cAAc,CAAC,MAAK;YAClB,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;aAC9C;iBAAM;AACL,gBAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;aAC7C;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC,YAAA,UAAU,EAAE;gBACV,EAAiC;gBACjC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,aAAA;YACD,MAAM,EAAE,CAAC,EAAoB,CAAC;YAC9B,MAAM,EAAE,CAAC,EAAoB,CAAC;AAC9B,YAAA,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7B,YAAA,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9B,YAAA,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACnC,YAAA,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5B,YAAA,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,YAAA,2BAA2B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AACxC,YAAA,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5C,YAAA,4BAA4B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AACzC,YAAA,QAAQ,EAAE,CAAC,IAAuB,EAAE,EAAE,CAAC;AACvC,YAAA,MAAM,EAAE,CAAC,IAAuB,EAAE,EAAE,CAAC;YACrC,QAAQ,EAAE,CAAC,MAAwB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAA,WAAW,EAAE,CAAC,IAA8B,EAAE,EAAE,CAAC;YACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACzC,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/C,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAChD,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,EAAE;AACjD,YAAA,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC;YACpD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC,iBAAiB,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;KACxD;IAEO,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,sBAAsB;YACzB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;KACzE;+GAxOU,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFpC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,EC/DrD,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gxUA4RA,EDvOI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,UAAU,ovDACV,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAIX,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAlBhD,SAAS;+BACE,oCAAoC,EAAA,IAAA,EACxC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAA,UAAA,EAEjB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,UAAU;wBACV,WAAW;wBACX,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,uBAAuB;wBACvB,wBAAwB;wBACxB,oBAAoB;AACrB,qBAAA,EAAA,SAAA,EACU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,gxUAAA,EAAA,CAAA;;0BA0ChD,QAAQ;;0BACR,QAAQ;yCAxCF,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEGK,kCAAkC,CAAA;IAiB7C,IAAa,MAAM,CAAC,KAAkC,EAAA;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;KACvC;AACD,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,KAAK,CACT,sFAAsF,CACvF,CAAC;KACH;AAwBD,IAAA,WAAA,CACU,WAAwB,EACxB,SAA2B,EAC3B,iCAAoE,EACxD,yBAAoD,EAAA;QAHhE,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAiC,CAAA,iCAAA,GAAjC,iCAAiC,CAAmC;QACxD,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;QAnD1E,IAAM,CAAA,MAAA,GAA2B,EAAE,CAAC;QACpC,IAAM,CAAA,MAAA,GAA2B,EAAE,CAAC;QACpC,IAAiB,CAAA,iBAAA,GAAG,iBAAiB,CAAC;QACtC,IAAiB,CAAA,iBAAA,GAAG,iBAAiB,CAAC;AAEtC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,GAAG,EAAsC,CAAC;QAEpE,IAA4B,CAAA,4BAAA,GAAG,IAAI,CAAC;QACpC,IAAwB,CAAA,wBAAA,GAAG,IAAI,CAAC;QAEhC,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAgB5B,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CACjC,OAAO,CAAC,CAAA;;;;;;;;;;AAUJ,OAAA,CAAA,CAAC,CACN,CAAC;AACO,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,iBAAiB,GAAG,OAAO,CAClC,6EAA6E,CAC9E,CAAC;AACO,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAQrC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACvF,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC;AAC3D,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC5D,IAAI,CAAC,SAAS,GAAG;gBACf,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;gBAChD,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC5C,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ;AACtC,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ;AACtC,gBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW;aACnF,CAAC;SACH;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAgC,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;AAC5E,QAAA,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,+BAA+B,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AACvF,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACpC,gBAAA,IAAI,CAAC,iCAAiC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;aACrE;YACD,IAAI,CAAC,gBAAgB,CAAC;gBACpB,0BAA0B,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBACrE,wBAAwB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACnE,gBAAA,0BAA0B,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ;AACxD,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ;AACtC,gBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW;AAC7C,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,gBAAgB,CAAC,SAA2B,EAAA;AAC1C,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC;AACxD,YAAA,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC;YACpD,QAAQ,EAAE,SAAS,CAAC,0BAA0B;AAC9C,YAAA,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;AACpE,YAAA,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC5D,CAAC;AACF,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;KACpD;AAED,IAAA,0BAA0B,CAAC,SAAyC,EAAA;AAClE,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,+BAA+B,EAAE;AACvD,YAAA,IAAI,CAAC,iCAAiC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SACtE;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACpD;AAED,IAAA,yBAAyB,CACvB,SAAmE,EAAA;AAEnE,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACxE;AAED,IAAA,WAAW,CAAC,SAAoC,EAAA;AAC9C,QAAA,IACE,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;YACtE,SAAS,CAAC,QAAQ,EAClB;;AAEA,YAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;YAC1C,OAAO;SACR;AACD,QAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;KAChD;AAED,IAAA,wBAAwB,CAAC,WAAsC,EAAA;QAC7D,MAAM,GAAG,GAAG,CAAC,EAAc,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KAC7C;AAED,IAAA,gBAAgB,CAAC,KAA2B,EAAA;QAC1C,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE;AACJ,gBAAA,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;AAC7B,aAAA;SACF,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC1C;AAED,IAAA,oBAAoB,CAAC,YAAkC,EAAA;AACrD,QAAA,IAAI,YAAY,CAAC,YAAY,KAAK,OAAO,EAAE;YACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;AACpC,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AACpD,oBAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAClC;AACD,gBAAA,OAAO,KAAK,CAAC;AACf,aAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;AACpC,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AACpD,oBAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAClC;AACD,gBAAA,OAAO,KAAK,CAAC;AACf,aAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;KAChD;AAED,IAAA,qBAAqB,CAAC,mBAA2C,EAAA;AAC/D,QAAA,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CACtC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,CACd,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CACtC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,CACd,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;SACvC;KACF;AAED,IAAA,cAAc,CAAC,WAAgB,EAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AACrB,gBAAA,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;aACvB;YACD,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAChE,CAAC,QAAQ,KACP,WAAW,CAAC,eAAe,CAAC,QAAkC,CAAC,CAChD,CAAC;AAEpB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;aACrB;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAsB,CAAC;AACvE,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW;AAC9C,kBAAE,QAAQ;AACV,kBAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC;AACpD,YAAA,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AAClC,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;KAChD;AAEO,IAAA,iCAAiC,CAAC,SAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,qBAAqB,EAAE;YAC1D,OAAO;SACR;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC;AACxD,QAAA,IAAI,OAAO,EAAE,EAAE,EAAE;AACf,YAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SACnC;KACF;IAEO,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,QAAQ,EAAE,CAAC,SAA4B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,SAA4B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7D,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,IAAK,OAA0B;gBAC3D,CAAC,UAAU,CAAC,QAAQ,CAAC;AACtB,aAAA;AACD,YAAA,WAAW,EAAE,CAAC,IAA8B,EAAE,EAAE,CAAC;YACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7C,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC;KACb;+GAxOU,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAFlC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2BxC,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9F5B,y1RAqQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5MI,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACVC,cAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAIX,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAjB9C,SAAS;+BACE,kCAAkC,EAAA,UAAA,EAEhC,IAAI,EACP,OAAA,EAAA;wBACP,UAAU;wBACVH,cAAY;wBACZ,eAAe;wBACf,UAAU;wBACV,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,YAAY;wBACZ,oBAAoB;AACrB,qBAAA,EAAA,SAAA,EACU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,y1RAAA,EAAA,CAAA;;0BAsDhD,QAAQ;yCAnCE,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAQsB,cAAc,EAAA,CAAA;sBAAzC,SAAS;uBAAC,eAAe,CAAA;;;AE9F5B;;AAEG;;;;"}