@smartbit4all/ng-client 3.2.21 → 3.2.23

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 (86) hide show
  1. package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +1 -1
  2. package/esm2020/lib/smart-filter-editor/api/configuration.mjs +1 -1
  3. package/esm2020/lib/smart-filter-editor/api/encoder.mjs +1 -1
  4. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +1 -1
  5. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +1 -1
  6. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +1 -1
  7. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +1 -1
  8. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +1 -1
  9. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +1 -1
  10. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +1 -1
  11. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +1 -1
  12. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
  13. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +1 -1
  14. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +1 -1
  15. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +1 -1
  16. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +1 -1
  17. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +1 -1
  18. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +1 -1
  19. package/esm2020/lib/smart-filter-editor/api/param.mjs +1 -1
  20. package/esm2020/lib/smart-filter-editor/api/variables.mjs +1 -1
  21. package/esm2020/lib/smart-form/api/model/models.mjs +1 -1
  22. package/esm2020/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  23. package/esm2020/lib/smart-form/api/model/smartWidgetHint.mjs +1 -1
  24. package/esm2020/lib/smart-grid/api/grid-api/api/api.mjs +1 -1
  25. package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +1 -1
  26. package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +1 -1
  27. package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +1 -1
  28. package/esm2020/lib/smart-grid/api/grid-api/encoder.mjs +1 -1
  29. package/esm2020/lib/smart-grid/api/grid-api/index.mjs +1 -1
  30. package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +1 -1
  31. package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  32. package/esm2020/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
  33. package/esm2020/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  34. package/esm2020/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  35. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +1 -1
  36. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +1 -1
  37. package/esm2020/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  38. package/esm2020/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  39. package/esm2020/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  40. package/esm2020/lib/smart-grid/api/grid-api/model/models.mjs +1 -1
  41. package/esm2020/lib/smart-grid/api/grid-api/param.mjs +1 -1
  42. package/esm2020/lib/smart-grid/api/grid-api/variables.mjs +1 -1
  43. package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +16 -26
  44. package/esm2020/lib/smart-icon/smart-icon.service.mjs +34 -5
  45. package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +35 -14
  46. package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +1 -1
  47. package/esm2020/lib/smart-tree/tree-api/configuration.mjs +1 -1
  48. package/esm2020/lib/smart-tree/tree-api/encoder.mjs +1 -1
  49. package/esm2020/lib/smart-tree/tree-api/param.mjs +1 -1
  50. package/esm2020/lib/smart-tree/tree-api/variables.mjs +1 -1
  51. package/esm2020/lib/view-context/api/api/view.service.mjs +1 -1
  52. package/esm2020/lib/view-context/api/model/uploadedFile.mjs +1 -1
  53. package/esm2020/lib/view-context/api/model/viewContextChange.mjs +1 -1
  54. package/esm2020/lib/view-context/api/model/viewEventHandler.mjs +1 -1
  55. package/esm2020/lib/view-context/value-api/api/api.mjs +1 -1
  56. package/esm2020/lib/view-context/value-api/api/value.service.mjs +1 -1
  57. package/esm2020/lib/view-context/value-api/api.module.mjs +1 -1
  58. package/esm2020/lib/view-context/value-api/configuration.mjs +1 -1
  59. package/esm2020/lib/view-context/value-api/encoder.mjs +1 -1
  60. package/esm2020/lib/view-context/value-api/index.mjs +1 -1
  61. package/esm2020/lib/view-context/value-api/model/genericValue.mjs +1 -1
  62. package/esm2020/lib/view-context/value-api/model/models.mjs +1 -1
  63. package/esm2020/lib/view-context/value-api/model/value.mjs +1 -1
  64. package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  65. package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +1 -1
  66. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
  67. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +1 -1
  68. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +1 -1
  69. package/esm2020/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
  70. package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +1 -1
  71. package/esm2020/lib/view-context/value-api/model/valueSetOperation.mjs +1 -1
  72. package/esm2020/lib/view-context/value-api/param.mjs +1 -1
  73. package/esm2020/lib/view-context/value-api/variables.mjs +1 -1
  74. package/fesm2015/smartbit4all-ng-client.mjs +114 -75
  75. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  76. package/fesm2020/smartbit4all-ng-client.mjs +115 -76
  77. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  78. package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +3 -5
  79. package/lib/smart-icon/smart-icon.service.d.ts +9 -2
  80. package/package.json +1 -1
  81. package/smartbit4all-ng-client-3.2.23.tgz +0 -0
  82. package/src/lib/smart-filter-editor/api/README.md +226 -226
  83. package/src/lib/smart-grid/api/grid-api/README.md +226 -226
  84. package/src/lib/smart-tree/tree-api/README.md +226 -226
  85. package/src/lib/view-context/value-api/README.md +226 -226
  86. package/smartbit4all-ng-client-3.2.21.tgz +0 -0
@@ -1,11 +1,10 @@
1
- import { Component, Input } from "@angular/core";
1
+ import { Component, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/material/icon";
4
- import * as i2 from "../smart-icon.service";
3
+ import * as i1 from "../smart-icon.service";
4
+ import * as i2 from "@angular/material/icon";
5
5
  import * as i3 from "@angular/common";
6
6
  export class SmartIconComponent {
7
- constructor(matIconRegistry, service) {
8
- this.matIconRegistry = matIconRegistry;
7
+ constructor(service) {
9
8
  this.service = service;
10
9
  this.isCustom = false;
11
10
  }
@@ -14,35 +13,26 @@ export class SmartIconComponent {
14
13
  this.checkIcon();
15
14
  }
16
15
  async checkIcon() {
17
- await Promise.all(this.service.smartIconSets.map(async (iconSet) => {
18
- let namespace = iconSet.iconSetName;
19
- let svgIcon = await this.matIconRegistry
20
- .getNamedSvgIcon(this.iconWithoutNamespace, namespace)
21
- .toPromise()
22
- .catch((err) => { });
23
- if (!svgIcon) {
24
- return;
25
- }
26
- if (this.isCustom) {
27
- return;
28
- }
29
- this.icon = `${namespace}:${this.iconWithoutNamespace}`;
16
+ let fullyQualifiedIcon = await this.service.getFullyQualifiedIcon(this.iconWithoutNamespace);
17
+ if (fullyQualifiedIcon) {
30
18
  this.isCustom = true;
31
- }));
32
- if (!this.isCustom) {
19
+ this.icon = fullyQualifiedIcon;
20
+ }
21
+ else {
22
+ this.isCustom = false;
33
23
  this.icon = this.iconWithoutNamespace;
34
24
  }
35
25
  }
36
26
  }
37
- SmartIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconComponent, deps: [{ token: i1.MatIconRegistry }, { token: i2.SmartIconService }], target: i0.ɵɵFactoryTarget.Component });
38
- SmartIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartIconComponent, selector: "smart-icon", inputs: { iconWithoutNamespace: ["icon", "iconWithoutNamespace"], color: "color" }, usesOnChanges: true, ngImport: i0, template: "<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"isCustom\" svgIcon=\"{{ icon }}\"></mat-icon>\r\n<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"!isCustom\"> {{ icon }} </mat-icon>\r\n", styles: [""], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
27
+ SmartIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconComponent, deps: [{ token: i1.SmartIconService }], target: i0.ɵɵFactoryTarget.Component });
28
+ SmartIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartIconComponent, selector: "smart-icon", inputs: { iconWithoutNamespace: ["icon", "iconWithoutNamespace"], color: "color" }, usesOnChanges: true, ngImport: i0, template: "<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"isCustom\" svgIcon=\"{{ icon }}\"></mat-icon>\r\n<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"!isCustom\"> {{ icon }} </mat-icon>\r\n", styles: [""], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
39
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconComponent, decorators: [{
40
30
  type: Component,
41
- args: [{ selector: "smart-icon", template: "<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"isCustom\" svgIcon=\"{{ icon }}\"></mat-icon>\r\n<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"!isCustom\"> {{ icon }} </mat-icon>\r\n", styles: [""] }]
42
- }], ctorParameters: function () { return [{ type: i1.MatIconRegistry }, { type: i2.SmartIconService }]; }, propDecorators: { iconWithoutNamespace: [{
31
+ args: [{ selector: 'smart-icon', template: "<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"isCustom\" svgIcon=\"{{ icon }}\"></mat-icon>\r\n<mat-icon [color]=\"color ?? 'primary'\" *ngIf=\"!isCustom\"> {{ icon }} </mat-icon>\r\n", styles: [""] }]
32
+ }], ctorParameters: function () { return [{ type: i1.SmartIconService }]; }, propDecorators: { iconWithoutNamespace: [{
43
33
  type: Input,
44
- args: ["icon"]
34
+ args: ['icon']
45
35
  }], color: [{
46
36
  type: Input
47
37
  }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1pY29uL3NtYXJ0LWljb24vc21hcnQtaWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1pY29uL3NtYXJ0LWljb24vc21hcnQtaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUzNFLE1BQU0sT0FBTyxrQkFBa0I7SUFNM0IsWUFBb0IsZUFBZ0MsRUFBVSxPQUF5QjtRQUFuRSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUZ2RixhQUFRLEdBQVksS0FBSyxDQUFDO0lBRWdFLENBQUM7SUFFM0YsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDWCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFxQixFQUFFLEVBQUU7WUFDNUQsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlO2lCQUNuQyxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztpQkFDckQsU0FBUyxFQUFFO2lCQUNYLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixPQUFPO2FBQ1Y7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUV4RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FDekM7SUFDTCxDQUFDOzsrR0FuQ1Esa0JBQWtCO21HQUFsQixrQkFBa0IsMkpDVC9CLDRMQUVBOzJGRE9hLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO3FJQUtQLG9CQUFvQjtzQkFBbEMsS0FBSzt1QkFBQyxNQUFNO2dCQUVKLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IFNtYXJ0SWNvblNlcnZpY2UsIFNtYXJ0SWNvblNldCB9IGZyb20gXCIuLi9zbWFydC1pY29uLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwic21hcnQtaWNvblwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9zbWFydC1pY29uLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vc21hcnQtaWNvbi5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dChcImljb25cIikgaWNvbldpdGhvdXROYW1lc3BhY2UhOiBzdHJpbmc7XHJcbiAgICBpY29uITogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY29sb3I/OiBzdHJpbmc7XHJcbiAgICBpc0N1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbWF0SWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksIHByaXZhdGUgc2VydmljZTogU21hcnRJY29uU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0N1c3RvbSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tJY29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tJY29uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc21hcnRJY29uU2V0cyEubWFwKGFzeW5jIChpY29uU2V0OiBTbWFydEljb25TZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBuYW1lc3BhY2UgPSBpY29uU2V0Lmljb25TZXROYW1lO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN2Z0ljb24gPSBhd2FpdCB0aGlzLm1hdEljb25SZWdpc3RyeVxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXROYW1lZFN2Z0ljb24odGhpcy5pY29uV2l0aG91dE5hbWVzcGFjZSwgbmFtZXNwYWNlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN2Z0ljb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0N1c3RvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbiA9IGAke25hbWVzcGFjZX06JHt0aGlzLmljb25XaXRob3V0TmFtZXNwYWNlfWA7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0N1c3RvbSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgdGhpcy5pY29uID0gdGhpcy5pY29uV2l0aG91dE5hbWVzcGFjZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPG1hdC1pY29uIFtjb2xvcl09XCJjb2xvciA/PyAncHJpbWFyeSdcIiAqbmdJZj1cImlzQ3VzdG9tXCIgc3ZnSWNvbj1cInt7IGljb24gfX1cIj48L21hdC1pY29uPlxyXG48bWF0LWljb24gW2NvbG9yXT1cImNvbG9yID8/ICdwcmltYXJ5J1wiICpuZ0lmPVwiIWlzQ3VzdG9tXCI+IHt7IGljb24gfX0gPC9tYXQtaWNvbj5cclxuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1pY29uL3NtYXJ0LWljb24vc21hcnQtaWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1pY29uL3NtYXJ0LWljb24vc21hcnQtaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUTNFLE1BQU0sT0FBTyxrQkFBa0I7SUFNN0IsWUFBb0IsT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFGN0MsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUVzQixDQUFDO0lBRWpELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0YsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1NBQ2hDO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztTQUN2QztJQUNILENBQUM7OytHQXRCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwySkNSL0IsNExBRUE7MkZETWEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLFlBQVk7dUdBS1Asb0JBQW9CO3NCQUFsQyxLQUFLO3VCQUFDLE1BQU07Z0JBRUosS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNtYXJ0SWNvblNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC1pY29uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1pY29uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtaWNvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtaWNvbi5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgnaWNvbicpIGljb25XaXRob3V0TmFtZXNwYWNlITogc3RyaW5nO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29sb3I/OiBzdHJpbmc7XHJcbiAgaXNDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBTbWFydEljb25TZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQ3VzdG9tID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrSWNvbigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tJY29uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGZ1bGx5UXVhbGlmaWVkSWNvbiA9IGF3YWl0IHRoaXMuc2VydmljZS5nZXRGdWxseVF1YWxpZmllZEljb24odGhpcy5pY29uV2l0aG91dE5hbWVzcGFjZSk7XHJcbiAgICBpZiAoZnVsbHlRdWFsaWZpZWRJY29uKSB7XHJcbiAgICAgIHRoaXMuaXNDdXN0b20gPSB0cnVlO1xyXG4gICAgICB0aGlzLmljb24gPSBmdWxseVF1YWxpZmllZEljb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ3VzdG9tID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaWNvbiA9IHRoaXMuaWNvbldpdGhvdXROYW1lc3BhY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAgIGFzeW5jIGNoZWNrSWNvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAvLyAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgLy8gICAgICAgdGhpcy5zZXJ2aWNlLnNtYXJ0SWNvblNldHMhLm1hcChhc3luYyAoaWNvblNldDogU21hcnRJY29uU2V0KSA9PiB7XHJcbiAgLy8gICAgICAgICBsZXQgbmFtZXNwYWNlID0gaWNvblNldC5pY29uU2V0TmFtZTtcclxuICAvLyAgICAgICAgIGxldCBzdmdJY29uID0gYXdhaXQgdGhpcy5tYXRJY29uUmVnaXN0cnlcclxuICAvLyAgICAgICAgICAgLmdldE5hbWVkU3ZnSWNvbih0aGlzLmljb25XaXRob3V0TmFtZXNwYWNlLCBuYW1lc3BhY2UpXHJcbiAgLy8gICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gIC8vICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge30pO1xyXG4gIC8vICAgICAgICAgaWYgKCFzdmdJY29uKSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGlmICh0aGlzLmlzQ3VzdG9tKSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIHRoaXMuaWNvbiA9IGAke25hbWVzcGFjZX06JHt0aGlzLmljb25XaXRob3V0TmFtZXNwYWNlfWA7XHJcblxyXG4gIC8vICAgICAgICAgdGhpcy5pc0N1c3RvbSA9IHRydWU7XHJcbiAgLy8gICAgICAgfSlcclxuICAvLyAgICAgKTtcclxuICAvLyAgICAgaWYgKCF0aGlzLmlzQ3VzdG9tKSB7XHJcbiAgLy8gICAgICAgdGhpcy5pY29uID0gdGhpcy5pY29uV2l0aG91dE5hbWVzcGFjZTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG59XHJcbiIsIjxtYXQtaWNvbiBbY29sb3JdPVwiY29sb3IgPz8gJ3ByaW1hcnknXCIgKm5nSWY9XCJpc0N1c3RvbVwiIHN2Z0ljb249XCJ7eyBpY29uIH19XCI+PC9tYXQtaWNvbj5cclxuPG1hdC1pY29uIFtjb2xvcl09XCJjb2xvciA/PyAncHJpbWFyeSdcIiAqbmdJZj1cIiFpc0N1c3RvbVwiPiB7eyBpY29uIH19IDwvbWF0LWljb24+XHJcbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Injectable } from "@angular/core";
1
+ import { Injectable } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/material/icon";
4
4
  import * as i2 from "@angular/platform-browser";
@@ -6,7 +6,8 @@ export class SmartIconService {
6
6
  constructor(matIconRegistry, sanitizer) {
7
7
  this.matIconRegistry = matIconRegistry;
8
8
  this.sanitizer = sanitizer;
9
- this.assets = "assets";
9
+ this.assets = 'assets';
10
+ this.fullyQualifiedIconByIcon = new Map();
10
11
  }
11
12
  setSourceFolder(path) {
12
13
  this.assets = path;
@@ -33,13 +34,41 @@ export class SmartIconService {
33
34
  this.matIconRegistry.addSvgIconInNamespace(iconSet.iconSetName, icon, this.sanitizer.bypassSecurityTrustResourceUrl(`${this.assets}/${iconSet.iconSetName}/${iconSet.iconSetEnum[icon]}.svg`));
34
35
  });
35
36
  }
37
+ /**
38
+ * Returns fully qualified icon name with namespace if found in iconSets, otherwise returns undefined.
39
+ * @param iconWithoutNamespace
40
+ * @returns
41
+ */
42
+ async getFullyQualifiedIcon(iconWithoutNamespace) {
43
+ if (this.fullyQualifiedIconByIcon.has(iconWithoutNamespace)) {
44
+ return this.fullyQualifiedIconByIcon.get(iconWithoutNamespace);
45
+ }
46
+ let icon = undefined;
47
+ if (this.smartIconSets) {
48
+ for (let iconSet of this.smartIconSets) {
49
+ if (!icon) {
50
+ let namespace = iconSet.iconSetName;
51
+ let svgIcon = await this.matIconRegistry
52
+ .getNamedSvgIcon(iconWithoutNamespace, namespace)
53
+ .toPromise()
54
+ .catch((err) => { });
55
+ if (svgIcon) {
56
+ icon = `${namespace}:${iconWithoutNamespace}`;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ // if icon is undefined (not found in iconset), we indicate it in map, so we don't search every time.
62
+ this.fullyQualifiedIconByIcon.set(iconWithoutNamespace, icon);
63
+ return icon;
64
+ }
36
65
  }
37
66
  SmartIconService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconService, deps: [{ token: i1.MatIconRegistry }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
38
- SmartIconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconService, providedIn: "root" });
67
+ SmartIconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconService, providedIn: 'root' });
39
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartIconService, decorators: [{
40
69
  type: Injectable,
41
70
  args: [{
42
- providedIn: "root",
71
+ providedIn: 'root',
43
72
  }]
44
73
  }], ctorParameters: function () { return [{ type: i1.MatIconRegistry }, { type: i2.DomSanitizer }]; } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtaWNvbi9zbWFydC1pY29uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVkzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBS3pCLFlBQW9CLGVBQWdDLEVBQVUsU0FBdUI7UUFBakUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUo3RSxXQUFNLEdBQUcsUUFBUSxDQUFDO0lBSThELENBQUM7SUFFbEYsZUFBZSxDQUFDLElBQVk7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxRQUFhO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsT0FBTztnQkFDSCxXQUFXO2dCQUNYLFdBQVc7YUFDZCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLElBQUksQ0FBQyxPQUFxQjtRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUN0QyxPQUFPLENBQUMsV0FBVyxFQUNuQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDekMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUMzRSxDQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzZHQXpDUSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTbWFydEljb25TZXQge1xyXG4gICAgaWNvblNldE5hbWU6IHN0cmluZztcclxuICAgIGljb25TZXRFbnVtOiBhbnk7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRJY29uU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGFzc2V0cyA9IFwiYXNzZXRzXCI7XHJcbiAgICBwcml2YXRlIGVudmlyb25tZW50SWNvblNldHM/OiBhbnk7XHJcbiAgICBwdWJsaWMgc21hcnRJY29uU2V0cz86IFNtYXJ0SWNvblNldFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbWF0SWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XHJcblxyXG4gICAgcHVibGljIHNldFNvdXJjZUZvbGRlcihwYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFzc2V0cyA9IHBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGljb25TZXRzKGljb25TZXRzOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50SWNvblNldHMgPSBpY29uU2V0cztcclxuICAgICAgICB0aGlzLnNldFVwSWNvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVwSWNvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zbWFydEljb25TZXRzID0gdGhpcy5lbnZpcm9ubWVudEljb25TZXRzLm1hcCgoaWNvblNldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpY29uU2V0TmFtZSA9IE9iamVjdC5rZXlzKGljb25TZXQpWzBdO1xyXG4gICAgICAgICAgICBsZXQgaWNvblNldEVudW0gPSBpY29uU2V0W2ljb25TZXROYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGljb25TZXRFbnVtLFxyXG4gICAgICAgICAgICAgICAgaWNvblNldE5hbWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc21hcnRJY29uU2V0cyEuZm9yRWFjaCgoaWNvblNldDogU21hcnRJY29uU2V0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZChpY29uU2V0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWQoaWNvblNldDogU21hcnRJY29uU2V0KTogdm9pZCB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoaWNvblNldC5pY29uU2V0RW51bSkuZm9yRWFjaCgoaWNvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZShcclxuICAgICAgICAgICAgICAgIGljb25TZXQuaWNvblNldE5hbWUsXHJcbiAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuYXNzZXRzfS8ke2ljb25TZXQuaWNvblNldE5hbWV9LyR7aWNvblNldC5pY29uU2V0RW51bVtpY29uXX0uc3ZnYFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtaWNvbi9zbWFydC1pY29uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQWEzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQW9CLGVBQWdDLEVBQVUsU0FBdUI7UUFBakUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUo3RSxXQUFNLEdBQUcsUUFBUSxDQUFDO1FBMENsQiw2QkFBd0IsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQXRDVSxDQUFDO0lBRWxGLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsUUFBYTtRQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNqRSxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPO2dCQUNMLFdBQVc7Z0JBQ1gsV0FBVzthQUNaLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBcUIsRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sSUFBSSxDQUFDLE9BQXFCO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQ3hDLE9BQU8sQ0FBQyxXQUFXLEVBQ25CLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUMzQyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3pFLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsb0JBQTRCO1FBQ3RELElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQzNELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1QsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZTt5QkFDckMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQzt5QkFDaEQsU0FBUyxFQUFFO3lCQUNYLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLElBQUksT0FBTyxFQUFFO3dCQUNYLElBQUksR0FBRyxHQUFHLFNBQVMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO3FCQUMvQztpQkFDRjthQUNGO1NBQ0Y7UUFDRCxxR0FBcUc7UUFDckcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OzZHQXhFVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0SWNvblNldCB7XHJcbiAgaWNvblNldE5hbWU6IHN0cmluZztcclxuICBpY29uU2V0RW51bTogYW55O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRJY29uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBhc3NldHMgPSAnYXNzZXRzJztcclxuICBwcml2YXRlIGVudmlyb25tZW50SWNvblNldHM/OiBhbnk7XHJcbiAgcHVibGljIHNtYXJ0SWNvblNldHM/OiBTbWFydEljb25TZXRbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXRJY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSwgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cclxuXHJcbiAgcHVibGljIHNldFNvdXJjZUZvbGRlcihwYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYXNzZXRzID0gcGF0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpY29uU2V0cyhpY29uU2V0czogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50SWNvblNldHMgPSBpY29uU2V0cztcclxuICAgIHRoaXMuc2V0VXBJY29ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcEljb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydEljb25TZXRzID0gdGhpcy5lbnZpcm9ubWVudEljb25TZXRzLm1hcCgoaWNvblNldDogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpY29uU2V0TmFtZSA9IE9iamVjdC5rZXlzKGljb25TZXQpWzBdO1xyXG4gICAgICBsZXQgaWNvblNldEVudW0gPSBpY29uU2V0W2ljb25TZXROYW1lXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpY29uU2V0RW51bSxcclxuICAgICAgICBpY29uU2V0TmFtZSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRJY29uU2V0cyEuZm9yRWFjaCgoaWNvblNldDogU21hcnRJY29uU2V0KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZChpY29uU2V0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkKGljb25TZXQ6IFNtYXJ0SWNvblNldCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoaWNvblNldC5pY29uU2V0RW51bSkuZm9yRWFjaCgoaWNvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZShcclxuICAgICAgICBpY29uU2V0Lmljb25TZXROYW1lLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxyXG4gICAgICAgICAgYCR7dGhpcy5hc3NldHN9LyR7aWNvblNldC5pY29uU2V0TmFtZX0vJHtpY29uU2V0Lmljb25TZXRFbnVtW2ljb25dfS5zdmdgXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZ1bGx5UXVhbGlmaWVkSWNvbkJ5SWNvbjogTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmdWxseSBxdWFsaWZpZWQgaWNvbiBuYW1lIHdpdGggbmFtZXNwYWNlIGlmIGZvdW5kIGluIGljb25TZXRzLCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQuXHJcbiAgICogQHBhcmFtIGljb25XaXRob3V0TmFtZXNwYWNlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBnZXRGdWxseVF1YWxpZmllZEljb24oaWNvbldpdGhvdXROYW1lc3BhY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBpZiAodGhpcy5mdWxseVF1YWxpZmllZEljb25CeUljb24uaGFzKGljb25XaXRob3V0TmFtZXNwYWNlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mdWxseVF1YWxpZmllZEljb25CeUljb24uZ2V0KGljb25XaXRob3V0TmFtZXNwYWNlKTtcclxuICAgIH1cclxuICAgIGxldCBpY29uID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc21hcnRJY29uU2V0cykge1xyXG4gICAgICBmb3IgKGxldCBpY29uU2V0IG9mIHRoaXMuc21hcnRJY29uU2V0cykge1xyXG4gICAgICAgIGlmICghaWNvbikge1xyXG4gICAgICAgICAgbGV0IG5hbWVzcGFjZSA9IGljb25TZXQuaWNvblNldE5hbWU7XHJcbiAgICAgICAgICBsZXQgc3ZnSWNvbiA9IGF3YWl0IHRoaXMubWF0SWNvblJlZ2lzdHJ5XHJcbiAgICAgICAgICAgIC5nZXROYW1lZFN2Z0ljb24oaWNvbldpdGhvdXROYW1lc3BhY2UsIG5hbWVzcGFjZSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7fSk7XHJcbiAgICAgICAgICBpZiAoc3ZnSWNvbikge1xyXG4gICAgICAgICAgICBpY29uID0gYCR7bmFtZXNwYWNlfToke2ljb25XaXRob3V0TmFtZXNwYWNlfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiBpY29uIGlzIHVuZGVmaW5lZCAobm90IGZvdW5kIGluIGljb25zZXQpLCB3ZSBpbmRpY2F0ZSBpdCBpbiBtYXAsIHNvIHdlIGRvbid0IHNlYXJjaCBldmVyeSB0aW1lLlxyXG4gICAgdGhpcy5mdWxseVF1YWxpZmllZEljb25CeUljb24uc2V0KGljb25XaXRob3V0TmFtZXNwYWNlLCBpY29uKTtcclxuICAgIHJldHVybiBpY29uO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -4,6 +4,7 @@ import { TreeService } from './tree-api/api/tree.service';
4
4
  import { SmartTreeNodeButtonType } from './smarttree.model';
5
5
  import { SmarttreeService } from './smarttree.service';
6
6
  import { Subject } from 'rxjs';
7
+ import { deepEqual } from 'fast-equals';
7
8
  import * as i0 from "@angular/core";
8
9
  export class SmarttreeGenericService extends SmarttreeService {
9
10
  constructor(inject, pageName, treeId) {
@@ -42,8 +43,10 @@ export class SmarttreeGenericService extends SmarttreeService {
42
43
  async initialize() {
43
44
  if (sessionStorage.getItem(this.viewContextName)) {
44
45
  await this.downloadTree().then((rootNodes) => {
45
- this.treeFromBackend = rootNodes;
46
- this.syncTree();
46
+ if (!deepEqual(this.treeFromBackend, rootNodes)) {
47
+ this.treeFromBackend = rootNodes;
48
+ this.syncTree();
49
+ }
47
50
  });
48
51
  }
49
52
  }
@@ -199,18 +202,36 @@ export class SmarttreeGenericService extends SmarttreeService {
199
202
  return nodes.flatMap((n) => [n, ...this.getAllNodes(n.childrenNodes)]);
200
203
  }
201
204
  async cacheActionDesciptors(nodes) {
202
- await Promise.all(nodes.map(async (node) => {
203
- let newUiActions = node.actions?.filter((uiAction) => !this.uiActionDescriptors.get(uiAction.code));
204
- if (!newUiActions) {
205
- return;
205
+ let newUiActions = new Set();
206
+ nodes.forEach((node) => {
207
+ node.actions
208
+ ?.filter((uiAction) => !this.uiActionDescriptors.get(uiAction.code))
209
+ .forEach((action) => newUiActions.add(action));
210
+ });
211
+ for (let action of newUiActions) {
212
+ if (!this.uiActionDescriptors.get(action.code)) {
213
+ let descriptor = await this.uiActionDescriptorService.getActionDescriptor(action);
214
+ this.uiActionDescriptors.set(action.code, descriptor);
206
215
  }
207
- await Promise.all(newUiActions.map(async (uiAction) => {
208
- if (!this.uiActionDescriptors.get(uiAction.code)) {
209
- let descriptor = await this.uiActionDescriptorService.getActionDescriptor(uiAction);
210
- this.uiActionDescriptors.set(uiAction.code, descriptor);
211
- }
212
- }));
213
- }));
216
+ }
217
+ // await Promise.all(
218
+ // nodes.map(async (node: SmartTreeNode) => {
219
+ // let newUiActions = node.actions?.filter(
220
+ // (uiAction: UiAction) => !this.uiActionDescriptors.get(uiAction.code!)
221
+ // );
222
+ // if (!newUiActions) {
223
+ // return;
224
+ // }
225
+ // await Promise.all(
226
+ // newUiActions!.map(async (uiAction: UiAction) => {
227
+ // if (!this.uiActionDescriptors.get(uiAction.code!)) {
228
+ // let descriptor = await this.uiActionDescriptorService.getActionDescriptor(uiAction);
229
+ // this.uiActionDescriptors.set(uiAction.code!, descriptor);
230
+ // }
231
+ // })
232
+ // );
233
+ // })
234
+ // );
214
235
  }
215
236
  getLabelByAction(action) {
216
237
  let desc = this.uiActionDescriptors.get(action.code);
@@ -275,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
275
296
  type: Inject,
276
297
  args: ['treeId']
277
298
  }] }]; } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVcvQixNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBaUM7SUFtQnpDLFlBQ0UsTUFBZ0IsRUFDYyxRQUFnQixFQUNsQixNQUFjO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FBSHNCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CNUMseUJBQXlCO1FBQ3pCLFdBQU0sR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuRCx3QkFBbUIsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUlqRSxvQkFBZSxHQUFXLGlCQUFpQixDQUFDO1FBZTFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixlQUFlLEVBQUUsSUFB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QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBdUJJLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBTbWFydFZpZXdDb250ZXh0U2VydmljZSxcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Nb2RlbCxcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVWlBY3Rpb25TZXJ2aWNlLFxyXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcclxuICBVc2VVaUFjdGlvbixcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS1hcGkvYXBpL3RyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0VHJlZU5vZGUsIFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlIH0gZnJvbSAnLi9zbWFydHRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydHRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21hcnR0cmVlQ29uZmlndXJhdGlvbiB7XHJcbiAgdHJlZWlkOiBzdHJpbmc7XHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmc7XHJcbiAgcGFnZU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlXHJcbiAgZXh0ZW5kcyBTbWFydHRyZWVTZXJ2aWNlPFNtYXJ0VHJlZU5vZGVbXT5cclxuICBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uXHJcbntcclxuICAvLyBVc2VVaUFjdGlvbiBwcm9wZXJ0aWVzXHJcbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICByZVN1YnNjcmliZVRvQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgc2VsZWN0ZWROb2RlPzogU21hcnRUcmVlTm9kZTtcclxuXHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuXHJcbiAgcHJvdGVjdGVkIHZpZXdDb250ZXh0ITogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBzZXJ2aWNlITogVHJlZVNlcnZpY2U7XHJcblxyXG4gIHByaXZhdGUgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSE6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgcHJpdmF0ZSB1aUFjdGlvblNlcnZpY2UhOiBVaUFjdGlvblNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoJ3BhZ2VOYW1lJykgcHJvdGVjdGVkIHBhZ2VOYW1lOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KCd0cmVlSWQnKSBwcm90ZWN0ZWQgdHJlZUlkOiBzdHJpbmdcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVUcmVlKHtcclxuICAgICAgcGFnZU5hbWU6IHRoaXMucGFnZU5hbWUsXHJcbiAgICAgIHRyZWVpZDogdGhpcy50cmVlSWQsXHJcbiAgICAgIHZpZXdDb250ZXh0TmFtZTogdGhpcy52aWV3Q29udGV4dE5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcbiAgICB0aGlzLnNlcnZpY2UgPSBpbmplY3QuZ2V0KFRyZWVTZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnM6IFVpQWN0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSB1aUFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZVRyZWUoY29uZmlndXJhdGlvbjogU21hcnR0cmVlQ29uZmlndXJhdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy50cmVlSWQgPSBjb25maWd1cmF0aW9uLnRyZWVpZDtcclxuICAgIHRoaXMudmlld0NvbnRleHROYW1lID0gY29uZmlndXJhdGlvbi52aWV3Q29udGV4dE5hbWU7XHJcbiAgICB0aGlzLnBhZ2VOYW1lID0gY29uZmlndXJhdGlvbi5wYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRUcmVlKCkudGhlbigocm9vdE5vZGVzOiBTbWFydFRyZWVOb2RlW10pID0+IHtcclxuICAgICAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IHJvb3ROb2RlcztcclxuICAgICAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBkb3dubG9hZFRyZWUoKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IHJvb3ROb2RlcyA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Um9vdE5vZGVzMih1dWlkLCB0aGlzLnRyZWVJZCEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gICAgY29uc3QgdWlBY3Rpb25zID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5nZXRNYWluQWN0aW9uczIodXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJvb3ROb2Rlcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3ROb2RlcyBhcmUgdW5kZWZpbmVkIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvb3ROb2RlcztcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRDaGlsZHJlbihwYXJlbnROb2RlOiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5nZXRDaGlsZHJlbk5vZGVzMih1dWlkLCB0aGlzLnRyZWVJZCEsIHBhcmVudE5vZGUuaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgd2l0aCBpZGVudGlmaWVyICR7cGFyZW50Tm9kZS5pZGVudGlmaWVyfSBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgb25UcmVlTm9kZU9wZW4odHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgaWYgKHRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmNvbGxhcHNlTm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGUuaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRyZWVOb2RlID0gdGVtcFRyZWVOb2RlITtcclxuICAgIH0gZWxzZSBpZiAoIXRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZE5vZGUyKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlPy5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcclxuICAgICAgKTtcclxuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZSh0cmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcblxyXG4gICAgbm9kZSEuZXhwYW5kZWQgPSB0cmVlTm9kZT8uZXhwYW5kZWQ7XHJcbiAgICBub2RlIS5jaGlsZHJlbk5vZGVzID0gdHJlZU5vZGU/LmNoaWxkcmVuTm9kZXM7XHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG4gIG92ZXJyaWRlIG9uVHJlZU5vZGVDbGljayh0cmVlTm9kZTogU21hcnRUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RGb2xkZXIodHJlZU5vZGUuaWRlbnRpZmllciEsIHRyZWVOb2RlKTtcclxuICB9XHJcbiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGZvbGRlclVyaTogc3RyaW5nLCB0cmVlTm9kZT86IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgbGV0IHVwZGF0ZWRUcmVlTm9kZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0Tm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGUhLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB1cGRhdGVkVHJlZU5vZGU7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKHVwZGF0ZWRUcmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RyZWUgbm9kZSBkb2VzIG5vdCBleGlzdCcpO1xyXG4gICAgfVxyXG4gICAgbm9kZS5leHBhbmRlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uZXhwYW5kZWQhO1xyXG4gICAgbm9kZS5jaGlsZHJlbk5vZGVzID0gdXBkYXRlZFRyZWVOb2RlPy5jaGlsZHJlbk5vZGVzITtcclxuICAgIG5vZGUuc2VsZWN0ZWQgPSB1cGRhdGVkVHJlZU5vZGU/LnNlbGVjdGVkITtcclxuICAgIHRyZWVOb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC5nZXRBbmRTeW5jVmlld0NvbnRleHQodGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMudmlld0NvbnRleHROYW1lISkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlVHJlZU9uVGhlRmx5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBzeW5jVHJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuY2FjaGVBY3Rpb25EZXNjaXB0b3JzKHRoaXMuZ2V0QWxsTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQhKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnRyZWVGcm9tQmFja2VuZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIHRyZWVGcm9tQmFja2VuZCBhdmFpbGFibGUhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUcmVlTW9kZWwpIHtcclxuICAgICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHtcclxuICAgICAgICByb290Tm9kZXM6IFtdLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzbWFydFRyZWVOb2RlczogU21hcnRUcmVlTm9kZVtdID0gdGhpcy5jcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKHRoaXMudHJlZUZyb21CYWNrZW5kKTtcclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHtcclxuICAgICAgcm9vdE5vZGVzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5uZXh0KHRoaXMuc21hcnRUcmVlTW9kZWwpO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwucm9vdE5vZGVzID0gc21hcnRUcmVlTm9kZXM7XHJcblxyXG4gICAgdGhpcy5maW5kU2VsZWN0ZWQodGhpcy5zbWFydFRyZWVNb2RlbC5yb290Tm9kZXMpO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLm5leHQodGhpcy5zbWFydFRyZWVNb2RlbCk7XHJcbiAgfVxyXG5cclxuICBkZWVwU2VhcmNoVHJlZU5vZGUoaWRlbnRpZmllcjogc3RyaW5nLCBub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgdHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpbmRleF07XHJcblxyXG4gICAgICBpZiAobm9kZS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XHJcbiAgICAgICAgdHJlZU5vZGUgPSBub2RlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuTm9kZXMgJiYgbm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHRyZWVOb2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUoaWRlbnRpZmllciwgbm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICAgICAgICBpZiAodHJlZU5vZGUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyZWVOb2RlO1xyXG4gIH1cclxuXHJcbiAgZmluZFNlbGVjdGVkKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiBub2Rlcy5mb3JFYWNoKChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkcmVuTm9kZXMgJiYgbm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZChub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXMobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IFNtYXJ0VHJlZU5vZGVbXSB7XHJcbiAgICBub2Rlcy5tYXAoKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgbm9kZS5idXR0b24gPSBub2RlLmFjdGlvbnM/Lmxlbmd0aFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICB0eXBlOiBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcclxuICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zOiBub2RlLmFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsQnlBY3Rpb24oYWN0aW9uKSxcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmRvQWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBbYWN0aW9uLCBub2RlLmlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBub2RlLmljb24gPSAnRm9sZGVycyc7XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuTm9kZXMpIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuTm9kZXMgPSB0aGlzLmNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXMobm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkb0FjdGlvbihhcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHVpQWN0aW9uOiBVaUFjdGlvbiA9IGFyZ3NbMF07XHJcbiAgICBsZXQgbm9kZVV1aWQ6IHN0cmluZyA9IGFyZ3NbMV07XHJcblxyXG4gICAgaWYgKHVpQWN0aW9uLnBhcmFtcykge1xyXG4gICAgICB1aUFjdGlvbi5wYXJhbXNbJ25vZGVVdWlkJ10gPSBub2RlVXVpZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgICBub2RlVXVpZDogbm9kZVV1aWQsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHVpQWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgdWlBY3Rpb24sXHJcbiAgICB9O1xyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIHJldHVybiBub2Rlcy5mbGF0TWFwKChuKSA9PiBbbiwgLi4udGhpcy5nZXRBbGxOb2RlcyhuLmNoaWxkcmVuTm9kZXMpXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXN5bmMgY2FjaGVBY3Rpb25EZXNjaXB0b3JzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pIHtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBub2Rlcy5tYXAoYXN5bmMgKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gbm9kZS5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghbmV3VWlBY3Rpb25zKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgIG5ld1VpQWN0aW9ucyEubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKSkge1xyXG4gICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG4gICAgICAgICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQodWlBY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRMYWJlbEJ5QWN0aW9uKGFjdGlvbjogVWlBY3Rpb24pOiBzdHJpbmcge1xyXG4gICAgbGV0IGRlc2MgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KGFjdGlvbi5jb2RlISk7XHJcbiAgICByZXR1cm4gZGVzYyEudGl0bGU7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFVzZVVpQWN0aW9uXHJcbiAgZ2V0QWRkaXRpb25hbFBhcmFtcyh1aUFjdGlvbjogVWlBY3Rpb24pOiBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMge1xyXG4gICAgaWYgKHVpQWN0aW9uLnBhcmFtcyAmJiB1aUFjdGlvbi5wYXJhbXNbJ25vZGVVdWlkJ10pIHtcclxuICAgICAgbGV0IG5vZGVVdWlkID0gdWlBY3Rpb24ucGFyYW1zIVsnbm9kZVV1aWQnXTtcclxuXHJcbiAgICAgIGxldCBub2RlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodWlBY3Rpb24uY29kZSA9PT0gJ1JFTkFNRScpIHtcclxuICAgICAgICBub2RlTmFtZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKG5vZGVVdWlkLCB0aGlzLnRyZWVGcm9tQmFja2VuZCEpPy5jYXB0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgICBmb3JUZXh0RmllbGQ6IG5vZGVOYW1lID8gbm9kZU5hbWUgOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ10pIHtcclxuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTm9kZVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTWFpblVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KCk7XHJcblxyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IG5vZGVJZCA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ107XHJcbiAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXTtcclxuXHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcblxyXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnBlcmZvcm1BY3Rpb24yKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgYXN5bmMgcGVyZm9ybU1haW5VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUpO1xyXG5cclxuICAgIHRoaXMudHJlZUZyb21CYWNrZW5kID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5wZXJmb3JtTWFpbkFjdGlvbjIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcbn1cclxuIl19
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBV3hDLE1BQU0sT0FBTyx1QkFDWCxTQUFRLGdCQUFpQztJQW1CekMsWUFDRSxNQUFnQixFQUNjLFFBQWdCLEVBQ2xCLE1BQWM7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFIc0IsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbkI1Qyx5QkFBeUI7UUFDekIsV0FBTSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLHdCQUFtQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRW5ELHdCQUFtQixHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBSWpFLG9CQUFlLEdBQVcsaUJBQWlCLENBQUM7UUFlMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFB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QUN2RSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQzNGLENBQUM7SUFDSixDQUFDO0lBRUQsbUNBQW1DLENBQ2pDLFFBQWtCLEVBQ2xCLGVBQWdDO1FBRWhDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztvSEE1VlUsdUJBQXVCLDBDQXNCeEIsVUFBVSxhQUNWLFFBQVE7d0hBdkJQLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXVCSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24sXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUtYXBpL2FwaS90cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFRyZWVOb2RlLCBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSB9IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnR0cmVlU2VydmljZSB9IGZyb20gJy4vc21hcnR0cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJ2Zhc3QtZXF1YWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21hcnR0cmVlQ29uZmlndXJhdGlvbiB7XHJcbiAgdHJlZWlkOiBzdHJpbmc7XHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmc7XHJcbiAgcGFnZU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlXHJcbiAgZXh0ZW5kcyBTbWFydHRyZWVTZXJ2aWNlPFNtYXJ0VHJlZU5vZGVbXT5cclxuICBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uXHJcbntcclxuICAvLyBVc2VVaUFjdGlvbiBwcm9wZXJ0aWVzXHJcbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICByZVN1YnNjcmliZVRvQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgc2VsZWN0ZWROb2RlPzogU21hcnRUcmVlTm9kZTtcclxuXHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuXHJcbiAgcHJvdGVjdGVkIHZpZXdDb250ZXh0ITogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBzZXJ2aWNlITogVHJlZVNlcnZpY2U7XHJcblxyXG4gIHByaXZhdGUgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSE6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgcHJpdmF0ZSB1aUFjdGlvblNlcnZpY2UhOiBVaUFjdGlvblNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoJ3BhZ2VOYW1lJykgcHJvdGVjdGVkIHBhZ2VOYW1lOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KCd0cmVlSWQnKSBwcm90ZWN0ZWQgdHJlZUlkOiBzdHJpbmdcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVUcmVlKHtcclxuICAgICAgcGFnZU5hbWU6IHRoaXMucGFnZU5hbWUsXHJcbiAgICAgIHRyZWVpZDogdGhpcy50cmVlSWQsXHJcbiAgICAgIHZpZXdDb250ZXh0TmFtZTogdGhpcy52aWV3Q29udGV4dE5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcbiAgICB0aGlzLnNlcnZpY2UgPSBpbmplY3QuZ2V0KFRyZWVTZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnM6IFVpQWN0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSB1aUFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZVRyZWUoY29uZmlndXJhdGlvbjogU21hcnR0cmVlQ29uZmlndXJhdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy50cmVlSWQgPSBjb25maWd1cmF0aW9uLnRyZWVpZDtcclxuICAgIHRoaXMudmlld0NvbnRleHROYW1lID0gY29uZmlndXJhdGlvbi52aWV3Q29udGV4dE5hbWU7XHJcbiAgICB0aGlzLnBhZ2VOYW1lID0gY29uZmlndXJhdGlvbi5wYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRUcmVlKCkudGhlbigocm9vdE5vZGVzOiBTbWFydFRyZWVOb2RlW10pID0+IHtcclxuICAgICAgICBpZiAoIWRlZXBFcXVhbCh0aGlzLnRyZWVGcm9tQmFja2VuZCwgcm9vdE5vZGVzKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSByb290Tm9kZXM7XHJcbiAgICAgICAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRUcmVlKCk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XHJcbiAgICBsZXQgdXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICBjb25zdCByb290Tm9kZXMgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmdldFJvb3ROb2RlczIodXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHVpQWN0aW9ucyA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0TWFpbkFjdGlvbnMyKHV1aWQsIHRoaXMudHJlZUlkISkudG9Qcm9taXNlKClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHVpQWN0aW9ucykge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdFVpQWN0aW9uTW9kZWxzKHVpQWN0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyb290Tm9kZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290Tm9kZXMgYXJlIHVuZGVmaW5lZCEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByb290Tm9kZXM7XHJcbiAgfVxyXG4gIG92ZXJyaWRlIGFzeW5jIGRvd25sb2FkQ2hpbGRyZW4ocGFyZW50Tm9kZTogU21hcnRUcmVlTm9kZSk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XHJcbiAgICBsZXQgdXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Q2hpbGRyZW5Ob2RlczIodXVpZCwgdGhpcy50cmVlSWQhLCBwYXJlbnROb2RlLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIGlmICghY2hpbGRyZW4pIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIHdpdGggaWRlbnRpZmllciAke3BhcmVudE5vZGUuaWRlbnRpZmllcn0gZG9lcyBub3QgaGF2ZSBjaGlsZHJlbi5gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgfVxyXG4gIG92ZXJyaWRlIGFzeW5jIG9uVHJlZU5vZGVPcGVuKHRyZWVOb2RlOiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG5cclxuICAgIGlmICh0cmVlTm9kZT8uZXhwYW5kZWQpIHtcclxuICAgICAgbGV0IHRlbXBUcmVlTm9kZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5jb2xsYXBzZU5vZGUyKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxyXG4gICAgICApO1xyXG4gICAgICB0cmVlTm9kZSA9IHRlbXBUcmVlTm9kZSE7XHJcbiAgICB9IGVsc2UgaWYgKCF0cmVlTm9kZT8uZXhwYW5kZWQpIHtcclxuICAgICAgbGV0IHRlbXBUcmVlTm9kZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmROb2RlMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZT8uaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRyZWVOb2RlID0gdGVtcFRyZWVOb2RlITtcclxuICAgIH1cclxuICAgIGxldCBub2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUodHJlZU5vZGU/LmlkZW50aWZpZXIhLCB0aGlzLnRyZWVGcm9tQmFja2VuZCEpO1xyXG5cclxuICAgIG5vZGUhLmV4cGFuZGVkID0gdHJlZU5vZGU/LmV4cGFuZGVkO1xyXG4gICAgbm9kZSEuY2hpbGRyZW5Ob2RlcyA9IHRyZWVOb2RlPy5jaGlsZHJlbk5vZGVzO1xyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gIH1cclxuICBvdmVycmlkZSBvblRyZWVOb2RlQ2xpY2sodHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0Rm9sZGVyKHRyZWVOb2RlLmlkZW50aWZpZXIhLCB0cmVlTm9kZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHNlbGVjdEZvbGRlcihmb2xkZXJVcmk6IHN0cmluZywgdHJlZU5vZGU/OiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG5cclxuICAgIGxldCB1cGRhdGVkVHJlZU5vZGUgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdE5vZGUyKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlIS5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZSh1cGRhdGVkVHJlZU5vZGU/LmlkZW50aWZpZXIhLCB0aGlzLnRyZWVGcm9tQmFja2VuZCEpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUcmVlIG5vZGUgZG9lcyBub3QgZXhpc3QnKTtcclxuICAgIH1cclxuICAgIG5vZGUuZXhwYW5kZWQgPSB1cGRhdGVkVHJlZU5vZGU/LmV4cGFuZGVkITtcclxuICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHVwZGF0ZWRUcmVlTm9kZT8uY2hpbGRyZW5Ob2RlcyE7XHJcbiAgICBub2RlLnNlbGVjdGVkID0gdXBkYXRlZFRyZWVOb2RlPy5zZWxlY3RlZCE7XHJcbiAgICB0cmVlTm9kZSA9IHVwZGF0ZWRUcmVlTm9kZTtcclxuICAgIHRoaXMuc3luY1RyZWUoKTtcclxuICAgIHRoaXMudmlld0NvbnRleHQuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZVRyZWVPblRoZUZseSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgYXN5bmMgc3luY1RyZWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmNhY2hlQWN0aW9uRGVzY2lwdG9ycyh0aGlzLmdldEFsbE5vZGVzKHRoaXMudHJlZUZyb21CYWNrZW5kISkpO1xyXG5cclxuICAgIGlmICghdGhpcy50cmVlRnJvbUJhY2tlbmQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyB0cmVlRnJvbUJhY2tlbmQgYXZhaWxhYmxlIScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VHJlZU1vZGVsKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB7XHJcbiAgICAgICAgcm9vdE5vZGVzOiBbXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc21hcnRUcmVlTm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSA9IHRoaXMuY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyh0aGlzLnRyZWVGcm9tQmFja2VuZCk7XHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB7XHJcbiAgICAgIHJvb3ROb2RlczogW10sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbENoYW5nZWQubmV4dCh0aGlzLnNtYXJ0VHJlZU1vZGVsKTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsLnJvb3ROb2RlcyA9IHNtYXJ0VHJlZU5vZGVzO1xyXG5cclxuICAgIHRoaXMuZmluZFNlbGVjdGVkKHRoaXMuc21hcnRUcmVlTW9kZWwucm9vdE5vZGVzKTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5uZXh0KHRoaXMuc21hcnRUcmVlTW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgZGVlcFNlYXJjaFRyZWVOb2RlKGlkZW50aWZpZXI6IHN0cmluZywgbm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHRyZWVOb2RlOiBTbWFydFRyZWVOb2RlIHwgdW5kZWZpbmVkO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKG5vZGUuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xyXG4gICAgICAgIHRyZWVOb2RlID0gbm9kZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbk5vZGVzICYmIG5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICB0cmVlTm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKGlkZW50aWZpZXIsIG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgICAgaWYgKHRyZWVOb2RlKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cmVlTm9kZTtcclxuICB9XHJcblxyXG4gIGZpbmRTZWxlY3RlZChub2RlczogU21hcnRUcmVlTm9kZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gbm9kZXMuZm9yRWFjaCgobm9kZTogU21hcnRUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbk5vZGVzICYmIG5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWQobm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlW10ge1xyXG4gICAgbm9kZXMubWFwKChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIG5vZGUuYnV0dG9uID0gbm9kZS5hY3Rpb25zPy5sZW5ndGhcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgdHlwZTogU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTUVOVSxcclxuICAgICAgICAgICAgaWNvbjogJ21vcmVfdmVydCcsXHJcbiAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uczogbm9kZS5hY3Rpb25zLm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbEJ5QWN0aW9uKGFjdGlvbiksXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5kb0FjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgYXJnczogW2FjdGlvbiwgbm9kZS5pZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgbm9kZS5pY29uID0gJ0ZvbGRlcnMnO1xyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbk5vZGVzKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbk5vZGVzID0gdGhpcy5jcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG9BY3Rpb24oYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB1aUFjdGlvbjogVWlBY3Rpb24gPSBhcmdzWzBdO1xyXG4gICAgbGV0IG5vZGVVdWlkOiBzdHJpbmcgPSBhcmdzWzFdO1xyXG5cclxuICAgIGlmICh1aUFjdGlvbi5wYXJhbXMpIHtcclxuICAgICAgdWlBY3Rpb24ucGFyYW1zWydub2RlVXVpZCddID0gbm9kZVV1aWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1aUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgICAgbm9kZVV1aWQ6IG5vZGVVdWlkLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB1aUFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgIHVpQWN0aW9uLFxyXG4gICAgfTtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB1aUFjdGlvbk1vZGVsO1xyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZSh1aUFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsTm9kZXMobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IFNtYXJ0VHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gbm9kZXMuZmxhdE1hcCgobikgPT4gW24sIC4uLnRoaXMuZ2V0QWxsTm9kZXMobi5jaGlsZHJlbk5vZGVzKV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFzeW5jIGNhY2hlQWN0aW9uRGVzY2lwdG9ycyhub2RlczogU21hcnRUcmVlTm9kZVtdKSB7XHJcbiAgICBsZXQgbmV3VWlBY3Rpb25zID0gbmV3IFNldDxVaUFjdGlvbj4oKTtcclxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgbm9kZS5hY3Rpb25zXHJcbiAgICAgICAgPy5maWx0ZXIoKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb24pID0+IG5ld1VpQWN0aW9ucy5hZGQoYWN0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGZvciAobGV0IGFjdGlvbiBvZiBuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgaWYgKCF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KGFjdGlvbi5jb2RlISkpIHtcclxuICAgICAgICBsZXQgZGVzY3JpcHRvciA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKGFjdGlvbik7XHJcbiAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldChhY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgIC8vICAgbm9kZXMubWFwKGFzeW5jIChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XHJcbiAgICAvLyAgICAgbGV0IG5ld1VpQWN0aW9ucyA9IG5vZGUuYWN0aW9ucz8uZmlsdGVyKFxyXG4gICAgLy8gICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBpZiAoIW5ld1VpQWN0aW9ucykge1xyXG4gICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAvLyAgICAgICBuZXdVaUFjdGlvbnMhLm1hcChhc3luYyAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmICghdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISkpIHtcclxuICAgIC8vICAgICAgICAgICBsZXQgZGVzY3JpcHRvciA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuICAgIC8vICAgICAgICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuc2V0KHVpQWN0aW9uLmNvZGUhLCBkZXNjcmlwdG9yKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSlcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gKTtcclxuICB9XHJcbiAgZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb246IFVpQWN0aW9uKTogc3RyaW5nIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldChhY3Rpb24uY29kZSEpO1xyXG4gICAgcmV0dXJuIGRlc2MhLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBVc2VVaUFjdGlvblxyXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcclxuICAgIGlmICh1aUFjdGlvbi5wYXJhbXMgJiYgdWlBY3Rpb24ucGFyYW1zWydub2RlVXVpZCddKSB7XHJcbiAgICAgIGxldCBub2RlVXVpZCA9IHVpQWN0aW9uLnBhcmFtcyFbJ25vZGVVdWlkJ107XHJcblxyXG4gICAgICBsZXQgbm9kZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKHVpQWN0aW9uLmNvZGUgPT09ICdSRU5BTUUnKSB7XHJcbiAgICAgICAgbm9kZU5hbWUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShub2RlVXVpZCwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKT8uY2FwdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgICAgZm9yVGV4dEZpZWxkOiBub2RlTmFtZSA/IG5vZGVOYW1lIDogJycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZm9yVGV4dEFyZWE6ICcnLFxyXG4gICAgICBmb3JUZXh0RmllbGQ6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybU1haW5VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG5cclxuICAgIHRoaXMuc3luY1RyZWUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1Ob2RlVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGxldCBub2RlSWQgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddO1xyXG4gICAgZGVsZXRlIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ107XHJcblxyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUpO1xyXG5cclxuICAgIHRoaXMudHJlZUZyb21CYWNrZW5kID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5wZXJmb3JtQWN0aW9uMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG4gIGFzeW5jIHBlcmZvcm1NYWluVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lKTtcclxuXHJcbiAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UucGVyZm9ybU1haW5BY3Rpb24yKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTcGVjaWZpY0RlbWFuZHNBc3luY2hyb25vdXNseShcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2U+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==