ng-zenduit 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.ts","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.html","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.ts","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.html","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.ts","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.component.ts","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport { show as showSnackbar } from \"node-snackbar\"\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#5cbb3a\",// $color-success-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#f1b10b\",// $color-alert-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n showSnackbar({\n pos: \"top-center\",\n text: this.getErrorMessage(err),\n textColor: \"white\",\n backgroundColor: \"#dc3e33\",// $color-error-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss']\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n <i *ngIf=\"checked && !indeterminate\"\n class=\"material-icons app-checkbox-icon\">done</i>\n <i *ngIf=\"indeterminate\"\n class=\"material-icons app-checkbox-icon\">remove</i>\n </button>\n <div class=\"app-checkbox-label\"\n *ngIf=\"label\"\n [ngStyle]=\"{'color': labelColor }\">\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{ label }}\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss']\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n <ng-container *ngIf=\"!customTarget\">\n <div *ngIf=\"icon == 'text'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n\n <div *ngIf=\"icon == 'paint'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n </ng-container>\n\n <div *ngIf=\"opened\"\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n\n <div class=\"colors-container\">\n <div *ngFor=\"let row of colorsRows\"\n class=\"color-row\">\n <div *ngFor=\"let rowColor of row.colors\"\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n <div *ngIf=\"rowColor == color\"\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"showNone\"\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n </div>\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public activateSearchBox() {\n this.searchInput.nativeElement.focus();\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\">\n <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder | translate}}\"\n [disabled]=\"disabled\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (click)=\"clear()\">close</i>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n <div *ngIf=\"showPanel\"\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n\n\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n <div *ngFor=\"let config of filteredColumnsConfiguration\"\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n </div>\n\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss']\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n\n constructor(private _host: ElementRef) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.src) {\n // apply styles to host\n const host = this._host.nativeElement as HTMLElement;\n host.style[\"mask-image\"] = `url(${this.src})`;\n host.style[\"-webkit-mask-image\"] = `url(${this.src})`;\n }\n }\n}\n","","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss']\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\">&nbsp;{{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\">&nbsp;{{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n <div #dateMenu\n *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span *ngIf=\"showSeconds\">:</span>\n <div class=\"input-wrapper\" *ngIf=\"showSeconds\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss']\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (!this.isOpen) {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el.name === 'number' ? el.name.toString() : el.name;\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el.id);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el.id));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item.name.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => d.children?.length > 0);\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item.id, item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item.id;\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n if (!item.children?.length) return 0;\n let count = 0;\n for (const childId of item.children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (item.children?.length) {\n this._childCountCache.set(item.id, countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem.id) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!dsItem.children?.length) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n if (!dsItem.children?.length) return result;\n for (const childId of dsItem.children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !parent.children?.length) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n if (!item.children?.length) return;\n this.dataSource.forEach(data => {\n if (item.id == data.id) {\n return;\n }\n if (item.children.includes(<string>data.id)) {\n data.checked = item.checked;\n if (data.children?.length) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n if (!parent?.children?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parent.children[parent.children.length - 1];\n isLastFlags.push(current!.id === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem.name?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss']\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<div class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <label class=\"app-radio-button-label\"\n for=\"{{value}}\">\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{label | translate}}\n </label>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss']\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { ZenduSearchBoxComponent } from '../search-box/zendu-search-box.component';\nimport { Util } from '../util';\nimport { DATEPICKER_POSITION } from '../datepicker/datepicker';\nimport { DateRange } from './dateRange';\nimport { Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n})\nexport class ZenduFilterComponent implements OnChanges {\n @Input() config: FiltersConfig = { items: [] };\n\n @Input() filter: object;\n\n @Input() position = 'right';\n\n @Input() resetBehavior: 'set_all' | 'clear' = 'clear';\n\n @Output() filterChange = new EventEmitter<object>();\n\n @Input() isVisible = false;\n\n @Output() isVisibleChange = new EventEmitter<boolean>();\n\n @Input() customTrigger = false;\n\n @Input() imageUrl: string;\n\n @Input() label: string;\n\n @Input() showOptions: boolean;\n\n @Input() customOptions: string;\n\n @Input() wrapperBodyClass: string;\n\n @Input() customPosition: 'fixed' | 'absolute' = 'fixed';\n\n public searchText = '';\n\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n public menuLeft = '0px';\n\n public menuRight = '0px';\n\n public menuTop = '0px';\n\n public menuBottom = '0px';\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\n\n public datepickerPosition = DATEPICKER_POSITION;\n\n public selectedDateRangeOptions: { [key: string]: string } = {};\n\n @ViewChild('searchBox', { static: false }) searchBox: ZenduSearchBoxComponent;\n\n @ViewChild('mainComponent', { static: false })\n _componentElement: ElementRef<HTMLElement>;\n constructor(public renderer: Renderer2) {}\n\n public ngOnChanges(changes: any): void {\n if (changes.config && changes.config.currentValue) {\n // init values\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n item.dataSource = item.dataSource\n ? this.extractUniqueDataSource(item.dataSource)\n : [];\n } else if (item.type === 'dateRange' && !item.dateRange) {\n item.dateRange = { start: null, end: null };\n\n // init date range options\n if (item.showDateRangeOptions && !item.dateRangeOptions?.length) {\n item.dateRangeOptions = this.getDefaultDateRangeOptions();\n }\n } else if (item.type === 'numberRange' && !item.numberRange) {\n item.numberRange = {};\n }\n\n if (typeof item.showTime !== 'boolean') {\n item.showTime = true;\n }\n }\n\n this.filterItems();\n\n this.resetedFilter = this.getFilterObject();\n this.filter = this.getFilterObject();\n this.lastAppliedFilter = Util.clone(this.filter);\n }\n\n if (changes.filter && changes.filter.currentValue) {\n this.lastAppliedFilter = Util.clone(changes.filter.currentValue);\n\n this.updateAppliedState();\n }\n\n if (changes.isVisible && changes.isVisible.currentValue) {\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isVisible) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n // element not in the DOM\n return;\n }\n if (this._componentElement.nativeElement.contains(target)) {\n return;\n }\n\n // hide the menu for outside click\n this.hide();\n\n // restore values\n this.restorePreviousApplied();\n }\n\n @HostListener('window:resize', ['$event'])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', ['$event'])\n windowScroll() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent) {\n if (!this.isVisible) {\n return;\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n return;\n }\n\n if (\n this._componentElement.nativeElement.contains(target) &&\n !target.classList.contains('button-stroked')\n ) {\n return;\n }\n this.hide();\n this.restorePreviousApplied();\n }\n }\n\n public focusSearchBox() {\n this.searchBox.doFocus();\n }\n\n public isMenuIsVisible(item: FiltersConfigItem) {\n if (item.isLazyLoading) {\n if (item.isLoadingNow || item.canLoadMore !== false) {\n return true;\n }\n if (this.searchText) {\n return item.filteredDataSource?.length > 0;\n }\n return true;\n }\n\n if (item.filteredDataSource && this.searchText) {\n if (!item.filteredDataSource.length) {\n return false;\n }\n }\n\n return true;\n }\n\n private extractUniqueDataSource(\n array: {\n id: string | number;\n name: string | number;\n }[]\n ): MultiSelectItem[] {\n const items = array.filter((el) => {\n return Boolean(\n typeof el.id === 'number'\n ? typeof el.id !== undefined\n : el.id && typeof el.name === 'number'\n ? typeof el.name !== undefined\n : el.name\n );\n });\n const uniqItems = uniqBy(items, (el) => el.id);\n // add index to each uniqItems\n uniqItems.forEach(\n (el: MultiSelectItem, index: number) => (el.index = index)\n );\n return uniqItems;\n }\n\n public onSelectAll(item: FiltersConfigItem) {\n item.dataSource.forEach((d) => (d.checked = item.isSelectedAll));\n }\n\n public isItemActive(item: FiltersConfigItem): boolean {\n if (item.type === 'multiselect') {\n const checkedItems = item.dataSource.filter((el) => el.checked);\n item.isSelectedAll = checkedItems.length === item.dataSource.length;\n return checkedItems.length > 0;\n } else if (item.type === 'radio') {\n return item.radioOptions.some((ro) => ro.selected);\n } else if (item.type === 'numberRange') {\n return Boolean(item.numberRange.from || item.numberRange.to);\n } else if (item.type === 'dateRange') {\n return Boolean(item.dateRange.start || item.dateRange.end);\n } else if (item.type === 'date') {\n return Boolean(item.date);\n } else {\n return false;\n }\n }\n\n public searchTextChanged() {\n // run the lazy loading\n // the filterItems called from onChanges, so call lazy loading only on search change\n this.resetLazyLoadingSources(false);\n\n this.filterItems();\n }\n\n private async resetLazyLoadingSources(showSelectedOnTop: boolean) {\n const requests = [];\n for (const configItem of this.config.items) {\n if (configItem.isLazyLoading) {\n configItem.canLoadMore = true;\n configItem.filteredDataSource = [];\n requests.push(this.loadMore(configItem, showSelectedOnTop));\n }\n }\n\n await Promise.all(requests);\n\n // filter non-lazy loading items\n this.filterItems();\n }\n\n private filterItems() {\n let hasData = false;\n\n for (const configItem of this.config.items) {\n if (configItem.type === 'multiselect') {\n if (configItem.isLazyLoading) {\n if (configItem.isLoadingNow) {\n // mark as data available in loading state\n hasData = true;\n } else if (configItem.filteredDataSource?.length) {\n hasData = true;\n }\n } else {\n const isTree = this.hasTreeData(configItem);\n if (isTree && this.searchText) {\n // Build a local lookup map for ancestor traversal\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n\n // For tree data, include matching items and their ancestors\n const matchingIds = new Set<string | number>();\n for (const el of configItem.dataSource) {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n if (preparedName.toLowerCase().includes(this.searchText.toLowerCase())) {\n matchingIds.add(el.id);\n // Add all ancestors\n let current = el;\n while (current.parentId) {\n matchingIds.add(current.parentId);\n current = localMap.get(current.parentId);\n if (!current) break;\n }\n }\n }\n configItem.filteredDataSource = configItem.dataSource.filter(\n (el) => matchingIds.has(el.id)\n );\n // Auto-expand parents when searching\n for (const el of configItem.filteredDataSource) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n } else {\n configItem.filteredDataSource = configItem.dataSource.filter((el) => {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n return preparedName\n .toLowerCase()\n .includes(this.searchText.toLowerCase());\n });\n if (isTree) {\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n }\n }\n\n if (configItem.filteredDataSource.length) {\n hasData = true;\n }\n }\n } else if (configItem.type === 'dateRange') {\n if (\n this.searchText &&\n !Boolean(configItem.dateRange.start || configItem.dateRange.end)\n ) {\n configItem.filteredDataSource = [];\n }\n } else if (configItem.type === 'numberRange') {\n if (\n this.searchText &&\n !Boolean(configItem.numberRange.from || configItem.numberRange.to)\n ) {\n configItem.filteredDataSource = [];\n }\n }\n }\n\n this.showNoFilterResult = this.searchText && !hasData;\n }\n\n public async loadMore(item: FiltersConfigItem, showSelectedOnTop: boolean) {\n try {\n item.isLoadingNow = true;\n if (!item.lazyLoader) {\n throw `loader is not available`;\n }\n if (!item.filteredDataSource) {\n item.filteredDataSource = [];\n }\n\n // load first 10 records for the the first time\n const limit = item.filteredDataSource.length == 0 ? 10 : 100;\n const newItems = await item.lazyLoader(\n { text: this.searchText || '' },\n item.filteredDataSource.length,\n limit\n );\n\n item.canLoadMore = newItems.length == limit;\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n item.filteredDataSource = item.filteredDataSource.concat(newItems);\n\n // the dataSource contains the selected items\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (showSelectedOnTop) {\n // remove the checked items first\n item.filteredDataSource = item.filteredDataSource.filter(\n (i) => !checkedIds.includes(i.id)\n );\n // add all checked items to the top\n const checkedItems = item.dataSource.filter((i) => i.checked);\n item.filteredDataSource = checkedItems.concat(item.filteredDataSource);\n } else {\n // mark as checked based on the dataSource\n for (let dsItem of item.filteredDataSource) {\n dsItem.checked = checkedIds.includes(dsItem.id);\n }\n }\n } catch (err) {\n console.error(err);\n } finally {\n item.isLoadingNow = false;\n }\n }\n\n public toggleItem(item: FiltersConfigItem) {\n item.expanded = !item.expanded;\n\n if (item.isLazyLoading) {\n if (item.expanded) {\n if (item.canLoadMore !== false && !item.filteredDataSource?.length) {\n this.loadMore(item, false);\n }\n }\n }\n }\n\n private resetFilters() {\n let selectAll = this.resetBehavior === 'set_all';\n this.selectedDateRangeOptions = {};\n\n for (const item of this.config.items) {\n if (item.dataSource) {\n item.isSelectedAll = selectAll;\n\n for (const dsItem of item.dataSource) {\n dsItem.checked = selectAll;\n }\n }\n\n if (item.dateRange) {\n item.dateRange = { start: null, end: null };\n }\n\n if (item.numberRange) {\n item.numberRange = { from: null, to: null };\n }\n\n if (item.date) {\n item.date = new Date();\n }\n if (item.type === 'toggle') {\n item.enabled = false;\n }\n if (item.type === 'radio') {\n item.radioOptions.forEach((e) => {\n if (e.id === item.selectedRadio) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n });\n }\n }\n }\n\n private restorePreviousApplied(): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = this.lastAppliedFilter[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n }\n break;\n case 'dateRange':\n item.dateRange = this.lastAppliedFilter[item.key] || {\n start: null,\n end: null,\n };\n break;\n case 'numberRange':\n item.numberRange = this.lastAppliedFilter[item.key] || {};\n break;\n case 'toggle':\n item.dateRange = this.lastAppliedFilter[item.key];\n break;\n case 'date':\n item.date = this.lastAppliedFilter[item.key];\n break;\n case 'radio':\n item.selectedRadio = this.lastAppliedFilter[item.key];\n break;\n }\n }\n }\n\n public reset() {\n this.resetFilters();\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n public apply() {\n this.filter = this.getFilterObject();\n let hasError = false;\n for (const iterator of this.config.items) {\n const itemFlag = this.onCheckValidity(iterator);\n if (!itemFlag) {\n hasError = true;\n }\n }\n if (hasError) {\n setTimeout(() => (this.errorMessage = []), 5000);\n return;\n } else {\n this.errorMessage = [];\n }\n this.lastAppliedFilter = Util.clone(this.filter);\n\n this.filterChange.emit(this.filter);\n\n // update the apply state\n this.updateAppliedState();\n\n this.hide();\n }\n\n private updateAppliedState() {\n this.isApplied = false;\n // showing checked items on top of the list\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n // resort first based on index\n item.dataSource.sort((a, b) => a.index - b.index);\n\n // then sort based on checked items again\n item.dataSource.sort(\n (a: DataSource, b: DataSource) =>\n Number(b.checked || 0) - Number(a.checked || 0)\n );\n }\n }\n\n if (Object.keys(this.filter).length > 0) {\n if (this.resetedFilter) {\n // Filter was reset, so compare the reset filter object with the current filter\n // When user click on Reset and Then Apply, filter must unhighlighted\n if (\n JSON.stringify(this.resetedFilter) !== JSON.stringify(this.filter)\n ) {\n this.isApplied = true;\n }\n } else {\n this.isApplied = true;\n }\n }\n\n let wrapperClass = document.querySelector('.action-menu-body');\n if (this.wrapperBodyClass) {\n wrapperClass = document.querySelector(`.${this.wrapperBodyClass}`);\n }\n if (wrapperClass) {\n wrapperClass.scrollTo({ top: 0, behavior: 'auto' });\n }\n }\n\n private getFilterObject() {\n const filter = {};\n\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource && item.dataSource.length) {\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange':\n if (item.dateRange && item.dateRange.start && item.dateRange.end) {\n filter[item.key] = item.dateRange;\n }\n break;\n case 'numberRange':\n if (\n item.numberRange &&\n typeof item?.numberRange?.from === 'number' &&\n typeof item?.numberRange?.to === 'number'\n ) {\n filter[item.key] = item.numberRange;\n }\n break;\n case 'toggle':\n filter[item.key] = item.enabled || false;\n break;\n case 'date':\n if (item.date) {\n filter[item.key] = item.date;\n }\n break;\n case 'radio':\n filter[item.key] = item.radioOptions.find((ro) => ro.selected)?.id;\n break;\n }\n }\n\n return filter;\n }\n\n public hide() {\n this.isVisible = false;\n this.searchText = '';\n this.filterItems();\n\n this.isVisibleChange.emit(false);\n }\n\n public radioChanged(value: string, item: FiltersConfigItem): void {\n item.radioOptions.forEach((opt) => (opt.selected = opt.id === value));\n }\n\n public checkChanged(item: DataSource, configItem: FiltersConfigItem): void {\n if (configItem.isLazyLoading) {\n // store the check items in the data source\n const existItem = configItem.dataSource.find((i) => i.id == item.id);\n if (existItem) {\n existItem.checked = item.checked;\n } else {\n configItem.dataSource.push(item);\n }\n // keep only checked\n configItem.dataSource = configItem.dataSource.filter((d) => d.checked);\n }\n // For tree items, zen-groups handles cascade internally\n }\n\n public toggle() {\n this.isVisible = !this.isVisible;\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n\n if (this.isVisible) {\n this.resetLazyLoadingSources(true);\n }\n }\n\n public onCheckValidity(item: FiltersConfigItem) {\n if (item.type === 'numberRange') {\n if (\n typeof item.numberRange.from === 'number' &&\n typeof item.numberRange.to === 'number' &&\n item.numberRange.from > item.numberRange.to\n ) {\n this.errorMessage.push(\n `Invalid Number range: The Min number cannot be greater than the Max number.`\n );\n return false;\n }\n }\n if (item.type === 'dateRange') {\n if (\n item.dateRange.start &&\n item.dateRange.end &&\n new Date(item.dateRange.start) > new Date(item.dateRange.end)\n ) {\n this.errorMessage.push(\n `Invalid Date range: The Start date cannot be after the End date.`\n );\n return false;\n }\n }\n return true;\n }\n\n public updatePlacement(pos: 'fixed' | 'absolute' = 'fixed') {\n const host = this._componentElement.nativeElement as HTMLElement;\n const container = host.querySelector('.menu-content') as HTMLElement;\n if (!container) return;\n\n const rect =\n pos === 'fixed'\n ? host.getBoundingClientRect()\n : container.getBoundingClientRect();\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const bottom = window.innerHeight - top;\n\n if (pos === 'absolute') {\n this.renderer.addClass(container, 'absolute');\n this.renderer.removeStyle(container, 'inset');\n } else {\n this.renderer.removeClass(container, 'absolute');\n }\n\n if (pos === 'fixed') {\n if (this.position.includes('auto')) {\n const horizontalPosition = this.getHorizontalPosition();\n this.menuRight =\n horizontalPosition === 'left'\n ? `${window.innerWidth - right}px`\n : 'unset';\n this.menuLeft = horizontalPosition === 'right' ? `${left}px` : 'unset';\n } else if (this.position.includes('left')) {\n this.menuRight = `${window.innerWidth - right}px`;\n this.menuLeft = 'unset';\n } else {\n this.menuLeft = `${left}px`;\n this.menuRight = 'unset';\n }\n\n if (this.position.includes('auto')) {\n const verticalPosition = this.getVerticalPosition();\n this.menuTop =\n verticalPosition === 'bottom' ? `${top + 42}px` : 'unset';\n this.menuBottom = verticalPosition === 'top' ? `${bottom}px` : 'unset';\n } else if (this.position.includes('top')) {\n this.menuTop = 'unset';\n this.menuBottom = `${bottom + 10}px`;\n } else {\n this.menuTop = `${top + 55}px`;\n this.menuBottom = 'unset';\n }\n } else {\n let verticalClass = '';\n let horizontalClass = '';\n\n if (this.position.includes('auto')) {\n horizontalClass = this.getHorizontalPosition();\n verticalClass = this.getVerticalPosition();\n } else {\n horizontalClass = this.position.includes('left') ? 'left' : 'right';\n verticalClass = this.position.includes('top') ? 'top' : 'bottom';\n }\n [\n 'dropdown-left',\n 'dropdown-right',\n 'dropdown-top',\n 'dropdown-bottom',\n ].forEach((c) => this.renderer.removeClass(container, c));\n this.renderer.addClass(container, `dropdown-${horizontalClass}`);\n this.renderer.addClass(container, `dropdown-${verticalClass}`);\n }\n }\n\n private getVerticalPosition(): 'bottom' | 'top' {\n const top =\n this._componentElement.nativeElement.getBoundingClientRect().top;\n return top > window.innerHeight / 2 ? 'top' : 'bottom';\n }\n\n private getHorizontalPosition(): 'right' | 'left' {\n const left =\n this._componentElement.nativeElement.getBoundingClientRect().left;\n return left > window.innerWidth / 2 ? 'left' : 'right';\n }\n\n public getDefaultDateRangeOptions(): {\n name: string;\n dateRange: DateRange;\n }[] {\n return [\n {\n name: 'Today',\n dateRange: {\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate(),\n },\n },\n {\n name: 'Yesterday',\n dateRange: {\n start: moment().subtract(1, 'days').startOf('day').toDate(),\n end: moment().subtract(1, 'days').endOf('day').toDate(),\n },\n },\n {\n name: 'This Week',\n dateRange: {\n start: moment().startOf('week').toDate(),\n end: moment().endOf('week').toDate(),\n },\n },\n {\n name: 'Last Week',\n dateRange: {\n start: moment().subtract(7, 'days').startOf('week').toDate(),\n end: moment().subtract(7, 'days').endOf('week').toDate(),\n },\n },\n {\n name: 'This Month',\n dateRange: {\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate(),\n },\n },\n {\n name: 'Last Month',\n dateRange: {\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate(),\n },\n },\n ];\n }\n\n private sortTreeOrder(items: DataSource[], treeMap: Map<string | number, DataSource>): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public hasTreeData(configItem: FiltersConfigItem): boolean {\n return configItem.dataSource?.some(d => d.children?.length > 0) || false;\n }\n\n public handleDateRangeOptionClick(item, option) {\n item.dateRange = option.dateRange;\n this.selectedDateRangeOptions[item.key] = option.name;\n }\n\n public handleCustomDateRangeClick(item) {\n this.selectedDateRangeOptions[item.key] = 'Custom';\n }\n\n public handleEndDateChange(item) {\n if (!item.showTime) {\n item.dateRange.end = moment(item.dateRange.end).endOf('day').toDate();\n }\n }\n\n public get hasMultiselectItems(): boolean {\n return this.config.items.some(\n (item) => item.type === 'multiselect' && item.dataSource?.length > 0\n );\n }\n\n public get selectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n if (item.type === 'multiselect' && item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n <ng-container *ngIf=\"!customTrigger\">\n <button (click)=\"toggle()\"\n class=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n <zen-icon [src]=\"imageUrl\"\n *ngIf=\"imageUrl\"></zen-icon>\n <i class=\"filter-icon material-icons\"\n *ngIf=\"!imageUrl\">filter_list</i>\n <span *ngIf=\"label\">{{ label | translate }}</span>\n </button>\n </ng-container>\n\n <ng-content *ngIf=\"customTrigger\"></ng-content>\n\n <div [hidden]=\"!isVisible\"\n class=\"action-menu menu-content\"\n [class.customTrigger]=\"customTrigger\"\n [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"action-menu-header\">\n <zen-search-box [(text)]=\"searchText\"\n #searchBox\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"action-menu-body items-wrapper\"\n ngClass=\"{{wrapperBodyClass}}\">\n <ng-container *ngIf=\"errorMessage.length\">\n <li *ngFor=\"let item of errorMessage\"\n class=\"error-msg\">{{item | translate }}</li>\n </ng-container>\n\n <div *ngFor=\"let item of config.items\">\n <div class=\"menu-item\"\n *ngIf=\"isMenuIsVisible(item)\">\n\n <!-- Divider between two filter -->\n <div *ngIf=\"item.type === 'divider'\">\n <p class=\"filter-divider\"></p>\n </div>\n\n <!-- Boolean toggle -->\n <div *ngIf=\"item.type === 'toggle'\"\n class=\"action-item toggle-row\">\n <div>{{item.title | translate}}</div>\n <zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n </div>\n\n <button class=\"action-item expander-item\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n </button>\n\n <div class=\"action-item section-title\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && item.disableCollapse\">\n {{item.title | translate}}\n </div>\n\n <ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n <div [ngSwitch]=\"item.type\">\n <!-- Multiselect -->\n <div *ngSwitchCase=\"'multiselect'\">\n <!-- Lazy loading mode -->\n <ng-container *ngIf=\"item.isLazyLoading\">\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n <div *ngIf=\"item.canLoadMore && !item.isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(item, false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"item.isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!item.isLazyLoading && !hasTreeData(item)\">\n <div class=\"action-item-checkbox ds-item select-all\" *ngIf=\"!item.hideSelectAll\">\n <zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n </div>\n\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n </ng-container>\n\n <!-- Tree view mode -->\n <zen-groups *ngIf=\"!item.isLazyLoading && hasTreeData(item)\"\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n </div>\n\n <!-- Date range picker -->\n <div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </ng-container>\n </div>\n\n <!-- Date picker -->\n <div *ngSwitchCase=\"'date'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'Date' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.date\"\n [showTime]=\"item.showTime\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </div>\n\n <!-- Number range -->\n <div *ngSwitchCase=\"'numberRange'\"\n class=\"filter-row number-range-row\">\n <div>\n <div class=\"lbl\">{{'Min' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.from\"\n type=\"number\" />\n </div>\n <div>\n <div class=\"lbl\">{{'Max' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.to\"\n type=\"number\" />\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let option of item.radioOptions\"\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n <span *ngIf=\"showNoFilterResult\"\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n <span class=\"selected-count\" *ngIf=\"hasMultiselectItems\">{{ selectedCount }} {{'Selected' | translate}}</span>\n <div class=\"filter-footer-actions\">\n <button (click)=\"reset()\"\n class=\"filter-btn-clear\"\n [class.has-selection]=\"selectedCount > 0 && hasMultiselectItems\">\n {{'Clear Filter' | translate}}\n </button>\n <button (click)=\"apply()\"\n class=\"filter-btn-apply\">\n {{'Apply' | translate}}\n </button>\n </div>\n </div>\n\n </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]'\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]'\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]'\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<HTMLElement>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ContentChild } from '@angular/core';\n\nimport { ZenduSelectOptionDirective } from './templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './templates/zendu-select-value.directive';\nimport { ZenduSelectButtonDirective } from './templates/zendu-select-button.directive';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss']\n})\nexport class ZenduSelectComponent implements OnChanges {\n /**\n * 2-Way component property for selected items.\n * Don't initialize property on constructor to prevent change source parameter\n */\n @Input() selectModel: any | any[];\n\n /**\n * callback to emit changes for parent component\n */\n @Output() selectModelChange = new EventEmitter<any>();\n\n /**\n * List of options for select\n */\n @Input() options: any[] = [];\n\n /**\n * Property to set custom placeholder value\n */\n @Input() placeholder = 'Select Items';\n\n /**\n * This is a key value to get display name from option object\n */\n @Input() displayProp: string;\n\n /**\n * This is a key value to get id from option object\n */\n @Input() idProp: string;\n\n /**\n * Component property to enable search\n */\n @Input() hasSearch: boolean;\n\n /**\n * Component property to return whole option object\n * By default only id value is returned\n */\n @Input() returnOption: boolean;\n\n /**\n * Component property to enable multiselect\n */\n @Input() isMultiselect: boolean;\n\n /**\n * Component property to disable component\n */\n @Input() disabled = false;\n\n /**\n * Show the custom icon for toggle\n */\n @Input() customIcon = \"\";\n\n /**\n * Show the custom icon for start\n */\n @Input() customIconStart = \"\";\n\n /**\n * Color for custom icon\n */\n @Input() customIconColor = \"\";\n\n /**\n * Truncate text with \"...\" at the end\n */\n @Input() isTruncate: boolean = false;\n\n /**\n * show Add New Option at first place\n */\n @Input() enableAddNewOption: boolean = false;\n\t\n /**\n * Show Add New option text by default if newOptionText empty\n */\n @Input() showDefaultAddOption: boolean = true;\n\n /**\n * display custom text for Add New Option\n */\n @Input() newOptionText: string;\n\n /**\n * Emit event when Add New Option is clicked\n */\n @Output() addNewOption: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * show remove Option at first place\n */\n @Input() enableRemoveOption: boolean = false;\n\n /**\n * display custom text for remove Option\n */\n @Input() removeOptionText: string;\n\n /**\n * Enable lazy loading for options\n */\n @Input() isLazyLoading = false;\n\n /**\n * Lazy loader function to fetch options\n */\n @Input() lazyLoader?: (search: { text?: string, ids?: string[] }, offset: number, limit: number) => Promise<DataSource[]>;\n\n /**\n * Preferred direction for dropdown menu placement\n */\n @Input() preferedOpenDirection?: \"bottom\" | \"top\";\n\n /**\n * Emit event when remove Option is clicked\n */\n @Output() removeOption: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Emit event when select is closed, sending the selected data\n */\n @Output() closed: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Filtered items visible on dropdown\n */\n public filteredOptions: any[];\n\n /**\n * Is dropdown expanded\n */\n public isExpanded = false;\n\n public searchText = '';\n\n public labelText = '';\n\n public isTopMenuDirection = false;\n\n public option: any\n\n public canLoadMore = false;\n\n public isLoadingNow = false;\n\n public constructor(\n private _element: ElementRef) {\n }\n\n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n\n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n\n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hideDropDown(true);\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changeObj: any): void {\n this.filterOptions();\n this.updateLabel();\n\n if (changeObj[\"selectModel\"]) {\n if (this.isLazyLoading && this.selectModel?.length) {\n if (!this.filteredOptions?.length && !this.isExpanded) {\n // preload data to show the labels\n this.loadMore(true);\n }\n }\n }\n }\n\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !this.selectModel || !this.selectModel.length;\n } else {\n return typeof this.selectModel === 'undefined' || this.selectModel === null;\n }\n }\n\n public handleOptionClick(option: string | object) {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getId(option);\n\n if (this.isMultiselect) {\n this.toggleOption(optionValue);\n } else {\n this.singleSelect(optionValue);\n }\n\n this.emitChange();\n }\n\n // Logic for single select\n private singleSelect(value: string | object) {\n this.selectModel = value;\n\n // Hide dropdown if single select\n this.hideDropDown(true);\n }\n\n public toggleExpand() {\n this.isExpanded = !this.isExpanded;\n this.searchText = \"\";\n this.filterOptions();\n this.updatePlacement();\n\n if (this.isExpanded && this.isLazyLoading) {\n this.loadMore(true);\n }\n }\n\n // Logic for multiselect\n private toggleOption(value: string | object): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n\n const index = this.getElementIndex(value);\n\n if (index < 0) {\n this.selectModel.push(value);\n this.toggleChildren(true);\n } else {\n this.selectModel.splice(index, 1);\n this.toggleChildren(false);\n }\n\n this.updateLabel();\n }\n\n private toggleChildren(checked: boolean): void {\n if (!this.option || !this.option.Childrens?.length) {\n return;\n }\n this.option.Childrens.forEach((child: string) => {\n this.option = this.options.find(el => this.getId(el) === child);\n const childIndex = this.selectModel.findIndex(el => this.getId(el) === child);\n if (this.option && checked && childIndex < 0) {\n this.selectModel.push(child);\n } else if (!checked && childIndex >= 0) {\n this.selectModel.splice(childIndex, 1);\n }\n // Recursive call to handle nested children\n this.toggleChildren(checked);\n });\n }\n\n private getElementIndex(value: string | object): number {\n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n\n public toggleAll(): void {\n if (this.selectModel.length !== this.options.length) {\n this.selectModel = this.options.map(el => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n\n this.emitChange();\n }\n\n public onSearchChange(): void {\n this.filterOptions();\n\n if (this.isLazyLoading) {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }\n }\n\n private filterOptions(): void {\n const options = this.options.slice(0);\n\n if (!this.searchText) {\n this.filteredOptions = options;\n return;\n }\n\n const regex = new RegExp(this.searchText, 'i');\n this.filteredOptions = options.filter(option => regex.test(this.getName(option)));\n }\n\n public isSelected(option: string | object): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n\n const optionId = this.getId(option);\n\n if (this.isMultiselect) {\n return this.selectModel.findIndex(el => this.getId(el) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel) === optionId;\n }\n }\n\n public updateLabel() {\n if (this.isModelEmpty()) {\n return;\n }\n\n if (this.isMultiselect) {\n const selectedCount = this.selectModel.length;\n\n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n\n public getNameFromValue(val: string | object): string {\n if (this.returnOption) {\n return this.getName(val);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => i.id == val);\n return this.getName(opt);\n }\n else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val)\n return this.getName(option ?? val);\n }\n }\n }\n\n public getName(option: string | object): string {\n if (typeof option === 'object') {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .join(\" \");\n return combinedProps;\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n } else {\n return option;\n }\n }\n\n\n private getId(option: string | object): string {\n if (typeof option === 'object') {\n if (this.idProp) {\n return this.getRecursiveProperty(option, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option;\n }\n }\n\n private getRecursiveProperty(object: any, path: string): string {\n return path.split('.').reduce((obj, x) => {\n if (obj) {\n return obj[x];\n } else {\n return null;\n }\n }, object);\n }\n\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isExpanded) {\n this.closed.emit(this.selectModel);\n }\n\n this.isExpanded = false;\n }\n\n private emitChange() {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n\n private updatePlacement() {\n // update menu position base on scroll\n this.isTopMenuDirection = this.getMenuDirection() === \"top\";\n }\n\n private getMenuDirection(): \"bottom\" | \"top\" {\n\n if (this.preferedOpenDirection) {\n return this.preferedOpenDirection;\n }\n\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n\n const height = window.innerHeight;\n\n if (top > (height / 2)) {\n return \"top\";\n }\n else {\n return \"bottom\"\n }\n }\n\n private getMaxMenuHeight() {\n const containerElement = this.getContainerElement();\n if (!containerElement || !containerElement.clientHeight) {\n return \"190px\";\n }\n\n const parentHeight = containerElement.clientHeight;\n let height = Math.round((parentHeight / 2) - 25);\n height = Math.min(216, height);\n height = Math.max(96, height);\n return `${height}px`;\n }\n\n private getContainerElement() {\n const component = this._element.nativeElement as HTMLElement;\n const container = component.getElementsByClassName(\"app-select\").item(0) as HTMLElement;\n return container.offsetParent;\n }\n\n public handleAddNewOption() {\n this.addNewOption.emit({ value: this.searchText })\n this.hideDropDown(true)\n }\n\n public handleRemoveOption() {\n this.removeOption.emit({ removed: true })\n this.hideDropDown(true)\n }\n\n\n\n public async loadMore(showSelectedOnTop: boolean) {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n\n // load first 10 records for the the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n\n this.canLoadMore = (newItems.length == limit);\n\n // the selectModel contains the selected items ids\n const checkedIds = this.selectModel as string[];\n\n if (showSelectedOnTop && checkedIds?.length) {\n\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(i.id));\n newItems = newItems.filter(i => !checkedIds.includes(i.id as string));\n\n // add all checked items to the top \n const checkedItems = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = checkedItems.concat(this.filteredOptions);\n\n this.updateLabel();\n }\n\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n this.filteredOptions = this.filteredOptions.concat(newItems);\n\n }\n catch (err) {\n console.error(err);\n }\n finally {\n this.isLoadingNow = false;\n }\n }\n}\n","<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss']\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n /*\n\t * 2-Way component property for current page number.\n\t */\n @Input() page: number;\n\n /*\n * property for page size.\n */\n @Input() perPage: number;\n\n /*\n * Component property for total records\n */\n @Input() count: number;\n\n @Output() pageChange = new EventEmitter<number>();\n\n @Output() perPageChange = new EventEmitter<number>();\n\n public CurrentPageItemsCount: number;\n\n public pagesCount: number;\n\n public pages: PageItem[];\n\n public pagesInGroup = 7;\n\n public availablePagesSize = [10, 20, 30, 40, 50];\n\n public totalPages: number;\n\n public constructor() {\n this.page = 1;\n this.perPage = 10;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"count\"]) {\n this.reCalculatePageCount();\n }\n }\n\n public nextPage(): void {\n if (this.page + 1 > this.totalPages) {\n return;\n }\n\n this.page++;\n\n this.pageChange.emit(this.page);\n }\n\n public prevPage(): void {\n if (this.page - 1 <= 0) {\n return;\n }\n\n this.page--;\n\n this.pageChange.emit(this.page);\n }\n\n public updatePageSize(): void {\n this.reCalculatePageCount();\n this.page = 1;\n\n this.pageChange.emit(this.page);\n this.perPageChange.emit(this.perPage);\n }\n\n public endRowSize(): number {\n const to = this.page * this.perPage;\n\n if (to <= this.count) {\n return to;\n } else {\n return this.count;\n }\n }\n\n public reCalculatePageCount() {\n let pages = this.count / this.perPage;\n\n if (this.count % this.perPage !== 0) {\n pages++;\n }\n\n this.totalPages = pages;\n }\n}\n","<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss']\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone;\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n}\n","<div class=\"phone-input-component\">\n <div class=\"material-input\">\n <a class=\"country-select\"\n (click)=\"toggle()\">\n <img class=\"country-flag\"\n [src]=\"selectedCountry.flag\">\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_more</i>\n <div class=\"code\">{{ selectedCountry.countryCallingCode }}</div>\n </a>\n <input class=\"phone-input\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\"\n #input>\n </div>\n\n <div class=\"action-menu country-dropdown-list\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-body\">\n <!--Country's List-->\n <a class=\"action-item\"\n *ngFor=\"let country of countryList\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"country-flag\"\n [src]=\"country.flag\">\n <div>{{ country.countryName }}</div>\n <div>{{ country.countryCallingCode }}</div>\n </a>\n\n <!--Custom Country-->\n <a class=\"action-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"country-flag\"\n [src]=\"customCountry.flag\">\n <div>{{ customCountry.countryName }}</div>\n <div>{{ customCountry.countryCallingCode }}</div>\n </a>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss']\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'asc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_up\n </i>\n </div>\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'desc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_down\n </i>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss']\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() onLabel = \"On\";\n\n @Input() offLabel = \"Off\";\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"toggle-component\">\n <div class=\"toggle-component-content\"\n (click)=\"toggle()\">\n <div class=\"toggle-state toggle-state-left\"\n [ngClass]=\"enabled ? 'toggle-active' : ''\">\n {{onLabel}}\n </div>\n <div class=\"toggle-state toggle-state-right\"\n [ngClass]=\"enabled ? '' : 'toggle-active'\">\n {{offLabel}}\n </div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss']\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n <zen-icon *ngIf=\"icon\"\n [src]=\"icon\"></zen-icon>\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss']\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n <div class=\"colors-container\" *ngIf=\"canDoodle || canAddText\">\n <div class=\"colors\" *ngFor=\"let color of colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\ninterface BreadcrumbStep {\n text: string;\n active: boolean;\n /**\n * user's custom data\n */\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-breadcrumbs',\n templateUrl: './zendu-breadcrumbs.component.html',\n styleUrls: ['./zendu-breadcrumbs.component.scss'],\n})\nexport class ZenduBreadcrumbs {\n @Input() steps: BreadcrumbStep[] = [];\n\n /**\n * Enable manual activation. In this case active trips will managed by app\n */\n @Input() manualNavigation = false;\n\n @Output() onActivate = new EventEmitter<BreadcrumbStep>();\n\n public onStepClick(step: BreadcrumbStep) {\n if (this.manualNavigation) {\n return;\n }\n const activeIdx = this.steps.indexOf(step);\n // update states\n for (let [idx, step] of this.steps.entries()) {\n step.active = idx <= activeIdx;\n }\n this.onActivate.emit(step);\n }\n}\n","<div class=\"component\">\n <ng-container *ngFor=\"let step of steps; let isLast = last;\">\n <div class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n <div class=\"step\"\n [ngClass]=\"{\n 'active': step.active,\n 'mannual-navigation': manualNavigation,\n 'text-nowrap': steps.length === 1\n }\"\n (click)=\"onStepClick(step)\">\n {{step.text}}\n </div>\n <!-- last line -->\n <div *ngIf=\"isLast\"\n class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n </ng-container>\n\n</div>","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss']\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss']\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n <span *ngIf=\"uploadState != 'done'\">Upload File</span>\n <span *ngIf=\"uploadState == 'done'\">Uploaded File</span>\n </div>\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n *ngIf=\"uploadState != 'done'\">\n\n <div class=\"box\"\n *ngIf=\"!isFileSelected\">\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n\n <ng-container *ngIf=\"isFileSelected\">\n <!-- File selected state -->\n <ng-container *ngIf=\"uploadState == ''\">\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n </ng-container>\n\n <!-- Uploading state -->\n <ng-container *ngIf=\"uploadState == 'uploading'\">\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n\n <!-- Uploading done -->\n <div *ngIf=\"uploadState == 'done'\"\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n\n </div>\n </div>\n\n <div class=\"btn-upload-wrapper\">\n\n <button *ngIf=\"uploadState == ''\"\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n\n <button *ngIf=\"uploadState == 'uploading'\"\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n </div>\n\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss']\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text\n */\n @Input() text = \"\";\n}\n","<div class=\"component\">\n <!-- Progres bar -->\n <div *ngIf=\"type == 'bar'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-val\"\n [ngStyle]=\"{ 'width': value + '%' }\">\n <span class=\"value-text\">{{value}}%</span>\n </div>\n </div>\n <div class=\"progress-text\">\n {{text}}\n </div>\n </div>\n\n <!-- Circle progress -->\n <div *ngIf=\"type == 'circle'\"\n class=\"progress-circle-wrapper\">\n\n\n <div class=\"progress-circle\"\n [class.show-full-right-side]=\"value>=50\">\n\n <div class=\"center-pipe\"></div>\n\n <div class=\"circle-clipper\">\n <div class=\"right-full-bar progress-val-50\"></div>\n <div class=\"progress-bar-val progress-val-{{value}}\"></div>\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text\"> {{value}}%</div>\n <div class=\"progress-text\">{{text}}</div>\n </div>\n </div>\n </div>\n\n <!-- Half-Circle progress -->\n <div *ngIf=\"type == 'half-circle'\"\n class=\"progress-half-circle-wrapper\">\n\n <div class=\"progress-circle\">\n <div class=\"center-pipe\"></div>\n\n <div class=\"circle-clipper\">\n <div class=\"right-full-bar progress-val-50\"></div>\n <div class=\"progress-bar-val progress-val-{{value}}\"></div>\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text\"> {{value}}%</div>\n <div class=\"progress-text\">{{text}}</div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss']\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n *ngIf=\"displaySearchIcon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n *ngIf=\"address\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n <ul class=\"search-item-list\"\n *ngIf=\"addressList.length || isSearching\">\n <li *ngIf=\"isSearching\">Searching</li>\n <div *ngIf=\"!isSearching\">\n <li *ngFor=\"let address of addressList\"\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n </div>\n </ul>\n </div>\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n\tselector: 'zen-html5-video-player',\n\ttemplateUrl: './html5-video-player.component.html',\n\tstyleUrls: ['./html5-video-player.component.scss']\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss']\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss']\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss']\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss']\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss']\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n @ViewChild('pickerPopup') pickerPopup: ElementRef;\n\n isPickerVisible = false;\n\n hours: number[] = [];\n minutes: number[] = [];\n seconds: number[] = [];\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n right = false;\n bottom = false;\n\n private readonly ITEM_HEIGHT = 42;\n private isDragging = false;\n private dragStartY = 0;\n private dragStartScroll = 0;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n return this.mode === 'clock' ? 'Select Time' : '0 min';\n }\n\n get hourSeparator(): string {\n return this.mode === 'clock' ? ':' : 'hr';\n }\n\n get minuteSeparator(): string {\n return this.mode === 'clock' ? ':' : 'min';\n }\n\n get secondSeparator(): string {\n return this.mode === 'duration' ? 'sec' : '';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n if (this.showSeconds) {\n const s = this.formatNum(this.value.seconds);\n return `${h}.${m}.${s} ${this.value.period || 'AM'}`;\n }\n return `${h}.${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.buildRanges();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.buildRanges();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private buildRanges(): void {\n const maxHour = this.mode === 'clock' ? 12 : 23;\n const startHour = this.mode === 'clock' ? 1 : 0;\n this.hours = this.range(startHour, maxHour);\n this.minutes = this.range(0, 59);\n this.seconds = this.range(0, 59);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = val.hours;\n this.selectedMinutes = val.minutes;\n this.selectedSeconds = val.seconds;\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private range(start: number, end: number): number[] {\n const arr: number[] = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n selectHour(val: number): void {\n this.selectedHours = val;\n }\n\n selectMinute(val: number): void {\n this.selectedMinutes = val;\n }\n\n selectSecond(val: number): void {\n this.selectedSeconds = val;\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n onScroll(event: Event, type: 'hours' | 'minutes' | 'seconds'): void {\n const el = event.target as HTMLElement;\n const scrollTop = el.scrollTop;\n const index = Math.round(scrollTop / this.ITEM_HEIGHT);\n\n if (type === 'hours' && index >= 0 && index < this.hours.length) {\n this.selectedHours = this.hours[index];\n } else if (type === 'minutes' && index >= 0 && index < this.minutes.length) {\n this.selectedMinutes = this.minutes[index];\n } else if (type === 'seconds' && index >= 0 && index < this.seconds.length) {\n this.selectedSeconds = this.seconds[index];\n }\n }\n\n onMouseDown(event: MouseEvent, scrollEl: HTMLElement): void {\n this.isDragging = true;\n this.dragStartY = event.clientY;\n this.dragStartScroll = scrollEl.scrollTop;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent, scrollEl: HTMLElement): void {\n if (!this.isDragging) return;\n const delta = this.dragStartY - event.clientY;\n scrollEl.scrollTop = this.dragStartScroll + delta;\n }\n\n onMouseUp(): void {\n this.isDragging = false;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n *ngIf=\"isPickerVisible\"\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n\n <!-- Scroll Columns -->\n <div class=\"zen-tp__columns\">\n <!-- Hours -->\n <div class=\"zen-tp__scroll-group\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'hours')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let h of hours\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"h === selectedHours\"\n (click)=\"selectHour(h)\">\n {{ formatNum(h) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator\">{{ hourSeparator }}</span>\n\n <!-- Minutes -->\n <div class=\"zen-tp__scroll-group\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'minutes')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let m of minutes\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"m === selectedMinutes\"\n (click)=\"selectMinute(m)\">\n {{ formatNum(m) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator\" *ngIf=\"showSeconds && mode === 'clock'\">:</span>\n <span class=\"zen-tp__separator zen-tp__separator--unit\" *ngIf=\"mode === 'duration'\">min</span>\n\n <!-- Seconds -->\n <div class=\"zen-tp__scroll-group\" *ngIf=\"showSeconds\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'seconds')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let s of seconds\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"s === selectedSeconds\"\n (click)=\"selectSecond(s)\">\n {{ formatNum(s) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator zen-tp__separator--unit\"\n *ngIf=\"mode === 'duration' && showSeconds\">\n sec\n </span>\n\n <!-- AM/PM Toggle (Clock mode only) -->\n <div class=\"zen-tp__period\" *ngIf=\"mode === 'clock'\">\n <button class=\"zen-tp__period-btn\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n\n <!-- Actions -->\n <div class=\"zen-tp__actions\" [class.zen-tp__actions--full]=\"mode === 'duration'\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduBreadcrumbs } from './breadcrumbs/zendu-breadcrumbs.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { AngularSignaturePadModule } from '@almothafar/angular-signature-pad';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { HttpClient } from '@angular/common/http';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\n// AoT requires an exported function for factories\nexport function HttpLoaderFactory(httpClient: HttpClient) {\n return new TranslateHttpLoader(httpClient);\n}\n\n@NgModule({\n declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent\n ],\n providers: [\n OpenCVService,\n ],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AngularSignaturePadModule,\n ReactiveFormsModule,\n HttpClientModule,\n OverlayModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent\n ]\n})\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from './lib/ng-zenduit.module';\n\n/**\n * Types\n */\nexport * from './lib/filter/filtersConfig';\nexport * from './lib/filter/numberRange';\nexport * from './lib/column-configuration/columnState';\nexport * from './lib/map/map.types';\nexport * from './lib/location-search/location.address';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/datepicker/date-picker-hint';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/breadcrumbs/zendu-breadcrumbs.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["showSnackbar","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i1","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11","i4.ZenduSpinner","i5","i1.ZenduSelectComponent","i2.ZenduIconComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i3.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i2.ZenHTML5VideoPlayerComponent","i3.ZenFlvPlayerComponent","i4.ZenHlsPlayerComponent","i5.ZenSnapshotPlayerComponent","i6.ZenWebRTCPlayerComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAMa,gBAAgB,CAAA;IAElB,IAAI,CACP,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE,UAAU;AACzB,SAAA,CAAC,CAAA;KACL;IAEM,OAAO,CACV,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE,UAAU;AACzB,SAAA,CAAC,CAAA;KACL;IAEM,IAAI,CACP,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE,UAAU;AACzB,SAAA,CAAC,CAAA;KACL;IAEM,KAAK,CACR,GAAY,EACZ,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC/B,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE,UAAU;AACzB,SAAA,CAAC,CAAA;KACL;AAEO,IAAA,eAAe,CAAC,EAAO,EAAA;QAC3B,IAAI,CAAC,EAAE,EAAE;AACL,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;AACxB,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AACI,aAAA,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE;YACnC,OAAO,EAAE,CAAC,KAAK,CAAC;AACnB,SAAA;aACI,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3B,SAAA;aACI,IAAI,EAAE,CAAC,OAAO,EAAE;YACjB,OAAO,EAAE,CAAC,OAAO,CAAC;AACrB,SAAA;AACI,aAAA,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,EAAE;YACjC,OAAO,CAAA,WAAA,EAAc,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAA,CAAE,CAAC;AACrD,SAAA;aACI,IAAI,EAAE,CAAC,UAAU,EAAE;YACpB,OAAO,EAAE,CAAC,UAAU,CAAC;AACxB,SAAA;AACI,aAAA;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC;AAC9D,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACJ;;8GArGQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;iBACrB,CAAA;;;MCEY,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;AASc,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW,CAAC;AAE7C,QAAA,IAAK,CAAA,KAAA,GAAoB,QAAQ,CAAC;AAElC,QAAA,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AAExB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAE3B,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;KAiBlC;AAbG;;AAEG;IACI,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC1C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACzC;;oHA9BQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,iSCPnC,+wBAoBA,EAAA,MAAA,EAAA,CAAA,u+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDba,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACI,cAAc,EAAA,QAAA,EAAA,+wBAAA,EAAA,MAAA,EAAA,CAAA,u+DAAA,CAAA,EAAA,CAAA;8BAMf,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEE,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEhBG,yBAAyB,CAAA;AA6CpC,IAAA,WAAA,CACU,QAAoB,EAAA;AAApB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AA1CpB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AAE1C,QAAA,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC;AAId,QAAA,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAElB,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AAEf,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;AAEb,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAChB,IAAA,CAAA,UAAU,GAA2B;YAC1C,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;SAC3H,CAAA;KAqBI;AAlBL,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEzC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD,OAAO;AACR,SAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAGD,MAAM,GAAA;QACJ,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAMM,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,OAAO,CAAC,cAAc,CAAC;AACzB,YAAA,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY;YACpC,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAEM,IAAA,WAAW,CAAC,GAAe,EAAA;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,GAAG,CAAC,eAAe,EAAE,CAAC;KACvB;IAEM,MAAM,GAAA;QACX,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;KAC5B;IAEM,eAAe,GAAA;AAEpB,QAAA,IAAI,SAAsB,CAAC;QAC3B,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,SAAA;AACI,aAAA;AACH,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAA4B,CAAC;AAC7D,YAAA,SAAS,GAAG,SAAS,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAgB,CAAC;AAC9F,SAAA;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;QACpD,MAAM,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;QAExD,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAG,EAAA,IAAI,IAAI,CAAC;AAC5B,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC;QACpD,IAAI,kBAAkB,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,MAAM,GAAG,MAAM,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACtB,SAAA;AACI,aAAA;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC;AACtD,YAAA,IAAI,CAAC,UAAU,GAAG,CAAG,EAAA,WAAW,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACnB,SAAA;KACF;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACrB;AAEM,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;;uHAzGU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,wTCPtC,8mDAmDA,EAAA,MAAA,EAAA,CAAA,y0DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD5Ca,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,8mDAAA,EAAA,MAAA,EAAA,CAAA,y0DAAA,CAAA,EAAA,CAAA;iGAMlB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEE,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAmBN,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAa5C,MAAM,EAAA,CAAA;sBADL,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;ME/BtB,IAAI,CAAA;AAGf,IAAA,WAAA,GAAA;;;;KAID;AACU,IAAA,OAAO,QAAQ,CAAC,IAAS,EAAE,IAAY,EAAE,SAAmB,EAAA;AAC/D,QAAA,IAAI,OAAY,CAAC;QACjB,MAAM,OAAO,GAAQ,IAAI,CAAC;AAE1B,QAAA,OAAO,SAAS,gBAAgB,GAAA;YAC5B,MAAM,IAAI,GAAG,SAAS,CAAC;AAEvB,YAAA,MAAM,KAAK,GAAG,YAAA;gBACV,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,SAAS,EAAE;AACZ,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7B,iBAAA;AACL,aAAC,CAAC;AAEF,YAAA,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;YAEtC,YAAY,CAAC,OAAO,CAAC,CAAC;AAEtB,YAAA,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAElC,YAAA,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7B,aAAA;AACL,SAAC,CAAC;KACL;IAEM,OAAO,KAAK,CAAI,MAAS,EAAA;QAE5B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE7B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;;QAKzB,KAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAClC;AACI,YAAA,MAAM,GAAG,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,IAAG,GAAG;gBACF,OAAO,GAAG,IAAI,QAAQ;AACtB,gBAAA,OAAO,GAAG,CAAC,OAAO,IAAI,UAAU;AAChC,gBAAA,OAAO,GAAG,CAAC,OAAO,IAAI,UAAU,EACpC;gBACI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AAID;;;AAGG;IACK,OAAO,WAAW,CAAC,GAAQ,EAAA;QAE/B,IAAG,CAAC,GAAG,EACP;YACI,OAAO;AACV,SAAA;AACD,QAAA,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACrB;AACI,YAAA,KAAI,IAAI,IAAI,IAAI,GAAG,EACnB;gBACI,IAAG,CAAC,IAAI,EACR;oBACI,IAAI,GAAG,IAAI,CAAC;AACf,iBAAA;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1B,aAAA;YACD,OAAO;AACV,SAAA;AAED,QAAA,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC;AACtB,QAAA,IAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,EACvC;YACI,OAAO;AACV,SAAA;;QAGD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAEjB,YAAA,IAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;AACZ,gBAAA,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EACjB;AACI,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,OAAO;AACV,aAAA;AAED,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,YAAA,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACrB;gBACI,IAAI,GAAG,GAAe,GAAG,CAAC;AAC1B,gBAAA,KAAI,IAAI,CAAC,IAAI,GAAG,EAChB;AACI,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACvB,iBAAA;AACJ,aAAA;AACI,iBAAA,IAAG,OAAO,GAAG,IAAI,QAAQ,EAC9B;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,aAAA;AACL,SAAC,CAAC,CAAC;KACN;AAGM,IAAA,OAAO,cAAc,CAAC,MAAW,EAAE,IAAS,EAAA;QAE/C,KAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAClC;YACI,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;KACJ;IAEM,OAAO,KAAK,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,UAAU,CAAC,MAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;aACb,EAAE,EAAE,CAAC,CAAC;AACX,SAAC,CAAC,CAAA;KACL;AACJ;;MCpIY,uBAAuB,CAAA;IAqBlC,WAA2B,CAAA,QAAoB,EAAU,OAAe,EAAA;AAA7C,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AAAU,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AAlB9D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU,CAAC;AAMzC,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEV,QAAA,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC;AAM/B,QAAA,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;AAGzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACpB;IAlBD,IAAa,KAAK,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACpB;IAkBM,QAAQ,GAAA;;QAEb,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,aAAA;SACF,EAAE,GAAG,CAAC,CAAC;KACT;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAK;YACzC,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,EAAE,KAAK,CAAC,CAAC;KACX;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACxC;IAEM,OAAO,GAAA;QACZ,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE;;YAE7B,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE;;YAEV,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB,EAAE,GAAG,CAAC,CAAC;YACR,OAAO;AACR,SAAA;;AAED,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;QAClC,IAAI,MAAM,IAAI,CAAC,EAAE;;YAEf,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB,EAAE,GAAG,CAAC,CAAC;YACR,OAAO;AACR,SAAA;;QAGD,UAAU,CAAC,MAAK;YACd,KAAK,CAAC,KAAK,EAAE,CAAC;SACf,EAAE,CAAC,CAAC,CAAC;KACP;AAEO,IAAA,QAAQ,CAAC,OAA2B,EAAA;QAC1C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AAC/B,YAAA,OAAO,OAA2B,CAAC;AACpC,SAAA;AAED,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,YAAA,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,IAAI,OAAO,EAAE;AAChC,gBAAA,OAAO,EAAsB,CAAC;AAC/B,aAAA;AACF,SAAA;;AAGD,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,EAAE;gBACP,SAAS;AACV,aAAA;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAiB,CAAC,CAAC;AACjD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,OAAO,CAAC;AAChB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;qHA1HU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,6TCjBpC,u8BA6BA,EAAA,MAAA,EAAA,CAAA,+vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,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,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,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDZa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,u8BAAA,EAAA,MAAA,EAAA,CAAA,+vBAAA,CAAA,EAAA,CAAA;sHAKjB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEM,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAIG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAEuC,WAAW,EAAA,CAAA;sBAAvD,SAAS;gBAAC,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;MEbhC,iCAAiC,CAAA;AAkC5C,IAAA,WAAA,CAAoB,QAAoB,EAAA;AAApB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AAjCxC;;AAEG;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAiB,CAAC;AAElE;;AAEG;AACM,QAAA,IAAa,CAAA,aAAA,GAAkB,EAAE,CAAC;AAE3C;;AAEG;AACM,QAAA,IAAoB,CAAA,oBAAA,GAAkB,EAAE,CAAC;AAElD;;AAEG;AACM,QAAA,IAAgB,CAAA,gBAAA,GAAqB,OAAO,CAAC;AAEtD;;AAEG;AACK,QAAA,IAAoB,CAAA,oBAAA,GAAkB,EAAE,CAAC;AAE1C,QAAA,IAAuB,CAAA,uBAAA,GAAkB,EAAE,CAAC;AAE5C,QAAA,IAA4B,CAAA,4BAAA,GAAkB,EAAE,CAAC;AAEjD,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAE3B,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;KAEqB;AAG5C,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEzC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD,OAAO;AACR,SAAA;;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,IAAI,OAAO,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;KACF;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEjC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE;;YAElB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACtE,SAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEM,KAAK,GAAA;QACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;;QAE9D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnD;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAEM,IAAA,MAAM,CAAC,KAA4B,EAAA;AACxC,QAAA,eAAe,CACb,IAAI,CAAC,4BAA4B,EACjC,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB,CAAC;AACF,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,4BAA4B,CAAC;KAClE;IAEM,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;;YAEjE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACtE,SAAA;AAAM,aAAA;;AAEL,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC/C,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,aAAA;AACF,SAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACrE,CAAC,GAAG,KACF,GAAG,CAAC,WAAW;AACZ,aAAA,WAAW,EAAE;AACb,aAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CACpD,CAAC;KACH;;+HAjHU,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,iCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,sVCnB9C,klDAwCA,EAAA,MAAA,EAAA,CAAA,8sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDrBa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,klDAAA,EAAA,MAAA,EAAA,CAAA,8sBAAA,CAAA,EAAA,CAAA;iGAQ1B,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBAKE,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAKG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAkBN,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AEvDlC,IAAA,oBAMX;AAND,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,GAM9B,EAAA,CAAA,CAAA;;MCCY,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CAAoB,KAAiB,EAAA;AAAjB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;KAAK;AAEnC,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAA4B,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC;AACvD,SAAA;KACF;;gHAbU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,6FCP/B,EAAA,EAAA,MAAA,EAAA,CAAA,qKAAA,CAAA,EAAA,CAAA,CAAA;4FDOa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,EAAA,EAAA,MAAA,EAAA,CAAA,qKAAA,CAAA,EAAA,CAAA;iGAMX,GAAG,EAAA,CAAA;sBAAX,KAAK;;;AEGR,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,cAAc,GAAG,IAAI,CAAC;MAOf,wBAAwB,CAAA;AA0FjC,IAAA,WAAA,CACY,QAAoB,EACpB,OAAgB,EAChB,gBAAkC,EAClC,UAA4B,EAAA;AAH5B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AACpB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAChB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAClC,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAkB;AAvFxC;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEvC,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEpB,QAAA,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAEhB,QAAA,IAAe,CAAA,eAAA,GAAuB,IAAI,CAAC;AAQ3C,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAE3B,QAAA,IAAa,CAAA,aAAA,GAAa,EAAE,CAAC;AAE7B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAItC;;AAEG;AACM,QAAA,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;AAEhC,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAA,CAAA,SAAS,GAAwB,mBAAmB,CAAC,IAAI,CAAC;AAE1D,QAAA,IAAA,CAAA,SAAS,GAAwB,mBAAmB,CAAC,IAAI,CAAC;AAE1D,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AAUrC,QAAA,IAAA,CAAA,YAAY,GAA6C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAEnF,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExB,QAAA,IAAO,CAAA,OAAA,GAAqC,EAAE,CAAC;AAE/C,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAEf,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAA,IAAA,GAAG,YAAY,CAAC;AAEpB,QAAA,IAAG,CAAA,GAAA,GAAG,aAAa,CAAC;AAEpB,QAAA,IAAG,CAAA,GAAA,GAAG,cAAc,CAAC;AAErB,QAAA,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;AAIb,QAAA,IAAM,CAAA,MAAA,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE9F,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAEX,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AAEpC,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AAE1C,QAAA,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;AACvB,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;KAOnB;AAIL,IAAA,eAAe,CAAC,KAAK,EAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEvC,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACpD,OAAO;AACV,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAA;KACxB;IAGD,MAAM,GAAA;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,YAAY,GAAG;gBAChB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;aACnC,CAAC;AACL,SAAA;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,mBAAmB,CAAC,IAAI,EAAE;AAC/G,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE,KAAK,mBAAmB,CAAC,GAAG,EAAE;AAC5G,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,SAAA;KACJ;IAEO,wBAAwB,GAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;YACpB,OAAO,mBAAmB,CAAC,GAAG,CAAA;AACjC,SAAA;AACI,aAAA;YACD,OAAO,mBAAmB,CAAC,MAAM,CAAC;AACrC,SAAA;KACJ;AAED;;;AAGG;IACK,0BAA0B,GAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACpB,OAAO,mBAAmB,CAAC,IAAI,CAAC;AACnC,SAAA;AACI,aAAA;YACD,OAAO,mBAAmB,CAAC,KAAK,CAAC;AACpC,SAAA;KACJ;IAGM,YAAY,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,YAAY,GAAG;gBAChB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;aACnC,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AACtC,aAAA;AACJ,SAAA;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACpC,aAAA;AACJ,SAAA;KACJ;IAEO,aAAa,GAAA;AACjB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAC1D,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAE9D,QAAA,MAAM,QAAQ,GAAsB;AAChC,YAAA,OAAO,EAAE,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,GAAG,OAAO,GAAG,KAAK;AAC5E,YAAA,OAAO,EAAE,iBAAiB,KAAK,mBAAmB,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK;AAC5E,YAAA,QAAQ,EAAE,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,GAAG,OAAO,GAAG,KAAK;AAC7E,YAAA,QAAQ,EAAE,iBAAiB,KAAK,mBAAmB,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ;SAChF,CAAC;;AAGF,QAAA,MAAM,OAAO,GAAG,iBAAiB,KAAK,mBAAmB,CAAC,MAAM,CAAC;AACjE,QAAA,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAElC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC3C,aAAA,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;AACvC,aAAA,aAAa,CAAC;YACX,QAAQ;SACX,CAAC;;aAED,sBAAsB,CAAC,KAAK,CAAC;;aAE7B,kBAAkB,CAAC,OAAO,CAAC;;aAE3B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAGrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,gBAAgB;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,UAAU,EAAE,gBAAgB;AAC/B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACjC,SAAC,CAAC,CAAC;KAEN;;IAGM,WAAW,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAChC;;IAGD,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7B,SAAA;KACJ;IAEO,cAAc,GAAA;QAClB,UAAU,CAAC,MAAK;YACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5D,aAAA;SACJ,EAAE,CAAC,CAAC,CAAA;KACR;IAEO,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;AACV,SAAA;QAED,UAAU,CAAC,MAAK;;YACZ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;;YAGhE,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAE/D,YAAA,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,MAAM,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,MAAM,IAAG,GAAG,CAAC;YACzC,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB,EAAE,CAAC,CAAC,CAAC;KACT;IAEO,oBAAoB,CAAC,WAAoB,EAAE,UAAmB,EAAA;AAClE,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;AAC1C,SAAA;AAAM,aAAA;YACH,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AAC1C,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IAEO,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;AACjC,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC/F,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtF,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE9E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAEtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,OAAO,OAAO,IAAI,GAAG,EAAE;AACnB,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAqB,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;gBAE9B,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,gBAAA,IAAI,IAAI,EAAE;oBACN,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;wBACtC,IAAI,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AACvC,iBAAA;gBAED,IAAI,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEhD,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACjD,UAAU,GAAG,IAAI,CAAC;AACrB,iBAAA;AAAM,qBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACxD,UAAU,GAAG,IAAI,CAAC;AACrB,iBAAA;gBAED,IAAI,aAAa,GAAG,KAAK,CAAC;gBAE1B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACjD,oBAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACtE,iBAAA;AAED,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;oBACtB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AACtC,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,aAAa,EAAE,aAAa;AAC/B,iBAAA,CAAC,CAAC;AAEH,gBAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3C,aAAA;AACJ,SAAA;KACJ;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACpE,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;KAClD;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;KAClD;AAEM,IAAA,SAAS,CAAC,GAAkB,EAAA;QAC/B,IAAI,GAAG,CAAC,UAAU,EAAE;;YAEhB,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACtI,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE,CAAC;AAChB,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;AAEM,IAAA,WAAW,CAAC,KAAa,EAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;KACnC;AAEM,IAAA,UAAU,CAAC,IAAY,EAAA;QAC1B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAClC;IAEM,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAChC,SAAA;KACJ;IAGM,WAAW,GAAA;QACd,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAChC,OAAO;AACV,SAAA;QAED,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEzB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1B,SAAA;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAE,CAAA,EAAE,SAAS,CAAC,CAAC;QAEnF,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;AAChB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;SACtB,CAAC;;;QAIF,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7I,SAAA;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC9H,SAAA;;QAGD,IAAI,IAAI,GAAG,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;AAC1B,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,CAAG,EAAA,IAAI,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,GAAG,GAAG,EAAE,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,GAAG,CAAI,CAAA,EAAA,GAAG,EAAE,CAAC;AACxB,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,GAAG,GAAG,CAAG,EAAA,GAAG,EAAE,CAAC;AACvB,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,GAAG,GAAG,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAI,CAAA,EAAA,GAAG,EAAE,CAAC;AACxB,aAAA;AACI,iBAAA;AACD,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAG,EAAA,GAAG,EAAE,CAAC;AACvB,aAAA;AACJ,SAAA;KAEJ;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE;AAC7D,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;;AAGD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAErD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAC9C,iBAAA,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC;AAC7B,iBAAA,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1C,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;KACnF;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAChD,SAAA;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7C;IAEM,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;KAClC;IAEM,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1F,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,SAAA;KACJ;IAEM,MAAM,GAAA;QACT,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACb,OAAO;AACV,SAAA;AACD,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,QAAQ,GAAA;QACX,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACb,OAAO;AACV,SAAA;AACD,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,KAAK,GAAA;QACR,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO;AACV,SAAA;AACD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,OAAO,GAAA;QACV,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO;AACV,SAAA;AACD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,KAAK,GAAA;QACR,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO;AACV,SAAA;AACD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,OAAO,GAAA;QACV,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO;AACV,SAAA;AACD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEM,KAAK,GAAA;QACR,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,GAAG,KAAK,cAAc,EAAE;gBAC1G,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,aAAA;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;KACvE;IAEM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;KACvE;IAEM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;IAEM,OAAO,GAAA;;AAEV,QAAA,QAAQ,IAAI;AACR,YAAA,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;;AAE/B,gBAAA,OAAO,kCAAkC,CAAC;AAC9C,YAAA,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;;AAEhC,gBAAA,OAAO,sCAAsC,CAAC;AAClD,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;;AAEhC,gBAAA,OAAO,kCAAkC,CAAC;AAC9C,YAAA;AACI,gBAAA,OAAO,kCAAkC,CAAC;AACjD,SAAA;KACJ;AAEM,IAAA,cAAc,CAAC,IAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO;AACV,SAAA;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACxB,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AAC3B,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;SAC9B,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,KAAK,EAAE,CAAC;AAChB,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;sHA/pBQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,69BCrBrC,khXAsPA,EAAA,MAAA,EAAA,CAAA,knPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAC,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDjOa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,khXAAA,EAAA,MAAA,EAAA,CAAA,knPAAA,CAAA,EAAA,CAAA;yLASjB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEE,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEiB,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU,CAAA;gBAEO,aAAa,EAAA,CAAA;sBAAxC,SAAS;uBAAC,eAAe,CAAA;gBAEK,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;gBA8C7B,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAa5C,MAAM,EAAA,CAAA;sBADL,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;ME5HxB,yBAAyB,CAAA;AALtC,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW,CAAC;KAWvD;AAPC;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;;uHAdU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,2JCPtC,+QASA,EAAA,MAAA,EAAA,CAAA,4jCAAA,CAAA,EAAA,CAAA,CAAA;4FDFa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,+QAAA,EAAA,MAAA,EAAA,CAAA,4jCAAA,CAAA,EAAA,CAAA;8BAMnB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEE,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEIK,oBAAoB,CAAA;AAoB/B,IAAA,WAAA,CAAoB,WAAuB,EAAA;AAAvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAnBlC,QAAA,IAAU,CAAA,UAAA,GAAiB,EAAE,CAAC;AAC9B,QAAA,IAAkB,CAAA,kBAAA,GAAiB,EAAE,CAAC;AACtC,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AACf,QAAA,IAAK,CAAA,KAAA,GAAG,OAAO,CAAC;AAChB,QAAA,IAAW,CAAA,WAAA,GAAG,cAAc,CAAC;AAC7B,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAElB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAW,CAAC;AAClD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAc,CAAC;AAElD,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AACf,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AACf,QAAA,IAAyB,CAAA,yBAAA,GAAwB,IAAI,CAAC;AAEtD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAClD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;KAEf;AAExC,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACzB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;AAGD,IAAA,cAAc,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACrB,SAAA;KACF;IAEM,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;AACvC,SAAA;KACF;AAED,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;YAC3C,OAAO,IAAI,CAAC,yBAAyB,CAAC;AACvC,SAAA;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAEM,cAAc,GAAA;;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,OAAO;AACR,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE/C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACxE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC5C,gBAAA,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;gBAEvB,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,gBAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC/B,oBAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,MAAM;wBAAE,MAAM;oBACnB,OAAO,GAAG,MAAM,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGpE,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,IAAI,MAAA,EAAE,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACvB,gBAAA,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,aAAA;AACF,SAAA;QAED,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC/D;AAED,IAAA,IAAW,aAAa,GAAA;;AACtB,QAAA,OAAO,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI,CAAC,CAAC;KAC5D;AAED,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AAClD,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;AACzC,SAAA;QACD,OAAO,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW,CAAC;KAC5B;AAED,IAAA,IAAW,cAAc,GAAA;;AACvB,QAAA,OAAO,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAI,KAAK,CAAC;KACvD;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnD;AAEM,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjC;IAEO,eAAe,GAAA;;QACrB,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;YAAE,OAAO;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,IAAG,CAAC,CAAA,EAAA,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,WAAW;YAAE,OAAO;AAEzB,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B,CAAC;AACnD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AAEpB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACnC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACnC,wBAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1B,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,YAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,MAAM;oBAAE,MAAM;gBACnB,OAAO,GAAG,MAAM,CAAC;AAClB,aAAA;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,MAAM,aAAa,GAAG,CAAC,IAAgB,KAAY;;YACjD,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAAE,gBAAA,OAAO,CAAC,CAAC;YACrC,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,YAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,gBAAA,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AACzC,oBAAA,KAAK,IAAI,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAC5C,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;AACF,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,aAAA;AACF,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,KAAmB,EAAA;AACtC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,MAAM,OAAO,GAAiB,EAAE,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAgB,KAAI;;AACjC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,YAAA,IAAI,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,oBAAA,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,KAAK,CAAC,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;AACF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAEM,IAAA,iBAAiB,CAAC,MAAkB,EAAA;AACzC,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KACxD;AAEM,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;KAChC;AAEM,IAAA,aAAa,CAAC,MAAkB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;KAClD;AAEM,IAAA,uBAAuB,CAAC,MAAkB,EAAA;;QAC/C,IAAI,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,KAAK,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;AACzC,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAClE,OAAO,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;KACjE;AAEO,IAAA,iBAAiB,CAAC,MAAkB,EAAA;;QAC1C,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,MAAM,CAAC;AAC5C,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,wBAAwB,CAAC,MAAkB,EAAA;;AACjD,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI;YAAE,OAAO;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,IAAI,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA;YAAE,OAAO;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACxD,QAAA,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC;AAC5B,QAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;KACvC;AAEO,IAAA,iBAAiB,CAAC,IAAgB,EAAA;;QACxC,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;YAAE,OAAO;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;;AAC7B,YAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;gBACtB,OAAO;AACR,aAAA;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAS,IAAI,CAAC,EAAE,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,gBAAA,IAAI,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACzB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,iBAAiB,CAAC,MAAkB,EAAA;;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAc,EAAE,CAAC;QAClC,IAAI,OAAO,GAA2B,MAAM,CAAC;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,QAAS,CAAC,CAAC;AACrD,YAAA,IAAI,EAAC,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;AAC7B,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAChE,WAAW,CAAC,IAAI,CAAC,OAAQ,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;AAC/C,aAAA;YACD,OAAO,GAAG,MAAM,CAAC;AAClB,SAAA;QAED,WAAW,CAAC,OAAO,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAa,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,WAAW,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE9B,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;AAC1C,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAC1C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAEM,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;;kHA9SU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,+cCjBjC,4rHA4EA,EAAA,MAAA,EAAA,CAAA,snGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD3Da,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,4rHAAA,EAAA,MAAA,EAAA,CAAA,snGAAA,CAAA,EAAA,CAAA;iGAKb,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAkBP,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEtCjC,yBAAyB,CAAA;AAkBpC,IAAA,WAAA,GAAA;AAdU,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AAQ1C,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;KAMT;IAEjB,QAAQ,GAAA;KACP;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;AACpC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,aAAA;AACI,iBAAA;AACH,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACzB,aAAA;AACF,SAAA;KACF;AAEM,IAAA,UAAU,CAAC,KAAU,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3C;;uHAvCU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,2OCPtC,ylBAmBA,EAAA,MAAA,EAAA,CAAA,mhDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDZa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,WAAW,EAAA,QAAA,EAAA,ylBAAA,EAAA,MAAA,EAAA,CAAA,mhDAAA,CAAA,EAAA,CAAA;0EAMZ,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEE,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEdK,YAAY,CAAA;AALzB,IAAA,WAAA,GAAA;AAMa,QAAA,IAAI,CAAA,IAAA,GAAyB,SAAS,CAAC;KACnD;;0GAFY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,6ECPzB,kFAGA,EAAA,MAAA,EAAA,CAAA,4aAAA,CAAA,EAAA,CAAA,CAAA;4FDIa,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,SAAS;+BACI,aAAa,EAAA,QAAA,EAAA,kFAAA,EAAA,MAAA,EAAA,CAAA,4aAAA,CAAA,EAAA,CAAA;8BAKd,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MEsBG,oBAAoB,CAAA;AAyD/B,IAAA,WAAA,CAAmB,QAAmB,EAAA;AAAnB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QAxD7B,IAAA,CAAA,MAAM,GAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAItC,QAAA,IAAQ,CAAA,QAAA,GAAG,OAAO,CAAC;AAEnB,QAAA,IAAa,CAAA,aAAA,GAAwB,OAAO,CAAC;AAE5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAE3C,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW,CAAC;AAE/C,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAYtB,QAAA,IAAc,CAAA,cAAA,GAAyB,OAAO,CAAC;AAEjD,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAEhB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAiB,CAAA,iBAAA,GAAQ,EAAE,CAAC;AAI7B,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAInB,QAAA,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;AAE5B,QAAA,IAAkB,CAAA,kBAAA,GAAG,mBAAmB,CAAC;AAEzC,QAAA,IAAwB,CAAA,wBAAA,GAA8B,EAAE,CAAC;KAMtB;AAEnC,IAAA,WAAW,CAAC,OAAY,EAAA;;QAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;;YAEjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;0BAC7B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC;0BAC7C,EAAE,CAAC;AACR,iBAAA;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvD,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;;AAG5C,oBAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;AAC/D,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAC3D,qBAAA;AACF,iBAAA;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3D,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACvB,iBAAA;AAED,gBAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AACtC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,iBAAA;AACF,aAAA;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;AACjD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAEjE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,SAAA;QAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;AAGD,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;;YAEnC,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzD,OAAO;AACR,SAAA;;QAGD,IAAI,CAAC,IAAI,EAAE,CAAC;;QAGZ,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAGD,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC3C;IAGD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC3C;AAGD,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACR,SAAA;AAED,QAAA,IACE,KAAK,CAAC,GAAG,KAAK,SAAS;YACvB,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,QAAQ;YACtB,KAAK,CAAC,GAAG,KAAK,UAAU;YACxB,KAAK,CAAC,GAAG,KAAK,MAAM;AACpB,YAAA,KAAK,CAAC,GAAG,KAAK,KAAK,EACnB;AACA,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACnC,OAAO;AACR,aAAA;YAED,IACE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC5C;gBACA,OAAO;AACR,aAAA;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC/B,SAAA;KACF;IAEM,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;KAC1B;AAEM,IAAA,eAAe,CAAC,IAAuB,EAAA;;QAC5C,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,OAAO,CAAA,MAAA,IAAI,CAAC,kBAAkB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,IAAG,CAAC,CAAC;AAC5C,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,UAAU,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACnC,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,uBAAuB,CAC7B,KAGG,EAAA;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;AAChC,YAAA,OAAO,OAAO,CACZ,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ;AACvB,kBAAE,OAAO,EAAE,CAAC,EAAE,KAAK,SAAS;kBAC1B,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ;AACtC,sBAAE,OAAO,EAAE,CAAC,IAAI,KAAK,SAAS;AAC9B,sBAAE,EAAE,CAAC,IAAI,CACZ,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;;AAE/C,QAAA,SAAS,CAAC,OAAO,CACf,CAAC,EAAmB,EAAE,KAAa,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAC3D,CAAC;AACF,QAAA,OAAO,SAAS,CAAC;KAClB;AAEM,IAAA,WAAW,CAAC,IAAuB,EAAA;QACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;KAClE;AAEM,IAAA,YAAY,CAAC,IAAuB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACpE,YAAA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;AACpD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AACtC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC9D,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5D,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAEM,iBAAiB,GAAA;;;AAGtB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAEa,IAAA,uBAAuB,CAAC,iBAA0B,EAAA;;YAC9D,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC1C,IAAI,UAAU,CAAC,aAAa,EAAE;AAC5B,oBAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,oBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACnC,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC7D,iBAAA;AACF,aAAA;AAED,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;YAG5B,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,CAAA,CAAA;AAAA,KAAA;IAEO,WAAW,GAAA;;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;gBACrC,IAAI,UAAU,CAAC,aAAa,EAAE;oBAC5B,IAAI,UAAU,CAAC,YAAY,EAAE;;wBAE3B,OAAO,GAAG,IAAI,CAAC;AAChB,qBAAA;AAAM,yBAAA,IAAI,MAAA,UAAU,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;wBAChD,OAAO,GAAG,IAAI,CAAC;AAChB,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC5C,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;;AAE7B,wBAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AACxD,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;4BACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,yBAAA;;AAGD,wBAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC/C,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;4BACtC,MAAM,YAAY,GAChB,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;AAC7D,4BAAA,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE;AACtE,gCAAA,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;gCAEvB,IAAI,OAAO,GAAG,EAAE,CAAC;gCACjB,OAAO,OAAO,CAAC,QAAQ,EAAE;AACvB,oCAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oCAClC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,oCAAA,IAAI,CAAC,OAAO;wCAAE,MAAM;AACrB,iCAAA;AACF,6BAAA;AACF,yBAAA;wBACD,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAC1D,CAAC,EAAE,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/B,CAAC;;AAEF,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC9C,4BAAA,IAAI,MAAA,EAAE,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACvB,gCAAA,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,6BAAA;AACF,yBAAA;AACD,wBAAA,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC7F,qBAAA;AAAM,yBAAA;AACL,wBAAA,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;4BAClE,MAAM,YAAY,GAChB,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;AAC7D,4BAAA,OAAO,YAAY;AAChB,iCAAA,WAAW,EAAE;iCACb,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7C,yBAAC,CAAC,CAAC;AACH,wBAAA,IAAI,MAAM,EAAE;AACV,4BAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AACxD,4BAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;gCACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,6BAAA;AACD,4BAAA,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC7F,yBAAA;AACF,qBAAA;AAED,oBAAA,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE;wBACxC,OAAO,GAAG,IAAI,CAAC;AAChB,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC1C,IACE,IAAI,CAAC,UAAU;AACf,oBAAA,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAChE;AACA,oBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACpC,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC5C,IACE,IAAI,CAAC,UAAU;AACf,oBAAA,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,EAClE;AACA,oBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACpC,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC;KACvD;IAEY,QAAQ,CAAC,IAAuB,EAAE,iBAA0B,EAAA;;YACvE,IAAI;AACF,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,oBAAA,MAAM,yBAAyB,CAAC;AACjC,iBAAA;AACD,gBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC9B,iBAAA;;AAGD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,EAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAC9B,KAAK,CACN,CAAC;gBAEF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC;;gBAG5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;AAGnE,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;qBAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;qBACxB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpB,gBAAA,IAAI,iBAAiB,EAAE;;oBAErB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACtD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC,CAAC;;AAEF,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9D,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxE,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE;wBAC1C,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACjD,qBAAA;AACF,iBAAA;AACF,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpB,aAAA;AAAS,oBAAA;AACR,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;AAEM,IAAA,UAAU,CAAC,IAAuB,EAAA;;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,kBAAkB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;AAClE,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,iBAAA;AACF,aAAA;AACF,SAAA;KACF;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;AACjD,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpC,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAE/B,gBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AACpC,oBAAA,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AAC5B,iBAAA;AACF,aAAA;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC7C,aAAA;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC7C,aAAA;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACxB,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC9B,oBAAA,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,wBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnB,qBAAA;AAAM,yBAAA;AACL,wBAAA,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;AACpB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;KACF;IAEO,sBAAsB,GAAA;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpC,QAAQ,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,aAAa;oBAChB,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,wBAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;4BACtC,QAAQ,CAAC,OAAO,GAAG,SAAS;kCACxB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;kCAC/B,KAAK,CAAC;AACX,yBAAA;AACF,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AACnD,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,GAAG,EAAE,IAAI;qBACV,CAAC;oBACF,MAAM;AACR,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC1D,MAAM;AACR,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClD,MAAM;AACR,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM;AACR,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtD,MAAM;AACT,aAAA;AACF,SAAA;KACF;IAEM,KAAK,GAAA;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAE5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACrC;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,IAAI,CAAC;AACjB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACjD,OAAO;AACR,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACxB,SAAA;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAGpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAEO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;QAEvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;;gBAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;;AAGlD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,CAAC,CAAa,EAAE,CAAa,KAC3B,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAClD,CAAC;AACH,aAAA;AACF,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,IAAI,IAAI,CAAC,aAAa,EAAE;;;AAGtB,gBAAA,IACE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAClE;AACA,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,aAAA;AACF,SAAA;QAED,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,gBAAgB,CAAE,CAAA,CAAC,CAAC;AACpE,SAAA;AACD,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,SAAA;KACF;IAEO,eAAe,GAAA;;QACrB,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpC,QAAQ,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,aAAa;oBAChB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC7C,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;6BAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;6BACxB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBAEpB,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,4BAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AAC/B,yBAAA;AACF,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;wBAChE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,aAAa;oBAChB,IACE,IAAI,CAAC,WAAW;AAChB,wBAAA,QAAO,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAA,KAAK,QAAQ;AAC3C,wBAAA,QAAO,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,CAAA,KAAK,QAAQ,EACzC;wBACA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,QAAQ;oBACX,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;oBACzC,MAAM;AACR,gBAAA,KAAK,MAAM;oBACT,IAAI,IAAI,CAAC,IAAI,EAAE;wBACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,OAAO;oBACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,CAAC;oBACnE,MAAM;AACT,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC;IAEM,YAAY,CAAC,KAAa,EAAE,IAAuB,EAAA;QACxD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC;KACvE;IAEM,YAAY,CAAC,IAAgB,EAAE,UAA6B,EAAA;QACjE,IAAI,UAAU,CAAC,aAAa,EAAE;;YAE5B,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACrE,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,aAAA;;AAED,YAAA,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AACxE,SAAA;;KAEF;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACpC,SAAA;KACF;AAEM,IAAA,eAAe,CAAC,IAAuB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,IACE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ;AACzC,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,QAAQ;gBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAC3C;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,CAAA,2EAAA,CAA6E,CAC9E,CAAC;AACF,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7B,YAAA,IACE,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,IAAI,CAAC,SAAS,CAAC,GAAG;AAClB,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAC7D;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,CAAA,gEAAA,CAAkE,CACnE,CAAC;AACF,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,eAAe,CAAC,MAA4B,OAAO,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAA4B,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;AAEvB,QAAA,MAAM,IAAI,GACR,GAAG,KAAK,OAAO;AACb,cAAE,IAAI,CAAC,qBAAqB,EAAE;AAC9B,cAAE,SAAS,CAAC,qBAAqB,EAAE,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACrB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC;QAExC,IAAI,GAAG,KAAK,UAAU,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACxD,gBAAA,IAAI,CAAC,SAAS;AACZ,oBAAA,kBAAkB,KAAK,MAAM;AAC3B,0BAAE,CAAG,EAAA,MAAM,CAAC,UAAU,GAAG,KAAK,CAAI,EAAA,CAAA;0BAChC,OAAO,CAAC;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,kBAAkB,KAAK,OAAO,GAAG,CAAA,EAAG,IAAI,CAAI,EAAA,CAAA,GAAG,OAAO,CAAC;AACxE,aAAA;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACzC,IAAI,CAAC,SAAS,GAAG,CAAG,EAAA,MAAM,CAAC,UAAU,GAAG,KAAK,CAAA,EAAA,CAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACzB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAG,EAAA,IAAI,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AAC1B,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACpD,gBAAA,IAAI,CAAC,OAAO;AACV,oBAAA,gBAAgB,KAAK,QAAQ,GAAG,CAAG,EAAA,GAAG,GAAG,EAAE,CAAI,EAAA,CAAA,GAAG,OAAO,CAAC;AAC5D,gBAAA,IAAI,CAAC,UAAU,GAAG,gBAAgB,KAAK,KAAK,GAAG,CAAA,EAAG,MAAM,CAAI,EAAA,CAAA,GAAG,OAAO,CAAC;AACxE,aAAA;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvB,IAAI,CAAC,UAAU,GAAG,CAAA,EAAG,MAAM,GAAG,EAAE,IAAI,CAAC;AACtC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,GAAG,GAAG,EAAE,IAAI,CAAC;AAC/B,gBAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,eAAe,GAAG,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC/C,gBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5C,aAAA;AAAM,iBAAA;AACL,gBAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;AACpE,gBAAA,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC;AAClE,aAAA;AACD,YAAA;gBACE,eAAe;gBACf,gBAAgB;gBAChB,cAAc;gBACd,iBAAiB;AAClB,aAAA,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAY,SAAA,EAAA,eAAe,CAAE,CAAA,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAY,SAAA,EAAA,aAAa,CAAE,CAAA,CAAC,CAAC;AAChE,SAAA;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,MAAM,GAAG,GACP,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AACnE,QAAA,OAAO,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC;KACxD;IAEO,qBAAqB,GAAA;AAC3B,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;AACpE,QAAA,OAAO,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;KACxD;IAEM,0BAA0B,GAAA;QAI/B,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;oBACvC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACpC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC3D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACxD,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;oBACxC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACrC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC5D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACzD,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;oBACzC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AACtC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC9D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC3D,iBAAA;AACF,aAAA;SACF,CAAC;KACH;IAEO,aAAa,CAAC,KAAmB,EAAE,OAAyC,EAAA;AAClF,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,MAAM,OAAO,GAAiB,EAAE,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAgB,KAAI;;AACjC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,YAAA,IAAI,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnC,oBAAA,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,KAAK,CAAC,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;AACF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAEM,IAAA,WAAW,CAAC,UAA6B,EAAA;;QAC9C,OAAO,CAAA,CAAA,EAAA,GAAA,UAAU,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,IAAG,CAAC,CAAA,EAAA,CAAC,KAAI,KAAK,CAAC;KAC1E;IAEM,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;KACvD;AAEM,IAAA,0BAA0B,CAAC,IAAI,EAAA;QACpC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;KACpD;AAEM,IAAA,mBAAmB,CAAC,IAAI,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACvE,SAAA;KACF;AAED,IAAA,IAAW,mBAAmB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC3B,CAAC,IAAI,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,IAAG,CAAC,CAAA,EAAA,CACrE,CAAC;KACH;AAED,IAAA,IAAW,aAAa,GAAA;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;AAClD,gBAAA,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC1D,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;kHAv2BU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,w3BC9BjC,wlhBA2QA,EAAA,MAAA,EAAA,CAAA,i9KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,yBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,aAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,YAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD7Oa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,wlhBAAA,EAAA,MAAA,EAAA,CAAA,i9KAAA,CAAA,EAAA,CAAA;gGAKb,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEE,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEE,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBA0BqC,SAAS,EAAA,CAAA;sBAAnD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAGzC,iBAAiB,EAAA,CAAA;sBADhB,SAAS;gBAAC,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAgD7C,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAuB5C,kBAAkB,EAAA,CAAA;sBADjB,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAUzC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAUzC,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEvK/B,0BAA0B,CAAA;AAEnC,IAAA,WAAA,CAAmB,QAA0B,EAAA;AAA1B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;KAAK;;wHAFzC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4GAA1B,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;iBAClC,CAAA;;;MCCY,yBAAyB,CAAA;AAElC,IAAA,WAAA,CAAmB,QAA0B,EAAA;AAA1B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;KAAK;;uHAFzC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2GAAzB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;iBACjC,CAAA;;;MCCY,0BAA0B,CAAA;AAErC,IAAA,WAAA,CAAmB,QAAkC,EAAA;AAAlC,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA0B;KAAK;;wHAF/C,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4GAA1B,0BAA0B,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;iBACvC,CAAA;;;MCQY,oBAAoB,CAAA;AAsJ7B,IAAA,WAAA,CACY,QAAoB,EAAA;AAApB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AAhJhC;;AAEG;AACO,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO,CAAC;AAEtD;;AAEG;AACM,QAAA,IAAO,CAAA,OAAA,GAAU,EAAE,CAAC;AAE7B;;AAEG;AACM,QAAA,IAAW,CAAA,WAAA,GAAG,cAAc,CAAC;AA4BtC;;AAEG;AACM,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAE1B;;AAEG;AACM,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAEzB;;AAEG;AACM,QAAA,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;AAE9B;;AAEG;AACM,QAAA,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;AAE9B;;AAEG;AACM,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAErC;;AAEG;AACM,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AAE9C;;AAEE;AACO,QAAA,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;AAO7C;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEpE;;AAEK;AACI,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AAO7C;;AAEG;AACM,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAY/B;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEpE;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAO,CAAC;AAO9D;;AAEG;AACI,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAEhB,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAEf,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAI3B,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEpB,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;KAI3B;AAmBD,IAAA,eAAe,CAAC,KAAK,EAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEvC,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACpD,OAAO;AACV,SAAA;;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAC3B;IAGD,MAAM,GAAA;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAEM,IAAA,WAAW,CAAC,SAAc,EAAA;;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE;YAC1B,IAAI,IAAI,CAAC,aAAa,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;AAChD,gBAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;AAEnD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAEM,YAAY,GAAA;QACf,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACxD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;AAC/E,SAAA;KACJ;AAEM,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAClC,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;AAGO,IAAA,YAAY,CAAC,KAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;;AAGzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAC3B;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,SAAA;KACJ;;AAGO,IAAA,YAAY,CAAC,KAAsB,EAAA;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACzB,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAEO,IAAA,cAAc,CAAC,OAAgB,EAAA;;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;YAChD,OAAO;AACV,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAa,KAAI;YAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;YAC9E,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,UAAU,GAAG,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,aAAA;AAAM,iBAAA,IAAI,CAAC,OAAO,IAAI,UAAU,IAAI,CAAC,EAAE;gBACpC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC1C,aAAA;;AAED,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,eAAe,CAAC,KAAsB,EAAA;AAC1C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;AACvE,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,SAAA;KACJ;IAEM,SAAS,GAAA;QACZ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEM,cAAc,GAAA;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,SAAA;KACJ;IAEO,aAAa,GAAA;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,OAAO;AACV,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACrF;AAEM,IAAA,UAAU,CAAC,MAAuB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7E,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC;AACpD,SAAA;KACJ;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrB,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAE9C,IAAI,aAAa,KAAK,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAG,EAAA,aAAa,WAAW,CAAC;AAChD,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,SAAA;KACJ;AAEM,IAAA,gBAAgB,CAAC,GAAoB,EAAA;;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5B,SAAA;AAAM,aAAA;YACH,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AACzD,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5B,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvC,oBAAA,OAAO,EAAE,CAAC;AACb,iBAAA;gBACD,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAA;AAC5D,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAN,MAAM,GAAI,GAAG,CAAC,CAAC;AACtC,aAAA;AACJ,SAAA;KACJ;AAEM,IAAA,OAAO,CAAC,MAAuB,EAAA;AAClC,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC5B,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,qBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;qBAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,gBAAA,OAAO,aAAa,CAAC;AACxB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAC5F,gBAAA,OAAO,EAAE,CAAC;AACb,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;KACJ;AAGO,IAAA,KAAK,CAAC,MAAuB,EAAA;AACjC,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC5B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;AACvF,gBAAA,OAAO,EAAE,CAAC;AACb,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;KACJ;IAEO,oBAAoB,CAAC,MAAW,EAAE,IAAY,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACrC,YAAA,IAAI,GAAG,EAAE;AACL,gBAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;SACJ,EAAE,MAAM,CAAC,CAAC;KACd;IAEY,YAAY,CAAC,UAAA,GAAsB,KAAK,EAAA;;;AAEjD,YAAA,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtC,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;SAC3B,CAAA,CAAA;AAAA,KAAA;IAEO,UAAU,GAAA;;;QAGd,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACjD,EAAE,CAAC,CAAC,CAAC;KACT;IAEO,eAAe,GAAA;;QAEnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,CAAC;KAC/D;IAEO,gBAAgB,GAAA;QAEpB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC;AACrC,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AAEhD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AAElC,QAAA,IAAI,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACI,aAAA;AACD,YAAA,OAAO,QAAQ,CAAA;AAClB,SAAA;KACJ;IAEO,gBAAgB,GAAA;AACpB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACrD,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC;AACnD,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;KACxB;IAEO,mBAAmB,GAAA;AACvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAA4B,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAgB,CAAC;QACxF,OAAO,SAAS,CAAC,YAAY,CAAC;KACjC;IAEM,kBAAkB,GAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;KAC1B;IAEM,kBAAkB,GAAA;QACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;KAC1B;AAIY,IAAA,QAAQ,CAAC,iBAA0B,EAAA;;YAC5C,IAAI;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,oBAAA,MAAM,yBAAyB,CAAA;AAClC,iBAAA;AACD,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC7B,iBAAA;;AAGD,gBAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;gBAC5D,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAE1G,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;;AAG9C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAuB,CAAC;gBAEhD,IAAI,iBAAiB,KAAI,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE;;oBAGzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,oBAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAY,CAAC,CAAC,CAAC;;AAGtE,oBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;oBACxE,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAEjE,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,iBAAA;;gBAID,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEhE,aAAA;AACD,YAAA,OAAO,GAAG,EAAE;AACR,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtB,aAAA;AACO,oBAAA;AACJ,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;;kHA5gBQ,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,s+BA6Jf,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAK1B,yBAAyB,EAKzB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,0BAA0B,qECnL5C,4pOA6IA,EAAA,MAAA,EAAA,CAAA,gvFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,YAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDjIa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACI,YAAY,EAAA,QAAA,EAAA,4pOAAA,EAAA,MAAA,EAAA,CAAA,gvFAAA,CAAA,EAAA,CAAA;iGASb,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKI,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAKE,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAKG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAKG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAMG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAKE,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAKI,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAKE,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAKG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAKI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAKG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBA+BmC,cAAc,EAAA,CAAA;sBAAvD,YAAY;uBAAC,0BAA0B,CAAA;gBAKC,aAAa,EAAA,CAAA;sBAArD,YAAY;uBAAC,yBAAyB,CAAA;gBAKG,cAAc,EAAA,CAAA;sBAAvD,YAAY;uBAAC,0BAA0B,CAAA;gBAIxC,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAc5C,MAAM,EAAA,CAAA;sBADL,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;ME1LxB,2BAA2B,CAAA;AAgCtC,IAAA,WAAA,GAAA;AAhBU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU,CAAC;AAExC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU,CAAC;AAQ9C,QAAA,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;AAEjB,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAK/C,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACnB;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC7B,SAAA;KACF;IAEM,QAAQ,GAAA;QACb,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;YACnC,OAAO;AACR,SAAA;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAEM,cAAc,GAAA;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;IAEM,UAAU,GAAA;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AAEpC,QAAA,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,SAAA;KACF;IAEM,oBAAoB,GAAA;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAEtC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;AACnC,YAAA,KAAK,EAAE,CAAC;AACT,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;;yHAzFU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,oNCTxC,+1BAqBA,EAAA,MAAA,EAAA,CAAA,orCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAlB,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDZa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,+1BAAA,EAAA,MAAA,EAAA,CAAA,orCAAA,CAAA,EAAA,CAAA;0EAQrB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAKG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;;;MEnBI,wBAAwB,CAAA;AA8CnC,IAAA,WAAA,GAAA;AA1CS,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AAEtB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AAEzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW,CAAC;AAE3C,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;QAEf,IAAA,CAAA,WAAW,GAA6F;AAC7G,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE,4DAA4D;AACnE,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE,+DAA+D;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,IAAI,EAAE,+DAA+D;AACtE,aAAA;SACF,CAAC;QAEK,IAAA,CAAA,aAAa,GAAG;AACrB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,IAAI,EAAE,+DAA+D;SACtE,CAAC;AAIK,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC5C;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;YACpF,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAEM,WAAW,GAAA;QAChB,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAE5B,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACvK,gBAAA,IAAI,eAAe,EAAE;oBACnB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC;AAC7D,oBAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;AACtD,oBAAA,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;oBAClE,UAAU,CAAC,MAAK;wBACd,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACjF,yBAAA;6BAAM,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE;AAClE,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3E,yBAAA;wBACD,IAAI,CAAC,YAAY,EAAE,CAAC;AACtB,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3C,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3C,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,CAAsB,mBAAA,EAAA,IAAI,CAAC,KAAK,CAAE,CAAA,EAAE,GAAG,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3C,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,OAAO,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAEM,IAAA,YAAY,CAAC,KAAwB,EAAA;;QAG1C,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC/E,MAAM,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAI,CAAA,EAAA,SAAS,CAAE,CAAA,GAAE,SAAS,CAAA;QACpD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC3C,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9B,SAAA;AACD,QAAA,MAAM,UAAU,GAAG,CAAG,EAAA,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAG,EAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AACjF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;YACL,IAAI;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACxG,aAAA;YAAC,OAAM,EAAA,EAAA;AACN,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAA;AACF,SAAA;KACF;IAEM,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;IAEM,MAAM,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;;sHAtIU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,2NCRrC,k1DA+CA,EAAA,MAAA,EAAA,CAAA,83CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,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,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,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,CAAA,EAAA,CAAA,CAAA;4FDvCa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,k1DAAA,EAAA,MAAA,EAAA,CAAA,83CAAA,CAAA,EAAA,CAAA;0EAMlB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEE,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEXK,wBAAwB,CAAA;AALrC,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB,CAAC;KAmB3D;IAfQ,UAAU,GAAA;QACf,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM;AACR,YAAA;AACE,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,SAAA;KACF;;sHAtBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,mICPrC,qbAeA,EAAA,MAAA,EAAA,CAAA,0RAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDRa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,qbAAA,EAAA,MAAA,EAAA,CAAA,0RAAA,CAAA,EAAA,CAAA;8BAMX,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEE,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MENK,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW,CAAC;AAE7C,QAAA,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC;AAEf,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;KAS3B;AAPC;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;;kHAhBU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,yKCPjC,waAYM,EAAA,MAAA,EAAA,CAAA,ysBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDLO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,waAAA,EAAA,MAAA,EAAA,CAAA,ysBAAA,CAAA,EAAA,CAAA;8BAMb,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEE,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MERK,uBAAuB,CAAA;;qHAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,oICPpC,iOAWA,EAAA,MAAA,EAAA,CAAA,upBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmB,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDJa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,upBAAA,CAAA,EAAA,CAAA;8BAMjB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MERG,wBAAwB,CAAA;AALrC,IAAA,WAAA,GAAA;AAaW,QAAA,IAAM,CAAA,MAAA,GAAG,EAAE,CAAC;KAYtB;AAVU,IAAA,WAAW,CAAC,OAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,GAAG,CAAA,yDAAA,EAA4D,IAAI,CAAC,MAAM,CAAM,GAAA,EAAA,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAE,CAAA;AAC7G,gBAAA,CAAA,8DAAA,CAAgE,CAAC;AACxE,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,SAAA;KACJ;;sHAlBQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kICPrC,mGAGA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDIa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACI,iBAAiB,EAAA,QAAA,EAAA,mGAAA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,CAAA;8BAMlB,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEbGC,WAAS,CAAA;AAKlB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;IAEM,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,CAAC;gBACV,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;KACN;IAEM,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEjB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAkB,CAAC;AAC/D,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC1B,SAAA;KACJ;IAGM,MAAM,GAAA;QAET,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAEJ;;MClCY,YAAY,CAAA;AAMR,IAAA,UAAU,CAAC,GAAkC,EAAA;;YACtD,IAAI;AACA,gBAAA,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAEhC,IAAI,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;oBAExC,OAAO;AACV,iBAAA;AAED,gBAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAA,IAAA,CAAM,CAAC,CAAA;;;gBAKvC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,gBAAA,QAAQ,GAAG;AACP,oBAAA,KAAK,KAAK;;AAEN,wBAAA,IAAI,CAAC,eAAe,CAAC,0DAA0D,CAAC,CAAC;AACjF,wBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;wBACtC,MAAM;AACV,oBAAA,KAAK,QAAQ;AACT,wBAAA,IAAI,CAAC,eAAe,CAAC,mEAAmE,CAAC,CAAC;AAC1F,wBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBACnC,MAAM;AACV,oBAAA,KAAK,UAAU;;AAEX,wBAAA,IAAI,CAAC,eAAe,CAAC,qEAAqE,CAAC,CAAC;AAC5F,wBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;wBACzC,MAAM;AACV,oBAAA;wBACI,MAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,CAAG,CAAA;AACnC,iBAAA;AAED,gBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAA,QAAA,CAAU,CAAC,CAAA;AAEtC,gBAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,aAAA;AACO,oBAAA;AACJ,gBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAChC,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,eAAe,CAAC,GAAW,EAAA;QAC/B,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnE,QAAA,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE/C,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;;QAEjB,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;AACH,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACrC,SAAA;KACJ;AAEa,IAAA,iBAAiB,CAAC,aAAqB,EAAA;;YAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;;AAGnC,YAAA,OAAO,IAAI,EAAE;AACT,gBAAA,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;oBACvB,MAAM;AACT,iBAAA;AACD,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEvB,gBAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;AACtB,oBAAA,MAAM,0CAA0C,CAAA;AACnD,iBAAA;AACJ,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;IAEO,aAAa,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;KACvB;;AAhFc,YAAW,CAAA,WAAA,GAAa,EAAG,CAAA;AAE3B,YAAA,CAAA,KAAK,GAAG,IAAIA,WAAS,EAAG,CAAA;0GAJ9B,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA,CAAA;4FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;iBACrB,CAAA;;;MCUY,aAAa,CAAA;AAMtB,IAAA,WAAA,CACY,aAA2B,EAAA;AAA3B,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAc;KAClC;AAEL;;;AAGG;AACU,IAAA,YAAY,CAAC,OAKzB,EAAA;;;AAEG,YAAA,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE9B,YAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAEvC,YAAA,OAAO,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;SAC1F,CAAA,CAAA;AAAA,KAAA;AAED;;;;AAIG;AACU,IAAA,eAAe,CAAC,GAAW,EAAE,MAAc,EAAE,KAAa,EAAA;;;AAEnE,YAAA,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AAExB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAEhC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAEzC,YAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACrD,YAAA,OAAO,GAAG,CAAC;SACd,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,SAAS,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,YAAA,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAChB,KAAK,CAAC,MAAM,GAAG,YAAA;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,aAAC,CAAC;AACN,SAAC,CAAC,CAAA;KAEL;IAEa,UAAU,GAAA;;YACpB,IAAI;AACA,gBAAA,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAEjC,IAAI,aAAa,CAAC,eAAe,EAAE;oBAC/B,OAAO;AACV,iBAAA;AAED,gBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAE9B,MAAM,OAAO,CAAC,GAAG,CAAC;AACd,oBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;AACvC,oBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;AAC5C,iBAAA,CAAC,CAAC;AAEH,gBAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAE9B,gBAAA,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;AACxC,aAAA;AACO,oBAAA;AACJ,gBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;IAEO,aAAa,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;KACvB;;AA7Fc,aAAe,CAAA,eAAA,GAAG,KAAM,CAAA;AAExB,aAAA,CAAA,KAAK,GAAG,IAAIA,WAAS,EAAG,CAAA;2GAJ9B,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA;4FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;iBACrB,CAAA;;;MCOY,eAAe,CAAA;IA2F1B,WAAoB,CAAA,OAAsB,EAAS,KAAwB,EAAA;AAAvD,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;AAAS,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;AAtFlE,QAAA,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;AAET,QAAA,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AAEV,QAAA,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;AAEX,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAE7B,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAE5B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAEpC,QAAA,IAAiB,CAAA,iBAAA,GAAW,CAAC,CAAC,CAAC;QAE/B,IAAA,CAAA,SAAS,GAA2B,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAExE,QAAA,IAAY,CAAA,YAAA,GAA4C,EAAE,CAAC;AAE3D,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAIjB,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAC3B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAW1B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAqB,CAAC;AAElD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW,CAAA;AAC9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW,CAAA;AAE9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAM,CAAC;AAE3C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAGtC,CAAC;AAEG,QAAA,IAAY,CAAA,YAAA,GAA+B,EAAE,CAAC;AAM9C,QAAA,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;AAEjB,QAAA,IAAS,CAAA,SAAA,GAAoB,EAAE,CAAC;AAExC,QAAA,IAAa,CAAA,aAAA,GAAW,SAAS,CAAC;AAElC,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAE3B,IAAA,CAAA,KAAK,GAAG;YACN,KAAK,EAAE,IAAI,KAAK,EAAE;YAClB,MAAM,EAAE,IAAI,KAAK,EAAE;YACnB,MAAM,EAAE,IAAI,KAAK,EAAE;SACpB,CAAC;QACM,IAAA,CAAA,KAAK,GAAG;AACd,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,KAAK,EAAE,CAAC;SACT,CAAC;AACF,QAAA,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QACxB,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;SACxC,CAAC;KAI6E;IA3D/E,IAAa,IAAI,CAAC,SAAkB,EAAA;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AAC5C,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC9B,SAAA;KACF;IAwDM,eAAe,GAAA;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;QAC3C,UAAU,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACpB,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;;AAEpB,SAAC,CAAA,EAAE,CAAC,CAAC,CAAC;KACP;IAEM,YAAY,GAAA;QACf,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;AAE3D,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC;gBAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,CAC5B,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK;AACnD,gBAAA,OAAO,EACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACrE,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KAEJ;AACQ,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAEvC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;;QAED,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE;YACjE,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB,aAAA;AACF,SAAA;;QAED,IACE,OAAO,CAAC,WAAW,CAAC;AACpB,YAAA,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY;YACjC,IAAI,CAAC,OAAO,EACV;YAEF,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5C,gBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS;sBAC5C,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;sBACpC,IAAI,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;AACzD,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC1B,aAAA;AACF,SAAA;;QAED,IACE,OAAO,CAAC,YAAY,CAAC;AACrB,YAAA,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AAClC,YAAA,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,OAAO,EACV;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,SAAA;QACD,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,IAAI,CAAC,OAAO,EACb;YACC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,CAAA;AAClD,YAAA,IAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,EAAC;gBACpC,UAAU,CAAC,MAAK;oBACf,IAAI,CAAC,IAAI,EAAE,CAAC;iBACZ,EAAE,CAAC,CAAC,CAAC;AACN,aAAA;AACF,SAAA;QACD,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,IAAI,CAAC,OAAO,EACb;YACC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;AACnD,YAAA,IAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,EAAC;gBACnC,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,IAAI,EAAE,CAAC;iBACb,EAAE,CAAC,CAAC,CAAC;AACP,aAAA;AACF,SAAA;KACF;;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAiB,EAAA;AACjD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,KAAK,GAAE,CAAC;YAChE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;AACxC,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,IAAI,GAAE,CAAC;AAChE,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AACpD,YAAA,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;;gBAElD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7C,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IACK,cAAc,GAAA;;AAClB,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACrB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA,CAAC,EAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CACf,CAAC;AACJ,YAAA,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,YAAY,GAAG;AAClB,oBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAC;AAC1D,oBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAC;AAC5D,oBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAC;AAClE,oBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAC;iBACjE,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,6BAAA,CAA+B,CAAC,CAAC;AAC/C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC1D,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC5D,MAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,YAAY,GAAG;AAClB,oBAAA,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;oBACnB,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC3B,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;oBACzC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;iBAClC,CAAC;AACH,aAAA;;;YAID,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;AACtD,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,aAAa,EAAE,KAAK;AACrB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B,CAAA,CAAA;AAAA,KAAA;AAEa,IAAA,IAAI,CAAC,GAAY,EAAA;;;AAE7B,YAAA,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;AAAM,iBAAA;gBACL,IAAI;oBACF,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;;wBAE9D,OAAO;AACR,qBAAA;oBAED,IAAI,IAAI,CAAC,OAAO,EAAE;;wBAEhB,OAAO;AACR,qBAAA;oBACD,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,iBAAA;AAAC,gBAAA,OAAO,GAAG,EAAE;AACZ,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACF,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;IAEK,YAAY,GAAA;;;AAEhB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACvC,gBAAA,eAAe,EAAE,OAAO;AACxB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAE/C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAS,GAAO,EAAA;AAClD,aAAC,CAAC,CAAA;YACF,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACpB,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;IAED,UAAU,CACR,GAA6B,EAC7B,IAAY,EACZ,GAAW,EACX,aAAa,EACb,YAA2B,EAC3B,QAAgB,EAAA;QAEhB,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,kBAAkB,GAAG,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,EAAE,CAAC;;AAGX,QAAA,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,GAAG,CAAC,IAAI,EAAE,CAAC;QAEX,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9B,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrD,GAAG,CAAC,OAAO,EAAE,CAAC;KACf;AAED,IAAA,cAAc,CAAC,KAAU,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;KACF;AACD,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;;YAG/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;;AAGnE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;;AAG1D,YAAA,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;;AAG9B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AACjC,SAAA;KACF;AACD,IAAA,cAAc,CAAC,KAAU,EAAA;QACvB,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,eAAe,EAAE;AACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/C,SAAA;QACD,IACE,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,UAAU,EACf;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACxB,SAAA;KACF;;AAGD,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,QAAA,MAAM,qBAAqB,GAAG,GAAG,CAAC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAE9C,QAAA,MAAM,UAAU,GAAG,WAAW,GAAG,oBAAoB,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,qBAAqB,CAAC;QAEzD,IAAI,KAAK,GAAU,IAAI,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;AACzD,YAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACrB,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,aAAa;AACxB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,cAAc,GAAG;AACnB,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;gBAChC,CAAC,EAAE,CAAC,GAAG;gBACP,CAAC,EAAE,CAAC,GAAG;AACP,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,OAAO,CACR,CAAC;iBACH;AACD,gBAAA,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAI;AACvC,oBAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9B,oBAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;oBAEvB,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,oBAAA,OAAO,IAAI,CAAC;iBACb;aACF,CAAC;AAEF,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;AAChC,gBAAA,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,CAAC,GAAG;AACP,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,QAAQ,CACT,CAAC;iBACH;AACD,gBAAA,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAI;AACvC,oBAAA,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;AACpC,oBAAA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,oBAAA,YAAY,CAAC,GAAG,CACd,OAAO,EACP,CAAC,YAAY,CAAC,KAAK,GAAG,iBAAiB,IAAI,GAAG,CAC/C,CAAC;AACF,oBAAA,YAAY,CAAC,SAAS,EAAE,CAAC;;oBAEzB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,oBAAA,OAAO,IAAI,CAAC;iBACb;aACF,CAAC;AAEF,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;AAChC,gBAAA,CAAC,EAAE,GAAG;AACN,gBAAA,CAAC,EAAE,GAAG;AACN,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,MAAM;gBACnB,aAAa,GAAG,CAAC,SAAqB,EAAE,SAAoB,EAAE,CAAS,EAAE,CAAS,KAAI;oBACpF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,CAAA;AAC5C,oBAAA,OAAO,IAAI,CAAA;AACb,iBAAC,CAAC;AACF,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,QAAQ,CACT,CAAC;iBACH;aACF,CAAC;SACH,CAAC;AAEF,QAAA,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;AACD,IAAA,aAAa,CAAC,SAAqB,EAAE,SAAoB,EAAE,CAAS,EAAE,CAAS,EAAA;AAC7E,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEtE,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAChC;;IAEC,eAAe,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;;QAEpD,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACvD,SAAA;QACD,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AAE/C,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;;YAE1C,SAAS,CAAC,GAAG,CAAC;AACZ,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,KAAK;AAClB,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,MAAM,aAAa,GACjB,SAAS,IAAI,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IACM,IAAI,GAAA;;QAET,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,gBAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,MAAK;gBAC9C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACxC,IAAI,GAAG,KAAK,YAAY,EAAE;AACxB,wBAAA,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;AAChD,oBAAA,YAAY,CAAC,QAAQ;wBACnB,SAAS,IAAI,SAAS,CAAC,aAAa;8BAChC,SAAS,CAAC,aAAa;8BACvB,IAAI,CAAC;oBACX,YAAY,CAAC,GAAG,CAAC;AACf,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,iBAAiB,EAAE,CAAC;AACpB,wBAAA,WAAW,EAAE,OAAO;AACrB,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,iBAAA;AAAM,qBAAA;oBACL,YAAY,CAAC,GAAG,CAAC;AACf,wBAAA,WAAW,EAAE,KAAK;AAClB,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,UAAU,EAAE,KAAK;AAClB,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAChC,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC5C,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IACM,IAAI,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,gBAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;gBAClD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AAClD,gBAAA,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;wBAChC,YAAY,CAAC,GAAG,CAAC;AACf,4BAAA,OAAO,EAAE,EAAE;AACX,4BAAA,iBAAiB,EAAE,CAAC;AACpB,4BAAA,WAAW,EAAE,OAAO;AACrB,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,wBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACrC,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,qBAAA;AAAM,yBAAA;wBACL,YAAY,CAAC,GAAG,CAAC;AACf,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,UAAU,EAAE,KAAK;AAClB,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,wBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,qBAAA;AACD,oBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ;wBACrC,aAAa,IAAI,aAAa,CAAC,aAAa;8BACxC,aAAa,CAAC,aAAa;8BAC3B,IAAI,CAAC;AACZ,iBAAA;AAAI,qBAAA;AACH,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB,iBAAA;gBACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACxC,IAAI,GAAG,KAAK,YAAY,EAAE;AACxB,wBAAA,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAA;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC5C,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IACO,aAAa,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,QAAA,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAElE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAC9C,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KAC1B;AAED;;AAEG;IACW,KAAK,GAAA;;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBAC9B,OAAO;AACR,aAAA;YACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAGpD,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAErB,YAAA,MAAM,OAAO,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AAC1C,gBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;aACzC,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CACxB;gBACE,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,EACD;AACE,gBAAA,aAAa,EAAE,IAAI;AACpB,aAAA,CACF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAK;AACvC,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC3B,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SAC1B,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,cAAc,CAAC,OAAuB,EAAA;;AAE5C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;KACF;IAEO,aAAa,CAAC,KAAa,EAAE,OAAuB,EAAA;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE,KAAK,CAAC,CAAC;YACb,GAAG,EAAE,KAAK,CAAC,CAAC;AACZ,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAI;YAC1B,IAAI,GAAG,CAAC,OAAO,EAAE;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvE,gBAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,aAAA;AACH,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KAAI;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,mBAAmB,CAAC,GAAW,EAAA;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,YAAA,GAAG,CAAC,MAAM,GAAG,MAAK;gBAChB,IAAI,QAAQ,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,aAAC,CAAC;AACF,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,SAAC,CAAC,CAAC;KACJ;AAEY,IAAA,YAAY,CAAC,SAAkB,EAAA;;YAC1C,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO;AACR,aAAA;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,CAA+B,CAAC,CAAC;AAE7C,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,4BAAA,CAA8B,CAAC,CAAC;AAC/C,aAAA;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,MAAyB,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACvC,oBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3C,oBAAA,OAAO,EAAE;AACP,wBAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,wBAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpC,wBAAA,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,wBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,qBAAA;AACD,oBAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAC3B,oBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC1B,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AACzC,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,gBAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAA,CAAA;AAAA,KAAA;IACO,aAAa,GAAA;QACnB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;KAC1B;;6GAxwBU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,yxBCtB5B,wqBAWA,EAAA,MAAA,EAAA,CAAA,oXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDWa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,wqBAAA,EAAA,MAAA,EAAA,CAAA,oXAAA,CAAA,EAAA,CAAA;iIAKH,cAAc,EAAA,CAAA;sBAArC,SAAS;uBAAC,WAAW,CAAA;gBAES,UAAU,EAAA,CAAA;sBAAxC,SAAS;uBAAC,kBAAkB,CAAA;gBAEpB,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAYG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACO,IAAI,EAAA,CAAA;sBAAhB,KAAK;gBAOI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAEG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;;;MEtDI,gBAAgB,CAAA;AAL7B,IAAA,WAAA,GAAA;AAMW,QAAA,IAAK,CAAA,KAAA,GAAqB,EAAE,CAAC;AAEtC;;AAEG;AACM,QAAA,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB,CAAC;KAa3D;AAXQ,IAAA,WAAW,CAAC,IAAoB,EAAA;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO;AACR,SAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAE3C,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;;8GApBU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,gKChB7B,+zBAyBM,EAAA,MAAA,EAAA,CAAA,89BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDTO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+zBAAA,EAAA,MAAA,EAAA,CAAA,89BAAA,CAAA,EAAA,CAAA;8BAKlB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAKG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MEpBI,UAAU,CAAA;IAEZ,kBAAkB,CAAC,MAAiB,EAAE,OAAgB,EAAA;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CACpC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EACzB;AACI,YAAA,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,CAAC;AAC7B,SAAA,CAAC,CAAC;AAEP,QAAA,OAAO,YAAY,CAAC;KACvB;AAEO,IAAA,gBAAgB,CAAC,MAAiB,EAAA;QACtC,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,MAAM,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,SAAA;AACI,aAAA;;YAED,OAAO,GAAG,wDAAwD,CAAC;AACtE,SAAA;AAED,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;QAC1C,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,SAAS,EAAE;YACX,UAAU,GAAG,gBAAgB,CAAC;AACjC,SAAA;QAGD,IAAI,YAAY,GAAG,qEAAqE,CAAC;QAEzF,IAAI,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QAEpD,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,QAAA,MAAM,UAAU,GACZ,CAA4B,yBAAA,EAAA,SAAS,CAAI,EAAA,CAAA;YACzC,CAAW,QAAA,EAAA,MAAM,CAAC,IAAI,CAAS,OAAA,CAAA;YAC/B,CAA0C,wCAAA,CAAA;AAC1C,YAAA,CAAA,MAAA,CAAQ,CAAC;AAEb,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QAEpC,IAAI,WAAW,GACX,CAAO,KAAA,CAAA;YACP,CAAwC,sCAAA,CAAA;YACxC,CAAgC,8BAAA,CAAA;AAChC,YAAA,CAAA,YAAA,EAAe,UAAU,CAAA;cACvB,UAAU,CAAA;AACgB,sCAAA,EAAA,SAAS,mDAAmD,OAAO,CAAA;2DAChD,gBAAgB,CAAA,mBAAA,EAAsB,OAAO,CAAA,6BAAA,EAAgC,YAAY,CAAA;AAC3H,wBAAA,CAAA;AACb,YAAA,CAAA,MAAA,CAAQ;AACR,YAAA,CAAA,MAAA,CAAQ;AACR,YAAA,CAAA,MAAA,CAAQ,CAAC;AACb,QAAA,OAAO,WAAW,CAAC;KACtB;IAGM,YAAY,CAAC,GAAU,EAAE,MAAkB,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE;YAC7B,OAAO;AACV,SAAA;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC;YAC7B,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;KAC3E;AAEO,IAAA,aAAa,CAAC,GAAU,EAAE,IAAyC,EAAE,OAAe,EAAE,EAAA;QAE1F,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC3B,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,OAAO;AACV,SAAA;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAe,CAAC;QAEjE,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO;AAC3B,YAAA,MAAM,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE;YAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAClC,YAAA,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACnB,SAAA;AACI,aAAA;AACD,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;AACnC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AAC/B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AACnD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;;YAGrD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CACxC;AACI,gBAAA,EAAE,CAAC,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;AACxB,gBAAA,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC;gBACvB,CAAC;AACD,gBAAA,EAAE,CAAC,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;AACxB,gBAAA,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC;gBACvB,CAAC;AACJ,aAAA,CACU,CAAC;AAEhB,YAAA,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC;AAC3B,YAAA,GAAG,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3D,SAAA;KACJ;AAED;;;AAGG;AACI,IAAA,kBAAkB,CAAC,IAAa,EAAE,GAAU,EAAE,KAAkB,EAAA;QAKnE,IAAI,MAAM,GAAG,EAIZ,CAAC;AAEF,QAAA,IAAI,MAAM,GAAG,IAAI,KAAK,EAAU,CAAC;AAEjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACpB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAE1D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnB,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;QAED,IAAI,KAAK,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC/C,YAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;AAErB,YAAA,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACrB,SAAA;AACI,aAAA;AACD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC/C,YAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;YAErB,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACrC,YAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YAEtB,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;;AAG5B,YAAA,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,SAAA;AAGD,QAAA,OAAO,MAAM,CAAC;KACjB;AAEO,IAAA,QAAQ,CAAC,MAAqB,EAAE,KAAa,EAAE,YAAoB,EAAA;AACvE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CACzB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EACxC;AACI,YAAA,KAAK,EAAE;AACH,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,SAAS,EAAE,YAAY;AAC1B,aAAA;AACD,YAAA,MAAM,EAAE;AACJ,gBAAA,SAAS,EAAE,SAAS;AACvB,aAAA;AACD,YAAA,MAAM,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;AACP,QAAA,OAAO,EAAE,CAAC;KACb;AAEO,IAAA,WAAW,CAAC,MAAqB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CACrB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EACxC;AACI,YAAA,KAAK,EAAE;AACH,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,WAAW,EAAE,wBAAwB;AACrC,gBAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,WAAW,EAAE,YAAY;AACrB,aAAA;AACR,YAAA,MAAM,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;KACV;IAEM,gBAAgB,CAAC,GAAU,EAAE,GAAiB,EAAE,OAAe,EAAE,GAAQ,EAAE,KAAkB,EAAA;AAEhG,QAAA,IAAI,IAAmB,CAAC;QACxB,IAAI,KAAK,IAAI,OAAO,EAAE;YAClB,MAAM,GAAG,GAAG,oEAAoE,CAAC;AACjF,YAAA,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAqC,kCAAA,EAAA,GAAG,CAAW,SAAA,CAAA,CAAC,CAAA;AAChF,SAAA;AACI,aAAA;;AAED,YAAA,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAA8B,2BAAA,EAAA,OAAO,CAAgB,cAAA,CAAA,CAAC,CAAA;AAClF,SAAA;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAC5C;AACI,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;AACP,QAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;;wGA1OQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAV,UAAU,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;;;MCME,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;AAWa,QAAA,IAAK,CAAA,KAAA,GAAc,EAAE,CAAC;AAEtB,QAAA,IAAO,CAAA,OAAA,GAAgB,EAAE,CAAC;AAE1B,QAAA,IAAK,CAAA,KAAA,GAAgB,SAAS,CAAC;AAMhC,QAAA,IAAQ,CAAA,QAAA,GAAmB,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC;KAuI1C;AArIU,IAAA,WAAW,CAAC,OAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,IAAI,EAAE,CAAC;AACf,SAAA;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACxC,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;KACJ;IAEO,IAAI,GAAA;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM;AACtB,SAAA,CAAC,CAAC;QAEH,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB,EAAE,IAAI,CAAC,CAAC;KACZ;IAGO,OAAO,GAAA;;QAGX,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAE3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAChD,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAC/B;AACI,YAAA,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;AACxC,SAAA,CAAC,CAAC;;AAIP,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAE3D,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACjD,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACzD,QAAA,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAExD,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;;QAInC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnF;IAEO,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;YAEZ,OAAO;AACV,SAAA;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAEO,WAAW,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC,OAAO;AACV,SAAA;QAED,IAAI,GAAG,GAAe,IAAI,CAAC;AAE3B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,gBAAA,IAAI,GAAG,EAAE;AACL,oBAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;AACtD,iBAAA;AACI,qBAAA;AACD,oBAAA,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAA;AACtC,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,MAAM,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,aAAA;AACJ,SAAA;;;AAID,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAChD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5G,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE;;AAEvB,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3G,SAAA;AAED,QAAA,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjD,SAAA;KACJ;IAEO,aAAa,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvC,OAAO;AACV,SAAA;AAED,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,SAAA;KACJ;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,OAAO;AACV,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtB;;+GAnJQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,0PCT9B,uFAIA,EAAA,MAAA,EAAA,CAAA,+9EAAA,CAAA,EAAA,CAAA,CAAA;4FDKa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACI,SAAS,EAAA,QAAA,EAAA,uFAAA,EAAA,MAAA,EAAA,CAAA,+9EAAA,CAAA,EAAA,CAAA;8BAMD,WAAW,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK,CAAA;gBAEP,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MEZG,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAS,CAAA,SAAA,GAAW,CAAA,OAAA,CAAS,CAAC;AAE9B,QAAA,IAAW,CAAA,WAAA,GAA8B,EAAE,CAAC;AAErD;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU,CAAC;AAElD;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE9C,QAAA,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAEb,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;KA0EvC;;AAvEyC,IAAA,UAAU,CAAC,GAAU,EAAA;QACvD,GAAG,CAAC,cAAc,EAAE,CAAC;QACrB,GAAG,CAAC,eAAe,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;;AAG6C,IAAA,WAAW,CAAC,GAAU,EAAA;QAChE,GAAG,CAAC,cAAc,EAAE,CAAC;QACrB,GAAG,CAAC,eAAe,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;;AAGwC,IAAA,MAAM,CAAC,GAAc,EAAA;;QAC1D,GAAG,CAAC,cAAc,EAAE,CAAC;QACrB,GAAG,CAAC,eAAe,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAE5B,QAAA,IAAI,MAAM,GAAI,GAAG,CAAC,YAA6B,CAAC;QAChD,IAAI,MAAM,KAAI,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KAC/B;AAGY,IAAA,WAAW,CAAC,GAAU,EAAA;;AAC/B,YAAA,MAAM,MAAM,GAA4B,GAAG,CAAC,MAA0B,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEY,IAAA,WAAW,CAAC,KAAe,EAAA;;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,OAAO;AACV,aAAA;YACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEnC,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACzB,CAAA,CAAA;AAAA,KAAA;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAA;YACvC,OAAO;AACV,SAAA;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC7C;IAEM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACzB;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;;6GA/FQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,2TCP5B,msHAkGA,EAAA,MAAA,EAAA,CAAA,gsGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,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,EAAAuB,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD3Fa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACI,iBAAiB,EAAA,QAAA,EAAA,msHAAA,EAAA,MAAA,EAAA,CAAA,gsGAAA,CAAA,EAAA,CAAA;8BAMlB,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAKG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAW+B,UAAU,EAAA,CAAA;sBAA/C,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAOU,WAAW,EAAA,CAAA;sBAAxD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAOI,MAAM,EAAA,CAAA;sBAA9C,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEvCvB,aAAa,CAAA;AAL1B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAI,CAAA,IAAA,GAAqC,KAAK,CAAC;AAExD;;AAEG;AACM,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAEpB;;AAEG;AACM,QAAA,IAAI,CAAA,IAAA,GAAG,EAAE,CAAC;KACtB;;2GAbY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,4GCP1B,wtDAqDA,EAAA,MAAA,EAAA,CAAA,iiuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD9Ca,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,SAAS;+BACI,cAAc,EAAA,QAAA,EAAA,wtDAAA,EAAA,MAAA,EAAA,CAAA,iiuBAAA,CAAA,EAAA,CAAA;8BAMf,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAKG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MEEG,gBAAgB,CAAA;AAGlB,IAAA,SAAS,CAAC,MAAc,EAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpC,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC,CAAC;KACN;AAEY,IAAA,OAAO,CAAC,UAAkB,EAAA;;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACjB,MAAM,CAAC,iBAAiB,CAAC,CAAC;oBAC1B,OAAO;AACV,iBAAA;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AACtD,gBAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EACvC,CAAC,GAAQ,KAAI;oBACT,IAAI,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAA;AAEvE,oBAAA,IAAI,QAAQ,GAAG,IAAI,KAAK,EAAiB,CAAC;oBAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,oBAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;wBAC5B,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;wBACrD,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;AACtD,wBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;AAC3D,wBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;AAC3D,wBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;wBAE9C,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9C,wBAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;4BACvC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;AACzD,yBAAA;wBAED,QAAQ,CAAC,IAAI,CAAC;AACV,4BAAA,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACrC,4BAAA,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;AACpC,4BAAA,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;AAC1C,4BAAA,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU;AAChD,4BAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACtC,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,MAAM,EAAE;AACJ,gCAAA,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;AACtB,gCAAA,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;AACvB,gCAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,gCAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACtD,6BAAA;AACJ,yBAAA,CAAC,CAAC;AACN,qBAAA;oBAED,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtB,iBAAC,EACD,CAAC,CAAM,KAAI;AACP,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,iBAAC,CACJ,CAAC;AACN,aAAC,CAAC,CAAA;SACL,CAAA,CAAA;AAAA,KAAA;;8GA1DQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;iBACrB,CAAA;;;MCTY,mBAAmB,CAAA;IAoC5B,WACY,CAAA,UAA4B,EAC5B,MAAyB,EAAA;AADzB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAkB;AAC5B,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAmB;AA5B5B,QAAA,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU,CAAC;AAE5C,QAAA,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC;AAErB,QAAA,IAAW,CAAA,WAAA,GAAW,gBAAgB,CAAC;AAEvC,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAET,QAAA,IAAQ,CAAA,QAAA,GAAG,IAAI,YAA6B,CAAC;;;AAIrD,QAAA,IAAY,CAAA,YAAA,GAAQ,EAAE,CAAC;AAExB,QAAA,IAAA,CAAA,oBAAoB,GAAoB,IAAI,OAAO,EAAU,CAAC;AAE/D,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAE7B,QAAA,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;AAEjC,QAAA,IAAW,CAAA,WAAA,GAAsB,EAAE,CAAC;AAQvC,QAAA,IAAI,CAAC,oBAAoB;aACpB,IAAI,CACD,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACzB;AACA,aAAA,SAAS,CAAC,CAAC,aAAqB,KAAI;AAEnC,YAAA,IAAI,CAAC,OAAO,GAAG,aAAa,CAAA;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,IAAI,IAAI,CAAC,YAAY,EAAE;;AAErB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;AACpC,aAAA;YAED,IAAI,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAEtC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACV;AA3DD;;AAEG;IACH,IAAa,MAAM,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACrC;AAwDK,IAAA,WAAW,CAAC,OAAsB,EAAA;;YACpC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBACpC,IAAI,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;gBACxC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1E,gBAAA,IAAI,OAAO,EAAE;AACT,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAA;AACJ,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEM,IAAA,cAAc,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAErC,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;KAC/B;AAEa,IAAA,UAAU,CAAC,YAA0B,EAAA;;YAC/C,IAAI;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,OAAO;AACV,iBAAA;AACD,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEtB,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,OAAO;AACV,iBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEtB,gBAAA,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE5D,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;;oBAE7B,OAAO;AACV,iBAAA;AAED,gBAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;wBAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC1B,qBAAA,CAAC,CAAC;AACN,iBAAA;AACD,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7G,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC9B,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,iBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC5B,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtB,aAAA;AAAS,oBAAA;AACN,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AAC/B,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEM,IAAA,aAAa,CAAC,OAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,SAAA;KACJ;;iHAhIQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,6VCXhC,g1CAoCA,EAAA,MAAA,EAAA,CAAA,qlDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAA0B,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDzBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACI,qBAAqB,EAAA,QAAA,EAAA,g1CAAA,EAAA,MAAA,EAAA,CAAA,qlDAAA,CAAA,EAAA,CAAA;oIAQlB,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEE,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEW,QAAQ,EAAA,CAAA;sBAAxB,MAAM;gBAIE,YAAY,EAAA,CAAA;sBAApB,KAAK;;;MEnCG,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;AACY,QAAA,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AAElB,QAAA,IAAQ,CAAA,QAAA,GAGV,EAAE,CAAC;KAqBZ;AAnBU,IAAA,EAAE,CAAC,OAA2B,EAAA;QAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AAEM,IAAA,GAAG,CAAC,EAAU,EAAA;AAEjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1D;AAEM,IAAA,IAAI,CAAC,IAAQ,EAAA;QAEhB,IAAG,IAAI,CAAC,QAAQ,EAChB;YACI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,SAAA;KACJ;AACJ;;MCzBY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AACS,QAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,MAAM,EAAE,CAAC;AAExC,QAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,MAAM,EAAE,CAAC;AAExC,QAAA,IAAA,CAAA,UAAU,GAAmB,IAAI,MAAM,EAAE,CAAC;AAE1C,QAAA,IAAA,CAAA,UAAU,GAAmB,IAAI,MAAM,EAAE,CAAC;KAiFlD;AA/EA;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED;;AAEG;AACI,IAAA,MAAM,CAAC,QAAoC,EAAA;QACjD,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAe,CAAC,CAAC;KAC3C;AAED;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACxB;AAED;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACxB;AAED;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACxB;AAED;;AAEG;IACI,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACvB;AAED;;AAEG;IACI,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACvB;AAED;;AAEG;AACI,IAAA,IAAI,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC/B;AAED;;AAEG;IACI,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACvB;AACD;;MClFY,4BAA4B,CAAA;IAK3B,WAAW,GAAA;;YACvB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACP,OAAO,CAAC,GAAG,CAAC,CAAA,2CAAA,EAA8C,IAAI,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;AACnF,aAAA;SACD,CAAA,CAAA;AAAA,KAAA;;0HATW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,qICRzC,0IAOA,EAAA,MAAA,EAAA,CAAA,mOAAA,CAAA,EAAA,CAAA,CAAA;4FDCa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACC,wBAAwB,EAAA,QAAA,EAAA,0IAAA,EAAA,MAAA,EAAA,CAAA,mOAAA,CAAA,EAAA,CAAA;8BAKzB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;MEKM,qBAAqB,CAAA;IAS9B,WACY,CAAA,QAAoB,EACpB,aAA2B,EAAA;AAD3B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AACpB,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAc;AAJhC,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;KAKnC;AAEM,IAAA,WAAW,CAAC,SAAc,EAAA;QAC7B,IAAI,SAAS,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;AACjB,SAAA;KAEJ;IAEM,WAAW,GAAA;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;IAEa,MAAM,GAAA;;;YAEhB,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;;YAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB,CAAA,CAAA;AAAA,KAAA;IAEO,MAAM,GAAA;QACV,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,MAAM;AAChB,YAAA,IAAI,EAAE,KAAK;SACd,EAAE;;;AAGC,YAAA,iBAAiB,EAAE,KAAK;AAC3B,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,aAA6B,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnG,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAA2B,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAgC,KAAI;AACjE,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE;AAC9B,gBAAA,IAAI,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE;AACtC,oBAAA,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;oBACpC,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEd,wBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC3B,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAK;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,SAAC,CAAC,CAAA;QAGF,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;KACrE;AAEO,IAAA,OAAO,CAAC,UAAoB,EAAA;QAChC,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,UAAU,EAAE;;AAEhB,aAAA;AACJ,SAAA;KACJ;;mHAzFQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,6HChBlC,kGAKA,EAAA,MAAA,EAAA,CAAA,4gBAAA,CAAA,EAAA,CAAA,CAAA;4FDWa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,kGAAA,EAAA,MAAA,EAAA,CAAA,4gBAAA,CAAA,EAAA,CAAA;yHAKjB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;MEnBG,MAAM,CAAA;IACR,OAAO,KAAK,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YACjC,UAAU,CAAC,MAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;aACb,EAAE,EAAE,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;KACN;AACJ;;MCEY,qBAAqB,CAAA;AALlC,IAAA,WAAA,GAAA;AAYW,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAE5B,QAAA,IAAI,CAAA,IAAA,GAAe,IAAI,CAAC;AAOxB,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;KAiJhC;AA/IU,IAAA,WAAW,CAAC,SAAc,EAAA;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,MAAM,EAAE,CAAA;AAChB,SAAA;QACD,IAAI,SAAS,CAAC,OAAO;AACjB,YAAA,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACnD,SAAA;KACJ;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;IAEa,MAAM,GAAA;;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,OAAO;AACV,aAAA;YAED,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEd,gBAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACjC,aAAA;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnC,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE;AACpB,gBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;;gBAEpE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5C,OAAO;AACV,aAAA;;YAGD,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,OAAO,CAAC,GAAG,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAA;;AAGjF,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;AAChB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,uBAAuB,EAAE,CAAC;AAC1B,gBAAA,sBAAsB,EAAE,KAAK;AAC7B,gBAAA,8BAA8B,EAAE,KAAK;AACrC,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,mBAAmB,EAAE,CAAC;;AAEtB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,aAAa,EAAE,KAAK;AACvB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAElC,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAK;;gBAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,KAAI;gBACzC,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;AAEvC,oBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;oBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,EAAE,CAAC;AACjB,iBAAA;AACL,aAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;SACrE,CAAA,CAAA;AAAA,KAAA;IAEa,gBAAgB,GAAA;;AAC1B,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AACjB,gBAAA,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,OAAO;AACV,iBAAA;AACJ,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,UAAU,CAAC,OAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;IAGO,OAAO,GAAA;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC3C,SAAA;KACJ;IAEO,MAAM,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAEhC,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC3B,SAAA;KACJ;IAEO,OAAO,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAExB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACvB,SAAA;KACJ;AAGM,IAAA,YAAY,CAAC,GAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACvD,GAAG,CAAC,eAAe,EAAE,CAAC;KACzB;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;KACrC;;mHA/JQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wOCVlC,oIAMA,EAAA,MAAA,EAAA,CAAA,scAAA,CAAA,EAAA,CAAA,CAAA;4FDIa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,oIAAA,EAAA,MAAA,EAAA,CAAA,scAAA,CAAA,EAAA,CAAA;8BAKjB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEwB,MAAM,EAAA,CAAA;sBAAnC,SAAS;uBAAC,iBAAiB,CAAA;;;MEfnB,SAAS,CAAA;AAKlB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;IAEM,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,CAAC;gBACV,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;KACN;IAEM,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEjB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAkB,CAAC;AAC/D,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC1B,SAAA;KACJ;IAEM,MAAM,GAAA;QAET,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AACJ;;MC/BY,cAAc,CAAA;AASvB,IAAA,WAAA,CAAoB,KAAiB,EAAA;AAAjB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;AAR7B,QAAA,IAAK,CAAA,KAAA,GAMT,EAAE,CAAC;KAEmC;AAE1C;;;;;;;AAOG;AACU,IAAA,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,QAAiB,EAAE,OAAgB,EAAA;;AAEjF,YAAA,IAAI,QAAQ,EAAE;gBACV,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAM,CAAC;AAC5D,aAAA;AACI,iBAAA;gBAED,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,gBAAA,OAAO,IAAI,EAAE;AACT,oBAAA,MAAM,EAAE,CAAC;oBACT,IAAI;wBACA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAM,CAAC;AAC5C,qBAAA;AACD,oBAAA,OAAO,GAAG,EAAE;AACR,wBAAA,IAAI,OAAO,EAAE;4BACT,IAAI,MAAM,IAAI,OAAO,EAAE;gCACnB,OAAO,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,MAAM,CAAkB,eAAA,EAAA,GAAG,CAAE,CAAA,CAAC,CAAA;AACnE,gCAAA,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCACzB,SAAS;AACZ,6BAAA;AACJ,yBAAA;AACD,wBAAA,MAAM,GAAG,CAAC;AACb,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;AAEa,IAAA,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAS,EAAA;;AAE/D,YAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAA;AAEvD,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;oBACnB,IAAI,EAAE,IAAI,SAAS,EAAE;AACrB,oBAAA,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;iBAC1C,CAAA;AACJ,aAAA;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAErC,IAAI;AACA,gBAAA,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAE5B,IAAI,SAAS,CAAC,IAAI,EAAE;;oBAEhB,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,iBAAA;AACD,gBAAA,SAAS,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9C,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,aAAA;AACO,oBAAA;AACJ,gBAAA,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5B,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;IAEa,MAAM,CAAI,GAAW,EAAE,IAAU,EAAA;;YAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EACjC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAClC,YAAA,OAAO,GAAQ,CAAC;SACnB,CAAA,CAAA;AAAA,KAAA;IAEY,GAAG,CAAI,GAAW,EAAE,OAAgB,EAAA;;AAE7C,YAAA,IAAI,WAAW,GAAG;gBACd,OAAO,EAAE,OAAO,IAAI,KAAK;gBACzB,OAAO,EAAE,IAAI,WAAW,EAAE;aAC7B,CAAC;AAEF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAG,EAAA,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;AACpE,YAAA,OAAO,GAAQ,CAAC;SACnB,CAAA,CAAA;AAAA,KAAA;;4GA1FQ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlB,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA,CAAA;4FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;iBACrB,CAAA;;;MCEY,0BAA0B,CAAA;AAsBnC,IAAA,WAAA,CACY,KAAqB,EAAA;AAArB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAPzB,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAEpB,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAE5B,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;KAI5B;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnB;AAEM,IAAA,WAAW,CAAC,SAAc,EAAA;QAC7B,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACnD,SAAA;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAEO,IAAA,UAAU,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpB,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;IAEO,MAAM,GAAA;QACV,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,SAAA;AACI,aAAA;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,SAAA;KACJ;IAEO,SAAS,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAEa,MAAM,GAAA;;YAChB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChB,IAAI,CAAC,YAAY,EAAE;gBACnB,OAAO;AACV,aAAA;AAED,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;gBAChC,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB,CAAA,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;SAC7B,CAAA,CAAA;AAAA,KAAA;IAEa,WAAW,GAAA;;YACrB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,OAAO;AACV,aAAA;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,IAAI,CAAC,MAAM,CAAC,CAAC;AACnE,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAEpB,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC/B,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,iBAAA;AACI,qBAAA;oBACD,IAAI,CAAC,QAAQ,GAAG,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,EAAE,CAAC;AAC1D,iBAAA;AACJ,aAAA;SACJ,CAAA,CAAA;AAAA,KAAA;IAEO,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,YAAY,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC;KACvC;;wHApGQ,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAuB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,4KCTvC,iJAKA,EAAA,MAAA,EAAA,CAAA,qtBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDIa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACI,qBAAqB,EAAA,QAAA,EAAA,iJAAA,EAAA,MAAA,EAAA,CAAA,qtBAAA,CAAA,EAAA,CAAA;kGAKtB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEjBG,MAAM,CAAA;IAyClB,WACS,CAAA,OAAe,EACf,aAA+B,EAAA;AAD/B,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AACf,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkB;AApChC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,MAAM,EAAE,CAAC;AAE/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,MAAM,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,MAAM,EAAE,CAAC;AAEtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;AAE5B,QAAA,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAC;;QAiBrB,IAAA,CAAA,iBAAiB,GAAG;AAC3B,YAAA,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE;AACvD,gBAAA,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;SACzC,CAAC;AAIM,QAAA,IAAsB,CAAA,sBAAA,GAAQ,IAAI,CAAC;KAK1C;IAEM,KAAK,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;QACV,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;KACrB;IAEM,OAAO,GAAA;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;KACrB;AAEM,IAAA,MAAM,CAAC,QAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KAClC;AAEM,IAAA,MAAM,CAAC,QAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC/B;AAEM,IAAA,OAAO,CAAC,QAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KACpC;AAEM,IAAA,OAAO,CAAC,QAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KACzC;IAEO,iBAAiB,GAAA;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;QAGpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC9B;AAEO,IAAA,QAAQ,CAAC,QAAgB,EAAA;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC9B;IAEO,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;KAClE;IAEO,sBAAsB,GAAA;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,gBAAgB,GAAG,EAAE,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,mEAAmE,CAAC,CAAC;AAC1F,SAAA;;QAGD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;AACtC,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;AAC7C,SAAA;AACI,aAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5D,SAAA;AACI,aAAA;YACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,6DAA6D,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtG,SAAA;;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;AAEhE,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9D,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;;QAGxC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,KAAU,KAAI;YACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACzE;AAEO,IAAA,eAAe,CAAC,KAAU,EAAA;QACjC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO;AACP,SAAA;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,OAAO;AACP,SAAA;;QAED,IAAI;YACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,OAAO,CAAC,EAAE;YACT,IAAI,CAAC,YAAY,WAAW,EAAE;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACvE,aAAA;AAAM,iBAAA;gBACN,IAAI,CAAC,mBAAmB,CAAC,kCAAkC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1E,aAAA;YACD,OAAO;AACP,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,SAAA;AACI,aAAA;YACJ,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,SAAA;KACD;AAEO,IAAA,UAAU,CAAC,GAAQ,EAAA;;AAE1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAE1B,IAAI,CAAC,eAAe,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,OAAO,OAAO,EAAE,CAAA,EAAE,CAAC,CAAC;;QAGlF,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;AAC/D,SAAA;QAED,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,CAAC,KAAU,KAAI;;;AAGpD,YAAA,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE;gBAC5B,OAAO;AACP,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAChE,SAAC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,CAAC,KAAU,KAAI;YAChE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACpE,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,QAAQ,EAAE;oBACxD,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,MAAmB,GAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;AAC7C,iBAAA;AACD,aAAA;AACF,SAAC,CAAA;KACD;IAEO,eAAe,GAAA;QAEtB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;;gBAE1B,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO;AACP,aAAA;YACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AACnE,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,WAAW,EAAE;gBACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAEnD,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE;AAClC,wBAAA,IAAI,OAAO,GAAG,CAAC,aAAa,IAAI,QAAQ,EAAE;AACzC,4BAAA,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;AACxC,4BAAA,MAAM,IAAI,GAAG,aAAa,GAAG,UAAU,CAAC;AACxC,4BAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,CAAA,CAAE,CAAC,CAAC;4BACvD,IAAI,IAAI,GAAG,CAAC,EAAE;gCACb,UAAU,GAAG,aAAa,CAAC;AAC3B,gCAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gCACzB,MAAM;AACN,6BAAA;AACD,yBAAA;AACD,qBAAA;AACD,iBAAA;AACD,aAAA;AACF,SAAC,CAAA,EAAE,IAAI,CAAC,CAAC;KACT;AAEO,IAAA,OAAO,CAAC,KAAU,EAAA;AAEzB,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAEvB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;YAChD,OAAO;AACP,SAAA;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;AAE5C,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAE5B,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,mBAAmB,CAAC,6CAA6C,CAAC,CAAC;AACxE,SAAA;KACD;IAEO,aAAa,GAAA;;KAEpB;IAEO,sBAAsB,GAAA;AAC7B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAE/E,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACzD;IAEO,YAAY,CAAC,MAAc,EAAE,QAAa,EAAA;AACjD,QAAA,IAAI,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AACnC,QAAA,OAAO,CAAC,kBAAkB,GAAG,MAAK;YACjC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;AACrD,gBAAA,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/B,aAAA;AACI,iBAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE;gBACjC,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,oBAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1C,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,CAA0B,uBAAA,EAAA,OAAO,CAAC,MAAM,CAAiB,cAAA,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;AACjF,aAAA;AACF,SAAC,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClC,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AAEO,IAAA,aAAa,CAAC,GAAQ,EAAA;QAC7B,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAK;AACxD,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE;gBACxB,OAAO;AACP,aAAA;YACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC9C,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACjC,qBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACxB;;AAGO,IAAA,kBAAkB,CAAC,IAAS,EAAA;QACnC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;YACxD,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAA;AACxD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;KACH;;AAGO,IAAA,aAAa,CAAC,GAAQ,EAAA;AAC7B,QAAA,IAAI,SAAS,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrE;IAEO,UAAU,GAAA;;AAEjB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KACxB;AAEO,IAAA,mBAAmB,CAAC,KAAU,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;KACjC;IAEO,KAAK,GAAA;QACZ,IAAI,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,SAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1C,SAAA;KACD;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;KACnC;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC;KACpE;IAEO,SAAS,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC;KAC5B;IAEO,aAAa,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1C,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,MAAmB,GAAC,CAAC;AACvE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,SAAA;KACD;AACD;;MClWY,wBAAwB,CAAA;AAoBjC,IAAA,WAAA,CACY,QAAoB,EAAA;AAApB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AAftB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEjD,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAI5B,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;KAK5B;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;AAEM,IAAA,WAAW,CAAC,SAAc,EAAA;QAE7B,IAAI,SAAS,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,EAAE,CAAC;AACf,aAAA;AACI,iBAAA;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1B,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACrD;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACvB,SAAA;KACJ;IAEO,IAAI,GAAA;QACR,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO;AACV,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACJ;IAEO,eAAe,GAAA;AACnB,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,aAA6B,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnG,QAAA,OAAO,OAA2B,CAAC;KACtC;IAEO,iBAAiB,GAAA;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO;AACV,SAAA;KACJ;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KAC3B;IAEO,mBAAmB,GAAA;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAA;KACJ;IAEO,wBAAwB,GAAA;QAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAClC,SAAA;KACJ;;sHAxGQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,oPCTrC,4TAYkC,EAAA,MAAA,EAAA,CAAA,0kBAAA,CAAA,EAAA,CAAA,CAAA;4FDHrB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACI,oBAAoB,EAAA,QAAA,EAAA,4TAAA,EAAA,MAAA,EAAA,CAAA,0kBAAA,CAAA,EAAA,CAAA;iGAMrB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;;;METE,0BAA0B,CAAA;AAsBnC,IAAA,WAAA,GAAA;AAjBS,QAAA,IAAU,CAAA,UAAA,GAA0B,SAAS,CAAC;AAS7C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAMrC,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAGpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,SAAC,CAAC,CAAA;KACL;IAEM,WAAW,GAAA;QACd,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACjD,aAAA;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACjD,aAAA;AACJ,SAAA;KACJ;;wHAvCQ,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,iOCVvC,+0BAoBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2B,4BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDVa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACI,sBAAsB,EAAA,QAAA,EAAA,+0BAAA,EAAA,CAAA;0EAKvB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,MAAM,EAAA,CAAA;sBAAf,MAAM;;;MEGE,wBAAwB,CAAA;AAmCnC,IAAA,WAAA,CAAoB,QAAoB,EAAA;AAApB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAY;AAlC/B,QAAA,IAAI,CAAA,IAAA,GAAmB,OAAO,CAAC;AAG/B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAC1B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAIzB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAmB,CAAC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAmB,CAAC;AAC5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;AAI3C,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExB,QAAA,IAAK,CAAA,KAAA,GAAa,EAAE,CAAC;AACrB,QAAA,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;AACvB,QAAA,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;AAEvB,QAAA,IAAa,CAAA,aAAA,GAAG,CAAC,CAAC;AAClB,QAAA,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;AACpB,QAAA,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;AACpB,QAAA,IAAc,CAAA,cAAA,GAAgB,IAAI,CAAC;AAEnC,QAAA,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;AACd,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AAEE,QAAA,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AACnB,QAAA,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AACf,QAAA,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;KAEgB;AAG5C,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YACjD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,eAAe,GAAG,eAAe,CAAC;KAClE;AAED,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;KACxD;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC;KAC3C;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;KAC5C;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,KAAK,GAAG,EAAE,CAAC;KAC9C;AAED,IAAA,IAAI,qBAAqB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7C,gBAAA,OAAO,CAAG,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AACtD,aAAA;AACD,YAAA,OAAO,CAAG,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AACjD,SAAA;;QAGD,MAAM,KAAK,GAAa,EAAE,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAK,GAAA,CAAA,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE;YAC1B,KAAK,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,IAAA,CAAA,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,IAAA,CAAA,CAAC,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;KACrD;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACnB,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AAC3C,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvC,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,SAAA;QACD,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACpB,SAAA;KACF;IAEO,WAAW,GAAA;AACjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClC;AAEO,IAAA,UAAU,CAAC,GAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;QACnC,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;AAClC,SAAA;KACF;IAEO,KAAK,CAAC,KAAa,EAAE,GAAW,EAAA;QACtC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAClC;AAED,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;KAC1B;AAED,IAAA,YAAY,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;KAC5B;AAED,IAAA,YAAY,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;KAC5B;AAED,IAAA,YAAY,CAAC,MAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;KAC9B;IAED,QAAQ,CAAC,KAAY,EAAE,IAAqC,EAAA;AAC1D,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAqB,CAAC;AACvC,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAEvD,QAAA,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAA;KACF;IAED,WAAW,CAAC,KAAiB,EAAE,QAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,WAAW,CAAC,KAAiB,EAAE,QAAqB,EAAA;QAClD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9C,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KACnD;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;IAED,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;IAEO,eAAe,GAAA;AACrB,QAAA,MAAM,GAAG,GAAoB;YAC3B,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,OAAO,EAAE,IAAI,CAAC,eAAe;YAC7B,OAAO,EAAE,IAAI,CAAC,eAAe;SAC9B,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;;sHAjPU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,mfC3BrC,slLAuIA,EAAA,MAAA,EAAA,CAAA,klJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD5Ga,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,slLAAA,EAAA,MAAA,EAAA,CAAA,klJAAA,CAAA,EAAA,CAAA;iGAKjB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBAEmB,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;gBAwBxB,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AElB9C;AACM,SAAU,iBAAiB,CAAC,UAAsB,EAAA;AACpD,IAAA,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC;MA0FY,eAAe,CAAA;;6GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAtFxB,sBAAsB;QACtB,oBAAoB;QACpB,yBAAyB;QACzB,uBAAuB;QACvB,oBAAoB;QACpB,0BAA0B;QAC1B,yBAAyB;QACzB,wBAAwB;QACxB,oBAAoB;QACpB,oBAAoB;QACpB,2BAA2B;QAC3B,iCAAiC;QACjC,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,yBAAyB;QACzB,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB;QACxB,YAAY;QACZ,eAAe;QACf,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;QACf,aAAa;QACb,mBAAmB;QACnB,0BAA0B;QAC1B,4BAA4B;QAC5B,qBAAqB;QACrB,qBAAqB;QACrB,0BAA0B;QAC1B,wBAAwB;QACxB,0BAA0B;AAC1B,QAAA,wBAAwB,aAMxB,YAAY;QACZ,WAAW;QACX,cAAc;QACd,yBAAyB;QACzB,mBAAmB;QACnB,gBAAgB;QAChB,aAAa,mCAUb,sBAAsB;QACtB,oBAAoB;QACpB,yBAAyB;QACzB,uBAAuB;QACvB,oBAAoB;QACpB,0BAA0B;QAC1B,yBAAyB;QACzB,wBAAwB;QACxB,oBAAoB;QACpB,oBAAoB;QACpB,2BAA2B;QAC3B,iCAAiC;QACjC,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,yBAAyB;QACzB,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB;QACxB,YAAY;QACZ,eAAe;QACf,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;QACf,aAAa;QACb,mBAAmB;QACnB,0BAA0B;QAC1B,0BAA0B;QAC1B,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAnDf,SAAA,EAAA;QACT,aAAa;KACd,EAAA,OAAA,EAAA,CAEC,YAAY;QACZ,WAAW;QACX,cAAc;QACd,yBAAyB;QACzB,mBAAmB;QACnB,gBAAgB;QAChB,aAAa;QACb,eAAe,CAAC,OAAO,CAAC;AACpB,YAAA,MAAM,EAAE;AACJ,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,CAAC,UAAU,CAAC;AACrB,aAAA;SACJ,CAAC,CAAA,EAAA,CAAA,CAAA;4FAkCO,eAAe,EAAA,UAAA,EAAA,CAAA;kBAxF3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,2BAA2B;wBAC3B,iCAAiC;wBACjC,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,uBAAuB;wBACvB,wBAAwB;wBACxB,YAAY;wBACZ,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,0BAA0B;wBAC1B,4BAA4B;wBAC5B,qBAAqB;wBACrB,qBAAqB;wBACrB,0BAA0B;wBAC1B,wBAAwB;wBACxB,0BAA0B;wBAC1B,wBAAwB;AACzB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,yBAAyB;wBACzB,mBAAmB;wBACnB,gBAAgB;wBAChB,aAAa;wBACb,eAAe,CAAC,OAAO,CAAC;AACpB,4BAAA,MAAM,EAAE;AACJ,gCAAA,OAAO,EAAE,eAAe;AACxB,gCAAA,UAAU,EAAE,iBAAiB;gCAC7B,IAAI,EAAE,CAAC,UAAU,CAAC;AACrB,6BAAA;yBACJ,CAAC;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,sBAAsB;wBACtB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,2BAA2B;wBAC3B,iCAAiC;wBACjC,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,uBAAuB;wBACvB,wBAAwB;wBACxB,YAAY;wBACZ,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,wBAAwB;AACzB,qBAAA;iBACF,CAAA;;;AC1ID;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.ts","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.html","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.ts","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.html","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.ts","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.component.ts","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport { show as showSnackbar } from \"node-snackbar\"\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#5cbb3a\",// $color-success-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#f1b10b\",// $color-alert-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n showSnackbar({\n pos: \"top-center\",\n text: this.getErrorMessage(err),\n textColor: \"white\",\n backgroundColor: \"#dc3e33\",// $color-error-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss']\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n <i *ngIf=\"checked && !indeterminate\"\n class=\"material-icons app-checkbox-icon\">done</i>\n <i *ngIf=\"indeterminate\"\n class=\"material-icons app-checkbox-icon\">remove</i>\n </button>\n <div class=\"app-checkbox-label\"\n *ngIf=\"label\"\n [ngStyle]=\"{'color': labelColor }\">\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{ label }}\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss']\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n <ng-container *ngIf=\"!customTarget\">\n <div *ngIf=\"icon == 'text'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n\n <div *ngIf=\"icon == 'paint'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n </ng-container>\n\n <div *ngIf=\"opened\"\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n\n <div class=\"colors-container\">\n <div *ngFor=\"let row of colorsRows\"\n class=\"color-row\">\n <div *ngFor=\"let rowColor of row.colors\"\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n <div *ngIf=\"rowColor == color\"\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"showNone\"\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n </div>\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public activateSearchBox() {\n this.searchInput.nativeElement.focus();\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\">\n <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder | translate}}\"\n [disabled]=\"disabled\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (click)=\"clear()\">close</i>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n <div *ngIf=\"showPanel\"\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n\n\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n <div *ngFor=\"let config of filteredColumnsConfiguration\"\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n </div>\n\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss']\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n\n constructor(private _host: ElementRef) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.src) {\n // apply styles to host\n const host = this._host.nativeElement as HTMLElement;\n host.style[\"mask-image\"] = `url(${this.src})`;\n host.style[\"-webkit-mask-image\"] = `url(${this.src})`;\n }\n }\n}\n","","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss']\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\">&nbsp;{{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\">&nbsp;{{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n <div #dateMenu\n *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span *ngIf=\"showSeconds\">:</span>\n <div class=\"input-wrapper\" *ngIf=\"showSeconds\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss']\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (!this.isOpen) {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el.name === 'number' ? el.name.toString() : el.name;\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el.id);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el.id));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item.name.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => d.children?.length > 0);\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item.id, item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item.id;\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n if (!item.children?.length) return 0;\n let count = 0;\n for (const childId of item.children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (item.children?.length) {\n this._childCountCache.set(item.id, countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem.id) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!dsItem.children?.length) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n if (!dsItem.children?.length) return result;\n for (const childId of dsItem.children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !parent.children?.length) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n if (!item.children?.length) return;\n this.dataSource.forEach(data => {\n if (item.id == data.id) {\n return;\n }\n if (item.children.includes(<string>data.id)) {\n data.checked = item.checked;\n if (data.children?.length) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n if (!parent?.children?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parent.children[parent.children.length - 1];\n isLastFlags.push(current!.id === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem.name?.toString() | translate\"></zen-checkbox>\n <span *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"dsItem.children?.length\"\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss']\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<div class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <label class=\"app-radio-button-label\"\n for=\"{{value}}\">\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{label | translate}}\n </label>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss']\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { ZenduSearchBoxComponent } from '../search-box/zendu-search-box.component';\nimport { Util } from '../util';\nimport { DATEPICKER_POSITION } from '../datepicker/datepicker';\nimport { DateRange } from './dateRange';\nimport { Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n})\nexport class ZenduFilterComponent implements OnChanges {\n @Input() config: FiltersConfig = { items: [] };\n\n @Input() filter: object;\n\n @Input() position = 'right';\n\n @Input() resetBehavior: 'set_all' | 'clear' = 'clear';\n\n @Output() filterChange = new EventEmitter<object>();\n\n @Input() isVisible = false;\n\n @Output() isVisibleChange = new EventEmitter<boolean>();\n\n @Input() customTrigger = false;\n\n @Input() imageUrl: string;\n\n @Input() label: string;\n\n @Input() showOptions: boolean;\n\n @Input() customOptions: string;\n\n @Input() wrapperBodyClass: string;\n\n @Input() customPosition: 'fixed' | 'absolute' = 'fixed';\n\n public searchText = '';\n\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n public menuLeft = '0px';\n\n public menuRight = '0px';\n\n public menuTop = '0px';\n\n public menuBottom = '0px';\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\n\n public datepickerPosition = DATEPICKER_POSITION;\n\n public selectedDateRangeOptions: { [key: string]: string } = {};\n\n @ViewChild('searchBox', { static: false }) searchBox: ZenduSearchBoxComponent;\n\n @ViewChild('mainComponent', { static: false })\n _componentElement: ElementRef<HTMLElement>;\n constructor(public renderer: Renderer2) {}\n\n public ngOnChanges(changes: any): void {\n if (changes.config && changes.config.currentValue) {\n // init values\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n item.dataSource = item.dataSource\n ? this.extractUniqueDataSource(item.dataSource)\n : [];\n } else if (item.type === 'dateRange' && !item.dateRange) {\n item.dateRange = { start: null, end: null };\n\n // init date range options\n if (item.showDateRangeOptions && !item.dateRangeOptions?.length) {\n item.dateRangeOptions = this.getDefaultDateRangeOptions();\n }\n } else if (item.type === 'numberRange' && !item.numberRange) {\n item.numberRange = {};\n }\n\n if (typeof item.showTime !== 'boolean') {\n item.showTime = true;\n }\n }\n\n this.filterItems();\n\n this.resetedFilter = this.getFilterObject();\n this.filter = this.getFilterObject();\n this.lastAppliedFilter = Util.clone(this.filter);\n }\n\n if (changes.filter && changes.filter.currentValue) {\n this.lastAppliedFilter = Util.clone(changes.filter.currentValue);\n\n this.updateAppliedState();\n }\n\n if (changes.isVisible && changes.isVisible.currentValue) {\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isVisible) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n // element not in the DOM\n return;\n }\n if (this._componentElement.nativeElement.contains(target)) {\n return;\n }\n\n // hide the menu for outside click\n this.hide();\n\n // restore values\n this.restorePreviousApplied();\n }\n\n @HostListener('window:resize', ['$event'])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', ['$event'])\n windowScroll() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent) {\n if (!this.isVisible) {\n return;\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n return;\n }\n\n if (\n this._componentElement.nativeElement.contains(target) &&\n !target.classList.contains('button-stroked')\n ) {\n return;\n }\n this.hide();\n this.restorePreviousApplied();\n }\n }\n\n public focusSearchBox() {\n this.searchBox.doFocus();\n }\n\n public isMenuIsVisible(item: FiltersConfigItem) {\n if (item.isLazyLoading) {\n if (item.isLoadingNow || item.canLoadMore !== false) {\n return true;\n }\n if (this.searchText) {\n return item.filteredDataSource?.length > 0;\n }\n return true;\n }\n\n if (item.filteredDataSource && this.searchText) {\n if (!item.filteredDataSource.length) {\n return false;\n }\n }\n\n return true;\n }\n\n private extractUniqueDataSource(\n array: {\n id: string | number;\n name: string | number;\n }[]\n ): MultiSelectItem[] {\n const items = array.filter((el) => {\n return Boolean(\n typeof el.id === 'number'\n ? typeof el.id !== undefined\n : el.id && typeof el.name === 'number'\n ? typeof el.name !== undefined\n : el.name\n );\n });\n const uniqItems = uniqBy(items, (el) => el.id);\n // add index to each uniqItems\n uniqItems.forEach(\n (el: MultiSelectItem, index: number) => (el.index = index)\n );\n return uniqItems;\n }\n\n public onSelectAll(item: FiltersConfigItem) {\n item.dataSource.forEach((d) => (d.checked = item.isSelectedAll));\n }\n\n public isItemActive(item: FiltersConfigItem): boolean {\n if (item.type === 'multiselect') {\n const checkedItems = item.dataSource.filter((el) => el.checked);\n item.isSelectedAll = checkedItems.length === item.dataSource.length;\n return checkedItems.length > 0;\n } else if (item.type === 'radio') {\n return item.radioOptions.some((ro) => ro.selected);\n } else if (item.type === 'numberRange') {\n return Boolean(item.numberRange.from || item.numberRange.to);\n } else if (item.type === 'dateRange') {\n return Boolean(item.dateRange.start || item.dateRange.end);\n } else if (item.type === 'date') {\n return Boolean(item.date);\n } else {\n return false;\n }\n }\n\n public searchTextChanged() {\n // run the lazy loading\n // the filterItems called from onChanges, so call lazy loading only on search change\n this.resetLazyLoadingSources(false);\n\n this.filterItems();\n }\n\n private async resetLazyLoadingSources(showSelectedOnTop: boolean) {\n const requests = [];\n for (const configItem of this.config.items) {\n if (configItem.isLazyLoading) {\n configItem.canLoadMore = true;\n configItem.filteredDataSource = [];\n requests.push(this.loadMore(configItem, showSelectedOnTop));\n }\n }\n\n await Promise.all(requests);\n\n // filter non-lazy loading items\n this.filterItems();\n }\n\n private filterItems() {\n let hasData = false;\n\n for (const configItem of this.config.items) {\n if (configItem.type === 'multiselect') {\n if (configItem.isLazyLoading) {\n if (configItem.isLoadingNow) {\n // mark as data available in loading state\n hasData = true;\n } else if (configItem.filteredDataSource?.length) {\n hasData = true;\n }\n } else {\n const isTree = this.hasTreeData(configItem);\n if (isTree && this.searchText) {\n // Build a local lookup map for ancestor traversal\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n\n // For tree data, include matching items and their ancestors\n const matchingIds = new Set<string | number>();\n for (const el of configItem.dataSource) {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n if (preparedName.toLowerCase().includes(this.searchText.toLowerCase())) {\n matchingIds.add(el.id);\n // Add all ancestors\n let current = el;\n while (current.parentId) {\n matchingIds.add(current.parentId);\n current = localMap.get(current.parentId);\n if (!current) break;\n }\n }\n }\n configItem.filteredDataSource = configItem.dataSource.filter(\n (el) => matchingIds.has(el.id)\n );\n // Auto-expand parents when searching\n for (const el of configItem.filteredDataSource) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n } else {\n configItem.filteredDataSource = configItem.dataSource.filter((el) => {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n return preparedName\n .toLowerCase()\n .includes(this.searchText.toLowerCase());\n });\n if (isTree) {\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n }\n }\n\n if (configItem.filteredDataSource.length) {\n hasData = true;\n }\n }\n } else if (configItem.type === 'dateRange') {\n if (\n this.searchText &&\n !Boolean(configItem.dateRange.start || configItem.dateRange.end)\n ) {\n configItem.filteredDataSource = [];\n }\n } else if (configItem.type === 'numberRange') {\n if (\n this.searchText &&\n !Boolean(configItem.numberRange.from || configItem.numberRange.to)\n ) {\n configItem.filteredDataSource = [];\n }\n }\n }\n\n this.showNoFilterResult = this.searchText && !hasData;\n }\n\n public async loadMore(item: FiltersConfigItem, showSelectedOnTop: boolean) {\n try {\n item.isLoadingNow = true;\n if (!item.lazyLoader) {\n throw `loader is not available`;\n }\n if (!item.filteredDataSource) {\n item.filteredDataSource = [];\n }\n\n // load first 10 records for the the first time\n const limit = item.filteredDataSource.length == 0 ? 10 : 100;\n const newItems = await item.lazyLoader(\n { text: this.searchText || '' },\n item.filteredDataSource.length,\n limit\n );\n\n item.canLoadMore = newItems.length == limit;\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n item.filteredDataSource = item.filteredDataSource.concat(newItems);\n\n // the dataSource contains the selected items\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (showSelectedOnTop) {\n // remove the checked items first\n item.filteredDataSource = item.filteredDataSource.filter(\n (i) => !checkedIds.includes(i.id)\n );\n // add all checked items to the top\n const checkedItems = item.dataSource.filter((i) => i.checked);\n item.filteredDataSource = checkedItems.concat(item.filteredDataSource);\n } else {\n // mark as checked based on the dataSource\n for (let dsItem of item.filteredDataSource) {\n dsItem.checked = checkedIds.includes(dsItem.id);\n }\n }\n } catch (err) {\n console.error(err);\n } finally {\n item.isLoadingNow = false;\n }\n }\n\n public toggleItem(item: FiltersConfigItem) {\n item.expanded = !item.expanded;\n\n if (item.isLazyLoading) {\n if (item.expanded) {\n if (item.canLoadMore !== false && !item.filteredDataSource?.length) {\n this.loadMore(item, false);\n }\n }\n }\n }\n\n private resetFilters() {\n let selectAll = this.resetBehavior === 'set_all';\n this.selectedDateRangeOptions = {};\n\n for (const item of this.config.items) {\n if (item.dataSource) {\n item.isSelectedAll = selectAll;\n\n for (const dsItem of item.dataSource) {\n dsItem.checked = selectAll;\n }\n }\n\n if (item.dateRange) {\n item.dateRange = { start: null, end: null };\n }\n\n if (item.numberRange) {\n item.numberRange = { from: null, to: null };\n }\n\n if (item.date) {\n item.date = new Date();\n }\n if (item.type === 'toggle') {\n item.enabled = false;\n }\n if (item.type === 'radio') {\n item.radioOptions.forEach((e) => {\n if (e.id === item.selectedRadio) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n });\n }\n }\n }\n\n private restorePreviousApplied(): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = this.lastAppliedFilter[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n }\n break;\n case 'dateRange':\n item.dateRange = this.lastAppliedFilter[item.key] || {\n start: null,\n end: null,\n };\n break;\n case 'numberRange':\n item.numberRange = this.lastAppliedFilter[item.key] || {};\n break;\n case 'toggle':\n item.dateRange = this.lastAppliedFilter[item.key];\n break;\n case 'date':\n item.date = this.lastAppliedFilter[item.key];\n break;\n case 'radio':\n item.selectedRadio = this.lastAppliedFilter[item.key];\n break;\n }\n }\n }\n\n public reset() {\n this.resetFilters();\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n public apply() {\n this.filter = this.getFilterObject();\n let hasError = false;\n for (const iterator of this.config.items) {\n const itemFlag = this.onCheckValidity(iterator);\n if (!itemFlag) {\n hasError = true;\n }\n }\n if (hasError) {\n setTimeout(() => (this.errorMessage = []), 5000);\n return;\n } else {\n this.errorMessage = [];\n }\n this.lastAppliedFilter = Util.clone(this.filter);\n\n this.filterChange.emit(this.filter);\n\n // update the apply state\n this.updateAppliedState();\n\n this.hide();\n }\n\n private updateAppliedState() {\n this.isApplied = false;\n // showing checked items on top of the list\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n // resort first based on index\n item.dataSource.sort((a, b) => a.index - b.index);\n\n // then sort based on checked items again\n item.dataSource.sort(\n (a: DataSource, b: DataSource) =>\n Number(b.checked || 0) - Number(a.checked || 0)\n );\n }\n }\n\n if (Object.keys(this.filter).length > 0) {\n if (this.resetedFilter) {\n // Filter was reset, so compare the reset filter object with the current filter\n // When user click on Reset and Then Apply, filter must unhighlighted\n if (\n JSON.stringify(this.resetedFilter) !== JSON.stringify(this.filter)\n ) {\n this.isApplied = true;\n }\n } else {\n this.isApplied = true;\n }\n }\n\n let wrapperClass = document.querySelector('.action-menu-body');\n if (this.wrapperBodyClass) {\n wrapperClass = document.querySelector(`.${this.wrapperBodyClass}`);\n }\n if (wrapperClass) {\n wrapperClass.scrollTo({ top: 0, behavior: 'auto' });\n }\n }\n\n private getFilterObject() {\n const filter = {};\n\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource && item.dataSource.length) {\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange':\n if (item.dateRange && item.dateRange.start && item.dateRange.end) {\n filter[item.key] = item.dateRange;\n }\n break;\n case 'numberRange':\n if (\n item.numberRange &&\n typeof item?.numberRange?.from === 'number' &&\n typeof item?.numberRange?.to === 'number'\n ) {\n filter[item.key] = item.numberRange;\n }\n break;\n case 'toggle':\n filter[item.key] = item.enabled || false;\n break;\n case 'date':\n if (item.date) {\n filter[item.key] = item.date;\n }\n break;\n case 'radio':\n filter[item.key] = item.radioOptions.find((ro) => ro.selected)?.id;\n break;\n }\n }\n\n return filter;\n }\n\n public hide() {\n this.isVisible = false;\n this.searchText = '';\n this.filterItems();\n\n this.isVisibleChange.emit(false);\n }\n\n public radioChanged(value: string, item: FiltersConfigItem): void {\n item.radioOptions.forEach((opt) => (opt.selected = opt.id === value));\n }\n\n public checkChanged(item: DataSource, configItem: FiltersConfigItem): void {\n if (configItem.isLazyLoading) {\n // store the check items in the data source\n const existItem = configItem.dataSource.find((i) => i.id == item.id);\n if (existItem) {\n existItem.checked = item.checked;\n } else {\n configItem.dataSource.push(item);\n }\n // keep only checked\n configItem.dataSource = configItem.dataSource.filter((d) => d.checked);\n }\n // For tree items, zen-groups handles cascade internally\n }\n\n public toggle() {\n this.isVisible = !this.isVisible;\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n\n if (this.isVisible) {\n this.resetLazyLoadingSources(true);\n }\n }\n\n public onCheckValidity(item: FiltersConfigItem) {\n if (item.type === 'numberRange') {\n if (\n typeof item.numberRange.from === 'number' &&\n typeof item.numberRange.to === 'number' &&\n item.numberRange.from > item.numberRange.to\n ) {\n this.errorMessage.push(\n `Invalid Number range: The Min number cannot be greater than the Max number.`\n );\n return false;\n }\n }\n if (item.type === 'dateRange') {\n if (\n item.dateRange.start &&\n item.dateRange.end &&\n new Date(item.dateRange.start) > new Date(item.dateRange.end)\n ) {\n this.errorMessage.push(\n `Invalid Date range: The Start date cannot be after the End date.`\n );\n return false;\n }\n }\n return true;\n }\n\n public updatePlacement(pos: 'fixed' | 'absolute' = 'fixed') {\n const host = this._componentElement.nativeElement as HTMLElement;\n const container = host.querySelector('.menu-content') as HTMLElement;\n if (!container) return;\n\n const rect =\n pos === 'fixed'\n ? host.getBoundingClientRect()\n : container.getBoundingClientRect();\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const bottom = window.innerHeight - top;\n\n if (pos === 'absolute') {\n this.renderer.addClass(container, 'absolute');\n this.renderer.removeStyle(container, 'inset');\n } else {\n this.renderer.removeClass(container, 'absolute');\n }\n\n if (pos === 'fixed') {\n if (this.position.includes('auto')) {\n const horizontalPosition = this.getHorizontalPosition();\n this.menuRight =\n horizontalPosition === 'left'\n ? `${window.innerWidth - right}px`\n : 'unset';\n this.menuLeft = horizontalPosition === 'right' ? `${left}px` : 'unset';\n } else if (this.position.includes('left')) {\n this.menuRight = `${window.innerWidth - right}px`;\n this.menuLeft = 'unset';\n } else {\n this.menuLeft = `${left}px`;\n this.menuRight = 'unset';\n }\n\n if (this.position.includes('auto')) {\n const verticalPosition = this.getVerticalPosition();\n this.menuTop =\n verticalPosition === 'bottom' ? `${top + 42}px` : 'unset';\n this.menuBottom = verticalPosition === 'top' ? `${bottom}px` : 'unset';\n } else if (this.position.includes('top')) {\n this.menuTop = 'unset';\n this.menuBottom = `${bottom + 10}px`;\n } else {\n this.menuTop = `${top + 55}px`;\n this.menuBottom = 'unset';\n }\n } else {\n let verticalClass = '';\n let horizontalClass = '';\n\n if (this.position.includes('auto')) {\n horizontalClass = this.getHorizontalPosition();\n verticalClass = this.getVerticalPosition();\n } else {\n horizontalClass = this.position.includes('left') ? 'left' : 'right';\n verticalClass = this.position.includes('top') ? 'top' : 'bottom';\n }\n [\n 'dropdown-left',\n 'dropdown-right',\n 'dropdown-top',\n 'dropdown-bottom',\n ].forEach((c) => this.renderer.removeClass(container, c));\n this.renderer.addClass(container, `dropdown-${horizontalClass}`);\n this.renderer.addClass(container, `dropdown-${verticalClass}`);\n }\n }\n\n private getVerticalPosition(): 'bottom' | 'top' {\n const top =\n this._componentElement.nativeElement.getBoundingClientRect().top;\n return top > window.innerHeight / 2 ? 'top' : 'bottom';\n }\n\n private getHorizontalPosition(): 'right' | 'left' {\n const left =\n this._componentElement.nativeElement.getBoundingClientRect().left;\n return left > window.innerWidth / 2 ? 'left' : 'right';\n }\n\n public getDefaultDateRangeOptions(): {\n name: string;\n dateRange: DateRange;\n }[] {\n return [\n {\n name: 'Today',\n dateRange: {\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate(),\n },\n },\n {\n name: 'Yesterday',\n dateRange: {\n start: moment().subtract(1, 'days').startOf('day').toDate(),\n end: moment().subtract(1, 'days').endOf('day').toDate(),\n },\n },\n {\n name: 'This Week',\n dateRange: {\n start: moment().startOf('week').toDate(),\n end: moment().endOf('week').toDate(),\n },\n },\n {\n name: 'Last Week',\n dateRange: {\n start: moment().subtract(7, 'days').startOf('week').toDate(),\n end: moment().subtract(7, 'days').endOf('week').toDate(),\n },\n },\n {\n name: 'This Month',\n dateRange: {\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate(),\n },\n },\n {\n name: 'Last Month',\n dateRange: {\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate(),\n },\n },\n ];\n }\n\n private sortTreeOrder(items: DataSource[], treeMap: Map<string | number, DataSource>): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public hasTreeData(configItem: FiltersConfigItem): boolean {\n return configItem.dataSource?.some(d => d.children?.length > 0) || false;\n }\n\n public handleDateRangeOptionClick(item, option) {\n item.dateRange = option.dateRange;\n this.selectedDateRangeOptions[item.key] = option.name;\n }\n\n public handleCustomDateRangeClick(item) {\n this.selectedDateRangeOptions[item.key] = 'Custom';\n }\n\n public handleEndDateChange(item) {\n if (!item.showTime) {\n item.dateRange.end = moment(item.dateRange.end).endOf('day').toDate();\n }\n }\n\n public get hasMultiselectItems(): boolean {\n return this.config.items.some(\n (item) => item.type === 'multiselect' && item.dataSource?.length > 0\n );\n }\n\n public get selectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n if (item.type === 'multiselect' && item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n <ng-container *ngIf=\"!customTrigger\">\n <button (click)=\"toggle()\"\n class=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n <zen-icon [src]=\"imageUrl\"\n *ngIf=\"imageUrl\"></zen-icon>\n <i class=\"filter-icon material-icons\"\n *ngIf=\"!imageUrl\">filter_list</i>\n <span *ngIf=\"label\">{{ label | translate }}</span>\n </button>\n </ng-container>\n\n <ng-content *ngIf=\"customTrigger\"></ng-content>\n\n <div [hidden]=\"!isVisible\"\n class=\"action-menu menu-content\"\n [class.customTrigger]=\"customTrigger\"\n [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"action-menu-header\">\n <zen-search-box [(text)]=\"searchText\"\n #searchBox\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"action-menu-body items-wrapper\"\n ngClass=\"{{wrapperBodyClass}}\">\n <ng-container *ngIf=\"errorMessage.length\">\n <li *ngFor=\"let item of errorMessage\"\n class=\"error-msg\">{{item | translate }}</li>\n </ng-container>\n\n <div *ngFor=\"let item of config.items\">\n <div class=\"menu-item\"\n *ngIf=\"isMenuIsVisible(item)\">\n\n <!-- Divider between two filter -->\n <div *ngIf=\"item.type === 'divider'\">\n <p class=\"filter-divider\"></p>\n </div>\n\n <!-- Boolean toggle -->\n <div *ngIf=\"item.type === 'toggle'\"\n class=\"action-item toggle-row\">\n <div>{{item.title | translate}}</div>\n <zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n </div>\n\n <button class=\"action-item expander-item\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n </button>\n\n <div class=\"action-item section-title\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && item.disableCollapse\">\n {{item.title | translate}}\n </div>\n\n <ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n <div [ngSwitch]=\"item.type\">\n <!-- Multiselect -->\n <div *ngSwitchCase=\"'multiselect'\">\n <!-- Lazy loading mode -->\n <ng-container *ngIf=\"item.isLazyLoading\">\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n <div *ngIf=\"item.canLoadMore && !item.isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(item, false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"item.isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!item.isLazyLoading && !hasTreeData(item)\">\n <div class=\"action-item-checkbox ds-item select-all\" *ngIf=\"!item.hideSelectAll\">\n <zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n </div>\n\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n </ng-container>\n\n <!-- Tree view mode -->\n <zen-groups *ngIf=\"!item.isLazyLoading && hasTreeData(item)\"\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n </div>\n\n <!-- Date range picker -->\n <div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </ng-container>\n </div>\n\n <!-- Date picker -->\n <div *ngSwitchCase=\"'date'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'Date' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.date\"\n [showTime]=\"item.showTime\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </div>\n\n <!-- Number range -->\n <div *ngSwitchCase=\"'numberRange'\"\n class=\"filter-row number-range-row\">\n <div>\n <div class=\"lbl\">{{'Min' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.from\"\n type=\"number\" />\n </div>\n <div>\n <div class=\"lbl\">{{'Max' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.to\"\n type=\"number\" />\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let option of item.radioOptions\"\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n <span *ngIf=\"showNoFilterResult\"\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n <span class=\"selected-count\" *ngIf=\"hasMultiselectItems\">{{ selectedCount }} {{'Selected' | translate}}</span>\n <div class=\"filter-footer-actions\">\n <button (click)=\"reset()\"\n class=\"filter-btn-clear\"\n [class.has-selection]=\"selectedCount > 0 && hasMultiselectItems\">\n {{'Clear Filter' | translate}}\n </button>\n <button (click)=\"apply()\"\n class=\"filter-btn-apply\">\n {{'Apply' | translate}}\n </button>\n </div>\n </div>\n\n </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]'\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]'\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]'\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<HTMLElement>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ContentChild } from '@angular/core';\n\nimport { ZenduSelectOptionDirective } from './templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './templates/zendu-select-value.directive';\nimport { ZenduSelectButtonDirective } from './templates/zendu-select-button.directive';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss']\n})\nexport class ZenduSelectComponent implements OnChanges {\n /**\n * 2-Way component property for selected items.\n * Don't initialize property on constructor to prevent change source parameter\n */\n @Input() selectModel: any | any[];\n\n /**\n * callback to emit changes for parent component\n */\n @Output() selectModelChange = new EventEmitter<any>();\n\n /**\n * List of options for select\n */\n @Input() options: any[] = [];\n\n /**\n * Property to set custom placeholder value\n */\n @Input() placeholder = 'Select Items';\n\n /**\n * This is a key value to get display name from option object\n */\n @Input() displayProp: string;\n\n /**\n * This is a key value to get id from option object\n */\n @Input() idProp: string;\n\n /**\n * Component property to enable search\n */\n @Input() hasSearch: boolean;\n\n /**\n * Component property to return whole option object\n * By default only id value is returned\n */\n @Input() returnOption: boolean;\n\n /**\n * Component property to enable multiselect\n */\n @Input() isMultiselect: boolean;\n\n /**\n * Component property to disable component\n */\n @Input() disabled = false;\n\n /**\n * Show the custom icon for toggle\n */\n @Input() customIcon = \"\";\n\n /**\n * Show the custom icon for start\n */\n @Input() customIconStart = \"\";\n\n /**\n * Color for custom icon\n */\n @Input() customIconColor = \"\";\n\n /**\n * Truncate text with \"...\" at the end\n */\n @Input() isTruncate: boolean = false;\n\n /**\n * show Add New Option at first place\n */\n @Input() enableAddNewOption: boolean = false;\n\t\n /**\n * Show Add New option text by default if newOptionText empty\n */\n @Input() showDefaultAddOption: boolean = true;\n\n /**\n * display custom text for Add New Option\n */\n @Input() newOptionText: string;\n\n /**\n * Emit event when Add New Option is clicked\n */\n @Output() addNewOption: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * show remove Option at first place\n */\n @Input() enableRemoveOption: boolean = false;\n\n /**\n * display custom text for remove Option\n */\n @Input() removeOptionText: string;\n\n /**\n * Enable lazy loading for options\n */\n @Input() isLazyLoading = false;\n\n /**\n * Lazy loader function to fetch options\n */\n @Input() lazyLoader?: (search: { text?: string, ids?: string[] }, offset: number, limit: number) => Promise<DataSource[]>;\n\n /**\n * Preferred direction for dropdown menu placement\n */\n @Input() preferedOpenDirection?: \"bottom\" | \"top\";\n\n /**\n * Emit event when remove Option is clicked\n */\n @Output() removeOption: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Emit event when select is closed, sending the selected data\n */\n @Output() closed: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Filtered items visible on dropdown\n */\n public filteredOptions: any[];\n\n /**\n * Is dropdown expanded\n */\n public isExpanded = false;\n\n public searchText = '';\n\n public labelText = '';\n\n public isTopMenuDirection = false;\n\n public option: any\n\n public canLoadMore = false;\n\n public isLoadingNow = false;\n\n public constructor(\n private _element: ElementRef) {\n }\n\n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n\n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n\n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hideDropDown(true);\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changeObj: any): void {\n this.filterOptions();\n this.updateLabel();\n\n if (changeObj[\"selectModel\"]) {\n if (this.isLazyLoading && this.selectModel?.length) {\n if (!this.filteredOptions?.length && !this.isExpanded) {\n // preload data to show the labels\n this.loadMore(true);\n }\n }\n }\n }\n\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !this.selectModel || !this.selectModel.length;\n } else {\n return typeof this.selectModel === 'undefined' || this.selectModel === null;\n }\n }\n\n public handleOptionClick(option: string | object) {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getId(option);\n\n if (this.isMultiselect) {\n this.toggleOption(optionValue);\n } else {\n this.singleSelect(optionValue);\n }\n\n this.emitChange();\n }\n\n // Logic for single select\n private singleSelect(value: string | object) {\n this.selectModel = value;\n\n // Hide dropdown if single select\n this.hideDropDown(true);\n }\n\n public toggleExpand() {\n this.isExpanded = !this.isExpanded;\n this.searchText = \"\";\n this.filterOptions();\n this.updatePlacement();\n\n if (this.isExpanded && this.isLazyLoading) {\n this.loadMore(true);\n }\n }\n\n // Logic for multiselect\n private toggleOption(value: string | object): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n\n const index = this.getElementIndex(value);\n\n if (index < 0) {\n this.selectModel.push(value);\n this.toggleChildren(true);\n } else {\n this.selectModel.splice(index, 1);\n this.toggleChildren(false);\n }\n\n this.updateLabel();\n }\n\n private toggleChildren(checked: boolean): void {\n if (!this.option || !this.option.Childrens?.length) {\n return;\n }\n this.option.Childrens.forEach((child: string) => {\n this.option = this.options.find(el => this.getId(el) === child);\n const childIndex = this.selectModel.findIndex(el => this.getId(el) === child);\n if (this.option && checked && childIndex < 0) {\n this.selectModel.push(child);\n } else if (!checked && childIndex >= 0) {\n this.selectModel.splice(childIndex, 1);\n }\n // Recursive call to handle nested children\n this.toggleChildren(checked);\n });\n }\n\n private getElementIndex(value: string | object): number {\n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n\n public toggleAll(): void {\n if (this.selectModel.length !== this.options.length) {\n this.selectModel = this.options.map(el => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n\n this.emitChange();\n }\n\n public onSearchChange(): void {\n this.filterOptions();\n\n if (this.isLazyLoading) {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }\n }\n\n private filterOptions(): void {\n const options = this.options.slice(0);\n\n if (!this.searchText) {\n this.filteredOptions = options;\n return;\n }\n\n const regex = new RegExp(this.searchText, 'i');\n this.filteredOptions = options.filter(option => regex.test(this.getName(option)));\n }\n\n public isSelected(option: string | object): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n\n const optionId = this.getId(option);\n\n if (this.isMultiselect) {\n return this.selectModel.findIndex(el => this.getId(el) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel) === optionId;\n }\n }\n\n public updateLabel() {\n if (this.isModelEmpty()) {\n return;\n }\n\n if (this.isMultiselect) {\n const selectedCount = this.selectModel.length;\n\n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n\n public getNameFromValue(val: string | object): string {\n if (this.returnOption) {\n return this.getName(val);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => i.id == val);\n return this.getName(opt);\n }\n else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val)\n return this.getName(option ?? val);\n }\n }\n }\n\n public getName(option: string | object): string {\n if (typeof option === 'object') {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .join(\" \");\n return combinedProps;\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n } else {\n return option;\n }\n }\n\n\n private getId(option: string | object): string {\n if (typeof option === 'object') {\n if (this.idProp) {\n return this.getRecursiveProperty(option, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option;\n }\n }\n\n private getRecursiveProperty(object: any, path: string): string {\n return path.split('.').reduce((obj, x) => {\n if (obj) {\n return obj[x];\n } else {\n return null;\n }\n }, object);\n }\n\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isExpanded) {\n this.closed.emit(this.selectModel);\n }\n\n this.isExpanded = false;\n }\n\n private emitChange() {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n\n private updatePlacement() {\n // update menu position base on scroll\n this.isTopMenuDirection = this.getMenuDirection() === \"top\";\n }\n\n private getMenuDirection(): \"bottom\" | \"top\" {\n\n if (this.preferedOpenDirection) {\n return this.preferedOpenDirection;\n }\n\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n\n const height = window.innerHeight;\n\n if (top > (height / 2)) {\n return \"top\";\n }\n else {\n return \"bottom\"\n }\n }\n\n private getMaxMenuHeight() {\n const containerElement = this.getContainerElement();\n if (!containerElement || !containerElement.clientHeight) {\n return \"190px\";\n }\n\n const parentHeight = containerElement.clientHeight;\n let height = Math.round((parentHeight / 2) - 25);\n height = Math.min(216, height);\n height = Math.max(96, height);\n return `${height}px`;\n }\n\n private getContainerElement() {\n const component = this._element.nativeElement as HTMLElement;\n const container = component.getElementsByClassName(\"app-select\").item(0) as HTMLElement;\n return container.offsetParent;\n }\n\n public handleAddNewOption() {\n this.addNewOption.emit({ value: this.searchText })\n this.hideDropDown(true)\n }\n\n public handleRemoveOption() {\n this.removeOption.emit({ removed: true })\n this.hideDropDown(true)\n }\n\n\n\n public async loadMore(showSelectedOnTop: boolean) {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n\n // load first 10 records for the the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n\n this.canLoadMore = (newItems.length == limit);\n\n // the selectModel contains the selected items ids\n const checkedIds = this.selectModel as string[];\n\n if (showSelectedOnTop && checkedIds?.length) {\n\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(i.id));\n newItems = newItems.filter(i => !checkedIds.includes(i.id as string));\n\n // add all checked items to the top \n const checkedItems = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = checkedItems.concat(this.filteredOptions);\n\n this.updateLabel();\n }\n\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n this.filteredOptions = this.filteredOptions.concat(newItems);\n\n }\n catch (err) {\n console.error(err);\n }\n finally {\n this.isLoadingNow = false;\n }\n }\n}\n","<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss']\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n /*\n\t * 2-Way component property for current page number.\n\t */\n @Input() page: number;\n\n /*\n * property for page size.\n */\n @Input() perPage: number;\n\n /*\n * Component property for total records\n */\n @Input() count: number;\n\n @Output() pageChange = new EventEmitter<number>();\n\n @Output() perPageChange = new EventEmitter<number>();\n\n public CurrentPageItemsCount: number;\n\n public pagesCount: number;\n\n public pages: PageItem[];\n\n public pagesInGroup = 7;\n\n public availablePagesSize = [10, 20, 30, 40, 50];\n\n public totalPages: number;\n\n public constructor() {\n this.page = 1;\n this.perPage = 10;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"count\"]) {\n this.reCalculatePageCount();\n }\n }\n\n public nextPage(): void {\n if (this.page + 1 > this.totalPages) {\n return;\n }\n\n this.page++;\n\n this.pageChange.emit(this.page);\n }\n\n public prevPage(): void {\n if (this.page - 1 <= 0) {\n return;\n }\n\n this.page--;\n\n this.pageChange.emit(this.page);\n }\n\n public updatePageSize(): void {\n this.reCalculatePageCount();\n this.page = 1;\n\n this.pageChange.emit(this.page);\n this.perPageChange.emit(this.perPage);\n }\n\n public endRowSize(): number {\n const to = this.page * this.perPage;\n\n if (to <= this.count) {\n return to;\n } else {\n return this.count;\n }\n }\n\n public reCalculatePageCount() {\n let pages = this.count / this.perPage;\n\n if (this.count % this.perPage !== 0) {\n pages++;\n }\n\n this.totalPages = pages;\n }\n}\n","<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss']\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n @Input() width: string;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone;\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n}\n","<div class=\"phone-input-component\" [style.width]=\"width\">\n <div class=\"material-input\">\n <a class=\"country-select\"\n (click)=\"toggle()\">\n <img class=\"country-flag\"\n [src]=\"selectedCountry.flag\">\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_less</i>\n <div class=\"code\">{{ selectedCountry.countryCallingCode }}</div>\n </a>\n <input class=\"phone-input\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\"\n #input>\n </div>\n\n <div class=\"action-menu country-dropdown-list\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-body\">\n <!--Country's List-->\n <a class=\"action-item\"\n *ngFor=\"let country of countryList\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"country-flag\"\n [src]=\"country.flag\">\n <div>{{ country.countryName }}</div>\n <div>{{ country.countryCallingCode }}</div>\n </a>\n\n <!--Custom Country-->\n <a class=\"action-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"country-flag\"\n [src]=\"customCountry.flag\">\n <div>{{ customCountry.countryName }}</div>\n <div>{{ customCountry.countryCallingCode }}</div>\n </a>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss']\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'asc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_up\n </i>\n </div>\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'desc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_down\n </i>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss']\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() onLabel = \"On\";\n\n @Input() offLabel = \"Off\";\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"toggle-component\">\n <div class=\"toggle-component-content\"\n (click)=\"toggle()\">\n <div class=\"toggle-state toggle-state-left\"\n [ngClass]=\"enabled ? 'toggle-active' : ''\">\n {{onLabel}}\n </div>\n <div class=\"toggle-state toggle-state-right\"\n [ngClass]=\"enabled ? '' : 'toggle-active'\">\n {{offLabel}}\n </div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss']\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n <zen-icon *ngIf=\"icon\"\n [src]=\"icon\"></zen-icon>\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss']\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n <div class=\"colors-container\" *ngIf=\"canDoodle || canAddText\">\n <div class=\"colors\" *ngFor=\"let color of colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\ninterface BreadcrumbStep {\n text: string;\n active: boolean;\n /**\n * user's custom data\n */\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-breadcrumbs',\n templateUrl: './zendu-breadcrumbs.component.html',\n styleUrls: ['./zendu-breadcrumbs.component.scss'],\n})\nexport class ZenduBreadcrumbs {\n @Input() steps: BreadcrumbStep[] = [];\n\n /**\n * Enable manual activation. In this case active trips will managed by app\n */\n @Input() manualNavigation = false;\n\n @Output() onActivate = new EventEmitter<BreadcrumbStep>();\n\n public onStepClick(step: BreadcrumbStep) {\n if (this.manualNavigation) {\n return;\n }\n const activeIdx = this.steps.indexOf(step);\n // update states\n for (let [idx, step] of this.steps.entries()) {\n step.active = idx <= activeIdx;\n }\n this.onActivate.emit(step);\n }\n}\n","<div class=\"component\">\n <ng-container *ngFor=\"let step of steps; let isLast = last;\">\n <div class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n <div class=\"step\"\n [ngClass]=\"{\n 'active': step.active,\n 'mannual-navigation': manualNavigation,\n 'text-nowrap': steps.length === 1\n }\"\n (click)=\"onStepClick(step)\">\n {{step.text}}\n </div>\n <!-- last line -->\n <div *ngIf=\"isLast\"\n class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n </ng-container>\n\n</div>","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss']\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss']\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n <span *ngIf=\"uploadState != 'done'\">Upload File</span>\n <span *ngIf=\"uploadState == 'done'\">Uploaded File</span>\n </div>\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n *ngIf=\"uploadState != 'done'\">\n\n <div class=\"box\"\n *ngIf=\"!isFileSelected\">\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n\n <ng-container *ngIf=\"isFileSelected\">\n <!-- File selected state -->\n <ng-container *ngIf=\"uploadState == ''\">\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n </ng-container>\n\n <!-- Uploading state -->\n <ng-container *ngIf=\"uploadState == 'uploading'\">\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n\n <!-- Uploading done -->\n <div *ngIf=\"uploadState == 'done'\"\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n\n </div>\n </div>\n\n <div class=\"btn-upload-wrapper\">\n\n <button *ngIf=\"uploadState == ''\"\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n\n <button *ngIf=\"uploadState == 'uploading'\"\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n </div>\n\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss']\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text\n */\n @Input() text = \"\";\n}\n","<div class=\"component\">\n <!-- Progres bar -->\n <div *ngIf=\"type == 'bar'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-val\"\n [ngStyle]=\"{ 'width': value + '%' }\">\n <span class=\"value-text\">{{value}}%</span>\n </div>\n </div>\n <div class=\"progress-text\">\n {{text}}\n </div>\n </div>\n\n <!-- Circle progress -->\n <div *ngIf=\"type == 'circle'\"\n class=\"progress-circle-wrapper\">\n\n\n <div class=\"progress-circle\"\n [class.show-full-right-side]=\"value>=50\">\n\n <div class=\"center-pipe\"></div>\n\n <div class=\"circle-clipper\">\n <div class=\"right-full-bar progress-val-50\"></div>\n <div class=\"progress-bar-val progress-val-{{value}}\"></div>\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text\"> {{value}}%</div>\n <div class=\"progress-text\">{{text}}</div>\n </div>\n </div>\n </div>\n\n <!-- Half-Circle progress -->\n <div *ngIf=\"type == 'half-circle'\"\n class=\"progress-half-circle-wrapper\">\n\n <div class=\"progress-circle\">\n <div class=\"center-pipe\"></div>\n\n <div class=\"circle-clipper\">\n <div class=\"right-full-bar progress-val-50\"></div>\n <div class=\"progress-bar-val progress-val-{{value}}\"></div>\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text\"> {{value}}%</div>\n <div class=\"progress-text\">{{text}}</div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss']\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n *ngIf=\"displaySearchIcon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n *ngIf=\"address\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n <ul class=\"search-item-list\"\n *ngIf=\"addressList.length || isSearching\">\n <li *ngIf=\"isSearching\">Searching</li>\n <div *ngIf=\"!isSearching\">\n <li *ngFor=\"let address of addressList\"\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n </div>\n </ul>\n </div>\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n\tselector: 'zen-html5-video-player',\n\ttemplateUrl: './html5-video-player.component.html',\n\tstyleUrls: ['./html5-video-player.component.scss']\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss']\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss']\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss']\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss']\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss']\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n @ViewChild('pickerPopup') pickerPopup: ElementRef;\n\n isPickerVisible = false;\n\n hours: number[] = [];\n minutes: number[] = [];\n seconds: number[] = [];\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n right = false;\n bottom = false;\n\n private readonly ITEM_HEIGHT = 42;\n private isDragging = false;\n private dragStartY = 0;\n private dragStartScroll = 0;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n return this.mode === 'clock' ? 'Select Time' : '0 min';\n }\n\n get hourSeparator(): string {\n return this.mode === 'clock' ? ':' : 'hr';\n }\n\n get minuteSeparator(): string {\n return this.mode === 'clock' ? ':' : 'min';\n }\n\n get secondSeparator(): string {\n return this.mode === 'duration' ? 'sec' : '';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n if (this.showSeconds) {\n const s = this.formatNum(this.value.seconds);\n return `${h}.${m}.${s} ${this.value.period || 'AM'}`;\n }\n return `${h}.${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.buildRanges();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.buildRanges();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private buildRanges(): void {\n const maxHour = this.mode === 'clock' ? 12 : 23;\n const startHour = this.mode === 'clock' ? 1 : 0;\n this.hours = this.range(startHour, maxHour);\n this.minutes = this.range(0, 59);\n this.seconds = this.range(0, 59);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = val.hours;\n this.selectedMinutes = val.minutes;\n this.selectedSeconds = val.seconds;\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private range(start: number, end: number): number[] {\n const arr: number[] = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n selectHour(val: number): void {\n this.selectedHours = val;\n }\n\n selectMinute(val: number): void {\n this.selectedMinutes = val;\n }\n\n selectSecond(val: number): void {\n this.selectedSeconds = val;\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n onScroll(event: Event, type: 'hours' | 'minutes' | 'seconds'): void {\n const el = event.target as HTMLElement;\n const scrollTop = el.scrollTop;\n const index = Math.round(scrollTop / this.ITEM_HEIGHT);\n\n if (type === 'hours' && index >= 0 && index < this.hours.length) {\n this.selectedHours = this.hours[index];\n } else if (type === 'minutes' && index >= 0 && index < this.minutes.length) {\n this.selectedMinutes = this.minutes[index];\n } else if (type === 'seconds' && index >= 0 && index < this.seconds.length) {\n this.selectedSeconds = this.seconds[index];\n }\n }\n\n onMouseDown(event: MouseEvent, scrollEl: HTMLElement): void {\n this.isDragging = true;\n this.dragStartY = event.clientY;\n this.dragStartScroll = scrollEl.scrollTop;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent, scrollEl: HTMLElement): void {\n if (!this.isDragging) return;\n const delta = this.dragStartY - event.clientY;\n scrollEl.scrollTop = this.dragStartScroll + delta;\n }\n\n onMouseUp(): void {\n this.isDragging = false;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n *ngIf=\"isPickerVisible\"\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n\n <!-- Scroll Columns -->\n <div class=\"zen-tp__columns\">\n <!-- Hours -->\n <div class=\"zen-tp__scroll-group\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'hours')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let h of hours\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"h === selectedHours\"\n (click)=\"selectHour(h)\">\n {{ formatNum(h) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator\">{{ hourSeparator }}</span>\n\n <!-- Minutes -->\n <div class=\"zen-tp__scroll-group\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'minutes')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let m of minutes\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"m === selectedMinutes\"\n (click)=\"selectMinute(m)\">\n {{ formatNum(m) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator\" *ngIf=\"showSeconds && mode === 'clock'\">:</span>\n <span class=\"zen-tp__separator zen-tp__separator--unit\" *ngIf=\"mode === 'duration'\">min</span>\n\n <!-- Seconds -->\n <div class=\"zen-tp__scroll-group\" *ngIf=\"showSeconds\">\n <div class=\"zen-tp__scroll-col\"\n #scrollCol\n (scroll)=\"onScroll($event, 'seconds')\"\n (mousedown)=\"onMouseDown($event, scrollCol)\"\n (mousemove)=\"onMouseMove($event, scrollCol)\"\n (mouseup)=\"onMouseUp()\"\n (mouseleave)=\"onMouseUp()\">\n <div class=\"zen-tp__scroll-spacer\"></div>\n <div *ngFor=\"let s of seconds\"\n class=\"zen-tp__scroll-item\"\n [class.zen-tp__scroll-item--selected]=\"s === selectedSeconds\"\n (click)=\"selectSecond(s)\">\n {{ formatNum(s) }}\n </div>\n <div class=\"zen-tp__scroll-spacer\"></div>\n </div>\n <div class=\"zen-tp__fade zen-tp__fade--top\"></div>\n <div class=\"zen-tp__fade zen-tp__fade--bottom\"></div>\n <div class=\"zen-tp__highlight\"></div>\n </div>\n\n <span class=\"zen-tp__separator zen-tp__separator--unit\"\n *ngIf=\"mode === 'duration' && showSeconds\">\n sec\n </span>\n\n <!-- AM/PM Toggle (Clock mode only) -->\n <div class=\"zen-tp__period\" *ngIf=\"mode === 'clock'\">\n <button class=\"zen-tp__period-btn\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n\n <!-- Actions -->\n <div class=\"zen-tp__actions\" [class.zen-tp__actions--full]=\"mode === 'duration'\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduBreadcrumbs } from './breadcrumbs/zendu-breadcrumbs.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { AngularSignaturePadModule } from '@almothafar/angular-signature-pad';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { HttpClient } from '@angular/common/http';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\n// AoT requires an exported function for factories\nexport function HttpLoaderFactory(httpClient: HttpClient) {\n return new TranslateHttpLoader(httpClient);\n}\n\n@NgModule({\n declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent\n ],\n providers: [\n OpenCVService,\n ],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AngularSignaturePadModule,\n ReactiveFormsModule,\n HttpClientModule,\n OverlayModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent\n ]\n})\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from './lib/ng-zenduit.module';\n\n/**\n * Types\n */\nexport * from './lib/filter/filtersConfig';\nexport * from './lib/filter/numberRange';\nexport * from './lib/column-configuration/columnState';\nexport * from './lib/map/map.types';\nexport * from './lib/location-search/location.address';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/datepicker/date-picker-hint';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/breadcrumbs/zendu-breadcrumbs.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["showSnackbar","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i1","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11","i4.ZenduSpinner","i5","i1.ZenduSelectComponent","i2.ZenduIconComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i3.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i2.ZenHTML5VideoPlayerComponent","i3.ZenFlvPlayerComponent","i4.ZenHlsPlayerComponent","i5.ZenSnapshotPlayerComponent","i6.ZenWebRTCPlayerComponent"],"mappings":"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"}