UNPKG

ng2-file-upload

Version:
1 lines • 80.7 kB
{"version":3,"file":"ng2-file-upload.mjs","sources":["../../../../libs/ng2-file-upload/file-upload/callback-errors.ts","../../../../libs/ng2-file-upload/file-upload/file-like-object.class.ts","../../../../libs/ng2-file-upload/file-upload/file-item.class.ts","../../../../libs/ng2-file-upload/file-upload/file-type.class.ts","../../../../libs/ng2-file-upload/file-upload/file-uploader.class.ts","../../../../libs/ng2-file-upload/file-upload/chunked-file-uploader.class.ts","../../../../libs/ng2-file-upload/file-upload/file-select.directive.ts","../../../../libs/ng2-file-upload/file-upload/file-drop.directive.ts","../../../../libs/ng2-file-upload/file-upload/file-upload.module.ts","../../../../libs/ng2-file-upload/ng2-file-upload.ts"],"sourcesContent":["// reports an error that cannot be rethrown, so it still reaches window.onerror and Angular's ErrorHandler\nexport function reportLater(error: unknown): void {\n  setTimeout(() => {\n    throw error;\n  });\n}\n\n// runs then() even when action() throws; if both throw, the first error is rethrown and the second reported later\nexport function runThen(action: () => void, then: () => void): void {\n  try {\n    action();\n  } catch (e) {\n    try {\n      then();\n    } catch (later) {\n      reportLater(later);\n    }\n    throw e;\n  }\n  then();\n}\n","export class FileLikeObject {\n  lastModifiedDate: any;\n  size: any;\n  type?: string;\n  name?: string;\n  rawFile: HTMLInputElement | File;\n\n  constructor(fileOrInput: HTMLInputElement | File) {\n    this.rawFile = fileOrInput;\n    const fakePathOrObject =  fileOrInput instanceof HTMLInputElement ? fileOrInput.value : fileOrInput;\n    const postfix = typeof fakePathOrObject === 'string' ? 'FakePath' : 'Object';\n    const method = `_createFrom${postfix}`;\n    (this as any)[ method ](fakePathOrObject);\n  }\n\n  _createFromFakePath(path: string): void {\n    this.lastModifiedDate = void 0;\n    this.size = void 0;\n    this.type = `like/${path.slice(path.lastIndexOf('.') + 1).toLowerCase()}`;\n    this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\n  }\n\n  _createFromObject(object: { size: number, type: string, name: string }): void {\n    this.size = object.size;\n    this.type = object.type;\n    this.name = object.name;\n  }\n}\n","import { reportLater, runThen } from './callback-errors';\nimport { FileLikeObject } from './file-like-object.class';\nimport { FileUploader, ParsedResponseHeaders, FileUploaderOptions } from './file-uploader.class';\n\nexport class FileItem {\n   file: FileLikeObject;\n   _file: File;\n   alias?: string;\n   url = '/';\n   method?: string;\n   headers: any = [];\n   withCredentials = true;\n   formData: any = [];\n   isReady = false;\n   isUploading = false;\n   isUploaded = false;\n   isSuccess = false;\n   isCancel = false;\n   isError = false;\n   progress = 0;\n   index?: number;\n   _xhr?: XMLHttpRequest;\n   _form: any;\n\n  protected uploader: FileUploader;\n  protected some: File;\n  protected options: FileUploaderOptions;\n\n   constructor(uploader: FileUploader, some: File, options: FileUploaderOptions) {\n    this.uploader = uploader;\n    this.some = some;\n    this.options = options;\n    this.file = new FileLikeObject(some);\n    this._file = some;\n    if (uploader.options) {\n      this.method = uploader.options.method || 'POST';\n      this.alias = uploader.options.itemAlias || 'file';\n    }\n    this.url = uploader.options.url;\n  }\n\n   upload(): void {\n    try {\n      this.uploader.uploadItem(this);\n    } catch (e) {\n      // a callback that threw before the request: fail the item so the queue moves on, then rethrow\n      try {\n        runThen(() => this.uploader._onErrorItem(this, '', 0, {}), () => this.uploader._onCompleteItem(this, '', 0, {}));\n      } catch (later) {\n        reportLater(later);\n      }\n      throw e;\n    }\n  }\n\n   cancel(): void {\n    this.uploader.cancelItem(this);\n  }\n\n   remove(): void {\n    this.uploader.removeFromQueue(this);\n  }\n\n   onBeforeUpload(): void {\n    return void 0;\n  }\n\n   onBuildForm(form: any): any {\n    return { form };\n  }\n\n   onProgress(progress: number): any {\n    return { progress };\n  }\n\n   onSuccess(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n   onError(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n   onCancel(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n   onComplete(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n   _onBeforeUpload(): void {\n    this.isReady = true;\n    this.isUploading = true;\n    this.isUploaded = false;\n    this.isSuccess = false;\n    this.isCancel = false;\n    this.isError = false;\n    this.progress = 0;\n    this.onBeforeUpload();\n  }\n\n   _onBuildForm(form: any): void {\n    this.onBuildForm(form);\n  }\n\n   _onProgress(progress: number): void {\n    this.progress = progress;\n    this.onProgress(progress);\n  }\n\n   _onSuccess(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = true;\n    this.isSuccess = true;\n    this.isCancel = false;\n    this.isError = false;\n    this.progress = 100;\n    this.index = undefined;\n    this.onSuccess(response, status, headers);\n  }\n\n   _onError(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = true;\n    this.isSuccess = false;\n    this.isCancel = false;\n    this.isError = true;\n    this.progress = 0;\n    this.index = undefined;\n    this.onError(response, status, headers);\n  }\n\n   _onCancel(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = false;\n    this.isSuccess = false;\n    this.isCancel = true;\n    this.isError = false;\n    this.progress = 0;\n    this.index = undefined;\n    this.onCancel(response, status, headers);\n  }\n\n   _onComplete(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.onComplete(response, status, headers);\n\n    if (this.uploader.options.removeAfterUpload) {\n      this.remove();\n    }\n  }\n\n   _prepareToUploading(): void {\n    this.index = this.index || ++this.uploader._nextIndex;\n    this.isReady = true;\n  }\n}\n","import { FileLikeObject } from '../index';\n\nexport class FileType {\n  /*  MS office  */\n  // tslint:disable-next-line:variable-name\n  static mime_doc: string[] = [\n    'application/msword',\n    'application/msword',\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n    'application/vnd.ms-word.document.macroEnabled.12',\n    'application/vnd.ms-word.template.macroEnabled.12'\n  ];\n  // tslint:disable-next-line:variable-name\n  static mime_xsl: string[] = [\n    'application/vnd.ms-excel',\n    'application/vnd.ms-excel',\n    'application/vnd.ms-excel',\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n    'application/vnd.ms-excel.sheet.macroEnabled.12',\n    'application/vnd.ms-excel.template.macroEnabled.12',\n    'application/vnd.ms-excel.addin.macroEnabled.12',\n    'application/vnd.ms-excel.sheet.binary.macroEnabled.12'\n  ];\n  // tslint:disable-next-line:variable-name\n  static mime_ppt: string[] = [\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n    'application/vnd.openxmlformats-officedocument.presentationml.template',\n    'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n    'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n    'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n    'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n    'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'\n  ];\n\n  /* PSD */\n  // tslint:disable-next-line:variable-name\n  static mime_psd: string[] = [\n    'image/photoshop',\n    'image/x-photoshop',\n    'image/psd',\n    'application/photoshop',\n    'application/psd',\n    'zz-application/zz-winassoc-psd'\n  ];\n\n  /* Compressed files */\n  // tslint:disable-next-line:variable-name\n  static mime_compress: string[] = [\n    'application/x-gtar',\n    'application/x-gcompress',\n    'application/compress',\n    'application/x-tar',\n    'application/x-rar-compressed',\n    'application/octet-stream',\n    'application/x-zip-compressed',\n    'application/zip-compressed',\n    'application/x-7z-compressed',\n    'application/gzip',\n    'application/x-bzip2'\n  ];\n\n  static getMimeClass(file: FileLikeObject): string {\n    let mimeClass = 'application';\n    if (file?.type && this.mime_psd.indexOf(file.type) !== -1) {\n      mimeClass = 'image';\n    } else if (file?.type?.match('image.*')) {\n      mimeClass = 'image';\n    } else if (file?.type?.match('video.*')) {\n      mimeClass = 'video';\n    } else if (file?.type?.match('audio.*')) {\n      mimeClass = 'audio';\n    } else if (file?.type === 'application/pdf') {\n      mimeClass = 'pdf';\n    } else if (file?.type && this.mime_compress.indexOf(file.type) !== -1) {\n      mimeClass = 'compress';\n    } else if (file?.type && this.mime_doc.indexOf(file.type) !== -1) {\n      mimeClass = 'doc';\n    } else if (file?.type && this.mime_xsl.indexOf(file.type) !== -1) {\n      mimeClass = 'xls';\n    } else if (file?.type && this.mime_ppt.indexOf(file.type) !== -1) {\n      mimeClass = 'ppt';\n    }\n    if (mimeClass === 'application' && file?.name) {\n      mimeClass = this.fileTypeDetection(file.name);\n    }\n\n    return mimeClass;\n  }\n\n  static fileTypeDetection(inputFilename: string): string {\n    const types: { [ key: string ]: string } = {\n      jpg: 'image',\n      jpeg: 'image',\n      tif: 'image',\n      psd: 'image',\n      bmp: 'image',\n      png: 'image',\n      nef: 'image',\n      tiff: 'image',\n      cr2: 'image',\n      dwg: 'image',\n      cdr: 'image',\n      ai: 'image',\n      indd: 'image',\n      pin: 'image',\n      cdp: 'image',\n      skp: 'image',\n      stp: 'image',\n      '3dm': 'image',\n      mp3: 'audio',\n      wav: 'audio',\n      wma: 'audio',\n      mod: 'audio',\n      m4a: 'audio',\n      compress: 'compress',\n      zip: 'compress',\n      rar: 'compress',\n      '7z': 'compress',\n      lz: 'compress',\n      z01: 'compress',\n      bz2: 'compress',\n      gz: 'compress',\n      pdf: 'pdf',\n      xls: 'xls',\n      xlsx: 'xls',\n      ods: 'xls',\n      mp4: 'video',\n      avi: 'video',\n      wmv: 'video',\n      mpg: 'video',\n      mts: 'video',\n      flv: 'video',\n      '3gp': 'video',\n      vob: 'video',\n      m4v: 'video',\n      mpeg: 'video',\n      m2ts: 'video',\n      mov: 'video',\n      doc: 'doc',\n      docx: 'doc',\n      eps: 'doc',\n      txt: 'doc',\n      odt: 'doc',\n      rtf: 'doc',\n      ppt: 'ppt',\n      pptx: 'ppt',\n      pps: 'ppt',\n      ppsx: 'ppt',\n      odp: 'ppt'\n    };\n\n    const chunks = inputFilename.split('.');\n    if (chunks.length < 2) {\n      return 'application';\n    }\n    const extension = chunks[ chunks.length - 1 ].toLowerCase();\n    if (types[ extension ] === undefined) {\n      return 'application';\n    } else {\n      return types[ extension ];\n    }\n  }\n}\n","import { EventEmitter } from '@angular/core';\nimport { runThen } from './callback-errors';\nimport { FileLikeObject } from './file-like-object.class';\nimport { FileItem } from './file-item.class';\nimport { FileType } from './file-type.class';\n\nfunction isFile(value: any): boolean {\n  return (File && value instanceof File);\n}\n\nexport interface Headers {\n  name: string;\n  value: string;\n}\n\nexport interface ParsedResponseHeaders { [ headerFieldName: string ]: string }\n\nexport interface FilterFunction {\n  name: string;\n  fn(item: FileLikeObject, options?: FileUploaderOptions): boolean;\n}\n\nexport interface FileUploaderOptions {\n  allowedMimeType?: string[];\n  allowEmptyMimeType?: boolean;\n  allowedFileType?: string[];\n  autoUpload?: boolean;\n  isHTML5?: boolean;\n  filters?: FilterFunction[];\n  headers?: Headers[];\n  method?: string;\n  authToken?: string;\n  maxFileSize?: number;\n  queueLimit?: number;\n  removeAfterUpload?: boolean;\n  url: string;\n  disableMultipart?: boolean;\n  itemAlias?: string;\n  authTokenHeader?: string;\n  additionalParameter?: { [ key: string ]: any };\n  parametersBeforeFiles?: boolean;\n  // eslint-disable-next-line\n  formatDataFunction?: Function;\n  formatDataFunctionIsAsync?: boolean;\n}\n\nexport class FileUploader {\n\n  authToken?: string;\n  isUploading = false;\n  queue: FileItem[] = [];\n  progress = 0;\n  _nextIndex = 0;\n  autoUpload: any;\n  authTokenHeader?: string;\n  response: EventEmitter<any>;\n\n  options: FileUploaderOptions = {\n    autoUpload: false,\n    isHTML5: true,\n    filters: [],\n    removeAfterUpload: false,\n    disableMultipart: false,\n    formatDataFunction: (item: FileItem) => item._file,\n    formatDataFunctionIsAsync: false,\n    url: ''\n  };\n\n  protected _failFilterIndex?: number;\n\n  constructor(options: FileUploaderOptions) {\n    this.setOptions(options);\n    this.response = new EventEmitter<string>();\n  }\n\n  setOptions(options: FileUploaderOptions): void {\n    this.options = Object.assign(this.options, options);\n\n    this.authToken = this.options.authToken;\n    this.authTokenHeader = this.options.authTokenHeader || 'Authorization';\n    this.autoUpload = this.options.autoUpload;\n    // drop the built-in filters added by an earlier call before adding them again\n    const builtIn = [ this._queueLimitFilter, this._fileSizeFilter, this._fileTypeFilter, this._mimeTypeFilter ];\n    this.options.filters = this.options.filters?.filter((filter: FilterFunction) => !builtIn.includes(filter.fn));\n    this.options.filters?.unshift({ name: 'queueLimit', fn: this._queueLimitFilter });\n\n    if (this.options.maxFileSize) {\n      this.options.filters?.unshift({ name: 'fileSize', fn: this._fileSizeFilter });\n    }\n\n    if (this.options.allowedFileType) {\n      this.options.filters?.unshift({ name: 'fileType', fn: this._fileTypeFilter });\n    }\n\n    if (this.options.allowedMimeType) {\n      this.options.filters?.unshift({ name: 'mimeType', fn: this._mimeTypeFilter });\n    }\n\n    for (let i = 0; i < this.queue.length; i++) {\n      this.queue[ i ].url = this.options.url;\n    }\n  }\n\n  addToQueue(files: File[] | FileList, _options?: FileUploaderOptions, filters?: [] | string): void {\n    let options = _options;\n    const list: File[] = Array.from(files);\n    const arrayOfFilters = this._getFilters(filters);\n    const count = this.queue.length;\n    const addedFileItems: FileItem[] = [];\n    list.map((some: File) => {\n      if (!options) {\n        options = this.options;\n      }\n\n      const temp = new FileLikeObject(some);\n      if (this._isValidFile(temp, arrayOfFilters, options)) {\n        const fileItem = new FileItem(this, some, options);\n        addedFileItems.push(fileItem);\n        this.queue.push(fileItem);\n        this._onAfterAddingFile(fileItem);\n      } else {\n        if (typeof this._failFilterIndex === 'number' && this._failFilterIndex >= 0) {\n          const filter = arrayOfFilters[ this._failFilterIndex ];\n          this._onWhenAddingFileFailed(temp, filter, options);\n        }\n      }\n    });\n    if (this.queue.length !== count) {\n      this._onAfterAddingAll(addedFileItems);\n      this.progress = this._getTotalProgress();\n    }\n    this._render();\n    if (this.options.autoUpload) {\n      this.uploadAll();\n    }\n  }\n\n  removeFromQueue(value: FileItem): void {\n    const index = this.getIndexOfItem(value);\n    const item = this.queue[ index ];\n    if (item.isUploading) {\n      item.cancel();\n    }\n    this.queue.splice(index, 1);\n    this.progress = this._getTotalProgress();\n  }\n\n  clearQueue(): void {\n    while (this.queue.length) {\n      this.queue[ 0 ].remove();\n    }\n    this.progress = 0;\n  }\n\n  uploadItem(value: FileItem): void {\n    const index = this.getIndexOfItem(value);\n    const item = this.queue[ index ];\n    const transport = this.options.isHTML5 ? '_xhrTransport' : '_iframeTransport';\n    item._prepareToUploading();\n    if (this.isUploading) {\n      return;\n    }\n    this.isUploading = true;\n    (this as any)[ transport ](item);\n  }\n\n  cancelItem(value: FileItem): void {\n    const index = this.getIndexOfItem(value);\n    const item = this.queue[ index ];\n    if (!item) {\n      return;\n    }\n    if (item.isUploading) {\n      const prop = this.options.isHTML5 ? item._xhr : item._form;\n      prop.abort();\n\n      return;\n    }\n    // a waiting item is taken out of the queue without sending a request\n    if (item.isReady) {\n      this._onCancelItem(item, '', 0, {});\n      item._onComplete('', 0, {});\n      this.onCompleteItem(item, '', 0, {});\n      this._render();\n    }\n  }\n\n  uploadAll(): void {\n    const items = this.getNotUploadedItems().filter((item: FileItem) => !item.isUploading);\n    if (!items.length) {\n      return;\n    }\n    items.map((item: FileItem) => item._prepareToUploading());\n    items[ 0 ].upload();\n  }\n\n  cancelAll(): void {\n    // waiting items first, so cancelling the uploading item does not start the next one\n    const items = this.getNotUploadedItems();\n    items.filter((item: FileItem) => !item.isUploading).forEach((item: FileItem) => item.cancel());\n    items.filter((item: FileItem) => item.isUploading).forEach((item: FileItem) => item.cancel());\n  }\n\n  isFile(value: any): boolean {\n    return isFile(value);\n  }\n\n  isFileLikeObject(value: any): boolean {\n    return value instanceof FileLikeObject;\n  }\n\n  getIndexOfItem(value: any): number {\n    return typeof value === 'number' ? value : this.queue.indexOf(value);\n  }\n\n  getNotUploadedItems(): any[] {\n    return this.queue.filter((item: FileItem) => !item.isUploaded);\n  }\n\n  getReadyItems(): any[] {\n    return this.queue\n      .filter((item: FileItem) => (item.isReady && !item.isUploading))\n      .sort((item1: any, item2: any) => item1.index - item2.index);\n  }\n\n  onAfterAddingAll(fileItems: any): any {\n    return { fileItems };\n  }\n\n  onBuildItemForm(fileItem: FileItem, form: any): any {\n    return { fileItem, form };\n  }\n\n  onAfterAddingFile(fileItem: FileItem): any {\n    return { fileItem };\n  }\n\n  onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): any {\n    return { item, filter, options };\n  }\n\n  onBeforeUploadItem(fileItem: FileItem): any {\n    return { fileItem };\n  }\n\n  onProgressItem(fileItem: FileItem, progress: any): any {\n    return { fileItem, progress };\n  }\n\n  onProgressAll(progress: any): any {\n    return { progress };\n  }\n\n  onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, response, status, headers };\n  }\n\n  onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, response, status, headers };\n  }\n\n  onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, response, status, headers };\n  }\n\n  onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, response, status, headers };\n  }\n\n  onCompleteAll(): any {\n    return void 0;\n  }\n\n  _mimeTypeFilter(item: FileLikeObject): boolean {\n    if (!this.options.allowedMimeType) {\n      return true;\n    }\n    // browsers report an empty type for extensions the OS does not know\n    if (!item?.type) {\n      return this.options.allowEmptyMimeType !== false;\n    }\n\n    return this.options.allowedMimeType.indexOf(item.type) !== -1;\n  }\n\n  _fileSizeFilter(item: FileLikeObject): boolean {\n    return !(this.options.maxFileSize && item.size > this.options.maxFileSize);\n  }\n\n  _fileTypeFilter(item: FileLikeObject): boolean {\n    return !(this.options.allowedFileType &&\n      this.options.allowedFileType.indexOf(FileType.getMimeClass(item)) === -1);\n  }\n\n  _onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    item._onError(response, status, headers);\n    this.onErrorItem(item, response, status, headers);\n  }\n\n  _onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    // the queue moves on even when an app callback throws\n    runThen(() => {\n      item._onComplete(response, status, headers);\n      this.onCompleteItem(item, response, status, headers);\n    }, () => this._uploadNext());\n  }\n\n  protected _finishItem(item: FileItem, method: '_onSuccessItem' | '_onErrorItem' | '_onCancelItem', response: string,\n                        status: number, headers: ParsedResponseHeaders): void {\n    runThen(() => this[ method ](item, response, status, headers), () => this._onCompleteItem(item, response, status, headers));\n  }\n\n  private _uploadNext(): void {\n    const nextItem = this.getReadyItems()[ 0 ];\n    this.isUploading = false;\n    if (nextItem) {\n      nextItem.upload();\n\n      return;\n    }\n    this.progress = this._getTotalProgress();\n    this.onCompleteAll();\n    this._render();\n  }\n\n  protected _headersGetter(parsedHeaders: ParsedResponseHeaders): any {\n    return (name: any): any => {\n      if (name) {\n        return parsedHeaders[ name.toLowerCase() ] || undefined;\n      }\n\n      return parsedHeaders;\n    };\n  }\n\n  protected _xhrTransport(item: FileItem): any {\n    const xhr = item._xhr = new XMLHttpRequest();\n    let sendable: any;\n    this._onBeforeUploadItem(item);\n\n    if (typeof item._file.size !== 'number') {\n      throw new TypeError('The file specified is no longer valid');\n    }\n    if (!this.options.disableMultipart) {\n      sendable = this._buildFormData(item, item._file);\n    } else {\n      if (this.options.formatDataFunction) {\n        sendable = this.options.formatDataFunction(item);\n      }\n    }\n\n    xhr.upload.onprogress = (event: any) => {\n      const progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\n      this._onProgressItem(item, progress);\n    };\n    xhr.onload = () => {\n      const headers = this._parseHeaders(xhr.getAllResponseHeaders());\n      const response = this._transformResponse(xhr.response);\n      this._finishItem(item, this._isSuccessCode(xhr.status) ? '_onSuccessItem' : '_onErrorItem', response, xhr.status, headers);\n    };\n    xhr.onerror = () => {\n      const headers = this._parseHeaders(xhr.getAllResponseHeaders());\n      const response = this._transformResponse(xhr.response);\n      this._finishItem(item, '_onErrorItem', response, xhr.status, headers);\n    };\n    xhr.onabort = () => {\n      const headers = this._parseHeaders(xhr.getAllResponseHeaders());\n      const response = this._transformResponse(xhr.response);\n      this._finishItem(item, '_onCancelItem', response, xhr.status, headers);\n    };\n    this._openRequest(xhr, item);\n    if (this.options.formatDataFunctionIsAsync) {\n      sendable.then(\n        (result: any) => xhr.send(JSON.stringify(result))\n      );\n    } else {\n      xhr.send(sendable);\n    }\n    this._render();\n  }\n\n  protected _buildFormData(item: FileItem, file: Blob, extraParameters: { [ key: string ]: string } = {}): FormData {\n    const sendable = new FormData();\n    this._onBuildItemForm(item, sendable);\n    Object.keys(extraParameters).forEach((key: string) => sendable.append(key, extraParameters[ key ]));\n    const appendFile = () => sendable.append(item.alias as string, file, item.file.name);\n    if (!this.options.parametersBeforeFiles) {\n      appendFile();\n    }\n\n    // For AWS, Additional Parameters must come BEFORE Files\n    if (this.options.additionalParameter !== undefined) {\n      Object.keys(this.options.additionalParameter).forEach((key: string) => {\n        let paramVal = this.options.additionalParameter?.[ key ];\n        // Allow an additional parameter to include the filename\n        if (typeof paramVal === 'string' && paramVal.indexOf('{{file_name}}') >= 0 && item.file?.name) {\n          paramVal = paramVal.replace('{{file_name}}', item.file.name);\n        }\n        sendable.append(key, paramVal);\n      });\n    }\n\n    if (appendFile && this.options.parametersBeforeFiles) {\n      appendFile();\n    }\n\n    return sendable;\n  }\n\n  protected _openRequest(xhr: XMLHttpRequest, item: FileItem): void {\n    // tslint:disable-next-line:no-this-assignment\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const that = this;\n    if (item.method && item.url) {\n      xhr.open(item.method, item.url, true);\n    }\n    xhr.withCredentials = item.withCredentials;\n    if (this.options.headers) {\n      for (const header of this.options.headers) {\n        xhr.setRequestHeader(header.name, header.value);\n      }\n    }\n    if (item.headers.length) {\n      for (const header of item.headers) {\n        xhr.setRequestHeader(header.name, header.value);\n      }\n    }\n    if (this.authToken && this.authTokenHeader) {\n      xhr.setRequestHeader(this.authTokenHeader, this.authToken);\n    }\n    xhr.onreadystatechange = function () {\n      if (xhr.readyState == XMLHttpRequest.DONE) {\n        that.response.emit(xhr.responseText);\n      }\n    };\n  }\n\n  protected _getTotalProgress(value = 0): number {\n    if (this.options.removeAfterUpload) {\n      return value;\n    }\n    const notUploaded = this.getNotUploadedItems().length;\n    const uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\n    const ratio = 100 / this.queue.length;\n    const current = value * ratio / 100;\n    return Math.round(uploaded * ratio + current);\n  }\n\n  protected _getFilters(filters?: FilterFunction[] | string): FilterFunction[] | [] {\n    if (!filters) {\n      return this.options?.filters || [];\n    }\n    if (Array.isArray(filters)) {\n      return filters;\n    }\n    if (typeof filters === 'string') {\n      const names = filters.match(/[^\\s,]+/g);\n\n      return this.options?.filters || []\n        .filter((filter: any) => names?.indexOf(filter.name) !== -1);\n    }\n\n    return this.options?.filters || [];\n  }\n\n  protected _render(): any {\n    return void 0;\n  }\n\n  protected _queueLimitFilter(): boolean {\n    return this.options.queueLimit === undefined || this.queue.length < this.options.queueLimit;\n  }\n\n  protected _isValidFile(file: FileLikeObject, filters: FilterFunction[], options: FileUploaderOptions): boolean {\n    this._failFilterIndex = -1;\n\n    return !filters.length ? true : filters.every((filter: FilterFunction) => {\n      if (typeof this._failFilterIndex === 'number') {\n        this._failFilterIndex++;\n      }\n\n      return filter.fn.call(this, file, options);\n    });\n  }\n\n  protected _isSuccessCode(status: number): boolean {\n    return (status >= 200 && status < 300) || status === 304;\n  }\n\n  protected _transformResponse(response: string): string {\n    return response;\n  }\n\n  protected _parseHeaders(headers: string): ParsedResponseHeaders {\n    const parsed: any = {};\n    let key: any;\n    let val: any;\n    let i: any;\n    if (!headers) {\n      return parsed;\n    }\n    headers.split('\\n').map((line: any) => {\n      i = line.indexOf(':');\n      key = line.slice(0, i).trim().toLowerCase();\n      val = line.slice(i + 1).trim();\n      if (key) {\n        parsed[ key ] = parsed[ key ] ? parsed[ key ] + ', ' + val : val;\n      }\n    });\n\n    return parsed;\n  }\n\n  protected _onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): void {\n    this.onWhenAddingFileFailed(item, filter, options);\n  }\n\n  protected _onAfterAddingFile(item: FileItem): void {\n    this.onAfterAddingFile(item);\n  }\n\n  protected _onAfterAddingAll(items: any): void {\n    this.onAfterAddingAll(items);\n  }\n\n  protected _onBeforeUploadItem(item: FileItem): void {\n    item._onBeforeUpload();\n    this.onBeforeUploadItem(item);\n  }\n\n  protected _onBuildItemForm(item: FileItem, form: any): void {\n    item._onBuildForm(form);\n    this.onBuildItemForm(item, form);\n  }\n\n  protected _onProgressItem(item: FileItem, progress: any): void {\n    const total = this._getTotalProgress(progress);\n    this.progress = total;\n    item._onProgress(progress);\n    this.onProgressItem(item, progress);\n    this.onProgressAll(total);\n    this._render();\n  }\n\n  protected _onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    item._onSuccess(response, status, headers);\n    this.onSuccessItem(item, response, status, headers);\n  }\n\n  protected _onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    item._onCancel(response, status, headers);\n    this.onCancelItem(item, response, status, headers);\n  }\n}\n","import { reportLater, runThen } from './callback-errors';\nimport { FileItem } from './file-item.class';\nimport { FileUploader, FileUploaderOptions, ParsedResponseHeaders } from './file-uploader.class';\n\nexport interface ChunkedFileUploaderOptions extends FileUploaderOptions {\n  chunkSize?: number;\n  chunkIndexParam?: string;\n  totalChunksParam?: string;\n}\n\nexport interface FileChunk {\n  index: number;\n  total: number;\n  start: number;\n  end: number;\n  blob: Blob;\n}\n\ninterface ChunkState {\n  chunk?: FileChunk;\n  resume?: FileChunk;\n  cancelled?: boolean;\n}\n\nexport class ChunkedFileUploader extends FileUploader {\n  declare options: ChunkedFileUploaderOptions;\n\n  private _chunks = new WeakMap<FileItem, ChunkState>();\n\n  constructor(options: ChunkedFileUploaderOptions) {\n    super(options);\n  }\n\n  setOptions(options: ChunkedFileUploaderOptions): void {\n    super.setOptions(options);\n    // chunk hooks may retarget item.method along with item.url, so reset both\n    for (const item of this.queue) {\n      item.method = this.options.method || 'POST';\n    }\n  }\n\n  getChunk(item: FileItem): FileChunk | undefined {\n    return this._chunks.get(item)?.chunk;\n  }\n\n  resumeItem(item: FileItem): void {\n    if (item.isUploading || this.getIndexOfItem(item) < 0) {\n      return;\n    }\n    this._setResumePoint(item);\n    item.upload();\n  }\n\n  resumeAll(): void {\n    const items = this.queue.filter(item => !item.isSuccess && !item.isUploading);\n    if (!items.length) {\n      return;\n    }\n    items.forEach(item => {\n      this._setResumePoint(item);\n      item._prepareToUploading();\n    });\n    items[ 0 ].upload();\n  }\n\n  _onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    item._onError(response, status, headers);\n    this._keepProgress(item);\n    this.onErrorItem(item, response, status, headers);\n  }\n\n  cancelItem(value: FileItem): void {\n    const item = this.queue[ this.getIndexOfItem(value) ];\n    const state = item && this._chunks.get(item);\n    if (state && item.isUploading) {\n      state.cancelled = true;\n      item._xhr?.abort();\n\n      return;\n    }\n    super.cancelItem(value);\n  }\n\n  onBeforeUploadChunk(item: FileItem, chunk: FileChunk): any {\n    return { item, chunk };\n  }\n\n  onSuccessChunk(item: FileItem, chunk: FileChunk, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, chunk, response, status, headers };\n  }\n\n  onErrorChunk(item: FileItem, chunk: FileChunk, response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { item, chunk, response, status, headers };\n  }\n\n  protected _xhrTransport(item: FileItem): any {\n    const chunkSize = Math.floor(this.options.chunkSize || 0);\n    if (chunkSize <= 0) {\n      this._chunks.delete(item);\n\n      return super._xhrTransport(item);\n    }\n    const resume = this._chunks.get(item)?.resume;\n    this._chunks.set(item, { chunk: resume });\n    this._onBeforeUploadItem(item);\n\n    if (typeof item._file.size !== 'number') {\n      throw new TypeError('The file specified is no longer valid');\n    }\n    const total = Math.max(1, Math.ceil(item._file.size / chunkSize));\n    this._sendChunk(item, resume || this._sliceChunk(item, 0, 0, chunkSize, total));\n  }\n\n  protected _onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n    item._onCancel(response, status, headers);\n    this._keepProgress(item);\n    // an item cancelled while waiting to resume starts over on upload(), like any cancelled item\n    const state = this._chunks.get(item);\n    if (state) {\n      state.resume = undefined;\n    }\n    this.onCancelItem(item, response, status, headers);\n  }\n\n  // a paused or failed chunked item counts with the progress it keeps, not as 0 or as done\n  protected _getTotalProgress(value = 0): number {\n    if (this.options.removeAfterUpload || !this.queue.length) {\n      return super._getTotalProgress(value);\n    }\n    const total = this.queue.reduce((sum: number, item: FileItem) => {\n      if (item.isUploading) {\n        return sum + value;\n      }\n      if (this._chunks.has(item) && !item.isSuccess) {\n        return sum + item.progress;\n      }\n\n      return sum + (item.isUploaded ? 100 : 0);\n    }, 0);\n\n    return Math.round(total / this.queue.length);\n  }\n\n  private _setResumePoint(item: FileItem): void {\n    const state = this._chunks.get(item);\n    if (state?.chunk) {\n      state.resume = state.chunk;\n    }\n  }\n\n  // a failed or cancelled item resumes from its current chunk, so its progress stays at that chunk's start\n  private _keepProgress(item: FileItem): void {\n    const chunk = this._chunks.get(item)?.chunk;\n    if (chunk && item._file.size) {\n      item.progress = Math.round(chunk.start * 100 / item._file.size);\n    }\n  }\n\n  private _sliceChunk(item: FileItem, index: number, start: number, length: number, total: number): FileChunk {\n    const end = Math.min(start + length, item._file.size);\n\n    return { index, total, start, end, blob: item._file.slice(start, end, item._file.type) };\n  }\n\n  private _sendChunk(item: FileItem, chunk: FileChunk): void {\n    const state = this._chunks.get(item) as ChunkState;\n    const xhr = item._xhr = new XMLHttpRequest();\n    state.chunk = chunk;\n    this.onBeforeUploadChunk(item, chunk);\n    const sendable = this.options.disableMultipart ? chunk.blob : this._buildFormData(item, chunk.blob, {\n      [ this.options.chunkIndexParam || 'chunkIndex' ]: chunk.index.toString(),\n      [ this.options.totalChunksParam || 'totalChunks' ]: chunk.total.toString()\n    });\n    if (state.cancelled) {\n      this._finishItem(item, '_onCancelItem', '', 0, {});\n\n      return;\n    }\n\n    xhr.upload.onprogress = (event: any) => {\n      const sent = event.lengthComputable ? event.loaded / event.total * (chunk.end - chunk.start) : 0;\n      this._onProgressItem(item, item._file.size ? Math.round((chunk.start + sent) * 100 / item._file.size) : 0);\n    };\n    xhr.onload = () => this._onChunkDone(item, chunk, xhr, this._isSuccessCode(xhr.status));\n    xhr.onerror = () => this._onChunkDone(item, chunk, xhr, false);\n    xhr.onabort = () => {\n      state.cancelled = true;\n      this._onChunkDone(item, chunk, xhr, false);\n    };\n    this._openRequest(xhr, item);\n    const hasContentRange = [ ...(this.options.headers || []), ...item.headers ].some(header => header.name.toLowerCase() === 'content-range');\n    if (this.options.disableMultipart && !hasContentRange) {\n      const range = chunk.end > chunk.start ? `${ chunk.start }-${ chunk.end - 1 }` : '*';\n      xhr.setRequestHeader('Content-Range', `bytes ${ range }/${ item._file.size }`);\n    }\n    xhr.send(sendable);\n    this._render();\n  }\n\n  private _onChunkDone(item: FileItem, chunk: FileChunk, xhr: XMLHttpRequest, isSuccess: boolean): void {\n    const state = this._chunks.get(item) as ChunkState;\n    const headers = this._parseHeaders(xhr.getAllResponseHeaders());\n    const response = this._transformResponse(xhr.response);\n    // cancel() from a hook aborts the finished request, which resets xhr.status to 0\n    const status = xhr.status;\n    if (state.cancelled) {\n      this._finishItem(item, '_onCancelItem', response, status, headers);\n\n      return;\n    }\n    if (!isSuccess) {\n      runThen(() => this.onErrorChunk(item, chunk, response, status, headers), () => this._finishItem(item, '_onErrorItem', response, status, headers));\n\n      return;\n    }\n    this._runChunkHook(item, () => this.onSuccessChunk(item, chunk, response, status, headers));\n    if (chunk.index + 1 >= chunk.total) {\n      state.chunk = undefined;\n      this._finishItem(item, '_onSuccessItem', response, status, headers);\n\n      return;\n    }\n    const next = this._sliceChunk(item, chunk.index + 1, chunk.end, chunk.end - chunk.start, chunk.total);\n    if (state.cancelled) {\n      state.chunk = next;\n      this._finishItem(item, '_onCancelItem', response, status, headers);\n\n      return;\n    }\n    this._runChunkHook(item, () => this._sendChunk(item, next));\n  }\n\n  // hooks after the first chunk run in XHR callbacks: fail the item so the queue moves on, then rethrow\n  private _runChunkHook(item: FileItem, hook: () => void): void {\n    try {\n      hook();\n    } catch (e) {\n      if (item.isUploading) {\n        try {\n          this._finishItem(item, '_onErrorItem', '', 0, {});\n        } catch (later) {\n          reportLater(later);\n        }\n      }\n      throw e;\n    }\n  }\n}\n","import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';\n\nimport { FileUploader, FileUploaderOptions } from './file-uploader.class';\n\n@Directive({ selector: '[ng2FileSelect]' })\nexport class FileSelectDirective {\n  readonly uploader = input<FileUploader>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  readonly onFileSelected = output<FileList>();\n\n  protected element = inject(ElementRef);\n\n  getOptions(): FileUploaderOptions | undefined {\n    return this.uploader()?.options;\n  }\n\n  getFilters(): string {\n    return '';\n  }\n\n  isEmptyAfterSelection(): boolean {\n    return !!this.element.nativeElement.attributes.multiple;\n  }\n\n  // a selection no longer in the queue would stop the same file from firing change again, so clear it before the picker opens\n  @HostListener('click')\n  onClick(): void {\n    const file = this.element.nativeElement.files?.[ 0 ];\n    if (file && !this.uploader()?.queue.some(item => item._file === file)) {\n      this.element.nativeElement.value = '';\n    }\n  }\n\n  @HostListener('change')\n  onChange(): void {\n    const files = this.element.nativeElement.files;\n    const options = this.getOptions();\n    const filters = this.getFilters();\n    this.uploader()?.addToQueue(files, options, filters);\n\n    this.onFileSelected.emit(files);\n    if (this.isEmptyAfterSelection()) {\n      this.element.nativeElement.value = '';\n    }\n  }\n}\n","import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';\n\nimport { FileUploader, FileUploaderOptions } from './file-uploader.class';\n\n@Directive({\n  selector: '[ng2FileDrop]',\n})\nexport class FileDropDirective {\n  readonly uploader = input<FileUploader>();\n  readonly fileOver = output<boolean>();\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  readonly onFileDrop = output<FileList>();\n\n  protected readonly element = inject(ElementRef);\n\n  getOptions(): FileUploaderOptions | void {\n    return this.uploader()?.options;\n  }\n\n  getFilters(): string {\n    return '';\n  }\n\n  @HostListener('drop', ['$event'])\n  onDrop(event: MouseEvent): void {\n    const transfer = this._getTransfer(event);\n    if (!transfer) {\n      return;\n    }\n\n    const options = this.getOptions();\n    const filters = this.getFilters();\n    this._preventAndStop(event);\n    if (options) {\n      this.uploader()?.addToQueue(transfer.files, options, filters);\n    }\n    this.fileOver.emit(false);\n    this.onFileDrop.emit(transfer.files);\n  }\n\n  @HostListener('dragover', ['$event'])\n  onDragOver(event: MouseEvent): void {\n    const transfer = this._getTransfer(event);\n    if (!this._haveFiles(transfer.types)) {\n      return;\n    }\n\n    transfer.dropEffect = 'copy';\n    this._preventAndStop(event);\n    this.fileOver.emit(true);\n  }\n\n  @HostListener('dragleave', ['$event'])\n  onDragLeave(event: MouseEvent): void {\n    if ((this as any).element) {\n      if (event.currentTarget === (this as any).element[0]) {\n        return;\n      }\n    }\n\n    this._preventAndStop(event);\n    this.fileOver.emit(false);\n  }\n\n  protected _getTransfer(event: any): DataTransfer {\n    return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\n  }\n\n  protected _preventAndStop(event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  protected _haveFiles(types: any): boolean {\n    if (!types) {\n      return false;\n    }\n\n    if (types.indexOf) {\n      return types.indexOf('Files') !== -1;\n    }\n\n    if (types.contains) {\n      return types.contains('Files');\n    }\n    return false;\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FileSelectDirective } from './file-select.directive';\nimport { FileDropDirective } from './file-drop.directive';\n\n@NgModule({\n  imports: [\n    FileSelectDirective,\n    FileDropDirective,\n  ],\n  exports: [\n    FileSelectDirective,\n    FileDropDirective,\n  ],\n})\nexport class FileUploadModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAAA;AACM,SAAU,WAAW,CAAC,KAAc,EAAA;IACxC,UAAU,CAAC,MAAK;AACd,QAAA,MAAM,KAAK;AACb,IAAA,CAAC,CAAC;AACJ;AAEA;AACM,SAAU,OAAO,CAAC,MAAkB,EAAE,IAAgB,EAAA;AAC1D,IAAA,IAAI;AACF,QAAA,MAAM,EAAE;IACV;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,IAAI;AACF,YAAA,IAAI,EAAE;QACR;QAAE,OAAO,KAAK,EAAE;YACd,WAAW,CAAC,KAAK,CAAC;QACpB;AACA,QAAA,MAAM,CAAC;IACT;AACA,IAAA,IAAI,EAAE;AACR;;MCpBa,cAAc,CAAA;AAOzB,IAAA,WAAA,CAAY,WAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;AAC1B,QAAA,MAAM,gBAAgB,GAAI,WAAW,YAAY,gBAAgB,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW;AACnG,QAAA,MAAM,OAAO,GAAG,OAAO,gBAAgB,KAAK,QAAQ,GAAG,UAAU,GAAG,QAAQ;AAC5E,QAAA,MAAM,MAAM,GAAG,CAAA,WAAA,EAAc,OAAO,EAAE;AACrC,QAAA,IAAY,CAAE,MAAM,CAAE,CAAC,gBAAgB,CAAC;IAC3C;AAEA,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE;QACzE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E;AAEA,IAAA,iBAAiB,CAAC,MAAoD,EAAA;AACpE,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IACzB;AACD;;MCvBY,QAAQ,CAAA;AAwBlB,IAAA,WAAA,CAAY,QAAsB,EAAE,IAAU,EAAE,OAA4B,EAAA;QApB5E,IAAA,CAAA,GAAG,GAAG,GAAG;QAET,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,eAAe,GAAG,IAAI;QACtB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,CAAC;AAUX,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM;YAC/C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM;QACnD;QACA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG;IACjC;IAEC,MAAM,GAAA;AACL,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QAChC;QAAE,OAAO,CAAC,EAAE;;AAEV,YAAA,IAAI;AACF,gBAAA,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAClH;YAAE,OAAO,KAAK,EAAE;gBACd,WAAW,CAAC,KAAK,CAAC;YACpB;AACA,YAAA,MAAM,CAAC;QACT;IACF;IAEC,MAAM,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;IAChC;IAEC,MAAM,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC;IAEC,cAAc,GAAA;QACb,OAAO,KAAK,CAAC;IACf;AAEC,IAAA,WAAW,CAAC,IAAS,EAAA;QACpB,OAAO,EAAE,IAAI,EAAE;IACjB;AAEC,IAAA,UAAU,CAAC,QAAgB,EAAA;QAC1B,OAAO,EAAE,QAAQ,EAAE;IACrB;AAEC,IAAA,SAAS,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AACzE,QAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACtC;AAEC,IAAA,OAAO,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AACvE,QAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACtC;AAEC,IAAA,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AACxE,QAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACtC;AAEC,IAAA,UAAU,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AAC1E,QAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACtC;IAEC,eAAe,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEC,IAAA,YAAY,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACxB;AAEC,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAC3B;AAEC,IAAA,UAAU,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AAC1E,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IAC3C;AAEC,IAAA,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AACxE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACtB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACzC;AAEC,IAAA,SAAS,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;AACzE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IAC1C;AAEC,IAAA,WAAW,CAAC,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC3E,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QAE1C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC3C,IAAI,CAAC,MAAM,EAAE;QACf;IACF;IAEC,mBAAmB,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;AACD;;MC7JY,QAAQ,CAAA;;;AAGZ,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAa;QAC1B,oBAAoB;QACpB,oBAAoB;QACpB,yEAAyE;QACzE,yEAAyE;QACzE,kDAAkD;QAClD;KACD,CAAC;;AAEK,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAa;QAC1B,0BAA0B;QAC1B,0BAA0B;QAC1B,0BAA0B;QAC1B,mEAAmE;QACnE,sEAAsE;QACtE,gDAAgD;QAChD,mDAAmD;QACnD,gDAAgD;QAChD;KACD,CAAC;;AAEK,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAa;QAC1B,+BAA+B;QAC/B,+BAA+B;QAC/B,+BAA+B;QAC/B,+BAA+B;QAC/B,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,qDAAqD;QACrD,4DAA4D;QAC5D,4DAA4D;QAC5D;KACD,CAAC;;;AAIK,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAa;QAC1B,iBAAiB;QACjB,mBAAmB;QACnB,WAAW;QACX,uBAAuB;QACvB,iBAAiB;QACjB;KACD,CAAC;;;AAIK,IAAA,SAAA,IAAA,CAAA,aAAa,GAAa;QAC/B,oBAAoB;QACpB,yBAAyB;QACzB,sBAAsB;QACtB,mBAAmB;QACnB,8BAA8B;QAC9B,0BAA0B;QAC1B,8BAA8B;QAC9B,4BAA4B;QAC5B,6BAA6B;QAC7B,kBAAkB;QAClB;KACD,CAAC;IAEF,OAAO,YAAY,CAAC,IAAoB,EAAA;QACtC,IAAI,SAAS,GAAG,aAAa;AAC7B,QAAA,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACzD,SAAS,GAAG,OAAO;QACrB;aAAO,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE;YACvC,SAAS,GAAG,OAAO;QACrB;aAAO,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE;YACvC,SAAS,GAAG,OAAO;QACrB;aAAO,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE;YACvC,SAAS,GAAG,OAAO;QACrB;AAAO,aAAA,IAAI,IAAI,EAAE,IAAI,KAAK,iBAAiB,EAAE;YAC3C,SAAS,GAAG,KAAK;QACnB;AAAO,aAAA,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACrE,SAAS,GAAG,UAAU;QACxB;AAAO,aAAA,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAChE,SAAS,GAAG,KAAK;QACnB;AAAO,aAAA,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAChE,SAAS,GAAG,KAAK;QACnB;AAAO,aAAA,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAChE,SAAS,GAAG,KAAK;QACnB;QACA,IAAI,SAAS,KAAK,aAAa,IAAI,IAAI,EAAE,IAAI,EAAE;YAC7C,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/C;AAEA,QAAA,OAAO,SAAS;IAClB;IAEA,OAAO,iBAAiB,CAAC,aAAqB,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAgC;AACzC,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE;SACN;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,aAAa;QACtB;AACA,QAAA,MAAM,SAAS,GAAG,MAAM,CAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,WAAW,EAAE;AAC3D,QAAA,IAAI,KAAK,CAAE,SAAS,CAAE,KAAK,SAAS,EAAE;AACpC,YAAA,OAAO,aAAa;QACtB;aAAO;AACL,YAAA,OAAO,KAAK,CAAE,SAAS,CAAE;QAC3B;IACF;;;ACjKF,SAAS,MAAM,CAAC,KAAU,EAAA;AACxB,IAAA,QAAQ,IAAI,IAAI,KAAK,YAAY,IAAI;AACvC;MAsCa,YAAY,CAAA;AAwBvB,IAAA,WAAA,CAAY,OAA4B,EAAA;QArBxC,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,KAAK,GAAe,EAAE;QACtB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,UAAU,GAAG,CAAC;AAKd,QAAA,IAAA,CAAA,OAAO,GAAwB;AAC7B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,gBAAgB,EAAE,KAAK;YACvB,kBAAkB,EAAE,CAAC,IAAc,KAAK,IAAI,CAAC,KAAK;AAClD,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,GAAG,EAAE;SACN;AAKC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAU;IAC5C;AAEA,IAAA,UAAU,CAAC,OAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAEnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;QACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,eAAe;QACtE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;;AAEzC,QAAA,MAAM,OAAO,GAAG,CAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAE;AAC5G,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAsB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7G,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAEjF,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/E;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/E;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/E;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;QACxC;IACF;AAEA,IAAA,UAAU,CAAC,KAAwB,EAAE,QAA8B,EAAE,OAAqB,EAAA;QACxF,IAAI,OAAO,GAAG,QAAQ;QACtB,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QAC/B,MAAM,cAAc,GAAe,EAAE;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAU,KAAI;YACtB,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO;YACxB;AAEA,YAAA,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;YACrC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;gBACpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;AAClD,gBAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACL,gBAAA,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE;oBAC3E,MAAM,MAAM,GAAG,cAAc,CAAE,IAAI,CAAC,gBAAgB,CAAE;oBACtD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;gBACrD;YACF;AACF,QAAA,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC1C;QACA,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,eAAe,CAAC,KAAe,EAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,CAAE;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,MAAM,EAAE;QACf;QACA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;IAC1C;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAC,MAAM,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;IACnB;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,CAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,eAAe,GAAG,kBAAkB;QAC7E,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACtB,QAAA,IAAY,CAAE,SAAS,CAAE,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,CAAE;QAChC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;YAC1D,IAAI,CAAC,KAAK,EAAE;YAEZ;QACF;;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAc,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACtF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB;QACF;AACA,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACzD,QAAA,KAAK,CAAE,CAAC,CAAE,CAAC,MAAM,EAAE;IACrB;IAEA,SAAS,GAAA;;AAEP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACxC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9F,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/F;AAEA,IAAA,MAAM,CAAC,KAAU,EAAA;AACf,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACzB,OAAO,KAAK,YAAY,cAAc;IACxC;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACtE;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAChE;IAEA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,CAAC,IAAc,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9D,aAAA,IAAI,CAAC,CAAC,KAAU,EAAE,KAAU,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChE;AAEA,IAAA,gBAAgB,CAAC,SAAc,EAAA;QAC7B,OAAO,EAAE,SAAS,EAAE;IACtB;IAEA,eAAe,CAAC,QAAkB,EAAE,IAAS,EAAA;AAC3C,QAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,QAAkB,EAAA;QAClC,OAAO,EAAE,QAAQ,EAAE;IACrB;AAEA,IAAA,sBAAsB,CAAC,IAAoB,EAAE,MAAW,EAAE,OAAY,EAAA;AACpE,QAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAClC;AAEA,IAAA,kBAAkB,CAAC,QAAkB,EAAA;QACnC,OAAO,EAAE,QAAQ,EAAE;IACrB;IAEA,cAAc,CAAC,QAAkB,EAAE,QAAa,EAAA;AAC9C,QAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC/B;AAEA,IAAA,aAAa,CAAC,QAAa,EAAA;QACzB,OAAO,EAAE,QAAQ,EAAE;IACrB;AAEA,IAAA,aAAa,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC5F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAC5C;AAEA,IAAA,WAAW,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC1F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAC5C;AAEA,IAAA,YAAY,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC3F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAC5C;AAEA,IAAA,cAAc,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC7F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAC5C;IAEA,aAAa,GAAA;QACX,OAAO,KAAK,CAAC;IACf;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AACjC,YAAA,OAAO,IAAI;QACb;;AAEA,QAAA,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,KAAK;QAClD;AAEA,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5E;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E;AAEA,IAAA,YAAY,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC3F,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACnD;AAEA,IAAA,eAAe,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;;QAE9F,OAAO,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QACtD,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B;IAEU,WAAW,CAAC,IAAc,EAAE,MAA2D,EAAE,QAAgB,EAC7F,MAAc,EAAE,OAA8B,EAAA;AAClE,QAAA,OAAO,CAAC,MAAM,IAAI,CAAE,MAAM,CAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7H;IAEQ,WAAW,GAAA;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAE,CAAC,CAAE;AAC1C,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,MAAM,EAAE;YAEjB;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEU,IAAA,cAAc,CAAC,aAAoC,EAAA;QAC3D,OAAO,CAAC,IAAS,KAAS;YACxB,IAAI,IAAI,EAAE;gBACR,OAAO,aAAa,CAAE,IAAI,CAAC,WAAW,EAAE,CAAE,IAAI,SAAS;YACzD;AAEA,YAAA,OAAO,aAAa;AACtB,QAAA,CAAC;IACH;AAEU,IAAA,aAAa,CAAC,IAAc,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,EAAE;AAC5C,QAAA,IAAI,QAAa;AACjB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAE9B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,YAAA,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAClC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QAClD;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBACnC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAClD;QACF;QAEA,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,KAAU,KAAI;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1F,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;AACtC,QAAA,CAAC;AACD,QAAA,GAAG,CAAC,MAAM,GAAG,MAAK;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,gBAAgB,GAAG,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;AAC5H,QAAA,CAAC;AACD,QAAA,GAAG,CAAC,OAAO,GAAG,MAAK;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;AACvE,QAAA,CAAC;AACD,QAAA,GAAG,CAAC,OAAO,GAAG,MAAK;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;AACxE,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;YAC1C,QAAQ,CAAC,IAAI,CACX,CAAC,MAAW,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAClD;QACH;aAAO;AACL,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpB;QACA,IAAI,CAAC,OAAO,EAAE;IAChB;AAEU,IAAA,cAAc,CAAC,IAAc,EAAE,IAAU,EAAE,kBAA+C,EAAE,EAAA;AACpG,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAE,GAAG,CAAE,CAAC,CAAC;QACnG,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACvC,YAAA,UAAU,EAAE;QACd;;QAGA,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE;AAClD,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;gBACpE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAI,GAAG,CAAE;;gBAExD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAC7F,oBAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9D;AACA,gBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC,YAAA,CAAC,CAAC;QACJ;QAEA,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACpD,YAAA,UAAU,EAAE;QACd;AAEA,QAAA,OAAO,QAAQ;IACjB;IAEU,YAAY,CAAC,GAAmB,EAAE,IAAc,EAAA;;;QAGxD,MAAM,IAAI,GAAG,IAAI;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACvC;AACA,QAAA,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;AAC1C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACxB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACzC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;YACjD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvB,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;YACjD;QACF;QACA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAC1C,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;QAC5D;QACA,GAAG,CAAC,kBAAkB,GAAG,YAAA;YACvB,IAAI,GAAG,CAAC,UAAU,IAAI,cAAc,CAAC,IAAI,EAAE;gBACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACtC;AACF,QAAA,CAAC;IACH;IAEU,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAClC,YAAA,OAAO,KAAK;QACd;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM;QACrD,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QAClF,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACrC,QAAA,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/C;AAEU,IAAA,WAAW,CAAC,OAAmC,EAAA;QACvD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;QACpC;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,YAAA,OAAO,OAAO;QAChB;AACA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;AAEvC,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;AAC7B,iBAAA,MAAM,CAAC,CAAC,MAAW,KAAK,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE;AAEA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;IACpC;IAEU,OAAO,GAAA;QACf,OAAO,KAAK,CAAC;IACf;IAEU,iBAAiB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;IAC7F;AAEU,IAAA,YAAY,CAAC,IAAoB,EAAE,OAAyB,EAAE,OAA4B,EAAA;AAClG,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAE1B,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAsB,KAAI;AACvE,YAAA,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;gBAC7C,IAAI,CAAC,gBAAgB,EAAE;YACzB;AAEA,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,cAAc,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,KAAK,MAAM,KAAK,GAAG;IAC1D;AAEU,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AAC3C,QAAA,OAAO,QAAQ;IACjB;AAEU,IAAA,aAAa,CAAC,OAAe,EAAA;QACrC,MAAM,MAAM,GAAQ,EAAE;AACtB,QAAA,IAAI,GAAQ;AACZ,QAAA,IAAI,GAAQ;AACZ,QAAA,IAAI,CAAM;QACV,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,MAAM;QACf;QACA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;AACpC,YAAA,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACrB,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAC9B,IAAI,GAAG,EAAE;gBACP,MAAM,CAAE,GAAG,CAAE,GAAG,MAAM,CAAE,GAAG,CAAE,GAAG,MAAM,CAAE,GAAG,CAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG;YAClE;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;AAEU,IAAA,uBAAuB,CAAC,IAAoB,EAAE,MAAW,EAAE,OAAY,EAAA;QAC/E,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;IACpD;AAEU,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACzC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;AAEU,IAAA,iBAAiB,CAAC,KAAU,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC9B;AAEU,IAAA,mBAAmB,CAAC,IAAc,EAAA;QAC1C,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAC/B;IAEU,gBAAgB,CAAC,IAAc,EAAE,IAAS,EAAA;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC;IAEU,eAAe,CAAC,IAAc,EAAE,QAAa,EAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEU,IAAA,cAAc,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QACvG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACrD;AAEU,IAAA,aAAa,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QACtG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACpD;AACD;;ACjhBK,MAAO,mBAAoB,SAAQ,YAAY,CAAA;AAKnD,IAAA,WAAA,CAAY,OAAmC,EAAA;QAC7C,KAAK,CAAC,OAAO,CAAC;AAHR,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAwB;IAIrD;AAEA,IAAA,UAAU,CAAC,OAAmC,EAAA;AAC5C,QAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM;QAC7C;IACF;AAEA,IAAA,QAAQ,CAAC,IAAc,EAAA;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK;IACtC;AAEA,IAAA,UAAU,CAAC,IAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrD;QACF;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE;IACf;IAEA,SAAS,GAAA;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7E,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB;QACF;AACA,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,CAAE,CAAC,CAAE,CAAC,MAAM,EAAE;IACrB;AAEA,IAAA,YAAY,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC3F,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACnD;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAE;AACrD,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAElB;QACF;AACA,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IACzB;IAEA,mBAAmB,CAAC,IAAc,EAAE,KAAgB,EAAA;AAClD,QAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IACxB;IAEA,cAAc,CAAC,IAAc,EAAE,KAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC/G,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACnD;IAEA,YAAY,CAAC,IAAc,EAAE,KAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QAC7G,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACnD;AAEU,IAAA,aAAa,CAAC,IAAc,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;AACzD,QAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AAEzB,YAAA,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;QAClC;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAE9B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,YAAA,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC;QAC9D;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjF;AAEU,IAAA,aAAa,CAAC,IAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,OAA8B,EAAA;QACtG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;QAC1B;QACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IACpD;;IAGU,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACxD,YAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC;QACvC;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,IAAc,KAAI;AAC9D,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,GAAG,GAAG,KAAK;YACpB;AACA,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7C,gBAAA,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ;YAC5B;AAEA,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1C,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9C;AAEQ,IAAA,eAAe,CAAC,IAAc,EAAA;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,KAAK,EAAE,KAAK,EAAE;AAChB,YAAA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;QAC5B;IACF;;AAGQ,IAAA,aAAa,CAAC,IAAc,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK;QAC3C,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACjE;IACF;IAEQ,WAAW,CAAC,IAAc,EAAE,KAAa,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa,EAAA;AAC7F,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAErD,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;IAC1F;IAEQ,UAAU,CAAC,IAAc,EAAE,KAAgB,EAAA;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAe;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,EAAE;AAC5C,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;AAClG,YAAA,CAAE,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,YAAY,GAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;AACxE,YAAA,CAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,aAAa,GAAI,KAAK,CAAC,KAAK,CAAC,QAAQ;AACzE,SAAA,CAAC;AACF,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAElD;QACF;QAEA,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,KAAU,KAAI;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAChG,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5G,QAAA,CAAC;QACD,GAAG,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvF,QAAA,GAAG,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;AAC9D,QAAA,GAAG,CAAC,OAAO,GAAG,MAAK;AACjB,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;AAC5C,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5B,QAAA,MAAM,eAAe,GAAG,CAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC;QAC1I,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAA,EAAI,KAAK,CAAC,KAAM,CAAA,CAAA,EAAK,KAAK,CAAC,GAAG,GAAG,CAAE,CAAA,CAAE,GAAG,GAAG;AACnF,YAAA,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAA,MAAA,EAAU,KAAM,CAAA,CAAA,EAAK,IAAI,CAAC,KAAK,CAAC,IAAK,CAAA,CAAE,CAAC;QAChF;AACA,QAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEQ,IAAA,YAAY,CAAC,IAAc,EAAE,KAAgB,EAAE,GAAmB,EAAE,SAAkB,EAAA;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAe;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAEtD,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;YAElE;QACF;QACA,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAEjJ;QACF;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;AAClC,YAAA,KAAK,CAAC,KAAK,GAAG,SAAS;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;YAEnE;QACF;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACrG,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;YAElE;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D;;IAGQ,aAAa,CAAC,IAAc,EAAE,IAAgB,EAAA;AACpD,QAAA,IAAI;AACF,YAAA,IAAI,EAAE;QACR;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI;AACF,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD;gBAAE,OAAO,KAAK,EAAE;oBACd,WAAW,CAAC,KAAK,CAAC;gBACpB;YACF;AACA,YAAA,MAAM,CAAC;QACT;IACF;AACD;;MClPY,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAgB;;QAEhC,IAAA,CAAA,cAAc,GAAG,MAAM,EAAY;AAElC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAmCvC,IAAA;IAjCC,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO;IACjC;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,EAAE;IACX;IAEA,qBAAqB,GAAA;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ;IACzD;;IAIA,OAAO,GAAA;AACL,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAI,CAAC,CAAE;QACpD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE;YACrE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;QACvC;IACF;IAGA,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAEpD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;QACvC;IACF;8GAvCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE;;sBAqBvC,YAAY;uBAAC,OAAO;;sBAQpB,YAAY;uBAAC,QAAQ;;;MC1BX,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAgB;QAChC,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAW;;QAE5B,IAAA,CAAA,UAAU,GAAG,MAAM,EAAY;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AA0EhD,IAAA;IAxEC,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO;IACjC;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,EAAE;IACX;AAGA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;QAC/D;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtC;AAGA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACpC;QACF;AAEA,QAAA,QAAQ,CAAC,UAAU,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;AAGA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAK,IAAY,CAAC,OAAO,EAAE;YACzB,IAAI,KAAK,CAAC,aAAa,KAAM,IAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACpD;YACF;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEU,IAAA,YAAY,CAAC,KAAU,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC;IACpF;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;QACzC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEU,IAAA,UAAU,CAAC,KAAU,EAAA;QAC7B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChC;AACA,QAAA,OAAO,KAAK;IACd;8GA/EW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA;;sBAiBE,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;sBAiB/B,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAYnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;MCrC1B,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YARzB,mBAAmB;AACnB,YAAA,iBAAiB,aAGjB,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA;+GAGR,gBAAgB,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,iBAAiB;AAClB,qBAAA;AACF,iBAAA;;;ACdD;;AAEG;;"}