aril 1.0.50 → 1.0.52

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.
Files changed (68) hide show
  1. package/boot/host/src/app.component.d.ts +5 -1
  2. package/esm2022/boot/host/src/app.component.mjs +28 -4
  3. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +30 -33
  4. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +31 -36
  5. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +3 -3
  6. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +171 -0
  7. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +1 -4
  8. package/esm2022/theme/layout/service/app.layout.service.mjs +110 -39
  9. package/esm2022/ui/charts/index.mjs +7 -1
  10. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +114 -0
  11. package/esm2022/ui/charts/src/highCharts/gauge/solid-gauge.component.mjs +180 -0
  12. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +252 -0
  13. package/esm2022/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.mjs +187 -0
  14. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +89 -0
  15. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +82 -0
  16. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +7 -26
  17. package/esm2022/ui/text/src/text.component.mjs +10 -3
  18. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +3 -2
  19. package/fesm2022/{aril-app.component-ZRi2TVtr.mjs → aril-app.component-CZalL4tu.mjs} +5 -5
  20. package/fesm2022/aril-app.component-CZalL4tu.mjs.map +1 -0
  21. package/fesm2022/aril-boot-host.mjs +27 -3
  22. package/fesm2022/aril-boot-host.mjs.map +1 -1
  23. package/fesm2022/aril-theme-layout.mjs +371 -557
  24. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  25. package/fesm2022/aril-ui-charts.mjs +881 -5
  26. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  27. package/fesm2022/aril-ui-lib.mjs +6 -25
  28. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  29. package/fesm2022/aril-ui-text.mjs +9 -2
  30. package/fesm2022/aril-ui-text.mjs.map +1 -1
  31. package/fesm2022/aril-util-pub-sub.mjs +2 -1
  32. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  33. package/fesm2022/aril.mjs +28 -4
  34. package/fesm2022/aril.mjs.map +1 -1
  35. package/package.json +66 -66
  36. package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +3 -5
  37. package/theme/layout/app/expandableMenu/expandable-menu.component.ts +35 -40
  38. package/theme/layout/app/layout/app.layout.component.d.ts +4 -11
  39. package/theme/layout/app/layout/app.layout.component.html +6 -3
  40. package/theme/layout/app/layout/app.layout.component.ts +26 -42
  41. package/theme/layout/app/site-map/site-map-sidebar.component.html +1 -1
  42. package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +44 -0
  43. package/theme/layout/app/static-sidebar/static-sidebar.component.html +60 -0
  44. package/theme/layout/app/static-sidebar/static-sidebar.component.scss +223 -0
  45. package/theme/layout/app/static-sidebar/static-sidebar.component.ts +198 -0
  46. package/theme/layout/app/topbar/app.topbar.component.d.ts +0 -1
  47. package/theme/layout/app/topbar/app.topbar.component.ts +0 -4
  48. package/theme/layout/service/app.layout.service.d.ts +20 -18
  49. package/theme/layout/service/app.layout.service.ts +137 -53
  50. package/theme/styles/layout/_content.scss +18 -0
  51. package/theme/styles/layout/_responsive.scss +41 -2
  52. package/theme/styles/layout/_topbar.scss +6 -0
  53. package/theme/styles/theme/light/custom/theme.scss +5 -0
  54. package/ui/charts/index.d.ts +6 -0
  55. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +20 -0
  56. package/ui/charts/src/highCharts/gauge/solid-gauge.component.d.ts +38 -0
  57. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +32 -0
  58. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.d.ts +24 -0
  59. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +21 -0
  60. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +21 -0
  61. package/ui/lib/src/input/value-accessor.directive.d.ts +0 -5
  62. package/ui/text/src/text.component.d.ts +1 -0
  63. package/util/pub-sub/src/pub-sub.service.d.ts +1 -0
  64. package/esm2022/theme/layout/app/menu/app.menu.component.mjs +0 -376
  65. package/esm2022/theme/layout/app/sidebar/app.sidebar.component.mjs +0 -41
  66. package/fesm2022/aril-app.component-ZRi2TVtr.mjs.map +0 -1
  67. package/theme/layout/app/menu/app.menu.component.d.ts +0 -48
  68. package/theme/layout/app/sidebar/app.sidebar.component.d.ts +0 -15
@@ -1,6 +1,10 @@
1
+ import { LayoutService } from 'aril/theme/layout';
2
+ import { PubSubService } from 'aril/util/pub-sub';
1
3
  import * as i0 from "@angular/core";
2
4
  export declare class AppComponent {
3
- constructor();
5
+ private layoutService;
6
+ private pubSubService;
7
+ constructor(layoutService: LayoutService, pubSubService: PubSubService);
4
8
  static ɵfac: i0.ɵɵFactoryDeclaration<AppComponent, never>;
5
9
  static ɵcmp: i0.ɵɵComponentDeclaration<AppComponent, "aril-root", never, {}, {}, never, never, true, never>;
6
10
  }
@@ -3,13 +3,37 @@ import { Component, NgZone, inject } from '@angular/core';
3
3
  import { AppLayoutComponent } from 'aril/theme/layout';
4
4
  import { appName } from './bootstrap';
5
5
  import * as i0 from "@angular/core";
6
+ import * as i1 from "aril/theme/layout";
7
+ import * as i2 from "aril/util/pub-sub";
6
8
  export class AppComponent {
7
- constructor() {
9
+ constructor(layoutService, pubSubService) {
10
+ this.layoutService = layoutService;
11
+ this.pubSubService = pubSubService;
8
12
  globalThis.activeHost = appName;
9
13
  globalThis.ngZone = inject(NgZone);
10
14
  globalThis.isHostMode = true;
15
+ this.pubSubService.subscribe('menuModeChanged', (data) => {
16
+ const menuMode = data?.custom;
17
+ if (menuMode && (menuMode === 'static' || menuMode === 'expandable')) {
18
+ this.layoutService.config.update((config) => {
19
+ const newConfig = {
20
+ ...config,
21
+ menuMode: menuMode
22
+ };
23
+ return newConfig;
24
+ });
25
+ if (menuMode === 'static') {
26
+ this.layoutService.state.staticSidebarVisible = true;
27
+ }
28
+ else if (menuMode === 'expandable') {
29
+ this.layoutService.state.staticSidebarVisible = false;
30
+ }
31
+ // Always close mobile menu on mode change
32
+ this.layoutService.state.staticMenuMobileActive = false;
33
+ }
34
+ });
11
35
  }
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, deps: [{ token: i1.LayoutService }, { token: i2.PubSubService }], target: i0.ɵɵFactoryTarget.Component }); }
13
37
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppComponent, isStandalone: true, selector: "aril-root", ngImport: i0, template: ` <app-layout></app-layout> `, isInline: true, dependencies: [{ kind: "component", type: AppLayoutComponent, selector: "app-layout" }] }); }
14
38
  }
15
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, decorators: [{
@@ -20,5 +44,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
20
44
  template: ` <app-layout></app-layout> `,
21
45
  imports: [AppLayoutComponent]
22
46
  }]
23
- }], ctorParameters: () => [] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9ob3N0L3NyYy9hcHAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFRdEMsTUFBTSxPQUFPLFlBQVk7SUFDeEI7UUFDTyxVQUFXLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUNqQyxVQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxVQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDOzhHQUxXLFlBQVk7a0dBQVosWUFBWSxxRUFIZCw2QkFBNkIsNERBQzdCLGtCQUFrQjs7MkZBRWhCLFlBQVk7a0JBTnhCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEFwcExheW91dENvbXBvbmVudCB9IGZyb20gJ2FyaWwvdGhlbWUvbGF5b3V0JztcclxuXHJcbmltcG9ydCB7IGFwcE5hbWUgfSBmcm9tICcuL2Jvb3RzdHJhcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXJpbC1yb290JyxcclxuXHR0ZW1wbGF0ZTogYCA8YXBwLWxheW91dD48L2FwcC1sYXlvdXQ+IGAsXHJcblx0aW1wb3J0czogW0FwcExheW91dENvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQoPGFueT5nbG9iYWxUaGlzKS5hY3RpdmVIb3N0ID0gYXBwTmFtZTtcclxuXHRcdCg8YW55Pmdsb2JhbFRoaXMpLm5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cdFx0KDxhbnk+Z2xvYmFsVGhpcykuaXNIb3N0TW9kZSA9IHRydWU7XHJcblx0fVxyXG59XHJcbiJdfQ==
47
+ }], ctorParameters: () => [{ type: i1.LayoutService }, { type: i2.PubSubService }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9ob3N0L3NyYy9hcHAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFHLGtCQUFrQixFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBR3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFVdEMsTUFBTSxPQUFPLFlBQVk7SUFDeEIsWUFDUyxhQUE0QixFQUM1QixhQUE0QjtRQUQ1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUU5QixVQUFXLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUNqQyxVQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxVQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7WUFFOUIsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDM0MsTUFBTSxTQUFTLEdBQUc7d0JBQ2pCLEdBQUcsTUFBTTt3QkFDVCxRQUFRLEVBQUUsUUFBb0I7cUJBQzlCLENBQUM7b0JBQ0YsT0FBTyxTQUFTLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDdkQsQ0FBQztnQkFFRCwwQ0FBMEM7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztZQUV6RCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWhDVyxZQUFZO2tHQUFaLFlBQVkscUVBSGQsNkJBQTZCLDREQUM3QixrQkFBa0I7OzJGQUVoQixZQUFZO2tCQU54QixTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE5nWm9uZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyAgQXBwTGF5b3V0Q29tcG9uZW50LCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnYXJpbC90aGVtZS9sYXlvdXQnO1xyXG5pbXBvcnQgeyBQdWJTdWJTZXJ2aWNlIH0gZnJvbSAnYXJpbC91dGlsL3B1Yi1zdWInO1xyXG5cclxuaW1wb3J0IHsgYXBwTmFtZSB9IGZyb20gJy4vYm9vdHN0cmFwJztcclxuXHRcclxudHlwZSBNZW51TW9kZSA9ICdzdGF0aWMnIHwgJ2V4cGFuZGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2FyaWwtcm9vdCcsXHJcblx0dGVtcGxhdGU6IGAgPGFwcC1sYXlvdXQ+PC9hcHAtbGF5b3V0PiBgLFxyXG5cdGltcG9ydHM6IFtBcHBMYXlvdXRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwdWJTdWJTZXJ2aWNlOiBQdWJTdWJTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHQoPGFueT5nbG9iYWxUaGlzKS5hY3RpdmVIb3N0ID0gYXBwTmFtZTtcclxuXHRcdCg8YW55Pmdsb2JhbFRoaXMpLm5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cdFx0KDxhbnk+Z2xvYmFsVGhpcykuaXNIb3N0TW9kZSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5wdWJTdWJTZXJ2aWNlLnN1YnNjcmliZSgnbWVudU1vZGVDaGFuZ2VkJywgKGRhdGEpID0+IHtcclxuXHRcdFx0Y29uc3QgbWVudU1vZGUgPSBkYXRhPy5jdXN0b207XHJcblx0XHRcdFxyXG5cdFx0XHRpZiAobWVudU1vZGUgJiYgKG1lbnVNb2RlID09PSAnc3RhdGljJyB8fCBtZW51TW9kZSA9PT0gJ2V4cGFuZGFibGUnKSkge1x0XHRcdFx0XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV3Q29uZmlnID0ge1xyXG5cdFx0XHRcdFx0XHQuLi5jb25maWcsXHJcblx0XHRcdFx0XHRcdG1lbnVNb2RlOiBtZW51TW9kZSBhcyBNZW51TW9kZVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdHJldHVybiBuZXdDb25maWc7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRpZiAobWVudU1vZGUgPT09ICdzdGF0aWMnKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljU2lkZWJhclZpc2libGUgPSB0cnVlO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAobWVudU1vZGUgPT09ICdleHBhbmRhYmxlJykge1xyXG5cdFx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY1NpZGViYXJWaXNpYmxlID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIEFsd2F5cyBjbG9zZSBtb2JpbGUgbWVudSBvbiBtb2RlIGNoYW5nZVxyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=
@@ -25,14 +25,10 @@ export class ExpandableMenuComponent {
25
25
  this.overlayMenuOpenSubscription = null;
26
26
  this.routerSubscription = null;
27
27
  this.username = this.keycloak.getUsername().charAt(0).toUpperCase();
28
- this.sidebarIsLocked = false;
29
28
  this.isHostMode = globalThis.isHostMode;
30
29
  this.hostMenuItems = globalThis.hostMenuItems;
31
30
  this.cachedMenuItems = [];
32
- // Track selected main menu item
33
- this.selectedMainItem = null;
34
31
  this.selectedMainMenuItem = null;
35
- this.secondarySidebarExpanded = false;
36
32
  this.tooltipText = {
37
33
  toggleButton: {
38
34
  expanded: {
@@ -61,6 +57,16 @@ export class ExpandableMenuComponent {
61
57
  tertiary: 20
62
58
  };
63
59
  }
60
+ // Getter for layout service states
61
+ get selectedMainItem() {
62
+ return this.layoutService.state.selectedMainItem;
63
+ }
64
+ get secondarySidebarExpanded() {
65
+ return this.layoutService.state.secondarySidebarExpanded;
66
+ }
67
+ get sidebarIsLocked() {
68
+ return this.layoutService.state.sidebarIsLocked;
69
+ }
64
70
  // Check if text is truncated and needs tooltip
65
71
  isTextTruncated(label, lang, menuType = 'secondary') {
66
72
  if (!label || !lang || !label[lang])
@@ -95,7 +101,6 @@ export class ExpandableMenuComponent {
95
101
  ngOnInit() {
96
102
  this.updateMenuItems();
97
103
  this.initializeMenu();
98
- this.loadSidebarLockState();
99
104
  this.updateActiveMenuFromCurrentRoute();
100
105
  // Subscribe to route changes to handle secondary sidebar closing
101
106
  this.routerSubscription = this.router.events
@@ -105,13 +110,13 @@ export class ExpandableMenuComponent {
105
110
  this.updateActiveMenuFromCurrentRoute();
106
111
  // Close secondary sidebar on navigation if not locked
107
112
  if (!this.sidebarIsLocked) {
108
- this.secondarySidebarExpanded = false;
113
+ this.layoutService.setSecondarySidebarExpanded(false);
109
114
  }
110
115
  });
111
116
  // Subscribe to overlay menu open notifications
112
117
  this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {
113
118
  if (this.layoutService.state.staticMenuMobileActive) {
114
- this.secondarySidebarExpanded = true;
119
+ this.layoutService.setSecondarySidebarExpanded(true);
115
120
  }
116
121
  });
117
122
  }
@@ -123,22 +128,14 @@ export class ExpandableMenuComponent {
123
128
  this.routerSubscription.unsubscribe();
124
129
  }
125
130
  }
126
- loadSidebarLockState() {
127
- const storedState = localStorage.getItem('sidebarIsLocked');
128
- this.sidebarIsLocked = storedState === 'true';
129
- }
130
- saveSidebarLockState() {
131
- localStorage.setItem('sidebarIsLocked', this.sidebarIsLocked.toString());
132
- }
133
131
  toggleSidebarLock() {
134
- this.sidebarIsLocked = !this.sidebarIsLocked;
135
- this.saveSidebarLockState();
132
+ this.layoutService.toggleSidebarLock();
136
133
  }
137
134
  // Initialize the menu with proper active state
138
135
  initializeMenu() {
139
- this.selectedMainItem = null;
136
+ this.layoutService.setSelectedMainItem(null);
140
137
  this.selectedMainMenuItem = null;
141
- this.secondarySidebarExpanded = false;
138
+ this.layoutService.setSecondarySidebarExpanded(false);
142
139
  this.updateMenuItems();
143
140
  }
144
141
  updateMenuFromRootKey(index) {
@@ -147,9 +144,9 @@ export class ExpandableMenuComponent {
147
144
  if (index >= 0 && index < menuItems.length) {
148
145
  const item = menuItems[index];
149
146
  if (!item.separator) {
150
- this.selectedMainItem = index;
147
+ this.layoutService.setSelectedMainItem(index);
151
148
  this.selectedMainMenuItem = item;
152
- this.secondarySidebarExpanded = true;
149
+ this.layoutService.setSecondarySidebarExpanded(true);
153
150
  }
154
151
  }
155
152
  }
@@ -161,24 +158,24 @@ export class ExpandableMenuComponent {
161
158
  }
162
159
  selectMainItem(index, item) {
163
160
  if (item.routerLink && (!item.items || item.items.length === 0)) {
164
- this.secondarySidebarExpanded = false;
165
- this.selectedMainItem = index;
161
+ this.layoutService.setSecondarySidebarExpanded(false);
162
+ this.layoutService.setSelectedMainItem(index);
166
163
  this.selectedMainMenuItem = item;
167
164
  this.router.navigate([item.routerLink]);
168
165
  return;
169
166
  }
170
167
  // Handle regular menu items with submenu
171
168
  if (this.selectedMainItem === index) {
172
- this.secondarySidebarExpanded = !this.secondarySidebarExpanded;
169
+ this.layoutService.toggleSecondarySidebar();
173
170
  }
174
171
  else {
175
- this.selectedMainItem = index;
172
+ this.layoutService.setSelectedMainItem(index);
176
173
  this.selectedMainMenuItem = item;
177
174
  if (item.items && item.items.length > 0) {
178
- this.secondarySidebarExpanded = true;
175
+ this.layoutService.setSecondarySidebarExpanded(true);
179
176
  }
180
177
  else {
181
- this.secondarySidebarExpanded = false;
178
+ this.layoutService.setSecondarySidebarExpanded(false);
182
179
  }
183
180
  }
184
181
  // For mobile devices, ensure the menu stays open
@@ -187,15 +184,15 @@ export class ExpandableMenuComponent {
187
184
  }
188
185
  }
189
186
  toggleSecondarySidebar() {
190
- this.secondarySidebarExpanded = !this.secondarySidebarExpanded;
187
+ this.layoutService.toggleSecondarySidebar();
191
188
  }
192
189
  isMobile() {
193
190
  return this.layoutService.isMobile();
194
191
  }
195
- // Listen for resize events to handle responsive behavior for mobile
192
+ // Listen for resize events - now handled more efficiently by layout service
196
193
  onResize() {
197
194
  if (!this.isMobile() && this.layoutService.state.staticMenuMobileActive) {
198
- this.layoutService.state.staticMenuMobileActive = false;
195
+ this.layoutService.closeMobileMenu();
199
196
  }
200
197
  }
201
198
  updateActiveMenuFromCurrentRoute() {
@@ -203,15 +200,15 @@ export class ExpandableMenuComponent {
203
200
  for (let i = 0; i < menuItems.length; i++) {
204
201
  const menuItem = menuItems[i];
205
202
  if (this.isActiveRoute(menuItem)) {
206
- this.selectedMainItem = i;
203
+ this.layoutService.setSelectedMainItem(i);
207
204
  this.selectedMainMenuItem = menuItem;
208
205
  if (menuItem.items && menuItem.items.length > 0) {
209
206
  if (!this.isMobile() && !this.secondarySidebarExpanded && !this.layoutService.state.staticMenuMobileActive) {
210
- this.secondarySidebarExpanded = true;
207
+ this.layoutService.setSecondarySidebarExpanded(true);
211
208
  }
212
209
  }
213
210
  else {
214
- this.secondarySidebarExpanded = false;
211
+ this.layoutService.setSecondarySidebarExpanded(false);
215
212
  }
216
213
  return;
217
214
  }
@@ -245,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
245
242
  type: HostListener,
246
243
  args: ['window:resize']
247
244
  }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9leHBhbmRhYmxlTWVudS9leHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2V4cGFuZGFibGVNZW51L2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBWXBELE1BQU0sT0FBTyx1QkFBdUI7SUErQ25DLFlBQ1MsaUJBQW9DLEVBQ3BDLFdBQTJCLEVBQzNCLE1BQWMsRUFDZCxRQUF5QixFQUN6QixnQkFBa0MsRUFDbEMsYUFBNEI7UUFMNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFuRHJD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SSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUVFLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsT0FBTyxJQUFJLENBQUM7Z0JBQ2IsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7OEdBNVFXLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDBIQUZ4QixDQUFDLGlCQUFpQixDQUFDLDBCQ3RCL0IsczBNQWdIQSw0Q0Q1RlcsVUFBVSxvT0FBRSxPQUFPLG1GQUFFLGFBQWE7OzJGQUloQyx1QkFBdUI7a0JBUG5DLFNBQVM7aUNBQ0csSUFBSSxZQUNOLHFCQUFxQixXQUN0QixDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLGFBRWxDLENBQUMsaUJBQWlCLENBQUM7aU9BK045QixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgUGx1Z2luTWVudUl0ZW0gfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVKc29uUGlwZSB9IGZyb20gJ2FyaWwvdXRpbC9waXBlcyc7XHJcblxyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLm1lbnUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXBwLWV4cGFuZGFibGUtbWVudScsXHJcblx0aW1wb3J0czogW1JvdXRlckxpbmssIE5nQ2xhc3MsIFRvb2x0aXBNb2R1bGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuXHRwcm92aWRlcnM6IFtUcmFuc2xhdGVKc29uUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEV4cGFuZGFibGVNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRhY3RpdmVMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6ICd0cicgfSk7XHJcblx0b3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHRyb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cdHVzZXJuYW1lID0gdGhpcy5rZXljbG9hay5nZXRVc2VybmFtZSgpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xyXG5cdHNpZGViYXJJc0xvY2tlZCA9IGZhbHNlO1xyXG5cclxuICBpc0hvc3RNb2RlID0gKDxhbnk+Z2xvYmFsVGhpcykuaXNIb3N0TW9kZTtcclxuXHRob3N0TWVudUl0ZW1zID0gKDxhbnk+Z2xvYmFsVGhpcykuaG9zdE1lbnVJdGVtcztcclxuXHRjYWNoZWRNZW51SXRlbXM6IFBsdWdpbk1lbnVJdGVtW10gPSBbXTtcclxuXHJcblxyXG5cdC8vIFRyYWNrIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtXHJcblx0c2VsZWN0ZWRNYWluSXRlbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0c2VsZWN0ZWRNYWluTWVudUl0ZW06IFBsdWdpbk1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblx0c2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblxyXG5cdHRvb2x0aXBUZXh0ID0ge1xyXG5cdFx0dG9nZ2xlQnV0dG9uOiB7XHJcblx0XHRcdGV4cGFuZGVkOiB7XHJcblx0XHRcdFx0dHI6ICdNZW7DvHnDvCBHaXpsZScsXHJcblx0XHRcdFx0ZW46ICdIaWRlIE1lbnUnXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbGxhcHNlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgR8O2c3RlcicsXHJcblx0XHRcdFx0ZW46ICdTaG93IE1lbnUnXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRsb2NrQnV0dG9uOiB7XHJcblx0XHRcdGxvY2tlZDoge1xyXG5cdFx0XHRcdHRyOiAnT3RvbWF0aWsgS2FwYW5tYXnEsSBBw6cnLFxyXG5cdFx0XHRcdGVuOiAnRW5hYmxlIEF1dG8tQ2xvc2UnXHJcblx0XHRcdH0sXHJcblx0XHRcdHVubG9ja2VkOiB7XHJcblx0XHRcdFx0dHI6ICdNZW7DvHnDvCBLaWxpdGxlJyxcclxuXHRcdFx0XHRlbjogJ0xvY2sgTWVudSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgTUFYX0xFTkdUSCA9IHtcclxuXHRcdG1haW46IDgsIFxyXG5cdFx0c2Vjb25kYXJ5OiAyMCxcclxuXHRcdHRlcnRpYXJ5OiAyMCBcclxuXHR9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgdHJhbnNsYXRlSnNvblBpcGU6IFRyYW5zbGF0ZUpzb25QaXBlLFxyXG5cdFx0cHJpdmF0ZSBtZW51U2VydmljZTogQXBwTWVudVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHJpdmF0ZSBrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHQvLyBDaGVjayBpZiB0ZXh0IGlzIHRydW5jYXRlZCBhbmQgbmVlZHMgdG9vbHRpcFxyXG5cdGlzVGV4dFRydW5jYXRlZChcclxuXHRcdGxhYmVsOiBhbnksXHJcblx0XHRsYW5nOiBzdHJpbmcgfCBudWxsLFxyXG5cdFx0bWVudVR5cGU6ICdtYWluJyB8ICdzZWNvbmRhcnknIHwgJ3RlcnRpYXJ5JyB8ICduZXN0ZWQnID0gJ3NlY29uZGFyeSdcclxuXHQpOiBib29sZWFuIHtcclxuXHRcdGlmICghbGFiZWwgfHwgIWxhbmcgfHwgIWxhYmVsW2xhbmddKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgdGV4dCA9IGxhYmVsW2xhbmddO1xyXG5cdFx0Y29uc3QgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cdFx0Y29uc3QgbWF4TGVuZ3RoID0gbWVudVR5cGUgPT09ICduZXN0ZWQnID8gdGhpcy5NQVhfTEVOR1RILnRlcnRpYXJ5IDogdGhpcy5NQVhfTEVOR1RIW21lbnVUeXBlXTtcclxuXHRcdHJldHVybiB0ZXh0TGVuZ3RoID4gbWF4TGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgY2hlY2sgaWYgYSBtZW51IGl0ZW0gb3IgaXRzIGNoaWxkcmVuIG1hdGNoIHRoZSBjdXJyZW50IHJvdXRlXHJcblx0aXNBY3RpdmVSb3V0ZShtZW51SXRlbTogUGx1Z2luTWVudUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdGlmICghbWVudUl0ZW0gfHwgIW1lbnVJdGVtLnJvdXRlckxpbmspIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyBHZXQgY3VycmVudCBVUkwgcGF0aCBhZnRlciB0aGUgaGFzaFxyXG5cdFx0Y29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdGNvbnN0IGhhc2hVcmwgPSBjdXJyZW50VXJsLmluZGV4T2YoJyMnKSA+IC0xID8gY3VycmVudFVybC5zcGxpdCgnIycpWzFdIDogY3VycmVudFVybDtcclxuXHJcblx0XHQvLyBDaGVjayBmb3IgZXhhY3QgbWF0Y2ggZmlyc3RcclxuXHRcdGlmIChoYXNoVXJsID09PSBtZW51SXRlbS5yb3V0ZXJMaW5rIHx8IGhhc2hVcmwgPT09ICcvJyArIG1lbnVJdGVtLnJvdXRlckxpbmspIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBVUkwgc3RhcnRzIHdpdGggdGhlIHJvdXRlckxpbmsgKGhhbmRsZXMgY2hpbGQgcm91dGVzKVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRtZW51SXRlbS5yb3V0ZXJMaW5rICE9PSAnLycgJiZcclxuXHRcdFx0KGhhc2hVcmwuc3RhcnRzV2l0aChtZW51SXRlbS5yb3V0ZXJMaW5rICsgJy8nKSB8fCBoYXNoVXJsLnN0YXJ0c1dpdGgoJy8nICsgbWVudUl0ZW0ucm91dGVyTGluayArICcvJykpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgY2hpbGQgaXRlbXMgaWYgdGhleSBleGlzdFxyXG5cdFx0aWYgKG1lbnVJdGVtLml0ZW1zICYmIG1lbnVJdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0cmV0dXJuIG1lbnVJdGVtLml0ZW1zLnNvbWUoKGNoaWxkSXRlbSkgPT4gdGhpcy5pc0FjdGl2ZVJvdXRlKGNoaWxkSXRlbSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cclxuXHRcdHRoaXMudXBkYXRlTWVudUl0ZW1zKCk7XHJcblx0XHR0aGlzLmluaXRpYWxpemVNZW51KCk7XHJcblxyXG5cdFx0dGhpcy5sb2FkU2lkZWJhckxvY2tTdGF0ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byByb3V0ZSBjaGFuZ2VzIHRvIGhhbmRsZSBzZWNvbmRhcnkgc2lkZWJhciBjbG9zaW5nXHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aXZlIG1lbnUgYmFzZWQgb24gdGhlIG5ldyByb3V0ZVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTtcclxuXHJcblx0XHRcdFx0Ly8gQ2xvc2Ugc2Vjb25kYXJ5IHNpZGViYXIgb24gbmF2aWdhdGlvbiBpZiBub3QgbG9ja2VkXHJcblx0XHRcdFx0aWYgKCF0aGlzLnNpZGViYXJJc0xvY2tlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byBvdmVybGF5IG1lbnUgb3BlbiBub3RpZmljYXRpb25zXHJcblx0XHR0aGlzLm92ZXJsYXlNZW51T3BlblN1YnNjcmlwdGlvbiA9IHRoaXMubGF5b3V0U2VydmljZS5vdmVybGF5T3BlbiQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcblx0XHRcdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucm91dGVyU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRsb2FkU2lkZWJhckxvY2tTdGF0ZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN0b3JlZFN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZGViYXJJc0xvY2tlZCcpO1xyXG5cdFx0dGhpcy5zaWRlYmFySXNMb2NrZWQgPSBzdG9yZWRTdGF0ZSA9PT0gJ3RydWUnO1xyXG5cdH1cclxuXHJcblx0c2F2ZVNpZGViYXJMb2NrU3RhdGUoKTogdm9pZCB7XHJcblx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2lkZWJhcklzTG9ja2VkJywgdGhpcy5zaWRlYmFySXNMb2NrZWQudG9TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVTaWRlYmFyTG9jaygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2lkZWJhcklzTG9ja2VkID0gIXRoaXMuc2lkZWJhcklzTG9ja2VkO1xyXG5cdFx0dGhpcy5zYXZlU2lkZWJhckxvY2tTdGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGl6ZSB0aGUgbWVudSB3aXRoIHByb3BlciBhY3RpdmUgc3RhdGVcclxuXHRpbml0aWFsaXplTWVudSgpIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IG51bGw7XHJcblx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbnVsbDtcclxuXHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlTWVudUZyb21Sb290S2V5KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdHRoaXMudXBkYXRlTWVudUl0ZW1zKCk7IFxyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHJcblx0XHRpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG1lbnVJdGVtcy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpbmRleF07XHJcblx0XHRcdGlmICghaXRlbS5zZXBhcmF0b3IpIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTWFpbkl0ZW0gPSBpbmRleDtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2FjaGVkTWVudUl0ZW1zID0gdGhpcy5pc0hvc3RNb2RlID8gdGhpcy5ob3N0TWVudUl0ZW1zKCkgOiB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVudUl0ZW1zKCk6IFBsdWdpbk1lbnVJdGVtW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGVkTWVudUl0ZW1zO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0TWFpbkl0ZW0oaW5kZXg6IG51bWJlciwgaXRlbTogUGx1Z2luTWVudUl0ZW0pOiB2b2lkIHtcclxuXHRcdGlmIChpdGVtLnJvdXRlckxpbmsgJiYgKCFpdGVtLml0ZW1zIHx8IGl0ZW0uaXRlbXMubGVuZ3RoID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbkl0ZW0gPSBpbmRleDtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnJvdXRlckxpbmtdKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSByZWd1bGFyIG1lbnUgaXRlbXMgd2l0aCBzdWJtZW51XHJcblx0XHRpZiAodGhpcy5zZWxlY3RlZE1haW5JdGVtID09PSBpbmRleCkge1xyXG5cdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9ICF0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IGluZGV4O1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gdHJ1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9yIG1vYmlsZSBkZXZpY2VzLCBlbnN1cmUgdGhlIG1lbnUgc3RheXMgb3BlblxyXG5cdFx0aWYgKHRoaXMuaXNNb2JpbGUoKSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b2dnbGVTZWNvbmRhcnlTaWRlYmFyKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSAhdGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQ7XHJcblx0fVxyXG5cclxuXHRpc01vYmlsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNNb2JpbGUoKTtcclxuXHR9XHJcblxyXG5cdC8vIExpc3RlbiBmb3IgcmVzaXplIGV2ZW50cyB0byBoYW5kbGUgcmVzcG9uc2l2ZSBiZWhhdmlvciBmb3IgbW9iaWxlXHJcblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcblx0b25SZXNpemUoKSB7XHJcblx0XHRpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTogdm9pZCB7XHJcblx0XHRjb25zdCBtZW51SXRlbXMgPSB0aGlzLmdldE1lbnVJdGVtcygpO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xyXG5cdFx0XHRpZiAodGhpcy5pc0FjdGl2ZVJvdXRlKG1lbnVJdGVtKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IGk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IG1lbnVJdGVtO1xyXG5cclxuXHRcdFx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzTW9iaWxlKCkgJiYgIXRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkICYmICF0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oaXRlbTogUGx1Z2luTWVudUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdGlmICghaXRlbSB8fCAhaXRlbS5pdGVtcyB8fCBpdGVtLml0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgaXRlbS5pdGVtcykge1xyXG5cdFx0XHRpZiAodGhpcy5pc0FjdGl2ZVJvdXRlKGNoaWxkKSkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG4gICAgICBpZiAoY2hpbGQuaXRlbXMgJiYgY2hpbGQuaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzSGF2ZVNlbGVjdGVkQ2hpbGRJdGVtKGNoaWxkKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxUZXh0KHRleHQ6IGFueSk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVKc29uUGlwZS50cmFuc2Zvcm0odGV4dCk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZXctbGF5b3V0LXNpZGViYXJcIj5cclxuXHQ8IS0tIE1haW4gc2lkZWJhciAoZmlyc3QgbGV2ZWwpIC0tPlxyXG5cdDxkaXYgY2xhc3M9XCJtYWluLXNpZGViYXJcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJtYWluLXNpZGViYXItaGVhZGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ1c2VyLWF2YXRhclwiPlxyXG5cdFx0XHRcdDxzcGFuPnt7IHVzZXJuYW1lIH19PC9zcGFuPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cIm1haW4tc2lkZWJhci1jb250ZW50XCI+XHJcblx0XHRcdDx1bCBjbGFzcz1cIm1haW4tbWVudVwiPlxyXG5cdFx0XHRcdEBmb3IoaXRlbSBvZiBnZXRNZW51SXRlbXMoKTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0QGlmKCFpdGVtLnNlcGFyYXRvcil7XHJcblx0XHRcdFx0XHRcdDxsaVxyXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlUm91dGUoaXRlbSkgfHwgaXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oaXRlbSl9XCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cInNlbGVjdE1haW5JdGVtKGksIGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIiFpc01vYmlsZSgpICYmIGlzVGV4dFRydW5jYXRlZChpdGVtLmxhYmVsLCBhY3RpdmVMYW5nKCksICdtYWluJykgPyAoaXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBpdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1tZW51LWl0ZW1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8aSBbbmdDbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cIm1lbnUtaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c21hbGwgY2xhc3M9XCJtZW51LWxhYmVsXCI+e3sgaXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBpdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NtYWxsPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8IS0tIFRvZ2dsZSBidXR0b24gYXQgdGhlIGJvdHRvbSBvZiBtYWluIHNpZGViYXIgLS0+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyLWZvb3RlclwiPlxyXG5cdFx0XHQ8YnV0dG9uIGNsYXNzPVwic2lkZWJhci10b2dnbGUtYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVNlY29uZGFyeVNpZGViYXIoKVwiIFxyXG5cdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSA/IChzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPyBnZXRMb2NhbFRleHQodG9vbHRpcFRleHQudG9nZ2xlQnV0dG9uLmV4cGFuZGVkKSA6IGdldExvY2FsVGV4dCh0b29sdGlwVGV4dC50b2dnbGVCdXR0b24uY29sbGFwc2VkKSkgOiAnJ1wiIFxyXG5cdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0PGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cInNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA/ICdwaS1hbmdsZS1sZWZ0JyA6ICdwaS1hbmdsZS1yaWdodCdcIj48L2k+XHJcblx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblxyXG5cdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgKHNlY29uZCBsZXZlbCkgLS0+XHJcblx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyXCIgW25nQ2xhc3NdPVwieydleHBhbmRlZCc6IHNlY29uZGFyeVNpZGViYXJFeHBhbmRlZH1cIj5cclxuXHRcdDwhLS0gQ29udGVudCBjb250YWluZXIgd3JhcHBlciB0byBwcmV2ZW50IGp1bXBzIGR1cmluZyB0cmFuc2l0aW9ucyAtLT5cclxuXHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktY29udGVudC13cmFwcGVyXCI+XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgaGVhZGVyIC0tPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5LXNpZGViYXItaGVhZGVyXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1oZWFkZXItY29udGVudFwiPlxyXG5cdFx0XHRcdFx0QGlmKHNlbGVjdGVkTWFpbk1lbnVJdGVtKXtcclxuXHRcdFx0XHRcdFx0PGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWFpbk1lbnVJdGVtLmljb25cIiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyBzZWxlY3RlZE1haW5NZW51SXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzZWxlY3RlZE1haW5NZW51SXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2gzPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cInNpZGViYXItbG9jay1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU2lkZWJhckxvY2soKVwiIFxyXG5cdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwic2lkZWJhcklzTG9ja2VkID8gZ2V0TG9jYWxUZXh0KHRvb2x0aXBUZXh0LmxvY2tCdXR0b24ubG9ja2VkKSA6IGdldExvY2FsVGV4dCh0b29sdGlwVGV4dC5sb2NrQnV0dG9uLnVubG9ja2VkKVwiIFxyXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XHJcblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJzaWRlYmFySXNMb2NrZWQgPyAncGktbG9jaycgOiAncGktbG9jay1vcGVuJ1wiPjwvaT5cclxuXHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgY29udGVudCAtLT5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0pe1xyXG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnVcIj5cclxuXHRcdFx0XHRcdFx0QGZvcihzdWJJdGVtIG9mIHNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIENyZWF0ZSBtZW51IGl0ZW0gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGkgY2xhc3M9XCJzZWNvbmRhcnktbWVudS1pdGVtXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKHN1Ykl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YSBbcm91dGVyTGlua109XCJzdWJJdGVtLnJvdXRlckxpbmtcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNlY29uZGFyeS1tZW51LWxpbmtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQoc3ViSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnc2Vjb25kYXJ5JykgPyAoc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgW25nQ2xhc3NdPVwic3ViSXRlbS5pY29uXCIgY2xhc3M9XCJzdWJtZW51LWljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdWJtZW51LWxhYmVsXCI+e3sgc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBBbHdheXMgcmVuZGVyIHN1Ym1lbnUgaWYgaXQgZXhpc3RzIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgQGlmKHN1Ykl0ZW0uaXRlbXMgJiYgc3ViSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgPHVsIGNsYXNzPVwidGVydGlhcnktbWVudSBhbHdheXMtb3BlblwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGZvcihjaGlsZEl0ZW0gb2Ygc3ViSXRlbS5pdGVtczsgdHJhY2sgY2hpbGRJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShjaGlsZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInRlcnRpYXJ5LW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj57eyBjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBkZWVwZXIgbGV2ZWxzIGlmIHRoZXkgZXhpc3QsIGFsc28gdmlzaWJsZSBieSBkZWZhdWx0IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihjaGlsZEl0ZW0uaXRlbXMgJiYgY2hpbGRJdGVtLml0ZW1zLmxlbmd0aCA+IDApe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHVsIGNsYXNzPVwibmVzdGVkLW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGZvcihuZXN0ZWRJdGVtIG9mIGNoaWxkSXRlbS5pdGVtczsgdHJhY2sgbmVzdGVkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibmVzdGVkLW1lbnUtaXRlbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlUm91dGUobmVzdGVkSXRlbSl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBbcm91dGVyTGlua109XCJuZXN0ZWRJdGVtLnJvdXRlckxpbmtcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJuZXN0ZWQtbWVudS1saW5rXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIiFpc01vYmlsZSgpICYmIGlzVGV4dFRydW5jYXRlZChuZXN0ZWRJdGVtLmxhYmVsLCBhY3RpdmVMYW5nKCksICduZXN0ZWQnKSA/IChuZXN0ZWRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IG5lc3RlZEl0ZW0ubGFiZWxbYWN0aXZlTGFuZygpIV0gfHwgJycgOiAnJykgOiAnJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibmVzdGVkLWxhYmVsXCI+e3sgbmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IDwvdWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdCB9XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHRcclxuPC9kaXY+XHJcbiJdfQ==
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9leHBhbmRhYmxlTWVudS9leHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2V4cGFuZGFibGVNZW51L2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBWXBELE1BQU0sT0FBTyx1QkFBdUI7SUEwQ25DLFlBQ1MsaUJBQW9DLEVBQ3BDLFdBQTJCLEVBQzNCLE1BQWMsRUFDZCxRQUF5QixFQUN6QixnQkFBa0MsRUFDbEMsYUFBNEI7UUFMNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUE5Q3JD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QUssRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2dCQUNiLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDOzhHQXZRVyx1QkFBdUI7a0dBQXZCLHVCQUF1QiwwSEFGeEIsQ0FBQyxpQkFBaUIsQ0FBQywwQkN0Qi9CLHMwTUFnSEEsNENENUZXLFVBQVUsb09BQUUsT0FBTyxtRkFBRSxhQUFhOzsyRkFJaEMsdUJBQXVCO2tCQVBuQyxTQUFTO2lDQUNHLElBQUksWUFDTixxQkFBcUIsV0FDdEIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxhQUVsQyxDQUFDLGlCQUFpQixDQUFDO2lPQTBOOUIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFBsdWdpbk1lbnVJdGVtIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlSnNvblBpcGUgfSBmcm9tICdhcmlsL3V0aWwvcGlwZXMnO1xyXG5cclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLmxheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5tZW51LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2FwcC1leHBhbmRhYmxlLW1lbnUnLFxyXG5cdGltcG9ydHM6IFtSb3V0ZXJMaW5rLCBOZ0NsYXNzLCBUb29sdGlwTW9kdWxlXSxcclxuXHR0ZW1wbGF0ZVVybDogJ2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcblx0cHJvdmlkZXJzOiBbVHJhbnNsYXRlSnNvblBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeHBhbmRhYmxlTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0YWN0aXZlTGFuZyA9IHRvU2lnbmFsKHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiAndHInIH0pO1xyXG5cdG92ZXJsYXlNZW51T3BlblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblx0cm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHR1c2VybmFtZSA9IHRoaXMua2V5Y2xvYWsuZ2V0VXNlcm5hbWUoKS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcclxuXHJcblx0aXNIb3N0TW9kZSA9ICg8YW55Pmdsb2JhbFRoaXMpLmlzSG9zdE1vZGU7XHJcblx0aG9zdE1lbnVJdGVtcyA9ICg8YW55Pmdsb2JhbFRoaXMpLmhvc3RNZW51SXRlbXM7XHJcblx0Y2FjaGVkTWVudUl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdID0gW107XHJcblxyXG5cdHNlbGVjdGVkTWFpbk1lbnVJdGVtOiBQbHVnaW5NZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHR0b29sdGlwVGV4dCA9IHtcclxuXHRcdHRvZ2dsZUJ1dHRvbjoge1xyXG5cdFx0XHRleHBhbmRlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgR2l6bGUnLFxyXG5cdFx0XHRcdGVuOiAnSGlkZSBNZW51J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2xsYXBzZWQ6IHtcclxuXHRcdFx0XHR0cjogJ01lbsO8ecO8IEfDtnN0ZXInLFxyXG5cdFx0XHRcdGVuOiAnU2hvdyBNZW51J1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0bG9ja0J1dHRvbjoge1xyXG5cdFx0XHRsb2NrZWQ6IHtcclxuXHRcdFx0XHR0cjogJ090b21hdGlrIEthcGFubWF5xLEgQcOnJyxcclxuXHRcdFx0XHRlbjogJ0VuYWJsZSBBdXRvLUNsb3NlJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR1bmxvY2tlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgS2lsaXRsZScsXHJcblx0XHRcdFx0ZW46ICdMb2NrIE1lbnUnXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IE1BWF9MRU5HVEggPSB7XHJcblx0XHRtYWluOiA4LCBcclxuXHRcdHNlY29uZGFyeTogMjAsXHJcblx0XHR0ZXJ0aWFyeTogMjAgXHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0ZUpzb25QaXBlOiBUcmFuc2xhdGVKc29uUGlwZSxcclxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuXHRcdHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZVxyXG5cdCkge31cclxuXHJcblx0Ly8gR2V0dGVyIGZvciBsYXlvdXQgc2VydmljZSBzdGF0ZXNcclxuXHRnZXQgc2VsZWN0ZWRNYWluSXRlbSgpOiBudW1iZXIgfCBudWxsIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc2VsZWN0ZWRNYWluSXRlbTtcclxuXHR9XHJcblxyXG5cdGdldCBzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZDtcclxuXHR9XHJcblxyXG5cdGdldCBzaWRlYmFySXNMb2NrZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnNpZGViYXJJc0xvY2tlZDtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIHRleHQgaXMgdHJ1bmNhdGVkIGFuZCBuZWVkcyB0b29sdGlwXHJcblx0aXNUZXh0VHJ1bmNhdGVkKFxyXG5cdFx0bGFiZWw6IGFueSxcclxuXHRcdGxhbmc6IHN0cmluZyB8IG51bGwsXHJcblx0XHRtZW51VHlwZTogJ21haW4nIHwgJ3NlY29uZGFyeScgfCAndGVydGlhcnknIHwgJ25lc3RlZCcgPSAnc2Vjb25kYXJ5J1xyXG5cdCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFsYWJlbCB8fCAhbGFuZyB8fCAhbGFiZWxbbGFuZ10pIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCB0ZXh0ID0gbGFiZWxbbGFuZ107XHJcblx0XHRjb25zdCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcblx0XHRjb25zdCBtYXhMZW5ndGggPSBtZW51VHlwZSA9PT0gJ25lc3RlZCcgPyB0aGlzLk1BWF9MRU5HVEgudGVydGlhcnkgOiB0aGlzLk1BWF9MRU5HVEhbbWVudVR5cGVdO1xyXG5cdFx0cmV0dXJuIHRleHRMZW5ndGggPiBtYXhMZW5ndGg7XHJcblx0fVxyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBjaGVjayBpZiBhIG1lbnUgaXRlbSBvciBpdHMgY2hpbGRyZW4gbWF0Y2ggdGhlIGN1cnJlbnQgcm91dGVcclxuXHRpc0FjdGl2ZVJvdXRlKG1lbnVJdGVtOiBQbHVnaW5NZW51SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFtZW51SXRlbSB8fCAhbWVudUl0ZW0ucm91dGVyTGluaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vIEdldCBjdXJyZW50IFVSTCBwYXRoIGFmdGVyIHRoZSBoYXNoXHJcblx0XHRjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0Y29uc3QgaGFzaFVybCA9IGN1cnJlbnRVcmwuaW5kZXhPZignIycpID4gLTEgPyBjdXJyZW50VXJsLnNwbGl0KCcjJylbMV0gOiBjdXJyZW50VXJsO1xyXG5cclxuXHRcdC8vIENoZWNrIGZvciBleGFjdCBtYXRjaCBmaXJzdFxyXG5cdFx0aWYgKGhhc2hVcmwgPT09IG1lbnVJdGVtLnJvdXRlckxpbmsgfHwgaGFzaFVybCA9PT0gJy8nICsgbWVudUl0ZW0ucm91dGVyTGluaykge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IFVSTCBzdGFydHMgd2l0aCB0aGUgcm91dGVyTGluayAoaGFuZGxlcyBjaGlsZCByb3V0ZXMpXHJcblx0XHRpZiAoXHJcblx0XHRcdG1lbnVJdGVtLnJvdXRlckxpbmsgIT09ICcvJyAmJlxyXG5cdFx0XHQoaGFzaFVybC5zdGFydHNXaXRoKG1lbnVJdGVtLnJvdXRlckxpbmsgKyAnLycpIHx8IGhhc2hVcmwuc3RhcnRzV2l0aCgnLycgKyBtZW51SXRlbS5yb3V0ZXJMaW5rICsgJy8nKSlcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBjaGlsZCBpdGVtcyBpZiB0aGV5IGV4aXN0XHJcblx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRyZXR1cm4gbWVudUl0ZW0uaXRlbXMuc29tZSgoY2hpbGRJdGVtKSA9PiB0aGlzLmlzQWN0aXZlUm91dGUoY2hpbGRJdGVtKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplTWVudSgpO1xyXG5cdFx0dGhpcy51cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byByb3V0ZSBjaGFuZ2VzIHRvIGhhbmRsZSBzZWNvbmRhcnkgc2lkZWJhciBjbG9zaW5nXHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aXZlIG1lbnUgYmFzZWQgb24gdGhlIG5ldyByb3V0ZVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTtcclxuXHJcblx0XHRcdFx0Ly8gQ2xvc2Ugc2Vjb25kYXJ5IHNpZGViYXIgb24gbmF2aWdhdGlvbiBpZiBub3QgbG9ja2VkXHJcblx0XHRcdFx0aWYgKCF0aGlzLnNpZGViYXJJc0xvY2tlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZChmYWxzZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHQvLyBTdWJzY3JpYmUgdG8gb3ZlcmxheSBtZW51IG9wZW4gbm90aWZpY2F0aW9uc1xyXG5cdFx0dGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24gPSB0aGlzLmxheW91dFNlcnZpY2Uub3ZlcmxheU9wZW4kLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQodHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHRpZiAodGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvZ2dsZVNpZGViYXJMb2NrKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnRvZ2dsZVNpZGViYXJMb2NrKCk7XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXplIHRoZSBtZW51IHdpdGggcHJvcGVyIGFjdGl2ZSBzdGF0ZVxyXG5cdGluaXRpYWxpemVNZW51KCkge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0obnVsbCk7XHJcblx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbnVsbDtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVNZW51SXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVGcm9tUm9vdEtleShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpOyBcclxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IHRoaXMuZ2V0TWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0aWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBtZW51SXRlbXMubGVuZ3RoKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBtZW51SXRlbXNbaW5kZXhdO1xyXG5cdFx0XHRpZiAoIWl0ZW0uc2VwYXJhdG9yKSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaW5kZXgpO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluTWVudUl0ZW0gPSBpdGVtO1xyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQodHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2FjaGVkTWVudUl0ZW1zID0gdGhpcy5pc0hvc3RNb2RlID8gdGhpcy5ob3N0TWVudUl0ZW1zKCkgOiB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVudUl0ZW1zKCk6IFBsdWdpbk1lbnVJdGVtW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGVkTWVudUl0ZW1zO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0TWFpbkl0ZW0oaW5kZXg6IG51bWJlciwgaXRlbTogUGx1Z2luTWVudUl0ZW0pOiB2b2lkIHtcclxuXHRcdGlmIChpdGVtLnJvdXRlckxpbmsgJiYgKCFpdGVtLml0ZW1zIHx8IGl0ZW0uaXRlbXMubGVuZ3RoID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKGZhbHNlKTtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaW5kZXgpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2l0ZW0ucm91dGVyTGlua10pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIHJlZ3VsYXIgbWVudSBpdGVtcyB3aXRoIHN1Ym1lbnVcclxuXHRcdGlmICh0aGlzLnNlbGVjdGVkTWFpbkl0ZW0gPT09IGluZGV4KSB7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS50b2dnbGVTZWNvbmRhcnlTaWRlYmFyKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2VsZWN0ZWRNYWluSXRlbShpbmRleCk7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluTWVudUl0ZW0gPSBpdGVtO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCh0cnVlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZvciBtb2JpbGUgZGV2aWNlcywgZW5zdXJlIHRoZSBtZW51IHN0YXlzIG9wZW5cclxuXHRcdGlmICh0aGlzLmlzTW9iaWxlKCkpIHtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9nZ2xlU2Vjb25kYXJ5U2lkZWJhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS50b2dnbGVTZWNvbmRhcnlTaWRlYmFyKCk7XHJcblx0fVxyXG5cclxuXHRpc01vYmlsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNNb2JpbGUoKTtcclxuXHR9XHJcblxyXG5cdC8vIExpc3RlbiBmb3IgcmVzaXplIGV2ZW50cyAtIG5vdyBoYW5kbGVkIG1vcmUgZWZmaWNpZW50bHkgYnkgbGF5b3V0IHNlcnZpY2VcclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuXHRvblJlc2l6ZSgpIHtcclxuXHRcdGlmICghdGhpcy5pc01vYmlsZSgpICYmIHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5jbG9zZU1vYmlsZU1lbnUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZUFjdGl2ZU1lbnVGcm9tQ3VycmVudFJvdXRlKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtc1tpXTtcclxuXHRcdFx0aWYgKHRoaXMuaXNBY3RpdmVSb3V0ZShtZW51SXRlbSkpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2VsZWN0ZWRNYWluSXRlbShpKTtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbWVudUl0ZW07XHJcblxyXG5cdFx0XHRcdGlmIChtZW51SXRlbS5pdGVtcyAmJiBtZW51SXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiAhdGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgJiYgIXRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQodHJ1ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoZmFsc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzSGF2ZVNlbGVjdGVkQ2hpbGRJdGVtKGl0ZW06IFBsdWdpbk1lbnVJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWl0ZW0gfHwgIWl0ZW0uaXRlbXMgfHwgaXRlbS5pdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGl0ZW0uaXRlbXMpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNBY3RpdmVSb3V0ZShjaGlsZCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNoaWxkLml0ZW1zICYmIGNoaWxkLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAodGhpcy5pc0hhdmVTZWxlY3RlZENoaWxkSXRlbShjaGlsZCkpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsVGV4dCh0ZXh0OiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRlSnNvblBpcGUudHJhbnNmb3JtKHRleHQpO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibmV3LWxheW91dC1zaWRlYmFyXCI+XHJcblx0PCEtLSBNYWluIHNpZGViYXIgKGZpcnN0IGxldmVsKSAtLT5cclxuXHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyLWhlYWRlclwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwidXNlci1hdmF0YXJcIj5cclxuXHRcdFx0XHQ8c3Bhbj57eyB1c2VybmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJtYWluLXNpZGViYXItY29udGVudFwiPlxyXG5cdFx0XHQ8dWwgY2xhc3M9XCJtYWluLW1lbnVcIj5cclxuXHRcdFx0XHRAZm9yKGl0ZW0gb2YgZ2V0TWVudUl0ZW1zKCk7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KXtcclxuXHRcdFx0XHRcdEBpZighaXRlbS5zZXBhcmF0b3Ipe1xyXG5cdFx0XHRcdFx0XHQ8bGlcclxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKGl0ZW0pIHx8IGlzSGF2ZVNlbGVjdGVkQ2hpbGRJdGVtKGl0ZW0pfVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJzZWxlY3RNYWluSXRlbShpLCBpdGVtKVwiXHJcblx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQoaXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnbWFpbicpID8gKGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1haW4tbWVudS1pdGVtXCI+XHJcblx0XHRcdFx0XHRcdFx0PGkgW25nQ2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJtZW51LWljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PHNtYWxsIGNsYXNzPVwibWVudS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zbWFsbD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC91bD5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PCEtLSBUb2dnbGUgYnV0dG9uIGF0IHRoZSBib3R0b20gb2YgbWFpbiBzaWRlYmFyIC0tPlxyXG5cdFx0PGRpdiBjbGFzcz1cIm1haW4tc2lkZWJhci1mb290ZXJcIj5cclxuXHRcdFx0PGJ1dHRvbiBjbGFzcz1cInNpZGViYXItdG9nZ2xlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVTZWNvbmRhcnlTaWRlYmFyKClcIiBcclxuXHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgPyAoc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID8gZ2V0TG9jYWxUZXh0KHRvb2x0aXBUZXh0LnRvZ2dsZUJ1dHRvbi5leHBhbmRlZCkgOiBnZXRMb2NhbFRleHQodG9vbHRpcFRleHQudG9nZ2xlQnV0dG9uLmNvbGxhcHNlZCkpIDogJydcIiBcclxuXHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPyAncGktYW5nbGUtbGVmdCcgOiAncGktYW5nbGUtcmlnaHQnXCI+PC9pPlxyXG5cdFx0XHQ8L2J1dHRvbj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cclxuXHQ8IS0tIFNlY29uZGFyeSBzaWRlYmFyIChzZWNvbmQgbGV2ZWwpIC0tPlxyXG5cdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktc2lkZWJhclwiIFtuZ0NsYXNzXT1cInsnZXhwYW5kZWQnOiBzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWR9XCI+XHJcblx0XHQ8IS0tIENvbnRlbnQgY29udGFpbmVyIHdyYXBwZXIgdG8gcHJldmVudCBqdW1wcyBkdXJpbmcgdHJhbnNpdGlvbnMgLS0+XHJcblx0XHQ8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5LWNvbnRlbnQtd3JhcHBlclwiPlxyXG5cdFx0XHQ8IS0tIFNlY29uZGFyeSBzaWRlYmFyIGhlYWRlciAtLT5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyLWhlYWRlclwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktaGVhZGVyLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdEBpZihzZWxlY3RlZE1haW5NZW51SXRlbSl7XHJcblx0XHRcdFx0XHRcdDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8aSBbbmdDbGFzc109XCJzZWxlY3RlZE1haW5NZW51SXRlbS5pY29uXCIgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4+e3sgc2VsZWN0ZWRNYWluTWVudUl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc2VsZWN0ZWRNYWluTWVudUl0ZW0ubGFiZWxbYWN0aXZlTGFuZygpIV0gfHwgJycgOiAnJyB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9oMz5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJzaWRlYmFyLWxvY2stYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGViYXJMb2NrKClcIiBcclxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cInNpZGViYXJJc0xvY2tlZCA/IGdldExvY2FsVGV4dCh0b29sdGlwVGV4dC5sb2NrQnV0dG9uLmxvY2tlZCkgOiBnZXRMb2NhbFRleHQodG9vbHRpcFRleHQubG9ja0J1dHRvbi51bmxvY2tlZClcIiBcclxuXHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPlxyXG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwic2lkZWJhcklzTG9ja2VkID8gJ3BpLWxvY2snIDogJ3BpLWxvY2stb3BlbidcIj48L2k+XHJcblx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdFxyXG5cdFx0XHQ8IS0tIFNlY29uZGFyeSBzaWRlYmFyIGNvbnRlbnQgLS0+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktc2lkZWJhci1jb250ZW50XCI+XHJcblx0XHRcdFx0QGlmKHNlbGVjdGVkTWFpbk1lbnVJdGVtKXtcclxuXHRcdFx0XHRcdDx1bCBjbGFzcz1cInNlY29uZGFyeS1tZW51XCI+XHJcblx0XHRcdFx0XHRcdEBmb3Ioc3ViSXRlbSBvZiBzZWxlY3RlZE1haW5NZW51SXRlbS5pdGVtczsgdHJhY2sgc3ViSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSBDcmVhdGUgbWVudSBpdGVtIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShzdWJJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwic3ViSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzZWNvbmRhcnktbWVudS1saW5rXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKHN1Ykl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3NlY29uZGFyeScpID8gKHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInN1Ykl0ZW0uaWNvblwiIGNsYXNzPVwic3VibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3VibWVudS1sYWJlbFwiPnt7IHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBzdWJtZW51IGlmIGl0IGV4aXN0cyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEBpZihzdWJJdGVtLml0ZW1zICYmIHN1Ykl0ZW0uaXRlbXMubGVuZ3RoID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IDx1bCBjbGFzcz1cInRlcnRpYXJ5LW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBmb3IoY2hpbGRJdGVtIG9mIHN1Ykl0ZW0uaXRlbXM7IHRyYWNrIGNoaWxkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGkgY2xhc3M9XCJ0ZXJ0aWFyeS1tZW51LWl0ZW1cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlUm91dGUoY2hpbGRJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBbcm91dGVyTGlua109XCJjaGlsZEl0ZW0ucm91dGVyTGlua1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ0ZXJ0aWFyeS1tZW51LWxpbmtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIiFpc01vYmlsZSgpICYmIGlzVGV4dFRydW5jYXRlZChjaGlsZEl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3RlcnRpYXJ5JykgPyAoY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRlcnRpYXJ5LWxhYmVsXCI+e3sgY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFsd2F5cyByZW5kZXIgZGVlcGVyIGxldmVscyBpZiB0aGV5IGV4aXN0LCBhbHNvIHZpc2libGUgYnkgZGVmYXVsdCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoY2hpbGRJdGVtLml0ZW1zICYmIGNoaWxkSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx1bCBjbGFzcz1cIm5lc3RlZC1tZW51IGFsd2F5cy1vcGVuXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBmb3IobmVzdGVkSXRlbSBvZiBjaGlsZEl0ZW0uaXRlbXM7IHRyYWNrIG5lc3RlZEl0ZW07IGxldCBpID0gJGluZGV4KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGkgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm5lc3RlZC1tZW51LWl0ZW1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKG5lc3RlZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwibmVzdGVkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibmVzdGVkLW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQobmVzdGVkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnbmVzdGVkJykgPyAobmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCA8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0XHJcbjwvZGl2PlxyXG4iXX0=