@eqproject/eqp-dynamic-module 2.2.5 → 2.2.7
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/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +15 -7
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +15 -9
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +15 -7
- package/esm2020/lib/components/private/dynamic-module-field/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +12 -10
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +17 -9
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +11 -9
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +12 -4
- package/esm2020/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +11 -3
- package/esm2020/lib/components/private/form-records/view-form-record/view-form-record.component.mjs +12 -88
- package/esm2020/lib/services/utilityHelper.services.mjs +6 -6
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +118 -144
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +118 -144
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +3 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +3 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +3 -1
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +3 -3
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +3 -1
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +2 -2
- package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +6 -4
- package/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.d.ts +3 -1
- package/lib/components/private/form-records/view-form-record/view-form-record.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -22,6 +22,7 @@ export class EqpDynamicModuleComponent {
|
|
|
22
22
|
constructor(utilityHelperService, changeDetector) {
|
|
23
23
|
this.utilityHelperService = utilityHelperService;
|
|
24
24
|
this.changeDetector = changeDetector;
|
|
25
|
+
this.debugMode = false;
|
|
25
26
|
this.starterViewMode = DynamicModuleViewModeEnum.LIST;
|
|
26
27
|
this.userID = "0";
|
|
27
28
|
this.showTitle = true;
|
|
@@ -74,6 +75,11 @@ export class EqpDynamicModuleComponent {
|
|
|
74
75
|
this.dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;
|
|
75
76
|
this.loader = false;
|
|
76
77
|
}
|
|
78
|
+
debugLog(message, element) {
|
|
79
|
+
if (this.debugMode) {
|
|
80
|
+
console.log(message, element);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
77
83
|
async ngOnInit() {
|
|
78
84
|
this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;
|
|
79
85
|
this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(this.showTitle, this.showSaveButton, this.showBackButton, this.userID);
|
|
@@ -193,7 +199,7 @@ export class EqpDynamicModuleComponent {
|
|
|
193
199
|
onAddViewEditRecord(event) {
|
|
194
200
|
if (event != null) {
|
|
195
201
|
this.onlyView = event.onlyView;
|
|
196
|
-
|
|
202
|
+
this.debugLog("Version modulo", event.record.Version);
|
|
197
203
|
if (this.endPointConfiguration &&
|
|
198
204
|
this.endPointConfiguration.Records &&
|
|
199
205
|
this.endPointConfiguration.Records.GetByIDEndPoint) {
|
|
@@ -210,10 +216,10 @@ export class EqpDynamicModuleComponent {
|
|
|
210
216
|
ParamType: ParamTypeEnum["Query param"],
|
|
211
217
|
},
|
|
212
218
|
];
|
|
213
|
-
|
|
219
|
+
this.debugLog("query params", dynamicModuleParams);
|
|
214
220
|
this.utilityHelperService.RunEndPointCall(this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint, dynamicModuleParams, (res) => {
|
|
215
221
|
this.form = res;
|
|
216
|
-
|
|
222
|
+
this.debugLog("RES", res);
|
|
217
223
|
// preparo i dati del record
|
|
218
224
|
var dynamicRecordParams = [
|
|
219
225
|
{
|
|
@@ -380,11 +386,13 @@ export class EqpDynamicModuleComponent {
|
|
|
380
386
|
}
|
|
381
387
|
}
|
|
382
388
|
EqpDynamicModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EqpDynamicModuleComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
383
|
-
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", duplicateRecord: "duplicateRecord", SaveJSON: "SaveJSON", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", afterDuplicateRecord: "afterDuplicateRecord" }, ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\
|
|
389
|
+
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", duplicateRecord: "duplicateRecord", SaveJSON: "SaveJSON", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", afterDuplicateRecord: "afterDuplicateRecord" }, ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n[configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "formID", "form"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDuplicateRecord", "onAfterDuplicateRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "onDuplicateRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i5.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i6.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }, { kind: "component", type: i7.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i8.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["debugMode", "configurations"], outputs: ["onSaveJson"] }] });
|
|
384
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EqpDynamicModuleComponent, decorators: [{
|
|
385
391
|
type: Component,
|
|
386
|
-
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\
|
|
387
|
-
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: {
|
|
392
|
+
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n[configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
|
|
393
|
+
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debugMode: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], configurations: [{
|
|
388
396
|
type: Input
|
|
389
397
|
}], formID: [{
|
|
390
398
|
type: Input
|
|
@@ -423,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
423
431
|
}], afterDuplicateRecord: [{
|
|
424
432
|
type: Output
|
|
425
433
|
}] } });
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7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TSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBRSxDQUFBO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7dUhBNWNVLHlCQUF5QjsyR0FBekIseUJBQXlCLG1wQkNoQ3RDLHkxRUF3RUE7NEZEeENhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7MklBTXJCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkErQkksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW1cIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICAvLyBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZztcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhcnRlclZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG5cclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZyA9IFwiMFwiO1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB2YWx1ZXM6IEFycmF5PFJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIEZvcm1KU09OID0gXCJcIjtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIEBJbnB1dCgpIG9uU2F2ZUJhY2tUb0xpc3QgPSBmYWxzZTtcclxuICBASW5wdXQoKSBvbkJhY2tUbzogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IG51bGw7XHJcblxyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG5cclxuICAvL0BJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIC8vIGRlZmF1bHRMaXN0QWN0aW9uczogZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICAvLyBGb3JtSlNPTjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBxdWFuZG8gc2kgc2FsdmEsIGVsaW1pbmEgbyBkdXBsaWNhIHVuIHJlY29yZFxyXG4gICAqIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkdXBsaWNhdGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIFNhdmVKU09OOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8qKlxyXG4gICAqIEV2ZW50aSBlbWVzc2kgRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvLFxyXG4gICAqIGwnZWxpbWluYXppb25lIG8gbGEgZHVwbGljYXppb25lIGRpIHVuIHJlY29yZCBhbGwnZW5kcG9pbnQgc3BlY2lmaWNhdG8uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckR1cGxpY2F0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIGxhc3Rmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBGb3JtVHlwZUVudW0gPSBGb3JtVHlwZUVudW07XHJcbiAgZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW07XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZDtcclxuICBvbmx5VmlldzogYm9vbGVhbjtcclxuICB2aWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub25CYWNrVG8gPSAodGhpcy5vbkJhY2tUbyA9PSBudWxsKSA/IHRoaXMuc3RhcnRlclZpZXdNb2RlIDogdGhpcy5vbkJhY2tUbztcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5zaG93QmFja0J1dHRvbixcclxuICAgICAgdGhpcy51c2VySURcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy52YWx1ZXMsXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLFxyXG4gICAgICB0aGlzLnVzZXJJRFxyXG4gICAgKTtcclxuICAgIHRoaXMuZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnKFxyXG4gICAgICB0aGlzLkZvcm1KU09OXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29uZmlndXJhdGlvbnMuY29udGV4dDtcclxuICAgIHRoaXMuYmFzZVNlcnZlclVybCA9IHRoaXMuY29uZmlndXJhdGlvbnMuYmFzZVNlcnZlclVybDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy51c2VyVG9rZW47XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy90aGlzLmZvcm1JRCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZm9ybUlEXHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlXHJcbiAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG5cclxuICAgIGlmICh0aGlzLkZvcm1KU09OID09IFwiXCIpIHtcclxuICAgICAgLy8gcHJlbmRlIGlsIGZvcm0gZSBpbXBvc3RhIGxhIHZpZXdtb2RlIGNvcnJldHRhXHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEUpIHtcclxuICAgICAgLy8gZGEgdmVkZXJlIGluIGdldEZvcm1CeUlEXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpLCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KF8gPT4geyB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gIC8vICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgLy8gICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgLy8gICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gIC8vICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAvLyAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgLy8gICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gIC8vICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5sYXN0Zm9ybSA9IHJlcztcclxuICAvLyAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgLy8gICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuXHJcbiAgLy8gICAgICAgLy8gaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSkge1xyXG4gIC8vICAgICAgIC8vICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpO1xyXG4gIC8vICAgICAgIC8vIH1cclxuICAvLyAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIChlcnIpID0+IHt9XHJcbiAgLy8gICApO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgw6ggbnVsbCBlIG5vbiBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGkgdmFyaSBlbmRwb2ludCBhbGxvcmFcclxuICAgKiBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBodHRwIHBlciByZWN1cGVyYXJlL3NhbHZhcmUgaSBkYXRpLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmIHRoaXMuYmFzZVNlcnZlclVybCkge1xyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5Db25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5iYXNlU2VydmVyVXJsLFxyXG4gICAgICAgICAgdGhpcy51c2VyVG9rZW5cclxuICAgICAgICApOyAgICBcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgLy8gYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgLy8gICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgLy8gICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgXTtcclxuICAgIC8vICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAvLyAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgLy8gICAgICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgIC8vICAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gci5BbnN3ZXJEYXRlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkdvQmFjaygpe1xyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG8gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVmVyc2lvbiBtb2R1bG9cIiwgZXZlbnQucmVjb3JkLlZlcnNpb24pXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicXVlcnkgcGFyYW1zXCIsIGR5bmFtaWNNb2R1bGVQYXJhbXMpXHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFU1wiLCByZXMpXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvblZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkXHJcbiAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBTQVZFXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGlsIGNvbXBvbmVudGUgZG9wbyBjaGUgaWwgcmVjb3JkIMOoIHN0YXRvIGFnZ2l1bnRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBlIHN0YXRhIHJpY2hpZXN0YSB1bmEgYWdnaXVudG8gbyB1bmEgbW9kaWZpY2EgZGVsIHJlY29yZCBuZWxsJyBhZGQtZm9ybS1yZWNvcmQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZC5lbWl0KGV2ZW50KTtcclxuICAgIC8vIGlmICh0aGlzLm9uU2F2ZUJhY2tUb0xpc3QpIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLk5PTkU7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUb1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU2F2ZUpzb24ocmVjb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuU2F2ZUpTT04uZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIFNBVkVcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICByZWxvYWQoKXtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB0aGlzLmxvYWRlciA9IHRydWUsXHJcbiAgICAgIDUwXHJcbiAgICApXHJcbiAgfVxyXG4gIFxyXG4gIC8vI3JlZ2lvbiBEVVBMSUNBVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIHByZXNlbnRlIG5lbGxhIGxpc3RhLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBsYSBkdXBsaWNhemlvbmUgbGF0byBzZXJ2ZXIgYWxsb3JhIGVmZmV0dHVhIHVuYSBjaGlhbWF0YSBwYXNzYW5kbyBuZWwgYm9keVxyXG4gICAqIHVuIG9nZ2V0dG8gY29udGVuZW50ZSBpbCByZWNvcmQgZGEgZHVwbGljYXJlLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gZGkgb3V0cHV0IFwiZHVwbGljYXRlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBvbkR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkgeyAgICBcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EdXBsaWNhdGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJEdXBsaWNhcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkR1cGxpY2F0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEdXBsaWNhdGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gRFVQTElDQVRFIFxyXG5cclxuICAvLyNyZWdpb24gREVMRVRFIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRGVsZXRlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICAgIFwiRWxpbWluYXJlIGlsIHJlY29yZCBzZWxlemlvbmF0bz9cIixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHJlY29yZC5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludCxcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZnRlckRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5yZWxvYWRUYWJsZXMoKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQWZ0ZXJEZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZ09uSW5pdCgpLCA1MCApXHJcbiAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZWRucmVnaW9uIERFTEVURSBcclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG48IS0tIFtyZWNvcmRdPVwiJ2IzZDk0M2MwLTljMDEtNDk3My05NDhiLTdhYTQxODYzNGY3MidcIiAtLT5cclxuPHZpZXctZm9ybS1yZWNvcmRcclxuY2xhc3M9XCJkeW5hbWljLW1vZHVsZS12aWV3XCJcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5WSUVXXCJcclxuW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5bcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkLklEXCJcclxuKGdvQmFja0V2ZW50KT1cIm9uR29CYWNrKClcIlxyXG4+XHJcbjwvdmlldy1mb3JtLXJlY29yZD5cclxuXHJcbjxhZGQtZm9ybS1yZWNvcmRcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRVwiXHJcbiAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuXHJcbiAgKHNhdmVSZWNvcmRFdmVudCk9XCJvblNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4+XHJcbjwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuPGxpc3QtZm9ybS1yZWNvcmRcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3RcIlxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVFwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5cclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlTGlzdENvbmZpZ1wiXHJcblxyXG4gIChvblZpZXdSZWNvcmQpPVwib25WaWV3UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRHVwbGljYXRlUmVjb3JkKT1cIm9uRHVwbGljYXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFmdGVyRHVwbGljYXRlUmVjb3JkKT1cIm9uQWZ0ZXJEdXBsaWNhdGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFmdGVyRGVsZXRlUmVjb3JkKT1cIm9uQWZ0ZXJEZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbj5cclxuPC9saXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuPHJlcGFpci1mb3JtLWZpZWxkc1xyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtcmVwYWlyXCJcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlJFUEFJUlwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnXCJcclxuXHJcbiAgKG9uU2F2ZUpzb24pPVwib25TYXZlSnNvbigkZXZlbnQpXCJcclxuPlxyXG48L3JlcGFpci1mb3JtLWZpZWxkcz5cclxuXHJcbjxsaXN0LXZpZXctZm9ybS1yZWNvcmRcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUV0lFV1wiXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkR1cGxpY2F0ZVJlY29yZCk9XCJvbkR1cGxpY2F0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgPlxyXG48L2xpc3Qtdmlldy1mb3JtLXJlY29yZD5cclxuIl19
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7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QUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bVwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGRlYnVnTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRlYnVnTG9nKG1lc3NhZ2U6IHN0cmluZywgZWxlbWVudD86IGFueSl7XHJcbiAgICBpZih0aGlzLmRlYnVnTW9kZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZztcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhcnRlclZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG5cclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZyA9IFwiMFwiO1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB2YWx1ZXM6IEFycmF5PFJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIEZvcm1KU09OID0gXCJcIjtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIEBJbnB1dCgpIG9uU2F2ZUJhY2tUb0xpc3QgPSBmYWxzZTtcclxuICBASW5wdXQoKSBvbkJhY2tUbzogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IG51bGw7XHJcblxyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG5cclxuICAvL0BJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIC8vIGRlZmF1bHRMaXN0QWN0aW9uczogZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICAvLyBGb3JtSlNPTjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBxdWFuZG8gc2kgc2FsdmEsIGVsaW1pbmEgbyBkdXBsaWNhIHVuIHJlY29yZFxyXG4gICAqIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkdXBsaWNhdGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIFNhdmVKU09OOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8qKlxyXG4gICAqIEV2ZW50aSBlbWVzc2kgRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvLFxyXG4gICAqIGwnZWxpbWluYXppb25lIG8gbGEgZHVwbGljYXppb25lIGRpIHVuIHJlY29yZCBhbGwnZW5kcG9pbnQgc3BlY2lmaWNhdG8uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckR1cGxpY2F0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIGxhc3Rmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBGb3JtVHlwZUVudW0gPSBGb3JtVHlwZUVudW07XHJcbiAgZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW07XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZDtcclxuICBvbmx5VmlldzogYm9vbGVhbjtcclxuICB2aWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub25CYWNrVG8gPSAodGhpcy5vbkJhY2tUbyA9PSBudWxsKSA/IHRoaXMuc3RhcnRlclZpZXdNb2RlIDogdGhpcy5vbkJhY2tUbztcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5zaG93QmFja0J1dHRvbixcclxuICAgICAgdGhpcy51c2VySURcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy52YWx1ZXMsXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLFxyXG4gICAgICB0aGlzLnVzZXJJRFxyXG4gICAgKTtcclxuICAgIHRoaXMuZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnKFxyXG4gICAgICB0aGlzLkZvcm1KU09OXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29uZmlndXJhdGlvbnMuY29udGV4dDtcclxuICAgIHRoaXMuYmFzZVNlcnZlclVybCA9IHRoaXMuY29uZmlndXJhdGlvbnMuYmFzZVNlcnZlclVybDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy51c2VyVG9rZW47XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy90aGlzLmZvcm1JRCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZm9ybUlEXHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlXHJcbiAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG5cclxuICAgIGlmICh0aGlzLkZvcm1KU09OID09IFwiXCIpIHtcclxuICAgICAgLy8gcHJlbmRlIGlsIGZvcm0gZSBpbXBvc3RhIGxhIHZpZXdtb2RlIGNvcnJldHRhXHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEUpIHtcclxuICAgICAgLy8gZGEgdmVkZXJlIGluIGdldEZvcm1CeUlEXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpLCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KF8gPT4geyB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gIC8vICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgLy8gICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgLy8gICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gIC8vICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAvLyAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgLy8gICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gIC8vICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5sYXN0Zm9ybSA9IHJlcztcclxuICAvLyAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgLy8gICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuXHJcbiAgLy8gICAgICAgLy8gaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSkge1xyXG4gIC8vICAgICAgIC8vICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpO1xyXG4gIC8vICAgICAgIC8vIH1cclxuICAvLyAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIChlcnIpID0+IHt9XHJcbiAgLy8gICApO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgw6ggbnVsbCBlIG5vbiBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGkgdmFyaSBlbmRwb2ludCBhbGxvcmFcclxuICAgKiBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBodHRwIHBlciByZWN1cGVyYXJlL3NhbHZhcmUgaSBkYXRpLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmIHRoaXMuYmFzZVNlcnZlclVybCkge1xyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5Db25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5iYXNlU2VydmVyVXJsLFxyXG4gICAgICAgICAgdGhpcy51c2VyVG9rZW5cclxuICAgICAgICApOyAgICBcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgLy8gYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgLy8gICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgLy8gICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgXTtcclxuICAgIC8vICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAvLyAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgLy8gICAgICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgIC8vICAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gci5BbnN3ZXJEYXRlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkdvQmFjaygpe1xyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG8gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcbiAgICAgIHRoaXMuZGVidWdMb2coXCJWZXJzaW9uIG1vZHVsb1wiLCBldmVudC5yZWNvcmQuVmVyc2lvbilcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcInF1ZXJ5IHBhcmFtc1wiLCBkeW5hbWljTW9kdWxlUGFyYW1zKVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIlJFU1wiLCByZXMpXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvblZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkXHJcbiAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBTQVZFXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGlsIGNvbXBvbmVudGUgZG9wbyBjaGUgaWwgcmVjb3JkIMOoIHN0YXRvIGFnZ2l1bnRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBlIHN0YXRhIHJpY2hpZXN0YSB1bmEgYWdnaXVudG8gbyB1bmEgbW9kaWZpY2EgZGVsIHJlY29yZCBuZWxsJyBhZGQtZm9ybS1yZWNvcmQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZC5lbWl0KGV2ZW50KTtcclxuICAgIC8vIGlmICh0aGlzLm9uU2F2ZUJhY2tUb0xpc3QpIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLk5PTkU7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUb1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU2F2ZUpzb24ocmVjb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuU2F2ZUpTT04uZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIFNBVkVcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICByZWxvYWQoKXtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB0aGlzLmxvYWRlciA9IHRydWUsXHJcbiAgICAgIDUwXHJcbiAgICApXHJcbiAgfVxyXG4gIFxyXG4gIC8vI3JlZ2lvbiBEVVBMSUNBVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIHByZXNlbnRlIG5lbGxhIGxpc3RhLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBsYSBkdXBsaWNhemlvbmUgbGF0byBzZXJ2ZXIgYWxsb3JhIGVmZmV0dHVhIHVuYSBjaGlhbWF0YSBwYXNzYW5kbyBuZWwgYm9keVxyXG4gICAqIHVuIG9nZ2V0dG8gY29udGVuZW50ZSBpbCByZWNvcmQgZGEgZHVwbGljYXJlLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gZGkgb3V0cHV0IFwiZHVwbGljYXRlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBvbkR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkgeyAgICBcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EdXBsaWNhdGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJEdXBsaWNhcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkR1cGxpY2F0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEdXBsaWNhdGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gRFVQTElDQVRFIFxyXG5cclxuICAvLyNyZWdpb24gREVMRVRFIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRGVsZXRlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICAgIFwiRWxpbWluYXJlIGlsIHJlY29yZCBzZWxlemlvbmF0bz9cIixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHJlY29yZC5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludCxcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZnRlckRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5yZWxvYWRUYWJsZXMoKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQWZ0ZXJEZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZ09uSW5pdCgpLCA1MCApXHJcbiAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZWRucmVnaW9uIERFTEVURSBcclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG48IS0tIFtyZWNvcmRdPVwiJ2IzZDk0M2MwLTljMDEtNDk3My05NDhiLTdhYTQxODYzNGY3MidcIiAtLT5cclxuPHZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtdmlld1wiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkLklEXCJcclxuICAoZ29CYWNrRXZlbnQpPVwib25Hb0JhY2soKVwiXHJcbj5cclxuPC92aWV3LWZvcm0tcmVjb3JkPlxyXG5cclxuPGFkZC1mb3JtLXJlY29yZFxyXG4qbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEVcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtmb3JtXT1cImZvcm1cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbdXNlcklEXT1cInVzZXJJRFwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcblxyXG4gIChzYXZlUmVjb3JkRXZlbnQpPVwib25TYXZlUmVjb3JkKCRldmVudClcIlxyXG4gIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuPlxyXG48L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbjxsaXN0LWZvcm0tcmVjb3JkXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3RcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuXHJcbiAgKG9uVmlld1JlY29yZCk9XCJvblZpZXdSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EdXBsaWNhdGVSZWNvcmQpPVwib25EdXBsaWNhdGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEdXBsaWNhdGVSZWNvcmQpPVwib25BZnRlckR1cGxpY2F0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEZWxldGVSZWNvcmQpPVwib25BZnRlckRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuPlxyXG48L2xpc3QtZm9ybS1yZWNvcmQ+XHJcblxyXG48cmVwYWlyLWZvcm0tZmllbGRzXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5SRVBBSVJcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtcmVwYWlyXCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnXCJcclxuXHJcbiAgKG9uU2F2ZUpzb24pPVwib25TYXZlSnNvbigkZXZlbnQpXCJcclxuPlxyXG48L3JlcGFpci1mb3JtLWZpZWxkcz5cclxuXHJcbjxsaXN0LXZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RXSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG5bY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtjb21waWxlQ29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRHVwbGljYXRlUmVjb3JkKT1cIm9uRHVwbGljYXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChzYXZlUmVjb3JkRXZlbnQpPVwib25TYXZlUmVjb3JkKCRldmVudClcIlxyXG4gIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICA+XHJcbjwvbGlzdC12aWV3LWZvcm0tcmVjb3JkPlxyXG4iXX0=
|