mmhglobal-dynamicform 1.3.13 → 2.0.0-beta.2

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 (115) hide show
  1. package/esm2020/lib/animations/component-animations.mjs +12 -0
  2. package/esm2020/lib/components/buttonfieldbase.component.mjs +62 -0
  3. package/esm2020/lib/components/containerfieldbase.component.mjs +42 -0
  4. package/esm2020/lib/components/datalistingfieldbase.component.mjs +138 -0
  5. package/esm2020/lib/components/fieldbase.component.mjs +90 -0
  6. package/esm2020/lib/components/inputfieldbase.component.mjs +78 -0
  7. package/esm2020/lib/directives/scrollbar.theme.directive.mjs +13 -11
  8. package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +69 -0
  9. package/esm2020/lib/input-error-message/input-error-message.component.mjs +33 -0
  10. package/esm2020/lib/kcard/kcard.component.mjs +84 -0
  11. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +53 -12
  12. package/esm2020/lib/pipe/htmlSanitize.pipe.mjs +18 -0
  13. package/esm2020/lib/services/component-error-handler.service.mjs +84 -0
  14. package/esm2020/lib/services/main.service.mjs +173 -73
  15. package/esm2020/lib/services/zcomponent.debug.service.mjs +17 -8
  16. package/esm2020/lib/services/zcomponent.service.mjs +133 -9
  17. package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +15 -23
  18. package/esm2020/lib/uicontainer/uicontainer.component.mjs +2 -2
  19. package/esm2020/lib/uicontent/uicontent.component.mjs +21 -9
  20. package/esm2020/lib/uiheader/uiheader.component.mjs +61 -28
  21. package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +3 -3
  22. package/esm2020/lib/uipage/uipage.component.mjs +41 -26
  23. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +2 -2
  24. package/esm2020/lib/zbullet/zbullet.component.mjs +3 -2
  25. package/esm2020/lib/zbuttons/zbuttons.component.mjs +45 -91
  26. package/esm2020/lib/zcard/zcard.component.mjs +13 -60
  27. package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +14 -159
  28. package/esm2020/lib/zchip/zchip.component.mjs +34 -64
  29. package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +4 -3
  30. package/esm2020/lib/zdaterange/zdaterange.component.mjs +3 -3
  31. package/esm2020/lib/zdatetime/zdatetime.component.mjs +22 -74
  32. package/esm2020/lib/zdiv/zdiv.component.mjs +63 -40
  33. package/esm2020/lib/zdiv/zdiv.pipe.mjs +2 -2
  34. package/esm2020/lib/zform/zform.component.mjs +9 -7
  35. package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +5 -3
  36. package/esm2020/lib/zgauge/zgauge.component.mjs +34 -70
  37. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +32 -30
  38. package/esm2020/lib/zgrid/zgrid.component.mjs +246 -135
  39. package/esm2020/lib/zimg/zimg.component.mjs +44 -108
  40. package/esm2020/lib/zinput-container/zinput-container.component.mjs +63 -0
  41. package/esm2020/lib/zinput-container/zinput-container.pipe.mjs +120 -0
  42. package/esm2020/lib/zkcard/zkcard.component.mjs +2 -2
  43. package/esm2020/lib/zlabel/zlabel.component.mjs +18 -94
  44. package/esm2020/lib/zmfb/zmfb.component.mjs +70 -91
  45. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +15 -11
  46. package/esm2020/lib/zmodal/zmodal.component.mjs +14 -10
  47. package/esm2020/lib/znumeric/znumeric.component.mjs +18 -94
  48. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +35 -87
  49. package/esm2020/lib/zprogressbar/zprogressbar.component.mjs +59 -0
  50. package/esm2020/lib/zreport/zreport.component.mjs +25 -27
  51. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +39 -194
  52. package/esm2020/lib/ztab/ztab.component.mjs +17 -45
  53. package/esm2020/lib/ztab/ztab.pipe.mjs +6 -4
  54. package/esm2020/lib/ztext/ztext.component.mjs +20 -180
  55. package/esm2020/lib/ztextarea/ztextarea.component.mjs +23 -101
  56. package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +3 -2
  57. package/esm2020/lib/ztree/ztree.component.mjs +25 -41
  58. package/esm2020/lib/ztreelist/ztreelist.component.mjs +104 -143
  59. package/esm2020/lib/zudf/zudf.component.mjs +12 -8
  60. package/esm2020/lib/zupload/zupload.component.mjs +18 -39
  61. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +45 -77
  62. package/esm2020/public-api.mjs +15 -2
  63. package/fesm2015/mmhglobal-dynamicform.mjs +4529 -4392
  64. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  65. package/fesm2020/mmhglobal-dynamicform.mjs +4496 -4367
  66. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  67. package/lib/animations/component-animations.d.ts +1 -0
  68. package/lib/components/buttonfieldbase.component.d.ts +18 -0
  69. package/lib/components/containerfieldbase.component.d.ts +19 -0
  70. package/lib/components/datalistingfieldbase.component.d.ts +30 -0
  71. package/lib/components/fieldbase.component.d.ts +30 -0
  72. package/lib/components/inputfieldbase.component.d.ts +19 -0
  73. package/lib/embed-components/input-field-addons/input-field-addons.component.d.ts +16 -0
  74. package/lib/input-error-message/input-error-message.component.d.ts +15 -0
  75. package/lib/kcard/kcard.component.d.ts +21 -0
  76. package/lib/mmhglobal-dynamicform.module.d.ts +40 -32
  77. package/lib/pipe/htmlSanitize.pipe.d.ts +10 -0
  78. package/lib/services/component-error-handler.service.d.ts +14 -0
  79. package/lib/services/main.service.d.ts +23 -5
  80. package/lib/services/zcomponent.debug.service.d.ts +4 -1
  81. package/lib/services/zcomponent.service.d.ts +20 -4
  82. package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +4 -3
  83. package/lib/uicontent/uicontent.component.d.ts +6 -2
  84. package/lib/uiheader/uiheader.component.d.ts +13 -9
  85. package/lib/zbuttons/zbuttons.component.d.ts +11 -20
  86. package/lib/zcard/zcard.component.d.ts +6 -20
  87. package/lib/zcheckbox/zcheckbox.component.d.ts +6 -36
  88. package/lib/zchip/zchip.component.d.ts +7 -16
  89. package/lib/zdatetime/zdatetime.component.d.ts +6 -14
  90. package/lib/zdiv/zdiv.component.d.ts +11 -18
  91. package/lib/zformcontrol/zformcontrol.component.d.ts +2 -1
  92. package/lib/zgauge/zgauge.component.d.ts +11 -14
  93. package/lib/zgrid/zgrid.binding.directive.d.ts +4 -2
  94. package/lib/zgrid/zgrid.component.d.ts +26 -27
  95. package/lib/zimg/zimg.component.d.ts +12 -31
  96. package/lib/zinput-container/zinput-container.component.d.ts +26 -0
  97. package/lib/zinput-container/zinput-container.pipe.d.ts +20 -0
  98. package/lib/zlabel/zlabel.component.d.ts +6 -25
  99. package/lib/zmfb/zmfb.component.d.ts +12 -20
  100. package/lib/zmodal/zmodal-mobile.component.d.ts +4 -1
  101. package/lib/zmodal/zmodal.component.d.ts +4 -1
  102. package/lib/znumeric/znumeric.component.d.ts +7 -29
  103. package/lib/zpostselectinput/zpostselectinput.component.d.ts +9 -19
  104. package/lib/zprogressbar/zprogressbar.component.d.ts +28 -0
  105. package/lib/zreport/zreport.component.d.ts +8 -11
  106. package/lib/zselectmultiple/zselectmultiple.component.d.ts +10 -35
  107. package/lib/ztab/ztab.component.d.ts +6 -19
  108. package/lib/ztext/ztext.component.d.ts +7 -35
  109. package/lib/ztextarea/ztextarea.component.d.ts +9 -27
  110. package/lib/ztree/ztree.component.d.ts +6 -12
  111. package/lib/ztreelist/ztreelist.component.d.ts +17 -27
  112. package/lib/zupload/zupload.component.d.ts +6 -13
  113. package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +6 -20
  114. package/package.json +1 -1
  115. package/public-api.d.ts +14 -1
@@ -1,15 +1,17 @@
1
1
  /********** Angular **********/
2
- import { Component, Input, ViewChild } from "@angular/core";
3
- import { Validators } from "@angular/forms";
2
+ import { Component, ViewChild } from "@angular/core";
4
3
  /********** Component & Service **********/
5
- import { ZComponentHelper, ZComponentProperties } from "mmhglobal-zcore";
4
+ import { ZComponentHelper } from "mmhglobal-zcore";
5
+ import { DataListingFieldBase } from "../components/datalistingfieldbase.component";
6
6
  import * as i0 from "@angular/core";
7
- import * as i1 from "@progress/kendo-angular-treeview";
8
- import * as i2 from "@ionic/angular";
9
- import * as i3 from "@fortawesome/angular-fontawesome";
10
- import * as i4 from "@angular/common";
11
- export class ZtreeComponent {
12
- constructor() {
7
+ import * as i1 from "../services/zcomponent.service";
8
+ import * as i2 from "@progress/kendo-angular-treeview";
9
+ import * as i3 from "@ionic/angular";
10
+ import * as i4 from "@fortawesome/angular-fontawesome";
11
+ import * as i5 from "@angular/common";
12
+ export class ZtreeComponent extends DataListingFieldBase {
13
+ constructor(compService) {
14
+ super(compService);
13
15
  this.items = [];
14
16
  this.originalItemList = null;
15
17
  // modelzData: Array<any>;
@@ -22,7 +24,6 @@ export class ZtreeComponent {
22
24
  this.itemIndex = [];
23
25
  this.selectedKeys = [];
24
26
  this.absoluteText = false;
25
- this.componentProperties = new ZComponentProperties();
26
27
  this.isExpanded = (dataItem, index) => {
27
28
  // console.log(index);
28
29
  return this.state.expandedkeys.indexOf(index) > -1;
@@ -79,28 +80,17 @@ export class ZtreeComponent {
79
80
  this.collapseAll = () => {
80
81
  this.state.expandedkeys = [];
81
82
  };
82
- this.setEnable = (status) => {
83
- this.componentProperties.isReadOnly = !status;
84
- };
85
- this.setVisible = (status) => {
86
- this.componentProperties.isVisible = status;
87
- this.data.Visible = status;
88
- };
89
- this.setRequire = (status) => {
90
- this.componentProperties.isRequired = status;
91
- ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
92
- };
93
83
  }
94
84
  ngOnInit() {
95
- ZComponentHelper.setComponentProperties(this);
96
- ZComponentHelper.registerComponent(this);
97
- if (this.data.TreeviewExpandAll) {
98
- this.expandAll();
99
- }
100
- // fix text align issue
101
- if (this.data.OnAddNode || this.data.OnRemoveNode) {
102
- this.absoluteText = true;
103
- }
85
+ super.initComponent().subscribe(() => {
86
+ if (this.data.TreeviewExpandAll) {
87
+ this.expandAll();
88
+ }
89
+ // fix text align issue
90
+ if (this.data.OnAddNode || this.data.OnRemoveNode) {
91
+ this.absoluteText = true;
92
+ }
93
+ });
104
94
  }
105
95
  ngAfterViewInit() {
106
96
  // const componentId = ZComponentHelper.getComponentId(this.data);
@@ -362,19 +352,13 @@ export class ZtreeComponent {
362
352
  return text.toLowerCase().indexOf((term || "").toLowerCase()) >= 0;
363
353
  }
364
354
  }
365
- ZtreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZtreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
366
- ZtreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZtreeComponent, selector: "app-ztree", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "nodetemplate", first: true, predicate: ["nodetemplate"], descendants: true, static: true }], ngImport: i0, template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host{--ion-color-primary: #479400;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8!important;color:#0a45ab!important;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf:hover,:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}\n"], components: [{ type: i1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "trackBy", "isDisabled", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "animate", "nodeTemplate", "loadMoreButtonTemplate", "nodes", "hasChildren", "isChecked", "isExpanded", "isSelected", "size", "textField"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["expandOnFilter", "isExpanded", "expandBy", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i1.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { type: i1.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { type: i1.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { type: i1.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["loadOnDemand", "childrenField", "nodes", "isVisible"] }, { type: i1.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }] });
355
+ ZtreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZtreeComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
356
+ ZtreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZtreeComponent, selector: "app-ztree", viewQueries: [{ propertyName: "nodetemplate", first: true, predicate: ["nodetemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label [class.absoluteText]=\"absoluteText\" [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3)!important;font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .absoluteText{position:absolute;top:14px}\n"], components: [{ type: i2.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "trackBy", "isDisabled", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "animate", "nodeTemplate", "loadMoreButtonTemplate", "nodes", "hasChildren", "isChecked", "isExpanded", "isSelected", "size", "textField"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["expandOnFilter", "isExpanded", "expandBy", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i2.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { type: i2.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { type: i2.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { type: i2.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["loadOnDemand", "childrenField", "nodes", "isVisible"] }, { type: i2.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }] });
367
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZtreeComponent, decorators: [{
368
358
  type: Component,
369
- args: [{ selector: "app-ztree", template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host{--ion-color-primary: #479400;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8!important;color:#0a45ab!important;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf:hover,:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}\n"] }]
370
- }], ctorParameters: function () { return []; }, propDecorators: { data: [{
371
- type: Input
372
- }], group: [{
373
- type: Input
374
- }], form: [{
375
- type: Input
376
- }], nodetemplate: [{
359
+ args: [{ selector: "app-ztree", template: "<div style=\"width:100%\" [style]=\"componentProperties.style.style\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\" [style]=\"componentProperties.style.style2\" class=\"e1tag-style2\">\r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label [class.absoluteText]=\"absoluteText\" [style]=\"componentProperties.style.style4\" class=\"e1tag-style4\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host ::ng-deep .k-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.15);color:var(--ion-color-primary-shade);border:1px solid rgba(var(--ion-color-primary-rgb),1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.3)!important;font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .k-treeview-leaf:hover,:host ::ng-deep .k-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:2px;background:rgba(var(--ion-color-primary-rgb),.1);font-size:13px;cursor:pointer}:host ::ng-deep .k-treeview .absoluteText{position:absolute;top:14px}\n"] }]
360
+ }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; }, propDecorators: { nodetemplate: [{
377
361
  type: ViewChild,
378
362
  args: ["nodetemplate", { static: true }]
379
363
  }] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBU3ZELDJDQUEyQztBQUMzQyxPQUFPLEVBQ08sZ0JBQWdCLEVBQXlCLG9CQUFvQixFQUUxRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFPekIsTUFBTSxPQUFPLGNBQWM7SUFvQnpCO1FBZkEsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixxQkFBZ0IsR0FBUSxJQUFJLENBQUM7UUFDN0IsMEJBQTBCO1FBQzFCLHFCQUFxQjtRQUNyQix5QkFBeUI7UUFDekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNYLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFckMsd0JBQW1CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBZ0QxQyxlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDakQsc0JBQXNCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUss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LENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDOzs0R0FoWlUsY0FBYztnR0FBZCxjQUFjLHFPQ3RCM0IsNHFFQTRDQTs0RkR0QmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBFQUtaLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUN1QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBUcmVlSXRlbURyb3BFdmVudCxcclxuICBUcmVlSXRlbURyYWdFdmVudFxyXG59IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFByb3BlcnRpZXMsXHJcbiAgWkZpZWxkLCBaR3JvdXAsICBaVHJlZVRlbXBsYXRlUGFyYW1zXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBAVmlld0NoaWxkKFwibm9kZXRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pIG5vZGV0ZW1wbGF0ZTogRWxlbWVudFJlZjtcclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG9yaWdpbmFsSXRlbUxpc3Q6IGFueSA9IG51bGw7XHJcbiAgLy8gbW9kZWx6RGF0YTogQXJyYXk8YW55PjtcclxuICAvLyBtb2RlbE5hbWU6IHN0cmluZztcclxuICAvLyBkYXRhU2V0OiBhbnlbXSA9IG51bGw7XHJcbiAgaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbm9kZUNvdW50ZXIgPSAxO1xyXG4gIHByaXZhdGUgY2xpY2tBY3ROYW1lID0gbnVsbDtcclxuICBwdWJsaWMgc3RhdGUgPSB7IGV4cGFuZGVka2V5czogW10gfTtcclxuICBwdWJsaWMgaXRlbUluZGV4ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYWJzb2x1dGVUZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwpIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaXggdGV4dCBhbGlnbiBpc3N1ZVxyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUgfHwgdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZSkge1xyXG4gICAgICB0aGlzLmFic29sdXRlVGV4dCA9IHRydWU7IFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gY29uc3QgY29tcG9uZW50SWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudElkKHRoaXMuZGF0YSk7XHJcbiAgICAvLyB0aGlzLmdyb3VwLnpDb21wb25lbnRzW2NvbXBvbmVudElkXSA9IHRoaXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5tb2RlbE5hbWUpIHtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXBbdGhpcy5tb2RlbE5hbWVdO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGlmIChmaWVsZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubm9kZUNvdW50ZXIgPSAxO1xyXG4gICAgICBjb25zdCBmVmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgcmV0dXJuIGZWYWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGZpZWxkVmFsdWUgJiYgZmllbGRWYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgLy8gICAvLyBjb25zdCBuZXdEYXRhU2V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTZXQpKTtcclxuICAgIC8vICAgY29uc3QgbmFtZSA9IGZpZWxkVmFsdWUuc2xpY2UoNik7XHJcbiAgICAvLyAgIHRoaXMubm9kZUNvdW50ZXIgPSAxO1xyXG4gICAgLy8gICAvLyB0aGlzLmdyb3VwW25hbWVdID0gdGhpcy5zZXRWYWx1ZVByb3BUb051bGxBdExlYWZMZWF2ZSh0aGlzLmdyb3VwW25hbWVdKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbE5hbWUgPSBuYW1lO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cFtuYW1lXTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRXhwYW5kZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZykgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5pbmRleE9mKGluZGV4KSA+IC0xO1xyXG4gICAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlID0gKGZpZWxkOnN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0QXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgobm9kZSwgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGlmIChzZXRBc1NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gaW5kZXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleEFyciA9IFtdO1xyXG4gICAgaW5kZXguZm9yRWFjaCgoaTphbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6YW55KSA9PiB7XHJcbiAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGluZGV4QXJyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZU5vZGUgPSAoZmllbGQ6c3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjb2xsYXBzZVBhcmVudDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgobm9kZSwgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGxldCBpbmRleEFyciA9IFtdO1xyXG4gICAgaWYgKGNvbGxhcHNlUGFyZW50KSB7XHJcbiAgICAgIGluZGV4LmZvckVhY2goKGk6YW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OmFueSkgPT4ge1xyXG4gICAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4QXJyID0gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIodiA9PiB7XHJcbiAgICAgIHJldHVybiAhaW5kZXhBcnIuaW5jbHVkZXModik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hOb2RlSW5kZXgobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChkW2ZpZWxkXSA9PT0gTnVtYmVyKHZhbHVlKSB8fCBkW2ZpZWxkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW1JbmRleCA9IHRoaXMuaXRlbUluZGV4LmNvbmNhdChrZXkgKyAnJyArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChkLlZhbHVlLCB2YWx1ZSwgaywgZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKG5vZGUsICcnKTtcclxuICAgICAgfSAgICBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFsbE5vZGUobm9kZTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChrKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUoZC5WYWx1ZSwgayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbGxhcHNlKG5vZGUpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIoayA9PiBrICE9PSBub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFeHBhbmQobm9kZSkge1xyXG4gICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlKGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKGRhdGEuSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGdldFRlbXBsYXRlRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZ2V0VGVtcGxhdGVGdW5jKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgKFwiICtcclxuICAgICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlICtcclxuICAgICAgICAgIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIixcclxuICAgICAgICAgIGdldFRlbXBsYXRlRnVuY1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnQWRkTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uQWRkTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1JlbW92ZU5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PblJlbW92ZU5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gbnVsbDtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJ6dHJlZV9vblNlbGVjdGlvbkNoYW5nZVwiLFxyXG4gICAgICB0YXJnZXQ6IHRhcmdldE5hbWUsXHJcbiAgICAgIGRhdGE6IGV2ZW50LmRhdGFJdGVtLFxyXG4gICAgICBldmVudDogZXZlbnQuaW5kZXhcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uQWRkTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ0FkZE5vZGUnO1xyXG4gICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLk9uQWRkTm9kZSkge1xyXG4gICAgLy8gICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkFkZE5vZGUpO1xyXG4gICAgLy8gICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAvLyAgICAgY2FsbEZ1bmMoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwLCBldmVudC5pbmRleCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnUmVtb3ZlTm9kZSc7XHJcbiAgfVxyXG5cclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJvcChldmVudDogVHJlZUl0ZW1Ecm9wRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuZGF0YS5EcmFnZ2FibGUgPT09IGZhbHNlKXtcclxuICAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRyb3BIYW5kbGVyID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICB0aGlzLmRhdGEuT25Ecm9wXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiBkcm9wSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgZHJvcCBpZiBhdHRlbXB0aW5nIHRvIGFkZCB0byBmaWxlXHJcbiAgICAvLyBpZiAoaXNGaWxlKGV2ZW50LmRlc3RpbmF0aW9uSXRlbS5pdGVtLmRhdGFJdGVtLnRleHQpICYmIGV2ZW50LmRyb3BQb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk92ZXIpIHtcclxuICAgIC8vICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc05vZGVEcm9wKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnSXRlbXM6ICcsIHRoaXMuaXRlbXMpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZUNoYW5nZVRvRGF0YVNldChpdGVtcywgdGFyZ2V0KTtcclxuICAgIC8vIHRoaXMuZGF0YVNldCA9IHRhcmdldDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRhcmdldCwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWUtb25UcmVlTm9kZURyYWdFbmRcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHRhcmdldFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGFuZ2VUb0RhdGFTZXQoc291cmNlOiBBcnJheTxhbnk+LCB0YXJnZXQ6IEFycmF5PGFueT4pIHtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0LlZhbHVlID0gW107XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoZC5WYWx1ZSwgdC5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdCA9IE9iamVjdC5hc3NpZ24oe30sIGQpO1xyXG4gICAgICAgIHQuVmFsdWUgPSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIHNlYXJjaCBmZWF0dXJlIC0gZmlsdGVyYWJsZTogdHJ1ZVxyXG4gIHB1YmxpYyBoYW5kbGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEl0ZW1MaXN0ID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbUxpc3QgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLm9yaWdpbmFsSXRlbUxpc3QubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5zZWFyY2godGhpcy5pdGVtcywgdmFsdWUpO1xyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5maWx0ZXJQcmVmaXgodGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXSA9IHRhcmdldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyUHJlZml4KHZhbHVlTmFtZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ3pEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLnpEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoMTIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2goaXRlbXM6IGFueVtdLCB0ZXJtOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udGFpbnMoaXRlbS5OYW1lLCB0ZXJtKSkge1xyXG4gICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uVmFsdWUgJiYgaXRlbS5WYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLnNlYXJjaChpdGVtLlZhbHVlLCB0ZXJtKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBmaWx0ZXJJdGVtID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlckl0ZW0uVmFsdWUgPSBuZXdJdGVtcztcclxuICAgICAgICAgIGFjYy5wdXNoKGZpbHRlckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWlucyh0ZXh0OiBzdHJpbmcsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCh0ZXJtIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkpID49IDA7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gc2VhcmNoIGZlYXR1cmUgLSBmaWx0ZXJhYmxlOiB0cnVlXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIlxyXG4gICAgICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCI+XHJcbiAgPGtlbmRvLXRyZWV2aWV3IFtub2Rlc109XCJnZXRJdGVtcygpXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0V4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld1NlbGVjdGFibGVcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcEVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZSk9XCJoYW5kbGVDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGV4cGFuZCk9XCJoYW5kbGVFeHBhbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJvcCk9XCJoYW5kbGVOb2RlRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcmFnRW5kKT1cImhhbmRsZU5vZGVEcmFnRW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRLZXlzXT1cInNlbGVjdGVkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdIaWVyYXJjaHlCaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuRmlsdGVyYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtICNub2RldGVtcGxhdGU+XHJcblxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PbkFkZE5vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDJweDtcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoISFkYXRhSXRlbS5PbkFkZE5vZGVWaXNpYmxlKVwiPiBcclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25SZW1vdmVOb2RlXCIgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDE1cHggMCAxMHB4O1wiIGNvbG9yPVwiZGFuZ2VyXCIgbWF0LXJhaXNlZC1idXR0b24gc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKCEhZGF0YUl0ZW0uT25SZW1vdmVOb2RlVmlzaWJsZSlcIj4gXHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgPGlvbi1sYWJlbCAqbmdJZj1cImFic29sdXRlVGV4dFwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE0cHg7XCI+XHJcbiAgICAgICAge3sgZ2V0VGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKSB9fVxyXG4gICAgICA8L2lvbi1sYWJlbD5cclxuXHJcbiAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCIhYWJzb2x1dGVUZXh0XCI+XHJcbiAgICAgICAge3sgZ2V0VGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKSB9fVxyXG4gICAgICA8L2lvbi1sYWJlbD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby10cmVldmlldz5cclxuPC9kaXY+XHJcbiJdfQ==
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU14RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFjLGdCQUFnQixFQUE4RCxNQUFNLGlCQUFpQixDQUFDO0FBQzNILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7O0FBUXBGLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBZXRELFlBQVksV0FBOEI7UUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFiaEUsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixxQkFBZ0IsR0FBUSxJQUFJLENBQUM7UUFDN0IsMEJBQTBCO1FBQzFCLHFCQUFxQjtRQUNyQix5QkFBeUI7UUFDekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNYLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFnRDlCLGVBQVUsR0FBRyxDQUFDLFFBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRCxzQkFBc0I7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlB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QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRS9DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDdEIsVUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3RCO2FBQ0Y7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxRQUFRLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDekMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OzRHQTdYVSxjQUFjO2dHQUFkLGNBQWMsb01DakIzQixvM0VBdUNBOzRGRHRCYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7d0dBS3dCLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgVHJlZUl0ZW1Ecm9wRXZlbnQsIFRyZWVJdGVtRHJhZ0V2ZW50IH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWV2aWV3XCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXMgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnRyZWVDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcIm5vZGV0ZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBub2RldGVtcGxhdGU6IEVsZW1lbnRSZWY7XHJcbiAgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBvcmlnaW5hbEl0ZW1MaXN0OiBhbnkgPSBudWxsO1xyXG4gIC8vIG1vZGVsekRhdGE6IEFycmF5PGFueT47XHJcbiAgLy8gbW9kZWxOYW1lOiBzdHJpbmc7XHJcbiAgLy8gZGF0YVNldDogYW55W10gPSBudWxsO1xyXG4gIGlzTm9kZURyb3AgPSBmYWxzZTtcclxuICBwcml2YXRlIG5vZGVDb3VudGVyID0gMTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgcHVibGljIHN0YXRlID0geyBleHBhbmRlZGtleXM6IFtdIH07XHJcbiAgcHVibGljIGl0ZW1JbmRleCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGFic29sdXRlVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb21wU2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UpIHsgc3VwZXIoY29tcFNlcnZpY2UpIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBmaXggdGV4dCBhbGlnbiBpc3N1ZVxyXG4gICAgICBpZiAodGhpcy5kYXRhLk9uQWRkTm9kZSB8fCB0aGlzLmRhdGEuT25SZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgdGhpcy5hYnNvbHV0ZVRleHQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIGNvbnN0IGNvbXBvbmVudElkID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRJZCh0aGlzLmRhdGEpO1xyXG4gICAgLy8gdGhpcy5ncm91cC56Q29tcG9uZW50c1tjb21wb25lbnRJZF0gPSB0aGlzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCkge1xyXG4gICAgLy8gaWYgKHRoaXMubW9kZWxOYW1lKSB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmdyb3VwW3RoaXMubW9kZWxOYW1lXTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm5vZGVDb3VudGVyID0gMTtcclxuICAgICAgY29uc3QgZlZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIHJldHVybiBmVmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGlmIChmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgIC8vICAgLy8gY29uc3QgbmV3RGF0YVNldCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU2V0KSk7XHJcbiAgICAvLyAgIGNvbnN0IG5hbWUgPSBmaWVsZFZhbHVlLnNsaWNlKDYpO1xyXG4gICAgLy8gICB0aGlzLm5vZGVDb3VudGVyID0gMTtcclxuICAgIC8vICAgLy8gdGhpcy5ncm91cFtuYW1lXSA9IHRoaXMuc2V0VmFsdWVQcm9wVG9OdWxsQXRMZWFmTGVhdmUodGhpcy5ncm91cFtuYW1lXSk7XHJcbiAgICAvLyAgIHRoaXMubW9kZWxOYW1lID0gbmFtZTtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXBbbmFtZV07XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0V4cGFuZGVkID0gKGRhdGFJdGVtOiBhbnksIGluZGV4OiBzdHJpbmcpID0+IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGluZGV4KTtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5pbmRleE9mKGluZGV4KSA+IC0xO1xyXG4gICAgLy8gcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kTm9kZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBzZXRBc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChub2RlLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgaWYgKHNldEFzU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBpbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4QXJyID0gW107XHJcbiAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChpbmRleEFycik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VOb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvbGxhcHNlUGFyZW50OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChub2RlLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgbGV0IGluZGV4QXJyID0gW107XHJcbiAgICBpZiAoY29sbGFwc2VQYXJlbnQpIHtcclxuICAgICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmRleEFyciA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKHYgPT4ge1xyXG4gICAgICByZXR1cm4gIWluZGV4QXJyLmluY2x1ZGVzKHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoTm9kZUluZGV4KG5vZGU6IGFueSwgdmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZFtmaWVsZF0gPT09IE51bWJlcih2YWx1ZSkgfHwgZFtmaWVsZF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5kZXggPSB0aGlzLml0ZW1JbmRleC5jb25jYXQoa2V5ICsgJycgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgoZC5WYWx1ZSwgdmFsdWUsIGssIGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIGlmIChub2RlKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShub2RlLCAnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbGxOb2RlKG5vZGU6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoayk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKGQuVmFsdWUsIGspO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDb2xsYXBzZShub2RlKSB7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmZpbHRlcihrID0+IGsgIT09IG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUV4cGFuZChub2RlKSB7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlKGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKGRhdGEuSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGdldFRlbXBsYXRlRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZ2V0VGVtcGxhdGVGdW5jKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgKFwiICtcclxuICAgICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlICtcclxuICAgICAgICAgIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIixcclxuICAgICAgICAgIGdldFRlbXBsYXRlRnVuY1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnQWRkTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uQWRkTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1JlbW92ZU5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PblJlbW92ZU5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gbnVsbDtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJ6dHJlZV9vblNlbGVjdGlvbkNoYW5nZVwiLFxyXG4gICAgICB0YXJnZXQ6IHRhcmdldE5hbWUsXHJcbiAgICAgIGRhdGE6IGV2ZW50LmRhdGFJdGVtLFxyXG4gICAgICBldmVudDogZXZlbnQuaW5kZXhcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uQWRkTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ0FkZE5vZGUnO1xyXG4gICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLk9uQWRkTm9kZSkge1xyXG4gICAgLy8gICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkFkZE5vZGUpO1xyXG4gICAgLy8gICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAvLyAgICAgY2FsbEZ1bmMoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwLCBldmVudC5pbmRleCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnUmVtb3ZlTm9kZSc7XHJcbiAgfVxyXG5cclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJvcChldmVudDogVHJlZUl0ZW1Ecm9wRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRHJhZ2dhYmxlID09PSBmYWxzZSkge1xyXG4gICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSB0cnVlO1xyXG4gICAgY29uc3QgZHJvcEhhbmRsZXIgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgIHRoaXMuZGF0YS5PbkRyb3BcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIGRyb3BIYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBkcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJldmVudCBkcm9wIGlmIGF0dGVtcHRpbmcgdG8gYWRkIHRvIGZpbGVcclxuICAgIC8vIGlmIChpc0ZpbGUoZXZlbnQuZGVzdGluYXRpb25JdGVtLml0ZW0uZGF0YUl0ZW0udGV4dCkgJiYgZXZlbnQuZHJvcFBvc2l0aW9uID09PSBEcm9wUG9zaXRpb24uT3Zlcikge1xyXG4gICAgLy8gICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcmFnRW5kKGV2ZW50OiBUcmVlSXRlbURyYWdFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzTm9kZURyb3ApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdJdGVtczogJywgdGhpcy5pdGVtcyk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGl0ZW1zLCB0YXJnZXQpO1xyXG4gICAgLy8gdGhpcy5kYXRhU2V0ID0gdGFyZ2V0O1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHRoaXMuZGF0YS5WYWx1ZSwgdGFyZ2V0LCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJ6dHJlZS1vblRyZWVOb2RlRHJhZ0VuZFwiLFxyXG4gICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkNoYW5nZSxcclxuICAgICAgZGF0YTogdGFyZ2V0XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNoYW5nZVRvRGF0YVNldChzb3VyY2U6IEFycmF5PGFueT4sIHRhcmdldDogQXJyYXk8YW55Pikge1xyXG4gICAgc291cmNlLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZCkpO1xyXG4gICAgICAgIHQuVmFsdWUgPSBbXTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoYW5nZVRvRGF0YVNldChkLlZhbHVlLCB0LlZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0ID0gT2JqZWN0LmFzc2lnbih7fSwgZCk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICBkZWxldGUgdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gc2VhcmNoIGZlYXR1cmUgLSBmaWx0ZXJhYmxlOiB0cnVlXHJcbiAgcHVibGljIGhhbmRsZUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm9yaWdpbmFsSXRlbUxpc3QgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxJdGVtTGlzdCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMub3JpZ2luYWxJdGVtTGlzdC5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHt9LCBpdGVtKSk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnNlYXJjaCh0aGlzLml0ZW1zLCB2YWx1ZSk7XHJcbiAgICBjb25zdCBncmlkVmFsdWUgPSB0aGlzLmZpbHRlclByZWZpeCh0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5ncm91cFtncmlkVmFsdWVdID0gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJQcmVmaXgodmFsdWVOYW1lOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSgxMik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaChpdGVtczogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtLk5hbWUsIHRlcm0pKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5WYWx1ZSAmJiBpdGVtLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuc2VhcmNoKGl0ZW0uVmFsdWUsIHRlcm0pO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgZmlsdGVySXRlbS5WYWx1ZSA9IG5ld0l0ZW1zO1xyXG4gICAgICAgICAgYWNjLnB1c2goZmlsdGVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoKHRlcm0gfHwgXCJcIikudG9Mb3dlckNhc2UoKSkgPj0gMDtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiBzZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCIgY2xhc3M9XCJlMXRhZy1zdHlsZVwiXHJcbiAgICAgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8a2VuZG8tdHJlZXZpZXcgW25vZGVzXT1cImdldEl0ZW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3U2VsZWN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3BcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wRWRpdGluZ1xyXG4gICAgICAgICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbGxhcHNlKT1cImhhbmRsZUNvbGxhcHNlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZXhwYW5kKT1cImhhbmRsZUV4cGFuZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcm9wKT1cImhhbmRsZU5vZGVEcm9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAobm9kZURyYWdFbmQpPVwiaGFuZGxlTm9kZURyYWdFbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEtleXNdPVwic2VsZWN0ZWRLZXlzXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0hpZXJhcmNoeUJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW5GaWVsZD1cIlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5GaWx0ZXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtICNub2RldGVtcGxhdGU+XHJcbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiISFkYXRhLk9uQWRkTm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZE5vZGUoJGV2ZW50LCBkYXRhSXRlbSwgZGF0YSwgZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ6b29tOiAwLjY7IG1hcmdpbjogMCAwIDAgMnB4O1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIighIWRhdGFJdGVtLk9uQWRkTm9kZVZpc2libGUpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTJcIj5cclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25SZW1vdmVOb2RlXCIgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDE1cHggMCAxMHB4O1wiIGNvbG9yPVwiZGFuZ2VyXCIgbWF0LXJhaXNlZC1idXR0b24gc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKCEhZGF0YUl0ZW0uT25SZW1vdmVOb2RlVmlzaWJsZSlcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTNcIiBjbGFzcz1cImUxdGFnLXN0eWxlM1wiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidtaW51cydcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgIDxpb24tbGFiZWwgW2NsYXNzLmFic29sdXRlVGV4dF09XCJhYnNvbHV0ZVRleHRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIiBjbGFzcz1cImUxdGFnLXN0eWxlNFwiPlxyXG4gICAgICAgIHt7IGdldFRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCkgfX1cclxuICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tdHJlZXZpZXc+XHJcbjwvZGl2PlxyXG4iXX0=