@acorex/modules 20.7.9 → 20.7.11
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.
- package/assessment-management/index.d.ts +266 -1
- package/common/index.d.ts +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-5peOXPDz.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-ClgGS32i.mjs} +846 -24
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-ClgGS32i.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-D6KO7up6.mjs → acorex-modules-assessment-management-answers-viewer-widget-column.component-UmXUT6Xn.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-D6KO7up6.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-column.component-UmXUT6Xn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-C4NilFjL.mjs → acorex-modules-assessment-management-answers-viewer-widget-edit.component-vVfXtden.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-C4NilFjL.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-edit.component-vVfXtden.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-DtHvmJQD.mjs → acorex-modules-assessment-management-answers-viewer-widget-view.component-C75zxKgV.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-DtHvmJQD.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-view.component-C75zxKgV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BDRkvtin.mjs → acorex-modules-assessment-management-assessment-case.entity-CjhC5YAF.mjs} +3 -2
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-CjhC5YAF.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-MLP74IAt.mjs → acorex-modules-assessment-management-assessment-session.entity-B_IDiEzp.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-MLP74IAt.mjs.map → acorex-modules-assessment-management-assessment-session.entity-B_IDiEzp.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-wtCw3l5I.mjs → acorex-modules-assessment-management-fill-assessment-session.command-zT5u3h_s.mjs} +40 -6
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-zT5u3h_s.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Cm7cniSG.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BIXy9eut.mjs} +4 -4
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Cm7cniSG.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-BIXy9eut.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-BIGQMXEc.mjs → acorex-modules-assessment-management-question-bank-item.entity-BWYLXvCp.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-BIGQMXEc.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-BWYLXvCp.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-BxN8kxpu.mjs → acorex-modules-assessment-management-questionnaire-builder-edit.component-3wVcKQGE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-BxN8kxpu.mjs.map → acorex-modules-assessment-management-questionnaire-builder-edit.component-3wVcKQGE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-CHA00XC0.mjs → acorex-modules-assessment-management-questionnaire-builder-view.component-meuUo7Vx.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-CHA00XC0.mjs.map → acorex-modules-assessment-management-questionnaire-builder-view.component-meuUo7Vx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-C-AX1MiC.mjs → acorex-modules-assessment-management-questionnaire-builder.component-CGgUUkOY.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-C-AX1MiC.mjs.map → acorex-modules-assessment-management-questionnaire-builder.component-CGgUUkOY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BY8YfBf1.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-kVnWtedV.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BY8YfBf1.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-kVnWtedV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-ktXkCzVb.mjs → acorex-modules-assessment-management-questionnaire-viewer.service-D3k3J93r.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-ktXkCzVb.mjs.map → acorex-modules-assessment-management-questionnaire-viewer.service-D3k3J93r.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-C2soGbpn.mjs → acorex-modules-assessment-management-questionnaire.entity-C8sX0d_p.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-C2soGbpn.mjs.map → acorex-modules-assessment-management-questionnaire.entity-C8sX0d_p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-RvdyXryB.mjs → acorex-modules-assessment-management-view-session-answers.command-Czq7cj9R.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-RvdyXryB.mjs.map → acorex-modules-assessment-management-view-session-answers.command-Czq7cj9R.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-Dg9sg98-.mjs → acorex-modules-auth-acorex-modules-auth-IIyirCLb.mjs} +14 -14
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-IIyirCLb.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-Dr8EZ7ZX.mjs → acorex-modules-auth-app-chooser.component-BGLW8Qtn.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-Dr8EZ7ZX.mjs.map → acorex-modules-auth-app-chooser.component-BGLW8Qtn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-C7Rt6tLk.mjs → acorex-modules-auth-login.module-uUQkWCgY.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-C7Rt6tLk.mjs.map → acorex-modules-auth-login.module-uUQkWCgY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-CgD5kk65.mjs → acorex-modules-auth-master.layout-XkwT3Slv.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-CgD5kk65.mjs.map → acorex-modules-auth-master.layout-XkwT3Slv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-CuGIGBVO.mjs → acorex-modules-auth-oauth-callback.component-C0p17V1b.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-CuGIGBVO.mjs.map → acorex-modules-auth-oauth-callback.component-C0p17V1b.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-DmohsIxt.mjs → acorex-modules-auth-password.component-CaH-OaIv.mjs} +4 -4
- package/fesm2022/acorex-modules-auth-password.component-CaH-OaIv.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-C6TCAUm4.mjs → acorex-modules-auth-password.component-DDFOsrkt.mjs} +3 -3
- package/fesm2022/acorex-modules-auth-password.component-DDFOsrkt.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-routes-C3162bwa.mjs → acorex-modules-auth-routes-Cik9Y3RJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-C3162bwa.mjs.map → acorex-modules-auth-routes-Cik9Y3RJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-Ce-n3WC9.mjs → acorex-modules-auth-tenant-chooser.component-B9VJd12P.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-Ce-n3WC9.mjs.map → acorex-modules-auth-tenant-chooser.component-B9VJd12P.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-B2nPzX-3.mjs → acorex-modules-auth-two-factor.module-D1TKyIXZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-B2nPzX-3.mjs.map → acorex-modules-auth-two-factor.module-D1TKyIXZ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-wVKJ2KIm.mjs → acorex-modules-auth-user-sessions.component-MZJramlf.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-wVKJ2KIm.mjs.map → acorex-modules-auth-user-sessions.component-MZJramlf.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-business-core.mjs +1 -1
- package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
- package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs +95 -0
- package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs.map +1 -0
- package/fesm2022/acorex-modules-calendar-management.mjs +68 -33
- package/fesm2022/acorex-modules-calendar-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-common.mjs +25 -17
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +387 -12
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs → acorex-modules-document-management-link-dialog.component-F1DkJ4Ns.mjs} +2 -2
- package/fesm2022/acorex-modules-document-management-link-dialog.component-F1DkJ4Ns.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs → acorex-modules-document-management-share-dialog.component-BV2JJmED.mjs} +2 -2
- package/fesm2022/acorex-modules-document-management-share-dialog.component-BV2JJmED.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs → acorex-modules-document-management-share-email-dialog.component-Dn-j0ETn.mjs} +2 -2
- package/fesm2022/acorex-modules-document-management-share-email-dialog.component-Dn-j0ETn.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management.mjs +3 -3
- package/fesm2022/acorex-modules-financial-core-data-source.provider-Do4rvgy4.mjs +73 -0
- package/fesm2022/acorex-modules-financial-core-data-source.provider-Do4rvgy4.mjs.map +1 -0
- package/fesm2022/acorex-modules-financial-core.mjs +4 -2
- package/fesm2022/acorex-modules-financial-core.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-template-management.mjs +37 -405
- package/fesm2022/acorex-modules-form-template-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-CydmGF5Q.mjs → acorex-modules-help-desk-acorex-modules-help-desk-Clea9Hhv.mjs} +3 -3
- package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-CydmGF5Q.mjs.map → acorex-modules-help-desk-acorex-modules-help-desk-Clea9Hhv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-Bsq1FJId.mjs → acorex-modules-help-desk-capture-screen.component-CiQv__MW.mjs} +2 -2
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-Bsq1FJId.mjs.map → acorex-modules-help-desk-capture-screen.component-CiQv__MW.mjs.map} +1 -1
- package/fesm2022/acorex-modules-help-desk.mjs +1 -1
- package/fesm2022/acorex-modules-locale-management.mjs +13 -355
- package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +140 -6
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-measurement-core.mjs +1 -1
- package/fesm2022/acorex-modules-measurement-core.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-DVkP3JKC.mjs → acorex-modules-platform-management-acorex-modules-platform-management-BAIx0BJe.mjs} +3 -3
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-DVkP3JKC.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-BAIx0BJe.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C_mdsuRc.mjs → acorex-modules-platform-management-menu-list.component-BxGLun0f.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C_mdsuRc.mjs.map → acorex-modules-platform-management-menu-list.component-BxGLun0f.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/{acorex-modules-product-catalog-product.entity-CuTXUcc1.mjs → acorex-modules-product-catalog-product.entity-BXDh4Wlu.mjs} +10 -2
- package/fesm2022/acorex-modules-product-catalog-product.entity-BXDh4Wlu.mjs.map +1 -0
- package/fesm2022/acorex-modules-product-catalog.mjs +1 -1
- package/fesm2022/{acorex-modules-task-management-task-board.page-BUp5SQ7b.mjs → acorex-modules-task-management-task-board.page-Cgxdk78j.mjs} +3 -3
- package/fesm2022/acorex-modules-task-management-task-board.page-Cgxdk78j.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/form-template-management/index.d.ts +2 -12
- package/locale-management/index.d.ts +3 -23
- package/package.json +2 -2
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-5peOXPDz.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-BDRkvtin.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-wtCw3l5I.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-Dg9sg98-.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-C6TCAUm4.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-DmohsIxt.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs.map +0 -1
- package/fesm2022/acorex-modules-product-catalog-product.entity-CuTXUcc1.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-BUp5SQ7b.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-platform-management-menu-list.component-C_mdsuRc.mjs","sources":["../tmp-esm2022/platform-management/lib/features/menu-management/pages/menu-list/menu-list.component.js"],"sourcesContent":["import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTreeViewComponent } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPMenuManagementService } from '../../menu-management.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/dropdown\";\nimport * as i4 from \"@acorex/components/badge\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"@acorex/core/translation\";\n//#region ---- Menu List Component ----\nexport class AXMMenuListComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n //#region ---- Dependencies ----\n this.menuManagementService = inject(AXPMenuManagementService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.dialogService = inject(AXDialogService);\n this.toastService = inject(AXToastService);\n this.translationService = inject(AXTranslationService);\n this.route = inject(ActivatedRoute);\n //#endregion\n //#region ---- Component State ----\n this.tree = viewChild(AXTreeViewComponent, ...(ngDevMode ? [{ debugName: \"tree\" }] : []));\n this.treeNodes = signal([], ...(ngDevMode ? [{ debugName: \"treeNodes\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.error = signal('', ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.currentScope = signal(AXPPlatformScope.User, ...(ngDevMode ? [{ debugName: \"currentScope\" }] : []));\n this.isSyncing = false; // Prevent concurrent sync operations\n this.destroy$ = new Subject(); // For subscription cleanup\n }\n //#endregion\n //#region ---- Lifecycle ----\n async ngOnInit() {\n await super.ngOnInit();\n // Get scope from route (with memory leak prevention)\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(async (params) => {\n const scope = params['scope'];\n if (scope) {\n this.currentScope.set(scope);\n await this.loadMenuItems();\n this.recompute(); // Update page header after loading\n }\n });\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle before drop validation\n */\n async handleBeforeDrop(e) {\n console.log('[handleBeforeDrop] Event triggered!', {\n movedNode: e.movedNode?.['id'],\n previousParent: e.previousParent?.['id'],\n currentParent: e.currentParent?.['id'],\n previousIndex: e.previousIndex,\n currentIndex: e.currentIndex,\n });\n const targetParent = e.currentParent?.['data'] || null;\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n e.canceled = true;\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.move');\n this.toastService.warning(message);\n return;\n }\n // Note: Circular reference validation is handled by the tree component itself\n // Additional validation can be added here if needed based on business rules\n }\n /**\n * Handle after drop event to sync changes\n * The event contains information about the moved node and its new position\n */\n async handleAfterDrop(event) {\n console.log('[handleAfterDrop] Event triggered!', {\n movedNode: event.node?.['id'],\n movedNodeData: event.node?.['data'],\n previousParent: event.previousParent?.['id'],\n currentParent: event.currentParent?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n // Check what the tree component has\n const treeComp = this.tree();\n if (treeComp) {\n console.log('[handleAfterDrop] Tree component datasource:', treeComp.datasource);\n }\n // Check our signal\n console.log('[handleAfterDrop] Our treeNodes signal:', this.treeNodes());\n await this.syncTreeChanges();\n }\n //#endregion\n //#region ---- Data Loading ----\n /**\n * Load menu tree for current scope\n */\n async loadMenuItems() {\n try {\n this.isLoading.set(true);\n this.error.set('');\n const treeNodes = await this.menuManagementService.getMenuTreeByScope(this.currentScope());\n this.treeNodes.set(treeNodes);\n this.recompute();\n }\n catch (error) {\n this.error.set(error instanceof Error ? error.message : 'Failed to load menu items');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.load');\n this.toastService.danger(message);\n }\n finally {\n this.isLoading.set(false);\n }\n }\n /**\n * Sync tree changes to backend\n */\n async syncTreeChanges() {\n // Prevent concurrent sync operations\n if (this.isSyncing) {\n return;\n }\n try {\n this.isSyncing = true;\n const scope = this.currentScope();\n // Get nodes from signal - the tree component mutates the array in place\n // so this.treeNodes() will have the updated structure after drag-drop\n const nodes = this.treeNodes();\n console.log('[syncTreeChanges] nodes count:', nodes?.length);\n // Log detailed node structure\n const logNode = (n, level = 0) => ({\n id: n['id'],\n title: n['title'],\n level,\n childrenCount: n['children']?.length ?? 0,\n children: n['children']?.map((c) => logNode(c, level + 1)) ?? [],\n });\n console.log('[syncTreeChanges] Full tree structure:', JSON.stringify(nodes?.map(n => logNode(n)), null, 2));\n if (!nodes || nodes.length === 0) {\n console.log('[syncTreeChanges] No nodes to sync');\n return;\n }\n await this.menuManagementService.syncTreeChangesByScope(scope, nodes);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reorder');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to sync tree changes:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.sync');\n this.toastService.danger(message);\n }\n finally {\n this.isSyncing = false;\n }\n }\n //#endregion\n //#region ---- Page Layout Interface ----\n /**\n * Get page title\n */\n async getPageTitle() {\n const scopeName = this.currentScope();\n const scopeKey = scopeName === AXPPlatformScope.User ? 'user' : 'tenant';\n return this.translationService.translateAsync(`@platform-management:menu-management.menus.${scopeKey}.title`);\n }\n /**\n * Get page description\n */\n async getPageDescription() {\n return this.translationService.translateAsync('@platform-management:menu-management.components.menu-list.description');\n }\n /**\n * Get primary menu items (actions)\n */\n async getPrimaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.add-root.title'),\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: { name: 'add-root' },\n },\n ];\n }\n /**\n * Get secondary menu items\n */\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.collapse.title'),\n icon: 'fa-light fa-minus-square',\n command: { name: 'collapse' },\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.expand.title'),\n icon: 'fa-light fa-plus-square',\n command: { name: 'expand' },\n break: true,\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.title'),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'reset' },\n },\n ];\n }\n /**\n * Execute commands from page actions\n */\n async execute(command) {\n switch (command.name) {\n case 'add-root':\n await this.addRootMenuItem();\n break;\n case 'collapse':\n this.tree()?.collapseAll();\n break;\n case 'expand':\n this.tree()?.expandAll();\n break;\n case 'reset':\n await this.resetCustomizations();\n break;\n }\n }\n //#endregion\n //#region ---- Action Handlers ----\n /**\n * Handle menu item action\n */\n async onAction(action, nodeData) {\n switch (action) {\n case 'show':\n await this.showMenuItem(nodeData);\n break;\n case 'hide':\n await this.hideMenuItem(nodeData);\n break;\n case 'edit':\n await this.editMenuItem(nodeData);\n break;\n case 'delete':\n await this.deleteMenuItem(nodeData);\n break;\n case 'add-child':\n await this.addChildMenuItem(nodeData);\n break;\n }\n }\n /**\n * Add new root menu item\n */\n async addRootMenuItem() {\n await this.showMenuItemDialog(null, null);\n }\n /**\n * Add new child menu item\n */\n async addChildMenuItem(parentNodeData) {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name);\n }\n /**\n * Reset customizations\n */\n async resetCustomizations() {\n const title = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizationsByScope(this.currentScope());\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reset');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to reset customizations:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.reset');\n this.toastService.danger(message);\n }\n finally {\n // Reload anyway to show current state\n await this.loadMenuItems();\n }\n }\n //#endregion\n //#region ---- Menu Item Actions ----\n /**\n * Show menu item\n */\n async showMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.showMenuItemByScope(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.show', '@platform-management:menu-management.messages.error.show');\n }\n /**\n * Hide menu item\n */\n async hideMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.hideMenuItemByScope(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.hide', '@platform-management:menu-management.messages.error.hide');\n }\n /**\n * Edit menu item\n */\n async editMenuItem(nodeData) {\n await this.showMenuItemDialog(nodeData);\n }\n /**\n * Delete custom menu item\n */\n async deleteMenuItem(nodeData) {\n const title = await this.translationService.translateAsync('@general:actions.delete.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.delete.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n const item = nodeData.menuItem;\n if (!item.name)\n return;\n await this.menuManagementService.deleteCustomMenuItemByScope(this.currentScope(), item.name);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.delete');\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.delete');\n this.toastService.danger(message);\n }\n }\n //#endregion\n //#region ---- Dialog Helpers ----\n /**\n * Show menu item dialog (add/edit)\n */\n async showMenuItemDialog(nodeData, parentName = null) {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n const context = {\n name: item?.name || '',\n text: item?.text || '',\n type: item?.type || 'menu',\n icon: item?.icon || '',\n path: item?.path || '',\n priority: item?.priority || 0,\n description: item?.description || '',\n };\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@platform-management:menu-management.fields.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.text', (field) => {\n field.path('text');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@platform-management:menu-management.fields.icon', (field) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@platform-management:menu-management.fields.path', (field) => {\n field.path('path');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.priority', (field) => {\n field.path('priority');\n field.numberBox({\n placeholder: '@platform-management:menu-management.fields.priority',\n step: 10,\n });\n })\n .formField('@platform-management:menu-management.fields.description', (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@platform-management:menu-management.fields.description',\n rows: 3,\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n const formData = dialogRef.context();\n try {\n if (isEdit && item?.name) {\n // Update existing item\n if (nodeData?.metadata?.isCustom) {\n await this.menuManagementService.updateCustomMenuItemByScope(this.currentScope(), item.name, formData);\n }\n else {\n await this.menuManagementService.updateMenuPropertiesByScope(this.currentScope(), item.name, formData);\n }\n }\n else {\n // Add new custom item\n const newItem = {\n name: formData.name,\n text: formData.text,\n icon: formData.icon,\n path: formData.path,\n priority: formData.priority,\n description: formData.description,\n };\n // If parent is specified, add as child\n if (parentName) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, parentName);\n }\n else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, null);\n }\n }\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.save');\n this.toastService.success(message);\n await this.loadMenuItems();\n dialogRef.close();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.save');\n this.toastService.danger(message);\n }\n }\n /**\n * Execute a menu action with common error handling\n */\n async executeMenuAction(action, successMessageKey, errorMessageKey) {\n try {\n await action();\n const message = await this.translationService.translateAsync(successMessageKey);\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n console.error('Menu action failed:', error);\n const message = await this.translationService.translateAsync(errorMessageKey);\n this.toastService.danger(message);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMMenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMMenuListComponent, isStandalone: true, selector: \"axm-menu-list\", host: { classAttribute: \"axm-menu-list-page\" }, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], viewQueries: [{ propertyName: \"tree\", first: true, predicate: AXTreeViewComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\\n | translate\\n | async)!\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree-view\\n [(datasource)]=\\\"treeNodes\\\"\\n [look]=\\\"'default'\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n [selectMode]=\\\"'none'\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [dragBehavior]=\\\"'move'\\\"\\n [dragArea]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop($event)\\\"\\n ></ax-tree-view>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node['data'];\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\"\\n >\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"\\n ></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"\\n ></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"\\n ></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i1.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i1.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i3.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"datasource\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"nodeTemplate\", \"idField\", \"titleField\", \"tooltipField\", \"iconField\", \"expandedField\", \"selectedField\", \"indeterminateField\", \"disabledField\", \"hiddenField\", \"childrenField\", \"childrenCountField\", \"dataField\", \"inheritDisabled\", \"expandOnDoubleClick\", \"doubleClickDuration\", \"tooltipDelay\"], outputs: [\"datasourceChange\", \"onBeforeDrop\", \"onNodeToggle\", \"onNodeSelect\", \"onNodeDoubleClick\", \"onNodeClick\", \"onSelectionChange\", \"onOrderChange\", \"onMoveChange\", \"onItemsChange\"] }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i4.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMMenuListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-menu-list', imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], host: { class: 'axm-menu-list-page' }, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\\n | translate\\n | async)!\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree-view\\n [(datasource)]=\\\"treeNodes\\\"\\n [look]=\\\"'default'\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n [selectMode]=\\\"'none'\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [dragBehavior]=\\\"'move'\\\"\\n [dragArea]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop($event)\\\"\\n ></ax-tree-view>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node['data'];\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\"\\n >\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"\\n ></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"\\n ></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"\\n ></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"] }]\n }], propDecorators: { tree: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXTreeViewComponent), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9wbGF0Zm9ybS1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvbWVudS1tYW5hZ2VtZW50L3BhZ2VzL21lbnUtbGlzdC9tZW51LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3BsYXRmb3JtLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZW51LW1hbmFnZW1lbnQvcGFnZXMvbWVudS1saXN0L21lbnUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUE2QixtQkFBbUIsRUFBdUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRixPQUFPLEVBQXdDLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFF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YUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxzQkFBc0I7eUJBQ2xDO3FCQUNGLFFBQ0ssRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7c0ZBZ0JWLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRHJvcGRvd25CdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IEFYVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RvYXN0JztcbmltcG9ydCB7IEFYVHJlZVZpZXdCZWZvcmVEcm9wRXZlbnQsIEFYVHJlZVZpZXdDb21wb25lbnQsIEFYVHJlZVZpZXdEcm9wRXZlbnQsIEFYVHJlZVZpZXdOb2RlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RyZWUtdmlldyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlLCBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBNZW51SXRlbSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEFjdGlvbk1lbnVJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCwgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50LCBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBQYWdlTGF5b3V0QmFzZSwgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQsIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC92aWV3cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQTWVudUl0ZW1BY3Rpb24gfSBmcm9tICcuLi8uLi9tZW51LWN1c3RvbWl6YXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQTWVudU1hbmFnZW1lbnRTZXJ2aWNlLCBBWFBNZW51VHJlZU5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbWVudS1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuXG4vLyNyZWdpb24gLS0tLSAgIE1lbnUgTGlzdCBDb21wb25lbnQgICAtLS0tXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1tZW51LWxpc3QnLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bk1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYVHJlZVZpZXdDb21wb25lbnQsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBWEJhZGdlTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1NZW51TGlzdENvbXBvbmVudCxcbiAgICB9LFxuICBdLFxuICBob3N0OiB7IGNsYXNzOiAnYXhtLW1lbnUtbGlzdC1wYWdlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBBWE1NZW51TGlzdENvbXBvbmVudCBleHRlbmRzIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyNyZWdpb24gLS0tLSAgIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIG1lbnVNYW5hZ2VtZW50U2VydmljZSA9IGluamVjdChBWFBNZW51TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dEJ1aWxkZXIgPSBpbmplY3QoQVhQTGF5b3V0QnVpbGRlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZSA9IGluamVjdChBWERpYWxvZ1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCBTdGF0ZSAgIC0tLS1cblxuICBwcm90ZWN0ZWQgdHJlZSA9IHZpZXdDaGlsZChBWFRyZWVWaWV3Q29tcG9uZW50KTtcbiAgcHJvdGVjdGVkIHRyZWVOb2RlcyA9IHNpZ25hbDxBWFRyZWVWaWV3Tm9kZVtdPihbXSk7XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjdXJyZW50U2NvcGUgPSBzaWduYWw8QVhQUGxhdGZvcm1TY29wZT4oQVhQUGxhdGZvcm1TY29wZS5Vc2VyKTtcbiAgcHJpdmF0ZSBpc1N5bmNpbmcgPSBmYWxzZTsgLy8gUHJldmVudCBjb25jdXJyZW50IHN5bmMgb3BlcmF0aW9uc1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTsgLy8gRm9yIHN1YnNjcmlwdGlvbiBjbGVhbnVwXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgICAtLS0tXG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEdldCBzY29wZSBmcm9tIHJvdXRlICh3aXRoIG1lbW9yeSBsZWFrIHByZXZlbnRpb24pXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IHBhcmFtc1snc2NvcGUnXSBhcyBBWFBQbGF0Zm9ybVNjb3BlO1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlLnNldChzY29wZSk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgICB0aGlzLnJlY29tcHV0ZSgpOyAvLyBVcGRhdGUgcGFnZSBoZWFkZXIgYWZ0ZXIgbG9hZGluZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBFdmVudCBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlIGJlZm9yZSBkcm9wIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIGhhbmRsZUJlZm9yZURyb3AoZTogQVhUcmVlVmlld0JlZm9yZURyb3BFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQmVmb3JlRHJvcF0gRXZlbnQgdHJpZ2dlcmVkIScsIHtcbiAgICAgIG1vdmVkTm9kZTogZS5tb3ZlZE5vZGU/LlsnaWQnXSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiBlLnByZXZpb3VzUGFyZW50Py5bJ2lkJ10sXG4gICAgICBjdXJyZW50UGFyZW50OiBlLmN1cnJlbnRQYXJlbnQ/LlsnaWQnXSxcbiAgICAgIHByZXZpb3VzSW5kZXg6IGUucHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleDogZS5jdXJyZW50SW5kZXgsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSAoZS5jdXJyZW50UGFyZW50Py5bJ2RhdGEnXSBhcyBBWFBNZW51VHJlZU5vZGVEYXRhKSB8fCBudWxsO1xuXG4gICAgLy8gUHJldmVudCBkcm9wcGluZyBpbnRvIGl0ZW1zIHdpdGggcGF0aHMgKGxlYWYgbm9kZXMpXG4gICAgaWYgKHRhcmdldFBhcmVudD8ubWVudUl0ZW0/LnBhdGgpIHtcbiAgICAgIGUuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmVycm9yLm1vdmUnLFxuICAgICAgKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLndhcm5pbmcobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm90ZTogQ2lyY3VsYXIgcmVmZXJlbmNlIHZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgdHJlZSBjb21wb25lbnQgaXRzZWxmXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGNhbiBiZSBhZGRlZCBoZXJlIGlmIG5lZWRlZCBiYXNlZCBvbiBidXNpbmVzcyBydWxlc1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZnRlciBkcm9wIGV2ZW50IHRvIHN5bmMgY2hhbmdlc1xuICAgKiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vdmVkIG5vZGUgYW5kIGl0cyBuZXcgcG9zaXRpb25cbiAgICovXG4gIGFzeW5jIGhhbmRsZUFmdGVyRHJvcChldmVudDogQVhUcmVlVmlld0Ryb3BFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQWZ0ZXJEcm9wXSBFdmVudCB0cmlnZ2VyZWQhJywge1xuICAgICAgbW92ZWROb2RlOiBldmVudC5ub2RlPy5bJ2lkJ10sXG4gICAgICBtb3ZlZE5vZGVEYXRhOiBldmVudC5ub2RlPy5bJ2RhdGEnXSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiBldmVudC5wcmV2aW91c1BhcmVudD8uWydpZCddLFxuICAgICAgY3VycmVudFBhcmVudDogZXZlbnQuY3VycmVudFBhcmVudD8uWydpZCddLFxuICAgICAgcHJldmlvdXNJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleDogZXZlbnQuY3VycmVudEluZGV4LFxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgd2hhdCB0aGUgdHJlZSBjb21wb25lbnQgaGFzXG4gICAgY29uc3QgdHJlZUNvbXAgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAodHJlZUNvbXApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQWZ0ZXJEcm9wXSBUcmVlIGNvbXBvbmVudCBkYXRhc291cmNlOicsIHRyZWVDb21wLmRhdGFzb3VyY2UpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIG91ciBzaWduYWxcbiAgICBjb25zb2xlLmxvZygnW2hhbmRsZUFmdGVyRHJvcF0gT3VyIHRyZWVOb2RlcyBzaWduYWw6JywgdGhpcy50cmVlTm9kZXMoKSk7XG5cbiAgICBhd2FpdCB0aGlzLnN5bmNUcmVlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIExvYWQgbWVudSB0cmVlIGZvciBjdXJyZW50IHNjb3BlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZE1lbnVJdGVtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoJycpO1xuXG4gICAgICBjb25zdCB0cmVlTm9kZXMgPSBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5nZXRNZW51VHJlZUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICB0aGlzLnRyZWVOb2Rlcy5zZXQodHJlZU5vZGVzKTtcbiAgICAgIHRoaXMucmVjb21wdXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIG1lbnUgaXRlbXMnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5sb2FkJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgdHJlZSBjaGFuZ2VzIHRvIGJhY2tlbmRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3luY1RyZWVDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFByZXZlbnQgY29uY3VycmVudCBzeW5jIG9wZXJhdGlvbnNcbiAgICBpZiAodGhpcy5pc1N5bmNpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc1N5bmNpbmcgPSB0cnVlO1xuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuXG4gICAgICAvLyBHZXQgbm9kZXMgZnJvbSBzaWduYWwgLSB0aGUgdHJlZSBjb21wb25lbnQgbXV0YXRlcyB0aGUgYXJyYXkgaW4gcGxhY2VcbiAgICAgIC8vIHNvIHRoaXMudHJlZU5vZGVzKCkgd2lsbCBoYXZlIHRoZSB1cGRhdGVkIHN0cnVjdHVyZSBhZnRlciBkcmFnLWRyb3BcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlTm9kZXMoKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tzeW5jVHJlZUNoYW5nZXNdIG5vZGVzIGNvdW50OicsIG5vZGVzPy5sZW5ndGgpO1xuICAgICAgXG4gICAgICAvLyBMb2cgZGV0YWlsZWQgbm9kZSBzdHJ1Y3R1cmVcbiAgICAgIGNvbnN0IGxvZ05vZGUgPSAobjogYW55LCBsZXZlbDogbnVtYmVyID0gMCk6IGFueSA9PiAoe1xuICAgICAgICBpZDogblsnaWQnXSxcbiAgICAgICAgdGl0bGU6IG5bJ3RpdGxlJ10sXG4gICAgICAgIGxldmVsLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiAoblsnY2hpbGRyZW4nXSBhcyBhbnlbXSk/Lmxlbmd0aCA/PyAwLFxuICAgICAgICBjaGlsZHJlbjogKG5bJ2NoaWxkcmVuJ10gYXMgYW55W10pPy5tYXAoKGM6IGFueSkgPT4gbG9nTm9kZShjLCBsZXZlbCArIDEpKSA/PyBbXSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tzeW5jVHJlZUNoYW5nZXNdIEZ1bGwgdHJlZSBzdHJ1Y3R1cmU6JywgSlNPTi5zdHJpbmdpZnkobm9kZXM/Lm1hcChuID0+IGxvZ05vZGUobikpLCBudWxsLCAyKSk7XG5cbiAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbc3luY1RyZWVDaGFuZ2VzXSBObyBub2RlcyB0byBzeW5jJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2Uuc3luY1RyZWVDaGFuZ2VzQnlTY29wZShzY29wZSwgbm9kZXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN1Y2Nlc3MucmVvcmRlcicsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN5bmMgdHJlZSBjaGFuZ2VzOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zeW5jJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTeW5jaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQYWdlIExheW91dCBJbnRlcmZhY2UgICAtLS0tXG5cbiAgLyoqXG4gICAqIEdldCBwYWdlIHRpdGxlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzY29wZU5hbWUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuICAgIGNvbnN0IHNjb3BlS2V5ID0gc2NvcGVOYW1lID09PSBBWFBQbGF0Zm9ybVNjb3BlLlVzZXIgPyAndXNlcicgOiAndGVuYW50JztcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoYEBwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZW51cy4ke3Njb3BlS2V5fS50aXRsZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYWdlIGRlc2NyaXB0aW9uXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlRGVzY3JpcHRpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmRlc2NyaXB0aW9uJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcmltYXJ5IG1lbnUgaXRlbXMgKGFjdGlvbnMpXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQcmltYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuYWRkLXJvb3QudGl0bGUnLFxuICAgICAgICApLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2FkZC1yb290JyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWNvbmRhcnkgbWVudSBpdGVtc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuY29sbGFwc2UudGl0bGUnLFxuICAgICAgICApLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbWludXMtc3F1YXJlJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnY29sbGFwc2UnIH0sXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuZXhwYW5kLnRpdGxlJyxcbiAgICAgICAgKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsdXMtc3F1YXJlJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnZXhwYW5kJyB9LFxuICAgICAgICBicmVhazogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMucmVzZXQudGl0bGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0JyxcbiAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICBjb21tYW5kOiB7IG5hbWU6ICdyZXNldCcgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGNvbW1hbmRzIGZyb20gcGFnZSBhY3Rpb25zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ2FkZC1yb290JzpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRSb290TWVudUl0ZW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2xsYXBzZSc6XG4gICAgICAgIHRoaXMudHJlZSgpPy5jb2xsYXBzZUFsbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XG4gICAgICAgIHRoaXMudHJlZSgpPy5leHBhbmRBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgIGF3YWl0IHRoaXMucmVzZXRDdXN0b21pemF0aW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFjdGlvbiBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlIG1lbnUgaXRlbSBhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkFjdGlvbihhY3Rpb246IEFYUE1lbnVJdGVtQWN0aW9uLCBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICBhd2FpdCB0aGlzLmhpZGVNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdE1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZU1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGQtY2hpbGQnOlxuICAgICAgICBhd2FpdCB0aGlzLmFkZENoaWxkTWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyByb290IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFJvb3RNZW51SXRlbSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhudWxsLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGNoaWxkIG1lbnUgaXRlbVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZENoaWxkTWVudUl0ZW0ocGFyZW50Tm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhudWxsLCBwYXJlbnROb2RlRGF0YS5tZW51SXRlbS5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBjdXN0b21pemF0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc2V0Q3VzdG9taXphdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5yZXNldC5jb25maXJtLnRpdGxlJyxcbiAgICApO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5yZXNldC5jb25maXJtLm1lc3NhZ2UnLFxuICAgICk7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIG1lc3NhZ2UpO1xuXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBjdXN0b21pemF0aW9ucyBmb3IgY3VycmVudCBzY29wZVxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UucmVzZXRDdXN0b21pemF0aW9uc0J5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5yZXNldCcsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlc2V0IGN1c3RvbWl6YXRpb25zOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5yZXNldCcsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZWxvYWQgYW55d2F5IHRvIHNob3cgY3VycmVudCBzdGF0ZVxuICAgICAgYXdhaXQgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBNZW51IEl0ZW0gQWN0aW9ucyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvdyBtZW51IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd01lbnVJdGVtKG5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlTWVudUFjdGlvbihcbiAgICAgICgpID0+IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dNZW51SXRlbUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSwgbm9kZURhdGEubWVudUl0ZW0ubmFtZSEpLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zdWNjZXNzLnNob3cnLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zaG93JyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhpZGVNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24oXG4gICAgICAoKSA9PiB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5oaWRlTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIG5vZGVEYXRhLm1lbnVJdGVtLm5hbWUhKSxcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5oaWRlJyxcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3IuaGlkZScsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlZGl0TWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhub2RlRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGN1c3RvbSBtZW51IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlTWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAZ2VuZXJhbDphY3Rpb25zLmRlbGV0ZS50aXRsZScpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5kZWxldGUuY29uZmlybS5tZXNzYWdlJyxcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKHRpdGxlLCBtZXNzYWdlKTtcblxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgaXRlbSA9IG5vZGVEYXRhLm1lbnVJdGVtO1xuICAgICAgaWYgKCFpdGVtLm5hbWUpIHJldHVybjtcblxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuZGVsZXRlQ3VzdG9tTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIGl0ZW0ubmFtZSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5kZWxldGUnLFxuICAgICAgKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmVycm9yLmRlbGV0ZScsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRGlhbG9nIEhlbHBlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNob3cgbWVudSBpdGVtIGRpYWxvZyAoYWRkL2VkaXQpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dNZW51SXRlbURpYWxvZyhcbiAgICBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSB8IG51bGwsXG4gICAgcGFyZW50TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGl0ZW0gPSBub2RlRGF0YT8ubWVudUl0ZW07XG4gICAgY29uc3QgaXNFZGl0ID0gISFpdGVtO1xuICAgIGNvbnN0IHRpdGxlID0gaXNFZGl0XG4gICAgICA/ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5lZGl0LWRpYWxvZy50aXRsZSdcbiAgICAgIDogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLmFkZC1kaWFsb2cudGl0bGUnO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGl0ZW0/Lm5hbWUgfHwgJycsXG4gICAgICB0ZXh0OiBpdGVtPy50ZXh0IHx8ICcnLFxuICAgICAgdHlwZTogaXRlbT8udHlwZSB8fCAnbWVudScsXG4gICAgICBpY29uOiBpdGVtPy5pY29uIHx8ICcnLFxuICAgICAgcGF0aDogaXRlbT8ucGF0aCB8fCAnJyxcbiAgICAgIHByaW9yaXR5OiBpdGVtPy5wcmlvcml0eSB8fCAwLFxuICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBkaWFsb2dSZWY6IGFueSA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgLmNyZWF0ZSgpXG4gICAgICAuZGlhbG9nKChkaWFsb2c6IGFueSkgPT4ge1xuICAgICAgICBkaWFsb2dcbiAgICAgICAgICAuc2V0VGl0bGUodGl0bGUpXG4gICAgICAgICAgLnNldENvbnRleHQoY29udGV4dClcbiAgICAgICAgICAuY29udGVudCgoZmxleDogYW55KSA9PiB7XG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMubmFtZScsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnbmFtZScpO1xuICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLm5hbWUnLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbnM6IFt7IHJ1bGU6ICdyZXF1aXJlZCcgfV0sXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNFZGl0ICYmIG5vZGVEYXRhPy5tZXRhZGF0YT8uaXNCdWlsdEluLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnRleHQnLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3RleHQnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy50ZXh0JyxcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zOiBbeyBydWxlOiAncmVxdWlyZWQnIH1dLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLmljb24nLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2ljb24nKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2ljb24tY2hvb3NlcicsIHt9KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5wYXRoJywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdwYXRoJyk7XG4gICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMucGF0aCcsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNFZGl0ICYmIG5vZGVEYXRhPy5tZXRhZGF0YT8uaXNCdWlsdEluLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnByaW9yaXR5JywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdwcmlvcml0eScpO1xuICAgICAgICAgICAgICAgIGZpZWxkLm51bWJlckJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMucHJpb3JpdHknLFxuICAgICAgICAgICAgICAgICAgc3RlcDogMTAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMuZGVzY3JpcHRpb24nLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zZXRBY3Rpb25zKChhY3Rpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICBpZiAoYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpIGFzIFBhcnRpYWw8QVhQTWVudUl0ZW0+O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc0VkaXQgJiYgaXRlbT8ubmFtZSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbVxuICAgICAgICBpZiAobm9kZURhdGE/Lm1ldGFkYXRhPy5pc0N1c3RvbSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZUN1c3RvbU1lbnVJdGVtQnlTY29wZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCksXG4gICAgICAgICAgICBpdGVtLm5hbWUsXG4gICAgICAgICAgICBmb3JtRGF0YSBhcyBBWFBNZW51SXRlbSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZU1lbnVQcm9wZXJ0aWVzQnlTY29wZSh0aGlzLmN1cnJlbnRTY29wZSgpLCBpdGVtLm5hbWUsIGZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIG5ldyBjdXN0b20gaXRlbVxuICAgICAgICBjb25zdCBuZXdJdGVtOiBBWFBNZW51SXRlbSA9IHtcbiAgICAgICAgICBuYW1lOiBmb3JtRGF0YS5uYW1lISxcbiAgICAgICAgICB0ZXh0OiBmb3JtRGF0YS50ZXh0ISxcbiAgICAgICAgICBpY29uOiBmb3JtRGF0YS5pY29uLFxuICAgICAgICAgIHBhdGg6IGZvcm1EYXRhLnBhdGgsXG4gICAgICAgICAgcHJpb3JpdHk6IGZvcm1EYXRhLnByaW9yaXR5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiBwYXJlbnQgaXMgc3BlY2lmaWVkLCBhZGQgYXMgY2hpbGRcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgICAvLyBBZGQgY3VzdG9tIGl0ZW0gYXMgY2hpbGQgb2YgcGFyZW50XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuYWRkQ3VzdG9tTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIG5ld0l0ZW0sIHBhcmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCBhcyByb290IGxldmVsIGl0ZW1cbiAgICAgICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5hZGRDdXN0b21NZW51SXRlbUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSwgbmV3SXRlbSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN1Y2Nlc3Muc2F2ZScsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zYXZlJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBtZW51IGFjdGlvbiB3aXRoIGNvbW1vbiBlcnJvciBoYW5kbGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTWVudUFjdGlvbihcbiAgICBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgc3VjY2Vzc01lc3NhZ2VLZXk6IHN0cmluZyxcbiAgICBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjdGlvbigpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKHN1Y2Nlc3NNZXNzYWdlS2V5KTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTWVudSBhY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhlcnJvck1lc3NhZ2VLZXkpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb25cbiIsIjxheHAtcGFnZS1sYXlvdXQ+XG4gIDxheHAtcGFnZS1jb250ZW50PlxuICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBtb2RlPVwibG9hZGluZ1wiXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIlxuICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmxvYWRpbmcudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmxvYWRpbmcuZGVzY3JpcHRpb24nXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfCBhc3luYykhXG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgIH0gQGVsc2UgaWYgKGVycm9yKCkpIHtcbiAgICAgIDwhLS0gRXJyb3IgU3RhdGUgLS0+XG4gICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgbW9kZT1cImVycm9yXCJcbiAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNpcmNsZS1leGNsYW1hdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLm1lbnUtbGlzdC5lbXB0eS1zdGF0ZXMuZXJyb3IudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmVycm9yLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgc2xvdD1cImFjdGlvbnNcIlxuICAgICAgICAgIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLnJldHJ5LnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICBbbG9va109XCInb3V0bGluZSdcIlxuICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImxvYWRNZW51SXRlbXMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0XCI+PC9pPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSBpZiAodHJlZU5vZGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlXG4gICAgICAgIG1vZGU9XCJlbXB0eVwiXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1iYXJzXCJcbiAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcbiAgICAgICAgXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIlxuICAgICAgICAgICgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgc2xvdD1cImFjdGlvbnNcIlxuICAgICAgICAgIFt0ZXh0XT1cIidAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5hZGQtcm9vdC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgW2xvb2tdPVwiJ3NvbGlkJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUm9vdE1lbnVJdGVtKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIE1lbnUgVHJlZSBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImF4bS1tZW51LWxpc3RfX2NvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIE1lbnUgVHJlZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4bS1tZW51LWxpc3RfX3RyZWVcIj5cbiAgICAgICAgICA8YXgtdHJlZS12aWV3XG4gICAgICAgICAgICBbKGRhdGFzb3VyY2UpXT1cInRyZWVOb2Rlc1wiXG4gICAgICAgICAgICBbbG9va109XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW3NlbGVjdE1vZGVdPVwiJ25vbmUnXCJcbiAgICAgICAgICAgIFtzaG93SWNvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dDaGlsZHJlbkJhZGdlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkcmFnQmVoYXZpb3JdPVwiJ21vdmUnXCJcbiAgICAgICAgICAgIFtkcmFnQXJlYV09XCInaGFuZGxlcidcIlxuICAgICAgICAgICAgKG9uQmVmb3JlRHJvcCk9XCJoYW5kbGVCZWZvcmVEcm9wKCRldmVudClcIlxuICAgICAgICAgICAgKG9uSXRlbXNDaGFuZ2UpPVwiaGFuZGxlQWZ0ZXJEcm9wKCRldmVudClcIlxuICAgICAgICAgID48L2F4LXRyZWUtdmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuXG48IS0tIEN1c3RvbSBJdGVtIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LW5vZGU9XCJub2RlXCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgQGxldCBub2RlRGF0YSA9IG5vZGVbJ2RhdGEnXTtcbiAgQGxldCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gIEBsZXQgbWV0YWRhdGEgPSBub2RlRGF0YS5tZXRhZGF0YTtcbiAgPGRpdlxuICAgIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyXCJcbiAgICBbY2xhc3MuYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyLS1oaWRkZW5dPVwibWV0YWRhdGEuaXNIaWRkZW5cIlxuICAgIFtjbGFzcy5heG0tbWVudS10cmVlLWl0ZW1fX3dyYXBwZXItLWN1c3RvbV09XCJtZXRhZGF0YS5pc0N1c3RvbVwiXG4gICAgW2NsYXNzLmF4bS1tZW51LXRyZWUtaXRlbV9fd3JhcHBlci0tZ3JvdXBdPVwiaXRlbS50eXBlID09PSAnZ3JvdXAnXCJcbiAgPlxuICAgIDwhLS0gSWNvbiAoaGlkZGVuIGZvciBncm91cHMpIC0tPlxuICAgIEBpZiAoaXRlbS5pY29uICYmIGl0ZW0udHlwZSAhPT0gJ2dyb3VwJykge1xuICAgICAgPGkgY2xhc3M9XCJheG0tbWVudS10cmVlLWl0ZW1fX2ljb25cIiBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgIH1cblxuICAgIDwhLS0gVGV4dCBvciBJbmZvIC0tPlxuICAgIEBpZiAoaXRlbS50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICA8IS0tIEdyb3VwIEhlYWRpbmcgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fZ3JvdXBcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1sYXllci1ncm91cFwiPjwvaT5cbiAgICAgICAge3sgaXRlbS50ZXh0IHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdicmVhaycpIHtcbiAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19kaXZpZGVyXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbWludXNcIj48L2k+XG4gICAgICAgIHt7ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmRpdmlkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnRleHQpIHtcbiAgICAgIDwhLS0gUmVndWxhciBNZW51IEl0ZW0gLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fdGV4dFwiPlxuICAgICAgICB7eyBpdGVtLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2UgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgPCEtLSBQYXRoLW9ubHkgSXRlbSAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19wYXRoXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbGlua1wiPjwvaT5cbiAgICAgICAge3sgaXRlbS5wYXRoIH19XG4gICAgICA8L3NwYW4+XG4gICAgfVxuXG4gICAgPCEtLSBNZW51IE5hbWUvS2V5IC0tPlxuICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgICA8Y29kZSBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fbmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvY29kZT5cbiAgICB9XG5cbiAgICA8IS0tIFN0YXR1cyBCYWRnZXMgLS0+XG4gICAgQGlmIChtZXRhZGF0YS5pc0hpZGRlbikge1xuICAgICAgPGF4LWJhZGdlXG4gICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LnN0YXRlcy5oaWRkZW4nIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH0gQGVsc2UgaWYgKG1ldGFkYXRhLmlzQ3VzdG9tKSB7XG4gICAgICA8YXgtYmFkZ2VcbiAgICAgICAgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmN1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgY29sb3I9XCJzdWNjZXNzXCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH0gQGVsc2UgaWYgKG1ldGFkYXRhLmlzQnVpbHRJbikge1xuICAgICAgPGF4LWJhZGdlXG4gICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LnN0YXRlcy5idWlsdC1pbicgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH1cblxuICAgIDwhLS0gQWN0aW9ucyBEcm9wZG93biAtLT5cbiAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19hY3Rpb25zXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIFtzaXplXT1cIidzbSdcIiBbaWNvbk9ubHldPVwidHJ1ZVwiPlxuICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgIDwvYXgtcHJlZml4PlxuXG4gICAgICA8YXgtZHJvcGRvd24tcGFuZWwgI3BhbmVsPlxuICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICA8IS0tIEVkaXQgKG9ubHkgZm9yIGl0ZW1zIHdpdGggbmFtZXMpIC0tPlxuICAgICAgICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgW3RleHRdPVwiKCdAZ2VuZXJhbDphY3Rpb25zLmVkaXQudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdlZGl0Jywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIFNob3cvSGlkZSAob25seSBmb3IgaXRlbXMgd2l0aCBuYW1lcykgLS0+XG4gICAgICAgICAgQGlmIChpdGVtLm5hbWUgJiYgbWV0YWRhdGEuaXNCdWlsdEluKSB7XG4gICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuc2hvdy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkFjdGlvbignc2hvdycsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1leWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5oaWRlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdoaWRlJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV5ZS1zbGFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKCFpdGVtLnBhdGggJiYgKGl0ZW0udHlwZSA9PT0gJ21lbnUnIHx8ICFpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICA8IS0tIEFkZCBDaGlsZCAtLT5cbiAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICBbdGV4dF09XCIoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLmFkZC1jaGlsZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25BY3Rpb24oJ2FkZC1jaGlsZCcsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBEZWxldGUgKG9ubHkgZm9yIGN1c3RvbSBpdGVtcyB3aXRoIG5hbWVzKSAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW0ubmFtZSAmJiBtZXRhZGF0YS5pc0N1c3RvbSkge1xuICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgIFtjb2xvcl09XCInZGFuZ2VyJ1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIignQGdlbmVyYWw6YWN0aW9ucy5kZWxldGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdkZWxldGUnLCBub2RlRGF0YSk7IHBhbmVsLmNsb3NlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIEluZm8gbWVzc2FnZSBmb3IgaXRlbXMgd2l0aG91dCBuYW1lcyAtLT5cbiAgICAgICAgICBAaWYgKCFpdGVtLm5hbWUpIHtcbiAgICAgICAgICAgIDxheC1kaXZpZGVyPjwvYXgtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTIgYXgtdGV4dC14cyBheC10ZXh0LW5ldXRyYWwtNTAwIGF4LWl0YWxpY1wiPlxuICAgICAgICAgICAgICB7eyAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmluZm8ubm8tbmFtZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-platform-management-menu-list.component-BxGLun0f.mjs","sources":["../tmp-esm2022/platform-management/lib/features/menu-management/pages/menu-list/menu-list.component.js"],"sourcesContent":["import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTreeViewComponent } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPMenuManagementService } from '../../menu-management.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/dropdown\";\nimport * as i4 from \"@acorex/components/badge\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"@acorex/core/translation\";\n//#region ---- Menu List Component ----\nexport class AXMMenuListComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n //#region ---- Dependencies ----\n this.menuManagementService = inject(AXPMenuManagementService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.dialogService = inject(AXDialogService);\n this.toastService = inject(AXToastService);\n this.translationService = inject(AXTranslationService);\n this.route = inject(ActivatedRoute);\n //#endregion\n //#region ---- Component State ----\n this.tree = viewChild(AXTreeViewComponent, ...(ngDevMode ? [{ debugName: \"tree\" }] : []));\n this.treeNodes = signal([], ...(ngDevMode ? [{ debugName: \"treeNodes\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.error = signal('', ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.currentScope = signal(AXPPlatformScope.User, ...(ngDevMode ? [{ debugName: \"currentScope\" }] : []));\n this.isSyncing = false; // Prevent concurrent sync operations\n this.destroy$ = new Subject(); // For subscription cleanup\n }\n //#endregion\n //#region ---- Lifecycle ----\n async ngOnInit() {\n await super.ngOnInit();\n // Get scope from route (with memory leak prevention)\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(async (params) => {\n const scope = params['scope'];\n if (scope) {\n this.currentScope.set(scope);\n await this.loadMenuItems();\n this.recompute(); // Update page header after loading\n }\n });\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle before drop validation\n */\n async handleBeforeDrop(e) {\n console.log('[handleBeforeDrop] Event triggered!', {\n movedNode: e.movedNode?.['id'],\n previousParent: e.previousParent?.['id'],\n currentParent: e.currentParent?.['id'],\n previousIndex: e.previousIndex,\n currentIndex: e.currentIndex,\n });\n const targetParent = e.currentParent?.['data'] || null;\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n e.canceled = true;\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.move');\n this.toastService.warning(message);\n return;\n }\n // Note: Circular reference validation is handled by the tree component itself\n // Additional validation can be added here if needed based on business rules\n }\n /**\n * Handle after drop event to sync changes\n * The event contains information about the moved node and its new position\n */\n async handleAfterDrop(event) {\n console.log('[handleAfterDrop] Event triggered!', {\n movedNode: event.node?.['id'],\n movedNodeData: event.node?.['data'],\n previousParent: event.previousParent?.['id'],\n currentParent: event.currentParent?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n // Check what the tree component has\n const treeComp = this.tree();\n if (treeComp) {\n console.log('[handleAfterDrop] Tree component datasource:', treeComp.datasource);\n }\n // Check our signal\n console.log('[handleAfterDrop] Our treeNodes signal:', this.treeNodes());\n await this.syncTreeChanges();\n }\n //#endregion\n //#region ---- Data Loading ----\n /**\n * Load menu tree for current scope\n */\n async loadMenuItems() {\n try {\n this.isLoading.set(true);\n this.error.set('');\n const treeNodes = await this.menuManagementService.getMenuTreeByScope(this.currentScope());\n this.treeNodes.set(treeNodes);\n this.recompute();\n }\n catch (error) {\n this.error.set(error instanceof Error ? error.message : 'Failed to load menu items');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.load');\n this.toastService.danger(message);\n }\n finally {\n this.isLoading.set(false);\n }\n }\n /**\n * Sync tree changes to backend\n */\n async syncTreeChanges() {\n // Prevent concurrent sync operations\n if (this.isSyncing) {\n return;\n }\n try {\n this.isSyncing = true;\n const scope = this.currentScope();\n // Get nodes from signal - the tree component mutates the array in place\n // so this.treeNodes() will have the updated structure after drag-drop\n const nodes = this.treeNodes();\n console.log('[syncTreeChanges] nodes count:', nodes?.length);\n // Log detailed node structure\n const logNode = (n, level = 0) => ({\n id: n['id'],\n title: n['title'],\n level,\n childrenCount: n['children']?.length ?? 0,\n children: n['children']?.map((c) => logNode(c, level + 1)) ?? [],\n });\n console.log('[syncTreeChanges] Full tree structure:', JSON.stringify(nodes?.map(n => logNode(n)), null, 2));\n if (!nodes || nodes.length === 0) {\n console.log('[syncTreeChanges] No nodes to sync');\n return;\n }\n await this.menuManagementService.syncTreeChangesByScope(scope, nodes);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reorder');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to sync tree changes:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.sync');\n this.toastService.danger(message);\n }\n finally {\n this.isSyncing = false;\n }\n }\n //#endregion\n //#region ---- Page Layout Interface ----\n /**\n * Get page title\n */\n async getPageTitle() {\n const scopeName = this.currentScope();\n const scopeKey = scopeName === AXPPlatformScope.User ? 'user' : 'tenant';\n return this.translationService.translateAsync(`@platform-management:menu-management.menus.${scopeKey}.title`);\n }\n /**\n * Get page description\n */\n async getPageDescription() {\n return this.translationService.translateAsync('@platform-management:menu-management.components.menu-list.description');\n }\n /**\n * Get primary menu items (actions)\n */\n async getPrimaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.add-root.title'),\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: { name: 'add-root' },\n },\n ];\n }\n /**\n * Get secondary menu items\n */\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.collapse.title'),\n icon: 'fa-light fa-minus-square',\n command: { name: 'collapse' },\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.expand.title'),\n icon: 'fa-light fa-plus-square',\n command: { name: 'expand' },\n break: true,\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.title'),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'reset' },\n },\n ];\n }\n /**\n * Execute commands from page actions\n */\n async execute(command) {\n switch (command.name) {\n case 'add-root':\n await this.addRootMenuItem();\n break;\n case 'collapse':\n this.tree()?.collapseAll();\n break;\n case 'expand':\n this.tree()?.expandAll();\n break;\n case 'reset':\n await this.resetCustomizations();\n break;\n }\n }\n //#endregion\n //#region ---- Action Handlers ----\n /**\n * Handle menu item action\n */\n async onAction(action, nodeData) {\n switch (action) {\n case 'show':\n await this.showMenuItem(nodeData);\n break;\n case 'hide':\n await this.hideMenuItem(nodeData);\n break;\n case 'edit':\n await this.editMenuItem(nodeData);\n break;\n case 'delete':\n await this.deleteMenuItem(nodeData);\n break;\n case 'add-child':\n await this.addChildMenuItem(nodeData);\n break;\n }\n }\n /**\n * Add new root menu item\n */\n async addRootMenuItem() {\n await this.showMenuItemDialog(null, null);\n }\n /**\n * Add new child menu item\n */\n async addChildMenuItem(parentNodeData) {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name);\n }\n /**\n * Reset customizations\n */\n async resetCustomizations() {\n const title = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizationsByScope(this.currentScope());\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reset');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to reset customizations:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.reset');\n this.toastService.danger(message);\n }\n finally {\n // Reload anyway to show current state\n await this.loadMenuItems();\n }\n }\n //#endregion\n //#region ---- Menu Item Actions ----\n /**\n * Show menu item\n */\n async showMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.showMenuItemByScope(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.show', '@platform-management:menu-management.messages.error.show');\n }\n /**\n * Hide menu item\n */\n async hideMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.hideMenuItemByScope(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.hide', '@platform-management:menu-management.messages.error.hide');\n }\n /**\n * Edit menu item\n */\n async editMenuItem(nodeData) {\n await this.showMenuItemDialog(nodeData);\n }\n /**\n * Delete custom menu item\n */\n async deleteMenuItem(nodeData) {\n const title = await this.translationService.translateAsync('@general:actions.delete.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.delete.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n const item = nodeData.menuItem;\n if (!item.name)\n return;\n await this.menuManagementService.deleteCustomMenuItemByScope(this.currentScope(), item.name);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.delete');\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.delete');\n this.toastService.danger(message);\n }\n }\n //#endregion\n //#region ---- Dialog Helpers ----\n /**\n * Show menu item dialog (add/edit)\n */\n async showMenuItemDialog(nodeData, parentName = null) {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n const context = {\n name: item?.name || '',\n text: item?.text || '',\n type: item?.type || 'menu',\n icon: item?.icon || '',\n path: item?.path || '',\n priority: item?.priority || 0,\n description: item?.description || '',\n };\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@platform-management:menu-management.fields.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.text', (field) => {\n field.path('text');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@platform-management:menu-management.fields.icon', (field) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@platform-management:menu-management.fields.path', (field) => {\n field.path('path');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.priority', (field) => {\n field.path('priority');\n field.numberBox({\n placeholder: '@platform-management:menu-management.fields.priority',\n step: 10,\n });\n })\n .formField('@platform-management:menu-management.fields.description', (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@platform-management:menu-management.fields.description',\n rows: 3,\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n const formData = dialogRef.context();\n try {\n if (isEdit && item?.name) {\n // Update existing item\n if (nodeData?.metadata?.isCustom) {\n await this.menuManagementService.updateCustomMenuItemByScope(this.currentScope(), item.name, formData);\n }\n else {\n await this.menuManagementService.updateMenuPropertiesByScope(this.currentScope(), item.name, formData);\n }\n }\n else {\n // Add new custom item\n const newItem = {\n name: formData.name,\n text: formData.text,\n icon: formData.icon,\n path: formData.path,\n priority: formData.priority,\n description: formData.description,\n };\n // If parent is specified, add as child\n if (parentName) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, parentName);\n }\n else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, null);\n }\n }\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.save');\n this.toastService.success(message);\n await this.loadMenuItems();\n dialogRef.close();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.save');\n this.toastService.danger(message);\n }\n }\n /**\n * Execute a menu action with common error handling\n */\n async executeMenuAction(action, successMessageKey, errorMessageKey) {\n try {\n await action();\n const message = await this.translationService.translateAsync(successMessageKey);\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n console.error('Menu action failed:', error);\n const message = await this.translationService.translateAsync(errorMessageKey);\n this.toastService.danger(message);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMMenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMMenuListComponent, isStandalone: true, selector: \"axm-menu-list\", host: { classAttribute: \"axm-menu-list-page\" }, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], viewQueries: [{ propertyName: \"tree\", first: true, predicate: AXTreeViewComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\\n | translate\\n | async)!\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree-view\\n [(datasource)]=\\\"treeNodes\\\"\\n [look]=\\\"'default'\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n [selectMode]=\\\"'none'\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [dragBehavior]=\\\"'move'\\\"\\n [dragArea]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop($event)\\\"\\n ></ax-tree-view>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node['data'];\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\"\\n >\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"\\n ></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"\\n ></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"\\n ></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i1.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i1.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i3.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"datasource\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"nodeTemplate\", \"idField\", \"titleField\", \"tooltipField\", \"iconField\", \"expandedField\", \"selectedField\", \"indeterminateField\", \"disabledField\", \"hiddenField\", \"childrenField\", \"childrenCountField\", \"dataField\", \"inheritDisabled\", \"expandOnDoubleClick\", \"doubleClickDuration\", \"tooltipDelay\"], outputs: [\"datasourceChange\", \"onBeforeDrop\", \"onNodeToggle\", \"onNodeSelect\", \"onNodeDoubleClick\", \"onNodeClick\", \"onSelectionChange\", \"onOrderChange\", \"onMoveChange\", \"onItemsChange\"] }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i4.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMMenuListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-menu-list', imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], host: { class: 'axm-menu-list-page' }, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\\n | translate\\n | async)!\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\n \\\"\\n [description]=\\\"\\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\\n | translate\\n | async)!\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree-view\\n [(datasource)]=\\\"treeNodes\\\"\\n [look]=\\\"'default'\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n [selectMode]=\\\"'none'\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [dragBehavior]=\\\"'move'\\\"\\n [dragArea]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop($event)\\\"\\n ></ax-tree-view>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node['data'];\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\"\\n >\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"\\n ></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"\\n ></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge\\n [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"\\n ></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item\\n [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"] }]\n }], propDecorators: { tree: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXTreeViewComponent), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9wbGF0Zm9ybS1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvbWVudS1tYW5hZ2VtZW50L3BhZ2VzL21lbnUtbGlzdC9tZW51LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3BsYXRmb3JtLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZW51LW1hbmFnZW1lbnQvcGFnZXMvbWVudS1saXN0L21lbnUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUE2QixtQkFBbUIsRUFBdUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRixPQUFPLEVBQXdDLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFF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YUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxzQkFBc0I7eUJBQ2xDO3FCQUNGLFFBQ0ssRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7c0ZBZ0JWLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRHJvcGRvd25CdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IEFYVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RvYXN0JztcbmltcG9ydCB7IEFYVHJlZVZpZXdCZWZvcmVEcm9wRXZlbnQsIEFYVHJlZVZpZXdDb21wb25lbnQsIEFYVHJlZVZpZXdEcm9wRXZlbnQsIEFYVHJlZVZpZXdOb2RlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RyZWUtdmlldyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlLCBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBNZW51SXRlbSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEFjdGlvbk1lbnVJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCwgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50LCBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBQYWdlTGF5b3V0QmFzZSwgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQsIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC92aWV3cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQTWVudUl0ZW1BY3Rpb24gfSBmcm9tICcuLi8uLi9tZW51LWN1c3RvbWl6YXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQTWVudU1hbmFnZW1lbnRTZXJ2aWNlLCBBWFBNZW51VHJlZU5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbWVudS1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuXG4vLyNyZWdpb24gLS0tLSAgIE1lbnUgTGlzdCBDb21wb25lbnQgICAtLS0tXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1tZW51LWxpc3QnLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bk1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYVHJlZVZpZXdDb21wb25lbnQsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBWEJhZGdlTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1NZW51TGlzdENvbXBvbmVudCxcbiAgICB9LFxuICBdLFxuICBob3N0OiB7IGNsYXNzOiAnYXhtLW1lbnUtbGlzdC1wYWdlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBBWE1NZW51TGlzdENvbXBvbmVudCBleHRlbmRzIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyNyZWdpb24gLS0tLSAgIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIG1lbnVNYW5hZ2VtZW50U2VydmljZSA9IGluamVjdChBWFBNZW51TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dEJ1aWxkZXIgPSBpbmplY3QoQVhQTGF5b3V0QnVpbGRlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZSA9IGluamVjdChBWERpYWxvZ1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCBTdGF0ZSAgIC0tLS1cblxuICBwcm90ZWN0ZWQgdHJlZSA9IHZpZXdDaGlsZChBWFRyZWVWaWV3Q29tcG9uZW50KTtcbiAgcHJvdGVjdGVkIHRyZWVOb2RlcyA9IHNpZ25hbDxBWFRyZWVWaWV3Tm9kZVtdPihbXSk7XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjdXJyZW50U2NvcGUgPSBzaWduYWw8QVhQUGxhdGZvcm1TY29wZT4oQVhQUGxhdGZvcm1TY29wZS5Vc2VyKTtcbiAgcHJpdmF0ZSBpc1N5bmNpbmcgPSBmYWxzZTsgLy8gUHJldmVudCBjb25jdXJyZW50IHN5bmMgb3BlcmF0aW9uc1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTsgLy8gRm9yIHN1YnNjcmlwdGlvbiBjbGVhbnVwXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgICAtLS0tXG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEdldCBzY29wZSBmcm9tIHJvdXRlICh3aXRoIG1lbW9yeSBsZWFrIHByZXZlbnRpb24pXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IHBhcmFtc1snc2NvcGUnXSBhcyBBWFBQbGF0Zm9ybVNjb3BlO1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlLnNldChzY29wZSk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgICB0aGlzLnJlY29tcHV0ZSgpOyAvLyBVcGRhdGUgcGFnZSBoZWFkZXIgYWZ0ZXIgbG9hZGluZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBFdmVudCBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlIGJlZm9yZSBkcm9wIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIGhhbmRsZUJlZm9yZURyb3AoZTogQVhUcmVlVmlld0JlZm9yZURyb3BFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQmVmb3JlRHJvcF0gRXZlbnQgdHJpZ2dlcmVkIScsIHtcbiAgICAgIG1vdmVkTm9kZTogZS5tb3ZlZE5vZGU/LlsnaWQnXSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiBlLnByZXZpb3VzUGFyZW50Py5bJ2lkJ10sXG4gICAgICBjdXJyZW50UGFyZW50OiBlLmN1cnJlbnRQYXJlbnQ/LlsnaWQnXSxcbiAgICAgIHByZXZpb3VzSW5kZXg6IGUucHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleDogZS5jdXJyZW50SW5kZXgsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSAoZS5jdXJyZW50UGFyZW50Py5bJ2RhdGEnXSBhcyBBWFBNZW51VHJlZU5vZGVEYXRhKSB8fCBudWxsO1xuXG4gICAgLy8gUHJldmVudCBkcm9wcGluZyBpbnRvIGl0ZW1zIHdpdGggcGF0aHMgKGxlYWYgbm9kZXMpXG4gICAgaWYgKHRhcmdldFBhcmVudD8ubWVudUl0ZW0/LnBhdGgpIHtcbiAgICAgIGUuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmVycm9yLm1vdmUnLFxuICAgICAgKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLndhcm5pbmcobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm90ZTogQ2lyY3VsYXIgcmVmZXJlbmNlIHZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgdHJlZSBjb21wb25lbnQgaXRzZWxmXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGNhbiBiZSBhZGRlZCBoZXJlIGlmIG5lZWRlZCBiYXNlZCBvbiBidXNpbmVzcyBydWxlc1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZnRlciBkcm9wIGV2ZW50IHRvIHN5bmMgY2hhbmdlc1xuICAgKiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vdmVkIG5vZGUgYW5kIGl0cyBuZXcgcG9zaXRpb25cbiAgICovXG4gIGFzeW5jIGhhbmRsZUFmdGVyRHJvcChldmVudDogQVhUcmVlVmlld0Ryb3BFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQWZ0ZXJEcm9wXSBFdmVudCB0cmlnZ2VyZWQhJywge1xuICAgICAgbW92ZWROb2RlOiBldmVudC5ub2RlPy5bJ2lkJ10sXG4gICAgICBtb3ZlZE5vZGVEYXRhOiBldmVudC5ub2RlPy5bJ2RhdGEnXSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiBldmVudC5wcmV2aW91c1BhcmVudD8uWydpZCddLFxuICAgICAgY3VycmVudFBhcmVudDogZXZlbnQuY3VycmVudFBhcmVudD8uWydpZCddLFxuICAgICAgcHJldmlvdXNJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleDogZXZlbnQuY3VycmVudEluZGV4LFxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgd2hhdCB0aGUgdHJlZSBjb21wb25lbnQgaGFzXG4gICAgY29uc3QgdHJlZUNvbXAgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAodHJlZUNvbXApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbaGFuZGxlQWZ0ZXJEcm9wXSBUcmVlIGNvbXBvbmVudCBkYXRhc291cmNlOicsIHRyZWVDb21wLmRhdGFzb3VyY2UpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIG91ciBzaWduYWxcbiAgICBjb25zb2xlLmxvZygnW2hhbmRsZUFmdGVyRHJvcF0gT3VyIHRyZWVOb2RlcyBzaWduYWw6JywgdGhpcy50cmVlTm9kZXMoKSk7XG5cbiAgICBhd2FpdCB0aGlzLnN5bmNUcmVlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIExvYWQgbWVudSB0cmVlIGZvciBjdXJyZW50IHNjb3BlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZE1lbnVJdGVtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoJycpO1xuXG4gICAgICBjb25zdCB0cmVlTm9kZXMgPSBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5nZXRNZW51VHJlZUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICB0aGlzLnRyZWVOb2Rlcy5zZXQodHJlZU5vZGVzKTtcbiAgICAgIHRoaXMucmVjb21wdXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIG1lbnUgaXRlbXMnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5sb2FkJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgdHJlZSBjaGFuZ2VzIHRvIGJhY2tlbmRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3luY1RyZWVDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFByZXZlbnQgY29uY3VycmVudCBzeW5jIG9wZXJhdGlvbnNcbiAgICBpZiAodGhpcy5pc1N5bmNpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc1N5bmNpbmcgPSB0cnVlO1xuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuXG4gICAgICAvLyBHZXQgbm9kZXMgZnJvbSBzaWduYWwgLSB0aGUgdHJlZSBjb21wb25lbnQgbXV0YXRlcyB0aGUgYXJyYXkgaW4gcGxhY2VcbiAgICAgIC8vIHNvIHRoaXMudHJlZU5vZGVzKCkgd2lsbCBoYXZlIHRoZSB1cGRhdGVkIHN0cnVjdHVyZSBhZnRlciBkcmFnLWRyb3BcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlTm9kZXMoKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tzeW5jVHJlZUNoYW5nZXNdIG5vZGVzIGNvdW50OicsIG5vZGVzPy5sZW5ndGgpO1xuICAgICAgXG4gICAgICAvLyBMb2cgZGV0YWlsZWQgbm9kZSBzdHJ1Y3R1cmVcbiAgICAgIGNvbnN0IGxvZ05vZGUgPSAobjogYW55LCBsZXZlbDogbnVtYmVyID0gMCk6IGFueSA9PiAoe1xuICAgICAgICBpZDogblsnaWQnXSxcbiAgICAgICAgdGl0bGU6IG5bJ3RpdGxlJ10sXG4gICAgICAgIGxldmVsLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiAoblsnY2hpbGRyZW4nXSBhcyBhbnlbXSk/Lmxlbmd0aCA/PyAwLFxuICAgICAgICBjaGlsZHJlbjogKG5bJ2NoaWxkcmVuJ10gYXMgYW55W10pPy5tYXAoKGM6IGFueSkgPT4gbG9nTm9kZShjLCBsZXZlbCArIDEpKSA/PyBbXSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tzeW5jVHJlZUNoYW5nZXNdIEZ1bGwgdHJlZSBzdHJ1Y3R1cmU6JywgSlNPTi5zdHJpbmdpZnkobm9kZXM/Lm1hcChuID0+IGxvZ05vZGUobikpLCBudWxsLCAyKSk7XG5cbiAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbc3luY1RyZWVDaGFuZ2VzXSBObyBub2RlcyB0byBzeW5jJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2Uuc3luY1RyZWVDaGFuZ2VzQnlTY29wZShzY29wZSwgbm9kZXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN1Y2Nlc3MucmVvcmRlcicsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN5bmMgdHJlZSBjaGFuZ2VzOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zeW5jJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTeW5jaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQYWdlIExheW91dCBJbnRlcmZhY2UgICAtLS0tXG5cbiAgLyoqXG4gICAqIEdldCBwYWdlIHRpdGxlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzY29wZU5hbWUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuICAgIGNvbnN0IHNjb3BlS2V5ID0gc2NvcGVOYW1lID09PSBBWFBQbGF0Zm9ybVNjb3BlLlVzZXIgPyAndXNlcicgOiAndGVuYW50JztcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoYEBwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZW51cy4ke3Njb3BlS2V5fS50aXRsZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYWdlIGRlc2NyaXB0aW9uXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlRGVzY3JpcHRpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmRlc2NyaXB0aW9uJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcmltYXJ5IG1lbnUgaXRlbXMgKGFjdGlvbnMpXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRQcmltYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuYWRkLXJvb3QudGl0bGUnLFxuICAgICAgICApLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2FkZC1yb290JyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWNvbmRhcnkgbWVudSBpdGVtc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuY29sbGFwc2UudGl0bGUnLFxuICAgICAgICApLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbWludXMtc3F1YXJlJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnY29sbGFwc2UnIH0sXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuZXhwYW5kLnRpdGxlJyxcbiAgICAgICAgKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsdXMtc3F1YXJlJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnZXhwYW5kJyB9LFxuICAgICAgICBicmVhazogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMucmVzZXQudGl0bGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0JyxcbiAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICBjb21tYW5kOiB7IG5hbWU6ICdyZXNldCcgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGNvbW1hbmRzIGZyb20gcGFnZSBhY3Rpb25zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ2FkZC1yb290JzpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRSb290TWVudUl0ZW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2xsYXBzZSc6XG4gICAgICAgIHRoaXMudHJlZSgpPy5jb2xsYXBzZUFsbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XG4gICAgICAgIHRoaXMudHJlZSgpPy5leHBhbmRBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgIGF3YWl0IHRoaXMucmVzZXRDdXN0b21pemF0aW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFjdGlvbiBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlIG1lbnUgaXRlbSBhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkFjdGlvbihhY3Rpb246IEFYUE1lbnVJdGVtQWN0aW9uLCBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICBhd2FpdCB0aGlzLmhpZGVNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdE1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZU1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGQtY2hpbGQnOlxuICAgICAgICBhd2FpdCB0aGlzLmFkZENoaWxkTWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyByb290IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFJvb3RNZW51SXRlbSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhudWxsLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGNoaWxkIG1lbnUgaXRlbVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZENoaWxkTWVudUl0ZW0ocGFyZW50Tm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhudWxsLCBwYXJlbnROb2RlRGF0YS5tZW51SXRlbS5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBjdXN0b21pemF0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc2V0Q3VzdG9taXphdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5yZXNldC5jb25maXJtLnRpdGxlJyxcbiAgICApO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5yZXNldC5jb25maXJtLm1lc3NhZ2UnLFxuICAgICk7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIG1lc3NhZ2UpO1xuXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBjdXN0b21pemF0aW9ucyBmb3IgY3VycmVudCBzY29wZVxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UucmVzZXRDdXN0b21pemF0aW9uc0J5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5yZXNldCcsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlc2V0IGN1c3RvbWl6YXRpb25zOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5yZXNldCcsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZWxvYWQgYW55d2F5IHRvIHNob3cgY3VycmVudCBzdGF0ZVxuICAgICAgYXdhaXQgdGhpcy5sb2FkTWVudUl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBNZW51IEl0ZW0gQWN0aW9ucyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvdyBtZW51IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd01lbnVJdGVtKG5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlTWVudUFjdGlvbihcbiAgICAgICgpID0+IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dNZW51SXRlbUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSwgbm9kZURhdGEubWVudUl0ZW0ubmFtZSEpLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zdWNjZXNzLnNob3cnLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zaG93JyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhpZGVNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24oXG4gICAgICAoKSA9PiB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5oaWRlTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIG5vZGVEYXRhLm1lbnVJdGVtLm5hbWUhKSxcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5oaWRlJyxcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3IuaGlkZScsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlZGl0TWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhub2RlRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGN1c3RvbSBtZW51IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlTWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAZ2VuZXJhbDphY3Rpb25zLmRlbGV0ZS50aXRsZScpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5kZWxldGUuY29uZmlybS5tZXNzYWdlJyxcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKHRpdGxlLCBtZXNzYWdlKTtcblxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgaXRlbSA9IG5vZGVEYXRhLm1lbnVJdGVtO1xuICAgICAgaWYgKCFpdGVtLm5hbWUpIHJldHVybjtcblxuICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuZGVsZXRlQ3VzdG9tTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIGl0ZW0ubmFtZSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5kZWxldGUnLFxuICAgICAgKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmVycm9yLmRlbGV0ZScsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRGlhbG9nIEhlbHBlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNob3cgbWVudSBpdGVtIGRpYWxvZyAoYWRkL2VkaXQpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dNZW51SXRlbURpYWxvZyhcbiAgICBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSB8IG51bGwsXG4gICAgcGFyZW50TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGl0ZW0gPSBub2RlRGF0YT8ubWVudUl0ZW07XG4gICAgY29uc3QgaXNFZGl0ID0gISFpdGVtO1xuICAgIGNvbnN0IHRpdGxlID0gaXNFZGl0XG4gICAgICA/ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5lZGl0LWRpYWxvZy50aXRsZSdcbiAgICAgIDogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLmFkZC1kaWFsb2cudGl0bGUnO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGl0ZW0/Lm5hbWUgfHwgJycsXG4gICAgICB0ZXh0OiBpdGVtPy50ZXh0IHx8ICcnLFxuICAgICAgdHlwZTogaXRlbT8udHlwZSB8fCAnbWVudScsXG4gICAgICBpY29uOiBpdGVtPy5pY29uIHx8ICcnLFxuICAgICAgcGF0aDogaXRlbT8ucGF0aCB8fCAnJyxcbiAgICAgIHByaW9yaXR5OiBpdGVtPy5wcmlvcml0eSB8fCAwLFxuICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBkaWFsb2dSZWY6IGFueSA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgLmNyZWF0ZSgpXG4gICAgICAuZGlhbG9nKChkaWFsb2c6IGFueSkgPT4ge1xuICAgICAgICBkaWFsb2dcbiAgICAgICAgICAuc2V0VGl0bGUodGl0bGUpXG4gICAgICAgICAgLnNldENvbnRleHQoY29udGV4dClcbiAgICAgICAgICAuY29udGVudCgoZmxleDogYW55KSA9PiB7XG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMubmFtZScsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnbmFtZScpO1xuICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLm5hbWUnLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbnM6IFt7IHJ1bGU6ICdyZXF1aXJlZCcgfV0sXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNFZGl0ICYmIG5vZGVEYXRhPy5tZXRhZGF0YT8uaXNCdWlsdEluLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnRleHQnLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3RleHQnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy50ZXh0JyxcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zOiBbeyBydWxlOiAncmVxdWlyZWQnIH1dLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLmljb24nLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2ljb24nKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2ljb24tY2hvb3NlcicsIHt9KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5wYXRoJywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdwYXRoJyk7XG4gICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMucGF0aCcsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNFZGl0ICYmIG5vZGVEYXRhPy5tZXRhZGF0YT8uaXNCdWlsdEluLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnByaW9yaXR5JywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdwcmlvcml0eScpO1xuICAgICAgICAgICAgICAgIGZpZWxkLm51bWJlckJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMucHJpb3JpdHknLFxuICAgICAgICAgICAgICAgICAgc3RlcDogMTAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMuZGVzY3JpcHRpb24nLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zZXRBY3Rpb25zKChhY3Rpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICBpZiAoYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpIGFzIFBhcnRpYWw8QVhQTWVudUl0ZW0+O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc0VkaXQgJiYgaXRlbT8ubmFtZSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbVxuICAgICAgICBpZiAobm9kZURhdGE/Lm1ldGFkYXRhPy5pc0N1c3RvbSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZUN1c3RvbU1lbnVJdGVtQnlTY29wZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCksXG4gICAgICAgICAgICBpdGVtLm5hbWUsXG4gICAgICAgICAgICBmb3JtRGF0YSBhcyBBWFBNZW51SXRlbSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZU1lbnVQcm9wZXJ0aWVzQnlTY29wZSh0aGlzLmN1cnJlbnRTY29wZSgpLCBpdGVtLm5hbWUsIGZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIG5ldyBjdXN0b20gaXRlbVxuICAgICAgICBjb25zdCBuZXdJdGVtOiBBWFBNZW51SXRlbSA9IHtcbiAgICAgICAgICBuYW1lOiBmb3JtRGF0YS5uYW1lISxcbiAgICAgICAgICB0ZXh0OiBmb3JtRGF0YS50ZXh0ISxcbiAgICAgICAgICBpY29uOiBmb3JtRGF0YS5pY29uLFxuICAgICAgICAgIHBhdGg6IGZvcm1EYXRhLnBhdGgsXG4gICAgICAgICAgcHJpb3JpdHk6IGZvcm1EYXRhLnByaW9yaXR5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiBwYXJlbnQgaXMgc3BlY2lmaWVkLCBhZGQgYXMgY2hpbGRcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgICAvLyBBZGQgY3VzdG9tIGl0ZW0gYXMgY2hpbGQgb2YgcGFyZW50XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuYWRkQ3VzdG9tTWVudUl0ZW1CeVNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCksIG5ld0l0ZW0sIHBhcmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCBhcyByb290IGxldmVsIGl0ZW1cbiAgICAgICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5hZGRDdXN0b21NZW51SXRlbUJ5U2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSwgbmV3SXRlbSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN1Y2Nlc3Muc2F2ZScsXG4gICAgICApO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zYXZlJyxcbiAgICAgICk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBtZW51IGFjdGlvbiB3aXRoIGNvbW1vbiBlcnJvciBoYW5kbGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTWVudUFjdGlvbihcbiAgICBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgc3VjY2Vzc01lc3NhZ2VLZXk6IHN0cmluZyxcbiAgICBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjdGlvbigpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKHN1Y2Nlc3NNZXNzYWdlS2V5KTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTWVudSBhY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhlcnJvck1lc3NhZ2VLZXkpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb25cbiIsIjxheHAtcGFnZS1sYXlvdXQ+XG4gIDxheHAtcGFnZS1jb250ZW50PlxuICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBtb2RlPVwibG9hZGluZ1wiXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIlxuICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmxvYWRpbmcudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmxvYWRpbmcuZGVzY3JpcHRpb24nXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfCBhc3luYykhXG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgIH0gQGVsc2UgaWYgKGVycm9yKCkpIHtcbiAgICAgIDwhLS0gRXJyb3IgU3RhdGUgLS0+XG4gICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgbW9kZT1cImVycm9yXCJcbiAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNpcmNsZS1leGNsYW1hdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLm1lbnUtbGlzdC5lbXB0eS1zdGF0ZXMuZXJyb3IudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiXG4gICAgICAgICAgKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmVycm9yLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgc2xvdD1cImFjdGlvbnNcIlxuICAgICAgICAgIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLnJldHJ5LnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICBbbG9va109XCInb3V0bGluZSdcIlxuICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImxvYWRNZW51SXRlbXMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0XCI+PC9pPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSBpZiAodHJlZU5vZGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlXG4gICAgICAgIG1vZGU9XCJlbXB0eVwiXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1iYXJzXCJcbiAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcbiAgICAgICAgXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIlxuICAgICAgICAgICgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIHwgYXN5bmMpIVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgc2xvdD1cImFjdGlvbnNcIlxuICAgICAgICAgIFt0ZXh0XT1cIidAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5hZGQtcm9vdC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgW2xvb2tdPVwiJ3NvbGlkJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUm9vdE1lbnVJdGVtKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIE1lbnUgVHJlZSBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImF4bS1tZW51LWxpc3RfX2NvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIE1lbnUgVHJlZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4bS1tZW51LWxpc3RfX3RyZWVcIj5cbiAgICAgICAgICA8YXgtdHJlZS12aWV3XG4gICAgICAgICAgICBbKGRhdGFzb3VyY2UpXT1cInRyZWVOb2Rlc1wiXG4gICAgICAgICAgICBbbG9va109XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW3NlbGVjdE1vZGVdPVwiJ25vbmUnXCJcbiAgICAgICAgICAgIFtzaG93SWNvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dDaGlsZHJlbkJhZGdlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkcmFnQmVoYXZpb3JdPVwiJ21vdmUnXCJcbiAgICAgICAgICAgIFtkcmFnQXJlYV09XCInaGFuZGxlcidcIlxuICAgICAgICAgICAgKG9uQmVmb3JlRHJvcCk9XCJoYW5kbGVCZWZvcmVEcm9wKCRldmVudClcIlxuICAgICAgICAgICAgKG9uSXRlbXNDaGFuZ2UpPVwiaGFuZGxlQWZ0ZXJEcm9wKCRldmVudClcIlxuICAgICAgICAgID48L2F4LXRyZWUtdmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuXG48IS0tIEN1c3RvbSBJdGVtIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LW5vZGU9XCJub2RlXCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgQGxldCBub2RlRGF0YSA9IG5vZGVbJ2RhdGEnXTtcbiAgQGxldCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gIEBsZXQgbWV0YWRhdGEgPSBub2RlRGF0YS5tZXRhZGF0YTtcbiAgPGRpdlxuICAgIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyXCJcbiAgICBbY2xhc3MuYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyLS1oaWRkZW5dPVwibWV0YWRhdGEuaXNIaWRkZW5cIlxuICAgIFtjbGFzcy5heG0tbWVudS10cmVlLWl0ZW1fX3dyYXBwZXItLWN1c3RvbV09XCJtZXRhZGF0YS5pc0N1c3RvbVwiXG4gICAgW2NsYXNzLmF4bS1tZW51LXRyZWUtaXRlbV9fd3JhcHBlci0tZ3JvdXBdPVwiaXRlbS50eXBlID09PSAnZ3JvdXAnXCJcbiAgPlxuICAgIDwhLS0gSWNvbiAoaGlkZGVuIGZvciBncm91cHMpIC0tPlxuICAgIEBpZiAoaXRlbS5pY29uICYmIGl0ZW0udHlwZSAhPT0gJ2dyb3VwJykge1xuICAgICAgPGkgY2xhc3M9XCJheG0tbWVudS10cmVlLWl0ZW1fX2ljb25cIiBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgIH1cblxuICAgIDwhLS0gVGV4dCBvciBJbmZvIC0tPlxuICAgIEBpZiAoaXRlbS50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICA8IS0tIEdyb3VwIEhlYWRpbmcgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fZ3JvdXBcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1sYXllci1ncm91cFwiPjwvaT5cbiAgICAgICAge3sgaXRlbS50ZXh0IHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdicmVhaycpIHtcbiAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19kaXZpZGVyXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbWludXNcIj48L2k+XG4gICAgICAgIHt7ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmRpdmlkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnRleHQpIHtcbiAgICAgIDwhLS0gUmVndWxhciBNZW51IEl0ZW0gLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fdGV4dFwiPlxuICAgICAgICB7eyBpdGVtLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2UgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgPCEtLSBQYXRoLW9ubHkgSXRlbSAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19wYXRoXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbGlua1wiPjwvaT5cbiAgICAgICAge3sgaXRlbS5wYXRoIH19XG4gICAgICA8L3NwYW4+XG4gICAgfVxuXG4gICAgPCEtLSBNZW51IE5hbWUvS2V5IC0tPlxuICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgICA8Y29kZSBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fbmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvY29kZT5cbiAgICB9XG5cbiAgICA8IS0tIFN0YXR1cyBCYWRnZXMgLS0+XG4gICAgQGlmIChtZXRhZGF0YS5pc0hpZGRlbikge1xuICAgICAgPGF4LWJhZGdlXG4gICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LnN0YXRlcy5oaWRkZW4nIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH0gQGVsc2UgaWYgKG1ldGFkYXRhLmlzQ3VzdG9tKSB7XG4gICAgICA8YXgtYmFkZ2VcbiAgICAgICAgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmN1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgY29sb3I9XCJzdWNjZXNzXCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH0gQGVsc2UgaWYgKG1ldGFkYXRhLmlzQnVpbHRJbikge1xuICAgICAgPGF4LWJhZGdlXG4gICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LnN0YXRlcy5idWlsdC1pbicgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgID48L2F4LWJhZGdlPlxuICAgIH1cblxuICAgIDwhLS0gQWN0aW9ucyBEcm9wZG93biAtLT5cbiAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19hY3Rpb25zXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIFtzaXplXT1cIidzbSdcIiBbaWNvbk9ubHldPVwidHJ1ZVwiPlxuICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgIDwvYXgtcHJlZml4PlxuXG4gICAgICA8YXgtZHJvcGRvd24tcGFuZWwgI3BhbmVsPlxuICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICA8IS0tIEVkaXQgKG9ubHkgZm9yIGl0ZW1zIHdpdGggbmFtZXMpIC0tPlxuICAgICAgICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgW3RleHRdPVwiKCdAZ2VuZXJhbDphY3Rpb25zLmVkaXQudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdlZGl0Jywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIFNob3cvSGlkZSAob25seSBmb3IgaXRlbXMgd2l0aCBuYW1lcykgLS0+XG4gICAgICAgICAgQGlmIChpdGVtLm5hbWUgJiYgbWV0YWRhdGEuaXNCdWlsdEluKSB7XG4gICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuc2hvdy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkFjdGlvbignc2hvdycsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1leWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5oaWRlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdoaWRlJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV5ZS1zbGFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKCFpdGVtLnBhdGggJiYgKGl0ZW0udHlwZSA9PT0gJ21lbnUnIHx8ICFpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICA8IS0tIEFkZCBDaGlsZCAtLT5cbiAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICBbdGV4dF09XCIoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLmFkZC1jaGlsZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25BY3Rpb24oJ2FkZC1jaGlsZCcsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBEZWxldGUgKG9ubHkgZm9yIGN1c3RvbSBpdGVtcyB3aXRoIG5hbWVzKSAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW0ubmFtZSAmJiBtZXRhZGF0YS5pc0N1c3RvbSkge1xuICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgIFtjb2xvcl09XCInZGFuZ2VyJ1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIignQGdlbmVyYWw6YWN0aW9ucy5kZWxldGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdkZWxldGUnLCBub2RlRGF0YSk7IHBhbmVsLmNsb3NlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIEluZm8gbWVzc2FnZSBmb3IgaXRlbXMgd2l0aG91dCBuYW1lcyAtLT5cbiAgICAgICAgICBAaWYgKCFpdGVtLm5hbWUpIHtcbiAgICAgICAgICAgIDxheC1kaXZpZGVyPjwvYXgtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTIgYXgtdGV4dC14cyBheC10ZXh0LW5ldXRyYWwtNTAwIGF4LWl0YWxpY1wiPlxuICAgICAgICAgICAgICB7eyAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmluZm8ubm8tbmFtZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0="],"names":[],"mappings":"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"}
|