@tsi-developpement/tsi-shared-ui 1.9.4 → 1.9.6
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/esm2022/lib/end-points/endpoints.mjs +1 -9
- package/esm2022/lib/services/validation/input-registry.service.mjs +20 -1
- package/esm2022/lib/shared.module.mjs +5 -1
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +30 -1
- package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +31 -3
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +2 -2
- package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.mjs +11 -2
- package/esm2022/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.mjs +29 -17
- package/esm2022/lib/tsi-directives/index.mjs +2 -1
- package/esm2022/lib/tsi-directives/presentation-designer-base.directive.mjs +3 -3
- package/esm2022/lib/tsi-directives/presentation-designer-tab-panel.directive.mjs +94 -0
- package/esm2022/lib/tsi-directives/presentation-designer.directive.mjs +3 -3
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +502 -325
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/end-points/endpoints.d.ts +0 -8
- package/lib/services/validation/input-registry.service.d.ts +1 -0
- package/lib/shared.module.d.ts +50 -49
- package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +3 -0
- package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +2 -0
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +0 -5
- package/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.d.ts +0 -5
- package/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.d.ts +9 -1
- package/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.d.ts +8 -1
- package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +0 -5
- package/lib/tsi-directives/index.d.ts +1 -0
- package/lib/tsi-directives/presentation-designer-base.directive.d.ts +1 -1
- package/lib/tsi-directives/presentation-designer-tab-panel.directive.d.ts +41 -0
- package/lib/tsi-directives/presentation-designer.directive.d.ts +1 -1
- package/package.json +1 -1
|
@@ -75,6 +75,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
75
75
|
this._presentationDesignerBaseService = inject(PresentationDesignerBaseService);
|
|
76
76
|
this.configApplied = false;
|
|
77
77
|
this.directiveElements = [];
|
|
78
|
+
this.designModeActive = false;
|
|
78
79
|
}
|
|
79
80
|
//#region handle lifecycle hooks
|
|
80
81
|
ngOnDestroy() {
|
|
@@ -289,13 +290,23 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
289
290
|
this._addedDirectiveSubscritpion =
|
|
290
291
|
this._presentationDesignerService.addedDirectiveObservable.subscribe((data) => {
|
|
291
292
|
if (!data.treated) {
|
|
292
|
-
this.
|
|
293
|
+
if (this.designModeActive && this._layoutHelperService.isDesignMode) {
|
|
294
|
+
this.processSingleElementInDesignMode(data);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
this.processSingleElement(data);
|
|
298
|
+
}
|
|
293
299
|
}
|
|
294
300
|
});
|
|
295
301
|
this._addedBaseDirectiveSubscritpion =
|
|
296
302
|
this._presentationDesignerBaseService.addedDirectiveObservable.subscribe((data) => {
|
|
297
303
|
if (!data.treated) {
|
|
298
|
-
this.
|
|
304
|
+
if (this.designModeActive && this._layoutHelperService.isDesignMode) {
|
|
305
|
+
this.processSingleElementInDesignMode(data);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
this.processSingleElement(data);
|
|
309
|
+
}
|
|
299
310
|
}
|
|
300
311
|
});
|
|
301
312
|
}
|
|
@@ -309,6 +320,21 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
309
320
|
directive.execute(true, presentationSettingDetail?.configuration);
|
|
310
321
|
}
|
|
311
322
|
}
|
|
323
|
+
// Directives registering while design mode is active (content first rendered
|
|
324
|
+
// during configuration, e.g. panels of a nested tab view) missed the
|
|
325
|
+
// toggleDesignMode() pass: decorate them the same way and add them to
|
|
326
|
+
// directiveElements so saveProperties() keeps a detail for them.
|
|
327
|
+
processSingleElementInDesignMode(directive) {
|
|
328
|
+
if (this.directiveElements.includes(directive)) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
this.directiveElements.push(directive);
|
|
332
|
+
directive.insertElement();
|
|
333
|
+
if (directive instanceof PresentationDesignerDirective) {
|
|
334
|
+
directive.selectApproriateColumns(this.presentationRequest);
|
|
335
|
+
}
|
|
336
|
+
directive.addCheckboxesToInputs(this.presentationRequest);
|
|
337
|
+
}
|
|
312
338
|
applyConfigurationToElements() {
|
|
313
339
|
this.directiveElements?.forEach((directive) => {
|
|
314
340
|
let presentationSettingDetail = this.presentationRequest?.presentationSettingDetails?.find((x) => x.blockName == directive.presentationDesigner);
|
|
@@ -351,6 +377,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
351
377
|
this._renderer?.appendChild(parentElement, tsiButtonRef.location.nativeElement);
|
|
352
378
|
this.presentationRequest =
|
|
353
379
|
this._presentationSettingService.getPresentationSettingByComponentIdentifierSync(this.getComponentIdentifier(), this.descriminatorValue) ?? new PresentationSetting();
|
|
380
|
+
this.designModeActive = true;
|
|
354
381
|
this.directiveElements?.forEach((input) => {
|
|
355
382
|
input.insertElement();
|
|
356
383
|
if (input instanceof PresentationDesignerDirective) {
|
|
@@ -432,6 +459,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
432
459
|
}
|
|
433
460
|
processState() {
|
|
434
461
|
this._layoutHelperService.isDesignMode = false;
|
|
462
|
+
this.designModeActive = false;
|
|
435
463
|
this._layoutHelperService._designModeListSubject.next(false);
|
|
436
464
|
let savePropertiesBtn = document.getElementById(this.savePropertyBtnId);
|
|
437
465
|
this._renderer.removeChild(savePropertiesBtn?.parentNode, savePropertiesBtn);
|
|
@@ -480,4 +508,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
480
508
|
type: HostListener,
|
|
481
509
|
args: ['dblclick', ['$event']]
|
|
482
510
|
}] } });
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8s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ckMsNkJBQTJCOzs0RkRtQ0wsb0JBQW9CO2tCQUx6QyxTQUFTOytCQUNFLG1CQUFtQjt1SEFpRU8sV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUUsV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUQsUUFBUTtzQkFBeEMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBRy9CLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSXJDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBR0QsU0FBUztzQkFBNUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBRUcsYUFBYTtzQkFBakQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBNlJuQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWJhc2UvYXBwLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiwgSU1vZGFsU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnREZXNjcmltaW5hdG9yLCBTZWFyY2hGaWVsZCwgUHJlc2VudGF0aW9uU2V0dGluZywgUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLCBMYXlvdXRIZWxwZXJTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRzaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2J1dHRvbi1jb21wb25lbnRzL3RzaS1idXR0b24vdHNpLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lWaWV3R3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS12aWV3LWdyaWQvdHNpLXZpZXctZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1nZW5lcmljLWNydWQvdHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0YWJsZUdyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL2VkaXRhYmxlLWdyaWQvZWRpdGFibGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1kaXJlY3RpdmVzL3ByZXNlbnRhdGlvbi1kZXNpZ25lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZW50YXRpb24tc2V0dGluZy9wcmVzZW50YXRpb24tZGVzaWduZXItYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10c2ktbGlzdC1iYXNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWxpc3QtYmFzZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWxpc3QtYmFzZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHNpTGlzdEJhc2VDb21wb25lbnRcclxuICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uZmlnTW9kZUJ1dHRvbklkOiBzdHJpbmcgPSAnY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0JztcclxuICBzYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZSA9ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3Qtc2F2ZS1wcm9wZXJ0aWVzJztcclxuICBzYXZlUHJvcGVydHlCdG5JZCA9ICdzYXZlLXByb3BlcnR5LWJ0bic7XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3VwZXIuZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZvcm1FbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5mb3JtRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIuYnVzaW5lc3NDbGFzcyA9IHZhbHVlXHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIC8vIEBUT0RPIE1lZEFsaSA6IMOgIHRlc3RlclxyXG4gICAgLy90aGlzLmdldEVudGl0eUluZm9ybWF0aW9uKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcj86IENvbXBvbmVudERlc2NyaW1pbmF0b3I7XHJcbiAgc2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IodmFsdWU6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvciAmJlxyXG4gICAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yLnByb3BlcnR5VmFsdWUgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuYnVzaW5lc3NDbGFzcyAhPSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWU/LnByb3BlcnR5VmFsdWUgIT0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlPy5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICB0aXRsZUNvbXBvbmVudDogc3RyaW5nID0gJyc7XHJcbiAgbW9kYWxTaXplOiBJTW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5NZWRpdW07XHJcbiAgY29tcDogYW55O1xyXG4gIHNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+ID0gW107XHJcbiAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gIHByaXZhdGUgZ2V0IGlzQWR2YW5jZWRTZWFyY2hNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jb25maWc/LmRhdGEgJiZcclxuICAgICAgdGhpcy5jb25maWcuZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXNBZHZhbmNlZFNlYXJjaCcpICYmXHJcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEuaXNBZHZhbmNlZFNlYXJjaCA9PT0gdHJ1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkPzogVHNpR2VuZXJpY0NydWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkPzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkPzogVHNpVmlld0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0dyaWRzOiBUc2lHZW5lcmljR3JpZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0NydWRzOiBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkczogVHNpVmlld0dyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKEVkaXRhYmxlR3JpZENvbXBvbmVudCkgZWRpdGFibGVHcmlkczogRWRpdGFibGVHcmlkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VJbmZvU2VydmljZSA9IGluamVjdChUc2lOb3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSk7XHJcblxyXG4gIHNob3dIaWRlQ29uZmlnQnRuUmVmOiBOb2RlIHwgdW5kZWZpbmVkO1xyXG4gIHNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmOiBOb2RlIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuICBfZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgY29uZmlnQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgX2RpYWxvZ1JlZmVyZW5jZT86IER5bmFtaWNEaWFsb2dSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGxpZmVjeWNsZSBob29rc1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8vIGxldCBuZXdBZGRlZERpcmVjdGl2ZXMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZpbHRlcih4ID0+IHgudHJlYXRlZCA9PSBmYWxzZSlcclxuICAgIC8vIGNvbnNvbGUubG9nKFwibmV3QWRkZWREaXJlY3RpdmVzIDogXCIsIG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICAgIC8vIGlmIChuZXdBZGRlZERpcmVjdGl2ZXMubGVuZ3RoID4gMCAmJiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fCAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSkge1xyXG4gICAgLy8gICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMobmV3QWRkZWREaXJlY3RpdmVzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgfHxcclxuICAgICAgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgdW5kZWZpbmVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk7XHJcblxyXG4gICAgdGhpcy5faW5pdFZpZXdHcmlkSWZFeGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdBZnRlckNvbnRlbnRDaGVja2VkKCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hHZW5lcmljQ3J1ZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaEdlbmVyaWNHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmluaXREZXNpZ25Nb2RlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKTtcclxuICB9XHJcblxyXG4gIHNldE1vZGFsU2l6ZShtb2RhbFNpemU6IElNb2RhbFNpemUpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxTaXplID0gbW9kYWxTaXplO1xyXG4gIH1cclxuXHJcbiAgZGVzY3JpbWluYXRvclZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgJiZcclxuICAgICAgICAhcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFbGVtZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHVuZGVmaW5lZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3R3JpZCkge1xyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtRW5kcG9pbnQgIT0gdGhpcy5mb3JtRW5kcG9pbnQpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtTmFtZSAhPSB0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgIT0gdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoR2VuZXJpY0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZCkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaEdlbmVyaWNDcnVkSW5mb3JtYXRpb25JZkV4aXN0KCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ICE9IHRoaXMuZm9ybUVuZHBvaW50KSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgIT0gdGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5idXNpbmVzc0NsYXNzICE9IHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9pbml0Vmlld0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmlld0dyaWQpIHtcclxuICAgICAgLy9pbml0IHJlcG9ydGluZ1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dBY3Rpb25Db2x1bW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uID1cclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICAvL2luaXQgcmVwb3J0aW5nXHJcbiAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RGVsZXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0VkaXRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dJbmZvQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RG93bmxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dSZXBvcnRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5uZ09uSW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcblxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuXHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBY3RpdmVTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtcztcclxuICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBpdGVtcyBhcmUgOiAnLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBoYW5kbGVSb3dEYmxDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgdWlkID0gdGhpcy5nZW5lcmljQ3J1ZD8uc2VsZWN0ZWRJdGVtc1swXTtcclxuICAgIGlmICh1aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbFdpdGhJZCh1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZU1vZGFsV2l0aElkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWZlcmVuY2UpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5jbG9zZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvdWJsZUNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVSb3dEYmxDbGljayhldmVudCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBpbml0RGVzaWduTW9kZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5kZXNpZ25Nb2RlTGlzdE9ic2VydmFibGUuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICghZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uZmlnQXBwbGllZCA9IHRydWU7XHJcblxyXG4gICAgLy8gbGV0IGlucHV0c1RvQWRkID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICAgLy8gICAuZmlsdGVyKHggPT4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZSh5ID0+IHkuYmxvY2tOYW1lID09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZSkpXHJcblxyXG4gICAgLy8gaW5wdXRzVG9BZGQuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAvLyAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyKT8uY29uZmlndXJhdGlvblxyXG4gICAgLy8gICBpbnB1dC5leGVjdXRlKHRydWUsIGNvbmZpZ3VyYXRpb24pXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICBsZXQgc2hvd0hpZGVDb25maWdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbmZpZ01vZGVCdXR0b25JZCk7XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHNob3dIaWRlQ29uZmlnQnRuKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmID0gc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICBjb25zdCBvbGRCdXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICB0aGlzLnNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAob2xkQnV0dG9ucykge1xyXG4gICAgICAgIEFycmF5LmZyb20ob2xkQnV0dG9ucykuZm9yRWFjaCgob2xkQnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKHNob3dIaWRlQ29uZmlnQnRuPy5wYXJlbnROb2RlLCBvbGRCdXR0b24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gc2hvd0hpZGVDb25maWdCdG4ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZChwYXJlbnRFbGVtZW50LCBzaG93SGlkZUNvbmZpZ0J0bik7XHJcblxyXG4gICAgICBjb25zdCB0c2lCdXR0b25SZWYgPVxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG5cclxuICAgICAgaWYgKHRzaUJ1dHRvblJlZikge1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dChcclxuICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0c2lCdXR0b25SZWYuc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWQnLCB0aGlzLnNhdmVQcm9wZXJ0eUJ0bklkKTtcclxuXHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLmluc3RhbmNlLm9uQ2xpY2suc3Vic2NyaWJlKCgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyPy5hcHBlbmRDaGlsZChcclxuICAgICAgICAgIHBhcmVudEVsZW1lbnQsXHJcbiAgICAgICAgICB0c2lCdXR0b25SZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWVcclxuICAgICk/LnVpZDtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc291cmNlczogQXJyYXk8eyBpZD86IHN0cmluZzsgZm9ybU5hbWU/OiBzdHJpbmc7IGdldFN0YXRlOiAoKSA9PiBhbnkgfT4gPSBbXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHMsXHJcbiAgICAgICAgLi4udGhpcy52aWV3R3JpZHMsXHJcbiAgICAgICAgLi4udGhpcy5lZGl0YWJsZUdyaWRzLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgY29uc3QgbWF0Y2hlZFNvdXJjZSA9IHNvdXJjZXMuZmluZChcclxuICAgICAgICAoeCkgPT5cclxuICAgICAgICAgIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fFxyXG4gICAgICAgICAgeC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAobWF0Y2hlZFNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IGdyaWRTdGF0ZSA9IG1hdGNoZWRTb3VyY2UuZ2V0U3RhdGUoKTtcclxuICAgICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTpcclxuICAgICAgICAgICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoXHJcbiAgICAgICAgICBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gJydcclxuICAgICAgICApLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzO1xyXG5cclxuICAgIC8vdGhpcy5sb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2VcclxuICAgICAgICAudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyhcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCxcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWRcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdGF0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZVxyXG4gICAgICAgIC5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0YXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTdGF0ZSgpIHtcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlTGlzdFN1YmplY3QubmV4dChmYWxzZSk7XHJcblxyXG4gICAgbGV0IHNhdmVQcm9wZXJ0aWVzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zYXZlUHJvcGVydHlCdG5JZCk7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHNhdmVQcm9wZXJ0aWVzQnRuPy5wYXJlbnROb2RlLFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0blxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SGlkZUNvbmZpZ0J0blBhcmVudFJlZiAmJiB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYsXHJcbiAgICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgIGlucHV0LnJlbW92ZVNob3dIaWRlQ2hlY2tib3goKTtcclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9XHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBpbnB1dC5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsICYmXHJcbiAgICAgICAgIXByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG4gIC8vICNlbmQgcmVnaW9uXHJcbn1cclxuIiwiPHA+dHNpLWxpc3QtYmFzZSB3b3JrcyE8L3A+Il19
|
|
511
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8s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QkFFRSxXQUFXO3NCQUE5QyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFFRCxRQUFRO3NCQUF4QyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFHL0IsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFJckMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFHRCxTQUFTO3NCQUE1QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFFRyxhQUFhO3NCQUFqRCxZQUFZO3VCQUFDLHFCQUFxQjtnQkE4Um5DLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBNb2RhbFNpemVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBHcmlkQ29sdW1uLCBJTW9kYWxTaXplIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIFNlYXJjaEZpZWxkLCBQcmVzZW50YXRpb25TZXR0aW5nLCBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UsIExheW91dEhlbHBlclNlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvYnV0dG9uLWNvbXBvbmVudHMvdHNpLWJ1dHRvbi90c2ktYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVZpZXdHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLXZpZXctZ3JpZC90c2ktdmlldy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRhYmxlR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvZWRpdGFibGUtZ3JpZC9lZGl0YWJsZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMvcHJlc2VudGF0aW9uLWRlc2lnbmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNlbnRhdGlvbi1zZXR0aW5nL3ByZXNlbnRhdGlvbi1kZXNpZ25lci1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1saXN0LWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUc2lMaXN0QmFzZUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcHJpdmF0ZSBfcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25maWdNb2RlQnV0dG9uSWQ6IHN0cmluZyA9ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3QnO1xyXG4gIHNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lID0gJ2NvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdC1zYXZlLXByb3BlcnRpZXMnO1xyXG4gIHNhdmVQcm9wZXJ0eUJ0bklkID0gJ3NhdmUtcHJvcGVydHktYnRuJztcclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgZm9ybUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuICAgIHN1cGVyLmZvcm1FbmRwb2ludCA9IGVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5idXNpbmVzc0NsYXNzID0gdmFsdWVcclxuICAgIHRoaXMuZm9ybUVuZHBvaW50ID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgLy8gQFRPRE8gTWVkQWxpIDogw6AgdGVzdGVyXHJcbiAgICAvL3RoaXMuZ2V0RW50aXR5SW5mb3JtYXRpb24odGhpcy5fYnVzaW5lc3NDbGFzcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnREZXNjcmltaW5hdG9yPzogQ29tcG9uZW50RGVzY3JpbWluYXRvcjtcclxuICBzZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcih2YWx1ZTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvciA9IHZhbHVlO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yICYmXHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IucHJvcGVydHlWYWx1ZSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5idXNpbmVzc0NsYXNzICE9IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh2YWx1ZT8ucHJvcGVydHlWYWx1ZSAhPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWU/LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb21wb25lbnREZXNjcmltaW5hdG9yKCk6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3I7XHJcbiAgfVxyXG5cclxuICBjb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIHRpdGxlQ29tcG9uZW50OiBzdHJpbmcgPSAnJztcclxuICBtb2RhbFNpemU6IElNb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLk1lZGl1bTtcclxuICBjb21wOiBhbnk7XHJcbiAgc2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gPSBbXTtcclxuICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgaXNBZHZhbmNlZFNlYXJjaE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbmZpZz8uZGF0YSAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5kYXRhLmhhc093blByb3BlcnR5KCdpc0FkdmFuY2VkU2VhcmNoJykgJiZcclxuICAgICAgdGhpcy5jb25maWcuZGF0YS5pc0FkdmFuY2VkU2VhcmNoID09PSB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCkgZ2VuZXJpY0NydWQ/OiBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZChUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWQ/OiBUc2lHZW5lcmljR3JpZENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZChUc2lWaWV3R3JpZENvbXBvbmVudCkgdmlld0dyaWQ/OiBUc2lWaWV3R3JpZENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljR3JpZENvbXBvbmVudClcclxuICBnZW5lcmljR3JpZHM6IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljQ3J1ZENvbXBvbmVudClcclxuICBnZW5lcmljQ3J1ZHM6IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihUc2lWaWV3R3JpZENvbXBvbmVudCkgdmlld0dyaWRzOiBUc2lWaWV3R3JpZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVHcmlkQ29tcG9uZW50KSBlZGl0YWJsZUdyaWRzOiBFZGl0YWJsZUdyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2UgPSBpbmplY3QoTGF5b3V0SGVscGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfbWVzc2FnZUluZm9TZXJ2aWNlID0gaW5qZWN0KFRzaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyID0gaW5qZWN0KEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlKTtcclxuXHJcbiAgc2hvd0hpZGVDb25maWdCdG5SZWY6IE5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWY6IE5vZGUgfCB1bmRlZmluZWQgfCBudWxsO1xyXG4gIF9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBjb25maWdBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gW107XHJcbiAgcHJpdmF0ZSBkZXNpZ25Nb2RlQWN0aXZlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXNjcmltaW5hdG9yVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyBfZGlhbG9nUmVmZXJlbmNlPzogRHluYW1pY0RpYWxvZ1JlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cclxuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWN0aXZlU3Vic2NyaXB0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgLy8gbGV0IG5ld0FkZGVkRGlyZWN0aXZlcyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCkuZmlsdGVyKHggPT4geC50cmVhdGVkID09IGZhbHNlKVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJuZXdBZGRlZERpcmVjdGl2ZXMgOiBcIiwgbmV3QWRkZWREaXJlY3RpdmVzKVxyXG4gICAgLy8gaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lIHx8ICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSBpZiAobmV3QWRkZWREaXJlY3RpdmVzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKG5ld0FkZGVkRGlyZWN0aXZlcyk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fFxyXG4gICAgICAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgJiZcclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCB1bmRlZmluZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faW5pdEdlbmVyaWNDcnVkSWZFeGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX2luaXRHZW5lcmljR3JpZElmRXhpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0Vmlld0dyaWRJZkV4aXN0KCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ0FmdGVyQ29udGVudENoZWNrZWQoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hWaWV3R3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaEdlbmVyaWNDcnVkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoR2VuZXJpY0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuaW5pdERlc2lnbk1vZGVTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgLy8gICByZXR1cm4gYCR7dGhpcy5fbXlOYW1lKCl9XyR7dGhpcy5kZXNjcmltaW5hdG9yVmFsdWV9YFxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuX215TmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW9kYWxTaXplKG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbFNpemUgPSBtb2RhbFNpemU7XHJcbiAgfVxyXG5cclxuICBkZXNjcmltaW5hdG9yVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCAmJlxyXG4gICAgICAgICFwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUVsZW1lbnQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLnByZXNlbnRhdGlvblNldHRpbmdzID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ICYmXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgdW5kZWZpbmVkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hWaWV3R3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpIHtcclxuICAgIGlmICh0aGlzLnZpZXdHcmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCAhPSB0aGlzLmZvcm1FbmRwb2ludCkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmZvcm1OYW1lICE9IHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudmlld0dyaWQuYnVzaW5lc3NDbGFzcyAhPSB0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hHZW5lcmljR3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoR2VuZXJpY0NydWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgIT0gdGhpcy5mb3JtRW5kcG9pbnQpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSAhPSB0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgIT0gdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luaXRWaWV3R3JpZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aWV3R3JpZCkge1xyXG4gICAgICAvL2luaXQgcmVwb3J0aW5nXHJcbiAgICAgIHRoaXMudmlld0dyaWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMudmlld0dyaWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zaG93RXhwb3J0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uID1cclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRHZW5lcmljR3JpZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0FjdGlvbkNvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEdlbmVyaWNDcnVkSWZFeGlzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkKSB7XHJcbiAgICAgIC8vaW5pdCByZXBvcnRpbmdcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEZWxldGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RWRpdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0luZm9CdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEb3dubG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1JlcG9ydGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1VwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLm5nT25Jbml0KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLnByZXNlbnRhdGlvblNldHRpbmdzID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0O1xyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkQmFzZURpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW1zO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIGl0ZW1zIGFyZSA6ICcsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG4gIGhhbmRsZVJvd0RibENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCB1aWQgPSB0aGlzLmdlbmVyaWNDcnVkPy5zZWxlY3RlZEl0ZW1zWzBdO1xyXG4gICAgaWYgKHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jbG9zZU1vZGFsV2l0aElkKHVpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsb3NlTW9kYWxXaXRoSWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSkge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/LmNsb3NlKGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG91YmxlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZVJvd0RibENsaWNrKGV2ZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGluaXREZXNpZ25Nb2RlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5fZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb24gPVxyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmRlc2lnbk1vZGVMaXN0T2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24gPVxyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVzaWduTW9kZUFjdGl2ZSAmJiB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnRJbkRlc2lnbk1vZGUoZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2FkZGVkQmFzZURpcmVjdGl2ZVN1YnNjcml0cGlvbiA9XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVzaWduTW9kZUFjdGl2ZSAmJiB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnRJbkRlc2lnbk1vZGUoZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRGlyZWN0aXZlcyByZWdpc3RlcmluZyB3aGlsZSBkZXNpZ24gbW9kZSBpcyBhY3RpdmUgKGNvbnRlbnQgZmlyc3QgcmVuZGVyZWRcclxuICAvLyBkdXJpbmcgY29uZmlndXJhdGlvbiwgZS5nLiBwYW5lbHMgb2YgYSBuZXN0ZWQgdGFiIHZpZXcpIG1pc3NlZCB0aGVcclxuICAvLyB0b2dnbGVEZXNpZ25Nb2RlKCkgcGFzczogZGVjb3JhdGUgdGhlbSB0aGUgc2FtZSB3YXkgYW5kIGFkZCB0aGVtIHRvXHJcbiAgLy8gZGlyZWN0aXZlRWxlbWVudHMgc28gc2F2ZVByb3BlcnRpZXMoKSBrZWVwcyBhIGRldGFpbCBmb3IgdGhlbS5cclxuICBwcm9jZXNzU2luZ2xlRWxlbWVudEluRGVzaWduTW9kZShkaXJlY3RpdmU6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSkpIHtcclxuICAgIGlmICh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmluY2x1ZGVzKGRpcmVjdGl2ZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMucHVzaChkaXJlY3RpdmUpO1xyXG5cclxuICAgIGRpcmVjdGl2ZS5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICBpZiAoZGlyZWN0aXZlIGluc3RhbmNlb2YgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUpIHtcclxuICAgICAgZGlyZWN0aXZlLnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuICAgICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25maWdBcHBsaWVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBsZXQgaW5wdXRzVG9BZGQgPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgICAvLyAgIC5maWx0ZXIoeCA9PiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKHkgPT4geS5ibG9ja05hbWUgPT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiB5LmlzQmxvY2tWaXNpYmxlKSlcclxuXHJcbiAgICAvLyBpbnB1dHNUb0FkZC5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgIC8vICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXIpPy5jb25maWd1cmF0aW9uXHJcbiAgICAvLyAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgY29uZmlndXJhdGlvbilcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRGVzaWduTW9kZSgpIHtcclxuICAgIGxldCBzaG93SGlkZUNvbmZpZ0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29uZmlnTW9kZUJ1dHRvbklkKTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoc2hvd0hpZGVDb25maWdCdG4pIHtcclxuICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZiA9IHNob3dIaWRlQ29uZmlnQnRuPy5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIGNvbnN0IG9sZEJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChvbGRCdXR0b25zKSB7XHJcbiAgICAgICAgQXJyYXkuZnJvbShvbGRCdXR0b25zKS5mb3JFYWNoKChvbGRCdXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGUsIG9sZEJ1dHRvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBzaG93SGlkZUNvbmZpZ0J0bi5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LnJlbW92ZUNoaWxkKHBhcmVudEVsZW1lbnQsIHNob3dIaWRlQ29uZmlnQnRuKTtcclxuXHJcbiAgICAgIGNvbnN0IHRzaUJ1dHRvblJlZiA9XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZj8uY3JlYXRlQ29tcG9uZW50KFRzaUJ1dHRvbkNvbXBvbmVudCk7XHJcblxyXG4gICAgICBpZiAodHNpQnV0dG9uUmVmKSB7XHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLnNldElucHV0KFxyXG4gICAgICAgICAgJ3RleHQnLFxyXG4gICAgICAgICAgJ3NoYXJlZF90c2lfY29tcG9uZW50X3NhdmVfY29uZmlnX3Nob3dfaGlkZSdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWNvbicsICdzYXZlJyk7XHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLnNldElucHV0KCdpZCcsIHRoaXMuc2F2ZVByb3BlcnR5QnRuSWQpO1xyXG5cclxuICAgICAgICB0c2lCdXR0b25SZWYuaW5zdGFuY2Uub25DbGljay5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zYXZlUHJvcGVydGllcygpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgdHNpQnV0dG9uUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgdGhpcy5zYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgcGFyZW50RWxlbWVudCxcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZXNpZ25Nb2RlQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICAgIGlucHV0Lmluc2VydEVsZW1lbnQoKTtcclxuICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnB1dC5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGJsb2NrTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGJsb2NrTmFtZVxyXG4gICAgKT8udWlkO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW107XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBjb25zdCBzb3VyY2VzOiBBcnJheTx7IGlkPzogc3RyaW5nOyBmb3JtTmFtZT86IHN0cmluZzsgZ2V0U3RhdGU6ICgpID0+IGFueSB9PiA9IFtcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkcyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkcyxcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkcyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZHMsXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBjb25zdCBtYXRjaGVkU291cmNlID0gc291cmNlcy5maW5kKFxyXG4gICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8XHJcbiAgICAgICAgICB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChtYXRjaGVkU291cmNlKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZFN0YXRlID0gbWF0Y2hlZFNvdXJjZS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOlxyXG4gICAgICAgICAgIWRpcmVjdGl2ZS5zaG93SGlkZUNoZWNrYm94Q29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2NoZWNrZWQsXHJcbiAgICAgICAgdWlkOiB0aGlzLmdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChcclxuICAgICAgICAgIGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyAnJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbixcclxuICAgICAgfTtcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM7XHJcblxyXG4gICAgLy90aGlzLmxvYWRpbmcgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZVxyXG4gICAgICAgIC51cGRhdGVQcmVzZW50YXRpb25TZXR0aW5nKFxyXG4gICAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LFxyXG4gICAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZFxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0YXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmNyZWF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5sb2FkUHJlc2VudGF0aW9uU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RhdGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1N0YXRlKCkge1xyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGVzaWduTW9kZUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUxpc3RTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGxldCBzYXZlUHJvcGVydGllc0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2F2ZVByb3BlcnR5QnRuSWQpO1xyXG5cclxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0bj8ucGFyZW50Tm9kZSxcclxuICAgICAgc2F2ZVByb3BlcnRpZXNCdG5cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYgJiYgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZikge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcclxuICAgICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmLFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWZcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBpbnB1dC5yZW1vdmVTaG93SGlkZUNoZWNrYm94KCk7XHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCAmJlxyXG4gICAgICAgICFwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kIHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1saXN0LWJhc2Ugd29ya3MhPC9wPiJdfQ==
|