{"version":3,"file":"c8y-ngx-components-protocol-lpwan.mjs","sources":["../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.ts","../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.model.ts","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.service.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.html","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.ts","../../protocol-lpwan/lpwan-set-device-protocol.service.ts","../../protocol-lpwan/lpwan-set-connections.component.ts","../../protocol-lpwan/lpwan-set-connections.component.html","../../protocol-lpwan/lpwan-set-device-protocol.component.ts","../../protocol-lpwan/lpwan-set-device-protocol.component.html","../../protocol-lpwan/lpwan-agent.guard.ts","../../protocol-lpwan/lpwan-protocol.module.ts","../../protocol-lpwan/c8y-ngx-components-protocol-lpwan.ts"],"sourcesContent":["import { Component, EventEmitter, Output, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EmptyStateComponent, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'no-connections-found',\n  templateUrl: './no-connections-found.component.html',\n  imports: [EmptyStateComponent, IconDirective, C8yTranslatePipe]\n})\nexport class NoConnectionsFoundComponent {\n  @Output() onAction: EventEmitter<void> = new EventEmitter();\n  @Input() header: string = gettext('Connections');\n  addConnection() {\n    this.onAction.emit();\n  }\n}\n","<div class=\"card content-fullpage split-view--5-7\">\n  <div class=\"card-header separator grid__col--fullspan\">\n    <h4>{{ header | translate}}</h4>\n  </div>\n  <div class=\"inner-scroll split-view__list\">\n    <div class=\"bg-level-1 flex-grow\">\n      <div class=\"card-block large-padding\">\n        <c8y-ui-empty-state\n          [icon]=\"'plug'\"\n          [title]=\"'No connections found.' | translate\"\n          [subtitle]=\"'Click below to add a new connection.' | translate\"\n          [horizontal]=\"true\"\n        ></c8y-ui-empty-state>\n      </div>\n    </div>\n\n    <div class=\"card-footer separator\">\n      <button\n        title=\"{{ 'Add connection' | translate }}\"\n        class=\"btn btn-primary\"\n        (click)=\"addConnection()\"\n      >\n        <i [c8yIcon]=\"'plus-circle'\"></i>\n        {{ 'Add connection' | translate }}\n      </button>\n    </div>\n  </div>\n  <div class=\"inner-scroll split-view__detail\">\n    <div class=\"flex-grow\">\n      <div class=\"card-block large-padding\">\n        <c8y-ui-empty-state\n          [icon]=\"'more-details'\"\n          [title]=\"'No settings to display.' | translate\"\n          [subtitle]=\"'Add a connection.' | translate\"\n          [horizontal]=\"true\"\n        ></c8y-ui-empty-state>\n      </div>\n    </div>\n  </div>\n</div>\n","export enum ConnectionType {\n  ACTILITY,\n  SIGFOX,\n  LORIOT\n}\nexport interface Connection {\n  name: string;\n  baseUrl: string;\n  username: string;\n  password: string;\n  description: string;\n}\nexport interface SigfoxConnection extends Connection {\n  parentGroupId: string;\n}\nexport interface ActilityConnection extends Connection {\n  profileId: string;\n  routeApplicationServerId?: string;\n  routeApplicationServerKey?: string;\n  adminApiVersion: string;\n  coreApiVersion: string;\n  enterpriseConnection: boolean;\n}\n\nexport interface LoriotConnection extends Connection {\n  providerType: string;\n}\n\nexport function isSigfoxConnection(\n  connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is SigfoxConnection {\n  return typeof (connection as SigfoxConnection).parentGroupId !== 'undefined';\n}\nexport function isActilityConnection(\n  connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is ActilityConnection {\n  return typeof (connection as ActilityConnection).profileId !== 'undefined';\n}\n\nexport function isLoriotConnection(\n  connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is LoriotConnection {\n  return typeof (connection as LoriotConnection).providerType !== 'undefined';\n}\n\nexport type LpwanState =\n  | 'loadingConnection'\n  | 'loadingError'\n  | 'connectionAvailable'\n  | 'connectionNotAvailable'\n  | 'addConnections'\n  | 'savedSuccessfully'\n  | 'updateConnection';\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IApplication, IFetchOptions, IFetchResponse } from '@c8y/client';\nimport { AlertService, AppStateService } from '@c8y/ngx-components';\nimport {\n  ActilityConnection,\n  isActilityConnection,\n  isSigfoxConnection,\n  SigfoxConnection,\n  ConnectionType,\n  LoriotConnection,\n  isLoriotConnection\n} from './multiple-lns-connector.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MultipleLnsConnectorService {\n  private headers: any;\n  constructor(\n    private client: FetchClient,\n    private appStateService: AppStateService,\n    private alertService: AlertService\n  ) {\n    this.headers = { 'Content-Type': 'application/json' };\n  }\n\n  async list(connectionType: ConnectionType) {\n    const url = `${this.getBaseUrlByType(connectionType)}/lns-connection`;\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.headers\n    };\n    return this.client.fetch(url, options);\n  }\n\n  /**\n   * Saves the connection.\n   * @param connection The connection to be saved.\n   * @param originalName The original name of the connection, required to perform an update.\n   */\n  async save(\n    connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n    originalName: string = null\n  ) {\n    if (originalName) {\n      return this.update(connection, originalName);\n    }\n    return this.create(connection);\n  }\n\n  async detail(\n    connectionType: ConnectionType,\n    connectionName: string\n  ): Promise<ActilityConnection | SigfoxConnection | LoriotConnection | null> {\n    const name = connectionName.toLocaleLowerCase();\n    const url = `${this.getBaseUrlByType(connectionType)}/lns-connection/${encodeURIComponent(\n      String(name)\n    )}`;\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.headers\n    };\n    const res = await this.client.fetch(url, options);\n    if (res.status === 200) {\n      return await res.json();\n    }\n    return null;\n  }\n\n  async exists(connectionType: ConnectionType, connectionName: string): Promise<boolean> {\n    const connection = await this.detail(connectionType, connectionName);\n    return connection !== null;\n  }\n\n  async create(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n    connection.name = connection.name.toLocaleLowerCase();\n    const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n    const options: IFetchOptions = {\n      method: 'POST',\n      headers: this.headers,\n      body: JSON.stringify(connection)\n    };\n    return this.client.fetch(url, options);\n  }\n\n  async update(\n    connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n    originalName: string\n  ) {\n    connection.name = connection.name.toLocaleLowerCase();\n    const url = `${this.getBaseUrlByConnection(connection)}/lns-connection/${encodeURIComponent(\n      String(originalName)\n    )}`;\n    const options: IFetchOptions = {\n      method: 'PUT',\n      headers: this.headers,\n      body: JSON.stringify(connection)\n    };\n    return this.client.fetch(url, options);\n  }\n\n  getBaseUrlByConnection(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n    return isSigfoxConnection(connection)\n      ? 'service/sigfox-agent'\n      : isActilityConnection(connection)\n      ? 'service/actility'\n      : isLoriotConnection(connection)\n      ? 'service/loriot'\n      : '';\n  }\n\n  getBaseUrlByType(connectionType: ConnectionType) {\n    return connectionType === ConnectionType.SIGFOX\n      ? 'service/sigfox-agent'\n      : connectionType === ConnectionType.ACTILITY\n      ? 'service/actility'\n      : connectionType === ConnectionType.LORIOT\n      ? 'service/loriot'\n      : '';\n  }\n\n  async delete(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n    const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n    const options: IFetchOptions = {\n      method: 'DELETE'\n    };\n    return this.client.fetch(`${url}/${encodeURIComponent(String(connection.name))}`, options);\n  }\n\n  getApplication(name: string): Partial<IApplication> {\n    const { references } = this.appStateService.currentTenant.value.applications;\n    return references.find(({ application }) => application.name === name).application;\n  }\n\n  async download(url: string): Promise<IFetchResponse> {\n    try {\n      const options: IFetchOptions = {\n        method: 'GET'\n      };\n      return this.client.fetch(url, options);\n    } catch (e) {\n      this.alertService.addServerFailure(e);\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { saveAs } from 'file-saver';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'connection-info-with-download-csv',\n  templateUrl: './connection-info-with-download-csv.component.html',\n  imports: [C8yTranslatePipe]\n})\nexport class ConnectionInfoWithDownloadCsvComponent {\n  @Input() messageData: any;\n  @Input() appData: IApplication;\n  @Input() modalTitle: string;\n  @Input() connectionName: string;\n\n  constructor(\n    private modal: BsModalRef,\n    private connectorService: MultipleLnsConnectorService,\n    private alertService: AlertService,\n    private translateService: TranslateService\n  ) {}\n\n  dismiss() {\n    this.modal.hide();\n  }\n\n  async download() {\n    const url = `/service/${this.appData.contextPath}${this.messageData.attrs.URL}`;\n    const res = await this.connectorService.download(url);\n    if (res && res.status === 200) {\n      const streamData = await res.blob();\n      saveAs(\n        streamData,\n        this.translateService.instant(gettext('{{ connectionName }} - devices.csv'), {\n          connectionName: this.connectionName\n        })\n      );\n    } else {\n      this.alertService.danger(gettext('A server error occurred.'));\n    }\n  }\n}\n","<div class=\"modal-dialog\">\n  <div class=\"modal-content\">\n    <div class=\"c8y-prompt alert alert-danger\">\n      <h3 class=\"m-b-16\">\n        <i class=\"dlt-c8y-icon-exclamation-circle\"></i>\n        <span>{{ modalTitle | translate }}</span>\n      </h3>\n      <p class=\"text-break-word\">\n        {{ messageData.message | translate }}\n      </p>\n      <br>\n      <span class=\"btn-default\" (click)=\"download()\">{{\n        'Click the link to download the file with the affected devices.' | translate\n      }}</span>\n      <div class=\"alert-footer\">\n        <button\n          title=\"{{ 'Cancel' | translate }}\"\n          type=\"button\"\n          class=\"btn btn-default\"\n          (click)=\"dismiss()\"\n        >\n          {{ 'Cancel' | translate }}\n        </button>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ModalService,\n  Status,\n  LoadingComponent,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  IconDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { ConnectionType, LpwanState, SigfoxConnection } from './multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n  selector: 'sigfox-multiple-lns-connector',\n  templateUrl: './sigfox-multiple-lns-connector.component.html',\n  imports: [\n    NgIf,\n    LoadingComponent,\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NoConnectionsFoundComponent,\n    ListGroupComponent,\n    NgFor,\n    ListItemComponent,\n    ListItemIconComponent,\n    IconDirective,\n    FormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslateDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class SigfoxMultipleLnsConnectorComponent implements OnInit {\n  state: LpwanState = 'loadingConnection';\n  cloneDeep = cloneDeep;\n  connection: SigfoxConnection;\n  connections = Array<SigfoxConnection>();\n  showPassword = false;\n  @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n  cardHeader = gettext('Sigfox connections');\n  allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n  namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n  namePatternError = this.translateService.instant(\n    gettext(\n      'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n    ),\n    {\n      symbols: this.allowedSpecialCharacters\n    }\n  );\n  originalConnection: SigfoxConnection;\n  constructor(\n    private connectorService: MultipleLnsConnectorService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    private modalService: BsModalService,\n    private modal: ModalService\n  ) {}\n\n  async ngOnInit() {\n    await this.loadConnections();\n  }\n\n  async loadConnections() {\n    const res = await this.connectorService.list(ConnectionType.SIGFOX);\n    if (res && res.status !== 200) {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n      this.state = 'loadingError';\n    } else {\n      const list = await res.json();\n      this.connections = orderBy(list, ['name'], ['asc']);\n      await this.setModel();\n    }\n  }\n\n  async setModel(connectionObj = null) {\n    const resetConnection = await this.resetEditedUnsavedConnection();\n    this.connection = connectionObj\n      ? connectionObj\n      : this.state === 'savedSuccessfully'\n        ? this.connection\n        : (resetConnection ?? cloneDeep(head(this.connections)));\n    this.state = 'updateConnection';\n    this.showPassword = false;\n    this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n  }\n\n  async resetEditedUnsavedConnection(): Promise<SigfoxConnection | undefined> {\n    if (this.state !== 'updateConnection' || !this.originalConnection) {\n      return;\n    }\n\n    const { name } = this.originalConnection;\n    const originalData = find(this.connections, { name });\n    if (originalData) {\n      return cloneDeep(originalData);\n    }\n  }\n\n  async addConnection() {\n    await this.resetEditedUnsavedConnection();\n    this.connection = {} as SigfoxConnection;\n    this.originalConnection = {} as SigfoxConnection;\n    this.state = 'addConnections';\n    this.showPassword = true;\n  }\n\n  async save() {\n    const checkForConnectionName =\n      this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n        ? this.originalConnection.name\n        : this.connection.name;\n    const isConnectionExist = await this.connectorService.exists(\n      ConnectionType.SIGFOX,\n      checkForConnectionName\n    );\n    if (this.state === 'addConnections' && isConnectionExist) {\n      const mesg = this.translateService.instant(\n        gettext(`Connection with name \"{{ name }}\" already exists.`),\n        { name: this.connection.name }\n      );\n      this.alertService.danger(mesg);\n    } else {\n      return this.saveConnection();\n    }\n  }\n\n  async deleteConnection(originalConnection) {\n    const { name } = originalConnection;\n    const mesg = this.translateService.instant(\n      gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n      { name }\n    );\n\n    try {\n      await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n        ok: gettext('Delete'),\n        cancel: gettext('Cancel')\n      });\n\n      await this.delete(originalConnection);\n    } catch (error) {\n      // empty catch block\n    }\n  }\n\n  changePassword() {\n    this.showPassword = !this.showPassword;\n    if (this.connectorsForm.controls.password) {\n      this.connectorsForm.controls.password.setValue(null);\n    }\n  }\n\n  private async saveConnection() {\n    const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n    if (res && (res.status === 201 || res.status === 200)) {\n      this.state = 'savedSuccessfully';\n      this.alertService.success(gettext('Connection saved.'));\n      await this.loadConnections();\n    } else if (res && res.status === 500) {\n      const data = res.json ? await res.json() : undefined;\n      const app = this.connectorService.getApplication('sigfox-agent');\n      const initialState = {\n        messageData: data,\n        appData: app,\n        modalTitle: gettext('Failed to update the connection'),\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        connectionName: this.connection.name\n      };\n      this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n    } else {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n    }\n  }\n\n  private async delete(originalConnection) {\n    try {\n      const response = await this.connectorService.delete(originalConnection);\n\n      if (response.ok && response.status === 204) {\n        this.alertService.success(gettext('Connection deleted.'));\n        await this.loadConnections();\n      } else if (response && response.status === 500) {\n        const data = response.json ? await response.json() : undefined;\n        const app = this.connectorService.getApplication('sigfox-agent');\n        const initialState = {\n          messageData: data,\n          appData: app,\n          ariaDescribedby: 'modal-body',\n          ariaLabelledBy: 'modal-title',\n          modalTitle: gettext('Failed to delete the connection'),\n          connectionName: originalConnection.name\n        };\n        this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n      } else {\n        const data = response.json ? await response.json() : undefined;\n        this.alertService.addServerFailure({ data, response });\n      }\n    } catch (error) {\n      // empty catch block\n    }\n  }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n  <c8y-loading></c8y-loading>\n</ng-container>\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Settings' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Connectivity' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Sigfox' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n  <no-connections-found\n    (onAction)=\"addConnection()\"\n    *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n    [header]=\"cardHeader | translate\"\n  ></no-connections-found>\n  <div>\n    <div\n      class=\"card content-fullpage split-view--5-7\"\n      *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n    >\n      <div class=\"card-header separator grid__col--fullspan\">\n        <div class=\"card-title\">{{ cardHeader | translate }}</div>\n      </div>\n      <div class=\"inner-scroll split-view__list\">\n        <div class=\"bg-level-1 flex-grow\">\n          <c8y-list-group class=\"nav c8y-nav-stacked\">\n            <c8y-li\n              class=\"c8y-stacked-item p-0\"\n              [class.active]=\"connection.name === connectionBeingEdited\"\n              *ngFor=\"let connection of connections; let index = index\"\n              (click)=\"setModel(cloneDeep(connection))\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              <span title=\"{{ connection.name }}\">\n                {{ connection.name }}\n              </span>\n            </c8y-li>\n\n            <c8y-li\n              class=\"c8y-nav-stacked active\"\n              *ngIf=\"state === 'addConnections'\"\n              (click)=\"addConnection()\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              {{ 'New connection' | translate }}\n            </c8y-li>\n          </c8y-list-group>\n        </div>\n        <div class=\"card-footer separator-top\">\n          <button\n            class=\"btn btn-default\"\n            title=\"{{ 'Add connection' | translate }}\"\n            [disabled]=\"state === 'addConnections'\"\n            (click)=\"addConnection()\"\n          >\n            <i [c8yIcon]=\"'plus-circle'\"></i>\n            {{ 'Add connection' | translate }}\n          </button>\n        </div>\n      </div>\n\n      <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n      <div\n        class=\"inner-scroll split-view__detail\"\n        ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n      >\n        <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n          <button\n            class=\"btn btn-clean text-primary\"\n            title=\"{{ 'Back' | translate }}\"\n            ng-click=\"vm.deselect()\"\n          >\n            <i [c8yIcon]=\"'chevron-left'\"></i>\n            <span>{{ 'Back' | translate }}</span>\n          </button>\n        </div>\n        <form\n          class=\"d-contents\"\n          #connectorsForm=\"ngForm\"\n        >\n          <div class=\"flex-grow\">\n            <div class=\"card-block large-padding\">\n              <c8y-form-group>\n                <label for=\"name\">\n                  {{ 'Name' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"name\"\n                  name=\"name\"\n                  type=\"text\"\n                  required\n                  [placeholder]=\"'e.g. Sigfox connection' | translate\"\n                  [(ngModel)]=\"connection.name\"\n                  [pattern]=\"namePattern\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    [text]=\"namePatternError\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"description\">\n                  {{ 'Description' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"description\"\n                  name=\"description\"\n                  type=\"text\"\n                  [placeholder]=\"\n                    'e.g. This connection has a built-in functionality to…' | translate\n                  \"\n                  [(ngModel)]=\"connection.description\"\n                />\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"baseUrl\">\n                  {{ 'URL' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"baseUrl\"\n                  name=\"baseUrl\"\n                  type=\"text\"\n                  required\n                  [placeholder]=\"\n                    'e.g. {{ example }}' | translate : { example: 'https://backend.sigfox.com/api' }\n                  \"\n                  [(ngModel)]=\"connection.baseUrl\"\n                />\n              </c8y-form-group>\n              <c8y-form-group>\n                <label for=\"parentGroupId\">\n                  {{ 'Parent group ID' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"parentGroupId\"\n                  name=\"parentGroupId\"\n                  type=\"text\"\n                  required\n                  [placeholder]=\"\n                    'e.g. {{ example }}' | translate : { example: '58c1793b9e93a15370f71caa' }\n                  \"\n                  [(ngModel)]=\"connection.parentGroupId\"\n                  pattern=\"[a-z\\d]+\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    text=\"{{ 'Must be a valid Parent group ID' | translate }}\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"username\">\n                  {{ 'Username' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"username\"\n                  placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n                  name=\"username\"\n                  type=\"text\"\n                  required\n                  [(ngModel)]=\"connection.username\"\n                />\n              </c8y-form-group>\n              <c8y-form-group *ngIf=\"showPassword\">\n                <label for=\"password\">\n                  {{ 'Password' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"password\"\n                  placeholder=\"{{ 'e.g. my_password' | translate }}\"\n                  name=\"password\"\n                  type=\"password\"\n                  required\n                  [(ngModel)]=\"connection.password\"\n                />\n              </c8y-form-group>\n\n              <button\n                class=\"btn btn-default\"\n                name=\"changePassword\"\n                type=\"button\"\n                *ngIf=\"state === 'updateConnection'\"\n                (click)=\"changePassword()\"\n              >\n                <span\n                  title=\"{{ 'Change password' | translate }}\"\n                  *ngIf=\"!showPassword\"\n                >\n                  {{ 'Change password' | translate }}\n                </span>\n                <span\n                  title=\"{{ 'Cancel password change' | translate }}\"\n                  *ngIf=\"showPassword\"\n                >\n                  {{ 'Cancel password change' | translate }}\n                </span>\n              </button>\n            </div>\n          </div>\n\n          <div class=\"card-footer separator-top\">\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Cancel' | translate }}\"\n              type=\"button\"\n              (click)=\"setModel()\"\n              translate\n            >\n              Cancel\n            </button>\n            <button\n              class=\"btn btn-danger\"\n              title=\"{{ 'Delete' | translate }}\"\n              type=\"button\"\n              data-cy=\"sigfox-multiple-lns-connector.component--delete-connectivity\"\n              *ngIf=\"state === 'updateConnection'\"\n              (click)=\"deleteConnection(originalConnection)\"\n              translate\n            >\n              Delete\n            </button>\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Save' | translate }}\"\n              data-cy=\"sigfox-multiple-lns-connector.component--save-connectivity\"\n              type=\"submit\"\n              [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n              (click)=\"save()\"\n              translate\n            >\n              Save\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ModalService,\n  Status,\n  LoadingComponent,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  IconDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { head, orderBy, findIndex, escapeRegExp, cloneDeep } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ActilityConnection, ConnectionType, LpwanState } from './multiple-lns-connector.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n  selector: 'actility-multiple-lns-connector',\n  templateUrl: './actility-multiple-lns-connector.component.html',\n  imports: [\n    NgIf,\n    LoadingComponent,\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NoConnectionsFoundComponent,\n    ListGroupComponent,\n    NgFor,\n    ListItemComponent,\n    ListItemIconComponent,\n    IconDirective,\n    FormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslateDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class ActilityMultipleLnsConnectorComponent implements OnInit {\n  state: LpwanState = 'loadingConnection';\n  connection: ActilityConnection;\n  connections = Array<ActilityConnection>();\n  @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n  showPassword = false;\n  cardHeader = gettext('Actility connections');\n  allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n  namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n  namePatternError = this.translateService.instant(\n    gettext(\n      'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n    ),\n    {\n      symbols: this.allowedSpecialCharacters\n    }\n  );\n  originalConnection: ActilityConnection;\n  constructor(\n    private connectorService: MultipleLnsConnectorService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    private modal: ModalService,\n    private modalService: BsModalService\n  ) {}\n\n  async ngOnInit() {\n    await this.loadConnections();\n  }\n\n  async loadConnections() {\n    const res = await this.connectorService.list(ConnectionType.ACTILITY);\n    if (res && res.status !== 200) {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n      this.state = 'loadingError';\n    } else {\n      const list = await res.json();\n      this.connections = orderBy(list, ['name'], ['asc']);\n      await this.setModel();\n    }\n  }\n\n  async setModel(connectionObj = null) {\n    await this.resetEditedUnsavedConnection();\n    this.connection = connectionObj\n      ? connectionObj\n      : this.state === 'savedSuccessfully'\n        ? this.connection\n        : head(this.connections);\n    this.state = 'updateConnection';\n    this.showPassword = false;\n    this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n  }\n\n  async setAdminAndCoreApiVersion() {\n    this.connection.adminApiVersion = 'latest';\n    this.connection.coreApiVersion = 'latest';\n  }\n\n  async resetEditedUnsavedConnection() {\n    if (this.state !== 'updateConnection' || !this.originalConnection) {\n      return;\n    }\n\n    const { name } = this.originalConnection;\n    const index = findIndex(this.connections, { name });\n    if (index !== -1) {\n      const originalData = (await this.connectorService.detail(\n        ConnectionType.ACTILITY,\n        name\n      )) as ActilityConnection;\n      this.connections[index] = originalData;\n    }\n  }\n\n  async addConnection() {\n    await this.resetEditedUnsavedConnection();\n    this.connection = {} as ActilityConnection;\n    this.originalConnection = {} as ActilityConnection;\n    this.state = 'addConnections';\n    this.showPassword = true;\n    await this.setAdminAndCoreApiVersion();\n  }\n\n  async save() {\n    const checkForConnectionName =\n      this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n        ? this.originalConnection.name\n        : this.connection.name;\n    const isConnectionExist = await this.connectorService.exists(\n      ConnectionType.ACTILITY,\n      checkForConnectionName\n    );\n    if (this.state === 'addConnections' && isConnectionExist) {\n      const mesg = this.translateService.instant(\n        gettext(`Connection with name \"{{ name }}\" already exists.`),\n        { name: this.connection.name }\n      );\n      this.alertService.danger(mesg);\n    } else {\n      return this.saveConnection();\n    }\n  }\n\n  async deleteConnection(originalConnection) {\n    const { name } = originalConnection;\n    const mesg = this.translateService.instant(\n      gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n      { name }\n    );\n\n    try {\n      await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n        ok: gettext('Delete'),\n        cancel: gettext('Cancel')\n      });\n\n      await this.delete(originalConnection);\n    } catch (error) {\n      // empty catch block\n    }\n  }\n\n  changePassword() {\n    this.showPassword = !this.showPassword;\n    if (this.connectorsForm.controls.password) {\n      this.connectorsForm.controls.password.setValue(null);\n    }\n  }\n\n  async saveConnection() {\n    const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n    if (res && (res.status === 201 || res.status === 200)) {\n      this.state = 'savedSuccessfully';\n      this.alertService.success(gettext('Connection saved.'));\n      await this.loadConnections();\n    } else if (res && res.status === 500) {\n      const data = res.json ? await res.json() : undefined;\n      const app = this.connectorService.getApplication('actility');\n      const initialState = {\n        messageData: data,\n        appData: app,\n        modalTitle: gettext('Failed to update the connection'),\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        connectionName: this.connection.name\n      };\n      this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n    } else {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n    }\n  }\n\n  private async delete(originalConnection) {\n    try {\n      const response = await this.connectorService.delete(originalConnection);\n\n      if (response.ok && response.status === 204) {\n        this.alertService.success(gettext('Connection deleted.'));\n        await this.loadConnections();\n      } else if (response && response.status === 500) {\n        const data = response.json ? await response.json() : undefined;\n        const app = this.connectorService.getApplication('actility');\n        const initialState = {\n          messageData: data,\n          appData: app,\n          ariaDescribedby: 'modal-body',\n          ariaLabelledBy: 'modal-title',\n          modalTitle: gettext('Failed to delete the connection'),\n          connectionName: originalConnection.name\n        };\n        this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n      } else {\n        const data = response.json ? await response.json() : undefined;\n        this.alertService.addServerFailure({ data, response });\n      }\n    } catch (error) {\n      // empty catch block\n    }\n  }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n  <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [label]=\"'Settings' | translate\"\n    [icon]=\"'cog'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Connectivity' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Actility' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n  <no-connections-found\n    (onAction)=\"addConnection()\"\n    *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n    [header]=\"cardHeader | translate\"\n  ></no-connections-found>\n  <div>\n    <div\n      class=\"card content-fullpage split-view--5-7\"\n      *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n    >\n      <div class=\"card-header separator grid__col--fullspan\">\n        <div class=\"card-title\">{{ cardHeader | translate }}</div>\n      </div>\n      <div class=\"inner-scroll split-view__list\">\n        <div class=\"bg-level-1 flex-grow\">\n          <c8y-list-group class=\"nav c8y-nav-stacked\">\n            <c8y-li\n              class=\"c8y-stacked-item p-0\"\n              [class.active]=\"connection.name === connectionBeingEdited\"\n              *ngFor=\"let connection of connections; let index = index\"\n              (click)=\"setModel(connection)\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              <span title=\"{{ connection.name }}\">\n                {{ connection.name }}\n              </span>\n            </c8y-li>\n\n            <c8y-li\n              *ngIf=\"state === 'addConnections'\"\n              class=\"c8y-nav-stacked active\"\n              (click)=\"addConnection()\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              {{ 'New connection' | translate }}\n            </c8y-li>\n          </c8y-list-group>\n        </div>\n        <div class=\"card-footer separator-top\">\n          <button\n            [disabled]=\"state === 'addConnections'\"\n            title=\"{{ 'Add connection' | translate }}\"\n            class=\"btn btn-default\"\n            (click)=\"addConnection()\"\n          >\n            <i [c8yIcon]=\"'plus-circle'\"></i>\n            {{ 'Add connection' | translate }}\n          </button>\n        </div>\n      </div>\n\n      <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n      <div\n        class=\"inner-scroll split-view__detail\"\n        ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n      >\n        <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n          <button\n            title=\"{{ 'Back' | translate }}\"\n            class=\"btn btn-clean text-primary\"\n            ng-click=\"vm.deselect()\"\n          >\n            <i [c8yIcon]=\"'chevron-left'\"></i>\n            <span>{{ 'Back' | translate }}</span>\n          </button>\n        </div>\n        <form #connectorsForm=\"ngForm\" class=\"d-contents\">\n          <div class=\"flex-grow\">\n            <div class=\"card-block large-padding\">\n              <c8y-form-group>\n                <label for=\"name\">\n                  {{ 'Name' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"'e.g. Actility connection' | translate\"\n                  id=\"name\"\n                  name=\"name\"\n                  [(ngModel)]=\"connection.name\"\n                  required\n                  [pattern]=\"namePattern\"\n                />\n                <c8y-messages>\n                  <c8y-message name=\"pattern\" [text]=\"namePatternError\"></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"description\">\n                  {{ 'Description' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"\n                    'e.g. This connection has a built-in functionality to…' | translate\n                  \"\n                  id=\"description\"\n                  name=\"description\"\n                  [(ngModel)]=\"connection.description\"\n                />\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"baseUrl\">\n                  {{ 'URL' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"\n                    'e.g. {{ example }}' | translate: { example: 'https://dx-api.thingpark.io' }\n                  \"\n                  id=\"baseUrl\"\n                  name=\"baseUrl\"\n                  [(ngModel)]=\"connection.baseUrl\"\n                  required\n                />\n              </c8y-form-group>\n              <c8y-form-group>\n                <label for=\"profileId\">\n                  {{ 'Profile ID' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'dev1-api' }\"\n                  id=\"profileId\"\n                  name=\"profileId\"\n                  [(ngModel)]=\"connection.profileId\"\n                  required\n                />\n              </c8y-form-group>\n              <!-- DM-1171 start-->\n              <c8y-form-group>\n                <label for=\"applicationServerId\">\n                  {{ 'Application server ID' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"'e.g. Application Server' | translate\"\n                  id=\"applicationServerId\"\n                  name=\"applicationServerId\"\n                  [(ngModel)]=\"connection.routeApplicationServerId\"\n                  [required]=\"connection.routeApplicationServerKey ? 'required' : null\"\n                />\n              </c8y-form-group>\n              <c8y-form-group>\n                <label for=\"applicationServerKey\">\n                  {{ 'Application server key' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"\n                    'e.g. {{ example }}'\n                      | translate: { example: '0011AEDF0011AEDF0011AEDF0011AEDF' }\n                  \"\n                  id=\"applicationServerKey\"\n                  name=\"applicationServerKey\"\n                  [(ngModel)]=\"connection.routeApplicationServerKey\"\n                  [required]=\"connection.routeApplicationServerId ? 'required' : null\"\n                  pattern=\"[A-Fa-f0-9]{32}\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    text=\"{{ 'Must be a valid server key' | translate }}\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n              <c8y-form-group>\n                <label for=\"adminApiVersion\">\n                  {{ 'Admin API version' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v102' }\"\n                  id=\"adminApiVersion\"\n                  name=\"adminApiVersion\"\n                  [(ngModel)]=\"connection.adminApiVersion\"\n                  required\n                  pattern=\"^v\\d+$|latest\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    text=\"{{ 'Must be a valid API version' | translate }}\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"coreApiVersion\">\n                  {{ 'Core API version' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v121' }\"\n                  id=\"coreApiVersion\"\n                  name=\"coreApiVersion\"\n                  [(ngModel)]=\"connection.coreApiVersion\"\n                  required\n                  pattern=\"^v\\d+$|latest\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    text=\"{{ 'Must be a valid API version' | translate }}\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n              <!-- DM-1171 end-->\n              <c8y-form-group>\n                <label for=\"username\">\n                  {{ 'Username' | translate }}\n                </label>\n                <input\n                  type=\"text\"\n                  class=\"form-control\"\n                  placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n                  id=\"username\"\n                  name=\"username\"\n                  [(ngModel)]=\"connection.username\"\n                  required\n                />\n              </c8y-form-group>\n\n              <c8y-form-group *ngIf=\"showPassword\">\n                <label for=\"password\">\n                  {{ 'Password' | translate }}\n                </label>\n                <input\n                  type=\"password\"\n                  class=\"form-control\"\n                  placeholder=\"{{ 'e.g. my_password' | translate }}\"\n                  id=\"password\"\n                  name=\"password\"\n                  [(ngModel)]=\"connection.password\"\n                  required\n                />\n              </c8y-form-group>\n              \n              <!-- DM-1254 begins -->\n              <c8y-form-group>\n                <label title=\"{{ 'Connection type' | translate }}\">\n                  {{ 'Connection type' | translate }}\n                </label>\n                <label title=\"{{ 'Thingpark Enterprise' }}\" class=\"c8y-radio radio-inline\">\n                  <input type=\"radio\" name=\"c8y-group\" [value]=\"true\"\n                  [(ngModel)]=\"connection.enterpriseConnection\" required>\n                  <span></span> \n                  <span>{{ 'Thingpark Enterprise' }}</span>\n                </label>\n                <label title=\"{{ 'Thingpark Wireless' }}\" class=\"c8y-radio radio-inline\">\n                  <input type=\"radio\" name=\"c8y-group\" [value]=\"false\"\n                  [(ngModel)]=\"connection.enterpriseConnection\" required>\n                  <span></span> \n                  <span>{{ 'Thingpark Wireless' }}</span>\n                </label>\n              </c8y-form-group>\n              <!-- DM-1254 ends -->\n              <button\n                *ngIf=\"state === 'updateConnection'\"\n                type=\"button\"\n                class=\"btn btn-default\"\n                name=\"changePassword\"\n                (click)=\"changePassword()\"\n              >\n                <span title=\"{{ 'Change password' | translate }}\" *ngIf=\"!showPassword\">\n                  {{ 'Change password' | translate }}\n                </span>\n                <span title=\"{{ 'Cancel password change' | translate }}\" *ngIf=\"showPassword\">\n                  {{ 'Cancel password change' | translate }}\n                </span>\n              </button>\n            </div>\n          </div>\n\n          <div class=\"card-footer separator-top\">\n            <button\n              title=\"{{ 'Cancel' | translate }}\"\n              class=\"btn btn-default\"\n              (click)=\"setModel()\"\n              translate\n              type=\"button\"\n            >\n              Cancel\n            </button>\n            <button\n              *ngIf=\"state === 'updateConnection'\"\n              title=\"{{ 'Delete' | translate }}\"\n              class=\"btn btn-danger\"\n              data-cy=\"actility-multiple-lns-connector--delete-connectivity\"\n              (click)=\"deleteConnection(originalConnection)\"\n              translate\n              type=\"button\"\n            >\n              Delete\n            </button>\n            <button\n              [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n              title=\"{{ 'Save' | translate }}\"\n              class=\"btn btn-primary\"\n              data-cy=\"actility-multiple-lns-connector.component--save-connectivity\"\n              (click)=\"save()\"\n              translate\n              type=\"submit\"\n            >\n              Save\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ModalService,\n  Status,\n  LoadingComponent,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  IconDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from '../connection-info-with-download-csv.component';\nimport { ConnectionType, LoriotConnection, LpwanState } from '../multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from '../multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from '../no-connections-found.component';\n\n@Component({\n  selector: 'loriot-multiple-lns-connector',\n  templateUrl: './loriot-multiple-lns-connector.component.html',\n  imports: [\n    NgIf,\n    LoadingComponent,\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NoConnectionsFoundComponent,\n    ListGroupComponent,\n    NgFor,\n    ListItemComponent,\n    ListItemIconComponent,\n    IconDirective,\n    FormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslateDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class LoriotMultipleLnsConnectorComponent implements OnInit {\n  state: LpwanState = 'loadingConnection';\n  cloneDeep = cloneDeep;\n  connection: LoriotConnection;\n  connections = Array<LoriotConnection>();\n  showPassword = false;\n  @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n  cardHeader = gettext('LORIOT connections');\n  allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n  namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n  namePatternError = this.translateService.instant(\n    gettext(\n      'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n    ),\n    {\n      symbols: this.allowedSpecialCharacters\n    }\n  );\n  originalConnection: LoriotConnection;\n  constructor(\n    private connectorService: MultipleLnsConnectorService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    private modalService: BsModalService,\n    private modal: ModalService\n  ) {}\n\n  async ngOnInit() {\n    await this.loadConnections();\n  }\n\n  async loadConnections() {\n    const res = await this.connectorService.list(ConnectionType.LORIOT);\n    if (res && res.status !== 200) {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n      this.state = 'loadingError';\n    } else {\n      const list = await res.json();\n      this.connections = orderBy(list, ['name'], ['asc']);\n      await this.setModel();\n    }\n  }\n\n  async setModel(connectionObj = null) {\n    const resetConnection = await this.resetEditedUnsavedConnection();\n    this.connection = connectionObj\n      ? connectionObj\n      : this.state === 'savedSuccessfully'\n        ? this.connection\n        : (resetConnection ?? cloneDeep(head(this.connections)));\n    this.state = 'updateConnection';\n    this.showPassword = false;\n    this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n    this.connection.providerType = 'loriotType';\n  }\n\n  async resetEditedUnsavedConnection(): Promise<LoriotConnection | undefined> {\n    if (this.state !== 'updateConnection' || !this.originalConnection) {\n      return;\n    }\n\n    const { name } = this.originalConnection;\n    const originalData = find(this.connections, { name });\n    if (originalData) {\n      return cloneDeep(originalData);\n    }\n  }\n\n  async addConnection() {\n    await this.resetEditedUnsavedConnection();\n    this.connection = {} as LoriotConnection;\n    this.originalConnection = {} as LoriotConnection;\n    this.state = 'addConnections';\n    this.showPassword = true;\n    this.connection.providerType = 'loriotType';\n  }\n\n  async save() {\n    const checkForConnectionName =\n      this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n        ? this.originalConnection.name\n        : this.connection.name;\n    const isConnectionExist = await this.connectorService.exists(\n      ConnectionType.LORIOT,\n      checkForConnectionName\n    );\n    if (this.state === 'addConnections' && isConnectionExist) {\n      const msg = this.translateService.instant(\n        gettext(`Connection with name \"{{ name }}\" already exists.`),\n        { name: this.connection.name }\n      );\n      this.alertService.danger(msg);\n    } else {\n      return this.saveConnection();\n    }\n  }\n\n  async deleteConnection(originalConnection) {\n    const { name } = originalConnection;\n    const msg = this.translateService.instant(\n      gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n      { name }\n    );\n\n    try {\n      await this.modal.confirm(gettext('Delete connection'), msg, Status.DANGER, {\n        ok: gettext('Delete'),\n        cancel: gettext('Cancel')\n      });\n\n      await this.delete(originalConnection);\n    } catch (error) {\n      // empty catch block\n    }\n  }\n\n  changePassword() {\n    this.showPassword = !this.showPassword;\n    if (this.connectorsForm.controls.password) {\n      this.connectorsForm.controls.password.setValue(null);\n    }\n  }\n\n  private async saveConnection() {\n    const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n    if (res && (res.status === 201 || res.status === 200)) {\n      this.state = 'savedSuccessfully';\n      this.alertService.success(gettext('Connection saved.'));\n      await this.loadConnections();\n    } else if (res && res.status === 500) {\n      const data = res.json ? await res.json() : undefined;\n      const app = this.connectorService.getApplication('loriot-agent');\n      const initialState = {\n        messageData: data,\n        appData: app,\n        modalTitle: gettext('Failed to update the connection'),\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        connectionName: this.connection.name\n      };\n      this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n    } else {\n      const data = res.json ? await res.json() : undefined;\n      this.alertService.addServerFailure({ data, res });\n    }\n  }\n\n  private async delete(originalConnection) {\n    if (!originalConnection.providerType) originalConnection.providerType = 'loriotType';\n    try {\n      const response = await this.connectorService.delete(originalConnection);\n\n      if (response.ok && response.status === 204) {\n        this.alertService.success(gettext('Connection deleted.'));\n        await this.loadConnections();\n      } else if (response && response.status === 500) {\n        const data = response.json ? await response.json() : undefined;\n        const app = this.connectorService.getApplication('loriot-agent');\n        const initialState = {\n          messageData: data,\n          appData: app,\n          ariaDescribedby: 'modal-body',\n          ariaLabelledBy: 'modal-title',\n          modalTitle: gettext('Failed to delete the connection'),\n          connectionName: originalConnection.name\n        };\n        this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n      } else {\n        const data = response.json ? await response.json() : undefined;\n        this.alertService.addServerFailure({ data, response });\n      }\n    } catch (error) {\n      // empty catch block\n    }\n  }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n  <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Settings' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'Connectivity' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'cog'\"\n    [label]=\"'LORIOT' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n  <no-connections-found\n    (onAction)=\"addConnection()\"\n    *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n    [header]=\"cardHeader | translate\"\n  ></no-connections-found>\n  <div>\n    <div\n      class=\"card content-fullpage split-view--5-7\"\n      *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n    >\n      <div class=\"card-header separator grid__col--fullspan\">\n        <div class=\"card-title\">{{ cardHeader | translate }}</div>\n      </div>\n      <div class=\"inner-scroll split-view__list\">\n        <div class=\"bg-gray-white flex-grow\">\n          <c8y-list-group class=\"nav c8y-nav-stacked\">\n            <c8y-li\n              class=\"c8y-stacked-item p-0\"\n              [class.active]=\"connection.name === connectionBeingEdited\"\n              *ngFor=\"let connection of connections; let index = index\"\n              (click)=\"setModel(cloneDeep(connection))\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              <span title=\"{{ connection.name }}\">\n                {{ connection.name }}\n              </span>\n            </c8y-li>\n\n            <c8y-li\n              class=\"c8y-nav-stacked active\"\n              *ngIf=\"state === 'addConnections'\"\n              (click)=\"addConnection()\"\n            >\n              <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n              {{ 'New connection' | translate }}\n            </c8y-li>\n          </c8y-list-group>\n        </div>\n        <div class=\"card-footer separator-top\">\n          <button\n            class=\"btn btn-default\"\n            title=\"{{ 'Add connection' | translate }}\"\n            [disabled]=\"state === 'addConnections'\"\n            (click)=\"addConnection()\"\n          >\n            <i [c8yIcon]=\"'plus-circle'\"></i>\n            {{ 'Add connection' | translate }}\n          </button>\n        </div>\n      </div>\n\n      <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n      <div\n        class=\"inner-scroll split-view__detail\"\n        [class]=\"{ 'split-view__detail--selected': connection }\"\n      >\n        <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n          <button\n            class=\"btn btn-clean text-primary\"\n            title=\"{{ 'Back' | translate }}\"\n            (click)=\"resetEditedUnsavedConnection()\"\n          >\n            <i [c8yIcon]=\"'chevron-left'\"></i>\n            <span>{{ 'Back' | translate }}</span>\n          </button>\n        </div>\n        <form\n          class=\"d-contents\"\n          #connectorsForm=\"ngForm\"\n        >\n          <div class=\"flex-grow\">\n            <div class=\"card-block large-padding\">\n              <c8y-form-group>\n                <label for=\"name\">\n                  {{ 'Name' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"name\"\n                  name=\"name\"\n                  type=\"text\"\n                  required\n                  [placeholder]=\"'e.g. LORIOT connection' | translate\"\n                  [(ngModel)]=\"connection.name\"\n                  [pattern]=\"namePattern\"\n                />\n                <c8y-messages>\n                  <c8y-message\n                    name=\"pattern\"\n                    [text]=\"namePatternError\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"description\">\n                  {{ 'Description' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"description\"\n                  name=\"description\"\n                  type=\"text\"\n                  [placeholder]=\"\n                    'e.g. This connection has a built-in functionality to…' | translate\n                  \"\n                  [(ngModel)]=\"connection.description\"\n                />\n              </c8y-form-group>\n\n              <c8y-form-group>\n                <label for=\"baseUrl\">\n                  {{ 'URL' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"baseUrl\"\n                  name=\"baseUrl\"\n                  type=\"text\"\n                  required\n                  [placeholder]=\"\n                    'e.g. {{ example }}' | translate : { example: 'https://ap3.loriot.io' }\n                  \"\n                  [(ngModel)]=\"connection.baseUrl\"\n                />\n              </c8y-form-group>\n              <c8y-form-group>\n                <label for=\"username\">\n                  {{ 'Username' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"username\"\n                  placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n                  name=\"username\"\n                  type=\"text\"\n                  required\n                  [(ngModel)]=\"connection.username\"\n                />\n              </c8y-form-group>\n              <c8y-form-group *ngIf=\"showPassword\">\n                <label for=\"password\">\n                  {{ 'Password' | translate }}\n                </label>\n                <input\n                  class=\"form-control\"\n                  id=\"password\"\n                  placeholder=\"{{ 'e.g. my_password' | translate }}\"\n                  name=\"password\"\n                  type=\"password\"\n                  required\n                  [(ngModel)]=\"connection.password\"\n                />\n              </c8y-form-group>\n\n              <button\n                class=\"btn btn-default\"\n                name=\"changePassword\"\n                type=\"button\"\n                *ngIf=\"state === 'updateConnection'\"\n                (click)=\"changePassword()\"\n              >\n                <span\n                  title=\"{{ 'Change password' | translate }}\"\n                  *ngIf=\"!showPassword\"\n                >\n                  {{ 'Change password' | translate }}\n                </span>\n                <span\n                  title=\"{{ 'Cancel password change' | translate }}\"\n                  *ngIf=\"showPassword\"\n                >\n                  {{ 'Cancel password change' | translate }}\n                </span>\n              </button>\n            </div>\n          </div>\n\n          <div class=\"card-footer separator-top\">\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Cancel' | translate }}\"\n              type=\"button\"\n              (click)=\"setModel()\"\n              translate\n            >\n              Cancel\n            </button>\n            <button\n              class=\"btn btn-danger\"\n              title=\"{{ 'Delete' | translate }}\"\n              type=\"button\"\n              data-cy=\"loriot-multiple-lns-connector.component--delete-connectivity\"\n              *ngIf=\"state === 'updateConnection'\"\n              (click)=\"deleteConnection(originalConnection)\"\n              translate\n            >\n              Delete\n            </button>\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Save' | translate }}\"\n              type=\"submit\"\n              [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n              (click)=\"save()\"\n              data-cy=\"loriot-multiple-lns-connector.component--button-save\"\n              translate\n            >\n              Save\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, FormsModule, Route } from '@c8y/ngx-components';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\nimport { RouterModule } from '@angular/router';\nimport { SigfoxMultipleLnsConnectorComponent } from './sigfox-multiple-lns-connector.component';\nimport { ActilityMultipleLnsConnectorComponent } from './actility-multiple-lns-connector.component';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { LoriotMultipleLnsConnectorComponent } from './loriot/loriot-multiple-lns-connector.component';\n\nconst settingsRoutes: Route[] = [\n  {\n    path: 'connectivitySettings/multiple_lns_connectors_sigfox',\n    component: SigfoxMultipleLnsConnectorComponent\n  },\n  {\n    path: 'connectivitySettings/multiple_lns_connectors_actility',\n    component: ActilityMultipleLnsConnectorComponent\n  },\n  {\n    path: 'connectivitySettings/multiple_lns_connectors_loriot',\n    component: LoriotMultipleLnsConnectorComponent\n  }\n];\n@NgModule({\n  imports: [\n    CoreModule,\n    CommonModule,\n    FormsModule,\n    RouterModule.forChild(settingsRoutes),\n    SigfoxMultipleLnsConnectorComponent,\n    NoConnectionsFoundComponent,\n    ActilityMultipleLnsConnectorComponent,\n    LoriotMultipleLnsConnectorComponent,\n    ConnectionInfoWithDownloadCsvComponent\n  ],\n  providers: [MultipleLnsConnectorService]\n})\nexport class MultipleLnsConnectorsModule {}\n","import { Injectable } from '@angular/core';\nimport {\n  IManagedObject,\n  InventoryService,\n  IResultList,\n  FetchClient,\n  IFetchOptions,\n  IdentityService\n} from '@c8y/client';\nimport { get, orderBy } from 'lodash-es';\nimport { MultipleLnsConnectorService } from './multiple-lns-connectors';\nimport {\n  ActilityConnection,\n  ConnectionType,\n  SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\n\n@Injectable()\nexport class LpwanSetDeviceProtocolService {\n  supportedDevicesCfgs = [\n    {\n      name: 'actility',\n      match: device =>\n        get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n        get(device, 'c8y_LpwanDevice.serviceProvider') === 'Actility',\n      protocolTypes: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n      externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n      connectionType: ConnectionType.ACTILITY\n    },\n    {\n      name: 'loriot',\n      match: device =>\n        get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n        get(device, 'c8y_LpwanDevice.serviceProvider') === 'Loriot',\n      protocolTypes: ['c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n      externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n      connectionType: ConnectionType.LORIOT\n    },\n    {\n      name: 'sigfox',\n      match: device => get(device, 'c8y_LpwanDevice.serviceProvider') === 'Sigfox',\n      protocolTypes: ['c8y_SigfoxDeviceType', 'c8y_LpwanDeviceType'],\n      externalIdTypes: ['com.sigfox.deviceId'],\n      connectionType: ConnectionType.SIGFOX\n    }\n  ];\n\n  private readonly header: any = { 'Content-Type': 'application/json' };\n\n  constructor(\n    private inventoryService: InventoryService,\n    private client: FetchClient,\n    private identityService: IdentityService,\n    private lnsService: MultipleLnsConnectorService\n  ) {}\n\n  async refreshCache(device) {\n    const externalId = await this.getExternalId(device);\n    if (externalId) {\n      const url = `${this.getMicroserviceUrl(device)}/refreshCache/${externalId}`;\n      const options: IFetchOptions = {\n        method: 'POST',\n        headers: this.header,\n        body: JSON.stringify({})\n      };\n      return this.client.fetch(url, options);\n    }\n  }\n\n  getMicroserviceUrl(device) {\n    const { serviceProvider } = device.c8y_LpwanDevice;\n\n    let serviceName = serviceProvider.toLowerCase();\n    if (serviceProvider === 'Sigfox') {\n      serviceName = 'sigfox-agent';\n    }\n\n    return `/service/${serviceName}`;\n  }\n\n  isSupportedDevice(device: IManagedObject): boolean {\n    return this.supportedDevicesCfgs.some(({ match }) => match(device));\n  }\n\n  async getCurrentProtocol(device: IManagedObject) {\n    const lpwanDevice = device.c8y_LpwanDevice;\n    let protocolId;\n\n    if (lpwanDevice.typeExternalId) {\n      const externalId = (await this.identityService.detail(lpwanDevice.typeExternalId)).data;\n      protocolId = externalId.managedObject.id;\n    }\n\n    if (!protocolId && lpwanDevice.type) {\n      protocolId = lpwanDevice.type.split('/')[2];\n    }\n\n    if (!protocolId) {\n      return null;\n    }\n\n    return (await this.inventoryService.detail(protocolId)).data;\n  }\n\n  async applyProtocol(device: IManagedObject, selectedProtocol: IManagedObject) {\n    const [protocolExternalId] = (await this.identityService.list(selectedProtocol.id)).data;\n    const { externalId, type } = protocolExternalId;\n    device.c8y_LpwanDevice.typeExternalId = { externalId, type };\n    device.c8y_LpwanDevice.type = 'inventory/managedObjects/' + selectedProtocol.id;\n    device.type = selectedProtocol.name;\n    return this.inventoryService.update(device);\n  }\n\n  async getAvailableProtocols(device: IManagedObject): Promise<IResultList<IManagedObject>> {\n    const query = {\n      __filter: {\n        type: { __in: this.getProtocolTypesMatchingDevice(device) }\n      },\n      __orderby: [{ name: 1 }]\n    };\n    return this.inventoryService.listQuery(query, { withTotalPages: true, pageSize: 5 });\n  }\n\n  async getAvailableConnections(\n    device: IManagedObject\n  ): Promise<IResultList<ActilityConnection | SigfoxConnection>> {\n    let list;\n    const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n    const response = await this.lnsService.list(matchingCfg.connectionType);\n    if (response && response.status === 200) {\n      list = await response.json();\n      list = orderBy(list, ['name'], ['asc']);\n      return { res: response, data: list };\n    }\n  }\n\n  private getProtocolTypesMatchingDevice(device: IManagedObject): string[] {\n    const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n    return matchingCfg ? matchingCfg.protocolTypes : [];\n  }\n\n  private async getExternalId(device: IManagedObject): Promise<string> {\n    const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n    const externalIds = (await this.identityService.list(device.id)).data;\n    const externalId = externalIds.find(({ type }) => matchingCfg.externalIdTypes.includes(type));\n    return externalId ? externalId.externalId : null;\n  }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ForOfFilterPipe,\n  PopoverConfirmButtons,\n  PopoverConfirmComponent,\n  C8yTranslateDirective,\n  FormGroupComponent,\n  TypeaheadComponent,\n  ForOfDirective,\n  ListItemComponent,\n  HighlightComponent,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { find } from 'lodash-es';\nimport {\n  ActilityConnection,\n  SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'set-lns-connections',\n  templateUrl: './lpwan-set-connections.component.html',\n  imports: [\n    C8yTranslateDirective,\n    NgIf,\n    FormGroupComponent,\n    PopoverConfirmComponent,\n    TypeaheadComponent,\n    FormsModule,\n    ForOfDirective,\n    ListItemComponent,\n    HighlightComponent,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class LpwanAssignLnsConnectionsComponent implements OnInit {\n  loading: boolean;\n  @Input() device: IManagedObject;\n  buttons: PopoverConfirmButtons[] = [\n    { label: gettext('Cancel'), action: () => Promise.reject() },\n    { label: gettext('Re-register'), action: () => this.deviceReregister(), status: 'default' }\n  ];\n  reRegisterMsg = gettext('To change provider connection, you need to re-register device first.');\n  filterConnection: ForOfFilterPipe<ActilityConnection | SigfoxConnection> = pipe();\n  pattern = '';\n  @ViewChild(PopoverConfirmComponent, { static: true }) popoverConfirm: PopoverConfirmComponent;\n\n  newConnection: ActilityConnection | SigfoxConnection;\n  availableConnections: IResultList<ActilityConnection | SigfoxConnection>;\n  currentConnection: ActilityConnection | SigfoxConnection;\n\n  constructor(\n    private lpwanService: LpwanSetDeviceProtocolService,\n    private alertService: AlertService\n  ) {}\n  async ngOnInit() {\n    await this.reload();\n    this.setConnectionPipe('');\n  }\n\n  setConnectionPipe(filterStr: string) {\n    this.pattern = filterStr;\n    this.filterConnection = pipe(\n      map(connections =>\n        connections.filter(\n          connection =>\n            (!this.currentConnection || this.currentConnection.name !== connection.name) &&\n            (!filterStr || connection.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n        )\n      )\n    );\n  }\n\n  async reload() {\n    this.loading = true;\n    this.newConnection = null;\n    try {\n      this.availableConnections = await this.lpwanService.getAvailableConnections(this.device);\n      this.currentConnection = find(this.availableConnections.data, {\n        name: this.device.c8y_LpwanDevice.lnsConnectionName\n      });\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    } finally {\n      this.loading = false;\n    }\n  }\n\n  togglePopover(popoverCfrm) {\n    popoverCfrm.show();\n    this.setConnectionPipe('');\n  }\n\n  deviceReregister() {\n    return new Promise(resolve => {\n      window.location.href = `#/deviceregistration`;\n      resolve(true);\n    });\n  }\n}\n","<div class=\"col-md-6\">\n  <div class=\"form-group\">\n    <label translate>Current connection</label>\n    <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n      {{ 'Connection is not set. Select connection for this device' | translate }}\n    </p>\n    <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n      {{ currentConnection.name }}\n    </p>\n  </div>\n\n  <c8y-form-group>\n    <c8y-popover-confirm\n      outsideClick=\"true\"\n      containerClass=\"lns-connection-popover\"\n      [message]=\"reRegisterMsg\"\n      [buttons]=\"buttons\"\n      [placement]=\"'bottom'\"\n    ></c8y-popover-confirm>\n    <c8y-typeahead\n      *ngIf=\"!loading\"\n      [(ngModel)]=\"newConnection\"\n      placeholder=\"{{ 'Select new connection' | translate }}\"\n      name=\"newConnection\"\n      (onSearch)=\"setConnectionPipe($event)\"\n      [allowFreeEntries]=\"false\"\n    >\n      <c8y-li\n        *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n        class=\"p-l-8 p-r-8 c8y-list__item--link\"\n        (click)=\"togglePopover(popoverConfirm)\"\n      >\n        <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n      </c8y-li>\n    </c8y-typeahead>\n    <c8y-messages\n      ><c8y-message\n        name=\"notExisting\"\n        [text]=\"'Select one of the connections.' | translate\"\n      ></c8y-message>\n    </c8y-messages>\n  </c8y-form-group>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ForOfFilterPipe,\n  LoadingComponent,\n  C8yTranslateDirective,\n  FormGroupComponent,\n  TypeaheadComponent,\n  ForOfDirective,\n  ListItemComponent,\n  HighlightComponent,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { Router } from '@angular/router';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf } from '@angular/common';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\n@Component({\n  selector: 'set-device-protocol',\n  templateUrl: './lpwan-set-device-protocol.component.html',\n  imports: [\n    FormsModule,\n    NgIf,\n    LoadingComponent,\n    C8yTranslateDirective,\n    FormGroupComponent,\n    TypeaheadComponent,\n    ForOfDirective,\n    ListItemComponent,\n    HighlightComponent,\n    MessagesComponent,\n    MessageDirective,\n    LpwanAssignLnsConnectionsComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class LpwanAssignDeviceProtocolComponent implements OnInit {\n  loading: boolean;\n  device: IManagedObject;\n  currentProtocol: IManagedObject;\n  availableProtocols: IResultList<IManagedObject>;\n  newProtocol: IManagedObject;\n  filterProtocols: ForOfFilterPipe<IManagedObject> = pipe();\n  pattern = '';\n  @ViewChild('lpwanSetDeviceProtocolForm', { static: false }) lpwanSetDeviceProtocolForm: NgForm;\n\n  constructor(\n    private lpwanService: LpwanSetDeviceProtocolService,\n    private alertService: AlertService,\n    private router: Router,\n    private inventoryService: InventoryService\n  ) {}\n  async ngOnInit() {\n    await this.reload();\n    this.setPipe('');\n  }\n\n  setPipe(filterStr: string) {\n    this.pattern = filterStr;\n    this.filterProtocols = pipe(\n      map(protocols =>\n        protocols.filter(\n          protocol =>\n            (!this.currentProtocol || this.currentProtocol.id !== protocol.id) &&\n            (!filterStr || protocol.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n        )\n      )\n    );\n  }\n\n  async reload() {\n    this.loading = true;\n    this.newProtocol = null;\n    try {\n      await this.loadDevice();\n      this.availableProtocols = await this.lpwanService.getAvailableProtocols(this.device);\n      this.currentProtocol = await this.lpwanService.getCurrentProtocol(this.device);\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    } finally {\n      this.loading = false;\n    }\n  }\n\n  async loadDevice() {\n    const deviceId = this.router.routerState.snapshot.url.match(/\\d+/)[0];\n    const { data } = await this.inventoryService.detail(deviceId);\n    this.device = data;\n  }\n\n  async apply(selectedProtocol) {\n    try {\n      const moUpdated =\n        (await this.lpwanService.applyProtocol(this.device, selectedProtocol)).res.status === 200;\n      await this.reload();\n      this.alertService.success(gettext('Device protocol set.'));\n      this.lpwanSetDeviceProtocolForm.reset('dirty');\n      if (moUpdated) {\n        this.refreshCache();\n      }\n    } catch (ex) {\n      this.alertService.danger(gettext('Could not set device protocol.'));\n    }\n  }\n\n  async refreshCache() {\n    try {\n      await this.lpwanService.refreshCache(this.device);\n    } catch (ex) {\n      // do nothing (refreshing is an optional step)\n    }\n  }\n}\n","<form #lpwanSetDeviceProtocolForm=\"ngForm\">\n  <div class=\"row\">\n    <div class=\"col-md-9\">\n      <div class=\"card card--fullpage\">\n        <div class=\"card-header separator\">\n          <div class=\"card-title\">\n            {{ 'LPWAN configuration' | translate }}\n          </div>\n        </div>\n\n        <div class=\"card-block p-t-24 p-b-8 overflow-visible\">\n          <div *ngIf=\"loading\">\n            <c8y-loading></c8y-loading>\n          </div>\n\n          <div *ngIf=\"!loading\">\n            <div class=\"col-md-6\">\n              <div class=\"form-group\">\n                <label translate>Current device protocol</label>\n                <p class=\"form-control-static\" *ngIf=\"!currentProtocol\">\n                  {{ device.type }}\n                </p>\n                <p\n                  class=\"form-control-static text-truncate\"\n                  *ngIf=\"currentProtocol\"\n                  title=\"{{ currentProtocol.name }}\"\n                >\n                  {{ currentProtocol.name }}\n                </p>\n              </div>\n              <c8y-form-group>\n                <c8y-typeahead\n                  [(ngModel)]=\"newProtocol\"\n                  placeholder=\"{{ 'Select new device protocol' | translate }}\"\n                  (onSearch)=\"setPipe($event)\"\n                  name=\"newProtocol\"\n                  [allowFreeEntries]=\"false\"\n                >\n                  <c8y-li\n                    *c8yFor=\"\n                      let protocol of availableProtocols;\n                      loadMore: 'hidden';\n                      pipe: filterProtocols\n                    \"\n                    class=\"p-l-8 p-r-8 c8y-list__item--link\"\n                    (click)=\"newProtocol = protocol; setPipe('')\"\n                  >\n                    <c8y-highlight [text]=\"protocol.name\" [pattern]=\"pattern\"></c8y-highlight>\n                  </c8y-li>\n                </c8y-typeahead>\n                <c8y-messages>\n                  <c8y-message\n                    name=\"notExisting\"\n                    [text]=\"'Select one of the protocols.' | translate\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n            </div>\n            <set-lns-connections [device]=\"device\"></set-lns-connections>\n          </div>\n        </div>\n\n        <div class=\"card-footer separator\">\n          <button\n            title=\"{{ 'Save' | translate }}\"\n            type=\"submit\"\n            class=\"btn btn-primary\"\n            (click)=\"apply(newProtocol)\"\n            [disabled]=\"!newProtocol\"\n          >\n            {{ 'Save' | translate }}\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n</form>\n‌\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\n@Injectable()\nexport class LpwanAgentGuard {\n  constructor(private lpwanService: LpwanSetDeviceProtocolService) {}\n\n  canActivate(route: ActivatedRouteSnapshot): boolean {\n    const device = route.data.contextData || route.parent.data.contextData;\n    return this.lpwanService.isSupportedDevice(device);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, FormsModule, hookRoute, Route, ViewContext } from '@c8y/ngx-components';\nimport { LpwanAssignDeviceProtocolComponent } from './lpwan-set-device-protocol.component';\nimport { LpwanAgentGuard } from './lpwan-agent.guard';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\nconst lpwanRoutes: Route[] = [\n  {\n    context: ViewContext.Device,\n    path: 'assign-protocol',\n    component: LpwanAssignDeviceProtocolComponent,\n    label: gettext('LPWAN'),\n    icon: 'c8y-device-protocols',\n    canActivate: [LpwanAgentGuard]\n  }\n];\n\n@NgModule({\n  imports: [\n    CoreModule,\n    FormsModule,\n    LpwanAssignDeviceProtocolComponent,\n    LpwanAssignLnsConnectionsComponent\n  ],\n  providers: [LpwanAgentGuard, LpwanSetDeviceProtocolService, hookRoute(lpwanRoutes)]\n})\nexport class LpwanProtocolModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.MultipleLnsConnectorService","i3","i4","i1.MultipleLnsConnectorService","FormsModule","i1.LpwanSetDeviceProtocolService"],"mappings":";;;;;;;;;;;;;;;;;;MASa,2BAA2B,CAAA;AALxC,IAAA,WAAA,GAAA;AAMY,QAAA,IAAA,CAAA,QAAQ,GAAuB,IAAI,YAAY,EAAE;AAClD,QAAA,IAAA,CAAA,MAAM,GAAW,OAAO,CAAC,aAAa,CAAC;AAIjD,IAAA;IAHC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;+GALW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,iJCTxC,yzCAwCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjCY,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,sEAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEnD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WAEvB,CAAC,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,yzCAAA,EAAA;;sBAG9D;;sBACA;;;AEXH,IAAY,cAIX;AAJD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,cAAA,CAAA,cAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACR,CAAC,EAJW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AA4BpB,SAAU,kBAAkB,CAChC,UAAoE,EAAA;AAEpE,IAAA,OAAO,OAAQ,UAA+B,CAAC,aAAa,KAAK,WAAW;AAC9E;AACM,SAAU,oBAAoB,CAClC,UAAoE,EAAA;AAEpE,IAAA,OAAO,OAAQ,UAAiC,CAAC,SAAS,KAAK,WAAW;AAC5E;AAEM,SAAU,kBAAkB,CAChC,UAAoE,EAAA;AAEpE,IAAA,OAAO,OAAQ,UAA+B,CAAC,YAAY,KAAK,WAAW;AAC7E;;MC3Ba,2BAA2B,CAAA;AAEtC,IAAA,WAAA,CACU,MAAmB,EACnB,eAAgC,EAChC,YAA0B,EAAA;QAF1B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,YAAY,GAAZ,YAAY;QAEpB,IAAI,CAAC,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE;IACvD;IAEA,MAAM,IAAI,CAAC,cAA8B,EAAA;QACvC,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA,eAAA,CAAiB;AACrE,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC;SACf;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;IACxC;AAEA;;;;AAIG;AACH,IAAA,MAAM,IAAI,CACR,UAAoE,EACpE,eAAuB,IAAI,EAAA;QAE3B,IAAI,YAAY,EAAE;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC;QAC9C;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC;AAEA,IAAA,MAAM,MAAM,CACV,cAA8B,EAC9B,cAAsB,EAAA;AAEtB,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,iBAAiB,EAAE;AAC/C,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA,gBAAA,EAAmB,kBAAkB,CACvF,MAAM,CAAC,IAAI,CAAC,CACb,EAAE;AACH,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC;SACf;AACD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;AACjD,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE;QACzB;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,MAAM,CAAC,cAA8B,EAAE,cAAsB,EAAA;QACjE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC;QACpE,OAAO,UAAU,KAAK,IAAI;IAC5B;IAEA,MAAM,MAAM,CAAC,UAAoE,EAAA;QAC/E,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACrD,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,eAAA,CAAiB;AACvE,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU;SAChC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;IACxC;AAEA,IAAA,MAAM,MAAM,CACV,UAAoE,EACpE,YAAoB,EAAA;QAEpB,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACrD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,gBAAA,EAAmB,kBAAkB,CACzF,MAAM,CAAC,YAAY,CAAC,CACrB,EAAE;AACH,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU;SAChC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;IACxC;AAEA,IAAA,sBAAsB,CAAC,UAAoE,EAAA;QACzF,OAAO,kBAAkB,CAAC,UAAU;AAClC,cAAE;AACF,cAAE,oBAAoB,CAAC,UAAU;AACjC,kBAAE;AACF,kBAAE,kBAAkB,CAAC,UAAU;AAC/B,sBAAE;sBACA,EAAE;IACR;AAEA,IAAA,gBAAgB,CAAC,cAA8B,EAAA;AAC7C,QAAA,OAAO,cAAc,KAAK,cAAc,CAAC;AACvC,cAAE;AACF,cAAE,cAAc,KAAK,cAAc,CAAC;AACpC,kBAAE;AACF,kBAAE,cAAc,KAAK,cAAc,CAAC;AACpC,sBAAE;sBACA,EAAE;IACR;IAEA,MAAM,MAAM,CAAC,UAAoE,EAAA;QAC/E,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,eAAA,CAAiB;AACvE,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE;SACT;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA,CAAE,EAAE,OAAO,CAAC;IAC5F;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY;AAC5E,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;IACpF;IAEA,MAAM,QAAQ,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE;aACT;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;QACxC;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACvC;IACF;+GA/HW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,sCAAsC,CAAA;AAMjD,IAAA,WAAA,CACU,KAAiB,EACjB,gBAA6C,EAC7C,YAA0B,EAC1B,gBAAkC,EAAA;QAHlC,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IACvB;IAEH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC7B,YAAA,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACnC,YAAA,MAAM,CACJ,UAAU,EACV,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,EAAE;gBAC3E,cAAc,EAAE,IAAI,CAAC;AACtB,aAAA,CAAC,CACH;QACH;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC/D;IACF;+GA/BW,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdnD,g1BA0BM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDdM,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEf,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBALlD,SAAS;+BACE,mCAAmC,EAAA,OAAA,EAEpC,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,g1BAAA,EAAA;;sBAG1B;;sBACA;;sBACA;;sBACA;;;MEqCU,mCAAmC,CAAA;IAmB9C,WAAA,CACU,gBAA6C,EAC7C,YAA0B,EAC1B,gBAAkC,EAClC,YAA4B,EAC5B,KAAmB,EAAA;QAJnB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,KAAK,GAAL,KAAK;QAvBf,IAAA,CAAA,KAAK,GAAe,mBAAmB;QACvC,IAAA,CAAA,SAAS,GAAG,SAAS;QAErB,IAAA,CAAA,WAAW,GAAG,KAAK,EAAoB;QACvC,IAAA,CAAA,YAAY,GAAG,KAAK;AAEpB,QAAA,IAAA,CAAA,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAC1C,IAAA,CAAA,wBAAwB,GAAG,yBAAyB;QACpD,IAAA,CAAA,WAAW,GAAG,eAAe,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,GAAA,CAAK;QAC7E,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC9C,OAAO,CACL,qGAAqG,CACtG,EACD;YACE,OAAO,EAAE,IAAI,CAAC;AACf,SAAA,CACF;IAQE;AAEH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACnE,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,cAAc;QAC7B;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvB;IACF;AAEA,IAAA,MAAM,QAAQ,CAAC,aAAa,GAAG,IAAI,EAAA;AACjC,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE;QACjE,IAAI,CAAC,UAAU,GAAG;AAChB,cAAE;AACF,cAAE,IAAI,CAAC,KAAK,KAAK;kBACb,IAAI,CAAC;AACP,mBAAG,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;IACpF;AAEA,IAAA,MAAM,4BAA4B,GAAA;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjE;QACF;AAEA,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,kBAAkB;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC,YAAY,CAAC;QAChC;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,CAAC,4BAA4B,EAAE;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAsB;AACxC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAsB;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,sBAAsB,GAC1B,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK;AAC1F,cAAE,IAAI,CAAC,kBAAkB,CAAC;AAC1B,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC1B,QAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC1D,cAAc,CAAC,MAAM,EACrB,sBAAsB,CACvB;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,IAAI,iBAAiB,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACxC,OAAO,CAAC,CAAA,iDAAA,CAAmD,CAAC,EAC5D,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAC/B;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;IACF;IAEA,MAAM,gBAAgB,CAAC,kBAAkB,EAAA;AACvC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACxC,OAAO,CAAC,8EAA8E,CAAC,EACvF,EAAE,IAAI,EAAE,CACT;AAED,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;AAC1E,gBAAA,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ;AACzB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QACtC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD;IACF;AAEQ,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAC5F,QAAA,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB;YAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAC9B;aAAO,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC;AAChE,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;AACtD,gBAAA,eAAe,EAAE,YAAY;AAC7B,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC;aACjC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;QAClF;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACnD;IACF;IAEQ,MAAM,MAAM,CAAC,kBAAkB,EAAA;AACrC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAEvE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACzD,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE;YAC9B;iBAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9C,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC;AAChE,gBAAA,MAAM,YAAY,GAAG;AACnB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,eAAe,EAAE,YAAY;AAC7B,oBAAA,cAAc,EAAE,aAAa;AAC7B,oBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;oBACtD,cAAc,EAAE,kBAAkB,CAAC;iBACpC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;YAClF;iBAAO;AACL,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxD;QACF;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;+GA5KW,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,2MCvDhD,0xSAsQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnOI,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,2DACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,iBAAiB,uLACjB,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iCAAiC,oFACjC,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,mEACrB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAxB/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAEhC;wBACP,IAAI;wBACJ,gBAAgB;wBAChB,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,2BAA2B;wBAC3B,kBAAkB;wBAClB,KAAK;wBACL,iBAAiB;wBACjB,qBAAqB;wBACrB,aAAa;wBACb,WAAW;wBACX,kBAAkB;wBAClB,iCAAiC;wBACjC,iBAAiB;wBACjB,gBAAgB;wBAChB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,0xSAAA,EAAA;;sBAQA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MENnC,qCAAqC,CAAA;IAkBhD,WAAA,CACU,gBAA6C,EAC7C,YAA0B,EAC1B,gBAAkC,EAClC,KAAmB,EACnB,YAA4B,EAAA;QAJ5B,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,YAAY,GAAZ,YAAY;QAtBtB,IAAA,CAAA,KAAK,GAAe,mBAAmB;QAEvC,IAAA,CAAA,WAAW,GAAG,KAAK,EAAsB;QAEzC,IAAA,CAAA,YAAY,GAAG,KAAK;AACpB,QAAA,IAAA,CAAA,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC5C,IAAA,CAAA,wBAAwB,GAAG,yBAAyB;QACpD,IAAA,CAAA,WAAW,GAAG,eAAe,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,GAAA,CAAK;QAC7E,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC9C,OAAO,CACL,qGAAqG,CACtG,EACD;YACE,OAAO,EAAE,IAAI,CAAC;AACf,SAAA,CACF;IAQE;AAEH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QACrE,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,cAAc;QAC7B;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvB;IACF;AAEA,IAAA,MAAM,QAAQ,CAAC,aAAa,GAAG,IAAI,EAAA;AACjC,QAAA,MAAM,IAAI,CAAC,4BAA4B,EAAE;QACzC,IAAI,CAAC,UAAU,GAAG;AAChB,cAAE;AACF,cAAE,IAAI,CAAC,KAAK,KAAK;kBACb,IAAI,CAAC;AACP,kBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;IACpF;AAEA,IAAA,MAAM,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,QAAQ;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,QAAQ;IAC3C;AAEA,IAAA,MAAM,4BAA4B,GAAA;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjE;QACF;AAEA,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,kBAAkB;AACxC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,MAAM,YAAY,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CACtD,cAAc,CAAC,QAAQ,EACvB,IAAI,CACL,CAAuB;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,YAAY;QACxC;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,CAAC,4BAA4B,EAAE;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAwB;AAC1C,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAwB;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;IACxC;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,sBAAsB,GAC1B,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK;AAC1F,cAAE,IAAI,CAAC,kBAAkB,CAAC;AAC1B,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC1B,QAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC1D,cAAc,CAAC,QAAQ,EACvB,sBAAsB,CACvB;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,IAAI,iBAAiB,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACxC,OAAO,CAAC,CAAA,iDAAA,CAAmD,CAAC,EAC5D,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAC/B;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;IACF;IAEA,MAAM,gBAAgB,CAAC,kBAAkB,EAAA;AACvC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACxC,OAAO,CAAC,8EAA8E,CAAC,EACvF,EAAE,IAAI,EAAE,CACT;AAED,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;AAC1E,gBAAA,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ;AACzB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QACtC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD;IACF;AAEA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAC5F,QAAA,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB;YAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAC9B;aAAO,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,CAAC;AAC5D,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;AACtD,gBAAA,eAAe,EAAE,YAAY;AAC7B,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC;aACjC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;QAClF;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACnD;IACF;IAEQ,MAAM,MAAM,CAAC,kBAAkB,EAAA;AACrC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAEvE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACzD,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE;YAC9B;iBAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9C,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,CAAC;AAC5D,gBAAA,MAAM,YAAY,GAAG;AACnB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,eAAe,EAAE,YAAY;AAC7B,oBAAA,cAAc,EAAE,aAAa;AAC7B,oBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;oBACtD,cAAc,EAAE,kBAAkB,CAAC;iBACpC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;YAClF;iBAAO;AACL,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxD;QACF;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;+GArLW,qCAAqC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,6MCvDlD,oraAwVA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrTI,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,2DACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,iBAAiB,uLACjB,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iCAAiC,oFACjC,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,mEACrB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAxBjD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAElC;wBACP,IAAI;wBACJ,gBAAgB;wBAChB,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,2BAA2B;wBAC3B,kBAAkB;wBAClB,KAAK;wBACL,iBAAiB;wBACjB,qBAAqB;wBACrB,aAAa;wBACb,WAAW;wBACX,kBAAkB;wBAClB,iCAAiC;wBACjC,iBAAiB;wBACjB,gBAAgB;wBAChB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,oraAAA,EAAA;;sBAMA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEJnC,mCAAmC,CAAA;IAmB9C,WAAA,CACU,gBAA6C,EAC7C,YAA0B,EAC1B,gBAAkC,EAClC,YAA4B,EAC5B,KAAmB,EAAA;QAJnB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,KAAK,GAAL,KAAK;QAvBf,IAAA,CAAA,KAAK,GAAe,mBAAmB;QACvC,IAAA,CAAA,SAAS,GAAG,SAAS;QAErB,IAAA,CAAA,WAAW,GAAG,KAAK,EAAoB;QACvC,IAAA,CAAA,YAAY,GAAG,KAAK;AAEpB,QAAA,IAAA,CAAA,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAC1C,IAAA,CAAA,wBAAwB,GAAG,yBAAyB;QACpD,IAAA,CAAA,WAAW,GAAG,eAAe,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,GAAA,CAAK;QAC7E,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC9C,OAAO,CACL,qGAAqG,CACtG,EACD;YACE,OAAO,EAAE,IAAI,CAAC;AACf,SAAA,CACF;IAQE;AAEH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACnE,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,cAAc;QAC7B;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvB;IACF;AAEA,IAAA,MAAM,QAAQ,CAAC,aAAa,GAAG,IAAI,EAAA;AACjC,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE;QACjE,IAAI,CAAC,UAAU,GAAG;AAChB,cAAE;AACF,cAAE,IAAI,CAAC,KAAK,KAAK;kBACb,IAAI,CAAC;AACP,mBAAG,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;AAClF,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,YAAY;IAC7C;AAEA,IAAA,MAAM,4BAA4B,GAAA;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjE;QACF;AAEA,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,kBAAkB;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC,YAAY,CAAC;QAChC;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,CAAC,4BAA4B,EAAE;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAsB;AACxC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAsB;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,YAAY;IAC7C;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,sBAAsB,GAC1B,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK;AAC1F,cAAE,IAAI,CAAC,kBAAkB,CAAC;AAC1B,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC1B,QAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC1D,cAAc,CAAC,MAAM,EACrB,sBAAsB,CACvB;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,IAAI,iBAAiB,EAAE;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACvC,OAAO,CAAC,CAAA,iDAAA,CAAmD,CAAC,EAC5D,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAC/B;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/B;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;IACF;IAEA,MAAM,gBAAgB,CAAC,kBAAkB,EAAA;AACvC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACvC,OAAO,CAAC,8EAA8E,CAAC,EACvF,EAAE,IAAI,EAAE,CACT;AAED,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE;AACzE,gBAAA,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ;AACzB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QACtC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD;IACF;AAEQ,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAC5F,QAAA,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB;YAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAC9B;aAAO,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC;AAChE,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;AACtD,gBAAA,eAAe,EAAE,YAAY;AAC7B,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC;aACjC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;QAClF;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS;YACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACnD;IACF;IAEQ,MAAM,MAAM,CAAC,kBAAkB,EAAA;QACrC,IAAI,CAAC,kBAAkB,CAAC,YAAY;AAAE,YAAA,kBAAkB,CAAC,YAAY,GAAG,YAAY;AACpF,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAEvE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACzD,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE;YAC9B;iBAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9C,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC;AAChE,gBAAA,MAAM,YAAY,GAAG;AACnB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,eAAe,EAAE,YAAY;AAC7B,oBAAA,cAAc,EAAE,aAAa;AAC7B,oBAAA,UAAU,EAAE,OAAO,CAAC,iCAAiC,CAAC;oBACtD,cAAc,EAAE,kBAAkB,CAAC;iBACpC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,CAAC;YAClF;iBAAO;AACL,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS;gBAC9D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxD;QACF;QAAE,OAAO,KAAK,EAAE;;QAEhB;IACF;+GA/KW,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,2MCvDhD,m2QA+OA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5MI,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,2DACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,iBAAiB,uLACjB,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iCAAiC,oFACjC,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,mEACrB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAxB/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAEhC;wBACP,IAAI;wBACJ,gBAAgB;wBAChB,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,2BAA2B;wBAC3B,kBAAkB;wBAClB,KAAK;wBACL,iBAAiB;wBACjB,qBAAqB;wBACrB,aAAa;wBACb,WAAW;wBACX,kBAAkB;wBAClB,iCAAiC;wBACjC,iBAAiB;wBACjB,gBAAgB;wBAChB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,m2QAAA,EAAA;;sBAQA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AEnDhD,MAAM,cAAc,GAAY;AAC9B,IAAA;AACE,QAAA,IAAI,EAAE,qDAAqD;AAC3D,QAAA,SAAS,EAAE;AACZ,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,uDAAuD;AAC7D,QAAA,SAAS,EAAE;AACZ,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,qDAAqD;AAC3D,QAAA,SAAS,EAAE;AACZ;CACF;MAeY,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAZpC,UAAU;YACV,YAAY;AACZ,YAAAC,aAAW,qBAEX,mCAAmC;YACnC,2BAA2B;YAC3B,qCAAqC;YACrC,mCAAmC;YACnC,sCAAsC,CAAA,EAAA,CAAA,CAAA;AAI7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,SAAA,EAF3B,CAAC,2BAA2B,CAAC,YAVtC,UAAU;YACV,YAAY;YACZA,aAAW;AACX,YAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;YACrC,mCAAmC;YACnC,2BAA2B;YAC3B,qCAAqC;YACrC,mCAAmC,CAAA,EAAA,CAAA,CAAA;;4FAK1B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAdvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,YAAY;wBACZA,aAAW;AACX,wBAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;wBACrC,mCAAmC;wBACnC,2BAA2B;wBAC3B,qCAAqC;wBACrC,mCAAmC;wBACnC;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,2BAA2B;AACxC,iBAAA;;;MCnBY,6BAA6B,CAAA;AA+BxC,IAAA,WAAA,CACU,gBAAkC,EAClC,MAAmB,EACnB,eAAgC,EAChC,UAAuC,EAAA;QAHvC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,UAAU,GAAV,UAAU;AAlCpB,QAAA,IAAA,CAAA,oBAAoB,GAAG;AACrB,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,MAAM,IACX,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,KAAK,MAAM;AACzD,oBAAA,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,KAAK,UAAU;AAC/D,gBAAA,aAAa,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;AACtF,gBAAA,eAAe,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;gBAChD,cAAc,EAAE,cAAc,CAAC;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM,IACX,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,KAAK,MAAM;AACzD,oBAAA,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,KAAK,QAAQ;AAC7D,gBAAA,aAAa,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;AAC5D,gBAAA,eAAe,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;gBAChD,cAAc,EAAE,cAAc,CAAC;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,KAAK,QAAQ;AAC5E,gBAAA,aAAa,EAAE,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;gBAC9D,eAAe,EAAE,CAAC,qBAAqB,CAAC;gBACxC,cAAc,EAAE,cAAc,CAAC;AAChC;SACF;AAEgB,QAAA,IAAA,CAAA,MAAM,GAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE;IAOlE;IAEH,MAAM,YAAY,CAAC,MAAM,EAAA;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QACnD,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE;AAC3E,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,MAAM;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;aACxB;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;QACxC;IACF;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACvB,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,eAAe;AAElD,QAAA,IAAI,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE;AAC/C,QAAA,IAAI,eAAe,KAAK,QAAQ,EAAE;YAChC,WAAW,GAAG,cAAc;QAC9B;QAEA,OAAO,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE;IAClC;AAEA,IAAA,iBAAiB,CAAC,MAAsB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IACrE;IAEA,MAAM,kBAAkB,CAAC,MAAsB,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe;AAC1C,QAAA,IAAI,UAAU;AAEd,QAAA,IAAI,WAAW,CAAC,cAAc,EAAE;AAC9B,YAAA,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,IAAI;AACvF,YAAA,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,EAAE;QAC1C;AAEA,QAAA,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE;AACnC,YAAA,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C;QAEA,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI;IAC9D;AAEA,IAAA,MAAM,aAAa,CAAC,MAAsB,EAAE,gBAAgC,EAAA;AAC1E,QAAA,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,IAAI;AACxF,QAAA,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,kBAAkB;QAC/C,MAAM,CAAC,eAAe,CAAC,cAAc,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5D,MAAM,CAAC,eAAe,CAAC,IAAI,GAAG,2BAA2B,GAAG,gBAAgB,CAAC,EAAE;AAC/E,QAAA,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI;QACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C;IAEA,MAAM,qBAAqB,CAAC,MAAsB,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC;AAC1D,aAAA;AACD,YAAA,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;SACxB;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACtF;IAEA,MAAM,uBAAuB,CAC3B,MAAsB,EAAA;AAEtB,QAAA,IAAI,IAAI;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;AAChF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QACvE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AACvC,YAAA,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QACtC;IACF;AAEQ,IAAA,8BAA8B,CAAC,MAAsB,EAAA;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,WAAW,GAAG,WAAW,CAAC,aAAa,GAAG,EAAE;IACrD;IAEQ,MAAM,aAAa,CAAC,MAAsB,EAAA;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;AAChF,QAAA,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI;QACrE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7F,OAAO,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI;IAClD;+GAhIW,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA7B,6BAA6B,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;MC+BY,kCAAkC,CAAA;IAgB7C,WAAA,CACU,YAA2C,EAC3C,YAA0B,EAAA;QAD1B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;AAftB,QAAA,IAAA,CAAA,OAAO,GAA4B;AACjC,YAAA,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE;YAC5D,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,SAAS;SAC1F;AACD,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,sEAAsE,CAAC;QAC/F,IAAA,CAAA,gBAAgB,GAA2D,IAAI,EAAE;QACjF,IAAA,CAAA,OAAO,GAAG,EAAE;IAUT;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAC5B;AAEA,IAAA,iBAAiB,CAAC,SAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAC1B,GAAG,CAAC,WAAW,IACb,WAAW,CAAC,MAAM,CAChB,UAAU,IACR,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;aAC1E,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CACtF,CACF,CACF;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;YACxF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAC5D,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AACnC,aAAA,CAAC;QACJ;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;IACF;AAEA,IAAA,aAAa,CAAC,WAAW,EAAA;QACvB,WAAW,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAC5B;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAC3B,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,sBAAsB;YAC7C,OAAO,CAAC,IAAI,CAAC;AACf,QAAA,CAAC,CAAC;IACJ;+GA/DW,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAK,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAUlC,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1DpC,6/CA2CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTI,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAlB9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAEtB;wBACP,qBAAqB;wBACrB,IAAI;wBACJ,kBAAkB;wBAClB,uBAAuB;wBACvB,kBAAkB;wBAClB,WAAW;wBACX,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;wBAClB,iBAAiB;wBACjB,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,6/CAAA,EAAA;;sBAIA;;sBAQA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEdzC,kCAAkC,CAAA;AAU7C,IAAA,WAAA,CACU,YAA2C,EAC3C,YAA0B,EAC1B,MAAc,EACd,gBAAkC,EAAA;QAHlC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAR1B,IAAA,CAAA,eAAe,GAAoC,IAAI,EAAE;QACzD,IAAA,CAAA,OAAO,GAAG,EAAE;IAQT;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB;AAEA,IAAA,OAAO,CAAC,SAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CACzB,GAAG,CAAC,SAAS,IACX,SAAS,CAAC,MAAM,CACd,QAAQ,IACN,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;aAChE,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CACpF,CACF,CACF;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;AACpF,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QAChF;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;IACF;AAEA,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEA,MAAM,KAAK,CAAC,gBAAgB,EAAA;AAC1B,QAAA,IAAI;YACF,MAAM,SAAS,GACb,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,GAAG;AAC3F,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9C,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;QAAE,OAAO,EAAE,EAAE;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACrE;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QACnD;QAAE,OAAO,EAAE,EAAE;;QAEb;IACF;+GA3EW,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5C/C,6vFA8EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjDI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kCAAkC,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClC,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAnB9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAEtB;wBACP,WAAW;wBACX,IAAI;wBACJ,gBAAgB;wBAChB,qBAAqB;wBACrB,kBAAkB;wBAClB,kBAAkB;wBAClB,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;wBAClB,iBAAiB;wBACjB,gBAAgB;wBAChB,kCAAkC;wBAClC;AACD,qBAAA,EAAA,QAAA,EAAA,6vFAAA,EAAA;;sBAUA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,4BAA4B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEhD/C,eAAe,CAAA;AAC1B,IAAA,WAAA,CAAoB,YAA2C,EAAA;QAA3C,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAkC;AAElE,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACpD;+GANW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACKD,MAAM,WAAW,GAAY;AAC3B,IAAA;QACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,SAAS,EAAE,kCAAkC;AAC7C,QAAA,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,CAAC,eAAe;AAC9B;CACF;MAWY,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAP5B,UAAU;YACVD,aAAW;YACX,kCAAkC;YAClC,kCAAkC,CAAA,EAAA,CAAA,CAAA;AAIzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,SAAA,EAFnB,CAAC,eAAe,EAAE,6BAA6B,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,EAAA,OAAA,EAAA,CALjF,UAAU;YACVA,aAAW;YACX,kCAAkC;YAClC,kCAAkC,CAAA,EAAA,CAAA,CAAA;;4FAIzB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACVA,aAAW;wBACX,kCAAkC;wBAClC;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,eAAe,EAAE,6BAA6B,EAAE,SAAS,CAAC,WAAW,CAAC;AACnF,iBAAA;;;AC3BD;;AAEG;;;;"}