@smartbit4all/ng-client 3.3.67 → 3.3.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/smart-grid/smart-grid.component.mjs +14 -3
- package/fesm2015/smartbit4all-ng-client.mjs +19 -7
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +13 -2
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-grid/smart-grid.component.d.ts +2 -0
- package/package.json +1 -1
- package/smartbit4all-ng-client-3.3.69.tgz +0 -0
- package/smartbit4all-ng-client-3.3.67.tgz +0 -0
|
@@ -151,6 +151,7 @@ export class SmartGridComponent {
|
|
|
151
151
|
}
|
|
152
152
|
if (gridModel?.paginator !== undefined) {
|
|
153
153
|
this.smartGrid.paginator = gridModel.paginator;
|
|
154
|
+
this.service.paginator = this.smartGrid.paginator;
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
else {
|
|
@@ -170,7 +171,12 @@ export class SmartGridComponent {
|
|
|
170
171
|
}
|
|
171
172
|
this.isBlocked = false;
|
|
172
173
|
}
|
|
174
|
+
clearTable() {
|
|
175
|
+
this.vcRefTable?.clear();
|
|
176
|
+
this.componentRefTable = undefined;
|
|
177
|
+
}
|
|
173
178
|
async renderTable() {
|
|
179
|
+
this.clearTree();
|
|
174
180
|
let tableRow = this.smartGrid.gridModel.page.rows.map((item) => {
|
|
175
181
|
return item;
|
|
176
182
|
});
|
|
@@ -341,9 +347,14 @@ export class SmartGridComponent {
|
|
|
341
347
|
const selectionMode = this.service.gridModel.view?.descriptor?.selectionMode;
|
|
342
348
|
return selectionMode === GridSelectionMode.MULTIPLE;
|
|
343
349
|
}
|
|
350
|
+
clearTree() {
|
|
351
|
+
this.treeControl = undefined;
|
|
352
|
+
this.treeDataSource = undefined;
|
|
353
|
+
this.treeFlattener = undefined;
|
|
354
|
+
this.treeChecklistSelection = undefined;
|
|
355
|
+
}
|
|
344
356
|
renderTree() {
|
|
345
|
-
this.
|
|
346
|
-
this.componentRefTable = undefined;
|
|
357
|
+
this.clearTable();
|
|
347
358
|
if (!this.treeDataSource) {
|
|
348
359
|
this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);
|
|
349
360
|
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
@@ -718,4 +729,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
718
729
|
type: ViewChild,
|
|
719
730
|
args: ['toolbar']
|
|
720
731
|
}] } });
|
|
721
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLDRCQUE0QixFQUU1QiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUVqQiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQWEsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFHL0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFbkcsT0FBTyxFQUFZLGtCQUFrQixFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FB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YztvQkFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7b0JBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztpQkFDdEI7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7OytHQTF6QlUsa0JBQWtCO21HQUFsQixrQkFBa0IsbUdBRmxCLENBQUMsZ0JBQWdCLENBQUMsMEdBWUQsZ0JBQWdCLHVJQzlEOUMsNmdJQW1IQTsyRkQvRGEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLFlBQVksYUFHWCxDQUFDLGdCQUFnQixDQUFDOzZNQU9wQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRzBDLFVBQVU7c0JBQXpELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUt4QixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bSxcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbiAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxufSBmcm9tICcuLi9zbWFydC10YWJsZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbiAgR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0sXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBHcmlkVWlBY3Rpb25UeXBlLCBTbWFydEdyaWQsIFNtYXJ0TGF5b3V0RGVmIH0gZnJvbSAnLi9tb2RlbHMvbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25PcmRlckJ5JztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3Byb2plY3RzJztcclxuaW1wb3J0IHsgVWlBY3Rpb24sIFVpQWN0aW9uQnV0dG9uVHlwZSwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtTbWFydEdyaWRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwXTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuICBASW5wdXQoKSB1dWlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyB0YWJsZVxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHZjUmVmVGFibGU/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGNvbXBvbmVudFJlZlRhYmxlPzogQ29tcG9uZW50UmVmPFNtYXJ0dGFibGVDb21wb25lbnQ+O1xyXG4gIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPEdyaWRSb3c+O1xyXG5cclxuICAvLyB0b29sYmFyXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuXHJcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xyXG4gIGRhdGFzb3VyY2U/OiBudWxsO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICBwYWdlSW5kZXg/OiBudW1iZXI7XHJcbiAgdmFsdWVzOiBhbnk7XHJcbiAgZ3JpZFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1aUFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhZnRlclZpZXdJbml0RXhlY3V0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0Jsb2NrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyB0cmVlXHJcbiAgdHJlZUNvbnRyb2w/OiBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz47XHJcbiAgdHJlZUZsYXR0ZW5lcj86IE1hdFRyZWVGbGF0dGVuZXI8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZURhdGFTb3VyY2U/OiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZUNoZWNrbGlzdFNlbGVjdGlvbj86IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogU21hcnRHcmlkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIGNhbGxlZCBhZnRlciBldmVyeSBzZXJ2aWNlIGNhbGwgKGxvYWQsIHNhdmUsIHJlZnJlc2gsIGV0Yy4pXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snc21hcnRHcmlkJ10pIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBjaGFuZ2VzWydzbWFydEdyaWQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZD8ucGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3V1aWQnXSkge1xyXG4gICAgICB0aGlzLnV1aWQgPSBjaGFuZ2VzWyd1dWlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkICYmIHRoaXMudXVpZCAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyBmb3IgZGV2IHB1cnBvc2VzXHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWw7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQgJiYgIXRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0RXhlY3V0ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgcm93cyBvZiB0aGUgdGFibGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzKCk6IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+IHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlIS5zZWxlY3Rpb24hO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBHRVQgcmVxdWVzdCB0byB0aGUgZ2VuZXJpYyBHcmlkQVBJIGFuZCByZWZyZXNoZXMgdGhlIHByZXNlbnRlZFxyXG4gICAqIGdyaWQgd2l0aCB0aGUgbmV3ZXN0IG9uZS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2V0dXBUb29sYmFyKCk7XHJcbiAgICAvLyB3aWxsIGNhdXNlIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkIHRvIGZpcmVcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR1cFRvb2xiYXIoKSB7XHJcbiAgICAvLyBjaGVjayBpZiB0b29sYmFyIGlzIGF2YWlsYWJsZSBfYW5kXyBuZWVkIHNldCB1cFxyXG4gICAgaWYgKHRoaXMudG9vbGJhciAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICBsZXQgdG9vbGJhcklkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyICsgJ190b29sYmFyJztcclxuICAgICAgaWYgKHRvb2xiYXJJZCAhPT0gdGhpcy50b29sYmFyLmlkKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyLmlkID0gdG9vbGJhcklkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbDtcclxuICAgIGlmIChncmlkTW9kZWwpIHtcclxuICAgICAgdGhpcy5sZW5ndGggPSBncmlkTW9kZWwudG90YWxSb3dDb3VudDtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGdyaWRNb2RlbC5wYWdlU2l6ZTtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBncmlkTW9kZWwucGFnZUluZGV4ID8/IDA7XHJcbiAgICAgIGlmIChncmlkTW9kZWwucGFnZVNpemVPcHRpb25zICYmIGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2hvd0VkaXRDb2x1bW5zID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnM7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGtpbmQgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LmtpbmQ7XHJcbiAgICAgIGlmIChraW5kKSB7XHJcbiAgICAgICAgbGV0IGxheW91dERlZjtcclxuICAgICAgICBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVEFCTEUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRBQkxFO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVFJFRSkge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVFJFRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLkNBUkRTKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5DQVJEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5b3V0RGVmKSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gbGF5b3V0RGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy5wYWdpbmF0b3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3IgPSBncmlkTW9kZWwucGFnaW5hdG9yO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdHcmlkTW9kZWwgaXMgdW5kZWZpbmVkIGluIGNvbXBvbmVudCEnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UQUJMRSkge1xyXG4gICAgICB0aGlzLnJlbmRlclRhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkVYUEFOREFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuQ0FSRCkge1xyXG4gICAgICB0aGlzLnJlbmRlckNhcmRzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRSRUUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXJUYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGFibGVUeXBlO1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8udGFibGVUeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZy50YWJsZVR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvblR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgbGV0IHRhYmxlQ29uZmlnOiBTbWFydFRhYmxlSW50ZXJmYWNlPEdyaWRSb3c+ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZyxcclxuICAgICAgICB0YWJsZVJvd3M6IHRhYmxlUm93LFxyXG4gICAgICAgIHRhYmxlVHlwZSxcclxuICAgICAgICBjdXN0b21TbWFydFRhYmxlSGVhZGVyczogYXdhaXQgdGhpcy5jb25zdHJ1Y3RIZWFkZXIoKSEsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGUsXHJcbiAgICAgICAgZXhwYW5kZWRDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICB0eXBlOiBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0uTk9STUFMLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25Db2RlczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucyEsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbnM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnM/Lm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOlxyXG4gICAgICAgICAgICAgIGNvZGUgPT09ICdfYWN0aW9uU2VwYXJhdG9yXydcclxuICAgICAgICAgICAgICAgID8gU21hcnRUYWJsZUJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogY29kZSB9KSxcclxuICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIC8vIGFyZ3M6IFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAgIC8vIF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0UHJvcGVydHkgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodENsYXNzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodENsYXNzID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRDbGFzcztcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRQcm9wZXJ0eSA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0UHJvcGVydHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZVxyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vbkFsbFNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3RBbGwuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGFyZWQgZm9yIHNpbXBsZSBjbGlja3NcclxuICAgICAgLy8gaWYgKCF0YWJsZUNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIC8vICAgdGFibGVDb25maWcub25Sb3dDbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrID0gdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUgPSAnc2VsZWN0YWJsZSc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YWJsZUNvbmZpZy5hc3luY09uRXhwYW5kKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcucm93RXhwYW5kZXIgPSB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uICYmXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ICYmXHJcbiAgICAgICAgc2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUuTk9ORVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBpc011bHRpcGxlID0gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ID0gJ2lkJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2VcclxuICAgICAgICAgIC5yb3dzIS5maWx0ZXIoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAubWFwKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkISk7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KGlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zbWFydFRhYmxlID0gbmV3IFNtYXJ0VGFibGU8YW55Pih0YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVHJlZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXIsXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSxcclxuICAgICAgICB0aGlzLmdldENoaWxkcmVuXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcclxuICAgICAgdGhpcy50cmVlRGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+KHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2RlcztcclxuICAgIGxldCBleHBhbmRlZE5vZGVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgaWYgKG5vZGVzKSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBub2Rlc1xyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kYWJsZShub2RlKSlcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKVxyXG4gICAgICAgIC5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZvckVhY2goKHJvdzogYW55KSA9PiAocm93LmxldmVsID0gdW5kZWZpbmVkKSk7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlLmRhdGEgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZmlsdGVyKChyb3cpID0+ICFyb3cucGFyZW50KTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uY2xlYXIoKTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5zZWxlY3Qobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uY29sbGFwc2VBbGwoKTtcclxuICAgIGV4cGFuZGVkTm9kZXMuZm9yRWFjaCgocm93SWQpID0+IHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5maW5kKChyb3cpID0+IHJvd0lkID09PSByb3cuaWQpO1xyXG4gICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5kKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogYW55KSA9PiBub2RlLmxldmVsID8/IDA7XHJcblxyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcmlkUm93KSA9PiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UpO1xyXG5cclxuICBnZXRDaGlsZHJlbiA9IChub2RlOiBHcmlkUm93KTogR3JpZFJvd1tdID0+IHtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCByb3dzID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbHRlcigocm93KSA9PlxyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LnNvbWUoKGNoaWxkKSA9PiBjaGlsZCA9PT0gcm93LmlkISlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJvd3MpIHtcclxuICAgICAgICByZXR1cm4gcm93cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH07XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBHcmlkUm93KSA9PiB0aGlzLmlzRXhwYW5kYWJsZShfbm9kZURhdGEpO1xyXG5cclxuICB0cmFuc2Zvcm1lciA9IChyb3c6IEdyaWRSb3csIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIChyb3cgYXMgYW55KS5sZXZlbCA9IGxldmVsO1xyXG4gICAgcmV0dXJuIHJvdztcclxuICB9O1xyXG5cclxuICBnZXRUcmVlSXRlbShyb3c6IEdyaWRSb3cpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbHVtbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXM7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gcm93LmRhdGEhO1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBkYXRhW2NvbF0pLmpvaW4oJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByb3cuaWQhO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgdHJlZU5vZGUgc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXHJcbiAgdHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkJlZm9yZSA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sIS5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcclxuICAgICAgICA/IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXHJcbiAgICAgICAgOiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlKTtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25BZnRlciA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25BZnRlci5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25CZWZvcmUuaW5jbHVkZXMocykpO1xyXG4gICAgbGV0IHVuc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25CZWZvcmUuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQWZ0ZXIuaW5jbHVkZXMocykpO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIC8vIHdoZW4gc2VydmljZSBjYWxsIGlzIGFjdGl2ZSAoIWRldiksIG9uU2VsZWN0IHdpbGwgdG9nZ2xlIHJvdy5zZWxlY3RlZFxyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiB1bnNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgdW5pb24gPSBzZWxlY3RlZElkcy5jb25jYXQodW5zZWxlY3RlZElkcyk7XHJcbiAgICB0aGlzLm9uU2VsZWN0TGlzdCh1bmlvbik7XHJcbiAgfVxyXG5cclxuICBjaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IHBhcmVudDogR3JpZFJvdyB8IG51bGwgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID0gdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgaWYgKG5vZGVTZWxlY3RlZCAmJiAhZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcclxuICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIEdldCB0aGUgcGFyZW50IG5vZGUgb2YgYSBub2RlICovXHJcbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBHcmlkUm93KTogR3JpZFJvdyB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcclxuXHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBub2RlIGFyZSBzZWxlY3RlZC4gKi9cclxuICBkZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9XHJcbiAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgZGVzY2VuZGFudHMuZXZlcnkoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlc2NBbGxTZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIHBhcnQgb2YgdGhlIGRlc2NlbmRhbnRzIGFyZSBzZWxlY3RlZCAqL1xyXG4gIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgbGV0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbnN0cnVjdEhlYWRlcigpOiBQcm9taXNlPFNtYXJ0VGFibGVIZWFkZXJbXT4ge1xyXG4gICAgbGV0IGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcltdID0gW107XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzICYmIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5tYXAoYXN5bmMgKGdyaWRSb3c6IEdyaWRSb3cpID0+IHtcclxuICAgICAgICAgIGxldCBuZXdVaUFjdGlvbnMgPSBncmlkUm93LmFjdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKHVpQWN0aW9uOiBhbnkpID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAobmV3VWlBY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgIG5ld1VpQWN0aW9ucy5tYXAoYXN5bmMgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3I6IFVpQWN0aW9uRGVzY3JpcHRvciA9XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlPy5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlID8/ICdDT0RFJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuc2V0KHVpQWN0aW9uLmNvZGUhLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJlZENvbHVtbk5hbWVzLm1hcChhc3luYyAocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgZGVzY0NvbHVtbjogYW55ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5kZXNjcmlwdG9yIS5jb2x1bW5zIS5maW5kKFxyXG4gICAgICAgICAgKGNvbERlc2NyaXB0b3I6IEdyaWRDb2x1bW5NZXRhKSA9PiBjb2xEZXNjcmlwdG9yLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAgICAgKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVzY0NvbHVtbikge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnByb3BlcnR5TmFtZSA9PT0gZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgb3JkZXI7XHJcbiAgICAgICAgICBsZXQgb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtKSB7XHJcbiAgICAgICAgICAgIG9yZGVyID1cclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0ub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5Lk9yZGVyRW51bS5Bc2NcclxuICAgICAgICAgICAgICAgID8gU21hcnRUYWJsZU9yZGVyLkFTQ1xyXG4gICAgICAgICAgICAgICAgOiBTbWFydFRhYmxlT3JkZXIuREVTQztcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIG9yZGVyTnVtYmVyID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAoZmlsdGVyOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT4gZmlsdGVyLnByb3BlcnR5TmFtZSA9PT0gZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIG9yZGVyTnVtYmVyKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IG9yaWduYWxMYWJlbCA9IGN1c3RvbVRhYmxlSGVhZGVyPy5sYWJlbCA/PyBkZXNjQ29sdW1uLmxhYmVsO1xyXG4gICAgICAgICAgbGV0IGxhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gYXdhaXQgdGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2U/LmdldChvcmlnbmFsTGFiZWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBvcmlnbmFsTGFiZWw7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBjdXN0b21UYWJsZUhlYWRlcj8ucHJvcGVydGllcztcclxuICAgICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWUnKSB7XHJcbiAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURVRJTUUsXHJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAneXl5eS5NTS5kZCBIOm1tJyxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLk9mZnNldERhdGUnKSB7XHJcbiAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURVRJTUUsXHJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAneXl5eS5NTS5kZCcsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgICAgLi4uY3VzdG9tVGFibGVIZWFkZXIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YS4nICsgZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgICAgICBvcmRlck51bWJlcixcclxuICAgICAgICAgICAgcHJvcGVydGllcyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGNvbXBsZW1lbnQgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maWx0ZXIoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT5cclxuICAgICAgICAhaGVhZGVyLnNvbWUoKHRIOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0SC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXModGFibGVIZWFkZXIucHJvcGVydHlOYW1lKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbXBsZW1lbnQpIHtcclxuICAgICAgaGVhZGVyLnB1c2goLi4uY29tcGxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5zaW1wbGVCdXR0b25zKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5vcHRpb25zLnNpbXBsZUJ1dHRvbnMuZm9yRWFjaCgodWlBY3Rpb25Db2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdzaW1wbGVfYnV0dG9ucycsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiB1aUFjdGlvbkNvZGUgfSksXHJcbiAgICAgICAgICAgICAgYXJnczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjb2RlOiB1aUFjdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICBzaG93QnV0dG9uSWY6IChyb3c6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIHJvdy5hY3Rpb25zLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5jb2RlID09PSB1aUFjdGlvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGVhZGVyLnNvbWUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gJ215X21lbnUnKSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnJvd1VpQWN0aW9uVHlwZSA9PT0gR3JpZFVpQWN0aW9uVHlwZS5QT1BVUF9NRU5VKSB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnbXlfbWVudScsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcclxuICAgICAgICAgICAgICBtZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWU6ICdhY3Rpb25zJyxcclxuICAgICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBhcmdzOiBbXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBpc1NvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWFkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb25DaGFuZ2VQYWdlKGV2ZW50OiBQYWdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBvZmZzZXQgPSBldmVudC5wYWdlU2l6ZSAqIGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGxldCBsaW1pdCA9IGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2V0UGFnZShcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3VXVpZCEsXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgb2Zmc2V0LnRvU3RyaW5nKCksXHJcbiAgICAgIGxpbWl0LnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGUoYXJnczogYW55W10sIHJvdzogYW55LCB1aUFjdGlvbjogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgX3VpQWN0aW9uOiBVaUFjdGlvbjtcclxuXHJcbiAgICBpZiAoIXVpQWN0aW9uKSB7XHJcbiAgICAgIHVpQWN0aW9uID0gcm93LmFjdGlvbnMuZmlsdGVyKChhY3Rpb246IFVpQWN0aW9uKSA9PiBhY3Rpb24uY29kZSA9PT0gYXJnc1swXS5jb2RlKVswXTtcclxuICAgIH1cclxuXHJcbiAgICBfdWlBY3Rpb24gPSB7IC4uLnVpQWN0aW9uIH07XHJcbiAgICBfdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAuLi51aUFjdGlvbi5wYXJhbXMsXHJcbiAgICAgIG1vZGVsOiByb3csXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCB1aUFjdGlvbk1vZGVsOiBhbnkgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSxcclxuICAgICAgdWlBY3Rpb246IF91aUFjdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy51aUFjdGlvbk1vZGVsQ2FsbGJhY2spIHtcclxuICAgICAgdWlBY3Rpb25Nb2RlbCA9IHRoaXMuc21hcnRHcmlkIS5vcHRpb25zIS51aUFjdGlvbk1vZGVsQ2FsbGJhY2sodWlBY3Rpb25Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0gdWlBY3Rpb25Nb2RlbDtcclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZShfdWlBY3Rpb24sIHtcclxuICAgICAgd2lkZ2V0SWQ6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgbm9kZUlkOiByb3cuaWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnV0dG9uVHJhbnNsYXRvcih1aUFjdGlvbjogVWlBY3Rpb24pOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgbGV0IGRlc2MgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKTtcclxuICAgIGlmICghZGVzYykge1xyXG4gICAgICBkZXNjID0ge1xyXG4gICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlISxcclxuICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVCxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHVpQWN0aW9uLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLm1lcmdlQWN0aW9uRGVzY3JpcHRvckludG9DbGllbnQodWlBY3Rpb24uZGVzY3JpcHRvciEsIGRlc2MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc2M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGF5b3V0RGVmKCk6IHR5cGVvZiBTbWFydExheW91dERlZiB7XHJcbiAgICByZXR1cm4gU21hcnRMYXlvdXREZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgZGVmYXVsdFJvd0FjdGlvbjogVWlBY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8uZGVmYXVsdFJvd0FjdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvd0FjdGlvbkNvZGUgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zW2luZGV4XTtcclxuXHJcbiAgICAgICAgZGVmYXVsdFJvd0FjdGlvbiA9IGdyaWRSb3cuYWN0aW9ucy5maW5kKFxyXG4gICAgICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gdWlBY3Rpb24uY29kZSA9PT0gZGVmYXVsdFJvd0FjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Um93QWN0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIGdyaWRSb3csIGRlZmF1bHRSb3dBY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uU2VsZWN0KHJvd0lkOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMub25TZWxlY3RMaXN0KFtyb3dJZF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RSb3dJbnRlcm5hbChyb3dJZDogYW55KSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93cz8uZmluZCgoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5pZCA9PT0gcm93SWQpO1xyXG4gICAgY29uc3Qgdmlld0NvbnRleHRDaGFuZ2UgPSBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0KHRoaXMuc21hcnRHcmlkISwgcm93ISk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0TGlzdChyb3dJZHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcm93SWRzLmZvckVhY2goKHJvd0lkKSA9PiB0aGlzLnNlbGVjdFJvd0ludGVybmFsKHJvd0lkKSk7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdEFsbChzZWxlY3RlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdEFsbCh0aGlzLnNtYXJ0R3JpZCEsIHNlbGVjdGVkKTtcclxuICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2goKTtcclxuICB9XHJcbiAgZWRpdENvbHVtbnMoKTogdm9pZCB7XHJcbiAgICBsZXQgZGlhbG9nRGF0YTogU21hcnREaWFsb2dEYXRhID0ge1xyXG4gICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgdGl0bGU6ICdPc3psb3BvayB0ZXN0cmVzemFiw6FzYScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHNpemU6IHt9LFxyXG4gICAgICBjdXN0b21Db21wb25lbnQ6IFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50SW5wdXRzOiB7XHJcbiAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICB1dWlkOiB0aGlzLnV1aWQsXHJcbiAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgICAgICB2aWV3OiB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcsXHJcbiAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCwgeyBkYXRhOiBkaWFsb2dEYXRhIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic21hcnRHcmlkXCIgY2xhc3M9XCJzbWFydEdyaWQtY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdG9vbGJhclwiPlxyXG4gICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyICN0b29sYmFyIFtpZF09XCInZ3JpZF9ub3RfaW5pdGlhbGl6ZWQnXCI+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuICAgIDxidXR0b25cclxuICAgICAgKGNsaWNrKT1cImVkaXRDb2x1bW5zKClcIlxyXG4gICAgICBtYXQtbWluaS1mYWJcclxuICAgICAgY29sb3I9XCJ0ZXh0LXByaW1hcnlcIlxyXG4gICAgICAqbmdJZj1cInNtYXJ0R3JpZC5zaG93RWRpdENvbHVtbnNcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJDb2x1bW5zXCIgY2xhc3M9XCJzbWFydC1ncmlkLWVkaXQtaWNvblwiXHJcbiAgICAgICAgPnZpZXdfY29sdW1uczwvbWF0LWljb25cclxuICAgICAgPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cImlzQmxvY2tlZCA/ICdibG9ja2VkJyA6ICcnXCI+PC9kaXY+IC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWFydEdyaWRDb250ZW50XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRHcmlkLnNob3dSZXN1bHRDb3VudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWFydEdyaWQtZGF0YS1udW1iZXJcIj5cclxuICAgICAgICAgIHt7IHNtYXJ0R3JpZC5ncmlkTW9kZWwudG90YWxSb3dDb3VudCB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWFydC1ncmlkLXRhYmxlLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3RhYmxlPjwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuRVhQQU5EQUJMRVwiPlxyXG4gICAgICA8c21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAgICAgI2dyaWRFeHBhbmRhYmxlU2VjdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBleHBhbmRhYmxlU2VjdGlvbiBvZiBleHBhbmRhYmxlU2VjdGlvbnNcIlxyXG4gICAgICAgIFtkYXRhXT1cImV4cGFuZGFibGVTZWN0aW9uXCJcclxuICAgICAgPjwvc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuQ0FSRFwiXHJcbiAgICAgIGNsYXNzPVwiY2FyZHMtY29udGFpbmVyXCJcclxuICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOlxyXG4gICAgICAgICAgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyAncmVwZWF0KCcgKyBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gKyAnLCAxZnIpJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgIH1cIlxyXG4gICAgPlxyXG4gICAgICA8YXBwLXNtYXJ0LWdyaWQtY2FyZFxyXG4gICAgICAgIGNsYXNzPVwic21hcnRHcmlkLWNhcmQtY29udGFpbmVyXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFzayBvZiBzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93c1wiXHJcbiAgICAgICAgW2l0ZW1dPVwidGFza1wiXHJcbiAgICAgICAgW3NtYXJ0R3JpZF09XCJzbWFydEdyaWRcIlxyXG4gICAgICAgIFtvblNlbGVjdF09XCJvblNlbGVjdC5iaW5kKHRoaXMpXCJcclxuICAgICAgPjwvYXBwLXNtYXJ0LWdyaWQtY2FyZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLlRSRUUgJiYgdHJlZUNvbnRyb2xcIlxyXG4gICAgICBjbGFzcz1cInRyZWUtY29udGFpbmVyXCJcclxuICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOlxyXG4gICAgICAgICAgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyAncmVwZWF0KCcgKyBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gKyAnLCAxZnIpJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgIH1cIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwidHJlZURhdGFTb3VyY2UhXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sIVwiPlxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrbGlzdC1sZWFmLW5vZGVcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5pc1NlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG5cclxuICAgICAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50PVwiMjRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICAgIGNsYXNzPVwidHJlZS1idXR0b25cIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIG5vZGUuaXRlbVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5cclxuICAgICAgICAgICAgICB7eyB0cmVlQ29udHJvbCEuaXNFeHBhbmRlZChub2RlKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCcgfX1cclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5pc1NlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+e3sgZ2V0VHJlZUl0ZW0obm9kZSkgfX08L21hdC1jaGVja2JveFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgICAgPC9tYXQtdHJlZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgKm5nSWY9XCJzbWFydEdyaWQucGFnaW5hdG9yICYmICF0cmVlQ29udHJvbFwiXHJcbiAgICAjcGFnaW5hdG9yXHJcbiAgICBbbGVuZ3RoXT1cImxlbmd0aFwiXHJcbiAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgKHBhZ2UpPVwib25DaGFuZ2VQYWdlKCRldmVudClcIlxyXG4gID48L21hdC1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLDRCQUE0QixFQUU1QiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUVqQiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQWEsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFHL0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFbkcsT0FBTyxFQUFZLGtCQUFrQixFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FB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QyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxVQUFVLEdBQW9CO1lBQ2hDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsd0JBQXdCO2FBQ2hDO1lBQ0QsSUFBSSxFQUFFLEVBQUU7WUFDUixlQUFlLEVBQUUsMkJBQTJCO1lBQzVDLHFCQUFxQixFQUFFO2dCQUNyQixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGNBQWM7b0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJO29CQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDOzsrR0F0MEJVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1HQUZsQixDQUFDLGdCQUFnQixDQUFDLDBHQVlELGdCQUFnQix1SUM5RDlDLDZnSUFtSEE7MkZEL0RhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxZQUFZLGFBR1gsQ0FBQyxnQkFBZ0IsQ0FBQzs2TUFPcEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUcwQyxVQUFVO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLeEIsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUYWJsZSxcclxuICBTbWFydFRhYmxlQnV0dG9uVHlwZSxcclxuICBTbWFydFRhYmxlSGVhZGVyLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0sXHJcbiAgU21hcnRUYWJsZU9yZGVyLFxyXG4gIFNtYXJ0VGFibGVUeXBlLFxyXG4gIFNtYXJ0dGFibGVDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBHcmlkQ29sdW1uTWV0YSxcclxuICBHcmlkUm93LFxyXG4gIEdyaWRTZWxlY3Rpb25Nb2RlLFxyXG4gIEdyaWRTZWxlY3Rpb25UeXBlLFxyXG4gIEdyaWRVcGRhdGVEYXRhLFxyXG4gIEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLFxyXG59IGZyb20gJy4vYXBpL2dyaWQtYXBpJztcclxuaW1wb3J0IHsgR3JpZFVpQWN0aW9uVHlwZSwgU21hcnRHcmlkLCBTbWFydExheW91dERlZiB9IGZyb20gJy4vbW9kZWxzL21vZGVsJztcclxuaW1wb3J0IHsgU21hcnRHcmlkU2VydmljZSB9IGZyb20gJy4vc21hcnQtZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWxheW91dC1kZWZpbmVyL3RhYmxlLWxheW91dC1kZWZpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV4cGFuZGFibGVTZWN0aW9uIH0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkgfSBmcm9tICcuLi9zbWFydC1maWx0ZXItZWRpdG9yL2FwaS9tb2RlbC9maWx0ZXJFeHByZXNzaW9uT3JkZXJCeSc7XHJcbmltcG9ydCB7IFNtYXJ0RGlhbG9nRGF0YSB9IGZyb20gJy4uL3NtYXJ0LWRpYWxvZy9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uLCBVaUFjdGlvbkJ1dHRvblR5cGUsIFVpQWN0aW9uRGVzY3JpcHRvciB9IGZyb20gJy4uL3ZpZXctY29udGV4dC9hcGknO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLCBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU21hcnRHcmlkU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MF07XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBASW5wdXQoKSBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcbiAgQElucHV0KCkgdXVpZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBkZXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gdGFibGVcclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSB2Y1JlZlRhYmxlPzogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb21wb25lbnRSZWZUYWJsZT86IENvbXBvbmVudFJlZjxTbWFydHRhYmxlQ29tcG9uZW50PjtcclxuICBzbWFydFRhYmxlITogU21hcnRUYWJsZTxHcmlkUm93PjtcclxuXHJcbiAgLy8gdG9vbGJhclxyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXInKSB0b29sYmFyPzogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50O1xyXG5cclxuICAvLyBleHBhbmRhYmxlXHJcbiAgLy8gZ3JpZERhdGFcclxuICBleHBhbmRhYmxlU2VjdGlvbnM/OiBFeHBhbmRhYmxlU2VjdGlvbjxhbnk+W107XHJcblxyXG4gIHBhZ2VFdmVudD86IFBhZ2VFdmVudDtcclxuICBkYXRhc291cmNlPzogbnVsbDtcclxuICBwYWdlU2l6ZT86IG51bWJlcjtcclxuICBsZW5ndGg/OiBudW1iZXI7XHJcbiAgcGFnZUluZGV4PzogbnVtYmVyO1xyXG4gIHZhbHVlczogYW55O1xyXG4gIGdyaWRUYWJsZSE6IFNtYXJ0VGFibGU8YW55PjtcclxuXHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCbG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gdHJlZVxyXG4gIHRyZWVDb250cm9sPzogRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+O1xyXG4gIHRyZWVGbGF0dGVuZXI/OiBNYXRUcmVlRmxhdHRlbmVyPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVEYXRhU291cmNlPzogTWF0VHJlZUZsYXREYXRhU291cmNlPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVDaGVja2xpc3RTZWxlY3Rpb24/OiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0R3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgLy8gd2lsbCBjYXVzZSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZCB0byBmaXJlXHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UubG9hZCh0aGlzLnV1aWQsIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0dXBUb29sYmFyKCkge1xyXG4gICAgLy8gY2hlY2sgaWYgdG9vbGJhciBpcyBhdmFpbGFibGUgX2FuZF8gbmVlZCBzZXQgdXBcclxuICAgIGlmICh0aGlzLnRvb2xiYXIgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllciArICdfdG9vbGJhcic7XHJcbiAgICAgIGlmICh0b29sYmFySWQgIT09IHRoaXMudG9vbGJhci5pZCkge1xyXG4gICAgICAgIHRoaXMudG9vbGJhci5pZCA9IHRvb2xiYXJJZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWw7XHJcbiAgICBpZiAoZ3JpZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQ7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBncmlkTW9kZWwucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gZ3JpZE1vZGVsLnBhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBpZiAoZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucyAmJiBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNob3dFZGl0Q29sdW1ucyA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBraW5kID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5raW5kO1xyXG4gICAgICBpZiAoa2luZCkge1xyXG4gICAgICAgIGxldCBsYXlvdXREZWY7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRBQkxFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRSRUUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRSRUU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5DQVJEUykge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuQ0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheW91dERlZikge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IGxheW91dERlZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8ucGFnaW5hdG9yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yID0gZ3JpZE1vZGVsLnBhZ2luYXRvcjtcclxuICAgICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQhLnBhZ2luYXRvcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignR3JpZE1vZGVsIGlzIHVuZGVmaW5lZCBpbiBjb21wb25lbnQhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUYWJsZSgpIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlclRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhclRyZWUoKTtcclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGFibGVUeXBlO1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8udGFibGVUeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZy50YWJsZVR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvblR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgbGV0IHRhYmxlQ29uZmlnOiBTbWFydFRhYmxlSW50ZXJmYWNlPEdyaWRSb3c+ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZyxcclxuICAgICAgICB0YWJsZVJvd3M6IHRhYmxlUm93LFxyXG4gICAgICAgIHRhYmxlVHlwZSxcclxuICAgICAgICBjdXN0b21TbWFydFRhYmxlSGVhZGVyczogYXdhaXQgdGhpcy5jb25zdHJ1Y3RIZWFkZXIoKSEsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGUsXHJcbiAgICAgICAgZXhwYW5kZWRDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICB0eXBlOiBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0uTk9STUFMLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25Db2RlczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucyEsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbnM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnM/Lm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOlxyXG4gICAgICAgICAgICAgIGNvZGUgPT09ICdfYWN0aW9uU2VwYXJhdG9yXydcclxuICAgICAgICAgICAgICAgID8gU21hcnRUYWJsZUJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogY29kZSB9KSxcclxuICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIC8vIGFyZ3M6IFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAgIC8vIF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0UHJvcGVydHkgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodENsYXNzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodENsYXNzID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRDbGFzcztcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRQcm9wZXJ0eSA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0UHJvcGVydHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZVxyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vbkFsbFNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3RBbGwuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGFyZWQgZm9yIHNpbXBsZSBjbGlja3NcclxuICAgICAgLy8gaWYgKCF0YWJsZUNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIC8vICAgdGFibGVDb25maWcub25Sb3dDbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrID0gdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUgPSAnc2VsZWN0YWJsZSc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YWJsZUNvbmZpZy5hc3luY09uRXhwYW5kKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcucm93RXhwYW5kZXIgPSB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uICYmXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ICYmXHJcbiAgICAgICAgc2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUuTk9ORVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBpc011bHRpcGxlID0gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ID0gJ2lkJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2VcclxuICAgICAgICAgIC5yb3dzIS5maWx0ZXIoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAubWFwKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkISk7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KGlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zbWFydFRhYmxlID0gbmV3IFNtYXJ0VGFibGU8YW55Pih0YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUcmVlKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGFibGUoKTtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93Pih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93Pih0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXM7XHJcbiAgICBsZXQgZXhwYW5kZWROb2RlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gbm9kZXNcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSlcclxuICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5mb3JFYWNoKChyb3c6IGFueSkgPT4gKHJvdy5sZXZlbCA9IHVuZGVmaW5lZCkpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcigocm93KSA9PiAhcm93LnBhcmVudCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uc2VsZWN0KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmNvbGxhcHNlQWxsKCk7XHJcbiAgICBleHBhbmRlZE5vZGVzLmZvckVhY2goKHJvd0lkKSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZmluZCgocm93KSA9PiByb3dJZCA9PT0gcm93LmlkKTtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuZChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExldmVsID0gKG5vZGU6IGFueSkgPT4gbm9kZS5sZXZlbCA/PyAwO1xyXG5cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JpZFJvdykgPT4gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogR3JpZFJvdyk6IEdyaWRSb3dbXSA9PiB7XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgcm93cyA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZS5yb3dzPy5maWx0ZXIoKHJvdykgPT5cclxuICAgICAgICBub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQgPT09IHJvdy5pZCEpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyb3dzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogR3JpZFJvdykgPT4gdGhpcy5pc0V4cGFuZGFibGUoX25vZGVEYXRhKTtcclxuXHJcbiAgdHJhbnNmb3JtZXIgPSAocm93OiBHcmlkUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAocm93IGFzIGFueSkubGV2ZWwgPSBsZXZlbDtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfTtcclxuXHJcbiAgZ2V0VHJlZUl0ZW0ocm93OiBHcmlkUm93KTogc3RyaW5nIHtcclxuICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHJvdy5kYXRhITtcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gZGF0YVtjb2xdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93LmlkITtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHRyZWVOb2RlIHNlbGVjdGlvbi4gU2VsZWN0L2Rlc2VsZWN0IGFsbCB0aGUgZGVzY2VuZGFudHMgbm9kZSAqL1xyXG4gIHRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25CZWZvcmUgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbCEuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxyXG4gICAgICAgIDogdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQWZ0ZXIgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQWZ0ZXIuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQmVmb3JlLmluY2x1ZGVzKHMpKTtcclxuICAgIGxldCB1bnNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQmVmb3JlLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkFmdGVyLmluY2x1ZGVzKHMpKTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyB3aGVuIHNlcnZpY2UgY2FsbCBpcyBhY3RpdmUgKCFkZXYpLCBvblNlbGVjdCB3aWxsIHRvZ2dsZSByb3cuc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gdW5zZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHVuaW9uID0gc2VsZWN0ZWRJZHMuY29uY2F0KHVuc2VsZWN0ZWRJZHMpO1xyXG4gICAgdGhpcy5vblNlbGVjdExpc3QodW5pb24pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBwYXJlbnQ6IEdyaWRSb3cgfCBudWxsID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9IHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBHZXQgdGhlIHBhcmVudCBub2RlIG9mIGEgbm9kZSAqL1xyXG4gIGdldFBhcmVudE5vZGUobm9kZTogR3JpZFJvdyk6IEdyaWRSb3cgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPVxyXG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBkZXNjQWxsU2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGxldCByZXN1bHQgPSBkZXNjZW5kYW50cy5zb21lKChjaGlsZCkgPT4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RIZWFkZXIoKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyW10+IHtcclxuICAgIGxldCBoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXJbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyAmJiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubWFwKGFzeW5jIChncmlkUm93OiBHcmlkUm93KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gZ3JpZFJvdy5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh1aUFjdGlvbjogYW55KSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1VpQWN0aW9ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICBuZXdVaUFjdGlvbnMubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yOiBVaUFjdGlvbkRlc2NyaXB0b3IgPVxyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT8uZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSA/PyAnQ09ERScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoYXN5bmMgKHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IGRlc2NDb2x1bW46IGFueSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEuZGVzY3JpcHRvciEuY29sdW1ucyEuZmluZChcclxuICAgICAgICAgIChjb2xEZXNjcmlwdG9yOiBHcmlkQ29sdW1uTWV0YSkgPT4gY29sRGVzY3JpcHRvci5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVyID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgICAgIChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRlc2NDb2x1bW4pIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0gPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0Py5maW5kKFxyXG4gICAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbi5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IG9yZGVyO1xyXG4gICAgICAgICAgbGV0IG9yZGVyTnVtYmVyO1xyXG4gICAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSkge1xyXG4gICAgICAgICAgICBvcmRlciA9XHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtLm9yZGVyID09PSBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeS5PcmRlckVudW0uQXNjXHJcbiAgICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICAgICAgICAgIDogU21hcnRUYWJsZU9yZGVyLkRFU0M7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICBvcmRlck51bWJlciA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGZpbHRlcjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+IGZpbHRlci5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBvcmRlck51bWJlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBvcmlnbmFsTGFiZWwgPSBjdXN0b21UYWJsZUhlYWRlcj8ubGFiZWwgPz8gZGVzY0NvbHVtbi5sYWJlbDtcclxuICAgICAgICAgIGxldCBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICAgICAgICBsYWJlbCA9IGF3YWl0IHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlPy5nZXQob3JpZ25hbExhYmVsKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gb3JpZ25hbExhYmVsO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gY3VzdG9tVGFibGVIZWFkZXI/LnByb3BlcnRpZXM7XHJcbiAgICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLk9mZnNldERhdGVUaW1lJykge1xyXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5eXkuTU0uZGQgSDptbScsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlJykge1xyXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5eXkuTU0uZGQnLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICAgIC4uLmN1c3RvbVRhYmxlSGVhZGVyLFxyXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ2RhdGEuJyArIGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIsXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBjb21wbGVtZW50ID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmlsdGVyKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+XHJcbiAgICAgICAgIWhlYWRlci5zb21lKCh0SDogU21hcnRUYWJsZUhlYWRlcikgPT4gdEgucHJvcGVydHlOYW1lLmluY2x1ZGVzKHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb21wbGVtZW50KSB7XHJcbiAgICAgIGhlYWRlci5wdXNoKC4uLmNvbXBsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8uc2ltcGxlQnV0dG9ucykge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucy5zaW1wbGVCdXR0b25zLmZvckVhY2goKHVpQWN0aW9uQ29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnc2ltcGxlX2J1dHRvbnMnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogdWlBY3Rpb25Db2RlIH0pLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogdWlBY3Rpb25Db2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgc2hvd0J1dHRvbklmOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY29kZSA9PT0gdWlBY3Rpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhlYWRlci5zb21lKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdteV9tZW51JykpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5yb3dVaUFjdGlvblR5cGUgPT09IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSkge1xyXG4gICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ215X21lbnUnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVSxcclxuICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgaWNvbjogJ21vcmVfdmVydCcsXHJcbiAgICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgYXJnczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uQ2hhbmdlUGFnZShldmVudDogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQucGFnZVNpemUgKiBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNldFBhZ2UoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlld1V1aWQhLFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG9mZnNldC50b1N0cmluZygpLFxyXG4gICAgICBsaW1pdC50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKGFyZ3M6IGFueVtdLCByb3c6IGFueSwgdWlBY3Rpb246IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IF91aUFjdGlvbjogVWlBY3Rpb247XHJcblxyXG4gICAgaWYgKCF1aUFjdGlvbikge1xyXG4gICAgICB1aUFjdGlvbiA9IHJvdy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUgPT09IGFyZ3NbMF0uY29kZSlbMF07XHJcbiAgICB9XHJcblxyXG4gICAgX3VpQWN0aW9uID0geyAuLi51aUFjdGlvbiB9O1xyXG4gICAgX3VpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICBtb2RlbDogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogYW55ID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UsXHJcbiAgICAgIHVpQWN0aW9uOiBfdWlBY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8udWlBY3Rpb25Nb2RlbENhbGxiYWNrKSB7XHJcbiAgICAgIHVpQWN0aW9uTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucyEudWlBY3Rpb25Nb2RlbENhbGxiYWNrKHVpQWN0aW9uTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUoX3VpQWN0aW9uLCB7XHJcbiAgICAgIHdpZGdldElkOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG5vZGVJZDogcm93LmlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1dHRvblRyYW5zbGF0b3IodWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISk7XHJcbiAgICBpZiAoIWRlc2MpIHtcclxuICAgICAgZGVzYyA9IHtcclxuICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQsXHJcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh1aUFjdGlvbi5kZXNjcmlwdG9yKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5tZXJnZUFjdGlvbkRlc2NyaXB0b3JJbnRvQ2xpZW50KHVpQWN0aW9uLmRlc2NyaXB0b3IhLCBkZXNjKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXNjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxheW91dERlZigpOiB0eXBlb2YgU21hcnRMYXlvdXREZWYge1xyXG4gICAgcmV0dXJuIFNtYXJ0TGF5b3V0RGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuICBwdWJsaWMgb25Eb3VibGVDbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IGRlZmF1bHRSb3dBY3Rpb246IFVpQWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LmRlZmF1bHRSb3dBY3Rpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb3dBY3Rpb25Db2RlID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgIGRlZmF1bHRSb3dBY3Rpb24gPSBncmlkUm93LmFjdGlvbnMuZmluZChcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHVpQWN0aW9uLmNvZGUgPT09IGRlZmF1bHRSb3dBY3Rpb25Db2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdFJvd0FjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCBncmlkUm93LCBkZWZhdWx0Um93QWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm9uU2VsZWN0TGlzdChbcm93SWRdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0Um93SW50ZXJuYWwocm93SWQ6IGFueSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbmQoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQgPT09IHJvd0lkKTtcclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdCh0aGlzLnNtYXJ0R3JpZCEsIHJvdyEpO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdExpc3Qocm93SWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0lkcy5mb3JFYWNoKChyb3dJZCkgPT4gdGhpcy5zZWxlY3RSb3dJbnRlcm5hbChyb3dJZCkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIGVkaXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgbGV0IGRpYWxvZ0RhdGE6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIHRpdGxlOiAnT3N6bG9wb2sgdGVzdHJlc3phYsOhc2EnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7fSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0czoge1xyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgdXVpZDogdGhpcy51dWlkLFxyXG4gICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICAgICAgdmlldzogdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LFxyXG4gICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsIHsgZGF0YTogZGlhbG9nRGF0YSB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwic21hcnRHcmlkLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWFydC1ncmlkLXRvb2xiYXJcIj5cclxuICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciAjdG9vbGJhciBbaWRdPVwiJ2dyaWRfbm90X2luaXRpYWxpemVkJ1wiPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIChjbGljayk9XCJlZGl0Q29sdW1ucygpXCJcclxuICAgICAgbWF0LW1pbmktZmFiXHJcbiAgICAgIGNvbG9yPVwidGV4dC1wcmltYXJ5XCJcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQuc2hvd0VkaXRDb2x1bW5zXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiQ29sdW1uc1wiIGNsYXNzPVwic21hcnQtZ3JpZC1lZGl0LWljb25cIlxyXG4gICAgICAgID52aWV3X2NvbHVtbnM8L21hdC1pY29uXHJcbiAgICAgID5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBbbmdDbGFzc109XCJpc0Jsb2NrZWQgPyAnYmxvY2tlZCcgOiAnJ1wiPjwvZGl2PiAtLT5cclxuICA8ZGl2IGNsYXNzPVwic21hcnRHcmlkQ29udGVudFwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5zaG93UmVzdWx0Q291bnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hcnRHcmlkLWRhdGEtbnVtYmVyXCI+XHJcbiAgICAgICAgICB7eyBzbWFydEdyaWQuZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10YWJsZS1jb250YWluZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0YWJsZT48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLkVYUEFOREFCTEVcIj5cclxuICAgICAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgICAgICNncmlkRXhwYW5kYWJsZVNlY3Rpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgZXhwYW5kYWJsZVNlY3Rpb24gb2YgZXhwYW5kYWJsZVNlY3Rpb25zXCJcclxuICAgICAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICAgID48L3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLkNBUkRcIlxyXG4gICAgICBjbGFzcz1cImNhcmRzLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPGFwcC1zbWFydC1ncmlkLWNhcmRcclxuICAgICAgICBjbGFzcz1cInNtYXJ0R3JpZC1jYXJkLWNvbnRhaW5lclwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhc2sgb2Ygc21hcnRHcmlkLmdyaWRNb2RlbC5wYWdlLnJvd3NcIlxyXG4gICAgICAgIFtpdGVtXT1cInRhc2tcIlxyXG4gICAgICAgIFtzbWFydEdyaWRdPVwic21hcnRHcmlkXCJcclxuICAgICAgICBbb25TZWxlY3RdPVwib25TZWxlY3QuYmluZCh0aGlzKVwiXHJcbiAgICAgID48L2FwcC1zbWFydC1ncmlkLWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5UUkVFICYmIHRyZWVDb250cm9sXCJcclxuICAgICAgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cInRyZWVEYXRhU291cmNlIVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbCFcIj5cclxuICAgICAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50PVwiMjRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIGNsYXNzPVwidHJlZS1idXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2xpc3QtbGVhZi1ub2RlXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+e3sgZ2V0VHJlZUl0ZW0obm9kZSkgfX08L21hdC1jaGVja2JveFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRyZWUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLml0ZW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgdHJlZUNvbnRyb2whLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgIDwvbWF0LXRyZWU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvciAmJiAhdHJlZUNvbnRyb2xcIlxyXG4gICAgI3BhZ2luYXRvclxyXG4gICAgW2xlbmd0aF09XCJsZW5ndGhcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -9792,6 +9792,7 @@ class SmartGridComponent {
|
|
|
9792
9792
|
}
|
|
9793
9793
|
if ((gridModel === null || gridModel === void 0 ? void 0 : gridModel.paginator) !== undefined) {
|
|
9794
9794
|
this.smartGrid.paginator = gridModel.paginator;
|
|
9795
|
+
this.service.paginator = this.smartGrid.paginator;
|
|
9795
9796
|
}
|
|
9796
9797
|
}
|
|
9797
9798
|
else {
|
|
@@ -9812,9 +9813,15 @@ class SmartGridComponent {
|
|
|
9812
9813
|
this.isBlocked = false;
|
|
9813
9814
|
});
|
|
9814
9815
|
}
|
|
9816
|
+
clearTable() {
|
|
9817
|
+
var _a;
|
|
9818
|
+
(_a = this.vcRefTable) === null || _a === void 0 ? void 0 : _a.clear();
|
|
9819
|
+
this.componentRefTable = undefined;
|
|
9820
|
+
}
|
|
9815
9821
|
renderTable() {
|
|
9816
9822
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
9817
9823
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9824
|
+
this.clearTree();
|
|
9818
9825
|
let tableRow = this.smartGrid.gridModel.page.rows.map((item) => {
|
|
9819
9826
|
return item;
|
|
9820
9827
|
});
|
|
@@ -9977,17 +9984,22 @@ class SmartGridComponent {
|
|
|
9977
9984
|
const selectionMode = (_b = (_a = this.service.gridModel.view) === null || _a === void 0 ? void 0 : _a.descriptor) === null || _b === void 0 ? void 0 : _b.selectionMode;
|
|
9978
9985
|
return selectionMode === GridSelectionMode.MULTIPLE;
|
|
9979
9986
|
}
|
|
9987
|
+
clearTree() {
|
|
9988
|
+
this.treeControl = undefined;
|
|
9989
|
+
this.treeDataSource = undefined;
|
|
9990
|
+
this.treeFlattener = undefined;
|
|
9991
|
+
this.treeChecklistSelection = undefined;
|
|
9992
|
+
}
|
|
9980
9993
|
renderTree() {
|
|
9981
|
-
var _a, _b, _c, _d
|
|
9982
|
-
|
|
9983
|
-
this.componentRefTable = undefined;
|
|
9994
|
+
var _a, _b, _c, _d;
|
|
9995
|
+
this.clearTable();
|
|
9984
9996
|
if (!this.treeDataSource) {
|
|
9985
9997
|
this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);
|
|
9986
9998
|
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
9987
9999
|
this.treeDataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
|
|
9988
10000
|
this.treeChecklistSelection = new SelectionModel(this.isMultipleSelection());
|
|
9989
10001
|
}
|
|
9990
|
-
let nodes = (
|
|
10002
|
+
let nodes = (_a = this.treeControl) === null || _a === void 0 ? void 0 : _a.dataNodes;
|
|
9991
10003
|
let expandedNodes;
|
|
9992
10004
|
if (nodes) {
|
|
9993
10005
|
expandedNodes = nodes
|
|
@@ -10000,14 +10012,14 @@ class SmartGridComponent {
|
|
|
10000
10012
|
}
|
|
10001
10013
|
this.smartGrid.gridModel.page.rows.forEach((row) => (row.level = undefined));
|
|
10002
10014
|
this.treeDataSource.data = this.smartGrid.gridModel.page.rows.filter((row) => !row.parent);
|
|
10003
|
-
(
|
|
10004
|
-
(
|
|
10015
|
+
(_b = this.treeChecklistSelection) === null || _b === void 0 ? void 0 : _b.clear();
|
|
10016
|
+
(_c = this.treeControl) === null || _c === void 0 ? void 0 : _c.dataNodes.forEach((node) => {
|
|
10005
10017
|
var _a;
|
|
10006
10018
|
if (node.selected) {
|
|
10007
10019
|
(_a = this.treeChecklistSelection) === null || _a === void 0 ? void 0 : _a.select(node);
|
|
10008
10020
|
}
|
|
10009
10021
|
});
|
|
10010
|
-
(
|
|
10022
|
+
(_d = this.treeControl) === null || _d === void 0 ? void 0 : _d.collapseAll();
|
|
10011
10023
|
expandedNodes.forEach((rowId) => {
|
|
10012
10024
|
var _a, _b;
|
|
10013
10025
|
let row = (_a = this.treeControl) === null || _a === void 0 ? void 0 : _a.dataNodes.find((row) => rowId === row.id);
|