@elite.framework/ng.ui.core 1.0.76 → 1.0.78

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":"elite.framework-ng.ui.core-generic-crud-table.mjs","sources":["../tmp-esm2022/generic-crud-table/lib/generic-crud-table-module.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-header.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-table.js","../tmp-esm2022/generic-crud-table/elite.framework-ng.ui.core-generic-crud-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GenericButtonModule } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nexport class GenericCrudTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, GenericButtonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUtqRixNQUFNLE9BQU8sc0JBQXNCO3VHQUF0QixzQkFBc0I7d0dBQXRCLHNCQUFzQixZQUZ2QixZQUFZLEVBQUMsbUJBQW1CO3dHQUUvQixzQkFBc0IsWUFGdkIsWUFBWSxFQUFDLG1CQUFtQjs7MkZBRS9CLHNCQUFzQjtrQkFIbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUMsbUJBQW1CLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxHZW5lcmljQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0NydWRUYWJsZU1vZHVsZSB7fVxuIl19","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { GenericSearch } from '@elite.framework/ng.ui.core/generic-search';\nimport { DividerModule } from 'primeng/divider';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/button\";\nimport * as i2 from \"primeng/divider\";\nimport * as i3 from \"primeng/tooltip\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class GenericCrudHeaderComponent {\n // 🟢 Inputs\n mode = 'full';\n breadcrumb;\n isSingleItemSelected = false;\n selectedItems = [];\n singleActionButtons = [];\n bulkActionButtons = [];\n addButtonConfigs = [];\n filters;\n filterModel = {};\n showSearch = true;\n first = 0; // Add input for current 'first' index\n rows = 10; // Add input for current 'rows' per page\n totalRecords = 0; // Add input for total records\n // 🟢 Outputs\n singleItemAction = new EventEmitter();\n bulkAction = new EventEmitter();\n search = new EventEmitter();\n resetSearch = new EventEmitter();\n action = new EventEmitter();\n paginateChange = new EventEmitter(); // NEW OUTPUT\n // 🟢 Helpers\n trackByIdx = (index) => index;\n // 🟢 Actions\n onSingleItemAction(btn) {\n this.singleItemAction.emit(btn);\n }\n onInternalBulkAction(btn) {\n this.bulkAction.emit(btn);\n }\n applySearch(value) {\n this.search.emit(value);\n }\n reset() {\n this.resetSearch.emit();\n }\n // Go to previous page\n // 🟢 Actions (Keep or adapt your existing pagination logic)\n totalPages() {\n if (this.totalRecords === 0 || this.rows === 0)\n return 0;\n return Math.ceil(this.totalRecords / this.rows);\n }\n pageInput = null;\n showPageMenu = false;\n // Get current page number (1-based)\n get currentPage() {\n return Math.floor(this.first / this.rows) + 1;\n }\n // Go to specific page from menu\n goToPageMenu() {\n if (this.pageInput && this.pageInput >= 1 && this.pageInput <= this.totalPages()) {\n const newFirst = (this.pageInput - 1) * this.rows;\n this.paginateChange.emit({ first: newFirst, rows: this.rows });\n this.pageInput = null;\n this.showPageMenu = false; // Close menu after navigation\n }\n }\n // Go to specific page (original method)\n goToPage() {\n this.goToPageMenu(); // Reuse the same logic\n }\n // Go to first page\n goFirst() {\n this.paginateChange.emit({ first: 0, rows: this.rows }); // EMIT EVENT\n }\n // Go to last page\n goLast() {\n const maxFirst = Math.max(0, (this.totalPages() - 1) * this.rows);\n this.paginateChange.emit({ first: maxFirst, rows: this.rows }); // EMIT EVENT\n }\n // Go to previous page\n goPrev() {\n const newFirst = Math.max(this.first - this.rows, 0);\n this.paginateChange.emit({ first: newFirst, rows: this.rows }); // EMIT EVENT\n }\n // Go to next page\n goNext() {\n const maxFirst = Math.max(0, (this.totalPages() - 1) * this.rows);\n const newFirst = Math.min(this.first + this.rows, maxFirst);\n this.paginateChange.emit({ first: newFirst, rows: this.rows }); // EMIT EVENT\n }\n // Check first/last page\n isFirstPage() {\n return this.first === 0;\n }\n isLastPage() {\n return this.first + this.rows >= this.totalRecords;\n }\n // Detect RTL direction\n get isRTL() {\n return document.documentElement.dir === 'rtl' ||\n document.body.dir === 'rtl' ||\n // this.translateService?.currentLang === 'ar' || // if using translation\n false; // default to LTR\n }\n /**\n * Handles button click in a unified way.\n * - If btn.action is defined, execute it.\n * - Otherwise, emit event with actionName or default 'add'.\n */\n async handleButtonClick(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n this.action.emit({\n name: btn.actionName ?? 'add',\n row: null, // provide row if available\n });\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudHeaderComponent, isStandalone: true, selector: \"app-generic-crud-header\", inputs: { mode: \"mode\", breadcrumb: \"breadcrumb\", isSingleItemSelected: \"isSingleItemSelected\", selectedItems: \"selectedItems\", singleActionButtons: \"singleActionButtons\", bulkActionButtons: \"bulkActionButtons\", addButtonConfigs: \"addButtonConfigs\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\" }, outputs: { singleItemAction: \"singleItemAction\", bulkAction: \"bulkAction\", search: \"search\", resetSearch: \"resetSearch\", action: \"action\", paginateChange: \"paginateChange\" }, ngImport: i0, template: \"@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <app-breadcrumb\\r\\n class=\\\"xs:block hidden\\\"\\r\\n [breadcrumb]=\\\"breadcrumb\\\"\\r\\n ></app-breadcrumb>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n @if (mode === 'full') {\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 \\u0627\\u0644\\u0645\\u0641\\u0631\\u062F\\u0629 -->\\r\\n @if (isSingleItemSelected) {\\r\\n @for (btn of singleActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0645\\u062A\\u0639\\u062F\\u062F\\u0629 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 -->\\r\\n @if (selectedItems.length > 0) {\\r\\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0625\\u0636\\u0627\\u0641\\u0629 -->\\r\\n @for (btn of addButtonConfigs; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleButtonClick(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n <!-- \\u0627\\u0644\\u0628\\u062D\\u062B -->\\r\\n @if (showSearch && filters) {\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"reset()\\\"\\r\\n ></lib-generic-search>\\r\\n } @else {\\r\\n <div></div>\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u062F\\u0648\\u0627\\u062A \\u0625\\u0636\\u0627\\u0641\\u064A\\u0629 -->\\r\\n <div class=\\\"flex items-center gap-3 rtl:space-x-reverse\\\">\\r\\n <!-- Refresh Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-refresh\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (onClick)=\\\"reset()\\\"\\r\\n />\\r\\n\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0 hidden xs:block\\\" />\\r\\n\\r\\n <!-- Sort Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-sort\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n />\\r\\n <!-- Pagination Controls -->\\r\\n <div class=\\\"flex items-center gap-1 rtl:space-x-reverse\\\">\\r\\n <!-- First Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goFirst()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Previous Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goPrev()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n\\r\\n <!-- Current Page Display with Dropdown -->\\r\\n <div class=\\\"relative\\\">\\r\\n\\r\\n <p-button\\r\\n [label]=\\\"currentPage + ' / ' + totalPages()\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"showPageMenu = !showPageMenu\\\"\\r\\n pTooltip=\\\"{{totalRecords}}\\\"\\r\\n tooltipPosition=\\\"top\\\"\\r\\n />\\r\\n\\r\\n\\r\\n </div>\\r\\n <!-- Next Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goNext()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Last Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goLast()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n<!-- Page Navigation Menu -->\\r\\n<!--\\r\\n\\r\\n @if (showPageMenu) {\\r\\n <div class=\\\"absolute top-full left-0 mt-2 z-50 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-4 min-w-64\\\">\\r\\n <div class=\\\"flex flex-col gap-3\\\">\\r\\n <div class=\\\"text-center\\\">\\r\\n <h4 class=\\\"font-semibold text-gray-800 dark:text-white\\\">Page Navigation</h4>\\r\\n <p class=\\\"text-sm text-gray-600 dark:text-gray-300 mt-1\\\">\\r\\n Current: {{currentPage}} of {{totalPages()}}\\r\\n </p>\\r\\n </div>\\r\\n\\r\\n <p-divider class=\\\"m-0\\\" />\\r\\n\\r\\n <div class=\\\"flex justify-between gap-2\\\">\\r\\n <p-button\\r\\n label=\\\"First\\\"\\r\\n icon=\\\"pi pi-angle-double-left\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goFirst(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Prev\\\"\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goPrev(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Next\\\"\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goNext(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Last\\\"\\r\\n icon=\\\"pi pi-angle-double-right\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goLast(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n />\\r\\n </div>\\r\\n\\r\\n <p-divider class=\\\"m-0\\\" />\\r\\n\\r\\n <div class=\\\"flex items-center gap-2\\\">\\r\\n <span class=\\\"text-sm text-gray-700 dark:text-gray-300 whitespace-nowrap\\\">Go to page:</span>\\r\\n <input\\r\\n type=\\\"number\\\"\\r\\n [min]=\\\"1\\\"\\r\\n [max]=\\\"totalPages()\\\"\\r\\n [(ngModel)]=\\\"pageInput\\\"\\r\\n (keyup.enter)=\\\"goToPageMenu()\\\"\\r\\n class=\\\"flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg dark:bg-gray-700 dark:border-gray-600 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500\\\"\\r\\n placeholder=\\\"Page number\\\"\\r\\n />\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <p-button\\r\\n label=\\\"Go\\\"\\r\\n severity=\\\"primary\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"flex-1\\\"\\r\\n (click)=\\\"goToPageMenu()\\\"\\r\\n [disabled]=\\\"!pageInput || pageInput < 1 || pageInput > totalPages()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Cancel\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"flex-1\\\"\\r\\n (click)=\\\"showPageMenu = false\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n } -->\\r\\n\", dependencies: [{ kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i1.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: GenericSearch, selector: \"lib-generic-search\", inputs: [\"model\", \"fields\"], outputs: [\"search\"] }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"component\", type: i2.Divider, selector: \"p-divider\", inputs: [\"styleClass\", \"layout\", \"type\", \"align\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i3.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-header', standalone: true, imports: [\n GenericButton,\n TranslateModule,\n BreadcrumbComponent,\n CommonModule,\n ButtonModule,\n GenericSearch,\n DividerModule,\n FormsModule,\n ReactiveFormsModule,\n TooltipModule,\n ], template: \"@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <app-breadcrumb\\r\\n class=\\\"xs:block hidden\\\"\\r\\n [breadcrumb]=\\\"breadcrumb\\\"\\r\\n ></app-breadcrumb>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n @if (mode === 'full') {\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 \\u0627\\u0644\\u0645\\u0641\\u0631\\u062F\\u0629 -->\\r\\n @if (isSingleItemSelected) {\\r\\n @for (btn of singleActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0645\\u062A\\u0639\\u062F\\u062F\\u0629 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 -->\\r\\n @if (selectedItems.length > 0) {\\r\\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0625\\u0636\\u0627\\u0641\\u0629 -->\\r\\n @for (btn of addButtonConfigs; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleButtonClick(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n <!-- \\u0627\\u0644\\u0628\\u062D\\u062B -->\\r\\n @if (showSearch && filters) {\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"reset()\\\"\\r\\n ></lib-generic-search>\\r\\n } @else {\\r\\n <div></div>\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u062F\\u0648\\u0627\\u062A \\u0625\\u0636\\u0627\\u0641\\u064A\\u0629 -->\\r\\n <div class=\\\"flex items-center gap-3 rtl:space-x-reverse\\\">\\r\\n <!-- Refresh Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-refresh\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (onClick)=\\\"reset()\\\"\\r\\n />\\r\\n\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0 hidden xs:block\\\" />\\r\\n\\r\\n <!-- Sort Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-sort\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n />\\r\\n <!-- Pagination Controls -->\\r\\n <div class=\\\"flex items-center gap-1 rtl:space-x-reverse\\\">\\r\\n <!-- First Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goFirst()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Previous Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goPrev()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n\\r\\n <!-- Current Page Display with Dropdown -->\\r\\n <div class=\\\"relative\\\">\\r\\n\\r\\n <p-button\\r\\n [label]=\\\"currentPage + ' / ' + totalPages()\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"showPageMenu = !showPageMenu\\\"\\r\\n pTooltip=\\\"{{totalRecords}}\\\"\\r\\n tooltipPosition=\\\"top\\\"\\r\\n />\\r\\n\\r\\n\\r\\n </div>\\r\\n <!-- Next Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goNext()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Last Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goLast()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n<!-- Page Navigation Menu -->\\r\\n<!--\\r\\n\\r\\n @if (showPageMenu) {\\r\\n <div class=\\\"absolute top-full left-0 mt-2 z-50 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-4 min-w-64\\\">\\r\\n <div class=\\\"flex flex-col gap-3\\\">\\r\\n <div class=\\\"text-center\\\">\\r\\n <h4 class=\\\"font-semibold text-gray-800 dark:text-white\\\">Page Navigation</h4>\\r\\n <p class=\\\"text-sm text-gray-600 dark:text-gray-300 mt-1\\\">\\r\\n Current: {{currentPage}} of {{totalPages()}}\\r\\n </p>\\r\\n </div>\\r\\n\\r\\n <p-divider class=\\\"m-0\\\" />\\r\\n\\r\\n <div class=\\\"flex justify-between gap-2\\\">\\r\\n <p-button\\r\\n label=\\\"First\\\"\\r\\n icon=\\\"pi pi-angle-double-left\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goFirst(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Prev\\\"\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goPrev(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Next\\\"\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goNext(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Last\\\"\\r\\n icon=\\\"pi pi-angle-double-right\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n (click)=\\\"goLast(); showPageMenu = false\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n />\\r\\n </div>\\r\\n\\r\\n <p-divider class=\\\"m-0\\\" />\\r\\n\\r\\n <div class=\\\"flex items-center gap-2\\\">\\r\\n <span class=\\\"text-sm text-gray-700 dark:text-gray-300 whitespace-nowrap\\\">Go to page:</span>\\r\\n <input\\r\\n type=\\\"number\\\"\\r\\n [min]=\\\"1\\\"\\r\\n [max]=\\\"totalPages()\\\"\\r\\n [(ngModel)]=\\\"pageInput\\\"\\r\\n (keyup.enter)=\\\"goToPageMenu()\\\"\\r\\n class=\\\"flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg dark:bg-gray-700 dark:border-gray-600 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500\\\"\\r\\n placeholder=\\\"Page number\\\"\\r\\n />\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <p-button\\r\\n label=\\\"Go\\\"\\r\\n severity=\\\"primary\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"flex-1\\\"\\r\\n (click)=\\\"goToPageMenu()\\\"\\r\\n [disabled]=\\\"!pageInput || pageInput < 1 || pageInput > totalPages()\\\"\\r\\n />\\r\\n <p-button\\r\\n label=\\\"Cancel\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"flex-1\\\"\\r\\n (click)=\\\"showPageMenu = false\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n } -->\\r\\n\" }]\n }], propDecorators: { mode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], isSingleItemSelected: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], singleItemAction: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], search: [{\n type: Output\n }], resetSearch: [{\n type: Output\n }], action: [{\n type: Output\n }], paginateChange: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtaGVhZGVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQW9CaEQsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFZO0lBQ0gsSUFBSSxHQUFtRCxNQUFNLENBQUM7SUFDOUQsVUFBVSxDQUF5QjtJQUNuQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsYUFBYSxHQUFVLEVBQUUsQ0FBQztJQUMxQixtQkFBbUIsR0FBbUIsRUFB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YUFBYSw4UEFDYixlQUFlLCtCQUNmLG1CQUFtQixrRkFDbkIsWUFBWSw4QkFDWixZQUFZLGtiQUNaLGFBQWEsZ0hBQ2IsYUFBYSxpSkFDYixXQUFXLDhCQUNYLG1CQUFtQiw4QkFDbkIsYUFBYTs7MkZBS0osMEJBQTBCO2tCQWxCdEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGFBQWE7cUJBQ2Q7OEJBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0UsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNFLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQnV0dG9uQ29uZmlnIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9icmVhZGNydW1iJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VhcmNoIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoJztcclxuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtY3J1ZC1oZWFkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgR2VuZXJpY0J1dHRvbixcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEJyZWFkY3J1bWJDb21wb25lbnQsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljU2VhcmNoLFxyXG4gICAgRGl2aWRlck1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy1jcnVkLWhlYWRlci5odG1sJyxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljQ3J1ZEhlYWRlckNvbXBvbmVudCB7XHJcbiAgLy8g8J+foiBJbnB1dHNcclxuICBASW5wdXQoKSBtb2RlOiAnZnVsbCcgfCAnZm9ybS1vbmx5JyB8ICd0YWJsZS1vbmx5JyB8ICdkZXRhaWwnID0gJ2Z1bGwnO1xyXG4gIEBJbnB1dCgpIGJyZWFkY3J1bWI6IE1lbnVJdGVtW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgaXNTaW5nbGVJdGVtU2VsZWN0ZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNpbmdsZUFjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYnVsa0FjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYWRkQnV0dG9uQ29uZmlnczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgZmlsdGVyTW9kZWw6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSB0cnVlO1xyXG4gICBASW5wdXQoKSBmaXJzdCA9IDA7IC8vIEFkZCBpbnB1dCBmb3IgY3VycmVudCAnZmlyc3QnIGluZGV4XHJcbiAgQElucHV0KCkgcm93cyA9IDEwOyAvLyBBZGQgaW5wdXQgZm9yIGN1cnJlbnQgJ3Jvd3MnIHBlciBwYWdlXHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDsgLy8gQWRkIGlucHV0IGZvciB0b3RhbCByZWNvcmRzXHJcblxyXG4gIC8vIPCfn6IgT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBzaW5nbGVJdGVtQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25Db25maWc+KCk7XHJcbiAgQE91dHB1dCgpIGJ1bGtBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNvbmZpZz4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJlc2V0U2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB9PigpO1xyXG4gQE91dHB1dCgpIHBhZ2luYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpcnN0OiBudW1iZXI7IHJvd3M6IG51bWJlciB9PigpOyAvLyBORVcgT1VUUFVUXHJcblxyXG5cclxuXHJcblxyXG4gIC8vIPCfn6IgSGVscGVyc1xyXG4gIHRyYWNrQnlJZHggPSAoaW5kZXg6IG51bWJlcikgPT4gaW5kZXg7XHJcblxyXG4gIC8vIPCfn6IgQWN0aW9uc1xyXG4gIG9uU2luZ2xlSXRlbUFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdGhpcy5zaW5nbGVJdGVtQWN0aW9uLmVtaXQoYnRuKTtcclxuICB9XHJcbiAgb25JbnRlcm5hbEJ1bGtBY3Rpb24oYnRuOiBCdXR0b25Db25maWcpIHtcclxuICAgIHRoaXMuYnVsa0FjdGlvbi5lbWl0KGJ0bik7XHJcbiAgfVxyXG5cclxuICBhcHBseVNlYXJjaCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNlYXJjaC5lbWl0KHZhbHVlKTtcclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc2V0U2VhcmNoLmVtaXQoKTtcclxuICB9XHJcblxyXG5cclxuICAgIC8vIEdvIHRvIHByZXZpb3VzIHBhZ2VcclxuICAvLyDwn5+iIEFjdGlvbnMgKEtlZXAgb3IgYWRhcHQgeW91ciBleGlzdGluZyBwYWdpbmF0aW9uIGxvZ2ljKVxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLnRvdGFsUmVjb3JkcyA9PT0gMCB8fCB0aGlzLnJvd3MgPT09IDApIHJldHVybiAwO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XHJcbiAgfVxyXG4gcGFnZUlucHV0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBzaG93UGFnZU1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gR2V0IGN1cnJlbnQgcGFnZSBudW1iZXIgKDEtYmFzZWQpXHJcbiAgZ2V0IGN1cnJlbnRQYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLmZpcnN0IC8gdGhpcy5yb3dzKSArIDE7XHJcbiAgfVxyXG5cclxuICAvLyBHbyB0byBzcGVjaWZpYyBwYWdlIGZyb20gbWVudVxyXG4gIGdvVG9QYWdlTWVudSgpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VJbnB1dCAmJiB0aGlzLnBhZ2VJbnB1dCA+PSAxICYmIHRoaXMucGFnZUlucHV0IDw9IHRoaXMudG90YWxQYWdlcygpKSB7XHJcbiAgICAgIGNvbnN0IG5ld0ZpcnN0ID0gKHRoaXMucGFnZUlucHV0IC0gMSkgKiB0aGlzLnJvd3M7XHJcbiAgICAgIHRoaXMucGFnaW5hdGVDaGFuZ2UuZW1pdCh7IGZpcnN0OiBuZXdGaXJzdCwgcm93czogdGhpcy5yb3dzIH0pO1xyXG4gICAgICB0aGlzLnBhZ2VJbnB1dCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2hvd1BhZ2VNZW51ID0gZmFsc2U7IC8vIENsb3NlIG1lbnUgYWZ0ZXIgbmF2aWdhdGlvblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR28gdG8gc3BlY2lmaWMgcGFnZSAob3JpZ2luYWwgbWV0aG9kKVxyXG4gIGdvVG9QYWdlKCkge1xyXG4gICAgdGhpcy5nb1RvUGFnZU1lbnUoKTsgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWNcclxuICB9XHJcblxyXG4gIC8vIEdvIHRvIGZpcnN0IHBhZ2VcclxuZ29GaXJzdCgpIHtcclxuICB0aGlzLnBhZ2luYXRlQ2hhbmdlLmVtaXQoeyBmaXJzdDogMCwgcm93czogdGhpcy5yb3dzIH0pOyAvLyBFTUlUIEVWRU5UXHJcbn1cclxuXHJcbi8vIEdvIHRvIGxhc3QgcGFnZVxyXG5nb0xhc3QoKSB7XHJcbiAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heCgwLCAodGhpcy50b3RhbFBhZ2VzKCkgLSAxKSAqIHRoaXMucm93cyk7XHJcbiAgdGhpcy5wYWdpbmF0ZUNoYW5nZS5lbWl0KHsgZmlyc3Q6IG1heEZpcnN0LCByb3dzOiB0aGlzLnJvd3MgfSk7IC8vIEVNSVQgRVZFTlRcclxufVxyXG5cclxuICAvLyBHbyB0byBwcmV2aW91cyBwYWdlXHJcbiAgZ29QcmV2KCkge1xyXG4gICAgY29uc3QgbmV3Rmlyc3QgPSBNYXRoLm1heCh0aGlzLmZpcnN0IC0gdGhpcy5yb3dzLCAwKTtcclxuICAgIHRoaXMucGFnaW5hdGVDaGFuZ2UuZW1pdCh7IGZpcnN0OiBuZXdGaXJzdCwgcm93czogdGhpcy5yb3dzIH0pOyAvLyBFTUlUIEVWRU5UXHJcbiAgfVxyXG5cclxuICAvLyBHbyB0byBuZXh0IHBhZ2VcclxuICBnb05leHQoKSB7XHJcbiAgICBjb25zdCBtYXhGaXJzdCA9IE1hdGgubWF4KDAsICh0aGlzLnRvdGFsUGFnZXMoKSAtIDEpICogdGhpcy5yb3dzKTtcclxuICAgIGNvbnN0IG5ld0ZpcnN0ID0gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMucm93cywgbWF4Rmlyc3QpO1xyXG4gICAgdGhpcy5wYWdpbmF0ZUNoYW5nZS5lbWl0KHsgZmlyc3Q6IG5ld0ZpcnN0LCByb3dzOiB0aGlzLnJvd3MgfSk7IC8vIEVNSVQgRVZFTlRcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGZpcnN0L2xhc3QgcGFnZVxyXG4gIGlzRmlyc3RQYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3QgPT09IDA7XHJcbiAgfVxyXG5cclxuICBpc0xhc3RQYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3QgKyB0aGlzLnJvd3MgPj0gdGhpcy50b3RhbFJlY29yZHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRGV0ZWN0IFJUTCBkaXJlY3Rpb25cclxuICBnZXQgaXNSVEwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCcgfHxcclxuICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpciA9PT0gJ3J0bCcgfHxcclxuICAgICAgICAgIC8vICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U/LmN1cnJlbnRMYW5nID09PSAnYXInIHx8IC8vIGlmIHVzaW5nIHRyYW5zbGF0aW9uXHJcbiAgICAgICAgICAgZmFsc2U7IC8vIGRlZmF1bHQgdG8gTFRSXHJcbiAgfVxyXG4gICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiBjbGljayBpbiBhIHVuaWZpZWQgd2F5LlxyXG4gICAqIC0gSWYgYnRuLmFjdGlvbiBpcyBkZWZpbmVkLCBleGVjdXRlIGl0LlxyXG4gICAqIC0gT3RoZXJ3aXNlLCBlbWl0IGV2ZW50IHdpdGggYWN0aW9uTmFtZSBvciBkZWZhdWx0ICdhZGQnLlxyXG4gICAqL1xyXG4gIGFzeW5jIGhhbmRsZUJ1dHRvbkNsaWNrKGJ0bjogQnV0dG9uQ29uZmlnKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoYnRuLmFjdGlvbikge1xyXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHByb3ZpZGVkIGFjdGlvblxyXG4gICAgICAgIGF3YWl0IGJ0bi5hY3Rpb24obnVsbCk7IC8vIFlvdSBjYW4gcGFzcyByb3cgb3IgY29udGV4dCBoZXJlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gZW1pdHRpbmcgZXZlbnRcclxuICAgICAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgICAgIG5hbWU6IGJ0bi5hY3Rpb25OYW1lID8/ICdhZGQnLFxyXG4gICAgICAgICAgcm93OiBudWxsISwgLy8gcHJvdmlkZSByb3cgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuLy8gICBnZXRDdXJyZW50UmFuZ2VMYWJlbCgpOiBzdHJpbmcge1xyXG4vLyAgIGlmICh0aGlzLnRvdGFsUmVjb3JkcyA9PT0gMCkgcmV0dXJuICcwJztcclxuLy8gICBjb25zdCBzdGFydCA9IHRoaXMuZmlyc3QgKyAxO1xyXG4vLyAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnJvd3MsIHRoaXMudG90YWxSZWNvcmRzKTtcclxuLy8gICByZXR1cm4gYCR7c3RhcnR9IC0gJHtlbmR9INmF2YYgJHt0aGlzLnRvdGFsUmVjb3Jkc31gO1xyXG4vLyB9XHJcblxyXG59XHJcbiIsIkBpZiAobW9kZSAhPT0gJ2Zvcm0tb25seScgJiYgbW9kZSAhPT0gJ2RldGFpbCcpIHtcclxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgPGRpdj5cclxuICAgIDxhcHAtYnJlYWRjcnVtYlxyXG4gICAgICBjbGFzcz1cInhzOmJsb2NrIGhpZGRlblwiXHJcbiAgICAgIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIlxyXG4gICAgPjwvYXBwLWJyZWFkY3J1bWI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgIEBpZiAobW9kZSA9PT0gJ2Z1bGwnKSB7XHJcbiAgICAgIDwhLS0g2KPYstix2KfYsSDYp9mE2LnZhtin2LXYsSDYp9mE2YXZgdix2K/YqSAtLT5cclxuICAgICAgQGlmIChpc1NpbmdsZUl0ZW1TZWxlY3RlZCkge1xyXG4gICAgICAgIEBmb3IgKGJ0biBvZiBzaW5nbGVBY3Rpb25CdXR0b25zOyB0cmFjayB0cmFja0J5SWR4KCRpbmRleCkpIHtcclxuICAgICAgICAgIEBpZiAoIWJ0bi52aXNpYmxlIHx8IChidG4udmlzaWJsZSAmJiBidG4udmlzaWJsZSA9PT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25TaW5nbGVJdGVtQWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tINij2LLYsdin2LEg2YXYqti52K/Yr9ipINin2YTYudmG2KfYtdixIC0tPlxyXG4gICAgICBAaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIEBmb3IgKGJ0biBvZiBidWxrQWN0aW9uQnV0dG9uczsgdHJhY2sgdHJhY2tCeUlkeCgkaW5kZXgpKSB7XHJcbiAgICAgICAgICBAaWYgKCFidG4udmlzaWJsZSB8fCAoYnRuLnZpc2libGUgJiYgYnRuLnZpc2libGUgPT09IHRydWUpKSB7XHJcbiAgICAgICAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uSW50ZXJuYWxCdWxrQWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tINij2LLYsdin2LEg2KfZhNil2LbYp9mB2KkgLS0+XHJcbiAgICAgIEBmb3IgKGJ0biBvZiBhZGRCdXR0b25Db25maWdzOyB0cmFjayB0cmFja0J5SWR4KCRpbmRleCkpIHtcclxuICAgICAgICBAaWYgKCFidG4udmlzaWJsZSB8fCAoYnRuLnZpc2libGUgJiYgYnRuLnZpc2libGUgPT09IHRydWUpKSB7XHJcbiAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNsaWNrKGJ0bilcIlxyXG4gICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG5cclxuQGlmIChtb2RlICE9PSAnZm9ybS1vbmx5JyAmJiBtb2RlICE9PSAnZGV0YWlsJykge1xyXG48ZGl2IGNsYXNzPVwibXQtMiBtYi00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gIDwhLS0g2KfZhNio2K3YqyAtLT5cclxuICBAaWYgKHNob3dTZWFyY2ggJiYgZmlsdGVycykge1xyXG4gICAgPGxpYi1nZW5lcmljLXNlYXJjaFxyXG4gICAgICBbbW9kZWxdPVwiZmlsdGVyTW9kZWxcIlxyXG4gICAgICBbZmllbGRzXT1cImZpbHRlcnNcIlxyXG4gICAgICAoc2VhcmNoKT1cImFwcGx5U2VhcmNoKCRldmVudClcIlxyXG4gICAgICAocmVzZXQpPVwicmVzZXQoKVwiXHJcbiAgICA+PC9saWItZ2VuZXJpYy1zZWFyY2g+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8ZGl2PjwvZGl2PlxyXG4gIH1cclxuXHJcbiAgPCEtLSDYo9iv2YjYp9iqINil2LbYp9mB2YrYqSAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcnRsOnNwYWNlLXgtcmV2ZXJzZVwiPlxyXG4gICAgPCEtLSBSZWZyZXNoIEJ1dHRvbiAtLT5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiXHJcbiAgICAgIG91dGxpbmVkXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgY2xhc3M9XCJoaWRkZW4geHM6YmxvY2tcIlxyXG4gICAgICAob25DbGljayk9XCJyZXNldCgpXCJcclxuICAgIC8+XHJcblxyXG4gICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiIGNsYXNzPVwibS0wIHAtMCBoaWRkZW4geHM6YmxvY2tcIiAvPlxyXG5cclxuICAgIDwhLS0gU29ydCBCdXR0b24gLS0+XHJcbiAgICA8cC1idXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLXNvcnRcIlxyXG4gICAgICBvdXRsaW5lZFxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgIGNsYXNzPVwiaGlkZGVuIHhzOmJsb2NrXCJcclxuICAgIC8+XHJcbiAgICA8IS0tIFBhZ2luYXRpb24gQ29udHJvbHMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcnRsOnNwYWNlLXgtcmV2ZXJzZVwiPlxyXG4gICAgICA8IS0tIEZpcnN0IFBhZ2UgQnV0dG9uIC0tPlxyXG4gICAgICA8cC1idXR0b25cclxuICAgICAgICBbaWNvbl09XCJpc1JUTCA/ICdwaSBwaS1hbmdsZS1kb3VibGUtcmlnaHQnIDogJ3BpIHBpLWFuZ2xlLWRvdWJsZS1sZWZ0J1wiXHJcbiAgICAgICAgb3V0bGluZWRcclxuICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgY2xhc3M9XCJoaWRkZW4geHM6YmxvY2tcIlxyXG4gICAgICAgIChjbGljayk9XCJnb0ZpcnN0KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpcnN0UGFnZSgpXCJcclxuICAgICAgPjwvcC1idXR0b24+XHJcblxyXG4gICAgICA8IS0tIFByZXZpb3VzIFBhZ2UgQnV0dG9uIC0tPlxyXG4gICAgICA8cC1idXR0b25cclxuICAgICAgICBbaWNvbl09XCJpc1JUTCA/ICdwaSBwaS1jaGV2cm9uLXJpZ2h0JyA6ICdwaSBwaS1jaGV2cm9uLWxlZnQnXCJcclxuICAgICAgICBvdXRsaW5lZFxyXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICBjbGFzcz1cInhzOmJsb2NrXCJcclxuICAgICAgICAoY2xpY2spPVwiZ29QcmV2KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpcnN0UGFnZSgpXCJcclxuICAgICAgPjwvcC1idXR0b24+XHJcblxyXG5cclxuICAgICAgIDwhLS0gQ3VycmVudCBQYWdlIERpc3BsYXkgd2l0aCBEcm9wZG93biAtLT5cclxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuXHJcbiAgICA8cC1idXR0b25cclxuICAgICAgW2xhYmVsXT1cImN1cnJlbnRQYWdlICsgJyAvICcgKyB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICBvdXRsaW5lZFxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgIGNsYXNzPVwiaGlkZGVuIHhzOmJsb2NrXCJcclxuICAgICAgKGNsaWNrKT1cInNob3dQYWdlTWVudSA9ICFzaG93UGFnZU1lbnVcIlxyXG4gICAgICAgIHBUb29sdGlwPVwie3t0b3RhbFJlY29yZHN9fVwiXHJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAvPlxyXG5cclxuXHJcbiAgPC9kaXY+XHJcbiAgICAgIDwhLS0gTmV4dCBQYWdlIEJ1dHRvbiAtLT5cclxuICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgW2ljb25dPVwiaXNSVEwgPyAncGkgcGktY2hldnJvbi1sZWZ0JyA6ICdwaSBwaS1jaGV2cm9uLXJpZ2h0J1wiXHJcbiAgICAgICAgb3V0bGluZWRcclxuICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgY2xhc3M9XCJ4czpibG9ja1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImdvTmV4dCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMYXN0UGFnZSgpXCJcclxuICAgICAgPjwvcC1idXR0b24+XHJcblxyXG4gICAgICA8IS0tIExhc3QgUGFnZSBCdXR0b24gLS0+XHJcbiAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgIFtpY29uXT1cImlzUlRMID8gJ3BpIHBpLWFuZ2xlLWRvdWJsZS1sZWZ0JyA6ICdwaSBwaS1hbmdsZS1kb3VibGUtcmlnaHQnXCJcclxuICAgICAgICBvdXRsaW5lZFxyXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICBjbGFzcz1cImhpZGRlbiB4czpibG9ja1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImdvTGFzdCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMYXN0UGFnZSgpXCJcclxuICAgICAgPjwvcC1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxuXHJcbjwhLS0gUGFnZSBOYXZpZ2F0aW9uIE1lbnUgLS0+XHJcbjwhLS1cclxuXHJcbiAgICBAaWYgKHNob3dQYWdlTWVudSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLWZ1bGwgbGVmdC0wIG10LTIgei01MCBiZy13aGl0ZSBkYXJrOmJnLWdyYXktODAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS03MDAgcm91bmRlZC1sZyBzaGFkb3ctbGcgcC00IG1pbi13LTY0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtZ3JheS04MDAgZGFyazp0ZXh0LXdoaXRlXCI+UGFnZSBOYXZpZ2F0aW9uPC9oND5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwIG10LTFcIj5cclxuICAgICAgICAgICAgICBDdXJyZW50OiB7e2N1cnJlbnRQYWdlfX0gb2Yge3t0b3RhbFBhZ2VzKCl9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cC1kaXZpZGVyIGNsYXNzPVwibS0wXCIgLz5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJGaXJzdFwiXHJcbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWFuZ2xlLWRvdWJsZS1sZWZ0XCJcclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29GaXJzdCgpOyBzaG93UGFnZU1lbnUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICBsYWJlbD1cIlByZXZcIlxyXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1ByZXYoKTsgc2hvd1BhZ2VNZW51ID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpcnN0UGFnZSgpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJOZXh0XCJcclxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTmV4dCgpOyBzaG93UGFnZU1lbnUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiTGFzdFwiXHJcbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodFwiXHJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTGFzdCgpOyBzaG93UGFnZU1lbnUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cC1kaXZpZGVyIGNsYXNzPVwibS0wXCIgLz5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+R28gdG8gcGFnZTo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgIFttaW5dPVwiMVwiXHJcbiAgICAgICAgICAgICAgW21heF09XCJ0b3RhbFBhZ2VzKClcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFnZUlucHV0XCJcclxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZ29Ub1BhZ2VNZW51KClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleC0xIHB4LTMgcHktMiB0ZXh0LXNtIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBkYXJrOmJnLWdyYXktNzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6dGV4dC13aGl0ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYmx1ZS01MDBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGFnZSBudW1iZXJcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJHb1wiXHJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleC0xXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2VNZW51KClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFnZUlucHV0IHx8IHBhZ2VJbnB1dCA8IDEgfHwgcGFnZUlucHV0ID4gdG90YWxQYWdlcygpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJDYW5jZWxcIlxyXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleC0xXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1BhZ2VNZW51ID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfSAtLT5cclxuIl19","/* eslint-disable @angular-eslint/no-output-on-prefix */\n/* eslint-disable @angular-eslint/no-output-native */\nimport { DividerModule } from 'primeng/divider';\nimport { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessageModule } from 'primeng/message';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DialogModule } from 'primeng/dialog';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { BaseService } from '@elite.framework/ng.core/services';\nimport { SwalService } from '@elite.framework/ng.core/services';\nimport { GenericCrudHeaderComponent } from './generic-crud-header';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { GenericTable } from '@elite.framework/ng.ui.core/generic-table';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericViewComponent } from '@elite.framework/ng.ui.core/generic-view';\nimport * as i0 from \"@angular/core\";\n/**\n * مكون جدول CRUD عام يمكن إعادة استخدامه\n * يدعم العمليات الأساسية: إنشاء، قراءة، تحديث، حذف\n * مع إمكانية التخصيص عبر عدة أوضاع وعرض\n */\nexport class GenericCrudTableComponent {\n genericTable;\n dialog;\n translate = inject(TranslateService);\n swalService = inject(SwalService);\n home = { icon: 'pi pi-home', routerLink: '/' };\n data = [];\n formFields_ = []; // <-- هنا\n formFields = []; // <-- هنا\n columns = []; // <-- هنا\n dialogMaxWidth = '40rem'; // unset , fit-content\n isViewMode = false;\n displayMode = 'drawer';\n useConfirmOnSave = false;\n isEditMode = false;\n drawerVisible = false;\n dialogVisible = false;\n form = new UntypedFormGroup({});\n model;\n model_ = {};\n loading = false;\n errorMsg = '';\n errorMessage = '';\n options = {};\n actions = [];\n /** تحدد طريقة العرض: 'buttons' أو 'menu' */\n actionsMode = 'buttons';\n action = new EventEmitter();\n bulkAction = new EventEmitter();\n singleAction = new EventEmitter();\n beforeSaveTransform; // ⚡ دوال مخصصة قبل الحفظ\n afterSave = new EventEmitter();\n afterDelete = new EventEmitter();\n beforeSave = new EventEmitter();\n beforeDelete = new EventEmitter();\n formCancel = new EventEmitter();\n formInit = new EventEmitter();\n dataLoaded = new EventEmitter();\n selectionChange = new EventEmitter();\n error = new EventEmitter();\n // البحث\n // Search\n filters;\n filterModel = {};\n search = new EventEmitter();\n /** للتحكم بإظهار/إخفاء قسم البحث */\n showSearch = true;\n /** Pagination Inputs */\n first = 0;\n rows = 10;\n totalRecords = 0;\n pageChange = new EventEmitter();\n onSearch = new EventEmitter();\n visibleChange = new EventEmitter();\n ;\n // @Output() visibleChange = new EventEmitter<boolean>();\n /** لجعل الجدول قابل لاختيار الصفوف (افتراضي false) */\n rowSelectable = false;\n /** حدث يخرج الصف المحدّد */\n rowSelect = new EventEmitter();\n selection = null;\n // الفرز\n sortField;\n sortOrder = 1;\n scrollHeight = '400px';\n paginator = true;\n service = inject(BaseService);\n apiName = '';\n idField = 'id';\n showRowSelectionCheckbox = false;\n showAddButton = true;\n addPermissionName;\n addButtonConfigs = [\n {\n icon: 'pi pi-plus',\n label: 'ADD',\n variant: 'raised',\n severity: 'primary',\n size: 'small',\n actionName: 'add',\n visible: this.showAddButton,\n permission: this.addPermissionName,\n },\n ];\n createEditActions = [\n {\n icon: 'pi pi-check',\n label: 'SAVE',\n variant: 'raised',\n severity: 'primary',\n size: 'small',\n actionName: 'save',\n type: 'submit',\n splitActions: [\n {\n label: this.translate.instant('SAVE_AND_ADD'),\n icon: 'pi pi-save',\n actionName: 'saveAndAdd'\n }\n ]\n },\n {\n icon: 'pi pi-times',\n label: 'CANCEL',\n variant: 'raised',\n severity: 'danger',\n size: 'small',\n actionName: 'cancel',\n type: 'button',\n },\n ];\n supportSubPage = true;\n tabs = [];\n bulkActionButtons = [];\n singleActionButtons = [];\n _selectedRows = [];\n get isSingleItemSelected() {\n return this._selectedRows.length === 1;\n }\n get isMultipleItemSelected() {\n return this._selectedRows.length > 1;\n }\n get selectedItems() {\n return this._selectedRows;\n }\n breadcrumb;\n get breadcrumb_() {\n return this.breadcrumb?.map(v => ({\n ...v,\n label: this.translate.instant(v.label ?? '')\n }));\n }\n get rtl() {\n try {\n return document?.documentElement?.dir === 'rtl';\n }\n catch (error) {\n return true;\n }\n }\n /**\n * Modes to control what parts of the component are visible\n * - 'full': Table + CRUD operations (default)\n * - 'form-only': Only show form (for create/edit/view)\n * - 'table-only': Only show table (read-only mode)\n */\n mode = 'full';\n /** Force the component to show specific state */\n forceState = null;\n /** Hide table completely when in form-only mode */\n get hideTable() {\n return (this.mode === 'form-only' || this.mode === 'detail' || (this.forceState && this.mode !== 'table-only')) ?? false;\n }\n /** Auto-show form when in form-only mode with forceState */\n get autoShowForm() {\n return this.mode === 'form-only' && !!this.forceState;\n }\n tableClass = 'h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl xs:rounded-2xl p-4 bg-white';\n route = inject(ActivatedRoute);\n router = inject(Router);\n currentId;\n ngOnInit() {\n if (this.apiName && this.apiName != '') {\n this.service.apiName = this.apiName;\n }\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n if (this.tabs.length == 0) {\n this.formFields_ = this.formFields;\n this.tabs.push({ header: 'التفاصيل', icon: 'pi pi-info-circle', fields: this.formFields_, model: this.model });\n }\n if (this.supportSubPage) {\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n this.mode = 'detail';\n this.loadDetail(id);\n }\n else {\n this.currentId = undefined;\n }\n });\n }\n }\n // 3. Handle Header's Paginate Change Event\n onHeaderPaginateChange(event) {\n this.first = event.first; // Update the 'first' index\n this.rows = event.rows;\n const lazyLoadEvent = {\n first: this.first,\n rows: this.rows,\n // You'd typically include current sorting and filtering state here\n sortField: this.sortField,\n sortOrder: 1,\n filters: this.filters,\n globalFilter: null, // or your current global filter value\n };\n this.onLazyLoad(lazyLoadEvent);\n }\n loadDetail(id) {\n this.service.getList({ skipCount: 0, maxResultCount: 1, id }).subscribe({\n next: res => {\n const found = res.items.find(x => x[this.idField] == id);\n this.model = found;\n }\n });\n }\n // Helper method to open form programmatically\n openForm(mode, model) {\n this.dialog.openForm(mode, model);\n }\n // private destroy$ = new Subject<void>();\n /** الآن يتلقّى pagination + sort في حدث واحد */\n onLazyLoad(event) {\n // this.model_= this.model ?? {};\n this.model = this.model ?? {};\n this.formFields_ = this.formFields;\n const first = event.first ?? this.first;\n const rows = event.rows ?? this.rows;\n const sortField = typeof event.sortField === 'string'\n ? event.sortField\n : this.sortField;\n const sortOrder = event.sortOrder === -1 ? -1 : 1;\n const filters = {};\n if (event.filters) {\n Object.entries(event.filters).forEach(([field, meta]) => {\n const value = meta.value;\n if (value != null && value !== '') {\n filters[field] = value;\n }\n });\n }\n this.first = first;\n this.rows = rows;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n const dir = sortOrder === 1 ? 'asc' : 'desc';\n const sort = sortField ? `${sortField} ${dir}` : undefined;\n this.pageChange.emit({ first, rows, sort, filters });\n // يبني النص وإرساله\n }\n /** تصيير البيانات حسب الصفحة */\n get pagedData() {\n // return this.data ? this.data.slice(this.first, this.first + this.rows) : [];\n return this.data;\n }\n get globalFilterFields() {\n return this.columns.map(c => String(c.key));\n }\n /** أرسل إلى الأب لأتمتة شكل البحث إذا يحتاج */\n // from generic-crud-table.component.ts\n /** بدّل applySearch لتبث pageChange مباشرةً */\n applySearch(filters) {\n // this.genericTable.applyFilter(global);\n this.onSearch.emit(filters);\n }\n /** دالة تنفّذ عند النقر على صف */\n onRowClick(row) {\n if (this.rowSelectable) {\n this.rowSelect.emit(row);\n }\n }\n onSubmit() {\n if (this.mode != 'form-only') {\n this.applySearch('');\n }\n }\n trackByIdx(index, item) {\n return index;\n }\n onSingleItemAction(btn) {\n if (!this.isSingleItemSelected)\n return;\n const selectedItem = this._selectedRows[0];\n this.singleAction.emit({\n name: btn.actionName ?? 'singleAction',\n item: selectedItem\n });\n }\n onInternalBulkAction(btn) {\n if (!this.isMultipleItemSelected)\n return;\n this.bulkAction.emit({\n name: btn.actionName ?? 'bulkAction',\n items: [...this._selectedRows] // نرسل نسخة من المصفوفة\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudTableComponent, isStandalone: true, selector: \"app-generic-crud-table\", inputs: { data: \"data\", formFields: \"formFields\", columns: \"columns\", dialogMaxWidth: \"dialogMaxWidth\", isViewMode: \"isViewMode\", displayMode: \"displayMode\", useConfirmOnSave: \"useConfirmOnSave\", isEditMode: \"isEditMode\", drawerVisible: \"drawerVisible\", dialogVisible: \"dialogVisible\", model: \"model\", loading: \"loading\", errorMsg: \"errorMsg\", errorMessage: \"errorMessage\", actions: \"actions\", actionsMode: \"actionsMode\", beforeSaveTransform: \"beforeSaveTransform\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", rowSelectable: \"rowSelectable\", scrollHeight: \"scrollHeight\", paginator: \"paginator\", service: \"service\", apiName: \"apiName\", idField: \"idField\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\", showAddButton: \"showAddButton\", addPermissionName: \"addPermissionName\", addButtonConfigs: \"addButtonConfigs\", createEditActions: \"createEditActions\", supportSubPage: \"supportSubPage\", tabs: \"tabs\", bulkActionButtons: \"bulkActionButtons\", singleActionButtons: \"singleActionButtons\", breadcrumb: \"breadcrumb\", mode: \"mode\", forceState: \"forceState\", hideTable: \"hideTable\", autoShowForm: \"autoShowForm\" }, outputs: { action: \"action\", bulkAction: \"bulkAction\", singleAction: \"singleAction\", afterSave: \"afterSave\", afterDelete: \"afterDelete\", beforeSave: \"beforeSave\", beforeDelete: \"beforeDelete\", formCancel: \"formCancel\", formInit: \"formInit\", dataLoaded: \"dataLoaded\", selectionChange: \"selectionChange\", error: \"error\", search: \"search\", pageChange: \"pageChange\", onSearch: \"onSearch\", visibleChange: \"visibleChange\", rowSelect: \"rowSelect\" }, viewQueries: [{ propertyName: \"genericTable\", first: true, predicate: [\"genericTable\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], ngImport: i0, template: \"<div\\r\\n [class]=\\\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\\\"\\r\\n>\\r\\n <app-generic-crud-header\\r\\n [mode]=\\\"mode\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [isSingleItemSelected]=\\\"isSingleItemSelected\\\"\\r\\n [selectedItems]=\\\"_selectedRows\\\"\\r\\n [singleActionButtons]=\\\"singleActionButtons\\\"\\r\\n [bulkActionButtons]=\\\"bulkActionButtons\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [filters]=\\\"filters\\\"\\r\\n [filterModel]=\\\"filterModel\\\"\\r\\n [showSearch]=\\\"showSearch\\\"\\r\\n (singleItemAction)=\\\"onSingleItemAction($event)\\\"\\r\\n (bulkAction)=\\\"onInternalBulkAction($event)\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (resetSearch)=\\\"applySearch('')\\\"\\r\\n (paginateChange)=\\\"onHeaderPaginateChange($event)\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n/>\\r\\n\\r\\n @if (!hideTable) {\\r\\n <lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n ></lib-generic-table>\\r\\n\\r\\n }\\r\\n\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [service]=\\\"service\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [dialogMaxWidth]=\\\"dialogMaxWidth\\\"\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [forceState]=\\\"forceState\\\"\\r\\n [drawerVisible]=\\\"drawerVisible\\\"\\r\\n [dialogVisible]=\\\"dialogVisible\\\"\\r\\n [isViewMode]=\\\"isViewMode\\\"\\r\\n [isEditMode]=\\\"isEditMode\\\"\\r\\n [useConfirmOnSave]=\\\"useConfirmOnSave\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [errorMsg]=\\\"errorMsg\\\"\\r\\n [errorMessage]=\\\"errorMessage\\\"\\r\\n [beforeSaveTransform]=\\\"beforeSaveTransform\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (afterSave)=\\\"afterSave.emit($event);onSubmit();\\\"\\r\\n (afterDelete)=\\\"afterDelete.emit($event)\\\"\\r\\n (beforeSave)=\\\"beforeSave.emit($event)\\\"\\r\\n (beforeDelete)=\\\"beforeDelete.emit($event)\\\"\\r\\n (formCancel)=\\\"formCancel.emit()\\\"\\r\\n (formInit)=\\\"formInit.emit($event)\\\"\\r\\n (dataLoaded)=\\\"dataLoaded.emit($event)\\\"\\r\\n (selectionChange)=\\\"selectionChange.emit($event)\\\"\\r\\n (error)=\\\"error.emit($event)\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n\\r\\n <app-detail-view\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [title]=\\\"breadcrumb_?.[0]?.label || 'Detail'\\\"\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [tabs]=\\\"tabs\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [createEditActions]=\\\"createEditActions\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n >\\r\\n </app-detail-view>\\r\\n\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: TableModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: GenericTable, selector: \"lib-generic-table\", inputs: [\"data\", \"columns\", \"loading\", \"actions\", \"actionsPosition\", \"actionsMode\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"globalFilterFields\", \"addButtonConfigs\", \"scrollHeight\", \"rowSelectable\", \"selection\", \"paginator\", \"showRowSelectionCheckbox\"], outputs: [\"action\", \"pageChange\", \"onAddNew\", \"rowSelect\", \"selectionChange\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: MessageModule }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"component\", type: GenericCrudHeaderComponent, selector: \"app-generic-crud-header\", inputs: [\"mode\", \"breadcrumb\", \"isSingleItemSelected\", \"selectedItems\", \"singleActionButtons\", \"bulkActionButtons\", \"addButtonConfigs\", \"filters\", \"filterModel\", \"showSearch\", \"first\", \"rows\", \"totalRecords\"], outputs: [\"singleItemAction\", \"bulkAction\", \"search\", \"resetSearch\", \"action\", \"paginateChange\"] }, { kind: \"component\", type: GenericViewComponent, selector: \"app-detail-view\", inputs: [\"title\", \"actions\", \"createEditActions\", \"tabs\", \"viewMode\", \"breadcrumb\", \"service\", \"formFields\", \"apiName\", \"idField\", \"standaloneMode\", \"isViewMode\", \"isCreateMode\", \"isEditMode\", \"model\", \"displayMode\", \"mode\", \"loading\"], outputs: [\"action\", \"afterDelete\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-table', standalone: true, imports: [\n CommonModule,\n TableModule,\n ButtonModule,\n GenericTable,\n ToolbarModule,\n TranslateModule,\n DividerModule,\n IconFieldModule,\n DrawerModule,\n ReactiveFormsModule,\n FormsModule,\n MessageModule,\n DialogModule,\n GenericDialogComponent,\n GenericCrudHeaderComponent,\n GenericViewComponent\n ], host: {\n class: ''\n }, template: \"<div\\r\\n [class]=\\\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\\\"\\r\\n>\\r\\n <app-generic-crud-header\\r\\n [mode]=\\\"mode\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [isSingleItemSelected]=\\\"isSingleItemSelected\\\"\\r\\n [selectedItems]=\\\"_selectedRows\\\"\\r\\n [singleActionButtons]=\\\"singleActionButtons\\\"\\r\\n [bulkActionButtons]=\\\"bulkActionButtons\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [filters]=\\\"filters\\\"\\r\\n [filterModel]=\\\"filterModel\\\"\\r\\n [showSearch]=\\\"showSearch\\\"\\r\\n (singleItemAction)=\\\"onSingleItemAction($event)\\\"\\r\\n (bulkAction)=\\\"onInternalBulkAction($event)\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (resetSearch)=\\\"applySearch('')\\\"\\r\\n (paginateChange)=\\\"onHeaderPaginateChange($event)\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n/>\\r\\n\\r\\n @if (!hideTable) {\\r\\n <lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n ></lib-generic-table>\\r\\n\\r\\n }\\r\\n\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [service]=\\\"service\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [dialogMaxWidth]=\\\"dialogMaxWidth\\\"\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [forceState]=\\\"forceState\\\"\\r\\n [drawerVisible]=\\\"drawerVisible\\\"\\r\\n [dialogVisible]=\\\"dialogVisible\\\"\\r\\n [isViewMode]=\\\"isViewMode\\\"\\r\\n [isEditMode]=\\\"isEditMode\\\"\\r\\n [useConfirmOnSave]=\\\"useConfirmOnSave\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [errorMsg]=\\\"errorMsg\\\"\\r\\n [errorMessage]=\\\"errorMessage\\\"\\r\\n [beforeSaveTransform]=\\\"beforeSaveTransform\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (afterSave)=\\\"afterSave.emit($event);onSubmit();\\\"\\r\\n (afterDelete)=\\\"afterDelete.emit($event)\\\"\\r\\n (beforeSave)=\\\"beforeSave.emit($event)\\\"\\r\\n (beforeDelete)=\\\"beforeDelete.emit($event)\\\"\\r\\n (formCancel)=\\\"formCancel.emit()\\\"\\r\\n (formInit)=\\\"formInit.emit($event)\\\"\\r\\n (dataLoaded)=\\\"dataLoaded.emit($event)\\\"\\r\\n (selectionChange)=\\\"selectionChange.emit($event)\\\"\\r\\n (error)=\\\"error.emit($event)\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n\\r\\n <app-detail-view\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [title]=\\\"breadcrumb_?.[0]?.label || 'Detail'\\\"\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [tabs]=\\\"tabs\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [createEditActions]=\\\"createEditActions\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n >\\r\\n </app-detail-view>\\r\\n\\r\\n</div>\\r\\n\" }]\n }], propDecorators: { genericTable: [{\n type: ViewChild,\n args: ['genericTable']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], data: [{\n type: Input\n }], formFields: [{\n type: Input\n }], columns: [{\n type: Input\n }], dialogMaxWidth: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], useConfirmOnSave: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], drawerVisible: [{\n type: Input\n }], dialogVisible: [{\n type: Input\n }], model: [{\n type: Input\n }], loading: [{\n type: Input\n }], errorMsg: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], action: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], singleAction: [{\n type: Output\n }], beforeSaveTransform: [{\n type: Input\n }], afterSave: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], beforeSave: [{\n type: Output\n }], beforeDelete: [{\n type: Output\n }], formCancel: [{\n type: Output\n }], formInit: [{\n type: Output\n }], dataLoaded: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], error: [{\n type: Output\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], search: [{\n type: Output\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], onSearch: [{\n type: Output\n }], visibleChange: [{\n type: Output\n }], rowSelectable: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], scrollHeight: [{\n type: Input\n }], paginator: [{\n type: Input\n }], service: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }], showAddButton: [{\n type: Input\n }], addPermissionName: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], supportSubPage: [{\n type: Input\n }], tabs: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], mode: [{\n type: Input\n }], forceState: [{\n type: Input\n }], hideTable: [{\n type: Input\n }], autoShowForm: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFDeEQscURBQXFEO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTyxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFRLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FB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cEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFHSSxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBUUEsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxTQUFTO3NCQUFqQixLQUFLO2dCQUVFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFSSxhQUFhO3NCQUFyQixLQUFLO2dCQUVDLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBYUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQTRCRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQW9CQyxVQUFVO3NCQUFsQixLQUFLO2dCQXVCSyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTyxTQUFTO3NCQUFyQixLQUFLO2dCQUtPLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZSAqL1xyXG5pbXBvcnQgeyBEaXZpZGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaXZpZGVyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgaW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlLFRhYmxlTGF6eUxvYWRFdmVudCAgfSAgZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSAgIGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgSWNvbkZpZWxkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJhd2VyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcmF3ZXInO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGlvbkRlZiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnXHJcbmltcG9ydCB7IEdlbmVyaWNDcnVkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9nZW5lcmljLWNydWQtaGVhZGVyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IERldGFpbFRhYiwgR2VuZXJpY1ZpZXdDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy12aWV3JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUNoYW5nZVBheWxvYWQgZXh0ZW5kcyBQYWdpbmF0b3JTdGF0ZSB7XHJcbnNvcnQ/OiBzdHJpbmc7XHJcbmZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25zTW9kZSA9ICdidXR0b25zJyB8ICdtZW51JztcclxuXHJcbi8qKlxyXG4gKiDZhdmD2YjZhiDYrNiv2YjZhCBDUlVEINi52KfZhSDZitmF2YPZhiDYpdi52KfYr9ipINin2LPYqtiu2K/Yp9mF2YdcclxuICog2YrYr9i52YUg2KfZhNi52YXZhNmK2KfYqiDYp9mE2KPYs9in2LPZitipOiDYpdmG2LTYp9ih2Iwg2YLYsdin2KHYqdiMINiq2K3Yr9mK2KvYjCDYrdiw2YFcclxuICog2YXYuSDYpdmF2YPYp9mG2YrYqSDYp9mE2KrYrti12YrYtSDYudio2LEg2LnYr9ipINij2YjYttin2Lkg2YjYudix2LZcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtY3J1ZC10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUYWJsZU1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEdlbmVyaWNUYWJsZSxcclxuICAgIFRvb2xiYXJNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBEaXZpZGVyTW9kdWxlLFxyXG4gICAgSWNvbkZpZWxkTW9kdWxlLFxyXG4gICAgRHJhd2VyTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWVzc2FnZU1vZHVsZSxcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQ3J1ZEhlYWRlckNvbXBvbmVudCxcclxuICAgIEdlbmVyaWNWaWV3Q29tcG9uZW50XHJcbl0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtY3J1ZC10YWJsZS5odG1sJyxcclxuICAgaG9zdDoge1xyXG4gICAgICAgIGNsYXNzOiAnJ1xyXG4gICAgfSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljQ3J1ZFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcclxuIEBWaWV3Q2hpbGQoJ2dlbmVyaWNUYWJsZScpIGdlbmVyaWNUYWJsZSE6IEdlbmVyaWNUYWJsZTxUPjtcclxuIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiB0cmFuc2xhdGU6VHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuIHByaXZhdGUgc3dhbFNlcnZpY2UgPSBpbmplY3QoU3dhbFNlcnZpY2UpO1xyXG5cclxuICAgIGhvbWU6IE1lbnVJdGVtIHwgdW5kZWZpbmVkID0geyBpY29uOiAncGkgcGktaG9tZScsIHJvdXRlckxpbms6ICcvJyB9O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xyXG4gICBmb3JtRmllbGRzXzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdOyAgLy8gPC0tINmH2YbYp1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTsgIC8vIDwtLSDZh9mG2KdcclxuICBASW5wdXQoKSBjb2x1bW5zOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107ICAvLyA8LS0g2YfZhtinXHJcbiAgQElucHV0KCkgZGlhbG9nTWF4V2lkdGggPSAnNDByZW0nOyAvLyB1bnNldCAsIGZpdC1jb250ZW50XHJcbiAgQElucHV0KCkgaXNWaWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzcGxheU1vZGU6XHJcbiAgICB8ICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSdcclxuICAgIHwgUGFydGlhbDxSZWNvcmQ8J2FkZCcgfCAnZWRpdCcgfCAndmlldycsICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSc+PlxyXG4gICAgPSAnZHJhd2VyJztcclxuICBASW5wdXQoKSB1c2VDb25maXJtT25TYXZlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRyYXdlclZpc2libGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcbiBASW5wdXQoKSBtb2RlbDogYW55O1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yTXNnID0gJyc7XHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmd8YW55ID0gJyc7XHJcblxyXG5vcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiBBY3Rpb25EZWY8VD5bXSA9IFtdO1xyXG4gICAgLyoqINiq2K3Yr9ivINi32LHZitmC2Kkg2KfZhNi52LHYtjogJ2J1dHRvbnMnINij2YggJ21lbnUnICovXHJcbiAgQElucHV0KCkgYWN0aW9uc01vZGU6IEFjdGlvbnNNb2RlID0gJ2J1dHRvbnMnO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IFQgfT4oKTtcclxuICBAT3V0cHV0KCkgYnVsa0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBUW10gfT4oKTtcclxuICBAT3V0cHV0KCkgc2luZ2xlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgaXRlbTogVCB9PigpO1xyXG4gIEBJbnB1dCgpIGJlZm9yZVNhdmVUcmFuc2Zvcm0/OiAocmVjb3JkOiBhbnksIGlzRWRpdDogYm9vbGVhbikgPT4gYW55OyAvLyDimqEg2K/ZiNin2YQg2YXYrti12LXYqSDZgtio2YQg2KfZhNit2YHYuFxyXG5cclxuXHJcbiAgIEBPdXRwdXQoKSBhZnRlclNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBUOyBpc0VkaXQ6IGJvb2xlYW47IHJlc3BvbnNlPzogYW55IH0+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogVDsgcmVzcG9uc2U/OiBhbnkgfT4oKTtcclxuICBAT3V0cHV0KCkgYmVmb3JlU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFQ7IGlzRWRpdDogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBUIH0+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZvcm06IFVudHlwZWRGb3JtR3JvdXA7IG1vZGVsOiBhbnkgfT4oKTtcclxuICBAT3V0cHV0KCkgZGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBUW107IHRvdGFsOiBudW1iZXIgfT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNlbGVjdGVkOiBUW107IHNlbGVjdGVkQ291bnQ6IG51bWJlciB9PigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBlcnJvcjogYW55OyBjb250ZXh0OiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgLy8g2KfZhNio2K3Yq1xyXG4vLyBTZWFyY2hcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBhbnk7XHJcbiAgIEBJbnB1dCgpIGZpbHRlck1vZGVsOiBhbnkgPSB7fTtcclxuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IGdsb2JhbDogc3RyaW5nIH0+KCk7XHJcblxyXG4vKiog2YTZhNiq2K3Zg9mFINio2KXYuNmH2KfYsS/Ypdiu2YHYp9ihINmC2LPZhSDYp9mE2KjYrdirICovXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IHRydWU7XHJcblxyXG4gIC8qKiBQYWdpbmF0aW9uIElucHV0cyAqL1xyXG4gIEBJbnB1dCgpIGZpcnN0ID0gMDtcclxuICBASW5wdXQoKSByb3dzID0gMTA7XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcclxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZVBheWxvYWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5AT3V0cHV0KCkgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpOztcclxuLy8gQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgIC8qKiDZhNis2LnZhCDYp9mE2KzYr9mI2YQg2YLYp9io2YQg2YTYp9iu2KrZitin2LEg2KfZhNi12YHZiNmBICjYp9mB2KrYsdin2LbZiiBmYWxzZSkgKi9cclxuICBASW5wdXQoKSByb3dTZWxlY3RhYmxlID0gZmFsc2U7XHJcbiAgLyoqINit2K/YqyDZitiu2LHYrCDYp9mE2LXZgSDYp9mE2YXYrdiv2ZHYryAqL1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gIHNlbGVjdGlvbjogVCB8IG51bGwgPSBudWxsO1xyXG5cclxuIC8vINin2YTZgdix2LJcclxuICBzb3J0RmllbGQ/OiBzdHJpbmc7XHJcbiAgc29ydE9yZGVyOiAxIHwgLTEgPSAxO1xyXG5cclxuQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzQwMHB4JztcclxuXHJcbiBASW5wdXQoKSBwYWdpbmF0b3IgPSB0cnVlO1xyXG5cclxuQElucHV0KCkgc2VydmljZTogQmFzZVNlcnZpY2UgPSBpbmplY3QoQmFzZVNlcnZpY2UpO1xyXG5ASW5wdXQoKSBhcGlOYW1lID0gJyc7XHJcbkBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG5cclxuIEBJbnB1dCgpIHNob3dSb3dTZWxlY3Rpb25DaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uID0gdHJ1ZTtcclxuXHJcbkBJbnB1dCgpIGFkZFBlcm1pc3Npb25OYW1lPzpzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGFkZEJ1dHRvbkNvbmZpZ3M6IEJ1dHRvbkNvbmZpZ1tdID0gW1xyXG4gIHtcclxuICAgIGljb246ICdwaSBwaS1wbHVzJyxcclxuICAgIGxhYmVsOiAnQUREJyxcclxuICAgIHZhcmlhbnQ6ICdyYWlzZWQnLFxyXG4gICAgc2V2ZXJpdHk6ICdwcmltYXJ5JyxcclxuICAgIHNpemU6ICdzbWFsbCcsXHJcbiAgICBhY3Rpb25OYW1lOiAnYWRkJyxcclxuICAgIHZpc2libGU6IHRoaXMuc2hvd0FkZEJ1dHRvbixcclxuICAgIHBlcm1pc3Npb246IHRoaXMuYWRkUGVybWlzc2lvbk5hbWUsXHJcbiAgfSxcclxuXTtcclxuXHJcbiBASW5wdXQoKSBjcmVhdGVFZGl0QWN0aW9uczogQnV0dG9uQ29uZmlnW10gPSBbXHJcbiAge1xyXG4gICAgaWNvbjogJ3BpIHBpLWNoZWNrJyxcclxuICAgIGxhYmVsOiAnU0FWRScsXHJcbiAgICB2YXJpYW50OiAncmFpc2VkJyxcclxuICAgIHNldmVyaXR5OiAncHJpbWFyeScsXHJcbiAgICBzaXplOiAnc21hbGwnLFxyXG4gICAgYWN0aW9uTmFtZTogJ3NhdmUnLFxyXG4gICAgdHlwZTogJ3N1Ym1pdCcsXHJcbiAgICBzcGxpdEFjdGlvbnM6IFtcclxuICAgICB7XHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTQVZFX0FORF9BREQnKSxcclxuICAgICAgaWNvbjogJ3BpIHBpLXNhdmUnLFxyXG4gICAgICAgYWN0aW9uTmFtZTogJ3NhdmVBbmRBZGQnXHJcbiAgICB9XHJcbiAgXVxyXG4gIH0sXHJcbiAgIHtcclxuICAgIGljb246ICdwaSBwaS10aW1lcycsXHJcbiAgICBsYWJlbDogJ0NBTkNFTCcsXHJcbiAgICB2YXJpYW50OiAncmFpc2VkJyxcclxuICAgIHNldmVyaXR5OiAnZGFuZ2VyJyxcclxuICAgIHNpemU6ICdzbWFsbCcsXHJcbiAgICBhY3Rpb25OYW1lOiAnY2FuY2VsJyxcclxuICAgIHR5cGU6ICdidXR0b24nLFxyXG4gIH0sXHJcbl07XHJcblxyXG4gQElucHV0KCkgc3VwcG9ydFN1YlBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuIEBJbnB1dCgpIHRhYnM6IERldGFpbFRhYltdID0gW107XHJcbiAgQElucHV0KCkgYnVsa0FjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2luZ2xlQWN0aW9uQnV0dG9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuXHJcbiBfc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcclxuXHJcbmdldCBpc1NpbmdsZUl0ZW1TZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMTtcclxufVxyXG5cclxuZ2V0IGlzTXVsdGlwbGVJdGVtU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cy5sZW5ndGggPiAxO1xyXG59XHJcblxyXG5nZXQgc2VsZWN0ZWRJdGVtcygpOiBUW10ge1xyXG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZFJvd3M7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5ASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuXHJcbmdldCBicmVhZGNydW1iXygpOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gdGhpcy5icmVhZGNydW1iPy5tYXAodiA9PiAoe1xyXG4gICAgLi4udixcclxuICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHYubGFiZWwgPz8gJycpXHJcbiAgfSkpO1xyXG59XHJcbmdldCBydGwoKTogYm9vbGVhbiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBkb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50Py5kaXIgPT09ICdydGwnO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbiAvKipcclxuICAgKiBNb2RlcyB0byBjb250cm9sIHdoYXQgcGFydHMgb2YgdGhlIGNvbXBvbmVudCBhcmUgdmlzaWJsZVxyXG4gICAqIC0gJ2Z1bGwnOiBUYWJsZSArIENSVUQgb3BlcmF0aW9ucyAoZGVmYXVsdClcclxuICAgKiAtICdmb3JtLW9ubHknOiBPbmx5IHNob3cgZm9ybSAoZm9yIGNyZWF0ZS9lZGl0L3ZpZXcpXHJcbiAgICogLSAndGFibGUtb25seSc6IE9ubHkgc2hvdyB0YWJsZSAocmVhZC1vbmx5IG1vZGUpXHJcbiAgICovXHJcbiAgQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgLyoqIEZvcmNlIHRoZSBjb21wb25lbnQgdG8gc2hvdyBzcGVjaWZpYyBzdGF0ZSAqL1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ3ZpZXcnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBIaWRlIHRhYmxlIGNvbXBsZXRlbHkgd2hlbiBpbiBmb3JtLW9ubHkgbW9kZSAqL1xyXG4gIEBJbnB1dCgpIGdldCBoaWRlVGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMubW9kZSA9PT0gJ2Zvcm0tb25seScgfHwgdGhpcy5tb2RlID09PSAnZGV0YWlsJyB8fCAodGhpcy5mb3JjZVN0YXRlICYmIHRoaXMubW9kZSAhPT0gJ3RhYmxlLW9ubHknKSApPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogQXV0by1zaG93IGZvcm0gd2hlbiBpbiBmb3JtLW9ubHkgbW9kZSB3aXRoIGZvcmNlU3RhdGUgKi9cclxuICBASW5wdXQoKSBnZXQgYXV0b1Nob3dGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2Zvcm0tb25seScgJiYgISF0aGlzLmZvcmNlU3RhdGU7XHJcbiAgfVxyXG5cclxuIHRhYmxlQ2xhc3MgPSAnaC1mdWxsIGZsZXgtMSBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZC0yeGwgeHM6cm91bmRlZC0yeGwgcC00IGJnLXdoaXRlJztcclxuXHJcbiBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxucHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuY3VycmVudElkPzogc3RyaW5nIHwgbnVtYmVyO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmKHRoaXMuYXBpTmFtZSAmJiB0aGlzLmFwaU5hbWUgIT0gJycpe1xyXG4gICAgICB0aGlzLnNlcnZpY2UuYXBpTmFtZSA9IHRoaXMuYXBpTmFtZSA7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuYXBpTmFtZSkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgfVxyXG5cclxuICBpZih0aGlzLnRhYnMubGVuZ3RoID09IDApe1xyXG4gICAgdGhpcy5mb3JtRmllbGRzXyA9IHRoaXMuZm9ybUZpZWxkcztcclxuICAgIHRoaXMudGFicy5wdXNoKHsgaGVhZGVyOiAn2KfZhNiq2YHYp9i12YrZhCcsaWNvbjoncGkgcGktaW5mby1jaXJjbGUnLCBmaWVsZHM6IHRoaXMuZm9ybUZpZWxkc18sIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xyXG4gIH1cclxuICAgIGlmICh0aGlzLnN1cHBvcnRTdWJQYWdlKSB7XHJcbiAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmdldCh0aGlzLmlkRmllbGQpO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgIHRoaXMubW9kZSA9ICdkZXRhaWwnO1xyXG4gICAgICB0aGlzLmxvYWREZXRhaWwoaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuICB9XHJcblxyXG4gICAvLyAzLiBIYW5kbGUgSGVhZGVyJ3MgUGFnaW5hdGUgQ2hhbmdlIEV2ZW50XHJcbiAgb25IZWFkZXJQYWdpbmF0ZUNoYW5nZShldmVudDogeyBmaXJzdDogbnVtYmVyOyByb3dzOiBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0OyAvLyBVcGRhdGUgdGhlICdmaXJzdCcgaW5kZXhcclxuICAgIHRoaXMucm93cyA9IGV2ZW50LnJvd3M7XHJcblxyXG5cclxuICAgICAgIGNvbnN0IGxhenlMb2FkRXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCxcclxuICAgICAgICByb3dzOiB0aGlzLnJvd3MsXHJcbiAgICAgICAgLy8gWW91J2QgdHlwaWNhbGx5IGluY2x1ZGUgY3VycmVudCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgc3RhdGUgaGVyZVxyXG4gICAgICAgIHNvcnRGaWVsZDogdGhpcy5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiAxLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyAsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyOiBudWxsLCAvLyBvciB5b3VyIGN1cnJlbnQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMub25MYXp5TG9hZChsYXp5TG9hZEV2ZW50KTtcclxuICB9XHJcbiAgbG9hZERldGFpbChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgdGhpcy5zZXJ2aWNlLmdldExpc3QoeyBza2lwQ291bnQ6IDAsIG1heFJlc3VsdENvdW50OiAxLCBpZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogcmVzID0+IHtcclxuICAgICAgY29uc3QgZm91bmQgPSByZXMuaXRlbXMuZmluZCh4ID0+IHhbdGhpcy5pZEZpZWxkXSA9PSBpZCk7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBmb3VuZDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gSGVscGVyIG1ldGhvZCB0byBvcGVuIGZvcm0gcHJvZ3JhbW1hdGljYWxseVxyXG5vcGVuRm9ybShtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JyB8ICd2aWV3JywgbW9kZWw/OiBhbnkpIHtcclxuICB0aGlzLmRpYWxvZy5vcGVuRm9ybShtb2RlLG1vZGVsKTtcclxufVxyXG5cclxuXHJcbi8vICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuIC8qKiDYp9mE2KLZhiDZitiq2YTZgtmR2YkgcGFnaW5hdGlvbiArIHNvcnQg2YHZiiDYrdiv2Ksg2YjYp9it2K8gKi9cclxub25MYXp5TG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgLy8gdGhpcy5tb2RlbF89IHRoaXMubW9kZWwgPz8ge307XHJcbiAgdGhpcy5tb2RlbD0gdGhpcy5tb2RlbCA/PyB7fTtcclxuXHJcbiAgdGhpcy5mb3JtRmllbGRzXyA9IHRoaXMuZm9ybUZpZWxkcztcclxuICBjb25zdCBmaXJzdCAgICAgPSBldmVudC5maXJzdCAgPz8gdGhpcy5maXJzdDtcclxuICBjb25zdCByb3dzICAgICAgPSBldmVudC5yb3dzICAgPz8gdGhpcy5yb3dzO1xyXG4gIGNvbnN0IHNvcnRGaWVsZCA9IHR5cGVvZiBldmVudC5zb3J0RmllbGQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBldmVudC5zb3J0RmllbGRcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc29ydEZpZWxkO1xyXG4gIGNvbnN0IHNvcnRPcmRlciA9IGV2ZW50LnNvcnRPcmRlciA9PT0gLTEgPyAtMSA6IDE7XHJcblxyXG5cclxuICBjb25zdCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBpZiAoZXZlbnQuZmlsdGVycykge1xyXG4gICAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIG1ldGFdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAobWV0YSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgZmlsdGVyc1tmaWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB0aGlzLmZpcnN0ICAgICA9IGZpcnN0O1xyXG4gIHRoaXMucm93cyAgICAgID0gcm93cztcclxuICB0aGlzLnNvcnRGaWVsZCA9IHNvcnRGaWVsZDtcclxuICB0aGlzLnNvcnRPcmRlciA9IHNvcnRPcmRlciBhcyAxfCAtMTtcclxuY29uc3QgZGlyID0gc29ydE9yZGVyID09PSAxID8gJ2FzYycgOiAnZGVzYyc7XHJcbiBjb25zdCBzb3J0ID0gc29ydEZpZWxkID8gYCR7c29ydEZpZWxkfSAke2Rpcn1gIDogdW5kZWZpbmVkO1xyXG5cclxuICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGZpcnN0LCByb3dzICxzb3J0LCBmaWx0ZXJzIH0pO1xyXG5cclxuICAvLyDZitio2YbZiiDYp9mE2YbYtSDZiNil2LHYs9in2YTZh1xyXG5cclxufVxyXG5cclxuXHJcbiAgLyoqINiq2LXZitmK2LEg2KfZhNio2YrYp9mG2KfYqiDYrdiz2Kgg2KfZhNi12YHYrdipICovXHJcbiAgZ2V0IHBhZ2VkRGF0YSgpOiBUW10ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5zbGljZSh0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5yb3dzKSA6IFtdO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5nZXQgZ2xvYmFsRmlsdGVyRmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChjID0+IFN0cmluZyhjLmtleSkpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvKiog2KPYsdiz2YQg2KXZhNmJINin2YTYo9ioINmE2KPYqtmF2KrYqSDYtNmD2YQg2KfZhNio2K3YqyDYpdiw2Kcg2YrYrdiq2KfYrCAqL1xyXG4vLyBmcm9tIGdlbmVyaWMtY3J1ZC10YWJsZS5jb21wb25lbnQudHNcclxuXHJcbi8qKiDYqNiv2ZHZhCBhcHBseVNlYXJjaCDZhNiq2KjYqyBwYWdlQ2hhbmdlINmF2KjYp9i02LHYqdmLICovXHJcbiBhcHBseVNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcclxuICAgIC8vIHRoaXMuZ2VuZXJpY1RhYmxlLmFwcGx5RmlsdGVyKGdsb2JhbCk7XHJcbiAgICAgIHRoaXMub25TZWFyY2guZW1pdChmaWx0ZXJzKTtcclxuICB9XHJcblxyXG5cclxuIC8qKiDYr9in2YTYqSDYqtmG2YHZkdiwINi52YbYryDYp9mE2YbZgtixINi52YTZiSDYtdmBICovXHJcbiAgb25Sb3dDbGljayhyb3c6IFQpIHtcclxuICAgIGlmICh0aGlzLnJvd1NlbGVjdGFibGUpIHtcclxuICAgICAgdGhpcy5yb3dTZWxlY3QuZW1pdChyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxub25TdWJtaXQoKSB7XHJcbiBpZiAodGhpcy5tb2RlICE9ICdmb3JtLW9ubHknKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5hcHBseVNlYXJjaCgnJyk7XHJcbiAgICAgICAgfVxyXG59XHJcblxyXG4gICAgIHRyYWNrQnlJZHgoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gaW5kZXg7XHJcbiB9XHJcblxyXG5vblNpbmdsZUl0ZW1BY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNTaW5nbGVJdGVtU2VsZWN0ZWQpIHJldHVybjtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5fc2VsZWN0ZWRSb3dzWzBdO1xyXG4gIHRoaXMuc2luZ2xlQWN0aW9uLmVtaXQoe1xyXG4gICAgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ3NpbmdsZUFjdGlvbicsXHJcbiAgICBpdGVtOiBzZWxlY3RlZEl0ZW1cclxuICB9KTtcclxufVxyXG5cclxub25JbnRlcm5hbEJ1bGtBY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNNdWx0aXBsZUl0ZW1TZWxlY3RlZCkgcmV0dXJuO1xyXG5cclxuICB0aGlzLmJ1bGtBY3Rpb24uZW1pdCh7XHJcbiAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnYnVsa0FjdGlvbicsXHJcbiAgICBpdGVtczogWy4uLnRoaXMuX3NlbGVjdGVkUm93c10gIC8vINmG2LHYs9mEINmG2LPYrtipINmF2YYg2KfZhNmF2LXZgdmI2YHYqVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2XHJcbiAgW2NsYXNzXT1cIm1vZGUgIT09ICdmb3JtLW9ubHknICYmIG1vZGUgIT09ICdkZXRhaWwnICA/IHRhYmxlQ2xhc3MgOiAnJ1wiXHJcbj5cclxuIDxhcHAtZ2VuZXJpYy1jcnVkLWhlYWRlclxyXG4gIFttb2RlXT1cIm1vZGVcIlxyXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJfXCJcclxuICBbaXNTaW5nbGVJdGVtU2VsZWN0ZWRdPVwiaXNTaW5nbGVJdGVtU2VsZWN0ZWRcIlxyXG4gIFtzZWxlY3RlZEl0ZW1zXT1cIl9zZWxlY3RlZFJvd3NcIlxyXG4gIFtzaW5nbGVBY3Rpb25CdXR0b25zXT1cInNpbmdsZUFjdGlvbkJ1dHRvbnNcIlxyXG4gIFtidWxrQWN0aW9uQnV0dG9uc109XCJidWxrQWN0aW9uQnV0dG9uc1wiXHJcbiAgW2FkZEJ1dHRvbkNvbmZpZ3NdPVwiYWRkQnV0dG9uQ29uZmlnc1wiXHJcbiAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgW2ZpbHRlck1vZGVsXT1cImZpbHRlck1vZGVsXCJcclxuICBbc2hvd1NlYXJjaF09XCJzaG93U2VhcmNoXCJcclxuICAoc2luZ2xlSXRlbUFjdGlvbik9XCJvblNpbmdsZUl0ZW1BY3Rpb24oJGV2ZW50KVwiXHJcbiAgKGJ1bGtBY3Rpb24pPVwib25JbnRlcm5hbEJ1bGtBY3Rpb24oJGV2ZW50KVwiXHJcbiAgKGFjdGlvbik9XCJhY3Rpb24uZW1pdCgkZXZlbnQpXCJcclxuICAoc2VhcmNoKT1cImFwcGx5U2VhcmNoKCRldmVudClcIlxyXG4gIChyZXNldFNlYXJjaCk9XCJhcHBseVNlYXJjaCgnJylcIlxyXG4gIChwYWdpbmF0ZUNoYW5nZSk9XCJvbkhlYWRlclBhZ2luYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gIFtmaXJzdF09XCJmaXJzdFwiXHJcbiAgW3Jvd3NdPVwicm93c1wiXHJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4vPlxyXG5cclxuICAgQGlmICghaGlkZVRhYmxlKSB7XHJcbiAgPGxpYi1nZW5lcmljLXRhYmxlXHJcbiAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICBbYWN0aW9uc109XCJhY3Rpb25zXCJcclxuICAgIFthY3Rpb25zTW9kZV09XCJhY3Rpb25zTW9kZVwiXHJcbiAgICBbZmlyc3RdPVwiZmlyc3RcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgICBbc29ydE9yZGVyXT1cInNvcnRPcmRlclwiXHJcbiAgICBbYWRkQnV0dG9uQ29uZmlnc109XCJhZGRCdXR0b25Db25maWdzXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICAgIFtzaG93Um93U2VsZWN0aW9uQ2hlY2tib3hdPVwic2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94XCJcclxuICAgIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAob25BZGROZXcpPVwiYWN0aW9uLmVtaXQoeyBuYW1lOiAnYWRkJywgcm93OiBudWxsISB9KVwiXHJcbiAgICAocGFnZUNoYW5nZSk9XCJvbkxhenlMb2FkKCRldmVudClcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwicm93U2VsZWN0YWJsZVwiXHJcbiAgICAocm93U2VsZWN0KT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGVkUm93c1wiXHJcbiAgICAjZ2VuZXJpY1RhYmxlXHJcbiAgPjwvbGliLWdlbmVyaWMtdGFibGU+XHJcblxyXG4gIH1cclxuXHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW3NlcnZpY2VdPVwic2VydmljZVwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzXCJcclxuICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICAgIFtpZEZpZWxkXT1cImlkRmllbGRcIlxyXG4gICAgW2RpYWxvZ01heFdpZHRoXT1cImRpYWxvZ01heFdpZHRoXCJcclxuICAgIFtkaXNwbGF5TW9kZV09XCJkaXNwbGF5TW9kZVwiXHJcbiAgICBbbW9kZV09XCJtb2RlXCJcclxuICAgIFtmb3JjZVN0YXRlXT1cImZvcmNlU3RhdGVcIlxyXG4gICAgW2RyYXdlclZpc2libGVdPVwiZHJhd2VyVmlzaWJsZVwiXHJcbiAgICBbZGlhbG9nVmlzaWJsZV09XCJkaWFsb2dWaXNpYmxlXCJcclxuICAgIFtpc1ZpZXdNb2RlXT1cImlzVmlld01vZGVcIlxyXG4gICAgW2lzRWRpdE1vZGVdPVwiaXNFZGl0TW9kZVwiXHJcbiAgICBbdXNlQ29uZmlybU9uU2F2ZV09XCJ1c2VDb25maXJtT25TYXZlXCJcclxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgW2Vycm9yTXNnXT1cImVycm9yTXNnXCJcclxuICAgIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCJcclxuICAgIFtiZWZvcmVTYXZlVHJhbnNmb3JtXT1cImJlZm9yZVNhdmVUcmFuc2Zvcm1cIlxyXG4gICAgKGFjdGlvbik9XCJhY3Rpb24uZW1pdCgkZXZlbnQpXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlLmVtaXQoJGV2ZW50KTtvblN1Ym1pdCgpO1wiXHJcbiAgICAoYWZ0ZXJEZWxldGUpPVwiYWZ0ZXJEZWxldGUuZW1pdCgkZXZlbnQpXCJcclxuICAgIChiZWZvcmVTYXZlKT1cImJlZm9yZVNhdmUuZW1pdCgkZXZlbnQpXCJcclxuICAgIChiZWZvcmVEZWxldGUpPVwiYmVmb3JlRGVsZXRlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoZm9ybUNhbmNlbCk9XCJmb3JtQ2FuY2VsLmVtaXQoKVwiXHJcbiAgICAoZm9ybUluaXQpPVwiZm9ybUluaXQuZW1pdCgkZXZlbnQpXCJcclxuICAgIChkYXRhTG9hZGVkKT1cImRhdGFMb2FkZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoZXJyb3IpPVwiZXJyb3IuZW1pdCgkZXZlbnQpXCJcclxuICAgICh2aXNpYmxlQ2hhbmdlKT1cInZpc2libGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9hcHAtZ2VuZXJpYy1kaWFsb2c+XHJcblxyXG4gICA8YXBwLWRldGFpbC12aWV3XHJcbiAgICBbZGlzcGxheU1vZGVdPVwiZGlzcGxheU1vZGVcIlxyXG4gICAgW21vZGVdPVwibW9kZVwiXHJcbiAgICBbdGl0bGVdPVwiYnJlYWRjcnVtYl8/LlswXT8ubGFiZWwgfHwgJ0RldGFpbCdcIlxyXG4gICAgW3NlcnZpY2VdPVwic2VydmljZVwiXHJcbiAgICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICAgIFtpZEZpZWxkXT1cImlkRmllbGRcIlxyXG4gICAgW2FjdGlvbnNdPVwiYWN0aW9uc1wiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzXCJcclxuICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbdGFic109XCJ0YWJzXCJcclxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgW2JyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYl9cIlxyXG4gICAgW2NyZWF0ZUVkaXRBY3Rpb25zXT1cImNyZWF0ZUVkaXRBY3Rpb25zXCJcclxuICAgICAoYWN0aW9uKT1cImFjdGlvbi5lbWl0KCRldmVudClcIlxyXG4gICAgPlxyXG4gIDwvYXBwLWRldGFpbC12aWV3PlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAM,sBAAsB,CAAC;AACpC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAC/K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE,CAAC;AAC/K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE,CAAC;AAC/K;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AAChI,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAChE,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACCN,MAAM,0BAA0B,CAAC;AACxC;AACA,IAAI,IAAI,GAAG,MAAM;AACjB,IAAI,UAAU;AACd,IAAI,oBAAoB,GAAG,KAAK;AAChC,IAAI,aAAa,GAAG,EAAE;AACtB,IAAI,mBAAmB,GAAG,EAAE;AAC5B,IAAI,iBAAiB,GAAG,EAAE;AAC1B,IAAI,gBAAgB,GAAG,EAAE;AACzB,IAAI,OAAO;AACX,IAAI,WAAW,GAAG,EAAE;AACpB,IAAI,UAAU,GAAG,IAAI;AACrB,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB;AACA,IAAI,gBAAgB,GAAG,IAAI,YAAY,EAAE;AACzC,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,MAAM,GAAG,IAAI,YAAY,EAAE;AAC/B,IAAI,WAAW,GAAG,IAAI,YAAY,EAAE;AACpC,IAAI,MAAM,GAAG,IAAI,YAAY,EAAE;AAC/B,IAAI,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC;AACA,IAAI,UAAU,GAAG,CAAC,KAAK,KAAK,KAAK;AACjC;AACA,IAAI,kBAAkB,CAAC,GAAG,EAAE;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC;AACA,IAAI,oBAAoB,CAAC,GAAG,EAAE;AAC9B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC;AACA,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAC/B;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AACtD,YAAY,OAAO,CAAC;AACpB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;AACvD;AACA,IAAI,SAAS,GAAG,IAAI;AACpB,IAAI,YAAY,GAAG,KAAK;AACxB;AACA,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC1F,YAAY,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI;AAC7D,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1E,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AACtC;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AACzE,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACvE;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACvE;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AACzE,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnE,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACvE;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC;AAC/B;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY;AAC1D;AACA;AACA,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,QAAQ,CAAC,eAAe,CAAC,GAAG,KAAK,KAAK;AACrD,YAAY,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK;AACvC;AACA,YAAY,KAAK,CAAC;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,GAAG,EAAE;AACjC,QAAQ,IAAI;AACZ,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE;AAC5B;AACA,gBAAgB,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC;AACA,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjC,oBAAoB,IAAI,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;AACjD,oBAAoB,GAAG,EAAE,IAAI;AAC7B,iBAAiB,CAAC;AAClB;AACA;AACA,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC;AACrD;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACpL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,inRAAinR,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACxjW;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;AACrF,wBAAwB,aAAa;AACrC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;AACpC,wBAAwB,aAAa;AACrC,wBAAwB,aAAa;AACrC,wBAAwB,WAAW;AACnC,wBAAwB,mBAAmB;AAC3C,wBAAwB,aAAa;AACrC,qBAAqB,EAAE,QAAQ,EAAE,inRAAinR,EAAE;AACppR,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;AC9LnB;AACA;AAqBA;AACA;AACA;AACA;AACA;AACO,MAAM,yBAAyB,CAAC;AACvC,IAAI,YAAY;AAChB,IAAI,MAAM;AACV,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE;AAClD,IAAI,IAAI,GAAG,EAAE;AACb,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,IAAI,cAAc,GAAG,OAAO,CAAC;AAC7B,IAAI,UAAU,GAAG,KAAK;AACtB,IAAI,WAAW,GAAG,QAAQ;AAC1B,IAAI,gBAAgB,GAAG,KAAK;AAC5B,IAAI,UAAU,GAAG,KAAK;AACtB,IAAI,aAAa,GAAG,KAAK;AACzB,IAAI,aAAa,GAAG,KAAK;AACzB,IAAI,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC;AACnC,IAAI,KAAK;AACT,IAAI,MAAM,GAAG,EAAE;AACf,IAAI,OAAO,GAAG,KAAK;AACnB,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAI,YAAY,GAAG,EAAE;AACrB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,GAAG,EAAE;AAChB;AACA,IAAI,WAAW,GAAG,SAAS;AAC3B,IAAI,MAAM,GAAG,IAAI,YAAY,EAAE;AAC/B,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,YAAY,GAAG,IAAI,YAAY,EAAE;AACrC,IAAI,mBAAmB,CAAC;AACxB,IAAI,SAAS,GAAG,IAAI,YAAY,EAAE;AAClC,IAAI,WAAW,GAAG,IAAI,YAAY,EAAE;AACpC,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,YAAY,GAAG,IAAI,YAAY,EAAE;AACrC,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,QAAQ,GAAG,IAAI,YAAY,EAAE;AACjC,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,eAAe,GAAG,IAAI,YAAY,EAAE;AACxC,IAAI,KAAK,GAAG,IAAI,YAAY,EAAE;AAC9B;AACA;AACA,IAAI,OAAO;AACX,IAAI,WAAW,GAAG,EAAE;AACpB,IAAI,MAAM,GAAG,IAAI,YAAY,EAAE;AAC/B;AACA,IAAI,UAAU,GAAG,IAAI;AACrB;AACA,IAAI,KAAK,GAAG,CAAC;AACb,IAAI,IAAI,GAAG,EAAE;AACb,IAAI,YAAY,GAAG,CAAC;AACpB,IAAI,UAAU,GAAG,IAAI,YAAY,EAAE;AACnC,IAAI,QAAQ,GAAG,IAAI,YAAY,EAAE;AACjC,IAAI,aAAa,GAAG,IAAI,YAAY,EAAE;AACtC;AACA;AACA;AACA,IAAI,aAAa,GAAG,KAAK;AACzB;AACA,IAAI,SAAS,GAAG,IAAI,YAAY,EAAE;AAClC,IAAI,SAAS,GAAG,IAAI;AACpB;AACA,IAAI,SAAS;AACb,IAAI,SAAS,GAAG,CAAC;AACjB,IAAI,YAAY,GAAG,OAAO;AAC1B,IAAI,SAAS,GAAG,IAAI;AACpB,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAI,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,GAAG,IAAI;AAClB,IAAI,wBAAwB,GAAG,KAAK;AACpC,IAAI,aAAa,GAAG,IAAI;AACxB,IAAI,iBAAiB;AACrB,IAAI,gBAAgB,GAAG;AACvB,QAAQ;AACR,YAAY,IAAI,EAAE,YAAY;AAC9B,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,QAAQ,EAAE,SAAS;AAC/B,YAAY,IAAI,EAAE,OAAO;AACzB,YAAY,UAAU,EAAE,KAAK;AAC7B,YAAY,OAAO,EAAE,IAAI,CAAC,aAAa;AACvC,YAAY,UAAU,EAAE,IAAI,CAAC,iBAAiB;AAC9C,SAAS;AACT,KAAK;AACL,IAAI,iBAAiB,GAAG;AACxB,QAAQ;AACR,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,KAAK,EAAE,MAAM;AACzB,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,QAAQ,EAAE,SAAS;AAC/B,YAAY,IAAI,EAAE,OAAO;AACzB,YAAY,UAAU,EAAE,MAAM;AAC9B,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,YAAY,EAAE;AAC1B,gBAAgB;AAChB,oBAAoB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;AACjE,oBAAoB,IAAI,EAAE,YAAY;AACtC,oBAAoB,UAAU,EAAE;AAChC;AACA;AACA,SAAS;AACT,QAAQ;AACR,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,KAAK,EAAE,QAAQ;AAC3B,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,IAAI,EAAE,OAAO;AACzB,YAAY,UAAU,EAAE,QAAQ;AAChC,YAAY,IAAI,EAAE,QAAQ;AAC1B,SAAS;AACT,KAAK;AACL,IAAI,cAAc,GAAG,IAAI;AACzB,IAAI,IAAI,GAAG,EAAE;AACb,IAAI,iBAAiB,GAAG,EAAE;AAC1B,IAAI,mBAAmB,GAAG,EAAE;AAC5B,IAAI,aAAa,GAAG,EAAE;AACtB,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,sBAAsB,GAAG;AACjC,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AAC5C;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,aAAa;AACjC;AACA,IAAI,UAAU;AACd,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK;AAC1C,YAAY,GAAG,CAAC;AAChB,YAAY,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACvD,SAAS,CAAC,CAAC;AACX;AACA,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,IAAI;AACZ,YAAY,OAAO,QAAQ,EAAE,eAAe,EAAE,GAAG,KAAK,KAAK;AAC3D;AACA,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,MAAM;AACjB;AACA,IAAI,UAAU,GAAG,IAAI;AACrB;AACA,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,KAAK;AAChI;AACA;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU;AAC7D;AACA,IAAI,UAAU,GAAG,2GAA2G;AAC5H,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAClC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,SAAS;AACb,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE;AAChD,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC/C;AACA,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC/C;AACA,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACnC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;AAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC1H;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI;AACpD,gBAAgB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,gBAAgB,IAAI,EAAE,EAAE;AACxB,oBAAoB,IAAI,CAAC,SAAS,GAAG,EAAE;AACvC,oBAAoB,IAAI,CAAC,IAAI,GAAG,QAAQ;AACxC,oBAAoB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACvC;AACA,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,SAAS,GAAG,SAAS;AAC9C;AACA,aAAa,CAAC;AACd;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,KAAK,EAAE;AAClC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAC9B,QAAQ,MAAM,aAAa,GAAG;AAC9B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B;AACA,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;AACjC,YAAY,YAAY,EAAE,IAAI;AAC9B,SAAS;AACT,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACtC;AACA,IAAI,UAAU,CAAC,EAAE,EAAE;AACnB,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;AAChF,YAAY,IAAI,EAAE,GAAG,IAAI;AACzB,gBAAgB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxE,gBAAgB,IAAI,CAAC,KAAK,GAAG,KAAK;AAClC;AACA,SAAS,CAAC;AACV;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AAC1B,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC;AACA;AACA;AACA,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;AAC1C,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;AAC/C,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AAC5C,QAAQ,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK;AACrD,cAAc,KAAK,CAAC;AACpB,cAAc,IAAI,CAAC,SAAS;AAC5B,QAAQ,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACzD,QAAQ,MAAM,OAAO,GAAG,EAAE;AAC1B,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;AAC3B,YAAY,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;AACrE,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxC,gBAAgB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACnD,oBAAoB,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;AAC1C;AACA,aAAa,CAAC;AACd;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,MAAM,GAAG,GAAG,SAAS,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM;AACpD,QAAQ,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;AAClE,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5D;AACA;AACA;AACA,IAAI,IAAI,SAAS,GAAG;AACpB;AACA,QAAQ,OAAO,IAAI,CAAC,IAAI;AACxB;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnC;AACA;AACA,IAAI,UAAU,CAAC,GAAG,EAAE;AACpB,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE;AACtC,YAAY,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAChC;AACA;AACA,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE;AAC5B,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,kBAAkB,CAAC,GAAG,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB;AACtC,YAAY;AACZ,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAClD,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC/B,YAAY,IAAI,EAAE,GAAG,CAAC,UAAU,IAAI,cAAc;AAClD,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC;AACV;AACA,IAAI,oBAAoB,CAAC,GAAG,EAAE;AAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,sBAAsB;AACxC,YAAY;AACZ,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,YAAY,IAAI,EAAE,GAAG,CAAC,UAAU,IAAI,YAAY;AAChD,YAAY,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1C,SAAS,CAAC;AACV;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACnL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,s/GAAs/G,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;AACzsP;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACnI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;AACpF,wBAAwB,YAAY;AACpC,wBAAwB,WAAW;AACnC,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;AACpC,wBAAwB,aAAa;AACrC,wBAAwB,eAAe;AACvC,wBAAwB,aAAa;AACrC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB,mBAAmB;AAC3C,wBAAwB,WAAW;AACnC,wBAAwB,aAAa;AACrC,wBAAwB,YAAY;AACpC,wBAAwB,sBAAsB;AAC9C,wBAAwB,0BAA0B;AAClD,wBAAwB;AACxB,qBAAqB,EAAE,IAAI,EAAE;AAC7B,wBAAwB,KAAK,EAAE;AAC/B,qBAAqB,EAAE,QAAQ,EAAE,s/GAAs/G,EAAE;AACzhH,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,CAAC;AAC7C,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,cAAc;AACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,QAAQ;AAC/B,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACndnB;AACA;AACA;;;;"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-crud-table.mjs","sources":["../tmp-esm2022/generic-crud-table/lib/generic-crud-table-module.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-header.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-table.js","../tmp-esm2022/generic-crud-table/elite.framework-ng.ui.core-generic-crud-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GenericButtonModule } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nexport class GenericCrudTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, GenericButtonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUtqRixNQUFNLE9BQU8sc0JBQXNCO3VHQUF0QixzQkFBc0I7d0dBQXRCLHNCQUFzQixZQUZ2QixZQUFZLEVBQUMsbUJBQW1CO3dHQUUvQixzQkFBc0IsWUFGdkIsWUFBWSxFQUFDLG1CQUFtQjs7MkZBRS9CLHNCQUFzQjtrQkFIbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUMsbUJBQW1CLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxHZW5lcmljQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0NydWRUYWJsZU1vZHVsZSB7fVxuIl19","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { DividerModule } from 'primeng/divider';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { Menu } from 'primeng/menu';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { GenericSearchAdvanced } from '@elite.framework/ng.ui.core/generic-search-advanced';\nimport { GenericReportComponent } from '@elite.framework/ng.ui.core/generic-report';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/button\";\nimport * as i2 from \"primeng/divider\";\nimport * as i3 from \"primeng/tooltip\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class GenericCrudHeaderComponent {\n translate = inject(TranslateService);\n dialogService = inject(DialogService);\n // 🟢 Inputs\n mode = 'full';\n breadcrumb;\n isSingleItemSelected = false;\n selectedItems = [];\n singleActionButtons = [];\n bulkActionButtons = [];\n addButtonConfigs = [];\n filters;\n filterModel = {};\n showSearch = true;\n first = 0; // Add input for current 'first' index\n rows = 10; // Add input for current 'rows' per page\n totalRecords = 0; // Add input for total records\n apiName = '';\n actions = [\n {\n label: this.translate.instant('REPORT'),\n icon: 'pi pi-file-export',\n command: (e) => {\n this.openReportDialog();\n }\n }\n ];\n // 🟢 Outputs\n singleItemAction = new EventEmitter();\n bulkAction = new EventEmitter();\n search = new EventEmitter();\n resetSearch = new EventEmitter();\n action = new EventEmitter();\n paginateChange = new EventEmitter(); // NEW OUTPUT\n // 🟢 Helpers\n trackByIdx = (index) => index;\n // 🟢 Actions\n onSingleItemAction(btn) {\n this.singleItemAction.emit(btn);\n }\n onInternalBulkAction(btn) {\n this.bulkAction.emit(btn);\n }\n paginationChange(value) {\n this.rows = value.top;\n }\n applySearch(value) {\n this.search.emit(value);\n }\n reset() {\n this.resetSearch.emit();\n }\n // Go to previous page\n // 🟢 Actions (Keep or adapt your existing pagination logic)\n totalPages() {\n if (this.totalRecords === 0 || this.rows === 0)\n return 0;\n return Math.ceil(this.totalRecords / this.rows);\n }\n pageInput = null;\n showPageMenu = false;\n // Get current page number (1-based)\n get currentPage() {\n return Math.floor(this.first / this.rows) + 1;\n }\n // Go to specific page from menu\n goToPageMenu() {\n if (this.pageInput && this.pageInput >= 1 && this.pageInput <= this.totalPages()) {\n const newFirst = (this.pageInput - 1) * this.rows;\n this.paginateChange.emit({ first: newFirst, rows: this.rows });\n this.pageInput = null;\n this.showPageMenu = false; // Close menu after navigation\n }\n }\n // Go to specific page (original method)\n goToPage() {\n this.goToPageMenu(); // Reuse the same logic\n }\n // Go to first page\n goFirst() {\n this.paginateChange.emit({ first: 0, rows: this.rows }); // EMIT EVENT\n }\n // Go to last page\n goLast() {\n const maxFirst = Math.max(0, (this.totalPages() - 1) * this.rows);\n this.paginateChange.emit({ first: maxFirst, rows: this.rows }); // EMIT EVENT\n }\n // Go to previous page\n goPrev() {\n const newFirst = Math.max(this.first - this.rows, 0);\n this.paginateChange.emit({ first: newFirst, rows: this.rows }); // EMIT EVENT\n }\n // Go to next page\n goNext() {\n const maxFirst = Math.max(0, (this.totalPages() - 1) * this.rows);\n const newFirst = Math.min(this.first + this.rows, maxFirst);\n this.paginateChange.emit({ first: newFirst, rows: this.rows }); // EMIT EVENT\n }\n // Check first/last page\n isFirstPage() {\n return this.first === 0;\n }\n isLastPage() {\n return this.first + this.rows >= this.totalRecords;\n }\n // Detect RTL direction\n get isRTL() {\n return document.documentElement.dir === 'rtl' ||\n document.body.dir === 'rtl' ||\n // this.translateService?.currentLang === 'ar' || // if using translation\n false; // default to LTR\n }\n /**\n * Handles button click in a unified way.\n * - If btn.action is defined, execute it.\n * - Otherwise, emit event with actionName or default 'add'.\n */\n async handleButtonClick(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n this.action.emit({\n name: btn.actionName ?? 'add',\n row: null, // provide row if available\n });\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n openReportDialog() {\n const ref = this.dialogService.open(GenericReportComponent, {\n header: this.translate.instant('REPORT'),\n width: '90%',\n height: 'auto',\n modal: true,\n data: {\n // columns: {\n // id: 'ID',\n // name: 'Name',\n // email: 'Email',\n // amount: 'Amount',\n // date: 'Date',\n // status: 'Status'\n // },\n apiName: this.apiName,\n filterFields: this.filters,\n filterModel: { /* status: 'Active' */},\n defaultFileName: 'users_export'\n }\n });\n ref.onClose.subscribe((exportConfig) => {\n if (exportConfig) {\n console.log('Export configuration:', exportConfig);\n // Handle the export - call your API service here\n this.handleExport(exportConfig);\n }\n });\n }\n handleExport(config) {\n // Your export logic here\n // if (config.exportType === 'EXCEL') {\n // this.exportToExcel(config);\n // } else if (config.exportType === 'PDF') {\n // this.exportToPdf(config);\n // }\n // etc.\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudHeaderComponent, isStandalone: true, selector: \"app-generic-crud-header\", inputs: { mode: \"mode\", breadcrumb: \"breadcrumb\", isSingleItemSelected: \"isSingleItemSelected\", selectedItems: \"selectedItems\", singleActionButtons: \"singleActionButtons\", bulkActionButtons: \"bulkActionButtons\", addButtonConfigs: \"addButtonConfigs\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", apiName: \"apiName\", actions: \"actions\" }, outputs: { singleItemAction: \"singleItemAction\", bulkAction: \"bulkAction\", search: \"search\", resetSearch: \"resetSearch\", action: \"action\", paginateChange: \"paginateChange\" }, providers: [DialogService], ngImport: i0, template: \"@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <app-breadcrumb\\r\\n class=\\\"xs:block hidden\\\"\\r\\n [breadcrumb]=\\\"breadcrumb\\\"\\r\\n ></app-breadcrumb>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n @if (mode === 'full') {\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 \\u0627\\u0644\\u0645\\u0641\\u0631\\u062F\\u0629 -->\\r\\n @if (isSingleItemSelected) {\\r\\n @for (btn of singleActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0645\\u062A\\u0639\\u062F\\u062F\\u0629 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 -->\\r\\n @if (selectedItems.length > 0) {\\r\\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0625\\u0636\\u0627\\u0641\\u0629 -->\\r\\n @for (btn of addButtonConfigs; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleButtonClick(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n <!-- \\u0627\\u0644\\u0628\\u062D\\u062B -->\\r\\n @if (showSearch && filters) {\\r\\n <lib-generic-search-advanced\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n [enableQueryBuilder]=\\\"true\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (paginationChange)=\\\"paginationChange($event)\\\"\\r\\n >\\r\\n</lib-generic-search-advanced>\\r\\n } @else {\\r\\n <div></div>\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u062F\\u0648\\u0627\\u062A \\u0625\\u0636\\u0627\\u0641\\u064A\\u0629 -->\\r\\n <div class=\\\"flex items-center gap-3 rtl:space-x-reverse\\\">\\r\\n <!-- Refresh Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-refresh\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (onClick)=\\\"reset()\\\"\\r\\n />\\r\\n\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0 hidden xs:block\\\" />\\r\\n\\r\\n\\r\\n <p-button (click)=\\\"menu.toggle($event)\\\" class=\\\"xs:block\\\" severity=\\\"secondary\\\" outlined icon=\\\"pi pi-ellipsis-v\\\"/>\\r\\n <p-menu #menu [model]=\\\"actions\\\" [popup]=\\\"true\\\" />\\r\\n <!-- Pagination Controls -->\\r\\n <div class=\\\"flex items-center gap-1 rtl:space-x-reverse\\\">\\r\\n <!-- First Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goFirst()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Previous Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goPrev()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n\\r\\n <!-- Current Page Display with Dropdown -->\\r\\n <div class=\\\"relative\\\">\\r\\n\\r\\n <p-button\\r\\n [label]=\\\"currentPage + ' / ' + totalPages()\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"showPageMenu = !showPageMenu\\\"\\r\\n pTooltip=\\\"{{totalRecords}}\\\"\\r\\n tooltipPosition=\\\"top\\\"\\r\\n />\\r\\n\\r\\n\\r\\n </div>\\r\\n <!-- Next Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goNext()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Last Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goLast()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\", dependencies: [{ kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i1.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"component\", type: i2.Divider, selector: \"p-divider\", inputs: [\"styleClass\", \"layout\", \"type\", \"align\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i3.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"component\", type: Menu, selector: \"p-menu\", inputs: [\"model\", \"popup\", \"style\", \"styleClass\", \"autoZIndex\", \"baseZIndex\", \"showTransitionOptions\", \"hideTransitionOptions\", \"ariaLabel\", \"ariaLabelledBy\", \"id\", \"tabindex\", \"appendTo\"], outputs: [\"onShow\", \"onHide\", \"onBlur\", \"onFocus\"] }, { kind: \"component\", type: GenericSearchAdvanced, selector: \"lib-generic-search-advanced\", inputs: [\"model\", \"fields\", \"enableQueryBuilder\", \"odataConfig\"], outputs: [\"search\", \"paginationChange\", \"odataSearch\"] }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-header', standalone: true, imports: [\n GenericButton,\n TranslateModule,\n BreadcrumbComponent,\n CommonModule,\n ButtonModule,\n DividerModule,\n FormsModule,\n ReactiveFormsModule,\n TooltipModule,\n Menu,\n GenericSearchAdvanced\n ], providers: [DialogService], template: \"@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <app-breadcrumb\\r\\n class=\\\"xs:block hidden\\\"\\r\\n [breadcrumb]=\\\"breadcrumb\\\"\\r\\n ></app-breadcrumb>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n @if (mode === 'full') {\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 \\u0627\\u0644\\u0645\\u0641\\u0631\\u062F\\u0629 -->\\r\\n @if (isSingleItemSelected) {\\r\\n @for (btn of singleActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0645\\u062A\\u0639\\u062F\\u062F\\u0629 \\u0627\\u0644\\u0639\\u0646\\u0627\\u0635\\u0631 -->\\r\\n @if (selectedItems.length > 0) {\\r\\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u0632\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0625\\u0636\\u0627\\u0641\\u0629 -->\\r\\n @for (btn of addButtonConfigs; track trackByIdx($index)) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleButtonClick(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\\r\\n@if (mode !== 'form-only' && mode !== 'detail') {\\r\\n<div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n <!-- \\u0627\\u0644\\u0628\\u062D\\u062B -->\\r\\n @if (showSearch && filters) {\\r\\n <lib-generic-search-advanced\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n [enableQueryBuilder]=\\\"true\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (paginationChange)=\\\"paginationChange($event)\\\"\\r\\n >\\r\\n</lib-generic-search-advanced>\\r\\n } @else {\\r\\n <div></div>\\r\\n }\\r\\n\\r\\n <!-- \\u0623\\u062F\\u0648\\u0627\\u062A \\u0625\\u0636\\u0627\\u0641\\u064A\\u0629 -->\\r\\n <div class=\\\"flex items-center gap-3 rtl:space-x-reverse\\\">\\r\\n <!-- Refresh Button -->\\r\\n <p-button\\r\\n icon=\\\"pi pi-refresh\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (onClick)=\\\"reset()\\\"\\r\\n />\\r\\n\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0 hidden xs:block\\\" />\\r\\n\\r\\n\\r\\n <p-button (click)=\\\"menu.toggle($event)\\\" class=\\\"xs:block\\\" severity=\\\"secondary\\\" outlined icon=\\\"pi pi-ellipsis-v\\\"/>\\r\\n <p-menu #menu [model]=\\\"actions\\\" [popup]=\\\"true\\\" />\\r\\n <!-- Pagination Controls -->\\r\\n <div class=\\\"flex items-center gap-1 rtl:space-x-reverse\\\">\\r\\n <!-- First Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goFirst()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Previous Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goPrev()\\\"\\r\\n [disabled]=\\\"isFirstPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n\\r\\n <!-- Current Page Display with Dropdown -->\\r\\n <div class=\\\"relative\\\">\\r\\n\\r\\n <p-button\\r\\n [label]=\\\"currentPage + ' / ' + totalPages()\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"showPageMenu = !showPageMenu\\\"\\r\\n pTooltip=\\\"{{totalRecords}}\\\"\\r\\n tooltipPosition=\\\"top\\\"\\r\\n />\\r\\n\\r\\n\\r\\n </div>\\r\\n <!-- Next Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"xs:block\\\"\\r\\n (click)=\\\"goNext()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n\\r\\n <!-- Last Page Button -->\\r\\n <p-button\\r\\n [icon]=\\\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\\\"\\r\\n outlined\\r\\n severity=\\\"secondary\\\"\\r\\n class=\\\"hidden xs:block\\\"\\r\\n (click)=\\\"goLast()\\\"\\r\\n [disabled]=\\\"isLastPage()\\\"\\r\\n ></p-button>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n}\\r\\n\" }]\n }], propDecorators: { mode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], isSingleItemSelected: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], apiName: [{\n type: Input\n }], actions: [{\n type: Input\n }], singleItemAction: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], search: [{\n type: Output\n }], resetSearch: [{\n type: Output\n }], action: [{\n type: Output\n }], paginateChange: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtaGVhZGVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztB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QUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0UsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLE9BQU87c0JBQWYsS0FBSztnQkFZRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0UsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VhcmNoQWR2YW5jZWQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQnO1xyXG5pbXBvcnQgeyBHZW5lcmljUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtY3J1ZC1oZWFkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgR2VuZXJpY0J1dHRvbixcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEJyZWFkY3J1bWJDb21wb25lbnQsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBEaXZpZGVyTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnUsXHJcbiAgICBHZW5lcmljU2VhcmNoQWR2YW5jZWRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWNydWQtaGVhZGVyLmh0bWwnLFxyXG4gICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljQ3J1ZEhlYWRlckNvbXBvbmVudCB7XHJcblxyXG4gIHRyYW5zbGF0ZSAgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgZGlhbG9nU2VydmljZSAgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgLy8g8J+foiBJbnB1dHNcclxuICBASW5wdXQoKSBtb2RlOiAnZnVsbCcgfCAnZm9ybS1vbmx5JyB8ICd0YWJsZS1vbmx5JyB8ICdkZXRhaWwnID0gJ2Z1bGwnO1xyXG4gIEBJbnB1dCgpIGJyZWFkY3J1bWI6IE1lbnVJdGVtW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgaXNTaW5nbGVJdGVtU2VsZWN0ZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNpbmdsZUFjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYnVsa0FjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYWRkQnV0dG9uQ29uZmlnczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgZmlsdGVyTW9kZWw6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSB0cnVlO1xyXG4gICBASW5wdXQoKSBmaXJzdCA9IDA7IC8vIEFkZCBpbnB1dCBmb3IgY3VycmVudCAnZmlyc3QnIGluZGV4XHJcbiAgQElucHV0KCkgcm93cyA9IDEwOyAvLyBBZGQgaW5wdXQgZm9yIGN1cnJlbnQgJ3Jvd3MnIHBlciBwYWdlXHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDsgLy8gQWRkIGlucHV0IGZvciB0b3RhbCByZWNvcmRzXHJcbiAgQElucHV0KCkgYXBpTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgIEBJbnB1dCgpIGFjdGlvbnM6TWVudUl0ZW1bXSA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnUkVQT1JUJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1maWxlLWV4cG9ydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6KGU6YW55KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydERpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblxyXG5cclxuICAvLyDwn5+iIE91dHB1dHNcclxuICBAT3V0cHV0KCkgc2luZ2xlSXRlbUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ29uZmlnPigpO1xyXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25Db25maWc+KCk7XHJcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByZXNldFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgcm93OiBhbnkgfT4oKTtcclxuIEBPdXRwdXQoKSBwYWdpbmF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaXJzdDogbnVtYmVyOyByb3dzOiBudW1iZXIgfT4oKTsgLy8gTkVXIE9VVFBVVFxyXG5cclxuXHJcblxyXG5cclxuICAvLyDwn5+iIEhlbHBlcnNcclxuICB0cmFja0J5SWR4ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xyXG5cclxuICAvLyDwn5+iIEFjdGlvbnNcclxuICBvblNpbmdsZUl0ZW1BY3Rpb24oYnRuOiBCdXR0b25Db25maWcpIHtcclxuICAgIHRoaXMuc2luZ2xlSXRlbUFjdGlvbi5lbWl0KGJ0bik7XHJcbiAgfVxyXG4gIG9uSW50ZXJuYWxCdWxrQWN0aW9uKGJ0bjogQnV0dG9uQ29uZmlnKSB7XHJcbiAgICB0aGlzLmJ1bGtBY3Rpb24uZW1pdChidG4pO1xyXG4gIH1cclxucGFnaW5hdGlvbkNoYW5nZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnJvd3MgPSB2YWx1ZS50b3A7XHJcbiAgfVxyXG4gIGFwcGx5U2VhcmNoKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzZXRTZWFyY2guZW1pdCgpO1xyXG4gIH1cclxuXHJcblxyXG4gICAgLy8gR28gdG8gcHJldmlvdXMgcGFnZVxyXG4gIC8vIPCfn6IgQWN0aW9ucyAoS2VlcCBvciBhZGFwdCB5b3VyIGV4aXN0aW5nIHBhZ2luYXRpb24gbG9naWMpXHJcbiAgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMudG90YWxSZWNvcmRzID09PSAwIHx8IHRoaXMucm93cyA9PT0gMCkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gdGhpcy5yb3dzKTtcclxuICB9XHJcbiBwYWdlSW5wdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHNob3dQYWdlTWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBHZXQgY3VycmVudCBwYWdlIG51bWJlciAoMS1iYXNlZClcclxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZmlyc3QgLyB0aGlzLnJvd3MpICsgMTtcclxuICB9XHJcblxyXG4gIC8vIEdvIHRvIHNwZWNpZmljIHBhZ2UgZnJvbSBtZW51XHJcbiAgZ29Ub1BhZ2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMucGFnZUlucHV0ICYmIHRoaXMucGFnZUlucHV0ID49IDEgJiYgdGhpcy5wYWdlSW5wdXQgPD0gdGhpcy50b3RhbFBhZ2VzKCkpIHtcclxuICAgICAgY29uc3QgbmV3Rmlyc3QgPSAodGhpcy5wYWdlSW5wdXQgLSAxKSAqIHRoaXMucm93cztcclxuICAgICAgdGhpcy5wYWdpbmF0ZUNoYW5nZS5lbWl0KHsgZmlyc3Q6IG5ld0ZpcnN0LCByb3dzOiB0aGlzLnJvd3MgfSk7XHJcbiAgICAgIHRoaXMucGFnZUlucHV0ID0gbnVsbDtcclxuICAgICAgdGhpcy5zaG93UGFnZU1lbnUgPSBmYWxzZTsgLy8gQ2xvc2UgbWVudSBhZnRlciBuYXZpZ2F0aW9uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBHbyB0byBzcGVjaWZpYyBwYWdlIChvcmlnaW5hbCBtZXRob2QpXHJcbiAgZ29Ub1BhZ2UoKSB7XHJcbiAgICB0aGlzLmdvVG9QYWdlTWVudSgpOyAvLyBSZXVzZSB0aGUgc2FtZSBsb2dpY1xyXG4gIH1cclxuXHJcbiAgLy8gR28gdG8gZmlyc3QgcGFnZVxyXG5nb0ZpcnN0KCkge1xyXG4gIHRoaXMucGFnaW5hdGVDaGFuZ2UuZW1pdCh7IGZpcnN0OiAwLCByb3dzOiB0aGlzLnJvd3MgfSk7IC8vIEVNSVQgRVZFTlRcclxufVxyXG5cclxuLy8gR28gdG8gbGFzdCBwYWdlXHJcbmdvTGFzdCgpIHtcclxuICBjb25zdCBtYXhGaXJzdCA9IE1hdGgubWF4KDAsICh0aGlzLnRvdGFsUGFnZXMoKSAtIDEpICogdGhpcy5yb3dzKTtcclxuICB0aGlzLnBhZ2luYXRlQ2hhbmdlLmVtaXQoeyBmaXJzdDogbWF4Rmlyc3QsIHJvd3M6IHRoaXMucm93cyB9KTsgLy8gRU1JVCBFVkVOVFxyXG59XHJcblxyXG4gIC8vIEdvIHRvIHByZXZpb3VzIHBhZ2VcclxuICBnb1ByZXYoKSB7XHJcbiAgICBjb25zdCBuZXdGaXJzdCA9IE1hdGgubWF4KHRoaXMuZmlyc3QgLSB0aGlzLnJvd3MsIDApO1xyXG4gICAgdGhpcy5wYWdpbmF0ZUNoYW5nZS5lbWl0KHsgZmlyc3Q6IG5ld0ZpcnN0LCByb3dzOiB0aGlzLnJvd3MgfSk7IC8vIEVNSVQgRVZFTlRcclxuICB9XHJcblxyXG4gIC8vIEdvIHRvIG5leHQgcGFnZVxyXG4gIGdvTmV4dCgpIHtcclxuICAgIGNvbnN0IG1heEZpcnN0ID0gTWF0aC5tYXgoMCwgKHRoaXMudG90YWxQYWdlcygpIC0gMSkgKiB0aGlzLnJvd3MpO1xyXG4gICAgY29uc3QgbmV3Rmlyc3QgPSBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5yb3dzLCBtYXhGaXJzdCk7XHJcbiAgICB0aGlzLnBhZ2luYXRlQ2hhbmdlLmVtaXQoeyBmaXJzdDogbmV3Rmlyc3QsIHJvd3M6IHRoaXMucm93cyB9KTsgLy8gRU1JVCBFVkVOVFxyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgZmlyc3QvbGFzdCBwYWdlXHJcbiAgaXNGaXJzdFBhZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdCA9PT0gMDtcclxuICB9XHJcblxyXG4gIGlzTGFzdFBhZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdCArIHRoaXMucm93cyA+PSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICB9XHJcblxyXG5cclxuICAvLyBEZXRlY3QgUlRMIGRpcmVjdGlvblxyXG4gIGdldCBpc1JUTCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJyB8fFxyXG4gICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlyID09PSAncnRsJyB8fFxyXG4gICAgICAgICAgLy8gIHRoaXMudHJhbnNsYXRlU2VydmljZT8uY3VycmVudExhbmcgPT09ICdhcicgfHwgLy8gaWYgdXNpbmcgdHJhbnNsYXRpb25cclxuICAgICAgICAgICBmYWxzZTsgLy8gZGVmYXVsdCB0byBMVFJcclxuICB9XHJcbiAgIC8qKlxyXG4gICAqIEhhbmRsZXMgYnV0dG9uIGNsaWNrIGluIGEgdW5pZmllZCB3YXkuXHJcbiAgICogLSBJZiBidG4uYWN0aW9uIGlzIGRlZmluZWQsIGV4ZWN1dGUgaXQuXHJcbiAgICogLSBPdGhlcndpc2UsIGVtaXQgZXZlbnQgd2l0aCBhY3Rpb25OYW1lIG9yIGRlZmF1bHQgJ2FkZCcuXHJcbiAgICovXHJcbiAgYXN5bmMgaGFuZGxlQnV0dG9uQ2xpY2soYnRuOiBCdXR0b25Db25maWcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChidG4uYWN0aW9uKSB7XHJcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgcHJvdmlkZWQgYWN0aW9uXHJcbiAgICAgICAgYXdhaXQgYnRuLmFjdGlvbihudWxsKTsgLy8gWW91IGNhbiBwYXNzIHJvdyBvciBjb250ZXh0IGhlcmVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBGYWxsYmFjayB0byBlbWl0dGluZyBldmVudFxyXG4gICAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgICAgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ2FkZCcsXHJcbiAgICAgICAgICByb3c6IG51bGwhLCAvLyBwcm92aWRlIHJvdyBpZiBhdmFpbGFibGVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0J1dHRvbiBhY3Rpb24gZXJyb3InLCBlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblJlcG9ydERpYWxvZygpIHtcclxuICAgICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oR2VuZXJpY1JlcG9ydENvbXBvbmVudCwge1xyXG4gICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnUkVQT1JUJyksXHJcbiAgICAgICAgd2lkdGg6ICc5MCUnLFxyXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxyXG4gICAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIC8vIGNvbHVtbnM6IHtcclxuICAgICAgICAgIC8vICAgaWQ6ICdJRCcsXHJcbiAgICAgICAgICAvLyAgIG5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIC8vICAgZW1haWw6ICdFbWFpbCcsXHJcbiAgICAgICAgICAvLyAgIGFtb3VudDogJ0Ftb3VudCcsXHJcbiAgICAgICAgICAvLyAgIGRhdGU6ICdEYXRlJyxcclxuICAgICAgICAgIC8vICAgc3RhdHVzOiAnU3RhdHVzJ1xyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICAgIGFwaU5hbWU6dGhpcy5hcGlOYW1lLFxyXG4gICAgICAgICAgZmlsdGVyRmllbGRzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgICBmaWx0ZXJNb2RlbDogeyAvKiBzdGF0dXM6ICdBY3RpdmUnICAqL30sXHJcbiAgICAgICAgICBkZWZhdWx0RmlsZU5hbWU6ICd1c2Vyc19leHBvcnQnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgoZXhwb3J0Q29uZmlnOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZXhwb3J0Q29uZmlnKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXhwb3J0IGNvbmZpZ3VyYXRpb246JywgZXhwb3J0Q29uZmlnKTtcclxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXhwb3J0IC0gY2FsbCB5b3VyIEFQSSBzZXJ2aWNlIGhlcmVcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXhwb3J0KGV4cG9ydENvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUV4cG9ydChjb25maWc6IGFueSkge1xyXG4gICAgICAvLyBZb3VyIGV4cG9ydCBsb2dpYyBoZXJlXHJcbiAgICAgIC8vIGlmIChjb25maWcuZXhwb3J0VHlwZSA9PT0gJ0VYQ0VMJykge1xyXG4gICAgICAvLyAgIHRoaXMuZXhwb3J0VG9FeGNlbChjb25maWcpO1xyXG4gICAgICAvLyB9IGVsc2UgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSAnUERGJykge1xyXG4gICAgICAvLyAgIHRoaXMuZXhwb3J0VG9QZGYoY29uZmlnKTtcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBldGMuXHJcbiAgICB9XHJcblxyXG59XHJcbiIsIkBpZiAobW9kZSAhPT0gJ2Zvcm0tb25seScgJiYgbW9kZSAhPT0gJ2RldGFpbCcpIHtcclxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgPGRpdj5cclxuICAgIDxhcHAtYnJlYWRjcnVtYlxyXG4gICAgICBjbGFzcz1cInhzOmJsb2NrIGhpZGRlblwiXHJcbiAgICAgIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIlxyXG4gICAgPjwvYXBwLWJyZWFkY3J1bWI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgIEBpZiAobW9kZSA9PT0gJ2Z1bGwnKSB7XHJcbiAgICAgIDwhLS0g2KPYstix2KfYsSDYp9mE2LnZhtin2LXYsSDYp9mE2YXZgdix2K/YqSAtLT5cclxuICAgICAgQGlmIChpc1NpbmdsZUl0ZW1TZWxlY3RlZCkge1xyXG4gICAgICAgIEBmb3IgKGJ0biBvZiBzaW5nbGVBY3Rpb25CdXR0b25zOyB0cmFjayB0cmFja0J5SWR4KCRpbmRleCkpIHtcclxuICAgICAgICAgIEBpZiAoIWJ0bi52aXNpYmxlIHx8IChidG4udmlzaWJsZSAmJiBidG4udmlzaWJsZSA9PT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25TaW5nbGVJdGVtQWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tINij2LLYsdin2LEg2YXYqti52K/Yr9ipINin2YTYudmG2KfYtdixIC0tPlxyXG4gICAgICBAaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIEBmb3IgKGJ0biBvZiBidWxrQWN0aW9uQnV0dG9uczsgdHJhY2sgdHJhY2tCeUlkeCgkaW5kZXgpKSB7XHJcbiAgICAgICAgICBAaWYgKCFidG4udmlzaWJsZSB8fCAoYnRuLnZpc2libGUgJiYgYnRuLnZpc2libGUgPT09IHRydWUpKSB7XHJcbiAgICAgICAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uSW50ZXJuYWxCdWxrQWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tINij2LLYsdin2LEg2KfZhNil2LbYp9mB2KkgLS0+XHJcbiAgICAgIEBmb3IgKGJ0biBvZiBhZGRCdXR0b25Db25maWdzOyB0cmFjayB0cmFja0J5SWR4KCRpbmRleCkpIHtcclxuICAgICAgICBAaWYgKCFidG4udmlzaWJsZSB8fCAoYnRuLnZpc2libGUgJiYgYnRuLnZpc2libGUgPT09IHRydWUpKSB7XHJcbiAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNsaWNrKGJ0bilcIlxyXG4gICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG5cclxuQGlmIChtb2RlICE9PSAnZm9ybS1vbmx5JyAmJiBtb2RlICE9PSAnZGV0YWlsJykge1xyXG48ZGl2IGNsYXNzPVwibXQtMiBtYi00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gIDwhLS0g2KfZhNio2K3YqyAtLT5cclxuICBAaWYgKHNob3dTZWFyY2ggJiYgZmlsdGVycykge1xyXG4gICAgPGxpYi1nZW5lcmljLXNlYXJjaC1hZHZhbmNlZFxyXG4gICAgW21vZGVsXT1cImZpbHRlck1vZGVsXCJcclxuICBbZmllbGRzXT1cImZpbHRlcnNcIlxyXG4gIFtlbmFibGVRdWVyeUJ1aWxkZXJdPVwidHJ1ZVwiXHJcbiAgKHNlYXJjaCk9XCJhcHBseVNlYXJjaCgkZXZlbnQpXCJcclxuICAocGFnaW5hdGlvbkNoYW5nZSk9XCJwYWdpbmF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuPC9saWItZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQ+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8ZGl2PjwvZGl2PlxyXG4gIH1cclxuXHJcbiAgPCEtLSDYo9iv2YjYp9iqINil2LbYp9mB2YrYqSAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcnRsOnNwYWNlLXgtcmV2ZXJzZVwiPlxyXG4gICAgPCEtLSBSZWZyZXNoIEJ1dHRvbiAtLT5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiXHJcbiAgICAgIG91dGxpbmVkXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgY2xhc3M9XCJoaWRkZW4geHM6YmxvY2tcIlxyXG4gICAgICAob25DbGljayk9XCJyZXNldCgpXCJcclxuICAgIC8+XHJcblxyXG4gICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiIGNsYXNzPVwibS0wIHAtMCBoaWRkZW4geHM6YmxvY2tcIiAvPlxyXG5cclxuXHJcbiAgICA8cC1idXR0b24gKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIiAgY2xhc3M9XCJ4czpibG9ja1wiICBzZXZlcml0eT1cInNlY29uZGFyeVwiIG91dGxpbmVkIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCIvPlxyXG4gICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiYWN0aW9uc1wiIFtwb3B1cF09XCJ0cnVlXCIgLz5cclxuICAgIDwhLS0gUGFnaW5hdGlvbiBDb250cm9scyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBydGw6c3BhY2UteC1yZXZlcnNlXCI+XHJcbiAgICAgIDwhLS0gRmlyc3QgUGFnZSBCdXR0b24gLS0+XHJcbiAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgIFtpY29uXT1cImlzUlRMID8gJ3BpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodCcgOiAncGkgcGktYW5nbGUtZG91YmxlLWxlZnQnXCJcclxuICAgICAgICBvdXRsaW5lZFxyXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICBjbGFzcz1cImhpZGRlbiB4czpibG9ja1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImdvRmlyc3QoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKClcIlxyXG4gICAgICA+PC9wLWJ1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gUHJldmlvdXMgUGFnZSBCdXR0b24gLS0+XHJcbiAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgIFtpY29uXT1cImlzUlRMID8gJ3BpIHBpLWNoZXZyb24tcmlnaHQnIDogJ3BpIHBpLWNoZXZyb24tbGVmdCdcIlxyXG4gICAgICAgIG91dGxpbmVkXHJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgIGNsYXNzPVwieHM6YmxvY2tcIlxyXG4gICAgICAgIChjbGljayk9XCJnb1ByZXYoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKClcIlxyXG4gICAgICA+PC9wLWJ1dHRvbj5cclxuXHJcblxyXG4gICAgICAgPCEtLSBDdXJyZW50IFBhZ2UgRGlzcGxheSB3aXRoIERyb3Bkb3duIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBbbGFiZWxdPVwiY3VycmVudFBhZ2UgKyAnIC8gJyArIHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgIG91dGxpbmVkXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgY2xhc3M9XCJoaWRkZW4geHM6YmxvY2tcIlxyXG4gICAgICAoY2xpY2spPVwic2hvd1BhZ2VNZW51ID0gIXNob3dQYWdlTWVudVwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCJ7e3RvdGFsUmVjb3Jkc319XCJcclxuICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgIC8+XHJcblxyXG5cclxuICA8L2Rpdj5cclxuICAgICAgPCEtLSBOZXh0IFBhZ2UgQnV0dG9uIC0tPlxyXG4gICAgICA8cC1idXR0b25cclxuICAgICAgICBbaWNvbl09XCJpc1JUTCA/ICdwaSBwaS1jaGV2cm9uLWxlZnQnIDogJ3BpIHBpLWNoZXZyb24tcmlnaHQnXCJcclxuICAgICAgICBvdXRsaW5lZFxyXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICBjbGFzcz1cInhzOmJsb2NrXCJcclxuICAgICAgICAoY2xpY2spPVwiZ29OZXh0KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlKClcIlxyXG4gICAgICA+PC9wLWJ1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gTGFzdCBQYWdlIEJ1dHRvbiAtLT5cclxuICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgW2ljb25dPVwiaXNSVEwgPyAncGkgcGktYW5nbGUtZG91YmxlLWxlZnQnIDogJ3BpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodCdcIlxyXG4gICAgICAgIG91dGxpbmVkXHJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgIGNsYXNzPVwiaGlkZGVuIHhzOmJsb2NrXCJcclxuICAgICAgICAoY2xpY2spPVwiZ29MYXN0KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlKClcIlxyXG4gICAgICA+PC9wLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG4iXX0=","/* eslint-disable @angular-eslint/no-output-on-prefix */\n/* eslint-disable @angular-eslint/no-output-native */\nimport { DividerModule } from 'primeng/divider';\nimport { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessageModule } from 'primeng/message';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DialogModule } from 'primeng/dialog';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { BaseService } from '@elite.framework/ng.core/services';\nimport { SwalService } from '@elite.framework/ng.core/services';\nimport { GenericCrudHeaderComponent } from './generic-crud-header';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { GenericTable } from '@elite.framework/ng.ui.core/generic-table';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericViewComponent } from '@elite.framework/ng.ui.core/generic-view';\nimport * as i0 from \"@angular/core\";\n/**\n * مكون جدول CRUD عام يمكن إعادة استخدامه\n * يدعم العمليات الأساسية: إنشاء، قراءة، تحديث، حذف\n * مع إمكانية التخصيص عبر عدة أوضاع وعرض\n */\nexport class GenericCrudTableComponent {\n genericTable;\n dialog;\n translate = inject(TranslateService);\n swalService = inject(SwalService);\n home = { icon: 'pi pi-home', routerLink: '/' };\n data = [];\n formFields_ = []; // <-- هنا\n formFields = []; // <-- هنا\n columns = []; // <-- هنا\n dialogMaxWidth = '40rem'; // unset , fit-content\n isViewMode = false;\n displayMode = 'drawer';\n useConfirmOnSave = false;\n isEditMode = false;\n drawerVisible = false;\n dialogVisible = false;\n form = new UntypedFormGroup({});\n model;\n model_ = {};\n loading = false;\n errorMsg = '';\n errorMessage = '';\n options = {};\n actions = [];\n /** تحدد طريقة العرض: 'buttons' أو 'menu' */\n actionsMode = 'buttons';\n action = new EventEmitter();\n bulkAction = new EventEmitter();\n singleAction = new EventEmitter();\n beforeSaveTransform; // ⚡ دوال مخصصة قبل الحفظ\n afterSave = new EventEmitter();\n afterDelete = new EventEmitter();\n beforeSave = new EventEmitter();\n beforeDelete = new EventEmitter();\n formCancel = new EventEmitter();\n formInit = new EventEmitter();\n dataLoaded = new EventEmitter();\n selectionChange = new EventEmitter();\n error = new EventEmitter();\n // البحث\n // Search\n filters;\n filterModel = {};\n search = new EventEmitter();\n /** للتحكم بإظهار/إخفاء قسم البحث */\n showSearch = true;\n /** Pagination Inputs */\n first = 0;\n rows = 10;\n totalRecords = 0;\n pageChange = new EventEmitter();\n onSearch = new EventEmitter();\n visibleChange = new EventEmitter();\n ;\n // @Output() visibleChange = new EventEmitter<boolean>();\n /** لجعل الجدول قابل لاختيار الصفوف (افتراضي false) */\n rowSelectable = false;\n /** حدث يخرج الصف المحدّد */\n rowSelect = new EventEmitter();\n selection = null;\n // الفرز\n sortField;\n sortOrder = 1;\n scrollHeight = '400px';\n paginator = true;\n service = inject(BaseService);\n apiName = '';\n idField = 'id';\n showRowSelectionCheckbox = false;\n showAddButton = true;\n addPermissionName;\n addButtonConfigs = [\n {\n icon: 'pi pi-plus',\n label: 'ADD',\n variant: 'raised',\n severity: 'primary',\n size: 'small',\n actionName: 'add',\n visible: this.showAddButton,\n permission: this.addPermissionName,\n },\n ];\n createEditActions = [\n {\n icon: 'pi pi-check',\n label: 'SAVE',\n variant: 'raised',\n severity: 'primary',\n size: 'small',\n actionName: 'save',\n type: 'submit',\n splitActions: [\n {\n label: this.translate.instant('SAVE_AND_ADD'),\n icon: 'pi pi-save',\n actionName: 'saveAndAdd'\n }\n ]\n },\n {\n icon: 'pi pi-times',\n label: 'CANCEL',\n variant: 'raised',\n severity: 'danger',\n size: 'small',\n actionName: 'cancel',\n type: 'button',\n },\n ];\n supportSubPage = true;\n tabs = [];\n bulkActionButtons = [];\n singleActionButtons = [];\n _selectedRows = [];\n get isSingleItemSelected() {\n return this._selectedRows.length === 1;\n }\n get isMultipleItemSelected() {\n return this._selectedRows.length > 1;\n }\n get selectedItems() {\n return this._selectedRows;\n }\n breadcrumb;\n get breadcrumb_() {\n return this.breadcrumb?.map(v => ({\n ...v,\n label: this.translate.instant(v.label ?? '')\n }));\n }\n get rtl() {\n try {\n return document?.documentElement?.dir === 'rtl';\n }\n catch (error) {\n return true;\n }\n }\n /**\n * Modes to control what parts of the component are visible\n * - 'full': Table + CRUD operations (default)\n * - 'form-only': Only show form (for create/edit/view)\n * - 'table-only': Only show table (read-only mode)\n */\n mode = 'full';\n /** Force the component to show specific state */\n forceState = null;\n /** Hide table completely when in form-only mode */\n get hideTable() {\n return (this.mode === 'form-only' || this.mode === 'detail' || (this.forceState && this.mode !== 'table-only')) ?? false;\n }\n /** Auto-show form when in form-only mode with forceState */\n get autoShowForm() {\n return this.mode === 'form-only' && !!this.forceState;\n }\n tableClass = 'h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl xs:rounded-2xl p-4 bg-white';\n route = inject(ActivatedRoute);\n router = inject(Router);\n currentId;\n ngOnInit() {\n if (this.apiName && this.apiName != '') {\n this.service.apiName = this.apiName;\n }\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n if (this.tabs.length == 0) {\n this.formFields_ = this.formFields;\n this.tabs.push({ header: 'التفاصيل', icon: 'pi pi-info-circle', fields: this.formFields_, model: this.model });\n }\n if (this.supportSubPage) {\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n this.mode = 'detail';\n this.loadDetail(id);\n }\n else {\n this.currentId = undefined;\n }\n });\n }\n }\n // 3. Handle Header's Paginate Change Event\n onHeaderPaginateChange(event) {\n this.first = event.first; // Update the 'first' index\n this.rows = event.rows;\n const lazyLoadEvent = {\n first: this.first,\n rows: this.rows,\n // You'd typically include current sorting and filtering state here\n sortField: this.sortField,\n sortOrder: 1,\n filters: this.filters,\n globalFilter: null, // or your current global filter value\n };\n this.onLazyLoad(lazyLoadEvent);\n }\n loadDetail(id) {\n this.service.getList({ skipCount: 0, maxResultCount: 1, id }).subscribe({\n next: res => {\n const found = res.items.find(x => x[this.idField] == id);\n this.model = found;\n }\n });\n }\n // Helper method to open form programmatically\n openForm(mode, model) {\n this.dialog.openForm(mode, model);\n }\n // private destroy$ = new Subject<void>();\n /** الآن يتلقّى pagination + sort في حدث واحد */\n onLazyLoad(event) {\n // this.model_= this.model ?? {};\n this.model = this.model ?? {};\n this.formFields_ = this.formFields;\n const first = event.first ?? this.first;\n const rows = event.rows ?? this.rows;\n const sortField = typeof event.sortField === 'string'\n ? event.sortField\n : this.sortField;\n const sortOrder = event.sortOrder === -1 ? -1 : 1;\n const filters = {};\n if (event.filters) {\n Object.entries(event.filters).forEach(([field, meta]) => {\n const value = meta.value;\n if (value != null && value !== '') {\n filters[field] = value;\n }\n });\n }\n this.first = first;\n this.rows = rows;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n const dir = sortOrder === 1 ? 'asc' : 'desc';\n const sort = sortField ? `${sortField} ${dir}` : undefined;\n this.pageChange.emit({ first, rows, sort, filters });\n // يبني النص وإرساله\n }\n /** تصيير البيانات حسب الصفحة */\n get pagedData() {\n // return this.data ? this.data.slice(this.first, this.first + this.rows) : [];\n return this.data;\n }\n get globalFilterFields() {\n return this.columns.map(c => String(c.key));\n }\n /** أرسل إلى الأب لأتمتة شكل البحث إذا يحتاج */\n // from generic-crud-table.component.ts\n /** بدّل applySearch لتبث pageChange مباشرةً */\n applySearch(filters) {\n // this.genericTable.applyFilter(global);\n this.onSearch.emit(filters);\n }\n /** دالة تنفّذ عند النقر على صف */\n onRowClick(row) {\n if (this.rowSelectable) {\n this.rowSelect.emit(row);\n }\n }\n onSubmit() {\n if (this.mode != 'form-only') {\n this.applySearch('');\n }\n }\n trackByIdx(index, item) {\n return index;\n }\n onSingleItemAction(btn) {\n if (!this.isSingleItemSelected)\n return;\n const selectedItem = this._selectedRows[0];\n this.singleAction.emit({\n name: btn.actionName ?? 'singleAction',\n item: selectedItem\n });\n }\n onInternalBulkAction(btn) {\n if (!this.isMultipleItemSelected)\n return;\n this.bulkAction.emit({\n name: btn.actionName ?? 'bulkAction',\n items: [...this._selectedRows] // نرسل نسخة من المصفوفة\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudTableComponent, isStandalone: true, selector: \"app-generic-crud-table\", inputs: { data: \"data\", formFields: \"formFields\", columns: \"columns\", dialogMaxWidth: \"dialogMaxWidth\", isViewMode: \"isViewMode\", displayMode: \"displayMode\", useConfirmOnSave: \"useConfirmOnSave\", isEditMode: \"isEditMode\", drawerVisible: \"drawerVisible\", dialogVisible: \"dialogVisible\", model: \"model\", loading: \"loading\", errorMsg: \"errorMsg\", errorMessage: \"errorMessage\", actions: \"actions\", actionsMode: \"actionsMode\", beforeSaveTransform: \"beforeSaveTransform\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", rowSelectable: \"rowSelectable\", scrollHeight: \"scrollHeight\", paginator: \"paginator\", service: \"service\", apiName: \"apiName\", idField: \"idField\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\", showAddButton: \"showAddButton\", addPermissionName: \"addPermissionName\", addButtonConfigs: \"addButtonConfigs\", createEditActions: \"createEditActions\", supportSubPage: \"supportSubPage\", tabs: \"tabs\", bulkActionButtons: \"bulkActionButtons\", singleActionButtons: \"singleActionButtons\", breadcrumb: \"breadcrumb\", mode: \"mode\", forceState: \"forceState\", hideTable: \"hideTable\", autoShowForm: \"autoShowForm\" }, outputs: { action: \"action\", bulkAction: \"bulkAction\", singleAction: \"singleAction\", afterSave: \"afterSave\", afterDelete: \"afterDelete\", beforeSave: \"beforeSave\", beforeDelete: \"beforeDelete\", formCancel: \"formCancel\", formInit: \"formInit\", dataLoaded: \"dataLoaded\", selectionChange: \"selectionChange\", error: \"error\", search: \"search\", pageChange: \"pageChange\", onSearch: \"onSearch\", visibleChange: \"visibleChange\", rowSelect: \"rowSelect\" }, viewQueries: [{ propertyName: \"genericTable\", first: true, predicate: [\"genericTable\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], ngImport: i0, template: \"<div\\r\\n [class]=\\\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\\\"\\r\\n>\\r\\n <app-generic-crud-header\\r\\n [mode]=\\\"mode\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [isSingleItemSelected]=\\\"isSingleItemSelected\\\"\\r\\n [selectedItems]=\\\"_selectedRows\\\"\\r\\n [singleActionButtons]=\\\"singleActionButtons\\\"\\r\\n [bulkActionButtons]=\\\"bulkActionButtons\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [filters]=\\\"filters\\\"\\r\\n [filterModel]=\\\"filterModel\\\"\\r\\n [showSearch]=\\\"showSearch\\\"\\r\\n (singleItemAction)=\\\"onSingleItemAction($event)\\\"\\r\\n (bulkAction)=\\\"onInternalBulkAction($event)\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (resetSearch)=\\\"applySearch('')\\\"\\r\\n (paginateChange)=\\\"onHeaderPaginateChange($event)\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n/>\\r\\n\\r\\n @if (!hideTable) {\\r\\n <lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n ></lib-generic-table>\\r\\n\\r\\n }\\r\\n\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"service.apiName\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [dialogMaxWidth]=\\\"dialogMaxWidth\\\"\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [forceState]=\\\"forceState\\\"\\r\\n [drawerVisible]=\\\"drawerVisible\\\"\\r\\n [dialogVisible]=\\\"dialogVisible\\\"\\r\\n [isViewMode]=\\\"isViewMode\\\"\\r\\n [isEditMode]=\\\"isEditMode\\\"\\r\\n [useConfirmOnSave]=\\\"useConfirmOnSave\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [errorMsg]=\\\"errorMsg\\\"\\r\\n [errorMessage]=\\\"errorMessage\\\"\\r\\n [beforeSaveTransform]=\\\"beforeSaveTransform\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (afterSave)=\\\"afterSave.emit($event);onSubmit();\\\"\\r\\n (afterDelete)=\\\"afterDelete.emit($event)\\\"\\r\\n (beforeSave)=\\\"beforeSave.emit($event)\\\"\\r\\n (beforeDelete)=\\\"beforeDelete.emit($event)\\\"\\r\\n (formCancel)=\\\"formCancel.emit()\\\"\\r\\n (formInit)=\\\"formInit.emit($event)\\\"\\r\\n (dataLoaded)=\\\"dataLoaded.emit($event)\\\"\\r\\n (selectionChange)=\\\"selectionChange.emit($event)\\\"\\r\\n (error)=\\\"error.emit($event)\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n\\r\\n <app-detail-view\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [title]=\\\"breadcrumb_?.[0]?.label || 'Detail'\\\"\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"service.apiName\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [tabs]=\\\"tabs\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [createEditActions]=\\\"createEditActions\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n >\\r\\n </app-detail-view>\\r\\n\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: TableModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: GenericTable, selector: \"lib-generic-table\", inputs: [\"data\", \"columns\", \"loading\", \"actions\", \"actionsPosition\", \"actionsMode\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"globalFilterFields\", \"addButtonConfigs\", \"scrollHeight\", \"rowSelectable\", \"selection\", \"paginator\", \"showRowSelectionCheckbox\"], outputs: [\"action\", \"pageChange\", \"onAddNew\", \"rowSelect\", \"selectionChange\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: MessageModule }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"component\", type: GenericCrudHeaderComponent, selector: \"app-generic-crud-header\", inputs: [\"mode\", \"breadcrumb\", \"isSingleItemSelected\", \"selectedItems\", \"singleActionButtons\", \"bulkActionButtons\", \"addButtonConfigs\", \"filters\", \"filterModel\", \"showSearch\", \"first\", \"rows\", \"totalRecords\", \"apiName\", \"actions\"], outputs: [\"singleItemAction\", \"bulkAction\", \"search\", \"resetSearch\", \"action\", \"paginateChange\"] }, { kind: \"component\", type: GenericViewComponent, selector: \"app-detail-view\", inputs: [\"title\", \"actions\", \"createEditActions\", \"tabs\", \"viewMode\", \"breadcrumb\", \"service\", \"formFields\", \"apiName\", \"idField\", \"standaloneMode\", \"isViewMode\", \"isCreateMode\", \"isEditMode\", \"model\", \"displayMode\", \"mode\", \"loading\"], outputs: [\"action\", \"afterDelete\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-table', standalone: true, imports: [\n CommonModule,\n TableModule,\n ButtonModule,\n GenericTable,\n ToolbarModule,\n TranslateModule,\n DividerModule,\n IconFieldModule,\n DrawerModule,\n ReactiveFormsModule,\n FormsModule,\n MessageModule,\n DialogModule,\n GenericDialogComponent,\n GenericCrudHeaderComponent,\n GenericViewComponent\n ], host: {\n class: ''\n }, template: \"<div\\r\\n [class]=\\\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\\\"\\r\\n>\\r\\n <app-generic-crud-header\\r\\n [mode]=\\\"mode\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [isSingleItemSelected]=\\\"isSingleItemSelected\\\"\\r\\n [selectedItems]=\\\"_selectedRows\\\"\\r\\n [singleActionButtons]=\\\"singleActionButtons\\\"\\r\\n [bulkActionButtons]=\\\"bulkActionButtons\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [filters]=\\\"filters\\\"\\r\\n [filterModel]=\\\"filterModel\\\"\\r\\n [showSearch]=\\\"showSearch\\\"\\r\\n (singleItemAction)=\\\"onSingleItemAction($event)\\\"\\r\\n (bulkAction)=\\\"onInternalBulkAction($event)\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (resetSearch)=\\\"applySearch('')\\\"\\r\\n (paginateChange)=\\\"onHeaderPaginateChange($event)\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n/>\\r\\n\\r\\n @if (!hideTable) {\\r\\n <lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [addButtonConfigs]=\\\"addButtonConfigs\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n ></lib-generic-table>\\r\\n\\r\\n }\\r\\n\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"service.apiName\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [dialogMaxWidth]=\\\"dialogMaxWidth\\\"\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [forceState]=\\\"forceState\\\"\\r\\n [drawerVisible]=\\\"drawerVisible\\\"\\r\\n [dialogVisible]=\\\"dialogVisible\\\"\\r\\n [isViewMode]=\\\"isViewMode\\\"\\r\\n [isEditMode]=\\\"isEditMode\\\"\\r\\n [useConfirmOnSave]=\\\"useConfirmOnSave\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [errorMsg]=\\\"errorMsg\\\"\\r\\n [errorMessage]=\\\"errorMessage\\\"\\r\\n [beforeSaveTransform]=\\\"beforeSaveTransform\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (afterSave)=\\\"afterSave.emit($event);onSubmit();\\\"\\r\\n (afterDelete)=\\\"afterDelete.emit($event)\\\"\\r\\n (beforeSave)=\\\"beforeSave.emit($event)\\\"\\r\\n (beforeDelete)=\\\"beforeDelete.emit($event)\\\"\\r\\n (formCancel)=\\\"formCancel.emit()\\\"\\r\\n (formInit)=\\\"formInit.emit($event)\\\"\\r\\n (dataLoaded)=\\\"dataLoaded.emit($event)\\\"\\r\\n (selectionChange)=\\\"selectionChange.emit($event)\\\"\\r\\n (error)=\\\"error.emit($event)\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n\\r\\n <app-detail-view\\r\\n [displayMode]=\\\"displayMode\\\"\\r\\n [mode]=\\\"mode\\\"\\r\\n [title]=\\\"breadcrumb_?.[0]?.label || 'Detail'\\\"\\r\\n [service]=\\\"service\\\"\\r\\n [apiName]=\\\"service.apiName\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [formFields]=\\\"formFields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [tabs]=\\\"tabs\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [breadcrumb]=\\\"breadcrumb_\\\"\\r\\n [createEditActions]=\\\"createEditActions\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n >\\r\\n </app-detail-view>\\r\\n\\r\\n</div>\\r\\n\" }]\n }], propDecorators: { genericTable: [{\n type: ViewChild,\n args: ['genericTable']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], data: [{\n type: Input\n }], formFields: [{\n type: Input\n }], columns: [{\n type: Input\n }], dialogMaxWidth: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], useConfirmOnSave: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], drawerVisible: [{\n type: Input\n }], dialogVisible: [{\n type: Input\n }], model: [{\n type: Input\n }], loading: [{\n type: Input\n }], errorMsg: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], action: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], singleAction: [{\n type: Output\n }], beforeSaveTransform: [{\n type: Input\n }], afterSave: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], beforeSave: [{\n type: Output\n }], beforeDelete: [{\n type: Output\n }], formCancel: [{\n type: Output\n }], formInit: [{\n type: Output\n }], dataLoaded: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], error: [{\n type: Output\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], search: [{\n type: Output\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], onSearch: [{\n type: Output\n }], visibleChange: [{\n type: Output\n }], rowSelectable: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], scrollHeight: [{\n type: Input\n }], paginator: [{\n type: Input\n }], service: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }], showAddButton: [{\n type: Input\n }], addPermissionName: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], supportSubPage: [{\n type: Input\n }], tabs: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], mode: [{\n type: Input\n }], forceState: [{\n type: Input\n }], hideTable: [{\n type: Input\n }], autoShowForm: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFDeEQscURBQXFEO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTyxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFRLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FB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cEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFHSSxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBUUEsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxTQUFTO3NCQUFqQixLQUFLO2dCQUVFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFSSxhQUFhO3NCQUFyQixLQUFLO2dCQUVDLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBYUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQTRCRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQW9CQyxVQUFVO3NCQUFsQixLQUFLO2dCQXVCSyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTyxTQUFTO3NCQUFyQixLQUFLO2dCQUtPLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZSAqL1xyXG5pbXBvcnQgeyBEaXZpZGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaXZpZGVyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgaW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlLFRhYmxlTGF6eUxvYWRFdmVudCAgfSAgZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSAgIGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgSWNvbkZpZWxkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJhd2VyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcmF3ZXInO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGlvbkRlZiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnXHJcbmltcG9ydCB7IEdlbmVyaWNDcnVkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9nZW5lcmljLWNydWQtaGVhZGVyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IERldGFpbFRhYiwgR2VuZXJpY1ZpZXdDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy12aWV3JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUNoYW5nZVBheWxvYWQgZXh0ZW5kcyBQYWdpbmF0b3JTdGF0ZSB7XHJcbnNvcnQ/OiBzdHJpbmc7XHJcbmZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25zTW9kZSA9ICdidXR0b25zJyB8ICdtZW51JztcclxuXHJcbi8qKlxyXG4gKiDZhdmD2YjZhiDYrNiv2YjZhCBDUlVEINi52KfZhSDZitmF2YPZhiDYpdi52KfYr9ipINin2LPYqtiu2K/Yp9mF2YdcclxuICog2YrYr9i52YUg2KfZhNi52YXZhNmK2KfYqiDYp9mE2KPYs9in2LPZitipOiDYpdmG2LTYp9ih2Iwg2YLYsdin2KHYqdiMINiq2K3Yr9mK2KvYjCDYrdiw2YFcclxuICog2YXYuSDYpdmF2YPYp9mG2YrYqSDYp9mE2KrYrti12YrYtSDYudio2LEg2LnYr9ipINij2YjYttin2Lkg2YjYudix2LZcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtY3J1ZC10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUYWJsZU1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEdlbmVyaWNUYWJsZSxcclxuICAgIFRvb2xiYXJNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBEaXZpZGVyTW9kdWxlLFxyXG4gICAgSWNvbkZpZWxkTW9kdWxlLFxyXG4gICAgRHJhd2VyTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWVzc2FnZU1vZHVsZSxcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQ3J1ZEhlYWRlckNvbXBvbmVudCxcclxuICAgIEdlbmVyaWNWaWV3Q29tcG9uZW50XHJcbl0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtY3J1ZC10YWJsZS5odG1sJyxcclxuICAgaG9zdDoge1xyXG4gICAgICAgIGNsYXNzOiAnJ1xyXG4gICAgfSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljQ3J1ZFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcclxuIEBWaWV3Q2hpbGQoJ2dlbmVyaWNUYWJsZScpIGdlbmVyaWNUYWJsZSE6IEdlbmVyaWNUYWJsZTxUPjtcclxuIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiB0cmFuc2xhdGU6VHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuIHByaXZhdGUgc3dhbFNlcnZpY2UgPSBpbmplY3QoU3dhbFNlcnZpY2UpO1xyXG5cclxuICAgIGhvbWU6IE1lbnVJdGVtIHwgdW5kZWZpbmVkID0geyBpY29uOiAncGkgcGktaG9tZScsIHJvdXRlckxpbms6ICcvJyB9O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xyXG4gICBmb3JtRmllbGRzXzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdOyAgLy8gPC0tINmH2YbYp1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTsgIC8vIDwtLSDZh9mG2KdcclxuICBASW5wdXQoKSBjb2x1bW5zOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107ICAvLyA8LS0g2YfZhtinXHJcbiAgQElucHV0KCkgZGlhbG9nTWF4V2lkdGggPSAnNDByZW0nOyAvLyB1bnNldCAsIGZpdC1jb250ZW50XHJcbiAgQElucHV0KCkgaXNWaWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzcGxheU1vZGU6XHJcbiAgICB8ICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSdcclxuICAgIHwgUGFydGlhbDxSZWNvcmQ8J2FkZCcgfCAnZWRpdCcgfCAndmlldycsICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSc+PlxyXG4gICAgPSAnZHJhd2VyJztcclxuICBASW5wdXQoKSB1c2VDb25maXJtT25TYXZlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRyYXdlclZpc2libGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcbiBASW5wdXQoKSBtb2RlbDogYW55O1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yTXNnID0gJyc7XHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmd8YW55ID0gJyc7XHJcblxyXG5vcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiBBY3Rpb25EZWY8VD5bXSA9IFtdO1xyXG4gICAgLyoqINiq2K3Yr9ivINi32LHZitmC2Kkg2KfZhNi52LHYtjogJ2J1dHRvbnMnINij2YggJ21lbnUnICovXHJcbiAgQElucHV0KCkgYWN0aW9uc01vZGU6IEFjdGlvbnNNb2RlID0gJ2J1dHRvbnMnO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IFQgfT4oKTtcclxuICBAT3V0cHV0KCkgYnVsa0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBUW10gfT4oKTtcclxuICBAT3V0cHV0KCkgc2luZ2xlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgaXRlbTogVCB9PigpO1xyXG4gIEBJbnB1dCgpIGJlZm9yZVNhdmVUcmFuc2Zvcm0/OiAocmVjb3JkOiBhbnksIGlzRWRpdDogYm9vbGVhbikgPT4gYW55OyAvLyDimqEg2K/ZiNin2YQg2YXYrti12LXYqSDZgtio2YQg2KfZhNit2YHYuFxyXG5cclxuXHJcbiAgIEBPdXRwdXQoKSBhZnRlclNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBUOyBpc0VkaXQ6IGJvb2xlYW47IHJlc3BvbnNlPzogYW55IH0+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogVDsgcmVzcG9uc2U/OiBhbnkgfT4oKTtcclxuICBAT3V0cHV0KCkgYmVmb3JlU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFQ7IGlzRWRpdDogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBUIH0+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZvcm06IFVudHlwZWRGb3JtR3JvdXA7IG1vZGVsOiBhbnkgfT4oKTtcclxuICBAT3V0cHV0KCkgZGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBUW107IHRvdGFsOiBudW1iZXIgfT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNlbGVjdGVkOiBUW107IHNlbGVjdGVkQ291bnQ6IG51bWJlciB9PigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBlcnJvcjogYW55OyBjb250ZXh0OiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgLy8g2KfZhNio2K3Yq1xyXG4vLyBTZWFyY2hcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBhbnk7XHJcbiAgIEBJbnB1dCgpIGZpbHRlck1vZGVsOiBhbnkgPSB7fTtcclxuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IGdsb2JhbDogc3RyaW5nIH0+KCk7XHJcblxyXG4vKiog2YTZhNiq2K3Zg9mFINio2KXYuNmH2KfYsS/Ypdiu2YHYp9ihINmC2LPZhSDYp9mE2KjYrdirICovXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IHRydWU7XHJcblxyXG4gIC8qKiBQYWdpbmF0aW9uIElucHV0cyAqL1xyXG4gIEBJbnB1dCgpIGZpcnN0ID0gMDtcclxuICBASW5wdXQoKSByb3dzID0gMTA7XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcclxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZVBheWxvYWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5AT3V0cHV0KCkgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpOztcclxuLy8gQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgIC8qKiDZhNis2LnZhCDYp9mE2KzYr9mI2YQg2YLYp9io2YQg2YTYp9iu2KrZitin2LEg2KfZhNi12YHZiNmBICjYp9mB2KrYsdin2LbZiiBmYWxzZSkgKi9cclxuICBASW5wdXQoKSByb3dTZWxlY3RhYmxlID0gZmFsc2U7XHJcbiAgLyoqINit2K/YqyDZitiu2LHYrCDYp9mE2LXZgSDYp9mE2YXYrdiv2ZHYryAqL1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gIHNlbGVjdGlvbjogVCB8IG51bGwgPSBudWxsO1xyXG5cclxuIC8vINin2YTZgdix2LJcclxuICBzb3J0RmllbGQ/OiBzdHJpbmc7XHJcbiAgc29ydE9yZGVyOiAxIHwgLTEgPSAxO1xyXG5cclxuQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzQwMHB4JztcclxuXHJcbiBASW5wdXQoKSBwYWdpbmF0b3IgPSB0cnVlO1xyXG5cclxuQElucHV0KCkgc2VydmljZTogQmFzZVNlcnZpY2UgPSBpbmplY3QoQmFzZVNlcnZpY2UpO1xyXG5ASW5wdXQoKSBhcGlOYW1lID0gJyc7XHJcbkBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG5cclxuIEBJbnB1dCgpIHNob3dSb3dTZWxlY3Rpb25DaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uID0gdHJ1ZTtcclxuXHJcbkBJbnB1dCgpIGFkZFBlcm1pc3Npb25OYW1lPzpzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGFkZEJ1dHRvbkNvbmZpZ3M6IEJ1dHRvbkNvbmZpZ1tdID0gW1xyXG4gIHtcclxuICAgIGljb246ICdwaSBwaS1wbHVzJyxcclxuICAgIGxhYmVsOiAnQUREJyxcclxuICAgIHZhcmlhbnQ6ICdyYWlzZWQnLFxyXG4gICAgc2V2ZXJpdHk6ICdwcmltYXJ5JyxcclxuICAgIHNpemU6ICdzbWFsbCcsXHJcbiAgICBhY3Rpb25OYW1lOiAnYWRkJyxcclxuICAgIHZpc2libGU6IHRoaXMuc2hvd0FkZEJ1dHRvbixcclxuICAgIHBlcm1pc3Npb246IHRoaXMuYWRkUGVybWlzc2lvbk5hbWUsXHJcbiAgfSxcclxuXTtcclxuXHJcbiBASW5wdXQoKSBjcmVhdGVFZGl0QWN0aW9uczogQnV0dG9uQ29uZmlnW10gPSBbXHJcbiAge1xyXG4gICAgaWNvbjogJ3BpIHBpLWNoZWNrJyxcclxuICAgIGxhYmVsOiAnU0FWRScsXHJcbiAgICB2YXJpYW50OiAncmFpc2VkJyxcclxuICAgIHNldmVyaXR5OiAncHJpbWFyeScsXHJcbiAgICBzaXplOiAnc21hbGwnLFxyXG4gICAgYWN0aW9uTmFtZTogJ3NhdmUnLFxyXG4gICAgdHlwZTogJ3N1Ym1pdCcsXHJcbiAgICBzcGxpdEFjdGlvbnM6IFtcclxuICAgICB7XHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTQVZFX0FORF9BREQnKSxcclxuICAgICAgaWNvbjogJ3BpIHBpLXNhdmUnLFxyXG4gICAgICAgYWN0aW9uTmFtZTogJ3NhdmVBbmRBZGQnXHJcbiAgICB9XHJcbiAgXVxyXG4gIH0sXHJcbiAgIHtcclxuICAgIGljb246ICdwaSBwaS10aW1lcycsXHJcbiAgICBsYWJlbDogJ0NBTkNFTCcsXHJcbiAgICB2YXJpYW50OiAncmFpc2VkJyxcclxuICAgIHNldmVyaXR5OiAnZGFuZ2VyJyxcclxuICAgIHNpemU6ICdzbWFsbCcsXHJcbiAgICBhY3Rpb25OYW1lOiAnY2FuY2VsJyxcclxuICAgIHR5cGU6ICdidXR0b24nLFxyXG4gIH0sXHJcbl07XHJcblxyXG4gQElucHV0KCkgc3VwcG9ydFN1YlBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuIEBJbnB1dCgpIHRhYnM6IERldGFpbFRhYltdID0gW107XHJcbiAgQElucHV0KCkgYnVsa0FjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2luZ2xlQWN0aW9uQnV0dG9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuXHJcbiBfc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcclxuXHJcbmdldCBpc1NpbmdsZUl0ZW1TZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMTtcclxufVxyXG5cclxuZ2V0IGlzTXVsdGlwbGVJdGVtU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cy5sZW5ndGggPiAxO1xyXG59XHJcblxyXG5nZXQgc2VsZWN0ZWRJdGVtcygpOiBUW10ge1xyXG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZFJvd3M7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5ASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuXHJcbmdldCBicmVhZGNydW1iXygpOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gdGhpcy5icmVhZGNydW1iPy5tYXAodiA9PiAoe1xyXG4gICAgLi4udixcclxuICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHYubGFiZWwgPz8gJycpXHJcbiAgfSkpO1xyXG59XHJcbmdldCBydGwoKTogYm9vbGVhbiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBkb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50Py5kaXIgPT09ICdydGwnO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbiAvKipcclxuICAgKiBNb2RlcyB0byBjb250cm9sIHdoYXQgcGFydHMgb2YgdGhlIGNvbXBvbmVudCBhcmUgdmlzaWJsZVxyXG4gICAqIC0gJ2Z1bGwnOiBUYWJsZSArIENSVUQgb3BlcmF0aW9ucyAoZGVmYXVsdClcclxuICAgKiAtICdmb3JtLW9ubHknOiBPbmx5IHNob3cgZm9ybSAoZm9yIGNyZWF0ZS9lZGl0L3ZpZXcpXHJcbiAgICogLSAndGFibGUtb25seSc6IE9ubHkgc2hvdyB0YWJsZSAocmVhZC1vbmx5IG1vZGUpXHJcbiAgICovXHJcbiAgQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgLyoqIEZvcmNlIHRoZSBjb21wb25lbnQgdG8gc2hvdyBzcGVjaWZpYyBzdGF0ZSAqL1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ3ZpZXcnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBIaWRlIHRhYmxlIGNvbXBsZXRlbHkgd2hlbiBpbiBmb3JtLW9ubHkgbW9kZSAqL1xyXG4gIEBJbnB1dCgpIGdldCBoaWRlVGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMubW9kZSA9PT0gJ2Zvcm0tb25seScgfHwgdGhpcy5tb2RlID09PSAnZGV0YWlsJyB8fCAodGhpcy5mb3JjZVN0YXRlICYmIHRoaXMubW9kZSAhPT0gJ3RhYmxlLW9ubHknKSApPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogQXV0by1zaG93IGZvcm0gd2hlbiBpbiBmb3JtLW9ubHkgbW9kZSB3aXRoIGZvcmNlU3RhdGUgKi9cclxuICBASW5wdXQoKSBnZXQgYXV0b1Nob3dGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2Zvcm0tb25seScgJiYgISF0aGlzLmZvcmNlU3RhdGU7XHJcbiAgfVxyXG5cclxuIHRhYmxlQ2xhc3MgPSAnaC1mdWxsIGZsZXgtMSBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZC0yeGwgeHM6cm91bmRlZC0yeGwgcC00IGJnLXdoaXRlJztcclxuXHJcbiBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxucHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuY3VycmVudElkPzogc3RyaW5nIHwgbnVtYmVyO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmKHRoaXMuYXBpTmFtZSAmJiB0aGlzLmFwaU5hbWUgIT0gJycpe1xyXG4gICAgICB0aGlzLnNlcnZpY2UuYXBpTmFtZSA9IHRoaXMuYXBpTmFtZSA7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuYXBpTmFtZSkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgfVxyXG5cclxuICBpZih0aGlzLnRhYnMubGVuZ3RoID09IDApe1xyXG4gICAgdGhpcy5mb3JtRmllbGRzXyA9IHRoaXMuZm9ybUZpZWxkcztcclxuICAgIHRoaXMudGFicy5wdXNoKHsgaGVhZGVyOiAn2KfZhNiq2YHYp9i12YrZhCcsaWNvbjoncGkgcGktaW5mby1jaXJjbGUnLCBmaWVsZHM6IHRoaXMuZm9ybUZpZWxkc18sIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xyXG4gIH1cclxuICAgIGlmICh0aGlzLnN1cHBvcnRTdWJQYWdlKSB7XHJcbiAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmdldCh0aGlzLmlkRmllbGQpO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgIHRoaXMubW9kZSA9ICdkZXRhaWwnO1xyXG4gICAgICB0aGlzLmxvYWREZXRhaWwoaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuICB9XHJcblxyXG4gICAvLyAzLiBIYW5kbGUgSGVhZGVyJ3MgUGFnaW5hdGUgQ2hhbmdlIEV2ZW50XHJcbiAgb25IZWFkZXJQYWdpbmF0ZUNoYW5nZShldmVudDogeyBmaXJzdDogbnVtYmVyOyByb3dzOiBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0OyAvLyBVcGRhdGUgdGhlICdmaXJzdCcgaW5kZXhcclxuICAgIHRoaXMucm93cyA9IGV2ZW50LnJvd3M7XHJcblxyXG5cclxuICAgICAgIGNvbnN0IGxhenlMb2FkRXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCxcclxuICAgICAgICByb3dzOiB0aGlzLnJvd3MsXHJcbiAgICAgICAgLy8gWW91J2QgdHlwaWNhbGx5IGluY2x1ZGUgY3VycmVudCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgc3RhdGUgaGVyZVxyXG4gICAgICAgIHNvcnRGaWVsZDogdGhpcy5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiAxLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyAsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyOiBudWxsLCAvLyBvciB5b3VyIGN1cnJlbnQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMub25MYXp5TG9hZChsYXp5TG9hZEV2ZW50KTtcclxuICB9XHJcbiAgbG9hZERldGFpbChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgdGhpcy5zZXJ2aWNlLmdldExpc3QoeyBza2lwQ291bnQ6IDAsIG1heFJlc3VsdENvdW50OiAxLCBpZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogcmVzID0+IHtcclxuICAgICAgY29uc3QgZm91bmQgPSByZXMuaXRlbXMuZmluZCh4ID0+IHhbdGhpcy5pZEZpZWxkXSA9PSBpZCk7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBmb3VuZDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gSGVscGVyIG1ldGhvZCB0byBvcGVuIGZvcm0gcHJvZ3JhbW1hdGljYWxseVxyXG5vcGVuRm9ybShtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JyB8ICd2aWV3JywgbW9kZWw/OiBhbnkpIHtcclxuICB0aGlzLmRpYWxvZy5vcGVuRm9ybShtb2RlLG1vZGVsKTtcclxufVxyXG5cclxuXHJcbi8vICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuIC8qKiDYp9mE2KLZhiDZitiq2YTZgtmR2YkgcGFnaW5hdGlvbiArIHNvcnQg2YHZiiDYrdiv2Ksg2YjYp9it2K8gKi9cclxub25MYXp5TG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgLy8gdGhpcy5tb2RlbF89IHRoaXMubW9kZWwgPz8ge307XHJcbiAgdGhpcy5tb2RlbD0gdGhpcy5tb2RlbCA/PyB7fTtcclxuXHJcbiAgdGhpcy5mb3JtRmllbGRzXyA9IHRoaXMuZm9ybUZpZWxkcztcclxuICBjb25zdCBmaXJzdCAgICAgPSBldmVudC5maXJzdCAgPz8gdGhpcy5maXJzdDtcclxuICBjb25zdCByb3dzICAgICAgPSBldmVudC5yb3dzICAgPz8gdGhpcy5yb3dzO1xyXG4gIGNvbnN0IHNvcnRGaWVsZCA9IHR5cGVvZiBldmVudC5zb3J0RmllbGQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBldmVudC5zb3J0RmllbGRcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc29ydEZpZWxkO1xyXG4gIGNvbnN0IHNvcnRPcmRlciA9IGV2ZW50LnNvcnRPcmRlciA9PT0gLTEgPyAtMSA6IDE7XHJcblxyXG5cclxuICBjb25zdCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBpZiAoZXZlbnQuZmlsdGVycykge1xyXG4gICAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIG1ldGFdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAobWV0YSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgZmlsdGVyc1tmaWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB0aGlzLmZpcnN0ICAgICA9IGZpcnN0O1xyXG4gIHRoaXMucm93cyAgICAgID0gcm93cztcclxuICB0aGlzLnNvcnRGaWVsZCA9IHNvcnRGaWVsZDtcclxuICB0aGlzLnNvcnRPcmRlciA9IHNvcnRPcmRlciBhcyAxfCAtMTtcclxuY29uc3QgZGlyID0gc29ydE9yZGVyID09PSAxID8gJ2FzYycgOiAnZGVzYyc7XHJcbiBjb25zdCBzb3J0ID0gc29ydEZpZWxkID8gYCR7c29ydEZpZWxkfSAke2Rpcn1gIDogdW5kZWZpbmVkO1xyXG5cclxuICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGZpcnN0LCByb3dzICxzb3J0LCBmaWx0ZXJzIH0pO1xyXG5cclxuICAvLyDZitio2YbZiiDYp9mE2YbYtSDZiNil2LHYs9in2YTZh1xyXG5cclxufVxyXG5cclxuXHJcbiAgLyoqINiq2LXZitmK2LEg2KfZhNio2YrYp9mG2KfYqiDYrdiz2Kgg2KfZhNi12YHYrdipICovXHJcbiAgZ2V0IHBhZ2VkRGF0YSgpOiBUW10ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5zbGljZSh0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5yb3dzKSA6IFtdO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5nZXQgZ2xvYmFsRmlsdGVyRmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChjID0+IFN0cmluZyhjLmtleSkpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvKiog2KPYsdiz2YQg2KXZhNmJINin2YTYo9ioINmE2KPYqtmF2KrYqSDYtNmD2YQg2KfZhNio2K3YqyDYpdiw2Kcg2YrYrdiq2KfYrCAqL1xyXG4vLyBmcm9tIGdlbmVyaWMtY3J1ZC10YWJsZS5jb21wb25lbnQudHNcclxuXHJcbi8qKiDYqNiv2ZHZhCBhcHBseVNlYXJjaCDZhNiq2KjYqyBwYWdlQ2hhbmdlINmF2KjYp9i02LHYqdmLICovXHJcbiBhcHBseVNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcclxuICAgIC8vIHRoaXMuZ2VuZXJpY1RhYmxlLmFwcGx5RmlsdGVyKGdsb2JhbCk7XHJcbiAgICAgIHRoaXMub25TZWFyY2guZW1pdChmaWx0ZXJzKTtcclxuICB9XHJcblxyXG5cclxuIC8qKiDYr9in2YTYqSDYqtmG2YHZkdiwINi52YbYryDYp9mE2YbZgtixINi52YTZiSDYtdmBICovXHJcbiAgb25Sb3dDbGljayhyb3c6IFQpIHtcclxuICAgIGlmICh0aGlzLnJvd1NlbGVjdGFibGUpIHtcclxuICAgICAgdGhpcy5yb3dTZWxlY3QuZW1pdChyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxub25TdWJtaXQoKSB7XHJcbiBpZiAodGhpcy5tb2RlICE9ICdmb3JtLW9ubHknKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5hcHBseVNlYXJjaCgnJyk7XHJcbiAgICAgICAgfVxyXG59XHJcblxyXG4gICAgIHRyYWNrQnlJZHgoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gaW5kZXg7XHJcbiB9XHJcblxyXG5vblNpbmdsZUl0ZW1BY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNTaW5nbGVJdGVtU2VsZWN0ZWQpIHJldHVybjtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5fc2VsZWN0ZWRSb3dzWzBdO1xyXG4gIHRoaXMuc2luZ2xlQWN0aW9uLmVtaXQoe1xyXG4gICAgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ3NpbmdsZUFjdGlvbicsXHJcbiAgICBpdGVtOiBzZWxlY3RlZEl0ZW1cclxuICB9KTtcclxufVxyXG5cclxub25JbnRlcm5hbEJ1bGtBY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNNdWx0aXBsZUl0ZW1TZWxlY3RlZCkgcmV0dXJuO1xyXG5cclxuICB0aGlzLmJ1bGtBY3Rpb24uZW1pdCh7XHJcbiAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnYnVsa0FjdGlvbicsXHJcbiAgICBpdGVtczogWy4uLnRoaXMuX3NlbGVjdGVkUm93c10gIC8vINmG2LHYs9mEINmG2LPYrtipINmF2YYg2KfZhNmF2LXZgdmI2YHYqVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2XHJcbiAgW2NsYXNzXT1cIm1vZGUgIT09ICdmb3JtLW9ubHknICYmIG1vZGUgIT09ICdkZXRhaWwnICA/IHRhYmxlQ2xhc3MgOiAnJ1wiXHJcbj5cclxuIDxhcHAtZ2VuZXJpYy1jcnVkLWhlYWRlclxyXG4gIFttb2RlXT1cIm1vZGVcIlxyXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJfXCJcclxuICBbaXNTaW5nbGVJdGVtU2VsZWN0ZWRdPVwiaXNTaW5nbGVJdGVtU2VsZWN0ZWRcIlxyXG4gIFtzZWxlY3RlZEl0ZW1zXT1cIl9zZWxlY3RlZFJvd3NcIlxyXG4gIFtzaW5nbGVBY3Rpb25CdXR0b25zXT1cInNpbmdsZUFjdGlvbkJ1dHRvbnNcIlxyXG4gIFtidWxrQWN0aW9uQnV0dG9uc109XCJidWxrQWN0aW9uQnV0dG9uc1wiXHJcbiAgW2FkZEJ1dHRvbkNvbmZpZ3NdPVwiYWRkQnV0dG9uQ29uZmlnc1wiXHJcbiAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXHJcbiAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgW2ZpbHRlck1vZGVsXT1cImZpbHRlck1vZGVsXCJcclxuICBbc2hvd1NlYXJjaF09XCJzaG93U2VhcmNoXCJcclxuICAoc2luZ2xlSXRlbUFjdGlvbik9XCJvblNpbmdsZUl0ZW1BY3Rpb24oJGV2ZW50KVwiXHJcbiAgKGJ1bGtBY3Rpb24pPVwib25JbnRlcm5hbEJ1bGtBY3Rpb24oJGV2ZW50KVwiXHJcbiAgKGFjdGlvbik9XCJhY3Rpb24uZW1pdCgkZXZlbnQpXCJcclxuICAoc2VhcmNoKT1cImFwcGx5U2VhcmNoKCRldmVudClcIlxyXG4gIChyZXNldFNlYXJjaCk9XCJhcHBseVNlYXJjaCgnJylcIlxyXG4gIChwYWdpbmF0ZUNoYW5nZSk9XCJvbkhlYWRlclBhZ2luYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gIFtmaXJzdF09XCJmaXJzdFwiXHJcbiAgW3Jvd3NdPVwicm93c1wiXHJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4vPlxyXG5cclxuICAgQGlmICghaGlkZVRhYmxlKSB7XHJcbiAgPGxpYi1nZW5lcmljLXRhYmxlXHJcbiAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICBbYWN0aW9uc109XCJhY3Rpb25zXCJcclxuICAgIFthY3Rpb25zTW9kZV09XCJhY3Rpb25zTW9kZVwiXHJcbiAgICBbZmlyc3RdPVwiZmlyc3RcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgICBbc29ydE9yZGVyXT1cInNvcnRPcmRlclwiXHJcbiAgICBbYWRkQnV0dG9uQ29uZmlnc109XCJhZGRCdXR0b25Db25maWdzXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICAgIFtzaG93Um93U2VsZWN0aW9uQ2hlY2tib3hdPVwic2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94XCJcclxuICAgIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAob25BZGROZXcpPVwiYWN0aW9uLmVtaXQoeyBuYW1lOiAnYWRkJywgcm93OiBudWxsISB9KVwiXHJcbiAgICAocGFnZUNoYW5nZSk9XCJvbkxhenlMb2FkKCRldmVudClcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwicm93U2VsZWN0YWJsZVwiXHJcbiAgICAocm93U2VsZWN0KT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGVkUm93c1wiXHJcbiAgICAjZ2VuZXJpY1RhYmxlXHJcbiAgPjwvbGliLWdlbmVyaWMtdGFibGU+XHJcblxyXG4gIH1cclxuXHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgIFtzZXJ2aWNlXT1cInNlcnZpY2VcIlxyXG4gICBbYXBpTmFtZV09XCJzZXJ2aWNlLmFwaU5hbWVcIlxyXG4gICAgW2Zvcm1GaWVsZHNdPVwiZm9ybUZpZWxkc1wiXHJcbiAgICBbbW9kZWxdPVwibW9kZWxcIlxyXG4gICAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJpZEZpZWxkXCJcclxuICAgIFtkaWFsb2dNYXhXaWR0aF09XCJkaWFsb2dNYXhXaWR0aFwiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwiZGlzcGxheU1vZGVcIlxyXG4gICAgW21vZGVdPVwibW9kZVwiXHJcbiAgICBbZm9yY2VTdGF0ZV09XCJmb3JjZVN0YXRlXCJcclxuICAgIFtkcmF3ZXJWaXNpYmxlXT1cImRyYXdlclZpc2libGVcIlxyXG4gICAgW2RpYWxvZ1Zpc2libGVdPVwiZGlhbG9nVmlzaWJsZVwiXHJcbiAgICBbaXNWaWV3TW9kZV09XCJpc1ZpZXdNb2RlXCJcclxuICAgIFtpc0VkaXRNb2RlXT1cImlzRWRpdE1vZGVcIlxyXG4gICAgW3VzZUNvbmZpcm1PblNhdmVdPVwidXNlQ29uZmlybU9uU2F2ZVwiXHJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgIFtlcnJvck1zZ109XCJlcnJvck1zZ1wiXHJcbiAgICBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiXHJcbiAgICBbYmVmb3JlU2F2ZVRyYW5zZm9ybV09XCJiZWZvcmVTYXZlVHJhbnNmb3JtXCJcclxuICAgIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoYWZ0ZXJTYXZlKT1cImFmdGVyU2F2ZS5lbWl0KCRldmVudCk7b25TdWJtaXQoKTtcIlxyXG4gICAgKGFmdGVyRGVsZXRlKT1cImFmdGVyRGVsZXRlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoYmVmb3JlU2F2ZSk9XCJiZWZvcmVTYXZlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoYmVmb3JlRGVsZXRlKT1cImJlZm9yZURlbGV0ZS5lbWl0KCRldmVudClcIlxyXG4gICAgKGZvcm1DYW5jZWwpPVwiZm9ybUNhbmNlbC5lbWl0KClcIlxyXG4gICAgKGZvcm1Jbml0KT1cImZvcm1Jbml0LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoZGF0YUxvYWRlZCk9XCJkYXRhTG9hZGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgKGVycm9yKT1cImVycm9yLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAodmlzaWJsZUNoYW5nZSk9XCJ2aXNpYmxlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuICAgPGFwcC1kZXRhaWwtdmlld1xyXG4gICAgW2Rpc3BsYXlNb2RlXT1cImRpc3BsYXlNb2RlXCJcclxuICAgIFttb2RlXT1cIm1vZGVcIlxyXG4gICAgW3RpdGxlXT1cImJyZWFkY3J1bWJfPy5bMF0/LmxhYmVsIHx8ICdEZXRhaWwnXCJcclxuICAgICBbc2VydmljZV09XCJzZXJ2aWNlXCJcclxuICAgW2FwaU5hbWVdPVwic2VydmljZS5hcGlOYW1lXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZFwiXHJcbiAgICBbYWN0aW9uc109XCJhY3Rpb25zXCJcclxuICAgIFtmb3JtRmllbGRzXT1cImZvcm1GaWVsZHNcIlxyXG4gICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgIFt0YWJzXT1cInRhYnNcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iX1wiXHJcbiAgICBbY3JlYXRlRWRpdEFjdGlvbnNdPVwiY3JlYXRlRWRpdEFjdGlvbnNcIlxyXG4gICAgIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgPC9hcHAtZGV0YWlsLXZpZXc+XHJcblxyXG48L2Rpdj5cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}